comparison tests/agcl/parsifal/good/ss-fp.cpp @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:13d2b8934445
1 /*
2 Copyright 1992, Jerome T. Holland
3 See the file COPYING for license and usage terms.
4 */
5
6 #include "ssd.h"
7 #include "kb.h"
8 #include "num.h"
9
10
11 /*
12 * AnaGram, A System for Syntax Directed Programming
13 * File generated by: ...
14 *
15 * AnaGram Parsing Engine
16 * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
17 *
18 * This software is provided 'as-is', without any express or implied
19 * warranty. In no event will the authors be held liable for any damages
20 * arising from the use of this software.
21 *
22 * Permission is granted to anyone to use this software for any purpose,
23 * including commercial applications, and to alter it and redistribute it
24 * freely, subject to the following restrictions:
25 *
26 * 1. The origin of this software must not be misrepresented; you must not
27 * claim that you wrote the original software. If you use this software
28 * in a product, an acknowledgment in the product documentation would be
29 * appreciated but is not required.
30 * 2. Altered source versions must be plainly marked as such, and must not be
31 * misrepresented as being the original software.
32 * 3. This notice may not be removed or altered from any source distribution.
33 */
34
35 #ifndef SS-FP_H
36 #include "ss-fp.h"
37 #endif
38
39 #ifndef SS-FP_H
40 #error Mismatched header file
41 #endif
42
43 #include <stdio.h>
44
45 #define RULE_CONTEXT (&((PCB).cs[(PCB).ssx]))
46 #define ERROR_CONTEXT ((PCB).cs[(PCB).error_frame_ssx])
47 #define CONTEXT ((PCB).cs[(PCB).ssx])
48
49
50
51 /* Line -, ss-fp.syn */
52 fp_pcb_type *fp_pcb;
53 #define PCB (*fp_pcb)
54
55
56 #define CELL_NAME_REQUEST 255
57 #define INPUT_LINE_REQUEST 254
58 #define BLOCK_REQUEST 253
59
60 #define SYNTAX_ERROR
61 #define PARSER_STACK_OVERFLOW
62
63 static int cell_refs;
64 static int error_flag;
65
66 static number bound_variable[26];
67 static number xvalue;
68
69 number num(double x) {
70 number n;
71 n.error = 0;
72 n.truth = 1;
73 n.v = x;
74 return n;
75 }
76
77 void init_bv(void) {
78 int i;
79 for (i = 0; i < 26; i++) bound_variable[i].error = 1;
80 }
81
82 double round(double x) {
83 long n = x+.5;
84 return n;
85 }
86
87 double trunc(double x) {
88 long n = x;
89 return n;
90 }
91
92 double sqr(double x) {
93 return x*x;
94 }
95
96 double pow10d(double x) {
97 long n = x;
98 return pow10d(n);
99 }
100
101 number cell_value(pair<int> loc) {
102 number x;
103 cell_pointer cp;
104 int save_ef = error_flag;
105
106 cell_refs++;
107 cp = ss[loc.row][loc.col];
108 if (cp == NULL) {
109 x.truth = 1;
110 x.v = 0;
111 return x;
112 }
113 if (cp->type == text) {
114 x.error = 1;
115 x.truth = 0;
116 return x;
117 }
118 if (cp->type == formula) {
119 if ((inserted_columns || inserted_rows));
120 else if (recalc_flag) {
121 if (cp->recalc == recalc_count) eval(cp);
122 if (cp->recalc & 1) circular_flag = 1;
123 }
124 }
125 x.error = cp->error;
126 x.truth = 1;
127 x.v = cp->value;
128 return x;
129 }
130
131 void eval(cell_pointer cp) {
132 fp_pcb_type pcb, *save_pcb = fp_pcb;
133
134 fp_pcb = &pcb;
135 cell_refs = 0;
136 PCB.pointer = (unsigned char *) &cp->text;
137 cp->recalc += recalc_flag;
138 error_flag = 0;
139 fp();
140 cp->recalc += recalc_flag;
141 if (PCB.exit_flag != 1) {cp->type = text; cp->error = 1; return;}
142 else if (cell_refs == 0) cp->type = value;
143 else cp->type = formula;
144 {
145 cp->error = xvalue.error;
146 cp->value = xvalue.v;
147 }
148 fp_pcb = save_pcb;
149 }
150
151 number evalx(char *xs) {
152 fp_pcb_type pcb, *save_pcb = fp_pcb;
153 number x;
154
155 fp_pcb = &pcb;
156 PCB.pointer = (unsigned char *) xs;
157 error_flag = 0;
158 fp();
159 fp_pcb = save_pcb;
160 return xvalue;
161 }
162
163 pair<int> id_cell(int row, int col) {
164 pair<int> goto_cell = {0,0};
165 if (row >= MAXROWS || col >= MAXCOLS) {
166 PCB.exit_flag = 5;
167 return goto_cell;
168 }
169 if (inserted_rows && row >= new_row) row += inserted_rows;
170 goto_cell.row = row;
171 goto_cell.col = col;
172 if (inserted_columns == 0 && inserted_rows == 0) return goto_cell;
173 sprintf((char *)icnptr,"%d",row+1);
174 icnptr += strlen((char *)icnptr);
175 icoptr = PCB.pointer;
176 return goto_cell;
177 }
178
179 int matherr(struct exception *e) {
180 error_flag++;
181 e->retval = 0;
182 return 1;
183 }
184
185 number apply(double(*f)(double), number n) {
186 number r;
187 if (n.error) return n;
188 error_flag = 0;
189 r.v = f(n.v);
190 r.error = error_flag != 0;
191 return r;
192 }
193
194 number pow(number x, number n) {
195 number r;
196 r.error = x.error || n.error;
197 if (r.error) return r;
198 r.v = pow(x.v, n.v);
199 return r;
200 }
201
202 void parse_block(void) {
203 int flag;
204 fp_pcb_type pcb;
205
206 fp_pcb = &pcb;
207 PCB.pointer = (unsigned char *) text_buffer;
208 text_buffer[0] = BLOCK_REQUEST;
209 fp();
210 flag = PCB.exit_flag != 1
211 || first_cell.row > last_cell.row
212 || first_cell.col > last_cell.col
213 || last_cell.row > MAXROWS
214 || last_cell.col > MAXCOLS;
215 if (flag) {
216 kb_pcb.reduction_token = kb_bad_block_token;
217 display_message(&bad_block_message);
218 set_cursor(text_cursor);
219 }
220 else _setcursortype(_NOCURSOR);
221 }
222
223 void parse_cell_name(void) {
224 int flag;
225 fp_pcb_type pcb;
226
227 fp_pcb = &pcb;
228 PCB.pointer = (unsigned char *) text_buffer;
229 text_buffer[0] = CELL_NAME_REQUEST;
230 fp();
231 flag = PCB.exit_flag != 1
232 || goto_cell.row > MAXROWS
233 || goto_cell.col > MAXCOLS;
234 if (flag) {
235 kb_pcb.reduction_token = kb_bad_cell_name_token;
236 display_message(&bad_cell_message);
237 set_cursor(text_cursor);
238 }
239 else _setcursortype(_NOCURSOR);
240 }
241
242 int rel_column_id(int a, int b) {
243 int cn = 26*a + b;
244 int nidc = a?2:1;
245 int n;
246 unsigned char case_bit = 0;
247 char *cp;
248
249 if (inserted_columns == 0 && inserted_rows == 0) return cn;
250 if (cn >= new_column) cn += inserted_columns;
251 n = (PCB.pointer - icoptr) - nidc;
252 memmove((char *)icnptr, (char *)icoptr, n);
253 icnptr += n;
254 cp = (char *)PCB.pointer;
255 while (nidc--) case_bit |= *--cp;
256 case_bit &= 0x20;
257 cp = column_label(cn,case_bit);
258 strcpy((char *)icnptr,cp);
259 icnptr += strlen(cp);
260 return cn;
261 }
262
263 void relabel_formula(cell_pointer cp) {
264 fp_pcb_type pcb, *save_pcb = fp_pcb;
265
266 fp_pcb = &pcb;
267 icoptr = PCB.pointer = (unsigned char *) &cp->text;
268 icnptr = (unsigned char *) relabel_buf;
269 fp();
270 assert(PCB.exit_flag == 1);
271 strcpy((char *)icnptr, (char *)icoptr);
272 cp = (cell_descriptor *) realloc(cp, sizeof(cell_descriptor) + strlen(relabel_buf));
273 assert(cp);
274 strcpy(cp->text, relabel_buf);
275 fp_pcb = save_pcb;
276 }
277
278 void scan_input_line(void) {
279 fp_pcb_type pcb, *save_pcb = fp_pcb;
280
281 fp_pcb = &pcb;
282 PCB.pointer = (unsigned char *) text_buffer;
283 text_buffer[0] = INPUT_LINE_REQUEST;
284 fp();
285 fp_pcb = save_pcb;
286 }
287
288 void set_column_width(void) {
289 int n;
290 char *tb = text_buffer + 1;
291 int flag;
292
293 highlight_off();
294 for (n = 0; *tb;) n = 10*n + *tb++ - '0';
295 flag = n < 3 || n > 75;
296 if (flag) {
297 kb_pcb.reduction_token = kb_column_width_request_token;
298 display_message(&bad_cw_message);
299 beep();
300 set_cursor(text_cursor);
301 return;
302 }
303 _setcursortype(_NOCURSOR);
304 if (ac.scc.col + n > 81) move_data_left();
305 cols[ac.ssc.col].width = n;
306 display_column_guide();
307 update_screen();
308 highlight_on();
309 }
310
311
312 void stuff_cell(pair<int> loc) {
313 char *tb = (char *) fp_pcb->pointer;
314 cell_pointer cp = (cell_descriptor *) realloc(
315 ss[loc.row][loc.col],
316 sizeof(cell_descriptor) + strlen(tb));
317
318 assert(cp);
319 if (loc.row > max_row) max_row = loc.row;
320 if (loc.col > max_col) max_col = loc.col;
321 strcpy(cp->text, tb);
322 ss[loc.row][loc.col] = cp;
323 cp->recalc = recalc_count;
324 eval(cp);
325 }
326
327 void stuff_format(format_code f,pair<int> first,pair<int> last){
328 int i,j;
329 for (i=first.row;i<=last.row;i++) for (j=first.col;j<=last.col;j++) {
330 fmt[i][j] = f;
331 }
332 if (last.row > fmt_max_row) fmt_max_row = last.row;
333 if (last.col > fmt_max_col) fmt_max_col = last.col;
334 }
335
336 number sum_cells(pair<int> first,pair<int> last){
337 pair<int> cp;
338 number sum;
339 sum.error = sum.truth = 1;
340 sum.v = 0;
341 for (cp.row = first.row; cp.row <= last.row; cp.row++)
342 for (cp.col = first.col; cp.col <= last.col; cp.col++) {
343 number cv = cell_value(cp);
344 if (cv.error) return sum;
345 sum.v += cv.v;
346 }
347 sum.error = 0;
348 return sum;
349 }
350
351 number summation(char *xb, char *xf, int bv, number f, number s, number l) {
352 number sum;
353 int k;
354 char *xs;
355 number delta;
356 int n;
357
358 sum.error = f.error + s.error + l.error;
359 sum.v = 0;
360 if (sum.error) return sum;
361 k = (int) (xf - xb);
362 xs = (char *) malloc(k+1);
363 memmove(xs,xb,k);
364 xs[k] = 0;
365 delta = s-f;
366 if (delta.v == 0) {
367 sum.error = 1;
368 return sum;
369 }
370 n = ((l-f+delta)/delta).v + .5;
371 while (n--) {
372 bound_variable[bv] = f;
373 sum = sum + evalx(xs);
374 if (sum.error) break;
375 f = f+delta;
376 }
377 bound_variable[bv].error = 1;
378 free(xs);
379 return sum;
380 }
381
382
383
384 #ifndef CONVERT_CASE
385
386 static const char agCaseTable[31] = {
387 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
388 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
389 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0,
390 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
391 };
392
393 static int agConvertCase(int c) {
394 if (c >= 'a' && c <= 'z') return c ^= 0x20;
395 if (c >= 0xe0 && c < 0xff) c ^= agCaseTable[c-0xe0];
396 return c;
397 }
398
399 #define CONVERT_CASE(c) agConvertCase(c)
400
401 #endif
402
403
404 #ifndef TAB_SPACING
405 #define TAB_SPACING 8
406 #endif
407
408 static void ag_rp_1(pair<int> cp) {
409 /* Line -, ss-fp.syn */
410 goto_cell = cp;
411 }
412
413 static void ag_rp_2(number x) {
414 /* Line -, ss-fp.syn */
415 xvalue = x;
416 }
417
418 static void ag_rp_3(pair<int> f, pair<int> l) {
419 /* Line -, ss-fp.syn */
420 first_cell=f, last_cell = l;
421 }
422
423 static void ag_rp_4(pair<int> loc) {
424 /* Line -, ss-fp.syn */
425 stuff_cell(loc);
426 }
427
428 static void ag_rp_5(pair<int> f, pair<int> l, format_code fmt) {
429 /* Line -, ss-fp.syn */
430 stuff_format(fmt,f,l);
431 }
432
433 static format_code ag_rp_6(int a, int c, int n) {
434 /* Line -, ss-fp.syn */
435 format_code f;
436 f.alignment = a;
437 f.conversion =c;
438 f.decimals = n;
439 f.flag = 0;
440 return f;
441
442 }
443
444 static int ag_rp_7(void) {
445 /* Line -, ss-fp.syn */
446 return 0;
447 }
448
449 static int ag_rp_8(void) {
450 /* Line -, ss-fp.syn */
451 return 1;
452 }
453
454 static int ag_rp_9(void) {
455 /* Line -, ss-fp.syn */
456 return 2;
457 }
458
459 static int ag_rp_10(void) {
460 /* Line -, ss-fp.syn */
461 return 0;
462 }
463
464 static int ag_rp_11(void) {
465 /* Line -, ss-fp.syn */
466 return 1;
467 }
468
469 static int ag_rp_12(void) {
470 /* Line -, ss-fp.syn */
471 return 2;
472 }
473
474 static pair<int> ag_rp_13(int col, int row) {
475 /* Line -, ss-fp.syn */
476 return id_cell(row-1,col);
477 }
478
479 static int ag_rp_14(int a, int b) {
480 /* Line -, ss-fp.syn */
481 return rel_column_id(a-'A'+1, b-'A');
482 }
483
484 static int ag_rp_15(int a) {
485 /* Line -, ss-fp.syn */
486 return rel_column_id(0, a-'A');
487 }
488
489 static int ag_rp_16(int d) {
490 /* Line -, ss-fp.syn */
491 return d-'0';
492 }
493
494 static int ag_rp_17(int n, int d) {
495 /* Line -, ss-fp.syn */
496 return 10*n + d-'0';
497 }
498
499 static number ag_rp_18(number x, number c, number y) {
500 /* Line -, ss-fp.syn */
501 number z;
502 switch (c.tv){
503 case 0:
504 z = y;
505 break;
506 case 1:
507 z = x;
508 break;
509 case 2:
510 z.error = 1;
511 }
512 return z;
513
514 }
515
516 static number ag_rp_19(number x, number y) {
517 /* Line -, ss-fp.syn */
518 return x||y;
519 }
520
521 static number ag_rp_20(number x, number y) {
522 /* Line -, ss-fp.syn */
523 return x&&y;
524 }
525
526 static number ag_rp_21(number x) {
527 /* Line -, ss-fp.syn */
528 return x;
529 }
530
531 static number ag_rp_22(number x) {
532 /* Line -, ss-fp.syn */
533 return !x;
534 }
535
536 static number ag_rp_23(number x, number y) {
537 /* Line -, ss-fp.syn */
538 return x<y;
539 }
540
541 static number ag_rp_24(number x, number y) {
542 /* Line -, ss-fp.syn */
543 return x>y;
544 }
545
546 static number ag_rp_25(number x, number y) {
547 /* Line -, ss-fp.syn */
548 return x<=y;
549 }
550
551 static number ag_rp_26(number x, number y) {
552 /* Line -, ss-fp.syn */
553 return x>=y;
554 }
555
556 static number ag_rp_27(number x, number y) {
557 /* Line -, ss-fp.syn */
558 return x==y;
559 }
560
561 static number ag_rp_28(number x, number y) {
562 /* Line -, ss-fp.syn */
563 return x!=y;
564 }
565
566 static number ag_rp_29(number x, number y) {
567 /* Line -, ss-fp.syn */
568 return x+y;
569 }
570
571 static number ag_rp_30(number x, number y) {
572 /* Line -, ss-fp.syn */
573 return x-y;
574 }
575
576 static number ag_rp_31(number x, number y) {
577 /* Line -, ss-fp.syn */
578 return x+y;
579 }
580
581 static number ag_rp_32(number x, number y) {
582 /* Line -, ss-fp.syn */
583 return x-y;
584 }
585
586 static number ag_rp_33(number x, number y) {
587 /* Line -, ss-fp.syn */
588 return x*y;
589 }
590
591 static number ag_rp_34(function_name f, number y) {
592 /* Line -, ss-fp.syn */
593 return apply(f,y);
594 }
595
596 static number ag_rp_35(number x, function_name f, number y) {
597 /* Line -, ss-fp.syn */
598 return x*apply(f,y);
599 }
600
601 static number ag_rp_36(number x, number n) {
602 /* Line -, ss-fp.syn */
603 return pow(x,n);
604 }
605
606 static number ag_rp_37(number x) {
607 /* Line -, ss-fp.syn */
608 return -x;
609 }
610
611 static number ag_rp_38(number x, number y) {
612 /* Line -, ss-fp.syn */
613 return x/y;
614 }
615
616 static number ag_rp_39(number x, number y) {
617 /* Line -, ss-fp.syn */
618 return x*y;
619 }
620
621 static number ag_rp_40(number x, number y) {
622 /* Line -, ss-fp.syn */
623 return x*y;
624 }
625
626 static number ag_rp_41(pair<int> cp) {
627 /* Line -, ss-fp.syn */
628 return cell_value(cp);
629 }
630
631 static number ag_rp_42(void) {
632 /* Line -, ss-fp.syn */
633 return num(M_PI);
634 }
635
636 static number ag_rp_43(pair<int> first, pair<int> last) {
637 /* Line -, ss-fp.syn */
638 return sum_cells(first,last);
639 }
640
641 static number ag_rp_44(int k) {
642 /* Line -, ss-fp.syn */
643 return bound_variable[k-'A'];
644 }
645
646 static number ag_rp_45(char * xb, char * xf, int k, number f, number s, number l) {
647 /* Line -, ss-fp.syn */
648 return summation(xb,xf,k-'A', f, s, l);
649 }
650
651 static char * ag_rp_46(void) {
652 /* Line -, ss-fp.syn */
653 return (char *)PCB.pointer;
654 }
655
656 static char * ag_rp_47(void) {
657 /* Line -, ss-fp.syn */
658 return (char *)PCB.pointer;
659 }
660
661 static number ag_rp_48(number x) {
662 /* Line -, ss-fp.syn */
663 return x;
664 }
665
666 static function_name ag_rp_49(void) {
667 /* Line -, ss-fp.syn */
668 return fabs;
669 }
670
671 static function_name ag_rp_50(void) {
672 /* Line -, ss-fp.syn */
673 return acos;
674 }
675
676 static function_name ag_rp_51(void) {
677 /* Line -, ss-fp.syn */
678 return asin;
679 }
680
681 static function_name ag_rp_52(void) {
682 /* Line -, ss-fp.syn */
683 return atan;
684 }
685
686 static function_name ag_rp_53(void) {
687 /* Line -, ss-fp.syn */
688 return cosh;
689 }
690
691 static function_name ag_rp_54(void) {
692 /* Line -, ss-fp.syn */
693 return cos;
694 }
695
696 static function_name ag_rp_55(void) {
697 /* Line -, ss-fp.syn */
698 return exp;
699 }
700
701 static function_name ag_rp_56(void) {
702 /* Line -, ss-fp.syn */
703 return log10;
704 }
705
706 static function_name ag_rp_57(void) {
707 /* Line -, ss-fp.syn */
708 return log;
709 }
710
711 static function_name ag_rp_58(void) {
712 /* Line -, ss-fp.syn */
713 return pow10d;
714 }
715
716 static function_name ag_rp_59(void) {
717 /* Line -, ss-fp.syn */
718 return round;
719 }
720
721 static function_name ag_rp_60(void) {
722 /* Line -, ss-fp.syn */
723 return sinh;
724 }
725
726 static function_name ag_rp_61(void) {
727 /* Line -, ss-fp.syn */
728 return sin;
729 }
730
731 static function_name ag_rp_62(void) {
732 /* Line -, ss-fp.syn */
733 return sqr;
734 }
735
736 static function_name ag_rp_63(void) {
737 /* Line -, ss-fp.syn */
738 return sqrt;
739 }
740
741 static function_name ag_rp_64(void) {
742 /* Line -, ss-fp.syn */
743 return tanh;
744 }
745
746 static function_name ag_rp_65(void) {
747 /* Line -, ss-fp.syn */
748 return tan;
749 }
750
751 static function_name ag_rp_66(void) {
752 /* Line -, ss-fp.syn */
753 return trunc;
754 }
755
756 static number ag_rp_67(double x) {
757 /* Line -, ss-fp.syn */
758 return num(x);
759 }
760
761 static number ag_rp_68(double x, double y) {
762 /* Line -, ss-fp.syn */
763 return num(x+y);
764 }
765
766 static number ag_rp_69(double x) {
767 /* Line -, ss-fp.syn */
768 return num(x);
769 }
770
771 static double ag_rp_70(int d) {
772 /* Line -, ss-fp.syn */
773 return d-'0';
774 }
775
776 static double ag_rp_71(double n, int d) {
777 /* Line -, ss-fp.syn */
778 return 10*n+d-'0';
779 }
780
781 static double ag_rp_72(int d) {
782 /* Line -, ss-fp.syn */
783 return (d-'0')/10.;
784 }
785
786 static double ag_rp_73(int d, double f) {
787 /* Line -, ss-fp.syn */
788 return (d-'0'+f)/10.;
789 }
790
791
792 #ifndef AG_TRACE_FILE_NAME
793 #define AG_TRACE_FILE_NAME "ss-fp.etr"
794 #endif
795
796 static void ag_trace_error(void) {
797 FILE *ag_file = fopen(AG_TRACE_FILE_NAME, "w");
798 int i;
799 if (ag_file == NULL) return;
800 fprintf(ag_file, "%d\n", (PCB).ssx);
801 for (i = 0; i < (PCB).ssx; i++) fprintf(ag_file, "%d\n", (PCB).ss[i]);
802 fprintf(ag_file, "%d\n", (PCB).sn);
803 fprintf(ag_file, "%d\n", (PCB).token_number);
804 fclose(ag_file);
805 }
806
807
808 #define READ_COUNTS ss-fp_read_counts()
809 #define WRITE_COUNTS ss-fp_write_counts()
810 unsigned ss-fp_nrc[183];
811 void ss-fp_read_counts(void) {
812 FILE *ag_file = fopen("ss-fp.nrc", "r");
813 int i;
814
815 if (ag_file) {
816 long ag_file_id;
817 fscanf(ag_file, "%ld", &ag_file_id);
818 if (ag_file_id == 0L) {
819 for (i = 0; i < 183; i++)
820 fscanf(ag_file,"%u", &(ss-fp_nrc[i]));
821 fclose(ag_file);
822 return;
823 }
824 }
825 for (i = 0; i < 183; i++) ss-fp_nrc[i] = 0;
826 }
827
828 void ss-fp_write_counts(void) {
829 FILE *ag_file = fopen("ss-fp.nrc", "w");
830 int i;
831
832 if (ag_file == NULL) return;
833 fprintf(ag_file, "%ld\n", 0L);
834 for (i = 0; i < 183; i++)
835 fprintf(ag_file,"%u\n", ss-fp_nrc[i]);
836 fclose(ag_file);
837 }
838
839
840 #undef V
841 #define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i]))
842 #undef VS
843 #define VS(i) (PCB).vs[(PCB).ssx + i]
844
845 #ifndef GET_CONTEXT
846 #define GET_CONTEXT CONTEXT = (PCB).input_context
847 #endif
848
849 typedef enum {
850 ag_action_1,
851 ag_action_2,
852 ag_action_3,
853 ag_action_4,
854 ag_action_5,
855 ag_action_6,
856 ag_action_7,
857 ag_action_8,
858 ag_action_9,
859 ag_action_10,
860 ag_action_11,
861 ag_action_12
862 } ag_parser_action;
863
864
865 #ifndef NULL_VALUE_INITIALIZER
866 #define NULL_VALUE_INITIALIZER = { 0 }
867 #endif
868
869 static ss-fp_vs_type const ag_null_value NULL_VALUE_INITIALIZER;
870
871 static const unsigned char ag_rpx[] = {
872 0, 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 0, 0, 0, 6, 7, 8,
873 9, 10, 11, 12, 13, 14, 15, 16, 17, 0, 18, 0, 19, 0, 20, 0, 21, 22,
874 23, 24, 25, 26, 27, 28, 0, 0, 0, 0, 29, 30, 0, 31, 32, 0, 33, 0,
875 34, 35, 0, 36, 37, 0, 38, 0, 39, 0, 0, 0, 40, 0, 41, 0, 42, 43,
876 44, 45, 46, 47, 0, 0, 0, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
877 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 67, 68, 69, 70, 71, 72, 73
878 };
879
880 static const unsigned char ag_key_itt[] = {
881 0
882 };
883
884 static const unsigned short ag_key_pt[] = {
885 0
886 };
887
888 static const unsigned char ag_key_ch[] = {
889 0, 66, 67, 83, 84,255, 72,255, 83,255, 79,255, 49,255, 71,255, 79,255,
890 72,255, 78,255, 84,255, 82,255, 73, 81,255, 72,255, 78,255, 65, 82,255,
891 65, 67, 69, 76, 80, 82, 83, 84,255, 66, 67, 83, 84,255, 72,255, 83,255,
892 79,255, 49,255, 71,255, 79,255, 72,255, 78,255, 84,255, 82,255, 73, 81,
893 255, 72,255, 78,255, 65, 82,255, 33, 46, 60, 61, 62, 65, 67, 69, 76, 80,
894 82, 83, 84,255, 33, 46, 60, 61, 62,255, 33, 60, 61, 62,255, 46,255
895 };
896
897 static const unsigned char ag_key_act[] = {
898 0,3,3,3,3,4,0,4,1,4,2,4,3,4,1,4,2,4,0,4,1,4,0,4,1,4,2,2,4,0,4,1,4,2,3,
899 4,2,2,3,2,3,3,2,2,4,3,3,3,3,4,0,4,1,4,2,4,3,4,1,4,2,4,0,4,1,4,0,4,1,4,
900 2,2,4,0,4,1,4,2,3,4,3,3,3,3,3,2,2,3,2,3,3,2,2,4,3,3,3,3,3,4,3,3,3,3,4,
901 3,4
902 };
903
904 static const unsigned char ag_key_parm[] = {
905 0,145,146,147,148, 0,149, 0,150, 0, 0, 0,152, 0,153, 0, 0, 0,
906 156, 0,157, 0,159, 0,158, 0, 0, 0, 0,160, 0,161, 0, 0,162, 0,
907 0, 0,151, 0,154,155, 0, 0, 0,145,146,147,148, 0,149, 0,150, 0,
908 0, 0,152, 0,153, 0, 0, 0,156, 0,157, 0,159, 0,158, 0, 0, 0,
909 0,160, 0,161, 0, 0,162, 0,137,143,134,136,135, 0, 0,151, 0,154,
910 155, 0, 0, 0,137,143,134,136,135, 0,137,134,136,135, 0,143, 0
911 };
912
913 static const unsigned char ag_key_jmp[] = {
914 0, 0, 2, 5, 8, 0, 0, 0, 6, 0, 8, 0, 14, 0, 12, 0, 14, 0,
915 0, 0, 18, 0, 0, 0, 22, 0, 20, 24, 0, 0, 0, 29, 0, 31, 26, 0,
916 1, 10, 11, 16, 16, 21, 26, 33, 0, 41, 43, 46, 49, 0, 0, 0, 50, 0,
917 52, 0, 55, 0, 56, 0, 58, 0, 0, 0, 62, 0, 0, 0, 66, 0, 64, 68,
918 0, 0, 0, 73, 0, 75, 67, 0, 30, 32, 35, 37, 39, 45, 54, 52, 60, 57,
919 62, 70, 77, 0, 71, 73, 76, 78, 80, 0, 82, 84, 86, 88, 0, 90, 0
920 };
921
922 static const unsigned char ag_key_index[] = {
923 36, 80, 36, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 36, 0, 80, 80,
924 36, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
925 0, 0, 0, 0, 36, 80, 80, 80, 80, 0, 0, 94, 36, 80, 0, 36, 94, 0,
926 100, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 0, 0, 0, 0, 0, 94,
927 0, 36, 36, 36, 36, 36, 36, 36, 36, 0, 36, 36, 0, 0, 0, 0, 0, 0,
928 80, 0, 0, 0, 94, 94, 0,100, 0, 36,100, 0, 0, 0, 0, 0, 36, 0,
929 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,100, 0, 36, 36,
930 36, 36, 36, 36, 0, 0, 36,100,100,100,100,100,100, 0, 0, 0, 0, 36,
931 36, 0, 36, 36, 0, 0,105, 0, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0,
932 0
933 };
934
935 static const unsigned char ag_key_ends[] = {
936 83,0, 79,83,0, 73,78,0, 65,78,0, 88,80,0, 48,0, 79,87,49,48,0,
937 79,85,78,68,0, 85,78,67,0, 61,0, 46,46,0, 61,0, 61,0, 61,0,
938 83,0, 79,83,0, 73,78,0, 65,78,0, 88,80,0, 48,0, 79,87,49,48,0,
939 79,85,78,68,0, 85,78,67,0, 61,0, 46,46,0, 61,0, 61,0, 61,0,
940 61,0, 61,0, 61,0, 61,0, 46,46,0,
941 };
942
943 #define AG_TCV(x) ag_tcv[(x)]
944
945 static const unsigned char ag_tcv[] = {
946 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0,
947 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,131, 0, 0,
948 0, 0,128, 0,130,129,140,138,119,139,116,114,164,125,125,125,125,125,
949 125,125,125,125,117,126,132,113,133, 0,115,120,165,163,118,165,123,124,
950 165,165,165,165,121,165,165,165,165,165,122,165,165,165,165,165,165,165,
951 165, 0, 0, 0,141, 0, 0,120,165,163,118,165,123,124,165,165,165,165,
952 121,165,165,165,165,165,122,165,165,165,165,165,165,165,165, 0,127, 0,
953 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
954 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
955 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
956 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142,144, 0,
957 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
958 0, 0, 0, 0, 0,112,110, 0, 0, 0, 0,142,144, 0, 0, 0, 0, 0,
959 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
960 0,112,110,109
961 };
962
963 #ifndef SYNTAX_ERROR
964 #define SYNTAX_ERROR fprintf(stderr,"%s\n", (PCB).error_message)
965 #endif
966
967 #ifndef PARSER_STACK_OVERFLOW
968 #define PARSER_STACK_OVERFLOW {fprintf(stderr, \
969 "\nParser stack overflow\n");}
970 #endif
971
972 #ifndef REDUCTION_TOKEN_ERROR
973 #define REDUCTION_TOKEN_ERROR {fprintf(stderr, \
974 "\nReduction token error\n");}
975 #endif
976
977
978 #ifndef INPUT_CODE
979 #define INPUT_CODE(T) (T)
980 #endif
981
982 typedef enum
983 {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key,
984 ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words;
985
986 static void ag_get_key_word(int ag_k) {
987 int ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
988 const unsigned char *ag_p;
989 int ag_ch;
990 while (1) {
991 switch (ag_key_act[ag_k]) {
992 case ag_cf_end_key: {
993 const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
994 do {
995 if ((ag_ch = *sp++) == 0) {
996 int ag_k1 = ag_key_parm[ag_k];
997 int ag_k2 = ag_key_pt[ag_k1];
998 if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) goto ag_fail;
999 (PCB).token_number = (ss-fp_token_type) ag_key_pt[ag_k1 + 1];
1000 return;
1001 }
1002 } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
1003 goto ag_fail;
1004 }
1005 case ag_end_key: {
1006 const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
1007 do {
1008 if ((ag_ch = *sp++) == 0) {
1009 (PCB).token_number = (ss-fp_token_type) ag_key_parm[ag_k];
1010 return;
1011 }
1012 } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
1013 }
1014 case ag_no_match_key:
1015 ag_fail:
1016 (PCB).la_ptr = (PCB).pointer + ag_save;
1017 return;
1018 case ag_cf_set_key: {
1019 int ag_k1 = ag_key_parm[ag_k];
1020 int ag_k2 = ag_key_pt[ag_k1];
1021 ag_k = ag_key_jmp[ag_k];
1022 if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) break;
1023 ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
1024 (PCB).token_number = (ss-fp_token_type) ag_key_pt[ag_k1+1];
1025 break;
1026 }
1027 case ag_set_key:
1028 ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
1029 (PCB).token_number = (ss-fp_token_type) ag_key_parm[ag_k];
1030 case ag_jmp_key:
1031 ag_k = ag_key_jmp[ag_k];
1032 break;
1033 case ag_accept_key:
1034 (PCB).token_number = (ss-fp_token_type) ag_key_parm[ag_k];
1035 return;
1036 case ag_cf_accept_key: {
1037 int ag_k1 = ag_key_parm[ag_k];
1038 int ag_k2 = ag_key_pt[ag_k1];
1039 if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)])
1040 (PCB).la_ptr = (PCB).pointer + ag_save;
1041 else (PCB).token_number = (ss-fp_token_type) ag_key_pt[ag_k1+1];
1042 return;
1043 }
1044 }
1045 ag_ch = CONVERT_CASE(*(PCB).la_ptr++);
1046 ag_p = &ag_key_ch[ag_k];
1047 if (ag_ch <= 255) while (*ag_p < ag_ch) ag_p++;
1048 if (ag_ch > 255 || *ag_p != ag_ch) {
1049 (PCB).la_ptr = (PCB).pointer + ag_save;
1050 return;
1051 }
1052 ag_k = (int) (ag_p - ag_key_ch);
1053 }
1054 }
1055
1056
1057 static const unsigned char ag_tstt[] = {
1058 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1059 146,145,144,142,139,130,125,124,123,122,121,120,118,116,112,110,109,1,0,
1060 107,108,
1061 1,0,
1062 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1063 146,145,144,142,139,130,125,124,123,122,121,120,118,116,112,110,109,0,2,
1064 3,4,6,8,13,19,21,27,29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,
1065 66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,
1066 93,94,95,96,97,98,99,100,104,105,106,
1067 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1068 146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,
1069 127,126,125,124,123,122,121,120,119,118,117,116,114,113,111,5,1,0,107,
1070 108,
1071 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1072 146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,
1073 127,126,125,124,123,122,121,120,119,118,117,116,114,113,111,5,1,0,107,
1074 108,
1075 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1076 146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,
1077 127,126,125,124,123,122,121,120,119,118,117,116,114,111,5,1,0,107,108,
1078 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1079 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
1080 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
1081 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1082 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
1083 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
1084 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1085 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
1086 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
1087 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1088 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
1089 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
1090 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1091 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
1092 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
1093 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1094 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
1095 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
1096 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1097 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
1098 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
1099 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1100 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
1101 123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
1102 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1103 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108,
1104 165,163,124,123,122,121,120,118,0,21,27,29,31,32,33,35,104,106,
1105 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1106 145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
1107 123,122,121,120,119,118,117,114,111,5,0,
1108 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1109 145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127,
1110 126,124,123,122,121,120,119,118,117,114,111,5,1,0,107,108,
1111 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1112 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,8,19,21,27,
1113 29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,
1114 74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
1115 100,104,105,106,
1116 125,0,28,36,
1117 164,125,0,36,102,105,
1118 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1119 146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,
1120 127,126,125,124,123,122,121,120,119,118,117,116,114,111,5,0,19,36,100,
1121 101,105,
1122 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1123 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1124 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1125 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1126 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1127 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1128 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1129 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1130 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1131 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1132 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1133 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1134 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1135 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1136 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1137 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1138 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1139 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1140 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1141 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1142 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1143 145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127,
1144 126,124,123,122,121,120,119,118,117,114,111,5,0,
1145 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1146 145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127,
1147 126,124,123,122,121,120,119,118,117,114,111,5,0,
1148 162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,143,
1149 141,140,139,138,137,136,135,134,133,132,129,128,127,126,119,117,114,111,
1150 5,0,
1151 165,163,144,142,130,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,47,
1152 70,72,74,75,76,77,80,104,106,
1153 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1154 31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99,
1155 100,104,105,106,
1156 141,0,68,
1157 114,0,17,
1158 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1159 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1160 162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,0,
1161 64,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,
1162 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1163 31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99,
1164 100,104,105,106,
1165 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1166 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1167 31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,
1168 75,76,77,78,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
1169 100,104,105,106,
1170 140,0,62,
1171 165,163,124,123,122,121,120,118,1,0,107,108,
1172 139,138,117,0,22,58,59,
1173 165,163,124,123,122,121,120,118,115,1,0,107,108,
1174 165,163,124,123,122,121,120,118,1,0,107,108,
1175 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
1176 111,5,0,9,10,11,12,
1177 165,163,124,123,122,121,120,118,115,0,4,7,16,21,27,29,31,32,33,34,35,104,
1178 106,
1179 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
1180 129,0,48,
1181 164,125,0,36,105,
1182 164,125,0,36,102,105,
1183 164,125,0,36,102,105,
1184 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
1185 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1186 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1187 31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99,
1188 100,104,105,106,
1189 165,164,163,144,142,130,125,124,123,122,121,120,118,116,1,0,107,108,
1190 165,164,163,144,142,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,31,
1191 32,33,34,35,36,47,65,69,70,71,72,73,74,75,76,77,80,99,100,104,105,106,
1192 165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1193 31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99,
1194 100,104,105,106,
1195 139,138,0,58,59,
1196 117,0,22,
1197 116,0,19,
1198 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1199 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1200 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1201 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1202 31,32,33,34,35,36,47,59,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,80,
1203 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,105,
1204 106,
1205 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1206 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1207 31,32,33,34,35,36,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
1208 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
1209 105,106,
1210 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1211 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1212 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1213 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1214 31,32,33,34,35,36,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
1215 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
1216 105,106,
1217 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1218 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108,
1219 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1220 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21,
1221 27,29,31,32,33,34,35,36,38,39,40,42,44,46,47,49,50,57,59,60,61,63,64,65,
1222 66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,
1223 93,94,95,96,97,98,99,100,104,105,106,
1224 116,0,14,19,
1225 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1226 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1227 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1228 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,8,19,21,27,
1229 29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,
1230 74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
1231 100,104,105,106,
1232 111,0,9,10,
1233 5,0,
1234 165,163,124,123,122,121,120,118,1,0,107,108,
1235 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
1236 113,0,15,
1237 5,0,
1238 165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
1239 145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127,
1240 126,124,123,122,121,120,119,118,117,114,111,5,1,0,107,108,
1241 116,0,19,
1242 165,163,124,123,122,121,120,118,0,21,27,29,31,32,33,77,104,106,
1243 165,163,124,123,122,121,120,118,116,0,19,20,
1244 140,0,62,
1245 140,0,62,
1246 130,1,0,107,108,
1247 137,136,135,134,133,132,0,51,52,53,54,55,56,
1248 130,0,47,
1249 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1250 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,8,19,21,
1251 27,29,31,32,33,34,35,36,38,39,40,42,44,46,47,49,50,57,59,60,61,63,64,65,
1252 66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,
1253 93,94,95,96,97,98,99,100,104,105,106,
1254 137,136,135,134,133,132,129,128,127,126,0,
1255 128,0,45,
1256 127,126,0,41,43,
1257 165,163,124,123,122,121,120,118,116,0,19,20,
1258 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
1259 116,0,14,19,
1260 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1261 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1262 113,0,15,
1263 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
1264 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1265 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1266 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1267 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1268 31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
1269 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
1270 105,106,
1271 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1272 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1273 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1274 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1275 31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
1276 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
1277 105,106,
1278 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1279 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1280 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1281 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1282 31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
1283 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
1284 105,106,
1285 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1286 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1287 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1288 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1289 31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
1290 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
1291 105,106,
1292 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1293 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1294 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1295 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1296 31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
1297 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
1298 105,106,
1299 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1300 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1301 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1302 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1303 31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
1304 77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
1305 105,106,
1306 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1307 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21,
1308 27,29,31,32,33,34,35,36,38,39,40,42,44,46,47,49,50,57,59,60,61,63,64,65,
1309 66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,
1310 93,94,95,96,97,98,99,100,104,105,106,
1311 137,136,135,134,133,132,129,0,
1312 129,127,0,43,48,
1313 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1314 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108,
1315 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1316 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21,
1317 27,29,31,32,33,34,35,36,38,39,44,46,47,49,50,57,59,60,61,63,64,65,66,67,
1318 69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,
1319 95,96,97,98,99,100,104,105,106,
1320 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1321 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108,
1322 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1323 146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21,
1324 27,29,31,32,33,34,35,36,38,39,42,44,46,47,49,50,57,59,60,61,63,64,65,66,
1325 67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,
1326 94,95,96,97,98,99,100,104,105,106,
1327 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1328 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1329 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1330 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,8,19,21,27,
1331 29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,
1332 74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
1333 100,104,105,106,
1334 5,0,
1335 165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
1336 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1337 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1338 31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,
1339 75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
1340 100,104,105,106,
1341 139,138,0,58,59,
1342 139,138,0,58,59,
1343 139,138,0,58,59,
1344 139,138,0,58,59,
1345 139,138,0,58,59,
1346 139,138,0,58,59,
1347 129,127,0,43,48,
1348 128,0,45,
1349 114,0,17,
1350 119,0,24,
1351 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1352 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1353 31,32,33,34,35,36,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,
1354 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,105,
1355 106,
1356 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1357 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1358 31,32,33,34,35,36,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,
1359 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,105,
1360 106,
1361 120,0,18,21,
1362 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1363 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1364 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1365 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1366 31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,
1367 75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
1368 100,104,105,106,
1369 117,0,22,
1370 5,0,
1371 143,0,79,
1372 163,122,121,0,23,29,31,104,
1373 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1374 146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
1375 165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
1376 146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
1377 31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,
1378 75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
1379 100,104,105,106,
1380 119,0,24,
1381 163,0,104,
1382 117,0,22,
1383 163,124,123,0,26,32,33,104,
1384 119,0,24,
1385 118,0,27,
1386 117,0,22,
1387 125,0,28,36,
1388 164,125,0,36,105,
1389
1390 };
1391
1392
1393 static unsigned const char ag_astt[5069] = {
1394 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,
1395 7,1,1,9,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1396 1,1,1,1,7,0,1,2,1,1,1,3,1,1,1,1,1,1,1,1,2,3,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,
1397 3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,
1398 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1399 5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1400 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,
1401 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1402 5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1403 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,
1404 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1405 5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1406 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1407 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,
1408 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1409 5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1410 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,
1411 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1412 5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1413 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1414 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,4,3,3,3,3,
1415 3,3,2,3,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1416 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1417 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,
1418 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,3,1,1,1,1,1,
1419 1,1,1,2,3,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
1420 2,2,2,2,2,2,2,1,1,1,2,1,1,7,1,2,1,1,7,1,2,1,5,1,5,5,5,5,5,5,5,5,5,5,5,5,5,
1421 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,5,5,1,5,5,5,
1422 7,3,2,1,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,
1423 5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,
1424 5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,
1425 5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,
1426 5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,
1427 5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,
1428 5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,
1429 5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,
1430 5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,
1431 5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1432 5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1433 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,5,5,
1434 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1435 5,5,5,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1436 5,5,5,5,5,7,1,1,1,1,1,1,1,1,1,1,1,5,2,1,1,1,1,1,1,1,1,1,2,2,3,2,1,2,2,1,1,
1437 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,1,
1438 3,3,2,1,2,2,1,1,1,2,1,1,7,1,1,5,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1439 5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,
1440 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,
1441 1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,1,3,3,2,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,
1442 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,7,1,3,1,1,1,1,1,1,1,1,2,
1443 2,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1444 2,2,2,2,1,1,1,2,1,1,5,1,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,5,1,1,1,5,5,5,5,5,5,
1445 5,5,5,3,7,1,3,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,7,1,3,3,3,3,3,3,1,1,
1446 3,3,1,5,7,1,3,1,1,1,1,1,1,1,1,1,1,1,7,1,3,1,3,3,3,3,3,3,1,1,3,3,1,1,1,1,1,
1447 1,1,1,7,1,3,3,3,3,3,3,1,1,3,3,1,7,2,1,1,4,2,2,1,1,4,1,2,1,1,1,5,1,2,1,1,1,
1448 1,1,1,1,1,1,7,1,3,3,3,3,3,3,1,1,3,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,
1449 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,1,
1450 3,3,2,1,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,
1451 1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,2,1,3,3,3,3,3,2,1,2,2,1,1,1,2,1,1,1,
1452 1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,1,3,3,
1453 2,1,2,2,1,1,1,2,1,1,1,5,1,1,1,7,1,1,4,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1454 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1455 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,2,3,1,1,1,1,1,
1456 1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,
1457 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,
1458 1,1,2,1,2,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1459 2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1460 5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1461 1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,2,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,
1462 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1463 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,
1464 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,3,1,1,1,
1465 3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1466 2,2,2,2,2,1,1,1,2,1,1,7,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1467 5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1468 1,1,1,1,1,1,1,1,1,1,7,2,3,3,1,1,1,1,1,1,1,1,2,3,1,1,3,1,1,3,3,1,1,1,1,1,1,
1469 1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,5,1,3,2,7,
1470 5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,7,1,3,3,3,3,3,3,1,1,3,3,1,7,2,2,7,
1471 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1472 5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,7,1,1,1,1,1,1,1,1,1,7,3,3,3,3,3,3,1,3,3,
1473 5,5,5,5,5,5,5,5,1,7,3,1,1,4,1,1,4,1,5,3,7,1,3,1,1,1,1,1,1,7,1,1,1,1,1,1,1,
1474 7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,
1475 2,1,3,1,1,1,1,1,1,1,1,2,1,1,1,1,3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,
1476 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,7,
1477 1,5,1,1,1,7,1,1,5,5,5,5,5,5,5,5,1,7,3,3,1,1,1,1,1,1,1,1,7,1,3,3,3,3,3,3,1,
1478 1,3,3,1,7,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1479 5,5,5,3,7,1,3,1,7,1,1,1,1,1,1,1,1,1,7,2,3,3,3,3,3,3,1,1,3,3,5,5,5,5,5,5,5,
1480 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,
1481 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,7,2,3,1,1,1,1,1,1,1,1,
1482 2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1483 2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1484 5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1485 1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,
1486 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1487 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1488 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,1,3,3,1,1,
1489 1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,
1490 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,
1491 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,
1492 1,1,1,1,1,2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
1493 2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1494 5,5,5,5,5,5,5,5,3,7,1,3,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,
1495 1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,
1496 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,
1497 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,
1498 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,
1499 1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,
1500 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1501 7,2,3,1,1,1,1,1,1,1,1,2,3,1,1,1,3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,
1502 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,7,1,1,7,
1503 1,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,
1504 7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1505 7,2,3,1,1,1,1,1,1,1,1,2,3,1,2,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,
1506 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,
1507 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,
1508 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,3,1,1,
1509 3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1510 2,2,2,2,2,1,1,1,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1511 5,5,5,5,5,5,3,7,1,3,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,
1512 1,1,1,1,1,1,7,2,2,3,1,1,1,1,1,1,1,1,2,3,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,
1513 2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,2,7,1,1,1,1,1,1,1,1,
1514 7,1,3,3,3,3,3,3,1,1,3,3,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,
1515 1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,
1516 3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,4,1,1,1,1,4,1,
1517 1,1,1,4,1,1,1,1,4,1,1,1,1,4,1,1,1,1,4,1,1,1,1,7,1,2,1,4,1,1,7,1,1,7,1,1,1,
1518 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,
1519 1,1,1,1,1,2,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1520 2,2,2,2,2,2,1,1,1,2,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,
1521 1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,
1522 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,7,1,1,5,5,5,5,5,5,5,5,5,
1523 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,
1524 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,1,
1525 1,1,3,1,1,3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1526 2,2,1,1,1,2,1,1,7,1,2,7,1,7,1,1,1,1,7,1,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1527 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1528 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,3,1,1,1,1,1,1,1,1,2,2,1,1,3,1,1,
1529 3,3,1,1,1,1,1,1,1,1,3,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,
1530 2,1,1,7,1,1,7,1,1,7,1,1,1,1,7,1,2,2,2,1,7,1,1,7,1,1,7,1,1,7,1,2,1,1,4,2,2
1531 };
1532
1533
1534 static const unsigned char ag_pstt[] = {
1535 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1536 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,
1537 0,1,2,
1538 123,125,
1539 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1540 8,9,6,7,13,10,5,53,55,56,2,0,60,68,59,58,57,109,16,16,16,16,16,16,19,15,
1541 103,27,54,18,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,
1542 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1543 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1544 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1545 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,3,1,
1546 142,
1547 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1548 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1549 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,4,1,
1550 181,
1551 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1552 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1553 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,5,1,133,
1554 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1555 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1556 124,124,124,124,124,124,124,124,124,124,124,122,6,1,139,
1557 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1558 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1559 124,124,124,124,124,124,124,124,124,124,124,122,7,1,138,
1560 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1561 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1562 124,124,124,124,124,124,124,124,124,124,124,122,8,1,141,
1563 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1564 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1565 124,124,124,124,124,124,124,124,124,124,124,122,9,1,140,
1566 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1567 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1568 124,124,124,124,124,124,124,124,124,124,124,122,10,1,135,
1569 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1570 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1571 124,124,124,124,124,124,124,124,124,124,124,122,11,1,180,
1572 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1573 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1574 124,124,124,124,124,124,124,124,124,124,124,122,12,1,182,
1575 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1576 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1577 124,124,124,124,124,124,124,124,124,124,124,122,13,1,137,
1578 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1579 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,14,1,
1580 147,
1581 12,11,8,9,6,7,13,10,24,107,107,107,107,107,107,23,107,107,
1582 107,107,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
1583 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,107,107,
1584 107,107,107,107,108,107,108,108,108,108,16,
1585 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1586 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1587 124,124,124,124,124,124,124,124,124,124,124,124,122,17,1,159,
1588 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1589 8,9,6,7,13,10,5,18,68,61,109,16,16,16,16,16,16,19,15,103,27,54,18,45,45,
1590 52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
1591 87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1592 3,19,62,25,
1593 4,3,20,63,102,63,
1594 98,4,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
1595 98,98,98,98,98,98,98,98,98,98,98,98,98,98,3,98,98,98,98,98,98,98,98,5,
1596 98,98,98,21,109,104,64,100,104,
1597 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,22,1,179,
1598 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,23,1,178,
1599 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,24,1,177,
1600 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,25,1,176,
1601 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,26,1,175,
1602 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,27,1,174,
1603 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,28,1,173,
1604 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,29,1,172,
1605 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,30,1,171,
1606 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,31,1,170,
1607 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,32,1,169,
1608 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,33,1,168,
1609 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,34,1,167,
1610 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,35,1,166,
1611 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,36,1,165,
1612 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,37,1,164,
1613 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,38,1,163,
1614 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,39,1,162,
1615 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1616 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,40,1,156,
1617 65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,77,65,
1618 65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,
1619 41,
1620 64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,76,64,
1621 64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
1622 42,
1623 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,78,63,63,63,63,63,
1624 63,63,63,63,63,63,63,63,63,63,63,63,63,43,
1625 12,11,48,17,14,8,9,6,7,13,10,61,68,16,16,16,16,16,16,19,15,18,62,66,69,70,
1626 65,72,74,16,16,
1627 12,4,11,48,17,40,14,3,8,9,6,7,13,10,5,45,68,109,16,16,16,16,16,16,19,15,103,
1628 18,45,58,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16,
1629 66,46,67,
1630 68,56,69,
1631 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1632 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,48,1,161,
1633 22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,59,70,80,81,82,83,84,
1634 85,86,87,88,89,90,91,92,93,94,95,96,97,
1635 12,4,11,48,17,40,14,3,8,9,6,7,13,10,5,50,68,109,16,16,16,16,16,16,19,15,103,
1636 18,45,54,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16,
1637 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1638 8,9,6,7,13,10,5,51,73,109,16,16,16,16,16,16,19,15,103,75,71,18,45,45,52,
1639 51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,72,74,80,81,82,83,84,85,86,
1640 87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1641 74,48,75,
1642 124,124,124,124,124,124,124,124,122,53,1,129,
1643 40,77,79,44,80,78,76,
1644 124,124,124,124,124,124,124,124,124,122,55,1,127,
1645 124,124,124,124,124,124,124,124,122,56,1,126,
1646 12,11,8,9,6,7,13,10,57,81,107,107,107,107,107,107,19,15,107,107,
1647 82,6,58,83,4,84,85,
1648 12,11,8,9,6,7,13,10,86,59,88,2,87,107,107,107,107,107,107,19,15,107,107,
1649 12,11,8,9,6,7,13,10,60,89,107,107,107,107,107,107,19,15,107,107,
1650 90,61,79,
1651 4,3,22,26,26,
1652 4,3,105,63,106,63,
1653 4,3,99,63,101,63,
1654 12,11,8,9,6,7,13,10,65,91,107,107,107,107,107,107,19,15,107,107,
1655 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,66,1,158,
1656 12,4,11,48,17,40,14,3,8,9,6,7,13,10,5,67,68,109,16,16,16,16,16,16,19,15,103,
1657 18,45,57,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16,
1658 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,68,1,131,
1659 12,4,11,48,17,14,3,8,9,6,7,13,10,5,69,68,109,16,16,16,16,16,16,19,15,103,18,
1660 60,44,63,64,65,67,69,70,65,72,74,21,20,16,103,16,
1661 12,4,11,48,17,40,14,3,8,9,6,7,13,10,5,70,68,109,16,16,16,16,16,16,19,15,103,
1662 18,45,55,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16,
1663 40,77,44,78,76,
1664 79,72,92,
1665 5,68,93,
1666 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1667 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,74,1,157,
1668 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1669 8,9,6,7,13,10,5,75,68,109,16,16,16,16,16,16,19,15,103,18,45,52,53,50,49,
1670 47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,89,90,91,
1671 92,93,94,95,96,97,21,20,16,103,16,
1672 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1673 8,9,6,7,13,10,5,76,68,109,16,16,16,16,16,16,19,15,103,18,47,45,94,51,53,
1674 50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,87,88,89,
1675 90,91,92,93,94,95,96,97,21,20,16,103,16,
1676 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1677 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,77,1,155,
1678 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1679 8,9,6,7,13,10,5,78,68,109,16,16,16,16,16,16,19,15,103,18,46,45,95,51,53,
1680 50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,87,88,89,
1681 90,91,92,93,94,95,96,97,21,20,16,103,16,
1682 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1683 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,79,1,
1684 134,
1685 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96,
1686 14,3,8,9,6,7,13,10,5,80,68,109,16,16,16,16,16,16,19,15,103,42,71,102,
1687 101,31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,
1688 72,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,
1689 103,16,
1690 5,81,104,103,
1691 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1692 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,82,1,128,
1693 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1694 8,9,6,7,13,10,5,83,68,3,109,16,16,16,16,16,16,19,15,103,27,54,18,45,45,
1695 52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
1696 87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1697 82,7,83,5,
1698 8,85,
1699 124,124,124,124,124,124,124,124,122,86,1,132,
1700 12,11,8,9,6,7,13,10,87,105,107,107,107,107,107,107,19,15,107,107,
1701 106,88,10,
1702 1,89,
1703 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1704 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1705 124,124,124,124,124,124,124,124,124,124,124,124,122,90,1,146,
1706 5,91,93,
1707 12,11,8,9,6,7,13,10,92,108,108,108,108,108,108,107,108,108,
1708 12,12,12,12,12,12,12,12,5,93,13,108,
1709 74,50,75,
1710 74,49,75,
1711 124,122,96,1,148,
1712 109,111,113,115,117,119,97,120,118,116,114,112,110,
1713 14,98,121,
1714 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96,
1715 14,3,8,9,6,7,13,10,5,99,68,61,109,16,16,16,16,16,16,19,15,103,122,54,
1716 123,101,31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,
1717 51,72,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,
1718 103,16,
1719 43,43,43,43,43,43,33,33,33,33,100,
1720 124,29,125,
1721 126,128,102,129,127,
1722 12,12,12,12,12,12,12,12,5,103,13,14,
1723 12,11,8,9,6,7,13,10,104,130,107,107,107,107,107,107,19,15,107,107,
1724 5,105,131,103,
1725 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1726 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,106,1,130,
1727 106,107,132,
1728 12,11,8,9,6,7,13,10,108,71,107,107,107,107,107,107,19,15,107,107,
1729 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1730 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,109,1,154,
1731 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1732 8,9,6,7,13,10,5,110,68,109,16,16,16,16,16,16,19,15,103,133,18,45,52,51,
1733 53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
1734 89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1735 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1736 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,111,1,153,
1737 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1738 8,9,6,7,13,10,5,112,68,109,16,16,16,16,16,16,19,15,103,134,18,45,52,51,
1739 53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
1740 89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1741 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1742 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,113,1,152,
1743 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1744 8,9,6,7,13,10,5,114,68,109,16,16,16,16,16,16,19,15,103,135,18,45,52,51,
1745 53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
1746 89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1747 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1748 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,115,1,151,
1749 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1750 8,9,6,7,13,10,5,116,68,109,16,16,16,16,16,16,19,15,103,136,18,45,52,51,
1751 53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
1752 89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1753 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1754 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,117,1,150,
1755 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1756 8,9,6,7,13,10,5,118,68,109,16,16,16,16,16,16,19,15,103,137,18,45,52,51,
1757 53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
1758 89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1759 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1760 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,119,1,149,
1761 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1762 8,9,6,7,13,10,5,120,68,109,16,16,16,16,16,16,19,15,103,138,18,45,52,51,
1763 53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
1764 89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1765 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96,
1766 14,3,8,9,6,7,13,10,5,121,68,109,16,16,16,16,16,16,19,15,103,42,71,139,
1767 101,31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,
1768 72,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,
1769 103,16,
1770 42,42,42,42,42,42,27,122,
1771 90,126,123,127,34,
1772 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1773 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,124,1,
1774 145,
1775 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96,
1776 14,3,8,9,6,7,13,10,5,125,68,109,16,16,16,16,16,16,19,15,103,42,71,32,
1777 100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,
1778 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1779 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1780 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,126,1,
1781 144,
1782 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,96,
1783 14,3,8,9,6,7,13,10,5,127,68,109,16,16,16,16,16,16,19,15,103,42,71,140,
1784 31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,
1785 74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,
1786 16,
1787 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1788 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,128,1,143,
1789 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1790 8,9,6,7,13,10,5,129,68,28,109,16,16,16,16,16,16,19,15,103,27,54,18,45,
1791 45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,
1792 86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1793 9,130,
1794 12,11,8,9,6,7,13,10,131,141,107,107,107,107,107,107,19,15,107,107,
1795 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1796 8,9,6,7,13,10,5,132,68,109,16,16,16,16,16,16,19,15,103,142,71,18,45,45,
1797 52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
1798 87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1799 40,77,41,144,143,
1800 40,77,40,144,143,
1801 40,77,39,144,143,
1802 40,77,38,144,143,
1803 40,77,37,144,143,
1804 40,77,36,144,143,
1805 90,126,139,127,35,
1806 124,30,125,
1807 68,141,145,
1808 146,142,147,
1809 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1810 8,9,6,7,13,10,5,143,68,109,16,16,16,16,16,16,19,15,103,18,45,94,51,53,
1811 50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,89,
1812 90,91,92,93,94,95,96,97,21,20,16,103,16,
1813 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1814 8,9,6,7,13,10,5,144,68,109,16,16,16,16,16,16,19,15,103,18,45,95,51,53,
1815 50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,89,
1816 90,91,92,93,94,95,96,97,21,20,16,103,16,
1817 13,145,149,148,
1818 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1819 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,146,1,136,
1820 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1821 8,9,6,7,13,10,5,147,68,109,16,16,16,16,16,16,19,15,103,150,71,18,45,45,
1822 52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
1823 87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1824 79,148,151,
1825 11,149,
1826 152,150,153,
1827 11,6,7,151,154,16,18,17,
1828 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
1829 124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,152,1,160,
1830 12,4,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,48,17,40,14,3,
1831 8,9,6,7,13,10,5,153,68,109,16,16,16,16,16,16,19,15,103,73,71,18,45,45,
1832 52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
1833 87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
1834 146,154,155,
1835 11,155,156,
1836 79,156,157,
1837 11,8,9,157,158,20,21,19,
1838 146,158,159,
1839 10,159,160,
1840 79,160,161,
1841 3,161,162,25,
1842 4,3,15,26,26,
1843
1844 };
1845
1846
1847 static const unsigned short ag_sbt[] = {
1848 0, 40, 42, 140, 197, 254, 310, 362, 414, 466, 518, 570, 622, 674,
1849 726, 764, 782, 830, 883, 974, 978, 984,1042,1061,1080,1099,1118,1137,
1850 1156,1175,1194,1213,1232,1251,1270,1289,1308,1327,1346,1365,1384,1421,
1851 1471,1521,1560,1591,1639,1642,1645,1682,1720,1768,1859,1862,1874,1881,
1852 1894,1906,1926,1933,1956,1976,1979,1984,1990,1996,2016,2035,2083,2101,
1853 2144,2192,2197,2200,2203,2240,2326,2414,2451,2539,2577,2674,2678,2715,
1854 2806,2810,2812,2824,2844,2847,2849,2902,2905,2923,2935,2938,2941,2946,
1855 2959,2962,3060,3071,3074,3079,3091,3111,3115,3152,3155,3175,3212,3300,
1856 3337,3425,3462,3550,3587,3675,3712,3800,3837,3925,4022,4030,4035,4073,
1857 4168,4206,4302,4339,4430,4432,4452,4542,4547,4552,4557,4562,4567,4572,
1858 4577,4580,4583,4586,4673,4760,4764,4801,4891,4894,4896,4899,4907,4944,
1859 5034,5037,5040,5043,5051,5054,5057,5060,5064,5069
1860 };
1861
1862
1863 static const unsigned short ag_sbe[] = {
1864 37, 41, 78, 194, 251, 307, 359, 411, 463, 515, 567, 619, 671, 723,
1865 761, 772, 829, 880, 916, 975, 980,1036,1058,1077,1096,1115,1134,1153,
1866 1172,1191,1210,1229,1248,1267,1286,1305,1324,1343,1362,1381,1418,1470,
1867 1520,1559,1571,1606,1640,1643,1679,1700,1735,1801,1860,1871,1877,1891,
1868 1903,1914,1928,1942,1964,1977,1981,1986,1992,2004,2032,2050,2098,2115,
1869 2159,2194,2198,2201,2237,2273,2359,2448,2484,2574,2611,2675,2712,2748,
1870 2807,2811,2821,2832,2845,2848,2899,2903,2913,2932,2936,2939,2943,2952,
1871 2960,2996,3070,3072,3076,3088,3099,3112,3149,3153,3163,3209,3245,3334,
1872 3370,3459,3495,3584,3620,3709,3745,3834,3870,3959,4029,4032,4070,4107,
1873 4203,4240,4336,4372,4431,4440,4485,4544,4549,4554,4559,4564,4569,4574,
1874 4578,4581,4584,4619,4706,4761,4798,4834,4892,4895,4897,4902,4941,4977,
1875 5035,5038,5041,5046,5052,5055,5058,5061,5066,5069
1876 };
1877
1878
1879 static const unsigned char ag_fl[] = {
1880 2,3,2,2,1,2,0,1,3,5,2,7,0,1,2,11,1,1,1,1,1,1,2,2,1,1,2,1,5,1,3,1,3,1,3,
1881 4,3,3,3,3,3,3,1,1,1,1,3,3,1,3,3,1,3,1,2,3,1,3,2,1,3,1,2,1,1,1,2,1,1,1,
1882 1,5,1,10,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,2,3,2,1,2,
1883 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1884 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1885 2,2,2,2,2,2,2,2
1886 };
1887
1888 static const unsigned char ag_ptt[] = {
1889 0, 2, 2, 10, 11, 11, 12, 12, 2, 2, 7, 7, 20, 20, 14, 18, 23, 23,
1890 23, 26, 26, 26, 4, 34, 34, 28, 28, 8, 8, 40, 40, 42, 42, 44, 44, 44,
1891 46, 46, 46, 46, 46, 46, 50, 50, 38, 38, 38, 38, 39, 39, 39, 60, 60, 61,
1892 61, 61, 63, 63, 63, 66, 66, 65, 65, 65, 69, 69, 69, 71, 72, 72, 72, 72,
1893 70, 57, 76, 78, 67, 67, 67, 74, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
1894 64, 64, 64, 64, 64, 64, 64, 64,101,101, 73, 73, 73, 99, 99,102,102, 35,
1895 77,100, 25, 30, 37, 37,103,103,103,103,103,103,103,103,107,107,108,108,
1896 3, 6, 9, 13, 15, 17, 16, 19, 22, 27, 24, 21, 29, 31, 32, 33, 36, 41,
1897 43, 45, 48, 47, 49, 51, 52, 53, 54, 55, 56, 58, 59, 62, 68, 75, 79, 80,
1898 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
1899 104,105,106
1900 };
1901
1902
1903 static void ag_ra(void)
1904 {
1905 switch(ag_rpx[(PCB).ag_ap]) {
1906 case 1: ag_rp_1(V(1,(pair<int> *))); break;
1907 case 2: ag_rp_2(V(0,(number *))); break;
1908 case 3: ag_rp_3(V(1,(pair<int> *)), V(3,(pair<int> *))); break;
1909 case 4: ag_rp_4(V(0,(pair<int> *))); break;
1910 case 5: ag_rp_5(V(1,(pair<int> *)), V(3,(pair<int> *)), V(5,(format_code *))); break;
1911 case 6: V(0,(format_code *)) = ag_rp_6(V(2,(int *)), V(6,(int *)), V(10,(int *))); break;
1912 case 7: V(0,(int *)) = ag_rp_7(); break;
1913 case 8: V(0,(int *)) = ag_rp_8(); break;
1914 case 9: V(0,(int *)) = ag_rp_9(); break;
1915 case 10: V(0,(int *)) = ag_rp_10(); break;
1916 case 11: V(0,(int *)) = ag_rp_11(); break;
1917 case 12: V(0,(int *)) = ag_rp_12(); break;
1918 case 13: V(0,(pair<int> *)) = ag_rp_13(V(0,(int *)), V(1,(int *))); break;
1919 case 14: V(0,(int *)) = ag_rp_14(V(0,(int *)), V(1,(int *))); break;
1920 case 15: V(0,(int *)) = ag_rp_15(V(0,(int *))); break;
1921 case 16: V(0,(int *)) = ag_rp_16(V(0,(int *))); break;
1922 case 17: V(0,(int *)) = ag_rp_17(V(0,(int *)), V(1,(int *))); break;
1923 case 18: V(0,(number *)) = ag_rp_18(V(0,(number *)), V(2,(number *)), V(4,(number *))); break;
1924 case 19: V(0,(number *)) = ag_rp_19(V(0,(number *)), V(2,(number *))); break;
1925 case 20: V(0,(number *)) = ag_rp_20(V(0,(number *)), V(2,(number *))); break;
1926 case 21: V(0,(number *)) = ag_rp_21(V(1,(number *))); break;
1927 case 22: V(0,(number *)) = ag_rp_22(V(2,(number *))); break;
1928 case 23: V(0,(number *)) = ag_rp_23(V(0,(number *)), V(2,(number *))); break;
1929 case 24: V(0,(number *)) = ag_rp_24(V(0,(number *)), V(2,(number *))); break;
1930 case 25: V(0,(number *)) = ag_rp_25(V(0,(number *)), V(2,(number *))); break;
1931 case 26: V(0,(number *)) = ag_rp_26(V(0,(number *)), V(2,(number *))); break;
1932 case 27: V(0,(number *)) = ag_rp_27(V(0,(number *)), V(2,(number *))); break;
1933 case 28: V(0,(number *)) = ag_rp_28(V(0,(number *)), V(2,(number *))); break;
1934 case 29: V(0,(number *)) = ag_rp_29(V(0,(number *)), V(2,(number *))); break;
1935 case 30: V(0,(number *)) = ag_rp_30(V(0,(number *)), V(2,(number *))); break;
1936 case 31: V(0,(number *)) = ag_rp_31(V(0,(number *)), V(2,(number *))); break;
1937 case 32: V(0,(number *)) = ag_rp_32(V(0,(number *)), V(2,(number *))); break;
1938 case 33: V(0,(number *)) = ag_rp_33(V(0,(number *)), V(2,(number *))); break;
1939 case 34: V(0,(number *)) = ag_rp_34(V(0,(function_name *)), V(1,(number *))); break;
1940 case 35: V(0,(number *)) = ag_rp_35(V(0,(number *)), V(1,(function_name *)), V(2,(number *))); break;
1941 case 36: V(0,(number *)) = ag_rp_36(V(0,(number *)), V(2,(number *))); break;
1942 case 37: V(0,(number *)) = ag_rp_37(V(1,(number *))); break;
1943 case 38: V(0,(number *)) = ag_rp_38(V(0,(number *)), V(2,(number *))); break;
1944 case 39: V(0,(number *)) = ag_rp_39(V(0,(number *)), V(1,(number *))); break;
1945 case 40: V(0,(number *)) = ag_rp_40(V(0,(number *)), V(1,(number *))); break;
1946 case 41: V(0,(number *)) = ag_rp_41(V(0,(pair<int> *))); break;
1947 case 42: V(0,(number *)) = ag_rp_42(); break;
1948 case 43: V(0,(number *)) = ag_rp_43(V(1,(pair<int> *)), V(4,(pair<int> *))); break;
1949 case 44: V(0,(number *)) = ag_rp_44(V(0,(int *))); break;
1950 case 45: V(0,(number *)) = ag_rp_45(V(0,(char * *)), V(1,(char * *)), V(3,(int *)), V(5,(number *)), V(7,(number *)), V(9,(number *))); break;
1951 case 46: V(0,(char * *)) = ag_rp_46(); break;
1952 case 47: V(0,(char * *)) = ag_rp_47(); break;
1953 case 48: V(0,(number *)) = ag_rp_48(V(1,(number *))); break;
1954 case 49: V(0,(function_name *)) = ag_rp_49(); break;
1955 case 50: V(0,(function_name *)) = ag_rp_50(); break;
1956 case 51: V(0,(function_name *)) = ag_rp_51(); break;
1957 case 52: V(0,(function_name *)) = ag_rp_52(); break;
1958 case 53: V(0,(function_name *)) = ag_rp_53(); break;
1959 case 54: V(0,(function_name *)) = ag_rp_54(); break;
1960 case 55: V(0,(function_name *)) = ag_rp_55(); break;
1961 case 56: V(0,(function_name *)) = ag_rp_56(); break;
1962 case 57: V(0,(function_name *)) = ag_rp_57(); break;
1963 case 58: V(0,(function_name *)) = ag_rp_58(); break;
1964 case 59: V(0,(function_name *)) = ag_rp_59(); break;
1965 case 60: V(0,(function_name *)) = ag_rp_60(); break;
1966 case 61: V(0,(function_name *)) = ag_rp_61(); break;
1967 case 62: V(0,(function_name *)) = ag_rp_62(); break;
1968 case 63: V(0,(function_name *)) = ag_rp_63(); break;
1969 case 64: V(0,(function_name *)) = ag_rp_64(); break;
1970 case 65: V(0,(function_name *)) = ag_rp_65(); break;
1971 case 66: V(0,(function_name *)) = ag_rp_66(); break;
1972 case 67: V(0,(number *)) = ag_rp_67(V(0,(double *))); break;
1973 case 68: V(0,(number *)) = ag_rp_68(V(0,(double *)), V(2,(double *))); break;
1974 case 69: V(0,(number *)) = ag_rp_69(V(1,(double *))); break;
1975 case 70: V(0,(double *)) = ag_rp_70(V(0,(int *))); break;
1976 case 71: V(0,(double *)) = ag_rp_71(V(0,(double *)), V(1,(int *))); break;
1977 case 72: V(0,(double *)) = ag_rp_72(V(0,(int *))); break;
1978 case 73: V(0,(double *)) = ag_rp_73(V(0,(int *)), V(1,(double *))); break;
1979 }
1980 (PCB).la_ptr = (PCB).pointer;
1981 }
1982
1983 static int ag_action_1_r_proc(void);
1984 static int ag_action_2_r_proc(void);
1985 static int ag_action_3_r_proc(void);
1986 static int ag_action_4_r_proc(void);
1987 static int ag_action_1_s_proc(void);
1988 static int ag_action_3_s_proc(void);
1989 static int ag_action_1_proc(void);
1990 static int ag_action_2_proc(void);
1991 static int ag_action_3_proc(void);
1992 static int ag_action_4_proc(void);
1993 static int ag_action_5_proc(void);
1994 static int ag_action_6_proc(void);
1995 static int ag_action_7_proc(void);
1996 static int ag_action_8_proc(void);
1997 static int ag_action_9_proc(void);
1998 static int ag_action_10_proc(void);
1999 static int ag_action_11_proc(void);
2000 static int ag_action_8_proc(void);
2001
2002
2003 static int (*const ag_r_procs_scan[])(void) = {
2004 ag_action_1_r_proc,
2005 ag_action_2_r_proc,
2006 ag_action_3_r_proc,
2007 ag_action_4_r_proc
2008 };
2009
2010 static int (*const ag_s_procs_scan[])(void) = {
2011 ag_action_1_s_proc,
2012 ag_action_2_r_proc,
2013 ag_action_3_s_proc,
2014 ag_action_4_r_proc
2015 };
2016
2017 static int (*const ag_gt_procs_scan[])(void) = {
2018 ag_action_1_proc,
2019 ag_action_2_proc,
2020 ag_action_3_proc,
2021 ag_action_4_proc,
2022 ag_action_5_proc,
2023 ag_action_6_proc,
2024 ag_action_7_proc,
2025 ag_action_8_proc,
2026 ag_action_9_proc,
2027 ag_action_10_proc,
2028 ag_action_11_proc,
2029 ag_action_8_proc
2030 };
2031
2032
2033 static int ag_action_10_proc(void) {
2034 int ag_t = (PCB).token_number;
2035 ss-fp_nrc[(PCB).ag_ap]++;
2036 do {
2037 ss-fp_nrc[(PCB).ag_ap]++;
2038 (PCB).pointer = (PCB).la_ptr;
2039 (PCB).token_number = (ss-fp_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
2040 (PCB).la_ptr++;
2041 if (ag_key_index[(PCB).sn]) {
2042 unsigned ag_k = ag_key_index[(PCB).sn];
2043 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
2044 if (ag_ch <= 255) {
2045 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
2046 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
2047 }
2048 }
2049 } while ((PCB).token_number == (ss-fp_token_type) ag_t);
2050 (PCB).la_ptr = (PCB).pointer;
2051 return 1;
2052 }
2053
2054 static int ag_action_11_proc(void) {
2055 int ag_t = (PCB).token_number;
2056
2057 ss-fp_nrc[(PCB).ag_ap]++;
2058 do {
2059 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
2060 (PCB).ssx--;
2061 (PCB).pointer = (PCB).la_ptr;
2062 ag_ra();
2063 if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
2064 (PCB).ssx++;
2065 (PCB).token_number = (ss-fp_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
2066 (PCB).la_ptr++;
2067 if (ag_key_index[(PCB).sn]) {
2068 unsigned ag_k = ag_key_index[(PCB).sn];
2069 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
2070 if (ag_ch <= 255) {
2071 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
2072 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
2073 }
2074 }
2075 }
2076 while ((PCB).token_number == (ss-fp_token_type) ag_t);
2077 (PCB).la_ptr = (PCB).pointer;
2078 return 1;
2079 }
2080
2081 static int ag_action_3_r_proc(void) {
2082 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
2083 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2084 ss-fp_nrc[(PCB).ag_ap]++;
2085 (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
2086 ag_ra();
2087 return (PCB).exit_flag == AG_RUNNING_CODE;
2088 }
2089
2090 static int ag_action_3_s_proc(void) {
2091 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
2092 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2093 ss-fp_nrc[(PCB).ag_ap]++;
2094 (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
2095 ag_ra();
2096 return (PCB).exit_flag == AG_RUNNING_CODE;
2097 }
2098
2099 static int ag_action_4_r_proc(void) {
2100 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
2101 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2102 ss-fp_nrc[(PCB).ag_ap]++;
2103 (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
2104 return 1;
2105 }
2106
2107 static int ag_action_2_proc(void) {
2108 if ((PCB).ssx >= 128) {
2109 ag_trace_error();
2110 (PCB).exit_flag = AG_STACK_ERROR_CODE;
2111 PARSER_STACK_OVERFLOW;
2112 }
2113 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
2114 (PCB).ss[(PCB).ssx] = (PCB).sn;
2115 (PCB).ssx++;
2116 (PCB).sn = (PCB).ag_ap;
2117 (PCB).pointer = (PCB).la_ptr;
2118 return 0;
2119 }
2120
2121 static int ag_action_9_proc(void) {
2122 if ((PCB).ssx >= 128) {
2123 ag_trace_error();
2124 (PCB).exit_flag = AG_STACK_ERROR_CODE;
2125 PARSER_STACK_OVERFLOW;
2126 }
2127 (PCB).vs[(PCB).ssx] = ag_null_value;
2128 (PCB).ss[(PCB).ssx] = (PCB).sn;
2129 (PCB).ssx++;
2130 (PCB).sn = (PCB).ag_ap;
2131 (PCB).la_ptr = (PCB).pointer;
2132 return (PCB).exit_flag == AG_RUNNING_CODE;
2133 }
2134
2135 static int ag_action_2_r_proc(void) {
2136 (PCB).ssx++;
2137 (PCB).sn = (PCB).ag_ap;
2138 return 0;
2139 }
2140
2141 static int ag_action_7_proc(void) {
2142 --(PCB).ssx;
2143 (PCB).la_ptr = (PCB).pointer;
2144 ss-fp_nrc[0]++;
2145 (PCB).exit_flag = AG_SUCCESS_CODE;
2146 return 0;
2147 }
2148
2149 static int ag_action_1_proc(void) {
2150 (PCB).pointer = (PCB).la_ptr;
2151 ss-fp_nrc[0]++;
2152 (PCB).exit_flag = AG_SUCCESS_CODE;
2153 return 0;
2154 }
2155
2156 static int ag_action_1_r_proc(void) {
2157 ss-fp_nrc[0]++;
2158 (PCB).exit_flag = AG_SUCCESS_CODE;
2159 return 0;
2160 }
2161
2162 static int ag_action_1_s_proc(void) {
2163 ss-fp_nrc[0]++;
2164 (PCB).exit_flag = AG_SUCCESS_CODE;
2165 return 0;
2166 }
2167
2168 static int ag_action_4_proc(void) {
2169 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
2170 ss-fp_nrc[(PCB).ag_ap]++;
2171 (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
2172 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
2173 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2174 else (PCB).ss[(PCB).ssx] = (PCB).sn;
2175 (PCB).pointer = (PCB).la_ptr;
2176 while ((PCB).exit_flag == AG_RUNNING_CODE) {
2177 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
2178 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
2179 do {
2180 unsigned ag_tx = (ag_t1 + ag_t2)/2;
2181 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
2182 else ag_t2 = ag_tx;
2183 } while (ag_t1 < ag_t2);
2184 (PCB).ag_ap = ag_pstt[ag_t1];
2185 if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
2186 }
2187 return 0;
2188 }
2189
2190 static int ag_action_3_proc(void) {
2191 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
2192 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
2193 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2194 else (PCB).ss[(PCB).ssx] = (PCB).sn;
2195 (PCB).pointer = (PCB).la_ptr;
2196 ss-fp_nrc[(PCB).ag_ap]++;
2197 (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
2198 ag_ra();
2199 while ((PCB).exit_flag == AG_RUNNING_CODE) {
2200 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
2201 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
2202 do {
2203 unsigned ag_tx = (ag_t1 + ag_t2)/2;
2204 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
2205 else ag_t2 = ag_tx;
2206 } while (ag_t1 < ag_t2);
2207 (PCB).ag_ap = ag_pstt[ag_t1];
2208 if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
2209 }
2210 return 0;
2211 }
2212
2213 static int ag_action_8_proc(void) {
2214 ag_trace_error();
2215 (PCB).la_ptr = (PCB).pointer;
2216 (PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
2217 SYNTAX_ERROR;
2218 (PCB).la_ptr = ++(PCB).pointer;
2219 return (PCB).exit_flag == AG_RUNNING_CODE;
2220 }
2221
2222 static int ag_action_5_proc(void) {
2223 int ag_sd = ag_fl[(PCB).ag_ap];
2224 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2225 else {
2226 (PCB).ss[(PCB).ssx] = (PCB).sn;
2227 }
2228 (PCB).la_ptr = (PCB).pointer;
2229 ss-fp_nrc[(PCB).ag_ap]++;
2230 (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
2231 ag_ra();
2232 while ((PCB).exit_flag == AG_RUNNING_CODE) {
2233 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
2234 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
2235 do {
2236 unsigned ag_tx = (ag_t1 + ag_t2)/2;
2237 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
2238 else ag_t2 = ag_tx;
2239 } while (ag_t1 < ag_t2);
2240 (PCB).ag_ap = ag_pstt[ag_t1];
2241 if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
2242 }
2243 return (PCB).exit_flag == AG_RUNNING_CODE;
2244 }
2245
2246 static int ag_action_6_proc(void) {
2247 int ag_sd = ag_fl[(PCB).ag_ap];
2248 ss-fp_nrc[(PCB).ag_ap]++;
2249 (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
2250 if (ag_sd) {
2251 (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
2252 }
2253 else {
2254 if ((PCB).ssx >= 128) {
2255 ag_trace_error();
2256 (PCB).exit_flag = AG_STACK_ERROR_CODE;
2257 PARSER_STACK_OVERFLOW;
2258 }
2259 (PCB).vs[(PCB).ssx] = ag_null_value;
2260 (PCB).ss[(PCB).ssx] = (PCB).sn;
2261 }
2262 (PCB).la_ptr = (PCB).pointer;
2263 while ((PCB).exit_flag == AG_RUNNING_CODE) {
2264 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
2265 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
2266 do {
2267 unsigned ag_tx = (ag_t1 + ag_t2)/2;
2268 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
2269 else ag_t2 = ag_tx;
2270 } while (ag_t1 < ag_t2);
2271 (PCB).ag_ap = ag_pstt[ag_t1];
2272 if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
2273 }
2274 return (PCB).exit_flag == AG_RUNNING_CODE;
2275 }
2276
2277
2278 void init_ss-fp(void) {
2279 (PCB).la_ptr = (PCB).pointer;
2280 (PCB).error_message = "Syntax Error";
2281 (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
2282 (PCB).exit_flag = AG_RUNNING_CODE;
2283 }
2284
2285 void ss-fp(void) {
2286 init_ss-fp();
2287 (PCB).exit_flag = AG_RUNNING_CODE;
2288 while ((PCB).exit_flag == AG_RUNNING_CODE) {
2289 unsigned ag_t1 = ag_sbt[(PCB).sn];
2290 if (ag_tstt[ag_t1]) {
2291 unsigned ag_t2 = ag_sbe[(PCB).sn] - 1;
2292 (PCB).token_number = (ss-fp_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
2293 (PCB).la_ptr++;
2294 if (ag_key_index[(PCB).sn]) {
2295 unsigned ag_k = ag_key_index[(PCB).sn];
2296 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
2297 if (ag_ch <= 255) {
2298 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
2299 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
2300 }
2301 }
2302 do {
2303 unsigned ag_tx = (ag_t1 + ag_t2)/2;
2304 if (ag_tstt[ag_tx] > (unsigned char)(PCB).token_number)
2305 ag_t1 = ag_tx + 1;
2306 else ag_t2 = ag_tx;
2307 } while (ag_t1 < ag_t2);
2308 if (ag_tstt[ag_t1] != (unsigned char)(PCB).token_number)
2309 ag_t1 = ag_sbe[(PCB).sn];
2310 }
2311 (PCB).ag_ap = ag_pstt[ag_t1];
2312 (ag_gt_procs_scan[ag_astt[ag_t1]])();
2313 }
2314 }
2315
2316