diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/agcl/parsifal/good/ss-fp.cpp	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,2316 @@
+/*
+Copyright 1992, Jerome T. Holland
+See the file COPYING for license and usage terms.
+*/
+
+#include "ssd.h"
+#include "kb.h"
+#include "num.h"
+
+
+/*
+ * AnaGram, A System for Syntax Directed Programming
+ * File generated by: ...
+ *
+ * AnaGram Parsing Engine
+ * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+#ifndef SS-FP_H
+#include "ss-fp.h"
+#endif
+
+#ifndef SS-FP_H
+#error Mismatched header file
+#endif
+
+#include <stdio.h>
+
+#define RULE_CONTEXT (&((PCB).cs[(PCB).ssx]))
+#define ERROR_CONTEXT ((PCB).cs[(PCB).error_frame_ssx])
+#define CONTEXT ((PCB).cs[(PCB).ssx])
+
+
+
+/*  Line -, ss-fp.syn */
+fp_pcb_type *fp_pcb;
+#define PCB (*fp_pcb)
+
+
+#define CELL_NAME_REQUEST 255
+#define INPUT_LINE_REQUEST 254
+#define BLOCK_REQUEST 253
+
+#define SYNTAX_ERROR
+#define PARSER_STACK_OVERFLOW
+
+static int cell_refs;
+static int error_flag;
+
+static number bound_variable[26];
+static number xvalue;
+
+number num(double x) {
+  number n;
+  n.error = 0;
+  n.truth = 1;
+  n.v = x;
+  return n;
+}
+
+void init_bv(void) {
+  int i;
+  for (i = 0; i < 26; i++) bound_variable[i].error = 1;
+}
+
+double round(double x) {
+  long n = x+.5;
+  return n;
+}
+
+double trunc(double x) {
+  long n = x;
+  return n;
+}
+
+double sqr(double x) {
+  return x*x;
+}
+
+double pow10d(double x) {
+  long n = x;
+  return pow10d(n);
+}
+
+number cell_value(pair<int> loc) {
+  number x;
+  cell_pointer cp;
+  int save_ef = error_flag;
+
+  cell_refs++;
+  cp = ss[loc.row][loc.col];
+  if (cp == NULL) {
+    x.truth = 1;
+    x.v = 0;
+    return x;
+  }
+  if (cp->type == text) {
+    x.error = 1;
+    x.truth = 0;
+    return x;
+  }
+  if (cp->type == formula) {
+    if ((inserted_columns || inserted_rows));
+    else if (recalc_flag) {
+      if (cp->recalc == recalc_count) eval(cp);
+      if (cp->recalc & 1) circular_flag = 1;
+    }
+  }
+  x.error = cp->error;
+  x.truth = 1;
+  x.v = cp->value;
+  return x;
+}
+
+void eval(cell_pointer cp) {
+  fp_pcb_type pcb, *save_pcb = fp_pcb;
+
+  fp_pcb = &pcb;
+  cell_refs = 0;
+  PCB.pointer = (unsigned char *) &cp->text;
+  cp->recalc += recalc_flag;
+  error_flag = 0;
+  fp();
+  cp->recalc += recalc_flag;
+  if (PCB.exit_flag != 1) {cp->type = text; cp->error = 1; return;}
+  else if (cell_refs == 0) cp->type = value;
+  else cp->type = formula;
+  {
+    cp->error = xvalue.error;
+    cp->value = xvalue.v;
+  }
+  fp_pcb = save_pcb;
+}
+
+number evalx(char *xs) {
+  fp_pcb_type pcb, *save_pcb = fp_pcb;
+  number x;
+
+  fp_pcb = &pcb;
+  PCB.pointer = (unsigned char *) xs;
+  error_flag = 0;
+  fp();
+  fp_pcb = save_pcb;
+  return xvalue;
+}
+
+pair<int> id_cell(int row, int col) {
+  pair<int> goto_cell = {0,0};
+  if (row >= MAXROWS || col >= MAXCOLS) {
+    PCB.exit_flag = 5;
+    return goto_cell;
+  }
+  if (inserted_rows && row >= new_row) row += inserted_rows;
+  goto_cell.row = row;
+  goto_cell.col = col;
+  if (inserted_columns == 0 && inserted_rows == 0) return goto_cell;
+  sprintf((char *)icnptr,"%d",row+1);
+  icnptr += strlen((char *)icnptr);
+  icoptr = PCB.pointer;
+  return goto_cell;
+}
+
+int matherr(struct exception *e) {
+  error_flag++;
+  e->retval = 0;
+  return 1;
+}
+
+number apply(double(*f)(double), number n) {
+  number r;
+  if (n.error) return n;
+  error_flag = 0;
+  r.v = f(n.v);
+  r.error = error_flag != 0;
+  return r;
+}
+
+number pow(number x, number n) {
+  number r;
+  r.error = x.error || n.error;
+  if (r.error) return r;
+  r.v = pow(x.v, n.v);
+  return r;
+}
+
+void parse_block(void) {
+  int flag;
+  fp_pcb_type pcb;
+
+  fp_pcb = &pcb;
+  PCB.pointer = (unsigned char *) text_buffer;
+  text_buffer[0] = BLOCK_REQUEST;
+  fp();
+  flag = PCB.exit_flag != 1
+       || first_cell.row > last_cell.row
+       || first_cell.col > last_cell.col
+       || last_cell.row > MAXROWS
+       || last_cell.col > MAXCOLS;
+  if (flag) {
+    kb_pcb.reduction_token = kb_bad_block_token;
+    display_message(&bad_block_message);
+    set_cursor(text_cursor);
+  }
+  else _setcursortype(_NOCURSOR);
+}
+
+void parse_cell_name(void) {
+  int flag;
+  fp_pcb_type pcb;
+
+  fp_pcb = &pcb;
+  PCB.pointer = (unsigned char *) text_buffer;
+  text_buffer[0] = CELL_NAME_REQUEST;
+  fp();
+  flag = PCB.exit_flag != 1
+       || goto_cell.row > MAXROWS
+       || goto_cell.col > MAXCOLS;
+  if (flag) {
+    kb_pcb.reduction_token = kb_bad_cell_name_token;
+    display_message(&bad_cell_message);
+    set_cursor(text_cursor);
+  }
+  else _setcursortype(_NOCURSOR);
+}
+
+int rel_column_id(int a, int b) {
+  int cn = 26*a + b;
+  int nidc = a?2:1;
+  int n;
+  unsigned char case_bit = 0;
+  char *cp;
+
+  if (inserted_columns == 0 && inserted_rows == 0) return cn;
+  if (cn >= new_column) cn += inserted_columns;
+  n = (PCB.pointer - icoptr) - nidc;
+  memmove((char *)icnptr, (char *)icoptr, n);
+  icnptr += n;
+  cp = (char *)PCB.pointer;
+  while (nidc--) case_bit |= *--cp;
+  case_bit &= 0x20;
+  cp = column_label(cn,case_bit);
+  strcpy((char *)icnptr,cp);
+  icnptr += strlen(cp);
+  return cn;
+}
+
+void relabel_formula(cell_pointer cp) {
+  fp_pcb_type pcb, *save_pcb = fp_pcb;
+
+  fp_pcb = &pcb;
+  icoptr = PCB.pointer = (unsigned char *) &cp->text;
+  icnptr = (unsigned char *) relabel_buf;
+  fp();
+  assert(PCB.exit_flag == 1);
+  strcpy((char *)icnptr, (char *)icoptr);
+  cp = (cell_descriptor *) realloc(cp, sizeof(cell_descriptor) + strlen(relabel_buf));
+  assert(cp);
+  strcpy(cp->text, relabel_buf);
+  fp_pcb = save_pcb;
+}
+
+void scan_input_line(void) {
+  fp_pcb_type pcb, *save_pcb = fp_pcb;
+
+  fp_pcb = &pcb;
+  PCB.pointer = (unsigned char *) text_buffer;
+  text_buffer[0] = INPUT_LINE_REQUEST;
+  fp();
+  fp_pcb = save_pcb;
+}
+
+void set_column_width(void) {
+  int n;
+  char *tb = text_buffer + 1;
+  int flag;
+
+  highlight_off();
+  for (n = 0; *tb;) n = 10*n + *tb++ - '0';
+  flag = n < 3 || n > 75;
+  if (flag) {
+    kb_pcb.reduction_token = kb_column_width_request_token;
+    display_message(&bad_cw_message);
+    beep();
+    set_cursor(text_cursor);
+    return;
+  }
+  _setcursortype(_NOCURSOR);
+  if (ac.scc.col + n > 81) move_data_left();
+  cols[ac.ssc.col].width = n;
+  display_column_guide();
+  update_screen();
+  highlight_on();
+}
+
+
+void stuff_cell(pair<int> loc) {
+  char *tb = (char *) fp_pcb->pointer;
+  cell_pointer cp = (cell_descriptor *) realloc(
+    ss[loc.row][loc.col],
+    sizeof(cell_descriptor) + strlen(tb));
+
+  assert(cp);
+  if (loc.row > max_row) max_row = loc.row;
+  if (loc.col > max_col) max_col = loc.col;
+  strcpy(cp->text, tb);
+  ss[loc.row][loc.col] = cp;
+  cp->recalc = recalc_count;
+  eval(cp);
+}
+
+void stuff_format(format_code f,pair<int> first,pair<int> last){
+  int i,j;
+  for (i=first.row;i<=last.row;i++) for (j=first.col;j<=last.col;j++) {
+    fmt[i][j] = f;
+  }
+  if (last.row > fmt_max_row) fmt_max_row = last.row;
+  if (last.col > fmt_max_col) fmt_max_col = last.col;
+}
+
+number sum_cells(pair<int> first,pair<int> last){
+  pair<int> cp;
+  number sum;
+  sum.error = sum.truth = 1;
+  sum.v = 0;
+  for (cp.row = first.row; cp.row <= last.row; cp.row++)
+  for (cp.col = first.col; cp.col <= last.col; cp.col++) {
+    number cv = cell_value(cp);
+    if (cv.error) return sum;
+    sum.v += cv.v;
+  }
+  sum.error = 0;
+  return sum;
+}
+
+number summation(char *xb, char *xf, int bv, number f, number s, number l) {
+  number sum;
+  int k;
+  char *xs;
+  number delta;
+  int n;
+
+  sum.error = f.error + s.error + l.error;
+  sum.v = 0;
+  if (sum.error) return sum;
+  k = (int) (xf - xb);
+  xs = (char *) malloc(k+1);
+  memmove(xs,xb,k);
+  xs[k] = 0;
+  delta = s-f;
+  if (delta.v == 0) {
+    sum.error = 1;
+    return sum;
+  }
+  n = ((l-f+delta)/delta).v + .5;
+  while (n--) {
+    bound_variable[bv] = f;
+    sum = sum + evalx(xs);
+    if (sum.error) break;
+    f = f+delta;
+  }
+  bound_variable[bv].error = 1;
+  free(xs);
+  return sum;
+}
+
+
+
+#ifndef CONVERT_CASE
+
+static const char agCaseTable[31] = {
+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,    0,
+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
+};
+
+static int agConvertCase(int c) {
+  if (c >= 'a' && c <= 'z') return c ^= 0x20;
+  if (c >= 0xe0 && c < 0xff) c ^= agCaseTable[c-0xe0];
+  return c;
+}
+
+#define CONVERT_CASE(c) agConvertCase(c)
+
+#endif
+
+
+#ifndef TAB_SPACING
+#define TAB_SPACING 8
+#endif
+
+static void ag_rp_1(pair<int> cp) {
+/* Line -, ss-fp.syn */
+  goto_cell = cp;
+}
+
+static void ag_rp_2(number x) {
+/* Line -, ss-fp.syn */
+  xvalue = x;
+}
+
+static void ag_rp_3(pair<int> f, pair<int> l) {
+/* Line -, ss-fp.syn */
+  first_cell=f, last_cell = l;
+}
+
+static void ag_rp_4(pair<int> loc) {
+/* Line -, ss-fp.syn */
+  stuff_cell(loc);
+}
+
+static void ag_rp_5(pair<int> f, pair<int> l, format_code fmt) {
+/* Line -, ss-fp.syn */
+  stuff_format(fmt,f,l);
+}
+
+static format_code ag_rp_6(int a, int c, int n) {
+/* Line -, ss-fp.syn */
+   format_code f;
+   f.alignment = a;
+   f.conversion =c;
+   f.decimals = n;
+   f.flag = 0;
+   return f;
+
+}
+
+static int ag_rp_7(void) {
+/* Line -, ss-fp.syn */
+  return 0;
+}
+
+static int ag_rp_8(void) {
+/* Line -, ss-fp.syn */
+  return 1;
+}
+
+static int ag_rp_9(void) {
+/* Line -, ss-fp.syn */
+  return 2;
+}
+
+static int ag_rp_10(void) {
+/* Line -, ss-fp.syn */
+  return 0;
+}
+
+static int ag_rp_11(void) {
+/* Line -, ss-fp.syn */
+  return 1;
+}
+
+static int ag_rp_12(void) {
+/* Line -, ss-fp.syn */
+  return 2;
+}
+
+static pair<int> ag_rp_13(int col, int row) {
+/* Line -, ss-fp.syn */
+  return id_cell(row-1,col);
+}
+
+static int ag_rp_14(int a, int b) {
+/* Line -, ss-fp.syn */
+  return rel_column_id(a-'A'+1, b-'A');
+}
+
+static int ag_rp_15(int a) {
+/* Line -, ss-fp.syn */
+  return rel_column_id(0, a-'A');
+}
+
+static int ag_rp_16(int d) {
+/* Line -, ss-fp.syn */
+  return d-'0';
+}
+
+static int ag_rp_17(int n, int d) {
+/* Line -, ss-fp.syn */
+  return 10*n + d-'0';
+}
+
+static number ag_rp_18(number x, number c, number y) {
+/* Line -, ss-fp.syn */
+  number z;
+  switch (c.tv){
+  case 0:
+    z = y;
+    break;
+  case 1:
+    z = x;
+    break;
+  case 2:
+    z.error = 1;
+  }
+  return z;
+
+}
+
+static number ag_rp_19(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x||y;
+}
+
+static number ag_rp_20(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x&&y;
+}
+
+static number ag_rp_21(number x) {
+/* Line -, ss-fp.syn */
+  return x;
+}
+
+static number ag_rp_22(number x) {
+/* Line -, ss-fp.syn */
+  return !x;
+}
+
+static number ag_rp_23(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x<y;
+}
+
+static number ag_rp_24(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x>y;
+}
+
+static number ag_rp_25(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x<=y;
+}
+
+static number ag_rp_26(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x>=y;
+}
+
+static number ag_rp_27(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x==y;
+}
+
+static number ag_rp_28(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x!=y;
+}
+
+static number ag_rp_29(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x+y;
+}
+
+static number ag_rp_30(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x-y;
+}
+
+static number ag_rp_31(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x+y;
+}
+
+static number ag_rp_32(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x-y;
+}
+
+static number ag_rp_33(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x*y;
+}
+
+static number ag_rp_34(function_name f, number y) {
+/* Line -, ss-fp.syn */
+  return apply(f,y);
+}
+
+static number ag_rp_35(number x, function_name f, number y) {
+/* Line -, ss-fp.syn */
+  return x*apply(f,y);
+}
+
+static number ag_rp_36(number x, number n) {
+/* Line -, ss-fp.syn */
+  return pow(x,n);
+}
+
+static number ag_rp_37(number x) {
+/* Line -, ss-fp.syn */
+  return -x;
+}
+
+static number ag_rp_38(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x/y;
+}
+
+static number ag_rp_39(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x*y;
+}
+
+static number ag_rp_40(number x, number y) {
+/* Line -, ss-fp.syn */
+  return x*y;
+}
+
+static number ag_rp_41(pair<int> cp) {
+/* Line -, ss-fp.syn */
+  return cell_value(cp);
+}
+
+static number ag_rp_42(void) {
+/* Line -, ss-fp.syn */
+  return num(M_PI);
+}
+
+static number ag_rp_43(pair<int> first, pair<int> last) {
+/* Line -, ss-fp.syn */
+  return sum_cells(first,last);
+}
+
+static number ag_rp_44(int k) {
+/* Line -, ss-fp.syn */
+  return bound_variable[k-'A'];
+}
+
+static number ag_rp_45(char * xb, char * xf, int k, number f, number s, number l) {
+/* Line -, ss-fp.syn */
+  return summation(xb,xf,k-'A', f, s, l);
+}
+
+static char * ag_rp_46(void) {
+/* Line -, ss-fp.syn */
+  return (char *)PCB.pointer;
+}
+
+static char * ag_rp_47(void) {
+/* Line -, ss-fp.syn */
+  return (char *)PCB.pointer;
+}
+
+static number ag_rp_48(number x) {
+/* Line -, ss-fp.syn */
+  return x;
+}
+
+static function_name ag_rp_49(void) {
+/* Line -, ss-fp.syn */
+  return fabs;
+}
+
+static function_name ag_rp_50(void) {
+/* Line -, ss-fp.syn */
+  return acos;
+}
+
+static function_name ag_rp_51(void) {
+/* Line -, ss-fp.syn */
+  return asin;
+}
+
+static function_name ag_rp_52(void) {
+/* Line -, ss-fp.syn */
+  return atan;
+}
+
+static function_name ag_rp_53(void) {
+/* Line -, ss-fp.syn */
+  return cosh;
+}
+
+static function_name ag_rp_54(void) {
+/* Line -, ss-fp.syn */
+  return cos;
+}
+
+static function_name ag_rp_55(void) {
+/* Line -, ss-fp.syn */
+  return exp;
+}
+
+static function_name ag_rp_56(void) {
+/* Line -, ss-fp.syn */
+  return log10;
+}
+
+static function_name ag_rp_57(void) {
+/* Line -, ss-fp.syn */
+  return log;
+}
+
+static function_name ag_rp_58(void) {
+/* Line -, ss-fp.syn */
+  return pow10d;
+}
+
+static function_name ag_rp_59(void) {
+/* Line -, ss-fp.syn */
+  return round;
+}
+
+static function_name ag_rp_60(void) {
+/* Line -, ss-fp.syn */
+  return sinh;
+}
+
+static function_name ag_rp_61(void) {
+/* Line -, ss-fp.syn */
+  return sin;
+}
+
+static function_name ag_rp_62(void) {
+/* Line -, ss-fp.syn */
+  return sqr;
+}
+
+static function_name ag_rp_63(void) {
+/* Line -, ss-fp.syn */
+  return sqrt;
+}
+
+static function_name ag_rp_64(void) {
+/* Line -, ss-fp.syn */
+  return tanh;
+}
+
+static function_name ag_rp_65(void) {
+/* Line -, ss-fp.syn */
+  return tan;
+}
+
+static function_name ag_rp_66(void) {
+/* Line -, ss-fp.syn */
+  return trunc;
+}
+
+static number ag_rp_67(double x) {
+/* Line -, ss-fp.syn */
+  return num(x);
+}
+
+static number ag_rp_68(double x, double y) {
+/* Line -, ss-fp.syn */
+  return num(x+y);
+}
+
+static number ag_rp_69(double x) {
+/* Line -, ss-fp.syn */
+  return num(x);
+}
+
+static double ag_rp_70(int d) {
+/* Line -, ss-fp.syn */
+  return d-'0';
+}
+
+static double ag_rp_71(double n, int d) {
+/* Line -, ss-fp.syn */
+  return 10*n+d-'0';
+}
+
+static double ag_rp_72(int d) {
+/* Line -, ss-fp.syn */
+  return (d-'0')/10.;
+}
+
+static double ag_rp_73(int d, double f) {
+/* Line -, ss-fp.syn */
+  return (d-'0'+f)/10.;
+}
+
+
+#ifndef AG_TRACE_FILE_NAME
+#define AG_TRACE_FILE_NAME "ss-fp.etr"
+#endif
+
+static void ag_trace_error(void) {
+  FILE *ag_file = fopen(AG_TRACE_FILE_NAME, "w");
+  int i;
+  if (ag_file == NULL) return;
+  fprintf(ag_file, "%d\n", (PCB).ssx);
+  for (i = 0; i < (PCB).ssx; i++) fprintf(ag_file, "%d\n", (PCB).ss[i]);
+  fprintf(ag_file, "%d\n", (PCB).sn);
+  fprintf(ag_file, "%d\n", (PCB).token_number);
+  fclose(ag_file);
+}
+
+
+#define READ_COUNTS ss-fp_read_counts()
+#define WRITE_COUNTS ss-fp_write_counts()
+unsigned ss-fp_nrc[183];
+void ss-fp_read_counts(void) {
+  FILE *ag_file = fopen("ss-fp.nrc", "r");
+  int i;
+
+  if (ag_file) {
+    long ag_file_id;
+    fscanf(ag_file, "%ld", &ag_file_id);
+    if (ag_file_id == 0L) {
+      for (i = 0; i < 183; i++)
+        fscanf(ag_file,"%u", &(ss-fp_nrc[i]));
+      fclose(ag_file);
+      return;
+    }
+  }
+  for (i = 0; i < 183; i++) ss-fp_nrc[i] = 0;
+}
+
+void ss-fp_write_counts(void) {
+  FILE *ag_file = fopen("ss-fp.nrc", "w");
+  int i;
+
+  if (ag_file == NULL) return;
+  fprintf(ag_file, "%ld\n", 0L);
+  for (i = 0; i < 183; i++)
+    fprintf(ag_file,"%u\n", ss-fp_nrc[i]);
+  fclose(ag_file);
+}
+
+
+#undef V
+#define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i]))
+#undef VS
+#define VS(i) (PCB).vs[(PCB).ssx + i]
+
+#ifndef GET_CONTEXT
+#define GET_CONTEXT CONTEXT = (PCB).input_context
+#endif
+
+typedef enum {
+  ag_action_1,
+  ag_action_2,
+  ag_action_3,
+  ag_action_4,
+  ag_action_5,
+  ag_action_6,
+  ag_action_7,
+  ag_action_8,
+  ag_action_9,
+  ag_action_10,
+  ag_action_11,
+  ag_action_12
+} ag_parser_action;
+
+
+#ifndef NULL_VALUE_INITIALIZER
+#define NULL_VALUE_INITIALIZER = { 0 }
+#endif
+
+static ss-fp_vs_type const ag_null_value NULL_VALUE_INITIALIZER;
+
+static const unsigned char ag_rpx[] = {
+    0,  1,  0,  0,  0,  0,  0,  0,  2,  3,  4,  5,  0,  0,  0,  6,  7,  8,
+    9, 10, 11, 12, 13, 14, 15, 16, 17,  0, 18,  0, 19,  0, 20,  0, 21, 22,
+   23, 24, 25, 26, 27, 28,  0,  0,  0,  0, 29, 30,  0, 31, 32,  0, 33,  0,
+   34, 35,  0, 36, 37,  0, 38,  0, 39,  0,  0,  0, 40,  0, 41,  0, 42, 43,
+   44, 45, 46, 47,  0,  0,  0, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
+   59, 60, 61, 62, 63, 64, 65, 66,  0,  0, 67, 68, 69, 70, 71, 72, 73
+};
+
+static const unsigned char ag_key_itt[] = {
+ 0
+};
+
+static const unsigned short ag_key_pt[] = {
+0
+};
+
+static const unsigned char ag_key_ch[] = {
+    0, 66, 67, 83, 84,255, 72,255, 83,255, 79,255, 49,255, 71,255, 79,255,
+   72,255, 78,255, 84,255, 82,255, 73, 81,255, 72,255, 78,255, 65, 82,255,
+   65, 67, 69, 76, 80, 82, 83, 84,255, 66, 67, 83, 84,255, 72,255, 83,255,
+   79,255, 49,255, 71,255, 79,255, 72,255, 78,255, 84,255, 82,255, 73, 81,
+  255, 72,255, 78,255, 65, 82,255, 33, 46, 60, 61, 62, 65, 67, 69, 76, 80,
+   82, 83, 84,255, 33, 46, 60, 61, 62,255, 33, 60, 61, 62,255, 46,255
+};
+
+static const unsigned char ag_key_act[] = {
+  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,
+  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,
+  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,
+  3,4
+};
+
+static const unsigned char ag_key_parm[] = {
+    0,145,146,147,148,  0,149,  0,150,  0,  0,  0,152,  0,153,  0,  0,  0,
+  156,  0,157,  0,159,  0,158,  0,  0,  0,  0,160,  0,161,  0,  0,162,  0,
+    0,  0,151,  0,154,155,  0,  0,  0,145,146,147,148,  0,149,  0,150,  0,
+    0,  0,152,  0,153,  0,  0,  0,156,  0,157,  0,159,  0,158,  0,  0,  0,
+    0,160,  0,161,  0,  0,162,  0,137,143,134,136,135,  0,  0,151,  0,154,
+  155,  0,  0,  0,137,143,134,136,135,  0,137,134,136,135,  0,143,  0
+};
+
+static const unsigned char ag_key_jmp[] = {
+    0,  0,  2,  5,  8,  0,  0,  0,  6,  0,  8,  0, 14,  0, 12,  0, 14,  0,
+    0,  0, 18,  0,  0,  0, 22,  0, 20, 24,  0,  0,  0, 29,  0, 31, 26,  0,
+    1, 10, 11, 16, 16, 21, 26, 33,  0, 41, 43, 46, 49,  0,  0,  0, 50,  0,
+   52,  0, 55,  0, 56,  0, 58,  0,  0,  0, 62,  0,  0,  0, 66,  0, 64, 68,
+    0,  0,  0, 73,  0, 75, 67,  0, 30, 32, 35, 37, 39, 45, 54, 52, 60, 57,
+   62, 70, 77,  0, 71, 73, 76, 78, 80,  0, 82, 84, 86, 88,  0, 90,  0
+};
+
+static const unsigned char ag_key_index[] = {
+   36, 80, 36, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 36,  0, 80, 80,
+   36,  0,  0, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0, 36, 80, 80, 80, 80,  0,  0, 94, 36, 80,  0, 36, 94,  0,
+  100,  0,  0,  0,  0,  0,  0,  0, 80, 80, 80,  0,  0,  0,  0,  0,  0, 94,
+    0, 36, 36, 36, 36, 36, 36, 36, 36,  0, 36, 36,  0,  0,  0,  0,  0,  0,
+   80,  0,  0,  0, 94, 94,  0,100,  0, 36,100,  0,  0,  0,  0,  0, 36,  0,
+    0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,100,  0, 36, 36,
+   36, 36, 36, 36,  0,  0, 36,100,100,100,100,100,100,  0,  0,  0,  0, 36,
+   36,  0, 36, 36,  0,  0,105,  0, 36, 36,  0,  0,  0,  0,  0,  0,  0,  0,
+    0
+};
+
+static const unsigned char ag_key_ends[] = {
+83,0, 79,83,0, 73,78,0, 65,78,0, 88,80,0, 48,0, 79,87,49,48,0, 
+79,85,78,68,0, 85,78,67,0, 61,0, 46,46,0, 61,0, 61,0, 61,0, 
+83,0, 79,83,0, 73,78,0, 65,78,0, 88,80,0, 48,0, 79,87,49,48,0, 
+79,85,78,68,0, 85,78,67,0, 61,0, 46,46,0, 61,0, 61,0, 61,0, 
+61,0, 61,0, 61,0, 61,0, 46,46,0, 
+};
+
+#define AG_TCV(x) ag_tcv[(x)]
+
+static const unsigned char ag_tcv[] = {
+    5,  0,  0,  0,  0,  0,  0,  0,  0,  0,111,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,131,  0,  0,
+    0,  0,128,  0,130,129,140,138,119,139,116,114,164,125,125,125,125,125,
+  125,125,125,125,117,126,132,113,133,  0,115,120,165,163,118,165,123,124,
+  165,165,165,165,121,165,165,165,165,165,122,165,165,165,165,165,165,165,
+  165,  0,  0,  0,141,  0,  0,120,165,163,118,165,123,124,165,165,165,165,
+  121,165,165,165,165,165,122,165,165,165,165,165,165,165,165,  0,127,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,142,144,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,112,110,  0,  0,  0,  0,142,144,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,112,110,109
+};
+
+#ifndef SYNTAX_ERROR
+#define SYNTAX_ERROR fprintf(stderr,"%s\n", (PCB).error_message)
+#endif
+
+#ifndef PARSER_STACK_OVERFLOW
+#define PARSER_STACK_OVERFLOW {fprintf(stderr, \
+  "\nParser stack overflow\n");}
+#endif
+
+#ifndef REDUCTION_TOKEN_ERROR
+#define REDUCTION_TOKEN_ERROR {fprintf(stderr, \
+  "\nReduction token error\n");}
+#endif
+
+
+#ifndef INPUT_CODE
+#define INPUT_CODE(T) (T)
+#endif
+
+typedef enum
+  {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key,
+   ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words;
+
+static void ag_get_key_word(int ag_k) {
+  int ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
+  const  unsigned char *ag_p;
+  int ag_ch;
+  while (1) {
+    switch (ag_key_act[ag_k]) {
+    case ag_cf_end_key: {
+      const  unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
+      do {
+        if ((ag_ch = *sp++) == 0) {
+          int ag_k1 = ag_key_parm[ag_k];
+          int ag_k2 = ag_key_pt[ag_k1];
+          if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) goto ag_fail;
+          (PCB).token_number = (ss-fp_token_type) ag_key_pt[ag_k1 + 1];
+          return;
+        }
+      } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
+      goto ag_fail;
+    }
+    case ag_end_key: {
+      const  unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
+      do {
+        if ((ag_ch = *sp++) == 0) {
+          (PCB).token_number = (ss-fp_token_type) ag_key_parm[ag_k];
+          return;
+        }
+      } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
+    }
+    case ag_no_match_key:
+ag_fail:
+      (PCB).la_ptr = (PCB).pointer + ag_save;
+      return;
+    case ag_cf_set_key: {
+      int ag_k1 = ag_key_parm[ag_k];
+      int ag_k2 = ag_key_pt[ag_k1];
+      ag_k = ag_key_jmp[ag_k];
+      if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) break;
+      ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
+      (PCB).token_number = (ss-fp_token_type) ag_key_pt[ag_k1+1];
+      break;
+    }
+    case ag_set_key:
+      ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
+      (PCB).token_number = (ss-fp_token_type) ag_key_parm[ag_k];
+    case ag_jmp_key:
+      ag_k = ag_key_jmp[ag_k];
+      break;
+    case ag_accept_key:
+      (PCB).token_number = (ss-fp_token_type) ag_key_parm[ag_k];
+      return;
+    case ag_cf_accept_key: {
+      int ag_k1 = ag_key_parm[ag_k];
+      int ag_k2 = ag_key_pt[ag_k1];
+      if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)])
+        (PCB).la_ptr = (PCB).pointer + ag_save;
+      else (PCB).token_number = (ss-fp_token_type) ag_key_pt[ag_k1+1];
+      return;
+    }
+    }
+    ag_ch = CONVERT_CASE(*(PCB).la_ptr++);
+    ag_p = &ag_key_ch[ag_k];
+    if (ag_ch <= 255) while (*ag_p < ag_ch) ag_p++;
+    if (ag_ch > 255 || *ag_p != ag_ch) {
+      (PCB).la_ptr = (PCB).pointer + ag_save;
+      return;
+    }
+    ag_k = (int) (ag_p - ag_key_ch);
+  }
+}
+
+
+static const unsigned char ag_tstt[] = {
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,112,110,109,1,0,
+  107,108,
+1,0,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,112,110,109,0,2,
+  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,
+  66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,
+  93,94,95,96,97,98,99,100,104,105,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,
+  127,126,125,124,123,122,121,120,119,118,117,116,114,113,111,5,1,0,107,
+  108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,
+  127,126,125,124,123,122,121,120,119,118,117,116,114,113,111,5,1,0,107,
+  108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,
+  127,126,125,124,123,122,121,120,119,118,117,116,114,111,5,1,0,107,108,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
+  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
+  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
+  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
+  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
+  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
+  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
+  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
+  123,122,121,120,119,118,117,114,113,111,5,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,163,124,123,122,121,120,118,0,21,27,29,31,32,33,35,104,106,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,143,141,140,139,138,137,136,135,134,133,132,129,128,127,126,125,124,
+  123,122,121,120,119,118,117,114,111,5,0,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127,
+  126,124,123,122,121,120,119,118,117,114,111,5,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,8,19,21,27,
+  29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,
+  74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
+  100,104,105,106,
+125,0,28,36,
+164,125,0,36,102,105,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,
+  127,126,125,124,123,122,121,120,119,118,117,116,114,111,5,0,19,36,100,
+  101,105,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127,
+  126,124,123,122,121,120,119,118,117,114,111,5,0,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127,
+  126,124,123,122,121,120,119,118,117,114,111,5,0,
+162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,143,
+  141,140,139,138,137,136,135,134,133,132,129,128,127,126,119,117,114,111,
+  5,0,
+165,163,144,142,130,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,47,
+  70,72,74,75,76,77,80,104,106,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99,
+  100,104,105,106,
+141,0,68,
+114,0,17,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,0,
+  64,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99,
+  100,104,105,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,
+  75,76,77,78,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
+  100,104,105,106,
+140,0,62,
+165,163,124,123,122,121,120,118,1,0,107,108,
+139,138,117,0,22,58,59,
+165,163,124,123,122,121,120,118,115,1,0,107,108,
+165,163,124,123,122,121,120,118,1,0,107,108,
+165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
+111,5,0,9,10,11,12,
+165,163,124,123,122,121,120,118,115,0,4,7,16,21,27,29,31,32,33,34,35,104,
+  106,
+165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
+129,0,48,
+164,125,0,36,105,
+164,125,0,36,102,105,
+164,125,0,36,102,105,
+165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99,
+  100,104,105,106,
+165,164,163,144,142,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,144,142,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,31,
+  32,33,34,35,36,47,65,69,70,71,72,73,74,75,76,77,80,99,100,104,105,106,
+165,164,163,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,47,59,63,65,66,67,69,70,71,72,73,74,75,76,77,80,99,
+  100,104,105,106,
+139,138,0,58,59,
+117,0,22,
+116,0,19,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,47,59,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,80,
+  81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,105,
+  106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
+  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
+  105,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
+  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
+  105,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21,
+  27,29,31,32,33,34,35,36,38,39,40,42,44,46,47,49,50,57,59,60,61,63,64,65,
+  66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,
+  93,94,95,96,97,98,99,100,104,105,106,
+116,0,14,19,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,8,19,21,27,
+  29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,
+  74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
+  100,104,105,106,
+111,0,9,10,
+5,0,
+165,163,124,123,122,121,120,118,1,0,107,108,
+165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
+113,0,15,
+5,0,
+165,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,
+  145,144,143,142,141,140,139,138,137,136,135,134,133,132,130,129,128,127,
+  126,124,123,122,121,120,119,118,117,114,111,5,1,0,107,108,
+116,0,19,
+165,163,124,123,122,121,120,118,0,21,27,29,31,32,33,77,104,106,
+165,163,124,123,122,121,120,118,116,0,19,20,
+140,0,62,
+140,0,62,
+130,1,0,107,108,
+137,136,135,134,133,132,0,51,52,53,54,55,56,
+130,0,47,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,8,19,21,
+  27,29,31,32,33,34,35,36,38,39,40,42,44,46,47,49,50,57,59,60,61,63,64,65,
+  66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,
+  93,94,95,96,97,98,99,100,104,105,106,
+137,136,135,134,133,132,129,128,127,126,0,
+128,0,45,
+127,126,0,41,43,
+165,163,124,123,122,121,120,118,116,0,19,20,
+165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
+116,0,14,19,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+113,0,15,
+165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
+  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
+  105,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
+  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
+  105,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
+  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
+  105,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
+  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
+  105,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
+  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
+  105,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,39,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,
+  77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,
+  105,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21,
+  27,29,31,32,33,34,35,36,38,39,40,42,44,46,47,49,50,57,59,60,61,63,64,65,
+  66,67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,
+  93,94,95,96,97,98,99,100,104,105,106,
+137,136,135,134,133,132,129,0,
+129,127,0,43,48,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21,
+  27,29,31,32,33,34,35,36,38,39,44,46,47,49,50,57,59,60,61,63,64,65,66,67,
+  69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,
+  95,96,97,98,99,100,104,105,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,131,130,125,124,123,122,121,120,118,116,0,4,19,21,
+  27,29,31,32,33,34,35,36,38,39,42,44,46,47,49,50,57,59,60,61,63,64,65,66,
+  67,69,70,71,72,73,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,
+  94,95,96,97,98,99,100,104,105,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,8,19,21,27,
+  29,31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,
+  74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
+  100,104,105,106,
+5,0,
+165,163,124,123,122,121,120,118,0,4,21,27,29,31,32,33,34,35,104,106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,
+  75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
+  100,104,105,106,
+139,138,0,58,59,
+139,138,0,58,59,
+139,138,0,58,59,
+139,138,0,58,59,
+139,138,0,58,59,
+139,138,0,58,59,
+129,127,0,43,48,
+128,0,45,
+114,0,17,
+119,0,24,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,
+  80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,105,
+  106,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,47,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,
+  80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,104,105,
+  106,
+120,0,18,21,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,
+  75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
+  100,104,105,106,
+117,0,22,
+5,0,
+143,0,79,
+163,122,121,0,23,29,31,104,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,1,0,107,108,
+165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,
+  146,145,144,142,139,130,125,124,123,122,121,120,118,116,0,4,19,21,27,29,
+  31,32,33,34,35,36,38,39,47,57,59,60,61,63,64,65,66,67,69,70,71,72,73,74,
+  75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
+  100,104,105,106,
+119,0,24,
+163,0,104,
+117,0,22,
+163,124,123,0,26,32,33,104,
+119,0,24,
+118,0,27,
+117,0,22,
+125,0,28,36,
+164,125,0,36,105,
+
+};
+
+
+static unsigned const char ag_astt[5069] = {
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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
+};
+
+
+static const unsigned char ag_pstt[] = {
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,
+  0,1,2,
+123,125,
+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,
+  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,
+  103,27,54,18,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,
+  80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,3,1,
+  142,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,4,1,
+  181,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,5,1,133,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,122,6,1,139,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,122,7,1,138,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,122,8,1,141,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,122,9,1,140,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,122,10,1,135,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,122,11,1,180,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,122,12,1,182,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,122,13,1,137,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,14,1,
+  147,
+12,11,8,9,6,7,13,10,24,107,107,107,107,107,107,23,107,107,
+107,107,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+  108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,107,107,
+  107,107,107,107,108,107,108,108,108,108,16,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,122,17,1,159,
+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,
+  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,
+  52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
+  87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+3,19,62,25,
+4,3,20,63,102,63,
+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,
+  98,98,98,98,98,98,98,98,98,98,98,98,98,98,3,98,98,98,98,98,98,98,98,5,
+  98,98,98,21,109,104,64,100,104,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,22,1,179,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,23,1,178,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,24,1,177,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,25,1,176,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,26,1,175,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,27,1,174,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,28,1,173,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,29,1,172,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,30,1,171,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,31,1,170,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,32,1,169,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,33,1,168,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,34,1,167,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,35,1,166,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,36,1,165,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,37,1,164,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,38,1,163,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,39,1,162,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,40,1,156,
+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,
+  65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,
+  41,
+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,
+  64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
+  42,
+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,
+  63,63,63,63,63,63,63,63,63,63,63,63,63,43,
+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,
+  65,72,74,16,16,
+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,
+  18,45,58,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16,
+66,46,67,
+68,56,69,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,48,1,161,
+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,
+  85,86,87,88,89,90,91,92,93,94,95,96,97,
+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,
+  18,45,54,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16,
+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,
+  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,
+  51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,72,74,80,81,82,83,84,85,86,
+  87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+74,48,75,
+124,124,124,124,124,124,124,124,122,53,1,129,
+40,77,79,44,80,78,76,
+124,124,124,124,124,124,124,124,124,122,55,1,127,
+124,124,124,124,124,124,124,124,122,56,1,126,
+12,11,8,9,6,7,13,10,57,81,107,107,107,107,107,107,19,15,107,107,
+82,6,58,83,4,84,85,
+12,11,8,9,6,7,13,10,86,59,88,2,87,107,107,107,107,107,107,19,15,107,107,
+12,11,8,9,6,7,13,10,60,89,107,107,107,107,107,107,19,15,107,107,
+90,61,79,
+4,3,22,26,26,
+4,3,105,63,106,63,
+4,3,99,63,101,63,
+12,11,8,9,6,7,13,10,65,91,107,107,107,107,107,107,19,15,107,107,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,66,1,158,
+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,
+  18,45,57,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,68,1,131,
+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,
+  60,44,63,64,65,67,69,70,65,72,74,21,20,16,103,16,
+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,
+  18,45,55,59,47,46,44,43,42,41,67,69,70,65,72,74,21,20,16,103,16,
+40,77,44,78,76,
+79,72,92,
+5,68,93,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,74,1,157,
+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,
+  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,
+  47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,89,90,91,
+  92,93,94,95,96,97,21,20,16,103,16,
+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,
+  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,
+  50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,87,88,89,
+  90,91,92,93,94,95,96,97,21,20,16,103,16,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,77,1,155,
+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,
+  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,
+  50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,87,88,89,
+  90,91,92,93,94,95,96,97,21,20,16,103,16,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,79,1,
+  134,
+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,
+  14,3,8,9,6,7,13,10,5,80,68,109,16,16,16,16,16,16,19,15,103,42,71,102,
+  101,31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,
+  72,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,
+  103,16,
+5,81,104,103,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,82,1,128,
+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,
+  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,
+  52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
+  87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+82,7,83,5,
+8,85,
+124,124,124,124,124,124,124,124,122,86,1,132,
+12,11,8,9,6,7,13,10,87,105,107,107,107,107,107,107,19,15,107,107,
+106,88,10,
+1,89,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,122,90,1,146,
+5,91,93,
+12,11,8,9,6,7,13,10,92,108,108,108,108,108,108,107,108,108,
+12,12,12,12,12,12,12,12,5,93,13,108,
+74,50,75,
+74,49,75,
+124,122,96,1,148,
+109,111,113,115,117,119,97,120,118,116,114,112,110,
+14,98,121,
+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,
+  14,3,8,9,6,7,13,10,5,99,68,61,109,16,16,16,16,16,16,19,15,103,122,54,
+  123,101,31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,
+  51,72,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,
+  103,16,
+43,43,43,43,43,43,33,33,33,33,100,
+124,29,125,
+126,128,102,129,127,
+12,12,12,12,12,12,12,12,5,103,13,14,
+12,11,8,9,6,7,13,10,104,130,107,107,107,107,107,107,19,15,107,107,
+5,105,131,103,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,106,1,130,
+106,107,132,
+12,11,8,9,6,7,13,10,108,71,107,107,107,107,107,107,19,15,107,107,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,109,1,154,
+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,
+  8,9,6,7,13,10,5,110,68,109,16,16,16,16,16,16,19,15,103,133,18,45,52,51,
+  53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
+  89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,111,1,153,
+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,
+  8,9,6,7,13,10,5,112,68,109,16,16,16,16,16,16,19,15,103,134,18,45,52,51,
+  53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
+  89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,113,1,152,
+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,
+  8,9,6,7,13,10,5,114,68,109,16,16,16,16,16,16,19,15,103,135,18,45,52,51,
+  53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
+  89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,115,1,151,
+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,
+  8,9,6,7,13,10,5,116,68,109,16,16,16,16,16,16,19,15,103,136,18,45,52,51,
+  53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
+  89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,117,1,150,
+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,
+  8,9,6,7,13,10,5,118,68,109,16,16,16,16,16,16,19,15,103,137,18,45,52,51,
+  53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
+  89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,119,1,149,
+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,
+  8,9,6,7,13,10,5,120,68,109,16,16,16,16,16,16,19,15,103,138,18,45,52,51,
+  53,50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,
+  89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+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,
+  14,3,8,9,6,7,13,10,5,121,68,109,16,16,16,16,16,16,19,15,103,42,71,139,
+  101,31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,
+  72,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,
+  103,16,
+42,42,42,42,42,42,27,122,
+90,126,123,127,34,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,124,1,
+  145,
+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,
+  14,3,8,9,6,7,13,10,5,125,68,109,16,16,16,16,16,16,19,15,103,42,71,32,
+  100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,
+  80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,126,1,
+  144,
+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,
+  14,3,8,9,6,7,13,10,5,127,68,109,16,16,16,16,16,16,19,15,103,42,71,140,
+  31,100,99,98,97,45,45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,
+  74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,
+  16,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,128,1,143,
+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,
+  8,9,6,7,13,10,5,129,68,28,109,16,16,16,16,16,16,19,15,103,27,54,18,45,
+  45,52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,
+  86,87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+9,130,
+12,11,8,9,6,7,13,10,131,141,107,107,107,107,107,107,19,15,107,107,
+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,
+  8,9,6,7,13,10,5,132,68,109,16,16,16,16,16,16,19,15,103,142,71,18,45,45,
+  52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
+  87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+40,77,41,144,143,
+40,77,40,144,143,
+40,77,39,144,143,
+40,77,38,144,143,
+40,77,37,144,143,
+40,77,36,144,143,
+90,126,139,127,35,
+124,30,125,
+68,141,145,
+146,142,147,
+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,
+  8,9,6,7,13,10,5,143,68,109,16,16,16,16,16,16,19,15,103,18,45,94,51,53,
+  50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,89,
+  90,91,92,93,94,95,96,97,21,20,16,103,16,
+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,
+  8,9,6,7,13,10,5,144,68,109,16,16,16,16,16,16,19,15,103,18,45,95,51,53,
+  50,49,47,46,44,43,42,41,67,69,70,65,72,74,80,81,82,83,84,85,86,87,88,89,
+  90,91,92,93,94,95,96,97,21,20,16,103,16,
+13,145,149,148,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,146,1,136,
+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,
+  8,9,6,7,13,10,5,147,68,109,16,16,16,16,16,16,19,15,103,150,71,18,45,45,
+  52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
+  87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+79,148,151,
+11,149,
+152,150,153,
+11,6,7,151,154,16,18,17,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+  124,124,124,124,124,124,124,124,124,124,124,124,124,124,122,152,1,160,
+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,
+  8,9,6,7,13,10,5,153,68,109,16,16,16,16,16,16,19,15,103,73,71,18,45,45,
+  52,51,53,50,49,47,46,44,43,42,41,67,69,70,51,72,74,80,81,82,83,84,85,86,
+  87,88,89,90,91,92,93,94,95,96,97,21,20,16,103,16,
+146,154,155,
+11,155,156,
+79,156,157,
+11,8,9,157,158,20,21,19,
+146,158,159,
+10,159,160,
+79,160,161,
+3,161,162,25,
+4,3,15,26,26,
+
+};
+
+
+static const unsigned short ag_sbt[] = {
+     0,  40,  42, 140, 197, 254, 310, 362, 414, 466, 518, 570, 622, 674,
+   726, 764, 782, 830, 883, 974, 978, 984,1042,1061,1080,1099,1118,1137,
+  1156,1175,1194,1213,1232,1251,1270,1289,1308,1327,1346,1365,1384,1421,
+  1471,1521,1560,1591,1639,1642,1645,1682,1720,1768,1859,1862,1874,1881,
+  1894,1906,1926,1933,1956,1976,1979,1984,1990,1996,2016,2035,2083,2101,
+  2144,2192,2197,2200,2203,2240,2326,2414,2451,2539,2577,2674,2678,2715,
+  2806,2810,2812,2824,2844,2847,2849,2902,2905,2923,2935,2938,2941,2946,
+  2959,2962,3060,3071,3074,3079,3091,3111,3115,3152,3155,3175,3212,3300,
+  3337,3425,3462,3550,3587,3675,3712,3800,3837,3925,4022,4030,4035,4073,
+  4168,4206,4302,4339,4430,4432,4452,4542,4547,4552,4557,4562,4567,4572,
+  4577,4580,4583,4586,4673,4760,4764,4801,4891,4894,4896,4899,4907,4944,
+  5034,5037,5040,5043,5051,5054,5057,5060,5064,5069
+};
+
+
+static const unsigned short ag_sbe[] = {
+    37,  41,  78, 194, 251, 307, 359, 411, 463, 515, 567, 619, 671, 723,
+   761, 772, 829, 880, 916, 975, 980,1036,1058,1077,1096,1115,1134,1153,
+  1172,1191,1210,1229,1248,1267,1286,1305,1324,1343,1362,1381,1418,1470,
+  1520,1559,1571,1606,1640,1643,1679,1700,1735,1801,1860,1871,1877,1891,
+  1903,1914,1928,1942,1964,1977,1981,1986,1992,2004,2032,2050,2098,2115,
+  2159,2194,2198,2201,2237,2273,2359,2448,2484,2574,2611,2675,2712,2748,
+  2807,2811,2821,2832,2845,2848,2899,2903,2913,2932,2936,2939,2943,2952,
+  2960,2996,3070,3072,3076,3088,3099,3112,3149,3153,3163,3209,3245,3334,
+  3370,3459,3495,3584,3620,3709,3745,3834,3870,3959,4029,4032,4070,4107,
+  4203,4240,4336,4372,4431,4440,4485,4544,4549,4554,4559,4564,4569,4574,
+  4578,4581,4584,4619,4706,4761,4798,4834,4892,4895,4897,4902,4941,4977,
+  5035,5038,5041,5046,5052,5055,5058,5061,5066,5069
+};
+
+
+static const unsigned char ag_fl[] = {
+  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,
+  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,
+  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,
+  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,
+  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,
+  2,2,2,2,2,2,2,2
+};
+
+static const unsigned char ag_ptt[] = {
+    0,  2,  2, 10, 11, 11, 12, 12,  2,  2,  7,  7, 20, 20, 14, 18, 23, 23,
+   23, 26, 26, 26,  4, 34, 34, 28, 28,  8,  8, 40, 40, 42, 42, 44, 44, 44,
+   46, 46, 46, 46, 46, 46, 50, 50, 38, 38, 38, 38, 39, 39, 39, 60, 60, 61,
+   61, 61, 63, 63, 63, 66, 66, 65, 65, 65, 69, 69, 69, 71, 72, 72, 72, 72,
+   70, 57, 76, 78, 67, 67, 67, 74, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+   64, 64, 64, 64, 64, 64, 64, 64,101,101, 73, 73, 73, 99, 99,102,102, 35,
+   77,100, 25, 30, 37, 37,103,103,103,103,103,103,103,103,107,107,108,108,
+    3,  6,  9, 13, 15, 17, 16, 19, 22, 27, 24, 21, 29, 31, 32, 33, 36, 41,
+   43, 45, 48, 47, 49, 51, 52, 53, 54, 55, 56, 58, 59, 62, 68, 75, 79, 80,
+   81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+  104,105,106
+};
+
+
+static void ag_ra(void)
+{
+  switch(ag_rpx[(PCB).ag_ap]) {
+    case 1: ag_rp_1(V(1,(pair<int> *))); break;
+    case 2: ag_rp_2(V(0,(number *))); break;
+    case 3: ag_rp_3(V(1,(pair<int> *)), V(3,(pair<int> *))); break;
+    case 4: ag_rp_4(V(0,(pair<int> *))); break;
+    case 5: ag_rp_5(V(1,(pair<int> *)), V(3,(pair<int> *)), V(5,(format_code *))); break;
+    case 6: V(0,(format_code *)) = ag_rp_6(V(2,(int *)), V(6,(int *)), V(10,(int *))); break;
+    case 7: V(0,(int *)) = ag_rp_7(); break;
+    case 8: V(0,(int *)) = ag_rp_8(); break;
+    case 9: V(0,(int *)) = ag_rp_9(); break;
+    case 10: V(0,(int *)) = ag_rp_10(); break;
+    case 11: V(0,(int *)) = ag_rp_11(); break;
+    case 12: V(0,(int *)) = ag_rp_12(); break;
+    case 13: V(0,(pair<int> *)) = ag_rp_13(V(0,(int *)), V(1,(int *))); break;
+    case 14: V(0,(int *)) = ag_rp_14(V(0,(int *)), V(1,(int *))); break;
+    case 15: V(0,(int *)) = ag_rp_15(V(0,(int *))); break;
+    case 16: V(0,(int *)) = ag_rp_16(V(0,(int *))); break;
+    case 17: V(0,(int *)) = ag_rp_17(V(0,(int *)), V(1,(int *))); break;
+    case 18: V(0,(number *)) = ag_rp_18(V(0,(number *)), V(2,(number *)), V(4,(number *))); break;
+    case 19: V(0,(number *)) = ag_rp_19(V(0,(number *)), V(2,(number *))); break;
+    case 20: V(0,(number *)) = ag_rp_20(V(0,(number *)), V(2,(number *))); break;
+    case 21: V(0,(number *)) = ag_rp_21(V(1,(number *))); break;
+    case 22: V(0,(number *)) = ag_rp_22(V(2,(number *))); break;
+    case 23: V(0,(number *)) = ag_rp_23(V(0,(number *)), V(2,(number *))); break;
+    case 24: V(0,(number *)) = ag_rp_24(V(0,(number *)), V(2,(number *))); break;
+    case 25: V(0,(number *)) = ag_rp_25(V(0,(number *)), V(2,(number *))); break;
+    case 26: V(0,(number *)) = ag_rp_26(V(0,(number *)), V(2,(number *))); break;
+    case 27: V(0,(number *)) = ag_rp_27(V(0,(number *)), V(2,(number *))); break;
+    case 28: V(0,(number *)) = ag_rp_28(V(0,(number *)), V(2,(number *))); break;
+    case 29: V(0,(number *)) = ag_rp_29(V(0,(number *)), V(2,(number *))); break;
+    case 30: V(0,(number *)) = ag_rp_30(V(0,(number *)), V(2,(number *))); break;
+    case 31: V(0,(number *)) = ag_rp_31(V(0,(number *)), V(2,(number *))); break;
+    case 32: V(0,(number *)) = ag_rp_32(V(0,(number *)), V(2,(number *))); break;
+    case 33: V(0,(number *)) = ag_rp_33(V(0,(number *)), V(2,(number *))); break;
+    case 34: V(0,(number *)) = ag_rp_34(V(0,(function_name *)), V(1,(number *))); break;
+    case 35: V(0,(number *)) = ag_rp_35(V(0,(number *)), V(1,(function_name *)), V(2,(number *))); break;
+    case 36: V(0,(number *)) = ag_rp_36(V(0,(number *)), V(2,(number *))); break;
+    case 37: V(0,(number *)) = ag_rp_37(V(1,(number *))); break;
+    case 38: V(0,(number *)) = ag_rp_38(V(0,(number *)), V(2,(number *))); break;
+    case 39: V(0,(number *)) = ag_rp_39(V(0,(number *)), V(1,(number *))); break;
+    case 40: V(0,(number *)) = ag_rp_40(V(0,(number *)), V(1,(number *))); break;
+    case 41: V(0,(number *)) = ag_rp_41(V(0,(pair<int> *))); break;
+    case 42: V(0,(number *)) = ag_rp_42(); break;
+    case 43: V(0,(number *)) = ag_rp_43(V(1,(pair<int> *)), V(4,(pair<int> *))); break;
+    case 44: V(0,(number *)) = ag_rp_44(V(0,(int *))); break;
+    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;
+    case 46: V(0,(char * *)) = ag_rp_46(); break;
+    case 47: V(0,(char * *)) = ag_rp_47(); break;
+    case 48: V(0,(number *)) = ag_rp_48(V(1,(number *))); break;
+    case 49: V(0,(function_name *)) = ag_rp_49(); break;
+    case 50: V(0,(function_name *)) = ag_rp_50(); break;
+    case 51: V(0,(function_name *)) = ag_rp_51(); break;
+    case 52: V(0,(function_name *)) = ag_rp_52(); break;
+    case 53: V(0,(function_name *)) = ag_rp_53(); break;
+    case 54: V(0,(function_name *)) = ag_rp_54(); break;
+    case 55: V(0,(function_name *)) = ag_rp_55(); break;
+    case 56: V(0,(function_name *)) = ag_rp_56(); break;
+    case 57: V(0,(function_name *)) = ag_rp_57(); break;
+    case 58: V(0,(function_name *)) = ag_rp_58(); break;
+    case 59: V(0,(function_name *)) = ag_rp_59(); break;
+    case 60: V(0,(function_name *)) = ag_rp_60(); break;
+    case 61: V(0,(function_name *)) = ag_rp_61(); break;
+    case 62: V(0,(function_name *)) = ag_rp_62(); break;
+    case 63: V(0,(function_name *)) = ag_rp_63(); break;
+    case 64: V(0,(function_name *)) = ag_rp_64(); break;
+    case 65: V(0,(function_name *)) = ag_rp_65(); break;
+    case 66: V(0,(function_name *)) = ag_rp_66(); break;
+    case 67: V(0,(number *)) = ag_rp_67(V(0,(double *))); break;
+    case 68: V(0,(number *)) = ag_rp_68(V(0,(double *)), V(2,(double *))); break;
+    case 69: V(0,(number *)) = ag_rp_69(V(1,(double *))); break;
+    case 70: V(0,(double *)) = ag_rp_70(V(0,(int *))); break;
+    case 71: V(0,(double *)) = ag_rp_71(V(0,(double *)), V(1,(int *))); break;
+    case 72: V(0,(double *)) = ag_rp_72(V(0,(int *))); break;
+    case 73: V(0,(double *)) = ag_rp_73(V(0,(int *)), V(1,(double *))); break;
+  }
+  (PCB).la_ptr = (PCB).pointer;
+}
+
+static int ag_action_1_r_proc(void);
+static int ag_action_2_r_proc(void);
+static int ag_action_3_r_proc(void);
+static int ag_action_4_r_proc(void);
+static int ag_action_1_s_proc(void);
+static int ag_action_3_s_proc(void);
+static int ag_action_1_proc(void);
+static int ag_action_2_proc(void);
+static int ag_action_3_proc(void);
+static int ag_action_4_proc(void);
+static int ag_action_5_proc(void);
+static int ag_action_6_proc(void);
+static int ag_action_7_proc(void);
+static int ag_action_8_proc(void);
+static int ag_action_9_proc(void);
+static int ag_action_10_proc(void);
+static int ag_action_11_proc(void);
+static int ag_action_8_proc(void);
+
+
+static int (*const  ag_r_procs_scan[])(void) = {
+  ag_action_1_r_proc,
+  ag_action_2_r_proc,
+  ag_action_3_r_proc,
+  ag_action_4_r_proc
+};
+
+static int (*const  ag_s_procs_scan[])(void) = {
+  ag_action_1_s_proc,
+  ag_action_2_r_proc,
+  ag_action_3_s_proc,
+  ag_action_4_r_proc
+};
+
+static int (*const  ag_gt_procs_scan[])(void) = {
+  ag_action_1_proc,
+  ag_action_2_proc,
+  ag_action_3_proc,
+  ag_action_4_proc,
+  ag_action_5_proc,
+  ag_action_6_proc,
+  ag_action_7_proc,
+  ag_action_8_proc,
+  ag_action_9_proc,
+  ag_action_10_proc,
+  ag_action_11_proc,
+  ag_action_8_proc
+};
+
+
+static int ag_action_10_proc(void) {
+  int ag_t = (PCB).token_number;
+  ss-fp_nrc[(PCB).ag_ap]++;
+  do {
+    ss-fp_nrc[(PCB).ag_ap]++;
+    (PCB).pointer = (PCB).la_ptr;
+    (PCB).token_number = (ss-fp_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
+    (PCB).la_ptr++;
+    if (ag_key_index[(PCB).sn]) {
+      unsigned ag_k = ag_key_index[(PCB).sn];
+      int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
+      if (ag_ch <= 255) {
+        while (ag_key_ch[ag_k] < ag_ch) ag_k++;
+        if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
+      }
+    }
+  } while ((PCB).token_number == (ss-fp_token_type) ag_t);
+  (PCB).la_ptr =  (PCB).pointer;
+  return 1;
+}
+
+static int ag_action_11_proc(void) {
+  int ag_t = (PCB).token_number;
+
+  ss-fp_nrc[(PCB).ag_ap]++;
+  do {
+    (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
+    (PCB).ssx--;
+    (PCB).pointer = (PCB).la_ptr;
+    ag_ra();
+    if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
+    (PCB).ssx++;
+    (PCB).token_number = (ss-fp_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
+    (PCB).la_ptr++;
+    if (ag_key_index[(PCB).sn]) {
+      unsigned ag_k = ag_key_index[(PCB).sn];
+      int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
+      if (ag_ch <= 255) {
+        while (ag_key_ch[ag_k] < ag_ch) ag_k++;
+        if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
+      }
+    }
+  }
+  while ((PCB).token_number == (ss-fp_token_type) ag_t);
+  (PCB).la_ptr =  (PCB).pointer;
+  return 1;
+}
+
+static int ag_action_3_r_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  ss-fp_nrc[(PCB).ag_ap]++;
+  (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
+  ag_ra();
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_3_s_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  ss-fp_nrc[(PCB).ag_ap]++;
+  (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
+  ag_ra();
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_4_r_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  ss-fp_nrc[(PCB).ag_ap]++;
+  (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
+  return 1;
+}
+
+static int ag_action_2_proc(void) {
+  if ((PCB).ssx >= 128) {
+    ag_trace_error();
+    (PCB).exit_flag = AG_STACK_ERROR_CODE;
+    PARSER_STACK_OVERFLOW;
+  }
+  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  (PCB).ssx++;
+  (PCB).sn = (PCB).ag_ap;
+  (PCB).pointer = (PCB).la_ptr;
+  return 0;
+}
+
+static int ag_action_9_proc(void) {
+  if ((PCB).ssx >= 128) {
+    ag_trace_error();
+    (PCB).exit_flag = AG_STACK_ERROR_CODE;
+    PARSER_STACK_OVERFLOW;
+  }
+  (PCB).vs[(PCB).ssx] = ag_null_value;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  (PCB).ssx++;
+  (PCB).sn = (PCB).ag_ap;
+  (PCB).la_ptr =  (PCB).pointer;
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_2_r_proc(void) {
+  (PCB).ssx++;
+  (PCB).sn = (PCB).ag_ap;
+  return 0;
+}
+
+static int ag_action_7_proc(void) {
+  --(PCB).ssx;
+  (PCB).la_ptr =  (PCB).pointer;
+  ss-fp_nrc[0]++;
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  return 0;
+}
+
+static int ag_action_1_proc(void) {
+  (PCB).pointer = (PCB).la_ptr;
+  ss-fp_nrc[0]++;
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  return 0;
+}
+
+static int ag_action_1_r_proc(void) {
+  ss-fp_nrc[0]++;
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  return 0;
+}
+
+static int ag_action_1_s_proc(void) {
+  ss-fp_nrc[0]++;
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  return 0;
+}
+
+static int ag_action_4_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  ss-fp_nrc[(PCB).ag_ap]++;
+  (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
+  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  else (PCB).ss[(PCB).ssx] = (PCB).sn;
+  (PCB).pointer = (PCB).la_ptr;
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
+    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+  return 0;
+}
+
+static int ag_action_3_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  else (PCB).ss[(PCB).ssx] = (PCB).sn;
+  (PCB).pointer = (PCB).la_ptr;
+  ss-fp_nrc[(PCB).ag_ap]++;
+  (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
+  ag_ra();
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
+    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+  return 0;
+}
+
+static int ag_action_8_proc(void) {
+  ag_trace_error();
+  (PCB).la_ptr =  (PCB).pointer;
+  (PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
+  SYNTAX_ERROR;
+  (PCB).la_ptr = ++(PCB).pointer;
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_5_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap];
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  else {
+    (PCB).ss[(PCB).ssx] = (PCB).sn;
+  }
+  (PCB).la_ptr =  (PCB).pointer;
+  ss-fp_nrc[(PCB).ag_ap]++;
+  (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
+  ag_ra();
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
+    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_6_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap];
+  ss-fp_nrc[(PCB).ag_ap]++;
+  (PCB).reduction_token = (ss-fp_token_type) ag_ptt[(PCB).ag_ap];
+  if (ag_sd) {
+    (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  }
+  else {
+    if ((PCB).ssx >= 128) {
+      ag_trace_error();
+      (PCB).exit_flag = AG_STACK_ERROR_CODE;
+      PARSER_STACK_OVERFLOW;
+    }
+    (PCB).vs[(PCB).ssx] = ag_null_value;
+    (PCB).ss[(PCB).ssx] = (PCB).sn;
+  }
+  (PCB).la_ptr =  (PCB).pointer;
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
+    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+
+void init_ss-fp(void) {
+  (PCB).la_ptr = (PCB).pointer;
+  (PCB).error_message = "Syntax Error";
+  (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
+  (PCB).exit_flag = AG_RUNNING_CODE;
+}
+
+void ss-fp(void) {
+  init_ss-fp();
+  (PCB).exit_flag = AG_RUNNING_CODE;
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbt[(PCB).sn];
+    if (ag_tstt[ag_t1]) {
+      unsigned ag_t2 = ag_sbe[(PCB).sn] - 1;
+      (PCB).token_number = (ss-fp_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
+      (PCB).la_ptr++;
+      if (ag_key_index[(PCB).sn]) {
+        unsigned ag_k = ag_key_index[(PCB).sn];
+        int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
+        if (ag_ch <= 255) {
+          while (ag_key_ch[ag_k] < ag_ch) ag_k++;
+          if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
+        }
+      }
+      do {
+        unsigned ag_tx = (ag_t1 + ag_t2)/2;
+        if (ag_tstt[ag_tx] > (unsigned char)(PCB).token_number)
+          ag_t1 = ag_tx + 1;
+        else ag_t2 = ag_tx;
+      } while (ag_t1 < ag_t2);
+      if (ag_tstt[ag_t1] != (unsigned char)(PCB).token_number)
+        ag_t1 = ag_sbe[(PCB).sn];
+    }
+    (PCB).ag_ap = ag_pstt[ag_t1];
+    (ag_gt_procs_scan[ag_astt[ag_t1]])();
+  }
+}
+
+