diff --git a/src/main/jay/grammars/php.jay b/src/main/jay/grammars/php.jay index 0a7543eca..6c564c07c 100644 --- a/src/main/jay/grammars/php.jay +++ b/src/main/jay/grammars/php.jay @@ -846,7 +846,7 @@ typeref: ; typename: - qualifiedname { $$= new TypeName($1); } + qualifiedname { $$= 'callable' === $1 ? new TypeName('->var', null) : new TypeName($1); } ; arraytype: diff --git a/src/main/jay/grammars/xp.jay b/src/main/jay/grammars/xp.jay index 57fd658d7..4bf48ec7a 100644 --- a/src/main/jay/grammars/xp.jay +++ b/src/main/jay/grammars/xp.jay @@ -1051,6 +1051,7 @@ typeref: typename | arraytype | maptype + | functiontype ; typename: @@ -1076,6 +1077,18 @@ typeparameter: | '?' T_EXTENDS qualifiedname { $$= new TypeName($3.'+'); } ; +signature: + '(' ')' { $$= array(); } + | typeref { $$= array($1); } + | '(' typeref ')' { $$= array($2); } + | '(' signature ',' typeref ')' { $$= array_merge($2, array($4)); } +; + +functiontype: + '{' '?' T_ARROW typeref '}' { $$= new TypeName('->'.$4->compoundName(), null); } + | '{' signature T_ARROW typeref '}' { $$= new TypeName('->'.$4->compoundName(), $2); } +; + name_list: typename { $$= array($1); } | typename ',' name_list { $$= array_merge(array($1), $3); } diff --git a/src/main/php/xp/compiler/emit/php/Emitter.class.php b/src/main/php/xp/compiler/emit/php/Emitter.class.php index 055bafac2..9cc1c7064 100755 --- a/src/main/php/xp/compiler/emit/php/Emitter.class.php +++ b/src/main/php/xp/compiler/emit/php/Emitter.class.php @@ -1312,6 +1312,8 @@ protected function emitParameters($b, array $parameters, $delim) { // No runtime type checks } else if ($t->isArray() || $t->isMap()) { $b->append('array '); + } else if ($t->isFunction()) { + $b->append('callable '); } else if ($t->isClass() && !$this->scope[0]->declarations[0]->name->isPlaceHolder($t)) { $b->append($this->literal($ptr))->append(' '); } else if ('{' === $delim) { diff --git a/src/main/php/xp/compiler/syntax/php/Parser.class.php b/src/main/php/xp/compiler/syntax/php/Parser.class.php index ba1e212cb..2a9b2b865 100644 --- a/src/main/php/xp/compiler/syntax/php/Parser.class.php +++ b/src/main/php/xp/compiler/syntax/php/Parser.class.php @@ -2402,7 +2402,7 @@ public function yyparse($yyLex) { } break; case 236: #line 849 "src/main/jay/grammars/php.jay" - { $yyVal= new TypeName($yyVals[0+$yyTop]); } break; + { $yyVal= 'callable' === $yyVals[0+$yyTop] ? new TypeName('->var', null) : new TypeName($yyVals[0+$yyTop]); } break; case 237: #line 853 "src/main/jay/grammars/php.jay" { $yyVal= new TypeName('var[]'); } break; diff --git a/src/main/php/xp/compiler/syntax/xp/Parser.class.php b/src/main/php/xp/compiler/syntax/xp/Parser.class.php index 6f7ae055e..497af31f9 100644 --- a/src/main/php/xp/compiler/syntax/xp/Parser.class.php +++ b/src/main/php/xp/compiler/syntax/xp/Parser.class.php @@ -182,9 +182,10 @@ class Parser extends \text\parser\generic\AbstractParser { 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 101, 101, 120, 120, 122, 121, 121, 124, 121, 125, 121, - 123, 123, 10, 10, 10, 32, 32, 32, 12, 12, - 95, 96, 126, 126, 127, 127, 21, 21, 49, 49, - 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, + 123, 123, 10, 10, 10, 32, 32, 32, 32, 12, + 12, 95, 96, 127, 127, 128, 128, 129, 129, 129, + 129, 126, 126, 21, 21, 49, 49, 130, 130, 131, + 131, 131, 131, 131, 131, 131, 131, ); protected static $yyLen= array(2, 3, 0, 0, 4, 0, 1, 1, 2, 5, 6, @@ -216,1428 +217,1453 @@ class Parser extends \text\parser\generic\AbstractParser { 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 1, 2, 0, 4, 2, 0, 6, 0, 4, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, - 3, 4, 1, 3, 1, 3, 1, 3, 0, 1, - 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 4, 3, 4, 1, 3, 1, 3, 2, 1, 3, + 5, 5, 5, 1, 3, 0, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, ); protected static $yyDefRed= array(0, 3, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 293, 0, 0, 295, 294, 0, 15, 0, 313, - 315, 314, 317, 319, 318, 320, 316, 1, 0, 68, - 0, 311, 8, 0, 0, 4, 0, 0, 0, 0, - 0, 69, 20, 24, 22, 312, 18, 19, 0, 0, + 0, 293, 0, 0, 295, 294, 0, 15, 0, 320, + 322, 321, 324, 326, 325, 327, 323, 1, 0, 68, + 0, 318, 8, 0, 0, 4, 0, 0, 0, 0, + 0, 69, 20, 24, 22, 319, 18, 19, 0, 0, 0, 14, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 9, 0, 0, 0, 70, 67, 0, 0, 0, 0, 11, 12, 10, 74, 75, 223, 0, 0, 229, 225, 228, 226, 227, 0, 0, 81, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 73, - 0, 0, 296, 0, 297, 298, 0, 303, 27, 0, - 0, 0, 31, 35, 0, 0, 232, 0, 0, 0, - 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 231, 203, 204, 205, 206, - 207, 0, 0, 234, 0, 0, 79, 80, 83, 84, - 0, 78, 0, 0, 0, 0, 300, 29, 35, 0, + 0, 0, 0, 296, 0, 297, 298, 299, 0, 304, + 27, 0, 0, 0, 31, 35, 0, 0, 232, 0, + 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 231, 203, 204, + 205, 206, 207, 0, 0, 234, 0, 0, 79, 80, + 83, 84, 0, 78, 0, 0, 0, 0, 0, 0, + 0, 0, 301, 29, 35, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 0, 196, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 218, 0, 194, 0, 0, + 0, 218, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 278, 279, - 0, 284, 292, 291, 289, 191, 281, 0, 0, 0, - 224, 0, 0, 306, 0, 301, 304, 0, 308, 0, - 0, 25, 0, 34, 36, 37, 0, 0, 0, 42, + 0, 0, 0, 0, 278, 279, 0, 284, 292, 291, + 289, 191, 281, 0, 0, 0, 224, 0, 0, 307, + 0, 0, 308, 0, 0, 0, 302, 305, 0, 315, + 0, 0, 25, 0, 34, 36, 37, 0, 0, 0, + 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 186, 188, 0, 100, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 186, 188, 0, 100, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 211, 0, 202, 0, 0, - 283, 0, 175, 0, 0, 237, 235, 82, 302, 21, - 0, 0, 0, 0, 0, 0, 0, 23, 0, 35, - 0, 0, 193, 0, 0, 0, 0, 0, 189, 0, - 221, 190, 219, 0, 0, 184, 181, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 287, 113, 0, - 131, 117, 121, 123, 119, 127, 129, 115, 125, 0, - 0, 0, 0, 111, 0, 63, 0, 0, 0, 0, - 0, 0, 35, 45, 0, 43, 0, 0, 0, 0, - 0, 0, 0, 212, 0, 195, 0, 285, 290, 0, - 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 38, 137, 112, 0, 0, 61, 59, - 103, 104, 105, 106, 107, 108, 0, 0, 0, 0, - 0, 0, 0, 179, 180, 197, 215, 0, 0, 0, - 0, 0, 0, 0, 138, 0, 0, 0, 0, 155, - 0, 0, 128, 130, 0, 0, 0, 0, 142, 222, - 0, 0, 93, 0, 0, 0, 0, 0, 65, 0, - 48, 0, 0, 53, 33, 0, 178, 213, 182, 288, - 114, 0, 0, 0, 0, 132, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 50, 0, 98, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, - 55, 0, 49, 54, 47, 0, 0, 139, 0, 0, - 0, 156, 0, 0, 0, 0, 0, 0, 143, 0, - 0, 0, 0, 94, 96, 95, 0, 0, 0, 0, - 0, 164, 170, 134, 0, 161, 162, 0, 0, 122, - 0, 146, 0, 0, 0, 0, 97, 102, 0, 85, - 0, 64, 0, 0, 0, 56, 0, 0, 160, 169, - 163, 135, 0, 0, 0, 158, 116, 151, 153, 0, - 0, 149, 136, 0, 0, 62, 60, 0, 0, 0, - 0, 124, 120, 0, 0, 0, 126, 150, 87, 86, - 66, 166, 0, 0, 0, 159, 0, 0, 0, 0, - 171, 118, 0, 154, 167, 0, 152, 0, 0, 165, + 0, 0, 0, 0, 0, 0, 211, 0, 202, 0, + 0, 283, 0, 175, 0, 0, 237, 235, 82, 303, + 0, 310, 0, 0, 21, 0, 0, 0, 0, 0, + 0, 0, 23, 0, 35, 0, 0, 193, 0, 0, + 0, 0, 0, 189, 0, 221, 190, 219, 0, 0, + 184, 181, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 287, 312, 0, 313, 113, 0, 131, 117, + 121, 123, 119, 127, 129, 115, 125, 0, 0, 0, + 0, 111, 0, 63, 0, 0, 0, 0, 0, 0, + 35, 45, 0, 43, 0, 0, 0, 0, 0, 0, + 0, 212, 0, 195, 0, 285, 290, 0, 311, 0, + 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 38, 137, 112, 0, 0, 61, 59, 103, + 104, 105, 106, 107, 108, 0, 0, 0, 0, 0, + 0, 0, 179, 180, 197, 215, 0, 0, 0, 0, + 0, 0, 0, 138, 0, 0, 0, 0, 155, 0, + 0, 128, 130, 0, 0, 0, 0, 142, 222, 0, + 0, 93, 0, 0, 0, 0, 0, 65, 0, 48, + 0, 0, 53, 33, 0, 178, 213, 182, 288, 114, + 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 50, 0, 98, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 52, 55, + 0, 49, 54, 47, 0, 0, 139, 0, 0, 0, + 156, 0, 0, 0, 0, 0, 0, 143, 0, 0, + 0, 0, 94, 96, 95, 0, 0, 0, 0, 0, + 164, 170, 134, 0, 161, 162, 0, 0, 122, 0, + 146, 0, 0, 0, 0, 97, 102, 0, 85, 0, + 64, 0, 0, 0, 56, 0, 0, 160, 169, 163, + 135, 0, 0, 0, 158, 116, 151, 153, 0, 0, + 149, 136, 0, 0, 62, 60, 0, 0, 0, 0, + 124, 120, 0, 0, 0, 126, 150, 87, 86, 66, + 166, 0, 0, 0, 159, 0, 0, 0, 0, 171, + 118, 0, 154, 167, 0, 152, 0, 0, 165, ); protected static $yyDgoto= array(2, - 3, 6, 28, 141, 4, 7, 8, 17, 53, 18, - 253, 113, 61, 99, 121, 171, 63, 258, 62, 101, - 123, 394, 254, 255, 256, 381, 259, 260, 336, 337, - 382, 192, 351, 392, 483, 143, 473, 484, 516, 478, - 543, 572, 477, 474, 428, 437, 519, 41, 30, 42, - 58, 94, 95, 96, 144, 475, 476, 383, 384, 294, - 411, 421, 461, 587, 415, 418, 502, 416, 417, 422, - 590, 419, 420, 414, 452, 554, 454, 468, 455, 469, - 591, 592, 605, 606, 604, 555, 579, 556, 557, 577, - 613, 578, 145, 264, 115, 116, 146, 358, 271, 186, - 236, 187, 194, 181, 280, 268, 147, 148, 149, 150, - 151, 448, 195, 196, 152, 103, 153, 154, 327, 237, - 238, 319, 239, 410, 320, 117, 118, 31, 32, + 3, 6, 28, 143, 4, 7, 8, 17, 53, 18, + 264, 114, 61, 99, 123, 177, 63, 269, 62, 101, + 125, 412, 265, 266, 267, 399, 270, 271, 351, 352, + 400, 198, 366, 410, 502, 145, 492, 503, 535, 497, + 562, 591, 496, 493, 447, 456, 538, 41, 30, 42, + 58, 94, 95, 96, 146, 494, 495, 401, 402, 305, + 430, 440, 480, 606, 434, 437, 521, 435, 436, 441, + 609, 438, 439, 433, 471, 573, 473, 487, 474, 488, + 610, 611, 624, 625, 623, 574, 598, 575, 576, 596, + 632, 597, 147, 275, 116, 117, 148, 373, 282, 192, + 242, 193, 200, 187, 291, 279, 149, 150, 151, 152, + 153, 467, 201, 202, 154, 103, 155, 156, 338, 243, + 244, 330, 245, 428, 331, 118, 119, 120, 170, 31, + 32, ); - protected static $yySindex = array( -235, - 0, 0, -217, 82, 224, 923, -217, 0, 80, 94, - 98, 0, -209, -209, 0, 0, 101, 0, 118, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, - 993, 0, 0, 82, 82, 0, -24, 166, -28, 182, - 30, 0, 0, 0, 0, 0, 0, 0, -28, -28, - -28, 0, 157, 0, 110, 129, 0, 204, 118, 993, - 82, 82, 82, 199, 0, 215, 254, 0, 82, 82, - 567, 0, 0, 269, 113, 137, 113, 0, 0, 0, - 0, 0, 0, 82, 153, 0, 0, 0, 0, 0, - 279, 47, 0, 420, 370, 0, 334, 82, 154, 82, - 353, 154, 5217, 443, 646, 646, -215, 0, -155, 0, - 210, 427, 0, 441, 0, 0, 191, 0, 0, 82, - 417, 516, 0, 0, 442, 5507, 0, 5507, 5507, 5507, - 5507, 5507, 5507, 0, 5507, 397, 529, 0, 5538, 466, - 189, 3842, -36, 0, 547, 0, 0, 0, 0, 0, - 0, 508, 566, 0, 5507, 80, 0, 0, 0, 0, - 555, 0, 82, 72, 530, 334, 0, 0, 0, 82, - 1303, 369, 321, 2939, -85, -85, -91, -85, -85, -85, - 72, 0, 5507, 0, 5507, 377, -36, 427, 0, -51, - 2769, 128, 287, 594, 593, 0, -21, 0, 5507, 5507, - 5507, 5507, 5507, 5507, 5507, 5507, 5507, 5507, 5507, 5507, - 5507, 5507, 5507, 5507, 5228, 5257, 5071, 5507, 5158, 5507, - 5507, 5507, 5507, 5507, 5507, 5507, 82, 5507, 0, 0, - 72, 0, 0, 0, 0, 0, 0, -36, -209, 5507, - 0, 239, 599, 0, 263, 0, 0, 1331, 0, 524, - 394, 0, 127, 0, 0, 0, 0, 549, 31, 0, - 5507, 632, 441, -36, 552, 556, 3842, 5507, 3842, 5406, - 0, 0, -36, 0, 617, 377, -21, 0, 377, -228, - 4003, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, - 4038, 4038, 3842, 622, 91, 310, 812, 5507, 183, 5507, - 183, 5507, 5507, 141, 141, 5507, 5507, 141, 141, 205, - 205, -9, -9, -9, -91, 0, -85, 0, 5507, 5507, - 0, 642, 0, 631, 529, 0, 0, 0, 0, 0, - 557, 440, 424, 444, -12, 578, 662, 0, 369, 0, - 77, 5507, 0, 5507, 90, 665, 557, 3842, 0, 5507, - 0, 0, 0, 582, 663, 0, 0, -36, 5507, 4038, - 4038, 141, 141, 141, 141, 615, 673, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, - 591, 2966, 557, 0, 656, 0, 679, 683, 409, 633, - 617, 603, 0, 0, 5507, 0, 754, 686, 604, 605, - -36, 607, 3842, 0, 5507, 0, 77, 0, 0, 5507, - 5507, 0, 388, 5507, 694, 695, 523, 696, 680, 682, - 698, 702, 410, 0, 0, 0, 928, 104, 0, 0, - 0, 0, 0, 0, 0, 0, 709, 104, 697, 493, - 1370, 2993, 578, 0, 0, 0, 0, -36, 713, 718, - 704, 557, 700, 386, 0, 3158, 5507, 5507, 557, 0, - 403, 429, 0, 0, 5507, 5507, 712, 425, 0, 0, - 715, 371, 0, 735, 737, 70, 89, 89, 0, 689, - 0, 38, -102, 0, 0, 578, 0, 0, 0, 0, - 0, 664, 5507, 388, 676, 0, 742, 3378, 677, 763, - 760, 446, 3405, 3543, 5507, 410, 703, 0, 545, 0, - 502, 104, 494, 617, 104, 765, 737, 784, 104, 0, - 0, 557, 0, 0, 0, 160, 3842, 0, 557, 5507, - 523, 0, 5507, 498, 5507, 523, 710, 3842, 0, 557, - 617, 82, -47, 0, 0, 0, 737, 502, 502, 798, - 717, 0, 0, 0, 160, 0, 0, 723, 781, 0, - 3570, 0, 3597, 479, 175, 726, 0, 0, 5507, 0, - 557, 0, -47, -47, 502, 0, 816, 729, 0, 0, - 0, 0, 5507, 799, 523, 0, 0, 0, 0, 736, - 175, 0, 0, 3707, 743, 0, 0, -47, 82, 557, - 819, 0, 0, 523, 5507, 804, 0, 0, 0, 0, - 0, 0, -107, 746, 523, 0, 3805, 557, 82, 832, - 0, 0, 557, 0, 0, 752, 0, 557, 755, 0, + protected static $yySindex = array( -282, + 0, 0, -234, -78, -186, 1781, -234, 0, 35, 144, + 106, 0, -185, -185, 0, 0, 205, 0, 189, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, + 849, 0, 0, -78, -78, 0, -35, 221, -23, -143, + 151, 0, 0, 0, 0, 0, 0, 0, -23, -23, + -23, 0, 284, 0, 307, 266, 0, 318, 189, 849, + -78, -78, -78, 311, 0, 323, 361, 0, -78, -78, + 812, 0, 0, 349, 126, 131, 126, 0, 0, 0, + 0, 0, 0, -78, 108, 0, 0, 0, 0, 0, + 402, 55, 0, 426, 354, 0, 403, -78, 158, -78, + 363, 158, 5272, 444, -6, -6, -177, 0, 88, 0, + 187, 441, 664, 0, 417, 0, 0, 0, 287, 0, + 0, -78, 387, 468, 0, 0, 410, 5623, 0, 5623, + 5623, 5623, 5623, 5623, 5623, 0, 5623, 498, 479, 0, + 5434, 430, 129, 3858, -30, 0, 529, 0, 0, 0, + 0, 0, 0, 500, 541, 0, 5623, 35, 0, 0, + 0, 0, 535, 0, -78, 463, 343, 381, 417, 346, + 512, 403, 0, 0, 0, -78, 1319, 362, 377, 2955, + -121, -121, -70, -121, -121, -121, 463, 0, 5623, 0, + 5623, 367, -30, 441, 0, -51, 2785, -9, 289, 592, + 600, 0, 382, 0, 5623, 5623, 5623, 5623, 5623, 5623, + 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, + 5462, 5479, 5180, 5623, 5225, 5623, 5623, 5623, 5623, 5623, + 5623, 5623, -78, 5623, 0, 0, 463, 0, 0, 0, + 0, 0, 0, -30, -185, 5623, 0, 350, 608, 0, + 145, 463, 0, 135, 609, 463, 0, 0, 1347, 0, + 538, 406, 0, 107, 0, 0, 0, 0, 568, 112, + 0, 5623, 654, 417, -30, 574, 575, 3858, 5623, 3858, + 5589, 0, 0, -30, 0, 642, 367, 382, 0, 367, + -112, 4019, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, + 4054, 4054, 4054, 3858, 647, 309, 342, 828, 5623, 440, + 5623, 440, 5623, 5623, 4, 4, 5623, 5623, 4, 4, + 159, 159, 119, 119, 119, -70, 0, -121, 0, 5623, + 5623, 0, 666, 0, 655, 479, 0, 0, 0, 0, + -12, 0, 463, 50, 0, 573, 456, 384, 458, -57, + 596, 684, 0, 362, 0, 26, 5623, 0, 5623, -14, + 687, 573, 3858, 0, 5623, 0, 0, 0, 610, 685, + 0, 0, -30, 5623, 4054, 4054, 4, 4, 4, 4, + 643, 696, 0, 0, 171, 0, 0, -11, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 698, 614, 2982, + 573, 0, 680, 0, 706, 707, 97, 657, 642, 628, + 0, 0, 5623, 0, 1395, 720, 639, 640, -30, 645, + 3858, 0, 5623, 0, 26, 0, 0, 5623, 0, 5623, + 0, 427, 5623, 732, 733, 539, 734, 716, 725, 745, + 751, 453, 0, 0, 0, 327, 400, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 400, 735, 536, 1386, + 3009, 596, 0, 0, 0, 0, -30, 756, 774, 758, + 573, 759, 364, 0, 3174, 5623, 5623, 573, 0, 460, + 486, 0, 0, 5623, 5623, 763, 375, 0, 0, 780, + 139, 0, 803, 804, -54, 243, 243, 0, 757, 0, + -33, -93, 0, 0, 596, 0, 0, 0, 0, 0, + 722, 5623, 427, 726, 0, 792, 3394, 728, 814, 811, + 494, 3421, 3559, 5623, 453, 741, 0, 606, 0, 546, + 400, 516, 642, 400, 827, 804, 831, 400, 0, 0, + 573, 0, 0, 0, 275, 3858, 0, 573, 5623, 539, + 0, 5623, 534, 5623, 539, 746, 3858, 0, 573, 642, + -78, -36, 0, 0, 0, 804, 546, 546, 835, 753, + 0, 0, 0, 275, 0, 0, 762, 824, 0, 3586, + 0, 3613, 513, 265, 766, 0, 0, 5623, 0, 573, + 0, -36, -36, 546, 0, 857, 775, 0, 0, 0, + 0, 5623, 848, 539, 0, 0, 0, 0, 783, 265, + 0, 0, 3723, 785, 0, 0, -36, -78, 573, 871, + 0, 0, 539, 5623, 859, 0, 0, 0, 0, 0, + 0, -106, 793, 539, 0, 3821, 573, -78, 879, 0, + 0, 573, 0, 0, 798, 0, 573, 797, 0, ); - protected static $yyRindex= array( 845, - 0, 0, 1739, 0, 0, 277, 1918, 0, 753, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + protected static $yyRindex= array( 1755, + 0, 0, 924, 0, 0, 263, 1934, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -39, 59, 0, 0, 316, 0, 661, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 927, -54, 758, -54, 0, 0, 0, - 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 759, 0, - 0, 759, 794, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, - 0, 106, 0, 0, 0, 2513, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2032, 1911, 985, 850, 0, - 0, 956, 1703, 0, 468, 0, 0, 0, 0, 0, - 0, 0, -41, 0, 851, -33, 0, 0, 0, 0, + 0, 0, 0, -24, 109, 0, 0, 298, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -182, 769, 1138, 965, 2103, 2211, 2734, 2296, 2333, 2434, - 0, 0, 0, 0, 0, 0, 1703, 5419, 1771, -30, - 0, 1582, 0, 0, -23, 0, 639, 0, 0, 0, + 0, 0, 0, 943, -84, 800, -84, 0, 0, 0, + 0, 0, 0, 0, -37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, + 0, 806, 834, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, + 0, 0, 0, -32, 0, 0, 0, 2529, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2048, 1927, 1001, + 890, 0, 0, 484, 1719, 0, 667, 0, 0, 0, + 0, 0, 0, 0, -41, 0, 891, -29, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, + 0, 0, 0, 0, 0, 0, 249, 823, 1154, 62, + 2119, 2227, 2750, 2312, 2349, 2450, 0, 0, 0, 0, + 0, 0, 1719, 5609, 1787, -13, 0, 1598, 0, 0, + -8, 0, 692, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 893, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1882, 0, 1444, - 0, 18, 0, 0, 0, 0, 0, -182, 0, 968, - 0, 0, 0, 0, 0, 0, 457, 0, 777, 0, - 0, 813, 0, 1703, 814, 821, 51, 851, 88, 0, - 0, 0, 1703, 0, 9, 0, 0, 0, 0, 0, - 5, -16, 48, 131, 580, 584, 1093, 1186, 1224, 1435, - 1443, 1563, 1711, 0, 280, 887, 4945, 0, 4961, 0, - 4988, 0, 0, 3069, 4435, 0, 0, 4494, 4523, 4301, - 4338, 4108, 4227, 4264, 2842, 0, 2542, 0, 822, 851, - 0, 1374, 0, 0, 0, 0, 0, 0, 0, 0, - 789, 0, -6, 0, 0, 29, 0, 0, 0, 0, - 699, 851, 0, 791, 0, 0, 789, 1404, 0, 0, - 0, 0, 0, 0, 1472, 0, 0, 1703, 0, 1713, - 1810, 4562, 4731, 4768, 4822, 0, 0, 0, 0, 0, + 0, 0, 0, 1898, 0, 1069, 0, 33, 0, 0, + 0, 0, 0, 909, 0, 0, 0, 0, 249, 0, + 861, 0, 0, 0, 0, 0, 0, 492, 0, 830, + 0, 0, 846, 0, 1719, 865, 866, 45, 891, 67, + 0, 0, 0, 1719, 0, -16, 0, 0, 0, 0, + 0, 764, 64, 66, 319, 511, 673, 1109, 1202, 1240, + 1451, 1459, 1579, 991, 0, 4768, 903, 4961, 0, 4977, + 0, 5004, 0, 0, 3085, 4451, 0, 0, 4510, 4539, + 4317, 4354, 4124, 4243, 4280, 2858, 0, 2558, 0, 867, + 891, 0, 1390, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 833, 0, 114, 0, 0, + 220, 0, 0, 0, 0, 5020, 891, 0, 838, 0, + 0, 833, 1727, 0, 0, 0, 0, 0, 0, 1488, + 0, 0, 1719, 0, 1729, 1826, 4578, 4747, 4784, 4838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -110, 0, 0, 0, 0, 807, 0, 0, - 874, 0, 0, 0, 0, 0, 181, 0, 0, 0, - 1703, 0, 105, 0, 851, 0, 4752, 0, 0, 851, - 875, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -182, 0, 1316, 0, 0, 0, 0, 1703, 0, 0, - 0, 789, 477, 0, 0, 0, 878, 0, 789, 0, + -108, 0, 0, 0, 0, 836, 0, 0, 906, 0, + 0, 0, 0, 0, 337, 0, 0, 0, 1719, 0, + 87, 0, 891, 0, 5046, 0, 0, 891, 0, 908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -7, 0, 0, 898, 0, 899, 899, 0, 0, - 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 927, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, + 0, 1332, 0, 0, 0, 0, 1719, 0, 0, 0, + 833, 414, 0, 0, 0, 911, 0, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 192, 0, 0, -7, 0, 0, 901, 0, 894, 0, - 0, 789, 0, 0, 0, 0, 484, 0, 789, 878, - 0, 0, 0, 0, 0, 0, 0, 485, 0, 789, - -7, 0, 0, 0, 0, 0, 902, 192, 192, 0, - 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, - 0, 0, 0, 405, 824, 0, 0, 0, 0, 0, - 789, 0, 0, 0, 192, 0, 0, 0, 0, 0, - 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, - 826, 0, 0, 0, 0, 0, 0, 0, 0, 789, + 178, 0, 0, 930, 0, 931, 931, 0, 0, 0, + 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, + 0, 0, 178, 0, 0, 932, 0, 927, 0, 0, + 833, 0, 0, 0, 0, 454, 0, 833, 911, 0, + 0, 0, 0, 0, 0, 0, 473, 0, 833, 178, + 0, 0, 0, 0, 0, 933, 13, 13, 0, 0, + 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, + 0, 0, 416, 853, 0, 0, 0, 0, 0, 833, + 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, + 0, 891, 0, 0, 0, 0, 0, 0, 0, 854, + 0, 0, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, - 0, 0, -104, 0, 0, 0, 0, 789, 0, 0, + 0, 0, 0, 0, 0, 0, -105, 0, 0, 0, + 0, -105, 0, 0, 0, 0, 833, 0, 0, ); protected static $yyGindex= array(0, - 0, 0, 0, -4, 0, 0, 937, 561, 568, 32, - 946, -60, 0, 877, 853, -143, 0, 0, 0, 0, - -114, -312, 0, 0, 0, 3080, 0, 618, 0, 0, - 76, 294, -372, 0, 0, -58, -399, 475, 488, 0, - -183, -167, 0, 454, 0, 0, 0, 0, 915, 917, - 0, 507, 0, 868, -150, -76, 367, 0, 140, -211, - 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 489, 472, - 0, 391, 0, 0, 0, 0, 0, 436, 448, 0, - 0, 0, 0, 0, 803, 815, 634, 0, 291, 0, - 332, 0, 808, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 724, 0, 0, 0, 762, 0, 770, - 0, 0, 0, 0, 0, 0, 867, 0, 986, + 0, 0, 0, -4, 0, 0, 975, 661, 633, 425, + 983, -60, 0, 914, 892, -161, 0, 0, 0, 0, + -116, -407, 0, 0, 0, 53, 0, 638, 0, 0, + 83, -21, -356, 0, 0, -63, -412, 491, 501, 0, + -79, -256, 0, 457, 0, 0, 0, 0, 939, 941, + 0, 586, 0, 898, -150, -64, -104, 0, 682, -198, + 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 495, 485, + 0, 399, 0, 0, 0, 0, 0, 437, 438, 0, + 0, 0, 0, 0, 826, 829, 658, 0, 312, 0, + -180, 0, 816, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 729, 0, 0, 0, 772, 0, 778, + 0, 0, 0, 0, 0, 0, 0, 851, 856, 0, + 994, ); protected static $yyTable = array(11, - 75, 76, 77, 235, 243, 168, 16, 222, 97, 234, - 222, 570, 93, 52, 110, 222, 619, 217, 439, 13, - 109, 50, 523, 104, 210, 248, 310, 210, 323, 47, - 48, 355, 299, 57, 228, 57, 57, 119, 480, 122, - 228, 210, 210, 413, 159, 209, 93, 93, 209, 57, - 12, 233, 57, 17, 232, 249, 74, 74, 74, 122, - 299, 236, 209, 209, 81, 82, 92, 1, 26, 112, - 54, 356, 32, 59, 339, 571, 210, 309, 165, 74, - 65, 54, 54, 233, 17, 57, 5, 32, 240, 340, - 15, 240, 74, 74, 238, 74, 521, 209, 17, 510, - 92, 92, 17, 309, 161, 240, 240, 366, 210, 122, - 236, 357, 544, 225, 214, 74, 228, 346, 223, 221, - 262, 222, 60, 224, 160, 34, 412, 225, 214, 209, - 487, 239, 223, 221, 190, 222, 217, 224, 219, 35, - 240, 546, 236, 238, 91, 58, 39, 127, 58, 309, - 217, 17, 219, 32, 16, 34, 36, 482, 244, 74, - 522, 74, 112, 58, 307, 74, 316, 69, 567, 367, - 213, 241, 240, 525, 241, 238, 74, 225, 142, 112, - 239, 40, 223, 221, 213, 222, 70, 224, 241, 241, - 274, 398, 74, 399, 112, 310, 397, 58, 34, 451, - 212, 174, 228, 175, 176, 177, 178, 179, 180, 569, - 182, 51, 239, 105, 191, 68, 228, 112, 165, 225, - 227, 310, 74, 241, 223, 221, 74, 222, 307, 224, - 142, 12, 620, 217, 166, 310, 310, 310, 9, 231, - 210, 225, 217, 71, 219, 231, 223, 388, 74, 441, - 101, 224, 167, 17, 449, 241, 26, 78, 267, 450, - 269, 209, 110, 110, 10, 57, 228, 310, 109, 109, - 322, 15, 74, 79, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, - 299, 301, 304, 305, 308, 309, 310, 311, 312, 313, - 314, 315, 227, 317, 240, 39, 497, 389, 228, 299, - 229, 230, 80, 17, 101, 293, 229, 230, 278, 390, - 266, 231, 168, 266, 168, 17, 305, 391, 97, 168, - 228, 9, 168, 17, 168, 16, 341, 266, 266, 106, - 266, 9, 266, 142, 305, 348, 225, 214, 9, 324, - 325, 223, 221, 165, 222, 329, 224, 10, 198, 71, - 184, 58, 307, 9, 573, 574, 34, 10, 471, 217, - 16, 219, 266, 360, 10, 361, 17, 362, 363, 559, - 168, 364, 365, 233, 17, 49, 333, 241, 227, 10, - 114, 598, 229, 230, 293, 142, 111, 210, 210, 513, - 517, 517, 227, 266, 266, 596, 597, 231, 71, 514, - 110, 226, 10, 109, 168, 168, 509, 142, 209, 142, - 515, 231, 98, 74, 112, 403, 495, 568, 472, 494, - 611, 350, 601, 74, 407, 228, 184, 157, 547, 157, - 309, 55, 34, 472, 157, 435, 100, 157, 101, 157, - 433, 431, 227, 432, 183, 434, 107, 245, 334, 114, - 108, 240, 240, 386, 120, 507, 309, 10, 506, 34, - 442, 231, 74, 74, 263, 124, 220, 218, 229, 230, - 142, 122, 155, 12, 164, 142, 293, 215, 216, 456, - 220, 218, 229, 230, 227, 157, 46, 226, 324, 325, - 44, 215, 216, 552, 553, 193, 13, 74, 173, 14, - 74, 226, 309, 231, 74, 44, 227, 140, 272, 163, - 140, 56, 426, 15, 141, 144, 173, 141, 144, 157, - 157, 165, 142, 498, 436, 231, 266, 74, 612, 169, - 503, 504, 229, 230, 241, 241, 335, 588, 589, 168, - 168, 168, 168, 168, 168, 130, 460, 140, 625, 170, - 173, 226, 139, 193, 172, 128, 352, 129, 527, 354, - 43, 44, 45, 37, 38, 168, 309, 309, 309, 44, - 538, 44, 220, 218, 229, 230, 185, 16, 197, 130, - 240, 140, 173, 9, 74, 343, 139, 318, 198, 128, - 241, 129, 168, 226, 349, 142, 229, 230, 561, 242, - 563, 157, 158, 83, 74, 105, 64, 66, 67, 10, - 242, 227, 246, 242, 243, 226, 275, 243, 257, 168, - 168, 168, 168, 270, 276, 168, 277, 242, 242, 328, - 231, 243, 243, 193, 594, 459, 331, 83, 131, 168, - 168, 168, 168, 332, 168, 168, 168, 83, 142, 168, - 168, 168, 168, 168, 157, 157, 157, 157, 157, 157, - 460, 342, 242, 338, 344, 460, 243, 350, 345, 359, - 617, 368, 131, 266, 266, 266, 266, 266, 183, 406, - 157, 168, 168, 266, 266, 266, 266, 266, 266, 385, - 393, 395, 405, 387, 242, 401, 404, 408, 243, 220, - 218, 229, 230, 409, 423, 424, 427, 157, 429, 168, - 215, 216, 430, 438, 460, 440, 443, 453, 444, 445, - 226, 447, 446, 457, 458, 462, 83, 465, 463, 201, - 464, 466, 201, 460, 157, 157, 157, 157, 479, 467, - 157, 309, 482, 489, 460, 481, 201, 201, 490, 201, - 493, 201, 491, 500, 157, 157, 157, 157, 501, 157, - 157, 157, 505, 508, 157, 511, 157, 157, 157, 488, - 512, 520, 173, 86, 87, 88, 89, 90, 526, 17, - 17, 201, 17, 17, 17, 17, 17, 17, 529, 17, - 530, 532, 533, 534, 541, 548, 157, 157, 10, 535, - 17, 17, 17, 17, 17, 17, 173, 86, 87, 88, - 89, 90, 542, 201, 549, 540, 85, 86, 87, 88, - 89, 90, 565, 545, 157, 135, 242, 562, 575, 583, - 243, 576, 10, 17, 19, 17, 17, 582, 225, 586, - 593, 600, 10, 223, 221, 599, 222, 602, 224, 615, - 607, 618, 138, 369, 370, 371, 91, 610, 134, 135, - 621, 217, 626, 219, 628, 17, 17, 17, 17, 630, - 30, 28, 372, 373, 374, 375, 172, 376, 377, 126, - 216, 172, 378, 41, 379, 216, 138, 369, 370, 371, - 176, 40, 134, 296, 297, 156, 86, 87, 88, 89, - 90, 298, 84, 109, 176, 172, 372, 373, 374, 375, - 309, 376, 377, 126, 132, 133, 378, 268, 379, 51, - 268, 10, 57, 176, 91, 2, 172, 228, 92, 88, - 145, 90, 89, 33, 268, 268, 309, 268, 147, 268, - 148, 29, 380, 102, 125, 201, 396, 524, 132, 133, - 309, 309, 309, 299, 299, 518, 299, 299, 299, 299, - 299, 299, 550, 299, 73, 72, 162, 539, 400, 268, - 268, 608, 528, 265, 299, 299, 380, 299, 299, 299, - 580, 84, 309, 242, 242, 266, 174, 243, 243, 174, - 353, 560, 581, 326, 279, 200, 564, 321, 200, 17, - 268, 268, 17, 19, 174, 0, 46, 299, 83, 299, - 299, 187, 187, 200, 187, 187, 187, 187, 187, 187, - 187, 187, 247, 20, 21, 22, 250, 24, 25, 0, - 26, 0, 187, 187, 187, 187, 187, 187, 174, 299, - 299, 299, 299, 0, 0, 603, 27, 200, 317, 0, - 0, 0, 17, 17, 17, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 616, 187, 0, 187, 187, 0, - 174, 0, 17, 17, 17, 622, 0, 251, 0, 200, - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 201, 201, 201, 201, 201, 0, 187, 187, - 187, 0, 201, 201, 201, 201, 201, 201, 0, 0, - 0, 0, 0, 227, 2, 2, 2, 2, 2, 2, - 0, 2, 0, 244, 0, 0, 244, 0, 0, 0, - 0, 0, 231, 268, 2, 2, 2, 0, 2, 0, - 244, 244, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 0, 17, 17, 17, 0, 17, 17, 17, 17, - 17, 17, 0, 17, 222, 222, 0, 0, 222, 222, - 222, 222, 222, 299, 222, 244, 299, 470, 86, 87, - 88, 89, 90, 0, 0, 222, 222, 17, 222, 222, - 17, 0, 20, 21, 22, 23, 24, 25, 0, 26, - 0, 220, 218, 229, 230, 0, 0, 244, 0, 0, - 0, 200, 215, 216, 0, 27, 246, 317, 17, 246, - 222, 222, 226, 0, 0, 0, 299, 299, 299, 0, - 0, 185, 0, 246, 246, 0, 299, 317, 317, 317, - 317, 317, 317, 317, 317, 0, 299, 299, 299, 0, - 0, 222, 222, 222, 245, 0, 299, 245, 0, 0, - 317, 0, 20, 21, 22, 23, 24, 25, 246, 26, - 0, 245, 245, 0, 0, 0, 0, 0, 0, 0, - 268, 268, 268, 268, 268, 27, 187, 0, 0, 317, - 268, 268, 268, 268, 268, 268, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 187, 245, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 0, 0, 299, 299, 0, - 299, 299, 299, 299, 299, 299, 0, 299, 245, 244, - 0, 0, 32, 32, 0, 32, 32, 32, 32, 32, - 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 32, 32, 32, 32, 32, 32, 0, - 0, 0, 0, 0, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 19, 222, 187, 187, 0, 187, 187, - 187, 187, 187, 187, 187, 187, 32, 0, 32, 32, - 286, 286, 0, 0, 286, 286, 286, 286, 286, 286, - 286, 19, 0, 0, 0, 0, 0, 252, 0, 0, - 0, 286, 286, 286, 286, 286, 286, 0, 0, 32, - 32, 32, 246, 0, 214, 0, 0, 214, 0, 222, - 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, - 19, 214, 214, 0, 286, 0, 286, 286, 222, 0, - 0, 0, 0, 0, 0, 247, 0, 17, 247, 0, - 245, 0, 0, 248, 176, 0, 248, 176, 0, 0, - 0, 0, 247, 247, 485, 0, 214, 286, 286, 286, - 248, 248, 176, 0, 0, 0, 244, 244, 183, 183, - 0, 0, 183, 183, 183, 183, 183, 183, 183, 0, - 0, 0, 0, 0, 0, 0, 0, 247, 214, 183, - 183, 183, 183, 183, 183, 248, 176, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 0, 17, 222, 222, - 0, 222, 222, 222, 222, 222, 222, 222, 222, 247, - 0, 0, 183, 0, 183, 183, 0, 248, 176, 0, - 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 20, 21, 22, 250, 24, 25, 0, 26, - 0, 0, 0, 0, 0, 183, 183, 183, 0, 246, - 246, 0, 0, 249, 0, 27, 249, 0, 0, 0, - 20, 21, 22, 250, 24, 25, 0, 26, 99, 99, - 249, 249, 99, 99, 99, 99, 99, 32, 99, 0, - 286, 0, 0, 27, 0, 0, 251, 245, 245, 99, - 99, 99, 99, 99, 0, 0, 32, 0, 0, 20, - 21, 22, 250, 24, 25, 249, 26, 0, 0, 0, - 214, 0, 0, 0, 251, 0, 0, 0, 0, 0, - 0, 0, 27, 0, 99, 99, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 286, 0, 249, 0, 0, - 0, 247, 0, 0, 0, 0, 0, 0, 0, 248, - 0, 0, 0, 251, 286, 99, 99, 99, 0, 0, - 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 0, 0, 32, 32, 183, 32, - 32, 32, 32, 32, 32, 32, 32, 0, 0, 280, - 280, 0, 0, 280, 280, 280, 280, 280, 0, 280, - 0, 177, 0, 258, 177, 0, 258, 0, 0, 0, - 280, 280, 280, 280, 280, 280, 0, 0, 177, 177, - 258, 258, 0, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 0, 183, 286, 286, 0, 286, 286, 286, - 286, 286, 286, 286, 286, 280, 280, 0, 0, 0, - 0, 0, 183, 177, 0, 258, 0, 187, 187, 0, - 187, 187, 187, 187, 220, 187, 187, 187, 0, 249, - 0, 0, 0, 0, 0, 0, 280, 280, 280, 5, - 187, 187, 187, 187, 0, 177, 0, 258, 99, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, - 259, 0, 0, 259, 0, 0, 248, 248, 0, 0, - 0, 187, 0, 0, 187, 0, 0, 259, 259, 0, - 0, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 0, 0, 183, 183, 0, 183, 183, 183, 183, 183, - 183, 183, 183, 99, 187, 0, 187, 0, 0, 0, - 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 99, 99, 0, 0, 0, 0, 0, 282, 282, - 0, 99, 282, 282, 282, 282, 282, 0, 282, 0, - 0, 0, 0, 0, 259, 0, 0, 0, 0, 282, - 282, 282, 282, 282, 282, 0, 0, 229, 229, 0, - 229, 0, 229, 229, 229, 229, 229, 229, 0, 280, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, - 229, 229, 229, 229, 282, 282, 249, 249, 0, 0, - 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 0, 0, 99, 99, 0, 99, 99, 99, 99, 99, - 99, 229, 99, 229, 229, 282, 282, 282, 6, 0, - 0, 0, 0, 0, 280, 0, 0, 0, 5, 5, - 5, 5, 5, 5, 0, 5, 0, 185, 0, 0, - 0, 0, 0, 280, 229, 0, 229, 0, 5, 5, - 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 259, 0, 222, 222, - 0, 0, 0, 222, 222, 222, 222, 0, 222, 0, - 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, - 0, 222, 222, 222, 222, 0, 0, 0, 0, 0, - 0, 187, 280, 280, 280, 280, 280, 280, 280, 280, - 280, 0, 0, 280, 280, 0, 280, 280, 280, 280, - 280, 280, 222, 280, 222, 222, 258, 258, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 282, 274, - 274, 0, 0, 274, 274, 274, 274, 274, 0, 274, - 0, 0, 0, 0, 0, 222, 0, 222, 0, 0, - 274, 274, 274, 274, 274, 274, 0, 0, 0, 0, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 0, - 0, 187, 187, 0, 187, 187, 187, 187, 187, 187, - 187, 187, 0, 282, 0, 274, 274, 6, 6, 6, - 6, 6, 6, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 282, 0, 0, 0, 0, 6, 6, 6, - 6, 0, 229, 259, 259, 0, 274, 274, 0, 0, + 75, 76, 77, 222, 234, 174, 249, 93, 97, 241, + 50, 222, 283, 259, 222, 240, 110, 638, 52, 109, + 1, 16, 589, 104, 57, 540, 314, 57, 432, 47, + 48, 542, 217, 171, 13, 57, 199, 121, 26, 124, + 231, 93, 93, 129, 499, 229, 227, 334, 228, 300, + 230, 233, 458, 285, 506, 234, 74, 74, 74, 260, + 238, 124, 231, 220, 81, 82, 92, 229, 227, 5, + 228, 101, 230, 12, 12, 115, 236, 300, 171, 74, + 34, 171, 161, 233, 83, 223, 590, 225, 238, 541, + 314, 169, 74, 74, 358, 74, 13, 544, 199, 14, + 92, 92, 200, 364, 210, 200, 240, 210, 74, 240, + 239, 431, 384, 15, 15, 124, 55, 74, 563, 219, + 200, 210, 210, 240, 240, 236, 273, 58, 361, 234, + 58, 381, 329, 454, 529, 101, 196, 238, 452, 450, + 171, 451, 10, 453, 251, 58, 254, 370, 17, 218, + 115, 234, 17, 34, 200, 354, 210, 236, 240, 239, + 250, 74, 162, 74, 36, 274, 501, 74, 105, 238, + 355, 74, 327, 17, 386, 342, 565, 16, 16, 58, + 382, 9, 74, 199, 528, 144, 200, 371, 210, 35, + 240, 239, 424, 415, 59, 231, 56, 112, 74, 365, + 229, 17, 406, 586, 17, 230, 416, 10, 417, 237, + 180, 429, 181, 182, 183, 184, 185, 186, 57, 188, + 588, 57, 455, 197, 314, 171, 26, 372, 74, 113, + 341, 470, 74, 639, 344, 171, 12, 340, 465, 144, + 57, 233, 350, 60, 234, 335, 336, 74, 217, 460, + 39, 74, 40, 158, 86, 87, 88, 89, 90, 74, + 237, 171, 407, 32, 110, 110, 51, 109, 109, 101, + 57, 278, 468, 280, 408, 532, 15, 469, 32, 10, + 235, 236, 409, 74, 234, 533, 507, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 306, 307, 308, 310, 312, 315, 316, 319, 320, 321, + 322, 323, 324, 325, 326, 233, 328, 168, 200, 168, + 210, 385, 240, 70, 168, 516, 300, 168, 304, 168, + 172, 235, 236, 112, 237, 615, 616, 233, 74, 84, + 16, 71, 68, 58, 32, 231, 220, 163, 173, 306, + 229, 227, 34, 228, 356, 230, 237, 71, 204, 241, + 630, 144, 241, 363, 69, 113, 348, 306, 223, 78, + 225, 316, 17, 17, 49, 168, 241, 241, 231, 220, + 17, 79, 490, 229, 227, 16, 228, 91, 230, 239, + 71, 375, 10, 376, 110, 377, 378, 109, 578, 379, + 380, 223, 219, 225, 514, 235, 236, 513, 97, 168, + 168, 241, 304, 144, 420, 526, 190, 83, 525, 80, + 168, 253, 34, 404, 232, 226, 224, 235, 236, 34, + 233, 536, 536, 17, 234, 98, 221, 222, 349, 144, + 100, 144, 74, 241, 587, 17, 232, 421, 157, 237, + 157, 620, 74, 17, 140, 157, 425, 140, 157, 316, + 157, 39, 106, 54, 107, 111, 108, 234, 122, 566, + 233, 112, 112, 65, 54, 54, 231, 210, 210, 240, + 240, 229, 227, 157, 228, 126, 230, 592, 593, 237, + 112, 74, 74, 112, 141, 461, 165, 141, 166, 223, + 124, 225, 9, 113, 113, 144, 157, 171, 316, 175, + 144, 176, 304, 144, 617, 475, 144, 43, 44, 45, + 235, 236, 113, 511, 174, 113, 74, 174, 10, 74, + 518, 46, 178, 74, 316, 44, 191, 190, 204, 232, + 157, 157, 174, 34, 168, 168, 168, 168, 168, 168, + 44, 242, 203, 112, 242, 189, 74, 631, 144, 517, + 235, 236, 316, 316, 316, 234, 522, 523, 242, 242, + 168, 132, 246, 142, 534, 241, 174, 644, 141, 232, + 316, 130, 491, 131, 248, 113, 489, 86, 87, 88, + 89, 90, 247, 570, 546, 105, 316, 168, 367, 252, + 577, 369, 256, 242, 257, 132, 557, 142, 174, 335, + 336, 585, 141, 74, 44, 130, 44, 131, 571, 572, + 233, 268, 316, 281, 168, 168, 168, 168, 286, 83, + 168, 144, 287, 74, 580, 242, 582, 607, 608, 237, + 9, 9, 614, 288, 168, 168, 168, 168, 339, 168, + 168, 168, 343, 233, 168, 168, 168, 168, 168, 9, + 346, 478, 9, 83, 133, 347, 10, 10, 316, 333, + 613, 633, 237, 37, 38, 157, 157, 157, 157, 157, + 157, 64, 66, 67, 144, 10, 168, 168, 10, 643, + 159, 160, 353, 357, 646, 579, 359, 360, 133, 648, + 583, 157, 365, 168, 374, 383, 636, 173, 226, 224, + 235, 236, 189, 243, 168, 403, 243, 405, 411, 221, + 222, 289, 9, 413, 423, 173, 167, 419, 157, 232, + 243, 243, 241, 241, 422, 426, 427, 442, 443, 491, + 446, 226, 224, 235, 236, 448, 449, 457, 10, 622, + 459, 233, 221, 222, 112, 157, 157, 157, 157, 173, + 462, 157, 232, 463, 464, 243, 472, 242, 635, 466, + 237, 476, 477, 481, 482, 157, 157, 157, 157, 641, + 157, 157, 157, 483, 484, 157, 113, 157, 157, 157, + 485, 173, 486, 500, 498, 501, 508, 243, 179, 86, + 87, 88, 89, 90, 209, 17, 17, 209, 17, 17, + 17, 17, 17, 17, 509, 17, 510, 157, 157, 512, + 519, 209, 209, 524, 10, 520, 17, 17, 17, 17, + 17, 17, 179, 86, 87, 88, 89, 90, 527, 226, + 224, 235, 236, 530, 317, 157, 545, 531, 548, 539, + 549, 137, 551, 552, 553, 564, 209, 554, 10, 17, + 232, 17, 17, 559, 231, 560, 561, 567, 584, 229, + 227, 568, 228, 581, 230, 594, 317, 595, 140, 387, + 388, 389, 602, 605, 136, 137, 601, 223, 209, 225, + 612, 17, 17, 17, 17, 316, 618, 619, 390, 391, + 392, 393, 83, 394, 395, 128, 621, 626, 396, 629, + 397, 634, 140, 387, 388, 389, 637, 640, 136, 645, + 647, 649, 30, 9, 242, 242, 172, 316, 28, 243, + 216, 172, 390, 391, 392, 393, 296, 394, 395, 128, + 134, 135, 396, 268, 397, 309, 268, 41, 216, 10, + 176, 324, 309, 234, 40, 297, 298, 109, 51, 176, + 268, 268, 172, 268, 57, 268, 176, 91, 398, 172, + 92, 88, 90, 89, 134, 135, 145, 147, 148, 300, + 300, 33, 300, 300, 300, 300, 300, 300, 29, 300, + 102, 414, 543, 127, 569, 268, 268, 537, 73, 72, + 300, 300, 398, 300, 300, 300, 164, 547, 627, 558, + 599, 600, 276, 317, 5, 277, 368, 418, 290, 337, + 209, 332, 258, 255, 46, 17, 268, 268, 17, 0, + 0, 177, 0, 300, 177, 300, 300, 187, 187, 317, + 187, 187, 187, 187, 187, 187, 187, 187, 177, 177, + 0, 0, 0, 317, 317, 317, 0, 0, 187, 187, + 187, 187, 187, 187, 316, 300, 300, 300, 300, 0, + 0, 85, 86, 87, 88, 89, 90, 0, 17, 17, + 17, 0, 445, 177, 0, 317, 243, 243, 17, 0, + 316, 187, 0, 187, 187, 0, 0, 10, 17, 17, + 17, 0, 0, 0, 316, 316, 316, 0, 17, 176, + 0, 91, 176, 0, 0, 177, 0, 479, 0, 0, + 324, 0, 0, 0, 187, 187, 187, 176, 20, 21, + 22, 23, 24, 25, 0, 26, 316, 0, 0, 233, + 324, 324, 324, 324, 324, 324, 324, 324, 0, 244, + 0, 27, 244, 0, 0, 0, 0, 84, 237, 268, + 0, 176, 0, 324, 0, 0, 244, 244, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 209, 17, 17, + 17, 0, 17, 17, 17, 17, 17, 17, 0, 17, + 222, 222, 324, 176, 222, 222, 222, 222, 222, 300, + 222, 244, 300, 5, 5, 5, 5, 5, 5, 0, + 5, 222, 222, 17, 222, 222, 17, 0, 0, 0, + 0, 0, 0, 5, 5, 5, 5, 226, 224, 235, + 236, 479, 0, 244, 0, 0, 479, 0, 221, 222, + 0, 0, 246, 0, 17, 246, 222, 222, 232, 0, + 0, 0, 300, 300, 300, 0, 0, 185, 0, 246, + 246, 0, 300, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 300, 300, 300, 0, 0, 222, 222, 222, + 245, 0, 300, 245, 0, 479, 0, 0, 0, 0, + 0, 0, 0, 0, 246, 0, 0, 245, 245, 0, + 0, 0, 0, 0, 479, 0, 268, 268, 268, 268, + 268, 0, 187, 0, 0, 479, 268, 268, 268, 268, + 268, 268, 0, 0, 0, 0, 246, 0, 0, 0, + 0, 187, 245, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 0, 0, 300, 300, 0, 300, 300, 300, 300, + 300, 300, 0, 300, 245, 244, 0, 0, 32, 32, + 0, 32, 32, 32, 32, 32, 32, 32, 32, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, + 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, + 187, 187, 187, 187, 187, 187, 187, 187, 187, 19, + 222, 187, 187, 0, 187, 187, 187, 187, 187, 187, + 187, 187, 32, 0, 32, 32, 286, 286, 0, 0, + 286, 286, 286, 286, 286, 286, 286, 19, 0, 0, + 0, 0, 0, 263, 0, 0, 0, 286, 286, 286, + 286, 286, 286, 0, 0, 32, 32, 32, 246, 0, + 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, + 0, 345, 0, 0, 0, 0, 19, 0, 0, 0, + 286, 0, 286, 286, 222, 19, 0, 0, 0, 0, + 0, 247, 0, 17, 247, 0, 245, 0, 0, 248, + 0, 0, 248, 0, 0, 0, 0, 0, 247, 247, + 504, 0, 0, 286, 286, 286, 248, 248, 0, 0, + 0, 0, 244, 244, 183, 183, 0, 0, 183, 183, + 183, 183, 183, 183, 183, 0, 0, 0, 0, 0, + 0, 0, 0, 247, 0, 183, 183, 183, 183, 183, + 183, 248, 0, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 0, 17, 222, 222, 0, 222, 222, 222, + 222, 222, 222, 222, 222, 247, 0, 0, 183, 0, + 183, 183, 0, 248, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, + 22, 261, 24, 25, 0, 26, 0, 0, 0, 0, + 0, 183, 183, 183, 0, 246, 246, 0, 0, 249, + 0, 27, 249, 0, 0, 0, 20, 21, 22, 261, + 24, 25, 0, 26, 99, 99, 249, 249, 99, 99, + 99, 99, 99, 32, 99, 0, 286, 0, 0, 27, + 0, 0, 262, 245, 245, 99, 99, 99, 99, 99, + 0, 0, 32, 0, 0, 20, 21, 22, 261, 24, + 25, 249, 26, 0, 20, 21, 22, 261, 24, 25, + 262, 26, 0, 0, 0, 0, 0, 0, 27, 0, + 99, 99, 0, 0, 0, 0, 0, 27, 0, 0, + 0, 286, 0, 249, 0, 0, 0, 247, 0, 0, + 0, 0, 0, 0, 0, 248, 0, 0, 0, 262, + 286, 99, 99, 99, 0, 0, 0, 0, 262, 0, + 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 32, 32, 183, 32, 32, 32, 32, 32, + 32, 32, 32, 0, 0, 280, 280, 0, 0, 280, + 280, 280, 280, 280, 0, 280, 0, 214, 0, 258, + 214, 0, 258, 0, 0, 0, 280, 280, 280, 280, + 280, 280, 0, 0, 214, 214, 258, 258, 0, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 0, 183, + 286, 286, 0, 286, 286, 286, 286, 286, 286, 286, + 286, 280, 280, 0, 0, 0, 0, 0, 183, 214, + 0, 258, 0, 187, 187, 0, 187, 187, 187, 187, + 220, 187, 187, 187, 0, 249, 0, 0, 0, 0, + 0, 0, 280, 280, 280, 2, 187, 187, 187, 187, + 0, 214, 0, 258, 99, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 247, 247, 259, 0, 0, 259, + 0, 19, 248, 248, 0, 0, 0, 187, 0, 0, + 187, 0, 0, 259, 259, 0, 0, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 0, 0, 183, 183, + 0, 183, 183, 183, 183, 183, 183, 183, 183, 99, + 187, 0, 187, 0, 0, 0, 0, 0, 259, 0, + 0, 0, 0, 0, 0, 0, 0, 99, 99, 0, + 0, 0, 0, 0, 282, 282, 0, 99, 282, 282, + 282, 282, 282, 0, 282, 0, 0, 0, 0, 0, + 259, 0, 0, 0, 0, 282, 282, 282, 282, 282, + 282, 0, 0, 229, 229, 0, 229, 0, 229, 229, + 229, 229, 229, 229, 0, 280, 0, 0, 0, 0, + 0, 0, 0, 214, 0, 258, 229, 229, 229, 229, + 282, 282, 249, 249, 0, 0, 0, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 0, 0, 99, 99, + 0, 99, 99, 99, 99, 99, 99, 229, 99, 229, + 229, 282, 282, 282, 6, 0, 0, 0, 0, 0, + 280, 0, 0, 0, 2, 2, 2, 2, 2, 2, + 0, 2, 0, 185, 0, 0, 0, 0, 0, 280, + 229, 0, 229, 0, 2, 2, 2, 0, 2, 0, + 20, 21, 22, 23, 24, 25, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 229, 0, 0, 0, 0, 0, 275, 275, 0, - 0, 275, 275, 275, 275, 275, 0, 275, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 275, 275, - 275, 275, 275, 275, 0, 0, 0, 0, 0, 0, - 0, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 0, 0, 282, 282, 0, 282, 282, 282, 282, 282, - 282, 0, 282, 275, 275, 0, 0, 0, 0, 0, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 0, - 0, 229, 229, 0, 229, 229, 229, 229, 229, 229, - 229, 229, 273, 273, 275, 275, 273, 273, 273, 273, - 273, 0, 273, 222, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 273, 273, 273, 273, 273, 273, 274, - 0, 0, 222, 0, 0, 0, 0, 0, 0, 276, - 276, 0, 0, 276, 276, 276, 276, 276, 0, 276, - 0, 0, 0, 0, 0, 0, 0, 0, 273, 273, - 276, 276, 276, 276, 276, 276, 0, 0, 0, 0, + 0, 0, 259, 27, 222, 222, 0, 0, 0, 222, + 222, 222, 222, 0, 222, 0, 0, 0, 187, 0, + 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, + 222, 0, 0, 0, 0, 0, 0, 187, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 0, 0, 280, + 280, 0, 280, 280, 280, 280, 280, 280, 222, 280, + 222, 222, 258, 258, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 282, 274, 274, 0, 0, 274, + 274, 274, 274, 274, 0, 274, 0, 0, 0, 0, + 0, 222, 0, 222, 0, 0, 274, 274, 274, 274, + 274, 274, 0, 0, 0, 0, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 0, 0, 187, 187, 0, + 187, 187, 187, 187, 187, 187, 187, 187, 0, 282, + 0, 274, 274, 6, 6, 6, 6, 6, 6, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 282, 0, + 0, 0, 0, 6, 6, 6, 6, 0, 229, 259, + 259, 0, 274, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, + 0, 0, 0, 275, 275, 0, 0, 275, 275, 275, + 275, 275, 0, 275, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 275, 275, 275, 275, 275, 275, + 0, 0, 0, 0, 0, 0, 0, 282, 282, 282, + 282, 282, 282, 282, 282, 282, 0, 0, 282, 282, + 0, 282, 282, 282, 282, 282, 282, 0, 282, 275, + 275, 0, 0, 0, 0, 0, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 0, 0, 229, 229, 0, + 229, 229, 229, 229, 229, 229, 229, 229, 273, 273, + 275, 275, 273, 273, 273, 273, 273, 0, 273, 222, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, + 273, 273, 273, 273, 273, 274, 0, 0, 222, 0, + 0, 0, 0, 0, 0, 276, 276, 0, 0, 276, + 276, 276, 276, 276, 0, 276, 0, 0, 0, 0, + 0, 0, 0, 0, 273, 273, 276, 276, 276, 276, + 276, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 273, - 273, 0, 0, 0, 0, 276, 276, 0, 0, 0, - 0, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 0, 17, 222, 222, 0, 222, 222, 222, 222, 222, - 222, 222, 222, 0, 0, 0, 276, 276, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, - 277, 277, 0, 0, 277, 277, 277, 277, 277, 0, - 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 277, 277, 277, 277, 277, 277, 0, 0, 0, - 0, 0, 274, 274, 0, 0, 274, 274, 274, 274, - 274, 0, 0, 274, 274, 0, 274, 274, 274, 274, - 274, 274, 275, 274, 0, 0, 277, 277, 0, 0, + 274, 0, 0, 0, 0, 273, 273, 0, 0, 0, + 0, 276, 276, 0, 0, 0, 0, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 0, 17, 222, 222, + 0, 222, 222, 222, 222, 222, 222, 222, 222, 0, + 0, 0, 276, 276, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 275, 0, 0, 277, 277, 0, 0, + 277, 277, 277, 277, 277, 0, 277, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 277, 277, 277, + 277, 277, 277, 0, 0, 0, 0, 0, 274, 274, + 0, 0, 274, 274, 274, 274, 274, 0, 0, 274, + 274, 0, 274, 274, 274, 274, 274, 274, 275, 274, + 0, 0, 277, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, - 199, 0, 273, 199, 199, 0, 199, 277, 277, 199, + 0, 0, 0, 0, 0, 199, 199, 0, 273, 199, + 199, 0, 199, 277, 277, 199, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 199, 199, 199, 199, + 199, 199, 0, 0, 265, 265, 0, 0, 265, 265, + 265, 265, 265, 0, 265, 276, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 265, 265, 265, 265, 265, + 265, 199, 199, 273, 0, 0, 275, 275, 0, 0, + 275, 275, 275, 275, 275, 0, 0, 275, 275, 0, + 275, 275, 275, 275, 275, 275, 0, 275, 0, 0, + 265, 265, 199, 199, 0, 0, 0, 0, 0, 0, + 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 199, 199, 199, 199, 199, 199, 0, 0, 265, 265, - 0, 0, 265, 265, 265, 265, 265, 0, 265, 276, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, - 265, 265, 265, 265, 265, 199, 199, 273, 0, 0, - 275, 275, 0, 0, 275, 275, 275, 275, 275, 0, - 0, 275, 275, 0, 275, 275, 275, 275, 275, 275, - 0, 275, 0, 0, 265, 265, 199, 199, 0, 0, - 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, + 0, 265, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 265, 265, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, + 0, 273, 273, 0, 0, 273, 273, 273, 273, 273, + 0, 0, 273, 273, 0, 273, 273, 273, 273, 273, + 273, 0, 273, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 276, 276, + 0, 0, 276, 276, 276, 276, 276, 0, 0, 276, + 276, 277, 276, 276, 276, 276, 276, 276, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 199, 272, 272, 0, 0, + 272, 272, 272, 272, 272, 0, 272, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 272, 272, 272, + 272, 272, 272, 0, 265, 0, 0, 0, 0, 0, + 0, 231, 220, 0, 0, 284, 229, 227, 0, 228, + 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 199, 0, 272, 272, 223, 207, 225, 217, 0, 277, + 277, 0, 0, 277, 277, 277, 277, 277, 0, 199, + 277, 277, 0, 277, 277, 277, 277, 277, 277, 265, + 277, 0, 0, 272, 272, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 277, 0, 0, 0, 0, 273, 273, 0, 0, 273, - 273, 273, 273, 273, 0, 0, 273, 273, 0, 273, - 273, 273, 273, 273, 273, 0, 273, 0, 0, 0, + 0, 0, 0, 0, 271, 271, 0, 0, 271, 271, + 271, 271, 271, 0, 271, 0, 0, 0, 218, 0, + 234, 0, 0, 0, 0, 271, 271, 271, 271, 271, + 271, 0, 0, 0, 0, 0, 0, 0, 199, 199, + 0, 0, 199, 199, 199, 199, 199, 0, 0, 199, + 199, 0, 199, 199, 199, 199, 199, 199, 0, 199, + 271, 271, 0, 0, 0, 0, 0, 265, 265, 0, + 0, 265, 265, 265, 265, 265, 0, 0, 265, 265, + 0, 265, 265, 265, 265, 265, 265, 0, 265, 0, + 0, 271, 271, 0, 0, 0, 0, 0, 0, 0, + 0, 231, 220, 0, 0, 0, 229, 227, 0, 228, + 0, 230, 0, 0, 0, 0, 272, 0, 0, 0, + 0, 0, 272, 0, 223, 207, 225, 217, 231, 220, + 0, 0, 0, 229, 227, 0, 228, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 276, 276, 0, 0, 276, 276, 276, 276, - 276, 0, 0, 276, 276, 277, 276, 276, 276, 276, - 276, 276, 0, 276, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, - 272, 272, 0, 0, 272, 272, 272, 272, 272, 0, - 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 272, 272, 272, 272, 272, 272, 0, 265, 0, - 0, 0, 0, 0, 0, 225, 214, 0, 0, 273, - 223, 221, 0, 222, 0, 224, 0, 0, 0, 0, - 0, 0, 0, 0, 199, 0, 272, 272, 217, 201, - 219, 211, 0, 277, 277, 0, 0, 277, 277, 277, - 277, 277, 0, 199, 277, 277, 0, 277, 277, 277, - 277, 277, 277, 265, 277, 0, 0, 272, 272, 0, - 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 271, 271, - 0, 0, 271, 271, 271, 271, 271, 0, 271, 0, - 0, 0, 212, 0, 228, 0, 0, 0, 0, 271, - 271, 271, 271, 271, 271, 0, 0, 0, 0, 0, - 0, 0, 199, 199, 0, 0, 199, 199, 199, 199, - 199, 0, 0, 199, 199, 0, 199, 199, 199, 199, - 199, 199, 0, 199, 271, 271, 0, 0, 0, 0, - 0, 265, 265, 0, 0, 265, 265, 265, 265, 265, - 0, 0, 265, 265, 0, 265, 265, 265, 265, 265, - 265, 0, 265, 0, 0, 271, 271, 0, 0, 0, - 0, 0, 0, 0, 0, 225, 214, 0, 0, 0, - 223, 221, 0, 222, 0, 224, 0, 0, 0, 0, - 272, 0, 0, 0, 0, 0, 261, 0, 217, 201, - 219, 211, 225, 214, 0, 0, 0, 223, 221, 0, - 222, 0, 224, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 425, 217, 201, 219, 211, 225, - 214, 0, 213, 486, 223, 221, 0, 222, 0, 224, + 444, 223, 207, 225, 217, 231, 220, 0, 219, 505, + 229, 227, 0, 228, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 223, 207, + 225, 217, 0, 0, 0, 219, 0, 0, 218, 0, + 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, + 0, 0, 219, 0, 0, 218, 0, 234, 0, 0, + 0, 0, 0, 0, 271, 237, 0, 0, 0, 0, + 0, 0, 252, 0, 0, 252, 0, 0, 252, 0, + 0, 0, 218, 0, 234, 0, 0, 0, 0, 0, + 0, 0, 252, 252, 0, 252, 0, 252, 0, 272, + 272, 0, 0, 272, 272, 272, 272, 272, 0, 0, + 272, 272, 0, 272, 272, 272, 272, 272, 272, 0, + 272, 0, 0, 0, 0, 0, 0, 252, 252, 0, + 0, 0, 0, 0, 226, 224, 235, 236, 208, 209, + 210, 211, 213, 0, 0, 221, 222, 0, 205, 206, + 212, 215, 214, 216, 0, 232, 0, 0, 252, 252, + 231, 220, 0, 0, 0, 229, 227, 0, 228, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 515, 223, 207, 225, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 217, 201, 219, 211, 0, 0, 0, 213, - 0, 0, 212, 0, 228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 271, 271, 0, + 0, 271, 271, 271, 271, 271, 233, 219, 271, 271, + 0, 271, 271, 271, 271, 271, 271, 0, 271, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, + 0, 0, 0, 233, 0, 0, 0, 218, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 227, 0, 0, 0, 0, 0, 213, 0, 0, 212, - 0, 228, 0, 0, 0, 0, 0, 0, 271, 231, - 0, 0, 0, 0, 0, 0, 252, 0, 0, 252, - 0, 0, 252, 0, 0, 0, 212, 0, 228, 0, - 0, 0, 0, 0, 0, 0, 252, 252, 0, 252, - 0, 252, 0, 272, 272, 0, 0, 272, 272, 272, - 272, 272, 0, 0, 272, 272, 0, 272, 272, 272, - 272, 272, 272, 0, 272, 0, 0, 0, 0, 0, - 0, 252, 252, 0, 0, 0, 0, 0, 220, 218, - 229, 230, 202, 203, 204, 205, 207, 0, 0, 215, - 216, 0, 199, 200, 206, 209, 208, 210, 0, 226, - 0, 0, 252, 252, 225, 214, 0, 0, 0, 223, - 221, 0, 222, 0, 224, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 496, 217, 201, 219, - 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, + 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 226, 224, 235, 236, 208, 209, + 210, 211, 213, 0, 0, 221, 222, 0, 205, 206, + 212, 215, 214, 216, 0, 232, 0, 0, 0, 0, + 0, 226, 224, 235, 236, 208, 209, 210, 211, 213, + 0, 0, 221, 222, 0, 205, 206, 212, 215, 214, + 216, 0, 232, 0, 0, 0, 0, 0, 226, 224, + 235, 236, 208, 209, 210, 211, 213, 0, 0, 221, + 222, 0, 205, 206, 212, 215, 214, 216, 0, 232, + 231, 220, 0, 0, 550, 229, 227, 0, 228, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 223, 207, 225, 217, 231, 220, 0, + 0, 555, 229, 227, 0, 228, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 271, 271, 0, 0, 271, 271, 271, 271, 271, - 227, 213, 271, 271, 0, 271, 271, 271, 271, 271, - 271, 0, 271, 0, 0, 0, 0, 0, 0, 231, - 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, - 0, 212, 0, 228, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, - 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, + 223, 207, 225, 217, 0, 233, 0, 219, 252, 252, + 252, 252, 252, 0, 0, 252, 252, 0, 252, 252, + 252, 252, 252, 252, 237, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 219, 0, 0, 218, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 231, 0, 252, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 220, 218, - 229, 230, 202, 203, 204, 205, 207, 0, 0, 215, - 216, 0, 199, 200, 206, 209, 208, 210, 0, 226, - 0, 0, 0, 0, 0, 220, 218, 229, 230, 202, - 203, 204, 205, 207, 0, 0, 215, 216, 0, 199, - 200, 206, 209, 208, 210, 0, 226, 0, 0, 0, - 0, 0, 220, 218, 229, 230, 202, 203, 204, 205, - 207, 0, 0, 215, 216, 0, 199, 200, 206, 209, - 208, 210, 0, 226, 225, 214, 0, 0, 531, 223, - 221, 0, 222, 0, 224, 0, 402, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 217, 201, 219, - 211, 225, 214, 0, 0, 536, 223, 221, 0, 222, - 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 217, 201, 219, 211, 0, 227, - 0, 213, 252, 252, 252, 252, 252, 0, 0, 252, - 252, 0, 252, 252, 252, 252, 252, 252, 231, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, - 0, 212, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, - 228, 492, 0, 0, 0, 0, 0, 0, 499, 0, + 0, 0, 0, 0, 218, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 220, 218, 229, - 230, 202, 203, 204, 205, 207, 0, 0, 215, 216, - 0, 199, 200, 206, 209, 208, 210, 0, 226, 225, - 214, 0, 0, 537, 223, 221, 0, 222, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 551, 217, 201, 219, 211, 225, 214, 558, 0, - 584, 223, 221, 0, 222, 0, 224, 0, 0, 566, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, - 201, 219, 211, 225, 214, 0, 213, 585, 223, 221, - 0, 222, 0, 224, 0, 0, 0, 0, 0, 0, - 595, 0, 0, 0, 0, 0, 217, 201, 219, 211, - 0, 0, 0, 213, 0, 0, 212, 0, 228, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, - 213, 0, 0, 212, 0, 228, 0, 624, 0, 0, - 0, 0, 627, 0, 0, 0, 0, 629, 231, 0, - 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, - 212, 0, 228, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, - 0, 0, 0, 225, 214, 0, 0, 0, 223, 221, - 0, 222, 0, 224, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 609, 217, 201, 219, 211, - 0, 0, 0, 0, 0, 0, 0, 220, 218, 229, - 230, 202, 203, 204, 205, 207, 0, 0, 215, 216, - 0, 199, 200, 206, 209, 208, 210, 0, 226, 0, - 213, 0, 0, 0, 220, 218, 229, 230, 202, 203, - 204, 205, 207, 0, 0, 215, 216, 0, 199, 200, - 206, 209, 208, 210, 0, 226, 0, 0, 0, 0, - 212, 0, 228, 0, 0, 0, 0, 0, 0, 0, - 0, 225, 214, 0, 0, 0, 223, 221, 0, 222, - 0, 224, 0, 0, 227, 0, 0, 0, 0, 0, - 0, 0, 623, 0, 217, 201, 219, 211, 0, 0, - 0, 0, 0, 231, 0, 0, 0, 0, 225, 214, - 0, 227, 0, 223, 221, 0, 222, 0, 224, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, - 231, 217, 201, 219, 211, 0, 0, 0, 227, 0, + 0, 0, 0, 226, 224, 235, 236, 208, 209, 210, + 211, 213, 0, 0, 221, 222, 0, 205, 206, 212, + 215, 214, 216, 0, 232, 231, 220, 0, 0, 556, + 229, 227, 0, 228, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 223, 207, + 225, 217, 231, 220, 0, 0, 603, 229, 227, 0, + 228, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 223, 207, 225, 217, 231, + 220, 0, 219, 604, 229, 227, 0, 228, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 231, 212, 0, - 228, 0, 0, 0, 0, 213, 0, 0, 0, 0, - 0, 0, 220, 218, 229, 230, 202, 203, 204, 205, - 207, 0, 0, 215, 216, 0, 199, 200, 206, 209, - 208, 210, 0, 226, 0, 212, 0, 228, 0, 220, - 218, 229, 230, 202, 203, 204, 205, 207, 0, 0, - 215, 216, 0, 199, 200, 206, 209, 208, 210, 0, - 226, 0, 0, 0, 0, 0, 220, 218, 229, 230, - 202, 203, 204, 205, 207, 0, 0, 215, 216, 0, - 199, 200, 206, 209, 208, 210, 0, 226, 227, 0, + 0, 0, 223, 207, 225, 217, 0, 0, 0, 219, + 0, 0, 218, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 231, 0, 225, - 214, 0, 0, 0, 223, 221, 0, 222, 0, 224, + 0, 0, 0, 0, 0, 233, 219, 0, 0, 218, + 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, + 0, 0, 233, 0, 0, 0, 218, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 217, 201, 219, 211, 0, 0, 0, 0, - 0, 0, 0, 0, 225, 214, 0, 0, 0, 223, - 221, 0, 222, 0, 224, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 213, 217, 201, 219, - 211, 0, 0, 0, 0, 0, 220, 218, 229, 230, - 202, 203, 204, 205, 207, 0, 227, 215, 216, 0, - 199, 200, 206, 209, 208, 210, 212, 226, 228, 0, - 0, 213, 0, 0, 0, 231, 0, 0, 0, 0, - 0, 0, 0, 0, 262, 262, 0, 0, 262, 262, - 262, 262, 262, 227, 262, 0, 0, 0, 0, 0, - 0, 212, 0, 228, 0, 262, 262, 262, 262, 262, - 262, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 0, 0, 0, 0, 0, 0, 0, 231, + 220, 0, 0, 0, 229, 227, 0, 228, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 628, 223, 207, 225, 217, 0, 0, 0, 0, + 0, 0, 0, 226, 224, 235, 236, 208, 209, 210, + 211, 213, 0, 0, 221, 222, 0, 205, 206, 212, + 215, 214, 216, 0, 232, 0, 219, 0, 0, 0, + 226, 224, 235, 236, 208, 209, 210, 211, 213, 0, + 0, 221, 222, 0, 205, 206, 212, 215, 214, 216, + 0, 232, 0, 0, 0, 0, 218, 0, 234, 0, + 0, 0, 0, 0, 0, 0, 0, 231, 220, 0, + 0, 0, 229, 227, 0, 228, 0, 230, 0, 0, + 233, 0, 0, 0, 0, 0, 0, 0, 642, 0, + 223, 207, 225, 217, 0, 0, 0, 0, 0, 237, + 0, 0, 0, 0, 231, 220, 0, 233, 0, 229, + 227, 0, 228, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 219, 0, 237, 223, 207, 225, + 217, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 262, 262, 0, 0, 220, 218, 229, 230, 202, 203, - 204, 205, 207, 0, 0, 215, 216, 0, 199, 200, - 206, 209, 208, 210, 0, 226, 0, 0, 0, 0, - 0, 262, 262, 0, 0, 0, 0, 0, 0, 0, - 0, 220, 218, 229, 230, 202, 203, 204, 205, 207, - 0, 0, 215, 216, 0, 199, 200, 206, 209, 208, - 210, 0, 226, 263, 263, 0, 0, 263, 263, 263, - 263, 263, 0, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 263, 263, 263, 263, 263, 263, + 0, 0, 0, 237, 218, 0, 234, 0, 0, 0, + 0, 219, 0, 0, 0, 0, 0, 0, 226, 224, + 235, 236, 208, 209, 210, 211, 213, 0, 0, 221, + 222, 0, 205, 206, 212, 215, 214, 216, 0, 232, + 0, 218, 0, 234, 0, 226, 224, 235, 236, 208, + 209, 210, 211, 213, 0, 0, 221, 222, 0, 205, + 206, 212, 215, 214, 216, 0, 232, 0, 0, 0, + 0, 0, 226, 224, 235, 236, 208, 209, 210, 211, + 213, 0, 0, 221, 222, 0, 205, 206, 212, 215, + 214, 216, 0, 232, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 264, 264, 0, 0, 264, 264, 264, 264, 264, 0, - 264, 0, 0, 0, 227, 0, 0, 0, 0, 263, - 263, 264, 264, 264, 264, 264, 264, 0, 0, 0, - 0, 0, 0, 231, 0, 0, 0, 0, 260, 0, - 0, 260, 0, 260, 260, 260, 0, 0, 0, 227, - 263, 263, 0, 0, 0, 0, 264, 264, 260, 260, - 260, 260, 260, 260, 262, 0, 0, 0, 231, 0, - 0, 0, 0, 0, 0, 261, 0, 0, 261, 0, - 261, 261, 261, 0, 0, 0, 0, 264, 264, 0, - 0, 0, 0, 260, 260, 261, 261, 261, 261, 261, - 261, 0, 220, 218, 229, 230, 202, 203, 204, 205, - 207, 0, 0, 215, 216, 0, 0, 200, 206, 209, - 208, 210, 0, 226, 260, 260, 0, 0, 0, 0, - 261, 261, 0, 0, 0, 0, 0, 220, 218, 229, - 230, 202, 203, 204, 205, 207, 0, 0, 215, 216, - 0, 0, 0, 206, 209, 208, 210, 0, 226, 0, - 0, 261, 261, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 254, 0, 0, 254, 0, 0, 254, 0, - 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 254, 254, 0, 254, 0, 254, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 262, 262, 0, - 0, 262, 262, 262, 262, 262, 0, 0, 262, 262, - 264, 262, 262, 262, 262, 262, 262, 254, 254, 0, - 0, 253, 0, 0, 253, 0, 0, 253, 0, 0, + 0, 0, 0, 237, 0, 231, 220, 0, 0, 0, + 229, 227, 0, 228, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 223, 207, + 225, 217, 0, 0, 0, 0, 0, 0, 0, 0, + 231, 220, 0, 0, 0, 229, 227, 0, 228, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 219, 223, 207, 225, 217, 0, 0, 0, + 0, 0, 226, 224, 235, 236, 208, 209, 210, 211, + 213, 0, 233, 221, 222, 0, 205, 206, 212, 215, + 214, 216, 218, 232, 234, 0, 0, 219, 0, 0, + 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, + 262, 262, 0, 0, 262, 262, 262, 262, 262, 233, + 262, 0, 0, 0, 0, 0, 0, 218, 0, 234, + 0, 262, 262, 262, 262, 262, 262, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 253, 253, 0, 253, 0, 253, 260, 254, 254, - 255, 0, 0, 255, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 255, 0, 255, 0, 255, 253, 253, 0, 0, - 0, 0, 0, 0, 261, 0, 0, 0, 0, 270, - 0, 0, 270, 0, 0, 270, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 255, 255, 253, 253, 270, - 270, 0, 270, 0, 270, 0, 263, 263, 0, 0, - 263, 263, 263, 263, 263, 0, 0, 263, 263, 0, - 263, 263, 263, 263, 263, 263, 255, 255, 0, 0, - 0, 0, 0, 0, 270, 270, 0, 0, 0, 0, - 0, 0, 0, 264, 264, 0, 0, 264, 264, 264, - 264, 264, 0, 0, 264, 264, 0, 264, 264, 264, - 264, 264, 264, 0, 0, 270, 270, 0, 0, 0, - 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, - 260, 260, 0, 0, 260, 260, 260, 260, 260, 0, - 0, 260, 260, 0, 260, 260, 260, 260, 260, 260, + 0, 0, 0, 0, 0, 0, 262, 262, 0, 0, + 226, 224, 235, 236, 208, 209, 210, 211, 213, 0, + 0, 221, 222, 0, 205, 206, 212, 215, 214, 216, + 0, 232, 0, 0, 0, 0, 0, 262, 262, 0, + 0, 0, 0, 0, 0, 0, 0, 226, 224, 235, + 236, 208, 209, 210, 211, 213, 0, 0, 221, 222, + 0, 205, 206, 212, 215, 214, 216, 0, 232, 263, + 263, 0, 0, 263, 263, 263, 263, 263, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 261, 261, 0, - 0, 261, 261, 261, 261, 261, 0, 0, 261, 261, - 253, 261, 261, 261, 261, 261, 261, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, - 0, 251, 0, 0, 251, 0, 0, 0, 0, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 251, 251, - 0, 251, 208, 251, 0, 208, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 269, 208, - 208, 269, 208, 0, 208, 0, 0, 0, 270, 0, - 0, 0, 0, 251, 251, 269, 269, 0, 269, 0, - 269, 0, 0, 0, 0, 0, 0, 0, 254, 254, - 254, 254, 254, 0, 208, 254, 254, 0, 254, 254, - 254, 254, 254, 254, 251, 251, 0, 0, 0, 250, - 269, 269, 250, 0, 0, 250, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 208, 0, 0, 250, - 250, 0, 250, 0, 250, 0, 0, 0, 0, 0, - 0, 269, 269, 0, 0, 0, 0, 253, 253, 253, - 253, 253, 0, 0, 253, 253, 0, 253, 253, 253, - 253, 253, 253, 0, 250, 250, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 0, 0, 255, 255, 0, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 250, 250, 0, 0, 0, + 263, 263, 263, 263, 263, 263, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 264, 264, 0, 0, + 264, 264, 264, 264, 264, 0, 264, 0, 0, 0, + 233, 0, 0, 0, 0, 263, 263, 264, 264, 264, + 264, 264, 264, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 0, 0, 260, 0, 0, 260, 0, 260, + 260, 260, 0, 0, 0, 233, 263, 263, 0, 0, + 0, 0, 264, 264, 260, 260, 260, 260, 260, 260, + 262, 0, 0, 0, 237, 0, 0, 0, 0, 0, + 0, 261, 0, 0, 261, 0, 261, 261, 261, 0, + 0, 0, 0, 264, 264, 0, 0, 0, 0, 260, + 260, 261, 261, 261, 261, 261, 261, 0, 226, 224, + 235, 236, 208, 209, 210, 211, 213, 0, 0, 221, + 222, 0, 0, 206, 212, 215, 214, 216, 0, 232, + 260, 260, 0, 0, 0, 0, 261, 261, 0, 0, + 0, 0, 0, 226, 224, 235, 236, 208, 209, 210, + 211, 213, 0, 0, 221, 222, 0, 0, 0, 212, + 215, 214, 216, 0, 232, 0, 0, 261, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, + 0, 254, 0, 0, 254, 0, 0, 0, 0, 263, + 0, 0, 0, 0, 0, 0, 0, 0, 254, 254, + 0, 254, 0, 254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 262, 262, 0, 0, 262, 262, 262, + 262, 262, 0, 0, 262, 262, 264, 262, 262, 262, + 262, 262, 262, 254, 254, 0, 0, 253, 0, 0, + 253, 0, 0, 253, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 253, 253, 0, + 253, 0, 253, 260, 254, 254, 255, 0, 0, 255, + 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 255, 255, 0, 255, + 0, 255, 253, 253, 0, 0, 0, 0, 0, 0, + 261, 0, 0, 0, 0, 270, 0, 0, 270, 0, + 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 255, 255, 253, 253, 270, 270, 0, 270, 0, + 270, 0, 263, 263, 0, 0, 263, 263, 263, 263, + 263, 0, 0, 263, 263, 0, 263, 263, 263, 263, + 263, 263, 255, 255, 0, 0, 0, 0, 0, 0, + 270, 270, 0, 0, 0, 0, 0, 0, 0, 264, + 264, 0, 0, 264, 264, 264, 264, 264, 0, 0, + 264, 264, 0, 264, 264, 264, 264, 264, 264, 0, + 0, 270, 270, 0, 0, 0, 0, 254, 0, 0, + 0, 0, 0, 0, 0, 0, 260, 260, 0, 0, + 260, 260, 260, 260, 260, 0, 0, 260, 260, 0, + 260, 260, 260, 260, 260, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 270, 270, 270, 270, 270, - 0, 0, 270, 270, 0, 270, 270, 270, 270, 270, - 270, 0, 267, 0, 0, 267, 0, 251, 267, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, - 0, 256, 267, 267, 256, 267, 0, 267, 208, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 256, 256, - 0, 256, 0, 256, 269, 257, 0, 0, 257, 0, - 0, 257, 0, 0, 0, 0, 0, 267, 267, 0, - 0, 0, 0, 0, 0, 257, 257, 0, 257, 0, - 257, 0, 0, 256, 256, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 267, 267, - 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, - 257, 257, 0, 0, 256, 256, 0, 0, 0, 0, + 0, 0, 0, 261, 261, 0, 0, 261, 261, 261, + 261, 261, 0, 0, 261, 261, 253, 261, 261, 261, + 261, 261, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 251, 0, 0, 251, 0, 0, + 251, 0, 0, 0, 0, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 251, 251, 0, 251, 266, 251, + 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 269, 266, 266, 269, 266, 0, + 266, 0, 0, 0, 270, 0, 0, 0, 0, 251, + 251, 269, 269, 0, 269, 0, 269, 0, 0, 0, + 0, 0, 0, 0, 254, 254, 254, 254, 254, 0, + 266, 254, 254, 0, 254, 254, 254, 254, 254, 254, + 251, 251, 0, 0, 0, 250, 269, 269, 250, 0, + 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 266, 266, 0, 0, 250, 250, 0, 250, 0, + 250, 0, 0, 0, 0, 0, 0, 269, 269, 0, + 0, 0, 0, 253, 253, 253, 253, 253, 0, 0, + 253, 253, 0, 253, 253, 253, 253, 253, 253, 0, + 250, 250, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, 255, 0, 0, 255, + 255, 0, 255, 255, 255, 255, 255, 255, 0, 0, + 0, 250, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 130, 0, 140, 0, 0, 0, 0, - 139, 257, 257, 128, 0, 129, 0, 0, 0, 0, + 0, 270, 270, 270, 270, 270, 0, 0, 270, 270, + 0, 270, 270, 270, 270, 270, 270, 0, 267, 0, + 0, 267, 0, 251, 267, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 256, 0, 0, 256, 267, 267, + 256, 267, 0, 267, 266, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 256, 256, 0, 256, 0, 256, + 269, 257, 0, 0, 257, 0, 0, 257, 0, 0, + 0, 0, 0, 267, 267, 0, 0, 0, 0, 0, + 201, 257, 257, 201, 257, 0, 257, 0, 0, 256, + 256, 0, 0, 0, 0, 0, 0, 201, 201, 0, + 201, 0, 201, 0, 267, 267, 208, 0, 0, 208, + 0, 0, 0, 0, 250, 0, 257, 257, 0, 0, + 256, 256, 0, 208, 208, 0, 208, 0, 208, 0, + 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 257, 257, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, + 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, + 251, 251, 251, 251, 251, 0, 0, 251, 251, 0, + 251, 251, 251, 251, 251, 251, 0, 0, 0, 0, + 208, 266, 266, 266, 266, 266, 0, 0, 0, 0, + 0, 266, 266, 266, 266, 266, 266, 269, 269, 269, + 269, 269, 0, 0, 269, 269, 0, 269, 269, 269, + 269, 269, 269, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 0, 142, 0, 0, 267, 0, 141, + 0, 0, 130, 0, 131, 0, 0, 0, 0, 0, + 0, 0, 0, 256, 0, 0, 0, 0, 0, 313, + 0, 250, 250, 250, 250, 250, 0, 0, 250, 250, + 0, 250, 250, 250, 250, 250, 250, 132, 0, 142, + 257, 0, 0, 0, 141, 0, 0, 130, 0, 131, + 83, 0, 0, 0, 0, 0, 201, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 302, 0, 0, 0, 251, 251, 251, 251, 251, 0, - 0, 251, 251, 0, 251, 251, 251, 251, 251, 251, - 0, 0, 0, 0, 0, 208, 208, 208, 208, 208, - 0, 83, 0, 0, 0, 208, 208, 208, 208, 208, - 208, 269, 269, 269, 269, 269, 0, 0, 269, 269, - 0, 269, 269, 269, 269, 269, 269, 0, 0, 0, - 130, 0, 140, 0, 0, 0, 131, 139, 0, 0, - 128, 267, 129, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 256, 0, 306, - 0, 0, 0, 0, 0, 250, 250, 250, 250, 250, - 0, 0, 250, 250, 0, 250, 250, 250, 250, 250, - 250, 0, 0, 0, 257, 0, 0, 0, 83, 130, - 0, 140, 0, 0, 0, 0, 139, 0, 0, 128, - 130, 129, 140, 0, 0, 0, 0, 139, 0, 0, - 128, 0, 129, 0, 127, 0, 0, 0, 0, 0, - 0, 0, 0, 131, 0, 0, 0, 0, 298, 130, - 0, 140, 0, 0, 0, 0, 139, 0, 0, 128, - 0, 129, 0, 0, 0, 0, 0, 83, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 300, 83, 0, + 0, 0, 208, 0, 132, 133, 142, 0, 0, 0, + 0, 141, 0, 0, 130, 83, 131, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 173, 86, 87, 88, 89, 90, 0, 0, 0, 0, - 0, 0, 131, 0, 0, 0, 0, 83, 267, 267, - 267, 267, 267, 131, 0, 0, 10, 0, 267, 267, - 267, 267, 267, 267, 256, 256, 256, 256, 256, 0, - 0, 0, 0, 0, 256, 256, 256, 256, 256, 256, - 0, 0, 131, 135, 0, 0, 0, 0, 0, 0, - 0, 257, 257, 257, 257, 257, 0, 0, 0, 0, - 0, 257, 257, 257, 257, 257, 257, 0, 0, 0, - 138, 0, 0, 0, 0, 0, 134, 173, 86, 87, - 88, 89, 90, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 130, 0, - 140, 0, 0, 10, 0, 139, 0, 0, 128, 0, - 129, 223, 0, 223, 0, 0, 0, 0, 223, 0, - 0, 223, 0, 223, 0, 0, 0, 0, 0, 0, - 135, 303, 132, 133, 0, 0, 136, 137, 87, 88, - 89, 90, 0, 0, 0, 0, 0, 173, 86, 87, - 88, 89, 90, 0, 0, 0, 83, 138, 0, 0, - 0, 0, 10, 134, 0, 0, 0, 0, 0, 223, - 0, 223, 0, 10, 0, 0, 173, 86, 87, 88, - 89, 90, 0, 0, 126, 0, 0, 0, 347, 135, - 0, 131, 0, 0, 0, 0, 0, 0, 0, 130, - 135, 140, 10, 0, 223, 0, 139, 0, 0, 128, - 0, 129, 0, 0, 0, 0, 138, 307, 0, 132, - 133, 0, 134, 0, 0, 0, 0, 138, 0, 135, - 130, 0, 140, 134, 0, 0, 0, 139, 0, 0, - 128, 0, 129, 126, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 126, 0, 138, 83, 0, 0, - 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 132, 133, - 0, 0, 0, 126, 0, 0, 0, 0, 188, 132, - 133, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 132, 133, - 0, 0, 0, 131, 0, 173, 86, 87, 88, 89, - 90, 0, 0, 0, 0, 0, 0, 0, 223, 223, - 223, 223, 223, 223, 0, 0, 0, 0, 0, 0, - 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, + 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 0, 267, 267, 267, 267, 267, 0, + 0, 0, 0, 0, 267, 267, 267, 267, 267, 267, + 256, 256, 256, 256, 256, 0, 0, 0, 0, 0, + 256, 256, 256, 256, 256, 256, 0, 133, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 257, 257, 257, + 257, 257, 0, 0, 0, 0, 0, 257, 257, 257, + 257, 257, 257, 201, 201, 201, 201, 201, 0, 0, + 0, 0, 0, 201, 201, 201, 201, 201, 201, 179, + 86, 87, 88, 89, 90, 0, 0, 0, 0, 208, + 208, 208, 208, 208, 0, 0, 0, 0, 0, 208, + 208, 208, 208, 208, 208, 10, 132, 0, 142, 0, + 0, 0, 0, 141, 0, 0, 130, 0, 131, 0, + 0, 0, 0, 0, 179, 86, 87, 88, 89, 90, + 0, 0, 137, 0, 132, 0, 142, 0, 0, 0, + 0, 141, 0, 0, 130, 0, 131, 0, 0, 0, + 10, 132, 0, 142, 0, 0, 0, 0, 141, 140, + 0, 130, 309, 131, 194, 136, 0, 0, 0, 0, + 0, 138, 139, 87, 88, 89, 90, 137, 0, 311, + 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, + 0, 0, 83, 0, 0, 0, 113, 10, 0, 133, + 0, 0, 0, 0, 140, 0, 0, 0, 0, 83, + 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 314, 134, 135, 0, 137, 0, 0, 133, 0, 0, + 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, + 0, 140, 0, 0, 0, 0, 0, 136, 0, 0, + 0, 132, 0, 142, 318, 0, 134, 135, 141, 0, + 0, 130, 0, 131, 0, 0, 0, 0, 128, 0, + 0, 223, 0, 223, 0, 0, 0, 0, 223, 0, + 0, 223, 0, 223, 0, 132, 0, 142, 0, 0, + 0, 0, 141, 0, 0, 130, 0, 131, 0, 0, + 0, 0, 0, 134, 135, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 179, 86, 87, 88, 89, 90, 223, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, - 0, 134, 0, 0, 0, 0, 0, 0, 223, 0, - 0, 0, 0, 0, 223, 0, 173, 86, 87, 88, - 89, 90, 126, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 0, 0, 173, 86, 87, - 88, 89, 90, 0, 0, 0, 0, 132, 133, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, - 223, 223, 0, 10, 0, 0, 0, 0, 0, 0, + 0, 362, 0, 83, 133, 0, 0, 0, 0, 10, + 0, 179, 86, 87, 88, 89, 90, 0, 0, 0, + 0, 0, 0, 0, 223, 0, 0, 0, 179, 86, + 87, 88, 89, 90, 0, 0, 137, 10, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, - 135, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, + 0, 0, 0, 195, 137, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 126, 0, 0, 0, 189, 0, 0, - 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 126, 0, 0, 0, 132, 133, + 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, + 128, 140, 0, 0, 0, 0, 0, 136, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, + 0, 0, 0, 0, 136, 0, 0, 0, 128, 0, + 0, 0, 0, 0, 0, 134, 135, 0, 0, 0, + 0, 0, 0, 0, 0, 128, 0, 0, 179, 86, + 87, 88, 89, 90, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 134, 135, 0, 0, 0, 223, 223, + 223, 223, 223, 223, 10, 0, 0, 0, 0, 0, + 134, 135, 179, 86, 87, 88, 89, 90, 0, 0, + 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, + 0, 137, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 223, 0, 0, 0, 0, 0, 0, 140, 0, + 0, 0, 0, 0, 136, 137, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, + 0, 0, 0, 0, 223, 128, 0, 0, 0, 0, + 0, 0, 140, 0, 0, 0, 0, 0, 136, 0, + 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, + 134, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, - 133, + 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 134, 135, ); protected static $yyCheck = array(4, - 61, 62, 63, 40, 155, 120, 46, 41, 60, 46, - 44, 59, 71, 42, 125, 41, 124, 41, 391, 59, - 125, 46, 125, 84, 41, 169, 91, 44, 240, 34, - 35, 260, 63, 41, 126, 40, 44, 98, 438, 100, - 126, 58, 59, 40, 260, 41, 105, 106, 44, 41, - 260, 93, 44, 60, 91, 170, 61, 62, 63, 120, - 91, 44, 58, 59, 69, 70, 71, 303, 123, 91, - 39, 300, 44, 44, 44, 123, 93, 260, 91, 84, - 49, 50, 51, 125, 91, 93, 304, 59, 41, 59, - 300, 44, 97, 98, 44, 100, 59, 93, 40, 472, - 105, 106, 44, 286, 260, 58, 59, 319, 125, 170, - 93, 340, 512, 37, 38, 120, 126, 268, 42, 43, - 181, 45, 93, 47, 340, 46, 123, 37, 38, 125, - 443, 44, 42, 43, 139, 45, 60, 47, 62, 46, - 93, 514, 125, 93, 300, 41, 46, 58, 44, 332, - 60, 93, 62, 125, 364, 46, 59, 260, 163, 164, - 123, 166, 91, 59, 59, 170, 227, 58, 541, 320, - 94, 41, 125, 486, 44, 125, 181, 37, 103, 91, - 93, 64, 42, 43, 94, 45, 58, 47, 58, 59, - 63, 342, 197, 344, 91, 260, 340, 93, 46, 411, - 124, 126, 126, 128, 129, 130, 131, 132, 133, 257, - 135, 46, 125, 61, 139, 59, 126, 91, 91, 37, - 312, 286, 227, 93, 42, 43, 231, 45, 123, 47, - 155, 260, 340, 257, 44, 300, 301, 302, 260, 331, - 257, 37, 60, 40, 62, 331, 42, 260, 253, 393, - 59, 47, 62, 260, 405, 125, 311, 59, 183, 410, - 185, 257, 373, 374, 286, 257, 126, 332, 373, 374, - 239, 300, 277, 59, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 312, 228, 257, 125, 457, 320, 126, 340, - 402, 403, 59, 320, 123, 240, 402, 403, 340, 332, - 41, 331, 33, 44, 35, 332, 44, 340, 60, 40, - 126, 260, 43, 340, 45, 364, 261, 58, 59, 61, - 61, 260, 63, 268, 62, 270, 37, 38, 260, 260, - 261, 42, 43, 91, 45, 93, 47, 286, 410, 44, - 40, 257, 257, 260, 548, 549, 46, 286, 427, 60, - 410, 62, 93, 298, 286, 300, 410, 302, 303, 530, - 91, 306, 307, 420, 410, 410, 260, 257, 312, 286, - 97, 575, 402, 403, 319, 320, 63, 414, 415, 330, - 477, 478, 312, 124, 125, 573, 574, 331, 93, 340, - 41, 421, 286, 44, 125, 126, 46, 342, 414, 344, - 332, 331, 310, 428, 91, 350, 41, 542, 340, 44, - 598, 61, 583, 438, 359, 126, 40, 33, 515, 35, - 260, 260, 46, 340, 40, 37, 310, 43, 257, 45, - 42, 43, 312, 45, 58, 47, 410, 164, 332, 166, - 41, 414, 415, 40, 311, 41, 286, 286, 44, 46, - 395, 331, 477, 478, 181, 123, 400, 401, 402, 403, - 405, 542, 40, 260, 58, 410, 411, 411, 412, 414, - 400, 401, 402, 403, 312, 91, 40, 421, 260, 261, - 44, 411, 412, 344, 345, 139, 283, 512, 41, 286, - 515, 421, 332, 331, 519, 59, 312, 41, 187, 310, - 44, 340, 383, 300, 41, 41, 59, 44, 44, 125, - 126, 91, 457, 458, 126, 331, 257, 542, 599, 123, - 465, 466, 402, 403, 414, 415, 253, 373, 374, 260, - 261, 262, 263, 264, 265, 33, 417, 35, 619, 44, - 93, 421, 40, 197, 123, 43, 276, 45, 493, 279, - 300, 301, 302, 13, 14, 286, 300, 301, 302, 123, - 505, 125, 400, 401, 402, 403, 58, 364, 123, 33, - 44, 35, 125, 260, 599, 264, 40, 231, 410, 43, - 93, 45, 313, 421, 273, 530, 402, 403, 533, 44, - 535, 105, 106, 91, 619, 61, 49, 50, 51, 286, - 41, 312, 93, 44, 41, 421, 340, 44, 260, 340, - 341, 342, 343, 257, 41, 346, 44, 58, 59, 41, - 331, 58, 59, 277, 569, 123, 123, 91, 126, 360, - 361, 362, 363, 260, 365, 366, 367, 91, 583, 370, - 371, 372, 373, 374, 260, 261, 262, 263, 264, 265, - 531, 40, 93, 125, 123, 536, 93, 61, 123, 58, - 605, 40, 126, 404, 405, 406, 407, 408, 58, 358, - 286, 402, 403, 414, 415, 416, 417, 418, 419, 260, - 123, 40, 40, 260, 125, 41, 125, 93, 125, 400, - 401, 402, 403, 41, 40, 125, 61, 313, 40, 430, - 411, 412, 40, 91, 585, 123, 41, 340, 125, 125, - 421, 125, 401, 40, 40, 40, 91, 40, 59, 41, - 59, 40, 44, 604, 340, 341, 342, 343, 40, 340, - 346, 91, 260, 41, 615, 59, 58, 59, 41, 61, - 61, 63, 59, 361, 360, 361, 362, 363, 340, 365, - 366, 367, 61, 59, 370, 41, 372, 373, 374, 448, - 44, 93, 260, 261, 262, 263, 264, 265, 125, 37, - 38, 93, 40, 41, 42, 43, 44, 45, 123, 47, - 59, 125, 40, 44, 260, 41, 402, 403, 286, 364, - 58, 59, 60, 61, 62, 63, 260, 261, 262, 263, - 264, 265, 321, 125, 41, 123, 260, 261, 262, 263, - 264, 265, 123, 340, 430, 313, 257, 340, 41, 59, - 257, 125, 286, 91, 91, 93, 94, 125, 37, 371, - 125, 123, 286, 42, 43, 40, 45, 59, 47, 41, - 125, 58, 340, 341, 342, 343, 300, 125, 346, 313, - 125, 60, 41, 62, 123, 123, 124, 125, 126, 125, - 123, 123, 360, 361, 362, 363, 93, 365, 366, 367, - 41, 41, 370, 125, 372, 257, 340, 341, 342, 343, - 58, 125, 346, 91, 91, 260, 261, 262, 263, 264, - 265, 91, 346, 125, 93, 125, 360, 361, 362, 363, - 260, 365, 366, 367, 402, 403, 370, 41, 372, 123, - 44, 286, 59, 59, 41, 91, 59, 126, 41, 41, - 364, 41, 41, 7, 58, 59, 286, 61, 125, 63, - 125, 6, 430, 77, 102, 257, 339, 483, 402, 403, - 300, 301, 302, 37, 38, 478, 40, 41, 42, 43, - 44, 45, 519, 47, 60, 59, 109, 506, 345, 93, - 94, 591, 494, 181, 58, 59, 430, 61, 62, 63, - 555, 346, 332, 414, 415, 181, 41, 414, 415, 44, - 277, 531, 555, 242, 197, 41, 536, 238, 44, 257, - 124, 125, 260, 91, 59, -1, 31, 91, 91, 93, - 94, 37, 38, 59, 40, 41, 42, 43, 44, 45, - 46, 47, 166, 280, 281, 282, 283, 284, 285, -1, - 287, -1, 58, 59, 60, 61, 62, 63, 93, 123, - 124, 125, 126, -1, -1, 585, 303, 93, 91, -1, - -1, -1, 310, 311, 312, -1, -1, -1, -1, -1, - -1, -1, 320, -1, 604, 91, -1, 93, 94, -1, - 125, -1, 330, 331, 332, 615, -1, 334, -1, 125, - -1, -1, 340, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 404, 405, 406, 407, 408, -1, 124, 125, - 126, -1, 414, 415, 416, 417, 418, 419, -1, -1, - -1, -1, -1, 312, 280, 281, 282, 283, 284, 285, - -1, 287, -1, 41, -1, -1, 44, -1, -1, -1, - -1, -1, 331, 257, 300, 301, 302, -1, 304, -1, - 58, 59, 400, 401, 402, 403, 404, 405, 406, 407, - 408, -1, 410, 411, 412, -1, 414, 415, 416, 417, - 418, 419, -1, 421, 37, 38, -1, -1, 41, 42, - 43, 44, 45, 257, 47, 93, 260, 260, 261, 262, - 263, 264, 265, -1, -1, 58, 59, 60, 61, 62, - 63, -1, 280, 281, 282, 283, 284, 285, -1, 287, - -1, 400, 401, 402, 403, -1, -1, 125, -1, -1, - -1, 257, 411, 412, -1, 303, 41, 260, 91, 44, - 93, 94, 421, -1, -1, -1, 310, 311, 312, -1, - -1, 257, -1, 58, 59, -1, 320, 280, 281, 282, - 283, 284, 285, 286, 287, -1, 330, 331, 332, -1, - -1, 124, 125, 126, 41, -1, 340, 44, -1, -1, - 303, -1, 280, 281, 282, 283, 284, 285, 93, 287, - -1, 58, 59, -1, -1, -1, -1, -1, -1, -1, - 404, 405, 406, 407, 408, 303, 312, -1, -1, 332, - 414, 415, 416, 417, 418, 419, -1, -1, -1, -1, - 125, -1, -1, -1, -1, 331, 93, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 400, 401, 402, 403, + 61, 62, 63, 41, 126, 122, 157, 71, 60, 40, + 46, 41, 193, 175, 44, 46, 125, 124, 42, 125, + 303, 46, 59, 84, 41, 59, 59, 44, 40, 34, + 35, 125, 41, 91, 59, 40, 141, 98, 123, 100, + 37, 105, 106, 58, 457, 42, 43, 246, 45, 63, + 47, 93, 409, 63, 462, 126, 61, 62, 63, 176, + 91, 122, 37, 38, 69, 70, 71, 42, 43, 304, + 45, 59, 47, 260, 260, 97, 44, 91, 91, 84, + 46, 91, 260, 125, 91, 60, 123, 62, 44, 123, + 123, 113, 97, 98, 275, 100, 283, 505, 203, 286, + 105, 106, 41, 284, 41, 44, 41, 44, 113, 44, + 44, 123, 125, 300, 300, 176, 260, 122, 531, 94, + 59, 58, 59, 58, 59, 93, 187, 41, 279, 126, + 44, 330, 237, 37, 491, 123, 141, 93, 42, 43, + 91, 45, 286, 47, 166, 59, 168, 260, 40, 124, + 172, 126, 44, 46, 93, 44, 93, 125, 93, 93, + 165, 166, 340, 168, 59, 187, 260, 172, 61, 125, + 59, 176, 233, 60, 125, 41, 533, 364, 364, 93, + 331, 260, 187, 288, 46, 103, 125, 300, 125, 46, + 125, 125, 373, 355, 44, 37, 340, 91, 203, 61, + 42, 93, 260, 560, 91, 47, 357, 286, 359, 331, + 128, 41, 130, 131, 132, 133, 134, 135, 41, 137, + 257, 44, 126, 141, 257, 91, 311, 340, 233, 123, + 252, 430, 237, 340, 256, 91, 260, 93, 419, 157, + 257, 312, 264, 93, 126, 260, 261, 252, 257, 411, + 46, 256, 64, 260, 261, 262, 263, 264, 265, 264, + 331, 91, 320, 44, 373, 374, 46, 373, 374, 257, + 93, 189, 423, 191, 332, 330, 300, 428, 59, 286, + 402, 403, 340, 288, 126, 340, 467, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 312, 234, 33, 257, 35, + 257, 343, 257, 58, 40, 476, 340, 43, 246, 45, + 44, 402, 403, 91, 331, 592, 593, 312, 343, 346, + 364, 44, 59, 257, 125, 37, 38, 260, 62, 44, + 42, 43, 46, 45, 272, 47, 331, 40, 410, 41, + 617, 279, 44, 281, 58, 123, 260, 62, 60, 59, + 62, 123, 410, 260, 410, 91, 58, 59, 37, 38, + 410, 59, 446, 42, 43, 410, 45, 300, 47, 420, + 93, 309, 286, 311, 41, 313, 314, 44, 549, 317, + 318, 60, 94, 62, 41, 402, 403, 44, 60, 125, + 126, 93, 330, 331, 362, 41, 40, 91, 44, 59, + 40, 41, 46, 40, 421, 400, 401, 402, 403, 46, + 312, 496, 497, 320, 126, 310, 411, 412, 332, 357, + 310, 359, 447, 125, 561, 332, 421, 365, 33, 331, + 35, 602, 457, 340, 41, 40, 374, 44, 43, 123, + 45, 125, 61, 39, 410, 63, 41, 126, 311, 534, + 312, 91, 91, 49, 50, 51, 37, 414, 415, 414, + 415, 42, 43, 40, 45, 123, 47, 567, 568, 331, + 91, 496, 497, 91, 41, 413, 310, 44, 58, 60, + 561, 62, 260, 123, 123, 423, 91, 91, 260, 123, + 428, 44, 430, 41, 594, 433, 44, 300, 301, 302, + 402, 403, 123, 471, 41, 123, 531, 44, 286, 534, + 478, 40, 123, 538, 286, 44, 58, 40, 410, 421, + 125, 126, 59, 46, 260, 261, 262, 263, 264, 265, + 59, 41, 123, 91, 44, 58, 561, 618, 476, 477, + 402, 403, 300, 301, 302, 126, 484, 485, 58, 59, + 286, 33, 44, 35, 332, 257, 93, 638, 40, 421, + 332, 43, 340, 45, 44, 123, 260, 261, 262, 263, + 264, 265, 93, 541, 512, 61, 260, 313, 287, 257, + 548, 290, 257, 93, 93, 33, 524, 35, 125, 260, + 261, 559, 40, 618, 123, 43, 125, 45, 344, 345, + 312, 260, 286, 257, 340, 341, 342, 343, 340, 91, + 346, 549, 41, 638, 552, 125, 554, 373, 374, 331, + 260, 260, 590, 44, 360, 361, 362, 363, 41, 365, + 366, 367, 44, 312, 370, 371, 372, 373, 374, 260, + 123, 123, 260, 91, 126, 260, 286, 286, 332, 245, + 588, 619, 331, 13, 14, 260, 261, 262, 263, 264, + 265, 49, 50, 51, 602, 286, 402, 403, 286, 637, + 105, 106, 125, 40, 642, 550, 123, 123, 126, 647, + 555, 286, 61, 40, 58, 40, 624, 41, 400, 401, + 402, 403, 58, 41, 430, 260, 44, 260, 123, 411, + 412, 340, 260, 40, 40, 59, 63, 41, 313, 421, + 58, 59, 414, 415, 125, 93, 41, 40, 125, 340, + 61, 400, 401, 402, 403, 40, 40, 91, 286, 604, + 123, 312, 411, 412, 91, 340, 341, 342, 343, 93, + 41, 346, 421, 125, 125, 93, 340, 257, 623, 125, + 331, 40, 40, 40, 59, 360, 361, 362, 363, 634, + 365, 366, 367, 59, 40, 370, 123, 372, 373, 374, + 40, 125, 340, 59, 40, 260, 41, 125, 260, 261, + 262, 263, 264, 265, 41, 37, 38, 44, 40, 41, + 42, 43, 44, 45, 41, 47, 59, 402, 403, 61, + 361, 58, 59, 61, 286, 340, 58, 59, 60, 61, + 62, 63, 260, 261, 262, 263, 264, 265, 59, 400, + 401, 402, 403, 41, 91, 430, 125, 44, 123, 93, + 59, 313, 125, 40, 44, 340, 93, 364, 286, 91, + 421, 93, 94, 123, 37, 260, 321, 41, 123, 42, + 43, 41, 45, 340, 47, 41, 123, 125, 340, 341, + 342, 343, 59, 371, 346, 313, 125, 60, 125, 62, + 125, 123, 124, 125, 126, 91, 40, 123, 360, 361, + 362, 363, 91, 365, 366, 367, 59, 125, 370, 125, + 372, 41, 340, 341, 342, 343, 58, 125, 346, 41, + 123, 125, 123, 260, 414, 415, 93, 123, 123, 257, + 41, 41, 360, 361, 362, 363, 91, 365, 366, 367, + 402, 403, 370, 41, 372, 257, 44, 125, 257, 286, + 58, 91, 44, 126, 125, 91, 91, 125, 123, 93, + 58, 59, 125, 61, 59, 63, 59, 41, 430, 59, + 41, 41, 41, 41, 402, 403, 364, 125, 125, 37, + 38, 7, 40, 41, 42, 43, 44, 45, 6, 47, + 77, 354, 502, 102, 538, 93, 94, 497, 60, 59, + 58, 59, 430, 61, 62, 63, 109, 513, 610, 525, + 574, 574, 187, 260, 91, 187, 288, 360, 203, 248, + 257, 244, 172, 168, 31, 257, 124, 125, 260, -1, + -1, 41, -1, 91, 44, 93, 94, 37, 38, 286, + 40, 41, 42, 43, 44, 45, 46, 47, 58, 59, + -1, -1, -1, 300, 301, 302, -1, -1, 58, 59, + 60, 61, 62, 63, 260, 123, 124, 125, 126, -1, + -1, 260, 261, 262, 263, 264, 265, -1, 310, 311, + 312, -1, 401, 93, -1, 332, 414, 415, 320, -1, + 286, 91, -1, 93, 94, -1, -1, 286, 330, 331, + 332, -1, -1, -1, 300, 301, 302, -1, 340, 41, + -1, 300, 44, -1, -1, 125, -1, 436, -1, -1, + 260, -1, -1, -1, 124, 125, 126, 59, 280, 281, + 282, 283, 284, 285, -1, 287, 332, -1, -1, 312, + 280, 281, 282, 283, 284, 285, 286, 287, -1, 41, + -1, 303, 44, -1, -1, -1, -1, 346, 331, 257, + -1, 93, -1, 303, -1, -1, 58, 59, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 414, 410, 411, + 412, -1, 414, 415, 416, 417, 418, 419, -1, 421, + 37, 38, 332, 125, 41, 42, 43, 44, 45, 257, + 47, 93, 260, 280, 281, 282, 283, 284, 285, -1, + 287, 58, 59, 60, 61, 62, 63, -1, -1, -1, + -1, -1, -1, 300, 301, 302, 303, 400, 401, 402, + 403, 550, -1, 125, -1, -1, 555, -1, 411, 412, + -1, -1, 41, -1, 91, 44, 93, 94, 421, -1, + -1, -1, 310, 311, 312, -1, -1, 257, -1, 58, + 59, -1, 320, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 330, 331, 332, -1, -1, 124, 125, 126, + 41, -1, 340, 44, -1, 604, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 58, 59, -1, + -1, -1, -1, -1, 623, -1, 404, 405, 406, 407, + 408, -1, 312, -1, -1, 634, 414, 415, 416, 417, + 418, 419, -1, -1, -1, -1, 125, -1, -1, -1, + -1, 331, 93, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, + 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, + 418, 419, -1, 421, 125, 257, -1, -1, 37, 38, + -1, 40, 41, 42, 43, 44, 45, 46, 47, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 91, + 257, 411, 412, -1, 414, 415, 416, 417, 418, 419, + 420, 421, 91, -1, 93, 94, 37, 38, -1, -1, + 41, 42, 43, 44, 45, 46, 47, 91, -1, -1, + -1, -1, -1, 125, -1, -1, -1, 58, 59, 60, + 61, 62, 63, -1, -1, 124, 125, 126, 257, -1, + -1, -1, -1, -1, -1, 312, -1, -1, -1, -1, + -1, 125, -1, -1, -1, -1, 91, -1, -1, -1, + 91, -1, 93, 94, 331, 91, -1, -1, -1, -1, + -1, 41, -1, 340, 44, -1, 257, -1, -1, 41, + -1, -1, 44, -1, -1, -1, -1, -1, 58, 59, + 125, -1, -1, 124, 125, 126, 58, 59, -1, -1, + -1, -1, 414, 415, 37, 38, -1, -1, 41, 42, + 43, 44, 45, 46, 47, -1, -1, -1, -1, -1, + -1, -1, -1, 93, -1, 58, 59, 60, 61, 62, + 63, 93, -1, 400, 401, 402, 403, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, 414, 415, 416, + 417, 418, 419, 420, 421, 125, -1, -1, 91, -1, + 93, 94, -1, 125, -1, -1, -1, -1, 257, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 280, 281, + 282, 283, 284, 285, -1, 287, -1, -1, -1, -1, + -1, 124, 125, 126, -1, 414, 415, -1, -1, 41, + -1, 303, 44, -1, -1, -1, 280, 281, 282, 283, + 284, 285, -1, 287, 37, 38, 58, 59, 41, 42, + 43, 44, 45, 312, 47, -1, 257, -1, -1, 303, + -1, -1, 334, 414, 415, 58, 59, 60, 61, 62, + -1, -1, 331, -1, -1, 280, 281, 282, 283, 284, + 285, 93, 287, -1, 280, 281, 282, 283, 284, 285, + 334, 287, -1, -1, -1, -1, -1, -1, 303, -1, + 93, 94, -1, -1, -1, -1, -1, 303, -1, -1, + -1, 312, -1, 125, -1, -1, -1, 257, -1, -1, + -1, -1, -1, -1, -1, 257, -1, -1, -1, 334, + 331, 124, 125, 126, -1, -1, -1, -1, 334, -1, + -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, + -1, -1, 411, 412, 257, 414, 415, 416, 417, 418, + 419, 420, 421, -1, -1, 37, 38, -1, -1, 41, + 42, 43, 44, 45, -1, 47, -1, 41, -1, 41, + 44, -1, 44, -1, -1, -1, 58, 59, 60, 61, + 62, 63, -1, -1, 58, 59, 58, 59, -1, 400, + 401, 402, 403, 404, 405, 406, 407, 408, -1, 312, + 411, 412, -1, 414, 415, 416, 417, 418, 419, 420, + 421, 93, 94, -1, -1, -1, -1, -1, 331, 93, + -1, 93, -1, 37, 38, -1, 40, 41, 42, 43, + 44, 45, 46, 47, -1, 257, -1, -1, -1, -1, + -1, -1, 124, 125, 126, 91, 60, 61, 62, 63, + -1, 125, -1, 125, 257, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 414, 415, 41, -1, -1, 44, + -1, 91, 414, 415, -1, -1, -1, 91, -1, -1, + 94, -1, -1, 58, 59, -1, -1, 400, 401, 402, + 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, + -1, 414, 415, 416, 417, 418, 419, 420, 421, 312, + 124, -1, 126, -1, -1, -1, -1, -1, 93, -1, + -1, -1, -1, -1, -1, -1, -1, 330, 331, -1, + -1, -1, -1, -1, 37, 38, -1, 340, 41, 42, + 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, + 125, -1, -1, -1, -1, 58, 59, 60, 61, 62, + 63, -1, -1, 37, 38, -1, 40, -1, 42, 43, + 44, 45, 46, 47, -1, 257, -1, -1, -1, -1, + -1, -1, -1, 257, -1, 257, 60, 61, 62, 63, + 93, 94, 414, 415, -1, -1, -1, 400, 401, 402, + 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, + -1, 414, 415, 416, 417, 418, 419, 91, 421, 93, + 94, 124, 125, 126, 91, -1, -1, -1, -1, -1, + 312, -1, -1, -1, 280, 281, 282, 283, 284, 285, + -1, 287, -1, 257, -1, -1, -1, -1, -1, 331, + 124, -1, 126, -1, 300, 301, 302, -1, 304, -1, + 280, 281, 282, 283, 284, 285, -1, 287, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 257, 303, 37, 38, -1, -1, -1, 42, + 43, 44, 45, -1, 47, -1, -1, -1, 312, -1, + -1, -1, -1, -1, -1, -1, -1, 60, 61, 62, + 63, -1, -1, -1, -1, -1, -1, 331, 400, 401, + 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, + 412, -1, 414, 415, 416, 417, 418, 419, 91, 421, + 93, 94, 414, 415, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 257, 37, 38, -1, -1, 41, + 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, + -1, 124, -1, 126, -1, -1, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, - 414, 415, 416, 417, 418, 419, -1, 421, 125, 257, - -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, - 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, 60, 61, 62, 63, -1, - -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 91, 257, 411, 412, -1, 414, 415, - 416, 417, 418, 419, 420, 421, 91, -1, 93, 94, - 37, 38, -1, -1, 41, 42, 43, 44, 45, 46, - 47, 91, -1, -1, -1, -1, -1, 125, -1, -1, - -1, 58, 59, 60, 61, 62, 63, -1, -1, 124, - 125, 126, 257, -1, 41, -1, -1, 44, -1, 312, - -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, - 91, 58, 59, -1, 91, -1, 93, 94, 331, -1, - -1, -1, -1, -1, -1, 41, -1, 340, 44, -1, - 257, -1, -1, 41, 41, -1, 44, 44, -1, -1, - -1, -1, 58, 59, 125, -1, 93, 124, 125, 126, - 58, 59, 59, -1, -1, -1, 414, 415, 37, 38, - -1, -1, 41, 42, 43, 44, 45, 46, 47, -1, - -1, -1, -1, -1, -1, -1, -1, 93, 125, 58, - 59, 60, 61, 62, 63, 93, 93, 400, 401, 402, + 414, 415, 416, 417, 418, 419, 420, 421, -1, 312, + -1, 93, 94, 280, 281, 282, 283, 284, 285, -1, + 287, -1, -1, -1, -1, -1, -1, -1, 331, -1, + -1, -1, -1, 300, 301, 302, 303, -1, 312, 414, + 415, -1, 124, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 331, -1, -1, + -1, -1, -1, 37, 38, -1, -1, 41, 42, 43, + 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 59, 60, 61, 62, 63, + -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, + 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, + -1, 414, 415, 416, 417, 418, 419, -1, 421, 93, + 94, -1, -1, -1, -1, -1, 400, 401, 402, 403, + 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, + 414, 415, 416, 417, 418, 419, 420, 421, 37, 38, + 124, 125, 41, 42, 43, 44, 45, -1, 47, 312, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 60, 61, 62, 63, 257, -1, -1, 331, -1, + -1, -1, -1, -1, -1, 37, 38, -1, -1, 41, + 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, + -1, -1, -1, -1, 93, 94, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 312, -1, -1, -1, -1, 124, 125, -1, -1, -1, + -1, 93, 94, -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, - -1, 414, 415, 416, 417, 418, 419, 420, 421, 125, - -1, -1, 91, -1, 93, 94, -1, 125, 125, -1, - -1, -1, 257, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 280, 281, 282, 283, 284, 285, -1, 287, - -1, -1, -1, -1, -1, 124, 125, 126, -1, 414, - 415, -1, -1, 41, -1, 303, 44, -1, -1, -1, - 280, 281, 282, 283, 284, 285, -1, 287, 37, 38, - 58, 59, 41, 42, 43, 44, 45, 312, 47, -1, - 257, -1, -1, 303, -1, -1, 334, 414, 415, 58, - 59, 60, 61, 62, -1, -1, 331, -1, -1, 280, - 281, 282, 283, 284, 285, 93, 287, -1, -1, -1, - 257, -1, -1, -1, 334, -1, -1, -1, -1, -1, - -1, -1, 303, -1, 93, 94, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 312, -1, 125, -1, -1, - -1, 257, -1, -1, -1, -1, -1, -1, -1, 257, - -1, -1, -1, 334, 331, 124, 125, 126, -1, -1, - -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, - 405, 406, 407, 408, -1, -1, 411, 412, 257, 414, - 415, 416, 417, 418, 419, 420, 421, -1, -1, 37, - 38, -1, -1, 41, 42, 43, 44, 45, -1, 47, - -1, 41, -1, 41, 44, -1, 44, -1, -1, -1, - 58, 59, 60, 61, 62, 63, -1, -1, 58, 59, - 58, 59, -1, 400, 401, 402, 403, 404, 405, 406, - 407, 408, -1, 312, 411, 412, -1, 414, 415, 416, - 417, 418, 419, 420, 421, 93, 94, -1, -1, -1, - -1, -1, 331, 93, -1, 93, -1, 37, 38, -1, - 40, 41, 42, 43, 44, 45, 46, 47, -1, 257, - -1, -1, -1, -1, -1, -1, 124, 125, 126, 91, - 60, 61, 62, 63, -1, 125, -1, 125, 257, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 414, 415, - 41, -1, -1, 44, -1, -1, 414, 415, -1, -1, - -1, 91, -1, -1, 94, -1, -1, 58, 59, -1, - -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, - -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, - 419, 420, 421, 312, 124, -1, 126, -1, -1, -1, - -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, - -1, 330, 331, -1, -1, -1, -1, -1, 37, 38, - -1, 340, 41, 42, 43, 44, 45, -1, 47, -1, - -1, -1, -1, -1, 125, -1, -1, -1, -1, 58, - 59, 60, 61, 62, 63, -1, -1, 37, 38, -1, - 40, -1, 42, 43, 44, 45, 46, 47, -1, 257, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, - 60, 61, 62, 63, 93, 94, 414, 415, -1, -1, - -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, - -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, - 419, 91, 421, 93, 94, 124, 125, 126, 91, -1, - -1, -1, -1, -1, 312, -1, -1, -1, 280, 281, - 282, 283, 284, 285, -1, 287, -1, 257, -1, -1, - -1, -1, -1, 331, 124, -1, 126, -1, 300, 301, - 302, 303, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 414, 415, 416, 417, 418, 419, 420, 421, -1, + -1, -1, 124, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 257, -1, -1, 37, 38, -1, -1, + 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 58, 59, 60, + 61, 62, 63, -1, -1, -1, -1, -1, 400, 401, + -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, + 412, -1, 414, 415, 416, 417, 418, 419, 312, 421, + -1, -1, 93, 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 257, -1, 37, 38, - -1, -1, -1, 42, 43, 44, 45, -1, 47, -1, - -1, -1, 312, -1, -1, -1, -1, -1, -1, -1, - -1, 60, 61, 62, 63, -1, -1, -1, -1, -1, - -1, 331, 400, 401, 402, 403, 404, 405, 406, 407, - 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, - 418, 419, 91, 421, 93, 94, 414, 415, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 257, 37, - 38, -1, -1, 41, 42, 43, 44, 45, -1, 47, - -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, - 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, - 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, - -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, - 420, 421, -1, 312, -1, 93, 94, 280, 281, 282, - 283, 284, 285, -1, 287, -1, -1, -1, -1, -1, - -1, -1, 331, -1, -1, -1, -1, 300, 301, 302, - 303, -1, 312, 414, 415, -1, 124, 125, -1, -1, + -1, -1, -1, -1, -1, 37, 38, -1, 257, 41, + 42, -1, 44, 124, 125, 47, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 58, 59, 60, 61, + 62, 63, -1, -1, 37, 38, -1, -1, 41, 42, + 43, 44, 45, -1, 47, 257, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 58, 59, 60, 61, 62, + 63, 93, 94, 312, -1, -1, 400, 401, -1, -1, + 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, + 414, 415, 416, 417, 418, 419, -1, 421, -1, -1, + 93, 94, 124, 125, -1, -1, -1, -1, -1, -1, + 312, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 331, -1, -1, -1, -1, -1, 37, 38, -1, - -1, 41, 42, 43, 44, 45, -1, 47, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, - 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, - -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, + -1, 124, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 257, -1, -1, -1, + -1, 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, - 419, -1, 421, 93, 94, -1, -1, -1, -1, -1, - 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, - -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, - 420, 421, 37, 38, 124, 125, 41, 42, 43, 44, - 45, -1, 47, 312, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, 60, 61, 62, 63, 257, - -1, -1, 331, -1, -1, -1, -1, -1, -1, 37, - 38, -1, -1, 41, 42, 43, 44, 45, -1, 47, - -1, -1, -1, -1, -1, -1, -1, -1, 93, 94, - 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + 419, -1, 421, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 400, 401, + -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, + 412, 312, 414, 415, 416, 417, 418, 419, -1, 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 312, -1, -1, -1, -1, 124, - 125, -1, -1, -1, -1, 93, 94, -1, -1, -1, - -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, - -1, 410, 411, 412, -1, 414, 415, 416, 417, 418, - 419, 420, 421, -1, -1, -1, 124, 125, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 257, -1, -1, - 37, 38, -1, -1, 41, 42, 43, 44, 45, -1, + -1, -1, -1, -1, -1, 257, 37, 38, -1, -1, + 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 58, 59, 60, + 61, 62, 63, -1, 257, -1, -1, -1, -1, -1, + -1, 37, 38, -1, -1, 41, 42, 43, -1, 45, + -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, + 312, -1, 93, 94, 60, 61, 62, 63, -1, 400, + 401, -1, -1, 404, 405, 406, 407, 408, -1, 331, + 411, 412, -1, 414, 415, 416, 417, 418, 419, 312, + 421, -1, -1, 124, 125, -1, -1, -1, 94, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 37, 38, -1, -1, 41, 42, + 43, 44, 45, -1, 47, -1, -1, -1, 124, -1, + 126, -1, -1, -1, -1, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, -1, -1, -1, 400, 401, + -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, + 412, -1, 414, 415, 416, 417, 418, 419, -1, 421, + 93, 94, -1, -1, -1, -1, -1, 400, 401, -1, + -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, + -1, 414, 415, 416, 417, 418, 419, -1, 421, -1, + -1, 124, 125, -1, -1, -1, -1, -1, -1, -1, + -1, 37, 38, -1, -1, -1, 42, 43, -1, 45, + -1, 47, -1, -1, -1, -1, 257, -1, -1, -1, + -1, -1, 58, -1, 60, 61, 62, 63, 37, 38, + -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, 60, 61, 62, 63, 37, 38, -1, 94, 41, + 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, + 62, 63, -1, -1, -1, 94, -1, -1, 124, -1, + 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 312, -1, -1, -1, + -1, -1, 94, -1, -1, 124, -1, 126, -1, -1, + -1, -1, -1, -1, 257, 331, -1, -1, -1, -1, + -1, -1, 38, -1, -1, 41, -1, -1, 44, -1, + -1, -1, 124, -1, 126, -1, -1, -1, -1, -1, + -1, -1, 58, 59, -1, 61, -1, 63, -1, 400, + 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, + 411, 412, -1, 414, 415, 416, 417, 418, 419, -1, + 421, -1, -1, -1, -1, -1, -1, 93, 94, -1, + -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, + 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, + 416, 417, 418, 419, -1, 421, -1, -1, 124, 125, + 37, 38, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 58, 59, 60, 61, 62, 63, -1, -1, -1, - -1, -1, 400, 401, -1, -1, 404, 405, 406, 407, - 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, - 418, 419, 312, 421, -1, -1, 93, 94, -1, -1, + -1, -1, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, - 38, -1, 257, 41, 42, -1, 44, 124, 125, 47, + -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, + -1, 404, 405, 406, 407, 408, 312, 94, 411, 412, + -1, 414, 415, 416, 417, 418, 419, -1, 421, -1, + -1, -1, -1, -1, -1, 331, -1, -1, -1, -1, + -1, -1, -1, 312, -1, -1, -1, 124, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 58, 59, 60, 61, 62, 63, -1, -1, 37, 38, - -1, -1, 41, 42, 43, 44, 45, -1, 47, 257, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, - 59, 60, 61, 62, 63, 93, 94, 312, -1, -1, - 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, - -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, - -1, 421, -1, -1, 93, 94, 124, 125, -1, -1, - -1, -1, -1, -1, 312, -1, -1, -1, -1, -1, + -1, -1, 331, -1, -1, -1, -1, -1, -1, -1, + 312, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 331, + -1, 257, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, + 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, + 416, 417, 418, 419, -1, 421, -1, -1, -1, -1, + -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, + -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, + 419, -1, 421, -1, -1, -1, -1, -1, 400, 401, + 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, + 412, -1, 414, 415, 416, 417, 418, 419, -1, 421, + 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, + 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 60, 61, 62, 63, 37, 38, -1, + -1, 41, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 124, 125, -1, -1, -1, + 60, 61, 62, 63, -1, 312, -1, 94, 404, 405, + 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, + 416, 417, 418, 419, 331, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 94, -1, -1, 124, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 257, -1, -1, -1, -1, 400, 401, -1, -1, 404, - 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, - 415, 416, 417, 418, 419, -1, 421, -1, -1, -1, + -1, -1, -1, -1, 124, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 400, 401, -1, -1, 404, 405, 406, 407, - 408, -1, -1, 411, 412, 312, 414, 415, 416, 417, - 418, 419, -1, 421, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, - 37, 38, -1, -1, 41, 42, 43, 44, 45, -1, - 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 58, 59, 60, 61, 62, 63, -1, 257, -1, - -1, -1, -1, -1, -1, 37, 38, -1, -1, 41, - 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, - -1, -1, -1, -1, 312, -1, 93, 94, 60, 61, - 62, 63, -1, 400, 401, -1, -1, 404, 405, 406, - 407, 408, -1, 331, 411, 412, -1, 414, 415, 416, - 417, 418, 419, 312, 421, -1, -1, 124, 125, -1, - -1, -1, 94, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, - -1, -1, 41, 42, 43, 44, 45, -1, 47, -1, - -1, -1, 124, -1, 126, -1, -1, -1, -1, 58, - 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, - -1, -1, 400, 401, -1, -1, 404, 405, 406, 407, - 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, - 418, 419, -1, 421, 93, 94, -1, -1, -1, -1, - -1, 400, 401, -1, -1, 404, 405, 406, 407, 408, - -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, - 419, -1, 421, -1, -1, 124, 125, -1, -1, -1, - -1, -1, -1, -1, -1, 37, 38, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, + 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, + 417, 418, 419, -1, 421, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, - 257, -1, -1, -1, -1, -1, 58, -1, 60, 61, - 62, 63, 37, 38, -1, -1, -1, 42, 43, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, + 62, 63, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, 60, 61, 62, 63, 37, + -1, -1, -1, -1, -1, 60, 61, 62, 63, 37, 38, -1, 94, 41, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, 62, 63, -1, -1, -1, 94, -1, -1, 124, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 312, -1, -1, -1, -1, -1, 94, -1, -1, 124, - -1, 126, -1, -1, -1, -1, -1, -1, 257, 331, - -1, -1, -1, -1, -1, -1, 38, -1, -1, 41, - -1, -1, 44, -1, -1, -1, 124, -1, 126, -1, - -1, -1, -1, -1, -1, -1, 58, 59, -1, 61, - -1, 63, -1, 400, 401, -1, -1, 404, 405, 406, + -1, -1, -1, -1, -1, 312, 94, -1, -1, 124, + -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 331, -1, -1, -1, -1, -1, + -1, -1, 312, -1, -1, -1, 124, -1, 126, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 331, -1, -1, -1, -1, -1, -1, -1, 37, + 38, -1, -1, -1, 42, 43, -1, 45, -1, 47, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, - 417, 418, 419, -1, 421, -1, -1, -1, -1, -1, - -1, 93, 94, -1, -1, -1, -1, -1, 400, 401, - 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, - 412, -1, 414, 415, 416, 417, 418, 419, -1, 421, - -1, -1, 124, 125, 37, 38, -1, -1, -1, 42, + 417, 418, 419, -1, 421, -1, 94, -1, -1, -1, + 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, + -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, + -1, 421, -1, -1, -1, -1, 124, -1, 126, -1, + -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, + -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, + 312, -1, -1, -1, -1, -1, -1, -1, 58, -1, + 60, 61, 62, 63, -1, -1, -1, -1, -1, 331, + -1, -1, -1, -1, 37, 38, -1, 312, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, 60, 61, 62, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 94, -1, 331, 60, 61, 62, + 63, -1, -1, -1, 312, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 400, 401, -1, -1, 404, 405, 406, 407, 408, - 312, 94, 411, 412, -1, 414, 415, 416, 417, 418, - 419, -1, 421, -1, -1, -1, -1, -1, -1, 331, - -1, -1, -1, -1, -1, -1, -1, 312, -1, -1, - -1, 124, -1, 126, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 331, -1, -1, -1, - -1, -1, -1, -1, 312, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 331, -1, 257, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 400, 401, + -1, -1, -1, 331, 124, -1, 126, -1, -1, -1, + -1, 94, -1, -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, -1, 421, - -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, + -1, 124, -1, 126, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, -1, 421, -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, - 418, 419, -1, 421, 37, 38, -1, -1, 41, 42, - 43, -1, 45, -1, 47, -1, 347, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 60, 61, 62, - 63, 37, 38, -1, -1, 41, 42, 43, -1, 45, - -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 60, 61, 62, 63, -1, 312, - -1, 94, 404, 405, 406, 407, 408, -1, -1, 411, - 412, -1, 414, 415, 416, 417, 418, 419, 331, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 94, -1, - -1, 124, -1, 126, -1, -1, -1, -1, -1, -1, + 418, 419, -1, 421, 312, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 124, -1, - 126, 452, -1, -1, -1, -1, -1, -1, 459, -1, + -1, -1, -1, 331, -1, 37, 38, -1, -1, -1, + 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + 37, 38, -1, -1, -1, 42, 43, -1, 45, -1, + 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 94, 60, 61, 62, 63, -1, -1, -1, + -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, + 408, -1, 312, 411, 412, -1, 414, 415, 416, 417, + 418, 419, 124, 421, 126, -1, -1, 94, -1, -1, + -1, 331, -1, -1, -1, -1, -1, -1, -1, -1, + 37, 38, -1, -1, 41, 42, 43, 44, 45, 312, + 47, -1, -1, -1, -1, -1, -1, 124, -1, 126, + -1, 58, 59, 60, 61, 62, 63, -1, 331, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, - 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, 414, 415, 416, 417, 418, 419, -1, 421, 37, - 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 522, 60, 61, 62, 63, 37, 38, 529, -1, - 41, 42, 43, -1, 45, -1, 47, -1, -1, 540, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, - 61, 62, 63, 37, 38, -1, 94, 41, 42, 43, - -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, - 571, -1, -1, -1, -1, -1, 60, 61, 62, 63, - -1, -1, -1, 94, -1, -1, 124, -1, 126, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 600, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 312, - 94, -1, -1, 124, -1, 126, -1, 618, -1, -1, - -1, -1, 623, -1, -1, -1, -1, 628, 331, -1, - -1, -1, -1, -1, -1, -1, 312, -1, -1, -1, - 124, -1, 126, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 331, -1, -1, -1, -1, - -1, -1, -1, 37, 38, -1, -1, -1, 42, 43, - -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 59, 60, 61, 62, 63, + -1, -1, -1, -1, -1, -1, 93, 94, -1, -1, + 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, + -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, + -1, 421, -1, -1, -1, -1, -1, 124, 125, -1, -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, 414, 415, 416, 417, 418, 419, -1, 421, -1, - 94, -1, -1, -1, 400, 401, 402, 403, 404, 405, - 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, - 416, 417, 418, 419, -1, 421, -1, -1, -1, -1, - 124, -1, 126, -1, -1, -1, -1, -1, -1, -1, - -1, 37, 38, -1, -1, -1, 42, 43, -1, 45, - -1, 47, -1, -1, 312, -1, -1, -1, -1, -1, - -1, -1, 58, -1, 60, 61, 62, 63, -1, -1, - -1, -1, -1, 331, -1, -1, -1, -1, 37, 38, - -1, 312, -1, 42, 43, -1, 45, -1, 47, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 94, -1, - 331, 60, 61, 62, 63, -1, -1, -1, 312, -1, + -1, 414, 415, 416, 417, 418, 419, -1, 421, 37, + 38, -1, -1, 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 331, 124, -1, - 126, -1, -1, -1, -1, 94, -1, -1, -1, -1, - -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 37, 38, -1, -1, + 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, + 312, -1, -1, -1, -1, 93, 94, 58, 59, 60, + 61, 62, 63, -1, -1, -1, -1, -1, -1, 331, + -1, -1, -1, -1, 38, -1, -1, 41, -1, 43, + 44, 45, -1, -1, -1, 312, 124, 125, -1, -1, + -1, -1, 93, 94, 58, 59, 60, 61, 62, 63, + 257, -1, -1, -1, 331, -1, -1, -1, -1, -1, + -1, 38, -1, -1, 41, -1, 43, 44, 45, -1, + -1, -1, -1, 124, 125, -1, -1, -1, -1, 93, + 94, 58, 59, 60, 61, 62, 63, -1, 400, 401, + 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, + 412, -1, -1, 415, 416, 417, 418, 419, -1, 421, + 124, 125, -1, -1, -1, -1, 93, 94, -1, -1, + -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, + 407, 408, -1, -1, 411, 412, -1, -1, -1, 416, + 417, 418, 419, -1, 421, -1, -1, 124, 125, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 38, -1, + -1, 41, -1, -1, 44, -1, -1, -1, -1, 257, + -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, + -1, 61, -1, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 400, 401, -1, -1, 404, 405, 406, + 407, 408, -1, -1, 411, 412, 257, 414, 415, 416, + 417, 418, 419, 93, 94, -1, -1, 38, -1, -1, + 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, + 61, -1, 63, 257, 124, 125, 38, -1, -1, 41, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 58, 59, -1, 61, + -1, 63, 93, 94, -1, -1, -1, -1, -1, -1, + 257, -1, -1, -1, -1, 38, -1, -1, 41, -1, + -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 93, 94, 124, 125, 58, 59, -1, 61, -1, + 63, -1, 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, - 418, 419, -1, 421, -1, 124, -1, 126, -1, 400, - 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, + 418, 419, 124, 125, -1, -1, -1, -1, -1, -1, + 93, 94, -1, -1, -1, -1, -1, -1, -1, 400, + 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, -1, - 421, -1, -1, -1, -1, -1, 400, 401, 402, 403, + -1, 124, 125, -1, -1, -1, -1, 257, -1, -1, + -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, - 414, 415, 416, 417, 418, 419, -1, 421, 312, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 331, -1, 37, - 38, -1, -1, -1, 42, 43, -1, 45, -1, 47, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 60, 61, 62, 63, -1, -1, -1, -1, - -1, -1, -1, -1, 37, 38, -1, -1, -1, 42, - 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 94, 60, 61, 62, - 63, -1, -1, -1, -1, -1, 400, 401, 402, 403, - 404, 405, 406, 407, 408, -1, 312, 411, 412, -1, - 414, 415, 416, 417, 418, 419, 124, 421, 126, -1, - -1, 94, -1, -1, -1, 331, -1, -1, -1, -1, - -1, -1, -1, -1, 37, 38, -1, -1, 41, 42, - 43, 44, 45, 312, 47, -1, -1, -1, -1, -1, - -1, 124, -1, 126, -1, 58, 59, 60, 61, 62, - 63, -1, 331, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 414, 415, 416, 417, 418, 419, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 93, 94, -1, -1, 400, 401, 402, 403, 404, 405, - 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, - 416, 417, 418, 419, -1, 421, -1, -1, -1, -1, + -1, -1, -1, 400, 401, -1, -1, 404, 405, 406, + 407, 408, -1, -1, 411, 412, 257, 414, 415, 416, + 417, 418, 419, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 38, -1, -1, 41, -1, -1, + 44, -1, -1, -1, -1, 257, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 59, -1, 61, 41, 63, + -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 38, -1, -1, 41, 58, 59, 44, 61, -1, + 63, -1, -1, -1, 257, -1, -1, -1, -1, 93, + 94, 58, 59, -1, 61, -1, 63, -1, -1, -1, + -1, -1, -1, -1, 404, 405, 406, 407, 408, -1, + 93, 411, 412, -1, 414, 415, 416, 417, 418, 419, + 124, 125, -1, -1, -1, 38, 93, 94, 41, -1, + -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 124, 125, -1, -1, 58, 59, -1, 61, -1, + 63, -1, -1, -1, -1, -1, -1, 124, 125, -1, + -1, -1, -1, 404, 405, 406, 407, 408, -1, -1, + 411, 412, -1, 414, 415, 416, 417, 418, 419, -1, + 93, 94, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, + 412, -1, 414, 415, 416, 417, 418, 419, -1, -1, -1, 124, 125, -1, -1, -1, -1, -1, -1, -1, - -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, - -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, - 419, -1, 421, 37, 38, -1, -1, 41, 42, 43, - 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 37, 38, -1, -1, 41, 42, 43, 44, 45, -1, - 47, -1, -1, -1, 312, -1, -1, -1, -1, 93, - 94, 58, 59, 60, 61, 62, 63, -1, -1, -1, - -1, -1, -1, 331, -1, -1, -1, -1, 38, -1, - -1, 41, -1, 43, 44, 45, -1, -1, -1, 312, - 124, 125, -1, -1, -1, -1, 93, 94, 58, 59, - 60, 61, 62, 63, 257, -1, -1, -1, 331, -1, - -1, -1, -1, -1, -1, 38, -1, -1, 41, -1, - 43, 44, 45, -1, -1, -1, -1, 124, 125, -1, - -1, -1, -1, 93, 94, 58, 59, 60, 61, 62, - 63, -1, 400, 401, 402, 403, 404, 405, 406, 407, - 408, -1, -1, 411, 412, -1, -1, 415, 416, 417, - 418, 419, -1, 421, 124, 125, -1, -1, -1, -1, - 93, 94, -1, -1, -1, -1, -1, 400, 401, 402, - 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, -1, -1, 416, 417, 418, 419, -1, 421, -1, - -1, 124, 125, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 38, -1, -1, 41, -1, -1, 44, -1, - -1, -1, -1, 257, -1, -1, -1, -1, -1, -1, - -1, -1, 58, 59, -1, 61, -1, 63, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, - 257, 414, 415, 416, 417, 418, 419, 93, 94, -1, - -1, 38, -1, -1, 41, -1, -1, 44, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 58, 59, -1, 61, -1, 63, 257, 124, 125, - 38, -1, -1, 41, -1, -1, 44, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 58, 59, -1, 61, -1, 63, 93, 94, -1, -1, - -1, -1, -1, -1, 257, -1, -1, -1, -1, 38, - -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 93, 94, 124, 125, 58, - 59, -1, 61, -1, 63, -1, 400, 401, -1, -1, + -1, 414, 415, 416, 417, 418, 419, -1, 38, -1, + -1, 41, -1, 257, 44, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 38, -1, -1, 41, 58, 59, + 44, 61, -1, 63, 257, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 59, -1, 61, -1, 63, + 257, 38, -1, -1, 41, -1, -1, 44, -1, -1, + -1, -1, -1, 93, 94, -1, -1, -1, -1, -1, + 41, 58, 59, 44, 61, -1, 63, -1, -1, 93, + 94, -1, -1, -1, -1, -1, -1, 58, 59, -1, + 61, -1, 63, -1, 124, 125, 41, -1, -1, 44, + -1, -1, -1, -1, 257, -1, 93, 94, -1, -1, + 124, 125, -1, 58, 59, -1, 61, -1, 63, -1, + -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 124, 125, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, + -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, - 414, 415, 416, 417, 418, 419, 124, 125, -1, -1, - -1, -1, -1, -1, 93, 94, -1, -1, -1, -1, - -1, -1, -1, 400, 401, -1, -1, 404, 405, 406, + 414, 415, 416, 417, 418, 419, -1, -1, -1, -1, + 125, 404, 405, 406, 407, 408, -1, -1, -1, -1, + -1, 414, 415, 416, 417, 418, 419, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, - 417, 418, 419, -1, -1, 124, 125, -1, -1, -1, - -1, 257, -1, -1, -1, -1, -1, -1, -1, -1, - 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, - -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, + 417, 418, 419, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 33, -1, 35, -1, -1, 257, -1, 40, + -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, + -1, -1, -1, 257, -1, -1, -1, -1, -1, 60, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, - 257, 414, 415, 416, 417, 418, 419, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 38, -1, - -1, 41, -1, -1, 44, -1, -1, -1, -1, 257, - -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, - -1, 61, 41, 63, -1, 44, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 38, -1, -1, 41, 58, - 59, 44, 61, -1, 63, -1, -1, -1, 257, -1, - -1, -1, -1, 93, 94, 58, 59, -1, 61, -1, - 63, -1, -1, -1, -1, -1, -1, -1, 404, 405, - 406, 407, 408, -1, 93, 411, 412, -1, 414, 415, - 416, 417, 418, 419, 124, 125, -1, -1, -1, 38, - 93, 94, 41, -1, -1, 44, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 125, -1, -1, 58, - 59, -1, 61, -1, 63, -1, -1, -1, -1, -1, - -1, 124, 125, -1, -1, -1, -1, 404, 405, 406, - 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, - 417, 418, 419, -1, 93, 94, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 404, 405, 406, 407, - 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, - 418, 419, -1, -1, -1, 124, 125, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 404, 405, 406, 407, 408, - -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, - 419, -1, 38, -1, -1, 41, -1, 257, 44, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 38, -1, - -1, 41, 58, 59, 44, 61, -1, 63, 257, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, - -1, 61, -1, 63, 257, 38, -1, -1, 41, -1, - -1, 44, -1, -1, -1, -1, -1, 93, 94, -1, - -1, -1, -1, -1, -1, 58, 59, -1, 61, -1, - 63, -1, -1, 93, 94, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, - -1, -1, -1, -1, -1, -1, -1, -1, 257, -1, - 93, 94, -1, -1, 124, 125, -1, -1, -1, -1, + -1, 414, 415, 416, 417, 418, 419, 33, -1, 35, + 257, -1, -1, -1, 40, -1, -1, 43, -1, 45, + 91, -1, -1, -1, -1, -1, 257, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 33, -1, 35, -1, -1, -1, -1, - 40, 124, 125, 43, -1, 45, -1, -1, -1, -1, + -1, -1, 257, -1, 33, 126, 35, -1, -1, -1, + -1, 40, -1, -1, 43, 91, 45, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 60, -1, -1, -1, 404, 405, 406, 407, 408, -1, - -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, - -1, -1, -1, -1, -1, 404, 405, 406, 407, 408, - -1, 91, -1, -1, -1, 414, 415, 416, 417, 418, - 419, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, 414, 415, 416, 417, 418, 419, -1, -1, -1, - 33, -1, 35, -1, -1, -1, 126, 40, -1, -1, - 43, 257, 45, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 257, -1, 62, - -1, -1, -1, -1, -1, 404, 405, 406, 407, 408, - -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, - 419, -1, -1, -1, 257, -1, -1, -1, 91, 33, - -1, 35, -1, -1, -1, -1, 40, -1, -1, 43, - 33, 45, 35, -1, -1, -1, -1, 40, -1, -1, - 43, -1, 45, -1, 58, -1, -1, -1, -1, -1, - -1, -1, -1, 126, -1, -1, -1, -1, 61, 33, - -1, 35, -1, -1, -1, -1, 40, -1, -1, 43, - -1, 45, -1, -1, -1, -1, -1, 91, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 61, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 260, 261, 262, 263, 264, 265, -1, -1, -1, -1, - -1, -1, 126, -1, -1, -1, -1, 91, 404, 405, - 406, 407, 408, 126, -1, -1, 286, -1, 414, 415, - 416, 417, 418, 419, 404, 405, 406, 407, 408, -1, + 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 91, -1, 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, 414, 415, 416, 417, 418, 419, - -1, -1, 126, 313, -1, -1, -1, -1, -1, -1, - -1, 404, 405, 406, 407, 408, -1, -1, -1, -1, - -1, 414, 415, 416, 417, 418, 419, -1, -1, -1, - 340, -1, -1, -1, -1, -1, 346, 260, 261, 262, - 263, 264, 265, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 367, 33, -1, - 35, -1, -1, 286, -1, 40, -1, -1, 43, -1, - 45, 33, -1, 35, -1, -1, -1, -1, 40, -1, - -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, - 313, 401, 402, 403, -1, -1, 260, 261, 262, 263, - 264, 265, -1, -1, -1, -1, -1, 260, 261, 262, - 263, 264, 265, -1, -1, -1, 91, 340, -1, -1, - -1, -1, 286, 346, -1, -1, -1, -1, -1, 91, - -1, 93, -1, 286, -1, -1, 260, 261, 262, 263, - 264, 265, -1, -1, 367, -1, -1, -1, 123, 313, - -1, 126, -1, -1, -1, -1, -1, -1, -1, 33, - 313, 35, 286, -1, 126, -1, 40, -1, -1, 43, - -1, 45, -1, -1, -1, -1, 340, 400, -1, 402, - 403, -1, 346, -1, -1, -1, -1, 340, -1, 313, - 33, -1, 35, 346, -1, -1, -1, 40, -1, -1, - 43, -1, 45, 367, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 367, -1, 340, 91, -1, -1, - -1, -1, 346, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 402, 403, - -1, -1, -1, 367, -1, -1, -1, -1, 91, 402, - 403, -1, 126, -1, -1, -1, -1, -1, -1, -1, + 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, + 414, 415, 416, 417, 418, 419, -1, 126, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 404, 405, 406, + 407, 408, -1, -1, -1, -1, -1, 414, 415, 416, + 417, 418, 419, 404, 405, 406, 407, 408, -1, -1, + -1, -1, -1, 414, 415, 416, 417, 418, 419, 260, + 261, 262, 263, 264, 265, -1, -1, -1, -1, 404, + 405, 406, 407, 408, -1, -1, -1, -1, -1, 414, + 415, 416, 417, 418, 419, 286, 33, -1, 35, -1, + -1, -1, -1, 40, -1, -1, 43, -1, 45, -1, + -1, -1, -1, -1, 260, 261, 262, 263, 264, 265, + -1, -1, 313, -1, 33, -1, 35, -1, -1, -1, + -1, 40, -1, -1, 43, -1, 45, -1, -1, -1, + 286, 33, -1, 35, -1, -1, -1, -1, 40, 340, + -1, 43, 61, 45, 91, 346, -1, -1, -1, -1, + -1, 260, 261, 262, 263, 264, 265, 313, -1, 61, + -1, -1, -1, -1, -1, -1, 367, -1, -1, -1, + -1, -1, 91, -1, -1, -1, 123, 286, -1, 126, + -1, -1, -1, -1, 340, -1, -1, -1, -1, 91, + 346, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 401, 402, 403, -1, 313, -1, -1, 126, -1, -1, + -1, 367, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, + -1, 340, -1, -1, -1, -1, -1, 346, -1, -1, + -1, 33, -1, 35, 400, -1, 402, 403, 40, -1, + -1, 43, -1, 45, -1, -1, -1, -1, 367, -1, + -1, 33, -1, 35, -1, -1, -1, -1, 40, -1, + -1, 43, -1, 45, -1, 33, -1, 35, -1, -1, + -1, -1, 40, -1, -1, 43, -1, 45, -1, -1, + -1, -1, -1, 402, 403, -1, -1, -1, -1, 91, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 260, 261, 262, 263, 264, 265, 91, + -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 123, -1, 91, 126, -1, -1, -1, -1, 286, + -1, 260, 261, 262, 263, 264, 265, -1, -1, -1, + -1, -1, -1, -1, 126, -1, -1, -1, 260, 261, + 262, 263, 264, 265, -1, -1, 313, 286, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 402, 403, - -1, -1, -1, 126, -1, 260, 261, 262, 263, 264, - 265, -1, -1, -1, -1, -1, -1, -1, 260, 261, - 262, 263, 264, 265, -1, -1, -1, -1, -1, -1, - -1, 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 286, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 313, -1, + -1, -1, -1, 340, 313, -1, -1, -1, -1, 346, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 340, -1, -1, -1, -1, - -1, 346, -1, -1, -1, -1, -1, -1, 340, -1, - -1, -1, -1, -1, 346, -1, 260, 261, 262, 263, - 264, 265, 367, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 367, -1, -1, -1, -1, - -1, -1, 286, -1, -1, -1, -1, 260, 261, 262, - 263, 264, 265, -1, -1, -1, -1, 402, 403, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, - 402, 403, -1, 286, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 340, -1, -1, -1, - 313, -1, 346, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 367, -1, -1, -1, 340, -1, -1, - -1, -1, -1, 346, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 367, -1, -1, -1, 402, 403, + 367, 340, -1, -1, -1, -1, -1, 346, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 340, -1, + -1, -1, -1, -1, 346, -1, -1, -1, 367, -1, + -1, -1, -1, -1, -1, 402, 403, -1, -1, -1, + -1, -1, -1, -1, -1, 367, -1, -1, 260, 261, + 262, 263, 264, 265, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 402, 403, -1, -1, -1, 260, 261, + 262, 263, 264, 265, 286, -1, -1, -1, -1, -1, + 402, 403, 260, 261, 262, 263, 264, 265, -1, -1, + -1, -1, -1, -1, 286, -1, -1, -1, -1, -1, + -1, 313, -1, -1, -1, -1, -1, -1, 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 313, -1, -1, -1, -1, -1, -1, 340, -1, + -1, -1, -1, -1, 346, 313, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 340, -1, + -1, -1, -1, -1, 346, 367, -1, -1, -1, -1, + -1, -1, 340, -1, -1, -1, -1, -1, 346, -1, + -1, -1, -1, -1, -1, 367, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 367, + 402, 403, -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, 402, - 403, + 402, 403, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 402, 403, ); protected static $yyFinal= 2; protected static $yyName= array( @@ -2965,69 +2991,87 @@ public function yyparse($yyLex) { case 292: #line 1039 "src/main/jay/grammars/xp.jay" { $yyVal= TRUE; } break; - case 299: #line 1057 "src/main/jay/grammars/xp.jay" + case 300: #line 1058 "src/main/jay/grammars/xp.jay" { $yyVal= new TypeName($yyVals[0+$yyTop]); } break; - case 300: #line 1058 "src/main/jay/grammars/xp.jay" + case 301: #line 1059 "src/main/jay/grammars/xp.jay" { $yyVal= new TypeName($yyVals[-3+$yyTop], $yyVals[-1+$yyTop]); } break; - case 301: #line 1062 "src/main/jay/grammars/xp.jay" + case 302: #line 1063 "src/main/jay/grammars/xp.jay" { $yyVal= new TypeName($yyVals[-2+$yyTop]->compoundName().'[]'); } break; - case 302: #line 1066 "src/main/jay/grammars/xp.jay" + case 303: #line 1067 "src/main/jay/grammars/xp.jay" { $yyVal= new TypeName('[:'.$yyVals[-1+$yyTop]->compoundName().']'); } break; - case 303: #line 1070 "src/main/jay/grammars/xp.jay" + case 304: #line 1071 "src/main/jay/grammars/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 304: #line 1071 "src/main/jay/grammars/xp.jay" + case 305: #line 1072 "src/main/jay/grammars/xp.jay" { $yyVal= array_merge($yyVals[-2+$yyTop], array($yyVals[0+$yyTop])); } break; - case 306: #line 1076 "src/main/jay/grammars/xp.jay" + case 307: #line 1077 "src/main/jay/grammars/xp.jay" { $yyVal= new TypeName($yyVals[0+$yyTop].'+'); } break; - case 307: #line 1080 "src/main/jay/grammars/xp.jay" + case 308: #line 1081 "src/main/jay/grammars/xp.jay" + { $yyVal= array(); } break; + + case 309: #line 1082 "src/main/jay/grammars/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 308: #line 1081 "src/main/jay/grammars/xp.jay" + case 310: #line 1083 "src/main/jay/grammars/xp.jay" + { $yyVal= array($yyVals[-1+$yyTop]); } break; + + case 311: #line 1084 "src/main/jay/grammars/xp.jay" + { $yyVal= array_merge($yyVals[-3+$yyTop], array($yyVals[-1+$yyTop])); } break; + + case 312: #line 1088 "src/main/jay/grammars/xp.jay" + { $yyVal= new TypeName('->'.$yyVals[-1+$yyTop]->compoundName(), null); } break; + + case 313: #line 1089 "src/main/jay/grammars/xp.jay" + { $yyVal= new TypeName('->'.$yyVals[-1+$yyTop]->compoundName(), $yyVals[-3+$yyTop]); } break; + + case 314: #line 1093 "src/main/jay/grammars/xp.jay" + { $yyVal= array($yyVals[0+$yyTop]); } break; + + case 315: #line 1094 "src/main/jay/grammars/xp.jay" { $yyVal= array_merge(array($yyVals[-2+$yyTop]), $yyVals[0+$yyTop]); } break; - case 309: #line 1087 "src/main/jay/grammars/xp.jay" + case 316: #line 1100 "src/main/jay/grammars/xp.jay" { $yyVal= 0; } break; - case 310: #line 1088 "src/main/jay/grammars/xp.jay" + case 317: #line 1101 "src/main/jay/grammars/xp.jay" { $yyVal= $yyVals[0+$yyTop]; } break; - case 311: #line 1092 "src/main/jay/grammars/xp.jay" + case 318: #line 1105 "src/main/jay/grammars/xp.jay" { $yyVal= $yyVals[0+$yyTop]; } break; - case 312: #line 1093 "src/main/jay/grammars/xp.jay" + case 319: #line 1106 "src/main/jay/grammars/xp.jay" { $yyVal= $yyVals[-1+$yyTop] | $yyVals[0+$yyTop]; } break; - case 313: #line 1097 "src/main/jay/grammars/xp.jay" + case 320: #line 1110 "src/main/jay/grammars/xp.jay" { $yyVal= MODIFIER_PUBLIC; } break; - case 314: #line 1098 "src/main/jay/grammars/xp.jay" + case 321: #line 1111 "src/main/jay/grammars/xp.jay" { $yyVal= MODIFIER_PROTECTED; } break; - case 315: #line 1099 "src/main/jay/grammars/xp.jay" + case 322: #line 1112 "src/main/jay/grammars/xp.jay" { $yyVal= MODIFIER_PRIVATE; } break; - case 316: #line 1100 "src/main/jay/grammars/xp.jay" + case 323: #line 1113 "src/main/jay/grammars/xp.jay" { $yyVal= MODIFIER_PACKAGE; } break; - case 317: #line 1101 "src/main/jay/grammars/xp.jay" + case 324: #line 1114 "src/main/jay/grammars/xp.jay" { $yyVal= MODIFIER_STATIC; } break; - case 318: #line 1102 "src/main/jay/grammars/xp.jay" + case 325: #line 1115 "src/main/jay/grammars/xp.jay" { $yyVal= MODIFIER_ABSTRACT; } break; - case 319: #line 1103 "src/main/jay/grammars/xp.jay" + case 326: #line 1116 "src/main/jay/grammars/xp.jay" { $yyVal= MODIFIER_FINAL; } break; - case 320: #line 1104 "src/main/jay/grammars/xp.jay" + case 327: #line 1117 "src/main/jay/grammars/xp.jay" { $yyVal= MODIFIER_INLINE; } break; -#line 3031 "-" +#line 3075 "-" } $yyTop-= self::$yyLen[$yyN]; diff --git a/src/main/php/xp/compiler/types/FunctionTypeOf.class.php b/src/main/php/xp/compiler/types/FunctionTypeOf.class.php new file mode 100755 index 000000000..c70101f03 --- /dev/null +++ b/src/main/php/xp/compiler/types/FunctionTypeOf.class.php @@ -0,0 +1,262 @@ +return= $return; + $this->parameters= $parameters; + } + + /** + * Returns modifiers + * + * @return int + */ + public function modifiers() { + return MODIFIER_PUBLIC; + } + + /** + * Returns name + * + * @return string + */ + public function name() { + return sprintf( + 'function(%s): %s', + null === $this->parameters ? '?' : implode(', ', array_map(function($type) { return $type->name(); }, $this->parameters)), + $this->return->name() + ); + } + + /** + * Returns parent type + * + * @return xp.compiler.types.Types + */ + public function parent() { + return null; + } + + /** + * Returns literal for use in code + * + * @return string + */ + public function literal() { + return 'callable'; + } + + /** + * Returns type kind (one of the *_KIND constants). + * + * @return string + */ + public function kind() { + return self::FUNCTION_KIND; + } + + /** + * Checks whether a given type instance is a subclass of this class. + * + * @param xp.compiler.types.Types + * @return bool + */ + public function isSubclassOf(Types $t) { + return false; + } + + /** + * Returns whether this type is enumerable (that is: usable in foreach) + * + * @return bool + */ + public function isEnumerable() { + return false; + } + + /** + * Returns the enumerator for this class or null if none exists. + * + * @see php://language.oop5.iterations + * @return xp.compiler.types.Enumerator + */ + public function getEnumerator() { + return null; + } + + /** + * Returns whether a constructor exists + * + * @return bool + */ + public function hasConstructor() { + return false; + } + + /** + * Returns the constructor + * + * @return xp.compiler.types.Constructor + */ + public function getConstructor() { + return null; + } + + /** + * Returns whether a method with a given name exists + * + * @param string name + * @return bool + */ + public function hasMethod($name) { + return false; + } + + /** + * Returns a method by a given name + * + * @param string name + * @return xp.compiler.types.Method + */ + public function getMethod($name) { + return null; + } + + /** + * Gets a list of extension methods + * + * @return [:xp.compiler.types.Method[]] + */ + public function getExtensions() { + return array(); + } + + /** + * Returns whether an operator by a given symbol exists + * + * @param string symbol + * @return bool + */ + public function hasOperator($symbol) { + return false; + } + + /** + * Returns an operator by a given name + * + * @param string symbol + * @return xp.compiler.types.Operator + */ + public function getOperator($symbol) { + return null; + } + + /** + * Returns a field by a given name + * + * @param string name + * @return bool + */ + public function hasField($name) { + return false; + } + + /** + * Returns a field by a given name + * + * @param string name + * @return xp.compiler.types.Field + */ + public function getField($name) { + return null; + } + + /** + * Returns a property by a given name + * + * @param string name + * @return bool + */ + public function hasProperty($name) { + return false; + } + + /** + * Returns a property by a given name + * + * @param string name + * @return xp.compiler.types.Property + */ + public function getProperty($name) { + return null; + } + + /** + * Returns a constant by a given name + * + * @param string name + * @return bool + */ + public function hasConstant($name) { + return false; + } + + /** + * Returns a constant by a given name + * + * @param string name + * @return xp.compiler.types.Constant + */ + public function getConstant($name) { + return null; + } + + /** + * Returns whether this class has an indexer + * + * @return bool + */ + public function hasIndexer() { + return false; + } + + /** + * Returns indexer + * + * @return xp.compiler.types.Indexer + */ + public function getIndexer() { + return null; + } + + /** + * Returns a lookup map of generic placeholders + * + * @return [:int] + */ + public function genericPlaceholders() { + return array(); + } + + /** + * Creates a string representation of this object + * + * @return string + */ + public function toString() { + return sprintf( + '%s@(%s)', + $this->getClassName(), + $this->name() + ); + } +} diff --git a/src/main/php/xp/compiler/types/Scope.class.php b/src/main/php/xp/compiler/types/Scope.class.php index 1b7a918fc..949a7146f 100644 --- a/src/main/php/xp/compiler/types/Scope.class.php +++ b/src/main/php/xp/compiler/types/Scope.class.php @@ -206,6 +206,8 @@ public function resolveType(TypeName $name, $register= true) { return new PrimitiveTypeOf($name); } else if ($name->isGeneric()) { return new GenericType($this->resolveType(new TypeName($name->name), $register), $name->components); + } else if ($name->isFunction()) { + return new FunctionTypeOf($this->resolveType($name->functionReturnType(), $register), $name->components); } if ($this->declarations) { diff --git a/src/main/php/xp/compiler/types/TypeName.class.php b/src/main/php/xp/compiler/types/TypeName.class.php index 2a9fb2d7d..4de206008 100644 --- a/src/main/php/xp/compiler/types/TypeName.class.php +++ b/src/main/php/xp/compiler/types/TypeName.class.php @@ -6,13 +6,14 @@ * Type literals and their representation * -------------------------------------- * ``` - * int : TypeName('int') - * var : TypeName('var') - * string : TypeName('string') - * bool[] : TypeName('bool[]') - * [:var] : TypeName('[:var]') - * List : TypeName('List', [TypeName('T')]) - * Map : TypeName('Map', [TypeName('K'), TypeName('V')]) + * int : TypeName('int') + * var : TypeName('var') + * string : TypeName('string') + * bool[] : TypeName('bool[]') + * [:var] : TypeName('[:var]') + * List : TypeName('List', [TypeName('T')]) + * Map : TypeName('Map', [TypeName('K'), TypeName('V')]) + * function(int): string : TypeName('->string', [TypeName('int')]) * ``` * * @test xp://net.xp_lang.tests.types.TypeNameTest @@ -49,7 +50,7 @@ public function __construct($name, $components= array()) { * @return bool */ public function isClass() { - return !$this->isArray() && !$this->isMap() && !$this->isVariable() && !$this->isVoid() && !$this->isPrimitive(); + return !$this->isArray() && !$this->isMap() && !$this->isVariable() && !$this->isVoid() && !$this->isPrimitive() && !$this->isFunction(); } /** @@ -115,13 +116,31 @@ public function mapComponentType() { return $this->isMap() ? new self(substr($this->name, 2, -1)) : null; } + /** + * Return whether this type is a function type + * + * @return bool + */ + public function isFunction() { + return 0 === strncmp($this->name, '->', 2); + } + + /** + * Return function return type or null if this is not a function + * + * @return xp.compiler.types.TypeName + */ + public function functionReturnType() { + return $this->isFunction() ? new self(substr($this->name, 2)) : null; + } + /** * Return whether this type is a generic * * @return bool */ public function isGeneric() { - return !empty($this->components); + return 0 !== strncmp($this->name, '->', 2) && !empty($this->components); } /** @@ -153,7 +172,7 @@ public function isPlaceholder(self $ref) { public function equals($cmp) { if (!$cmp instanceof self || $this->name !== $cmp->name) return false; - foreach ($this->components as $i => $c) { + foreach ((array)$this->components as $i => $c) { if (!$c->equals($cmp->components[$i])) return false; } return true; diff --git a/src/main/php/xp/compiler/types/Types.class.php b/src/main/php/xp/compiler/types/Types.class.php index 3991dc7f0..8be026450 100644 --- a/src/main/php/xp/compiler/types/Types.class.php +++ b/src/main/php/xp/compiler/types/Types.class.php @@ -1,15 +1,15 @@ assertEquals($result, $cmp); } + + #[@test] + public function addingMethod() { + $this->assertEquals(new MethodNode(array( + 'modifiers' => MODIFIER_PUBLIC, + 'annotations'=> null, + 'name' => 'adding', + 'returns' => new TypeName('->int', null), + 'parameters' => null, + 'throws' => null, + 'body' => array(), + 'extension' => null + )), $this->parse( + 'public {? -> int} adding() { }' + )); + } + + #[@test] + public function countingMethod() { + $this->assertEquals(new MethodNode(array( + 'modifiers' => MODIFIER_PUBLIC, + 'annotations'=> null, + 'name' => 'counting', + 'returns' => new TypeName('->int', [new TypeName('Collection')]), + 'parameters' => null, + 'throws' => null, + 'body' => array(), + 'extension' => null + )), $this->parse( + 'public {Collection -> int} counting() { }' + )); + } + + #[@test] + public function groupingMethod() { + $this->assertEquals(new MethodNode(array( + 'modifiers' => MODIFIER_PUBLIC, + 'annotations'=> null, + 'name' => 'grouping', + 'returns' => new TypeName('->int', [new TypeName('Map'), new TypeName('string')]), + 'parameters' => null, + 'throws' => null, + 'body' => array(), + 'extension' => null + )), $this->parse( + 'public {(Map, string) -> int} grouping() { }' + )); + } } diff --git a/src/test/php/net/xp_lang/tests/types/TypeNameTest.class.php b/src/test/php/net/xp_lang/tests/types/TypeNameTest.class.php index d999f53ff..0a0a92087 100644 --- a/src/test/php/net/xp_lang/tests/types/TypeNameTest.class.php +++ b/src/test/php/net/xp_lang/tests/types/TypeNameTest.class.php @@ -10,199 +10,111 @@ */ class TypeNameTest extends \unittest\TestCase { - /** - * Test isVariable() - * - */ #[@test] public function varIsVariable() { $this->assertTrue(TypeName::$VAR->isVariable()); } - /** - * Test isVariable() - * - */ #[@test] public function voidIsNotVariable() { $this->assertFalse(TypeName::$VOID->isVariable()); } - /** - * Test isVariable() - * - */ #[@test] public function objectIsNotVariable() { $this->assertFalse((new TypeName('lang.Object'))->isVariable()); } - /** - * Test isVoid() - * - */ #[@test] public function varIsNotVoid() { $this->assertFalse(TypeName::$VAR->isVoid()); } - /** - * Test isVoid() - * - */ #[@test] public function voidIsVoid() { $this->assertTrue(TypeName::$VOID->isVoid()); } - /** - * Test isVoid() - * - */ #[@test] public function objectIsNotVoid() { $this->assertFalse((new TypeName('lang.Object'))->isVoid()); } - /** - * Test isPrimitive() - * - */ #[@test] public function intIsPrimitive() { $this->assertTrue((new TypeName('int'))->isPrimitive()); } - /** - * Test isPrimitive() - * - */ #[@test] public function objectIsNotPrimitive() { $this->assertFalse((new TypeName('lang.Object'))->isPrimitive()); } - /** - * Test isArray() - * - */ #[@test] public function intArrayIsArray() { $this->assertTrue((new TypeName('int[]'))->isArray()); } - /** - * Test isArray() - * - */ #[@test] public function intIsNotArray() { $this->assertFalse((new TypeName('int'))->isArray()); } - /** - * Test isMap() - * - */ #[@test] public function intMapIsMap() { $this->assertTrue((new TypeName('[:int]'))->isMap()); } - /** - * Test isMap() - * - */ #[@test] public function intIsNotMap() { $this->assertFalse((new TypeName('int'))->isMap()); } - /** - * Test isMap() - * - */ #[@test] public function intArrayIsNotMap() { $this->assertFalse((new TypeName('int[]'))->isMap()); } - /** - * Test isGeneric() - * - */ #[@test] public function genericListIsGeneric() { $this->assertTrue((new TypeName('List', array(new TypeName('T'))))->isGeneric()); } - /** - * Test isGeneric() - * - */ #[@test] public function arrayIsNotGeneric() { $this->assertFalse((new TypeName('T[]'))->isGeneric()); } - /** - * Test compoundName() - * - */ #[@test] public function intPrimitiveCompoundName() { $this->assertEquals('int', (new TypeName('int'))->compoundName()); } - /** - * Test compoundName() - * - */ #[@test] public function stringArrayCompoundName() { $this->assertEquals('string[]', (new TypeName('string[]'))->compoundName()); } - /** - * Test compoundName() - * - */ #[@test] public function objectClassCompoundName() { $this->assertEquals('lang.Object', (new TypeName('lang.Object'))->compoundName()); } - /** - * Test compoundName() - * - */ #[@test] public function genericListCompoundName() { $this->assertEquals('List', (new TypeName('List', array(new TypeName('T'))))->compoundName()); } - /** - * Test arrayComponentType() - * - */ #[@test] public function arrayComponentType() { $this->assertEquals(new TypeName('string'), (new TypeName('string[]'))->arrayComponentType()); } - /** - * Test arrayComponentType() - * - */ #[@test] public function arrayComponentTypeOfNonArray() { $this->assertEquals(null, (new TypeName('string'))->arrayComponentType()); } - /** - * Test mapComponentType() - * - */ #[@test] public function mapComponentType() { $this->assertEquals( @@ -211,43 +123,42 @@ public function mapComponentType() { ); } - /** - * Test mapComponentType() - * - */ #[@test] public function mapComponentTypeOfNonMap() { $this->assertEquals(null, (new TypeName('string'))->mapComponentType()); } - /** - * Test isPlaceholder() - * - */ #[@test] public function tIsPlaceHolderInListOfT() { $decl= new TypeName('List', array(new TypeName('T'))); $this->assertTrue($decl->isPlaceholder(new TypeName('T'))); } - /** - * Test isPlaceholder() - * - */ #[@test] public function kIsNotPlaceHolderInListOfT() { $decl= new TypeName('List', array(new TypeName('T'))); $this->assertFalse($decl->isPlaceholder(new TypeName('K'))); } - /** - * Test isPlaceholder() - * - */ #[@test] public function kAndVArePlaceHoldersInMapOfKV() { $decl= new TypeName('Map', array(new TypeName('K'), new TypeName('V'))); $this->assertTrue($decl->isPlaceholder(new TypeName('K')), 'K'); $this->assertTrue($decl->isPlaceholder(new TypeName('V')), 'V'); } + + #[@test] + public function intIsNotFunction() { + $this->assertFalse((new TypeName('int'))->isFunction()); + } + + #[@test] + public function isFunction() { + $this->assertTrue((new TypeName('->string', array(new TypeName('int'))))->isFunction()); + } + + #[@test] + public function functionReturnType() { + $this->assertEquals(new TypeName('string'), (new TypeName('->string', array()))->functionReturnType()); + } } \ No newline at end of file