view tests/agcl/oldagsrc/good/dsl.cpp @ 2:4b08ee1ecb99

Adjust install notes to clarify that Wine applies only to the Windows build. (Thanks to Perry Metzger for test-driving.)
author David A. Holland
date Sun, 26 Apr 2009 17:58:26 -0400
parents 13d2b8934445
children
line wrap: on
line source

                                           // C Prologue
/*
 AnaGram, a System for Syntax Directed Programming

 A Dos Script Language

 Copyright (c) 1993, Parsifal Software.
 All Rights Reserved.

*/


#include "stack.h"
#include "charsink.h"
#include "strdict.h"
#include "array.h"
#include "symbol.h"
#include "query.h"
#include <conio.h>


// Define stacks for temporary storage

stack <action_pointer>      as(25);              // Stack actions
stack <int>                 is(100);             // Stack string indices
stack <char *>              ps(1000,20);         // Stack parameter strings
stack <query_item>          qs(23);              // Stack query items


// Define data structures for symbol table

#define N_STRINGS 2000

string_accumulator          sa(64000U,500);
string_dictionary           sd(N_STRINGS);
array <symbol_table_entry>  st(N_STRINGS);


/*
 * 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 DSL_H
#include "dsl.h"
#endif

#ifndef DSL_H
#error Mismatched header file
#endif

#include <ctype.h>
#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])



dsl_pcb_type dsl_pcb;
#define PCB dsl_pcb
#define CHANGE_REDUCTION(x) dsl_change_reduction(dsl_##x##_token)
int dsl_change_reduction(dsl_token_type);


#line - "dsl.syn"
#include <process.h>
#include <stdlib.h>
#include <ctype.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <io.h>
#include <conio.h>
#include <dir.h>
#include <dos.h>
#include <time.h>
#include "assert.h"

#include "edit.h"


#include "screen.h"
#include "util.h"
#include "redirect.h"

#define GET_CONTEXT CONTEXT.pointer = PCB.pointer;\
  CONTEXT.line=PCB.line;\
  CONTEXT.column = PCB.column;


int       debug_switch = 0;
char     *error_msg = NULL;
unsigned  errorlevel_index;
int       errorlevel;
int       exitcode = 0;
int       exitflag = 0;
int       first_line = 1;
int       first_column = 1;
unsigned  stderr_index;

void      display_queries(screen_descriptor *);

#define FIRST_LINE first_line
#define FIRST_COLUMN first_column


/*****

 Internal Functions

*****/

long file_exists(void) {
  FILE *f = fopen(sa--,"r");
  if (f != NULL) fclose(f);
  return f != NULL;
}

long directory_exists(void) {
  struct ffblk ff;
  int result;

  sa << "\\*.*";
  result = findfirst(sa--,&ff,FA_DIREC);
  return result == 0;
}

long string_length(void) {
  return size(sa--);
}

long get_file_length(void) {
  int handle = open(sa--, O_RDONLY);
  long length;
  if (handle < 0) return 0;
  length = filelength(handle);
  close(handle);
  return length;
}

long disk_space(void) {
  struct dfree free;
  int drive = toupper(*(char *)sa--) - 64;
  long avail;

  getdfree(drive, &free);
  avail = (long) free.df_avail * (long) free.df_bsec * (long) free.df_sclus;
  return avail;
}

long file_time(void) {
  int handle = open(sa--, O_RDONLY);
  struct ftime ft;
  struct tm t;

  if (handle < 0) return 0;
  getftime(handle, &ft);
  close(handle);
  t.tm_year = ft.ft_year + 70;
  t.tm_mon  = ft.ft_month;
  t.tm_mday = ft.ft_day;
	t.tm_hour = ft.ft_hour;
	t.tm_min  = ft.ft_min;
	t.tm_sec  = ft.ft_tsec*2;
  return mktime(&t);
}


// Support for reduction procecures

// Compare top strings on string accumulator

/*
  pops top two strings from string accumulator using strcmp
  and returns
    -1 if first string is less than top string
     0 if strings match
    +1 if top string is greater than first string
*/

int string_comp(void) {
  int n = size(sa);
  array<char> right_string(sa--, n+1);
  return strcmp(sa--,right_string);
}

/*
  replace the top string on the stack, with a substring where the index
  of the first character in the substring is given by "first" and the index
  of the last character is given by "last"
*/

void extract(unsigned first, unsigned last) {
  int n = last - first + 1;
  assert (last >= first);
  array <char> x((char *) sa-- + first, n+1);
  x[n] = 0;
  ++sa << x;
}

/*
 Look up the top string on the accumulator stack in the string dictionary.
 If it has a value in the symbol table, replace it with the symbol table
 value. If the value is numeric, convert it to integer. Otherwise, leave the
 string untouched on the stack.
*/

void lookup(void) {
  unsigned index = sd[sa];
  if (index == 0) return;
  switch (st[index].type) {
    case string_type:
    case value_type: {
      --sa;                                       // discard name
      ++sa << st[index].data.text;                // stack value
      break;
    }
    case integer_type: {
      --sa;                                       // discard name
      (++sa).printf("%ld", st[index].data.integer); // convert to ascii
      break;
    }
  }
}

/*
 Find the data type of a symbol and change the reduction accordingly.
 Return the dictionary index for strings, and the value itself for integers.
*/

long name_type(void) {
  unsigned index = sd << sa--;
  switch (st[index].type) {
    case value_type:
    case string_type: {
      CHANGE_REDUCTION(string_name);
      return index;
    }
    case built_in_function_type: {
      CHANGE_REDUCTION(built_in_name);
      return index;
    }
    case undefined_type: {
      CHANGE_REDUCTION(undefined_name);
      return index;
    }
    case integer_type: return st[index].data.integer;
  }
  return 0;
}

/*
 Store a string formula. A string formula is a sequence of string identifiers
 the values of which are to be concatenated. The parser has accumulated the
 identifiers on the integer_stack, is. The formula is terminated by a zero
 entry.
*/

int *formula(void) {
  int n = size(is << 0);
  int *f = new int[n];
  while (n--) is >> f[n];
  return f;
}

/*
 Make a copy of an action that has been identified in the text stream.
 An action pointer was stacked at the beginning of the action text on the
 action stack, as.
*/

action_pointer copy_action(void) {
  action_pointer ap;
  as >> ap;                               // pop action descriptor
  unsigned length = (unsigned) (PCB.pointer - ap.pointer);
  unsigned char *action = memdup(ap.pointer,length + 1);
  action[length] = 0;
  ap.pointer = action;
  return ap;
}


// Internal Commands

int echo(int n_args, char *args[]) {
  int i;
  char *cs = "";
  for (i = 1; args[i]; i++) printf("%s%s", cs, args[i]), cs = " ";
  printf("\n");
  return 0;
}

int pause(int n_args, char *args[]) {
  int c;
  while (kbhit()) getch();                  // Empty buffer
  printf("Press any key to continue . . .\n");
  c = getch();
  if (c == 3) exit(1);
  return c;
}

int exit_script(int n_args, char *args[]) {
  if (n_args > 1) sscanf(args[1], "%ld", &exitcode);
  exit(exitcode);
  return exitcode;
}

/*
int return_script(int n_args, char *args[]) {
  if (n_args > 1) sscanf(args[1], "%ld", &exitcode);
  PCB.exit_flag = AG_SUCCESS_CODE;
  return exitcode;
}
*/

int subdirs(int n_args, char *args[]) {
  ffblk file_block;
  int flag;
  int length = strlen(args[1]);
  array <char> name(args[1],length + 5);

  strcat(name, "\\*.*");
	for(flag = findfirst(name, &file_block, FA_DIREC);
       flag == 0; flag = findnext(&file_block)) {
    if ((file_block.ff_attrib & FA_DIREC) == 0) continue;
    if (strcmp(file_block.ff_name, ".") == 0) continue;
    if (strcmp(file_block.ff_name, "..") == 0) continue;
    puts(file_block.ff_name);
  }
  return 0;
}

int files(int n_args, char *args[]) {
  ffblk file_block;
  int flag;
  int length = strlen(args[1]);
  array<char> name(args[1],length + 5);

  strcat(name, "\\*.*");
  for(flag = findfirst(name, &file_block, 0);
       flag == 0; flag = findnext(&file_block)) {
    puts(file_block.ff_name);
  }
  return 0;
}


/*****

 Execute Command Line

*****/


void perform_action(action_pointer ap) {
  dsl_pcb_type save_pcb = PCB;

  PCB.pointer = ap.pointer;
  first_line = ap.line;
  first_column = ap.column;
  dsl();
  exitflag = PCB.exit_flag != AG_SUCCESS_CODE;
	PCB = save_pcb;
  if (exitflag) PCB.exit_flag = AG_SEMANTIC_ERROR_CODE;
}

void exec(void) {
	int n = size(ps << (char *) NULL);
  int n_args = n - 1;
	unsigned index;
	char *cs;
	int i;

  array <char *> args(n);
	while (n--) ps >> args[n];

	cs = args[0];
	for (i = 0; cs[i]; i++) cs[i] = toupper(cs[i]);
  if (debug_switch) {
    for (i = 0; args[i]; i++) fprintf(stderr, "%s ", args[i]);
    fprintf(stderr,"\nPress any key to continue\n");
    while (!kbhit());
    getch();
  }
	index = sd[args[0]];
  if (n_args == 1 && strlen(cs) == 2 && cs[1] == ':') {
    errorlevel = system(args[0]);
  }
  else if ( *cs && index) switch (st[index].type) {
		case internal_type: {
      errorlevel = (*st[index].data.proc)(n_args, args);
			break;
		}
		case dos_type: {
			int i;
			for (i = 1; args[i]; i++) args[i][-1] = ' ';
      errorlevel = system(args[0]);
      assert(errorlevel >= 0);
			break;
		}
		case action_type: {
			action_descriptor d = *st[index].data.action;
			stack <symbol_table_entry> old_entries(d.n_args);
			for (i = 0; i < d.n_args && args[i+1]; i++) {
				old_entries << st[d.args[i]];
				st[d.args[i]].type = value_type;
        st[d.args[i]].data.text = memdup(args[i+1], 1 + strlen(args[i+1]));
			}
      perform_action(d.ap);
			for (i = d.n_args; i--;) {
				release(st[d.args[i]]);
				old_entries >> st[d.args[i]];
			}
		}
	}
	else {
    errorlevel = spawnvp(P_WAIT, args[0], args);
    assert(errorlevel >= 0);
	}
  st[errorlevel_index].data.integer = errorlevel;
  while (n_args--) --sa;
  --ps;
  if (kbhit()) {
    int c = getch();
    if (c == 3) exit(1);
    ungetch(c);
  }
}

void discard_temp_file(char *file_name) {
  unlink(file_name);                        // Delete file
  delete [] file_name;                      // Free storage for name
}


/*****

 Execute Command with piped input

*****/


void exec_pipe_in(char *file_name) {
  {
    redirect sin(STDIN, file_name);
    exec();
  }
  discard_temp_file(file_name);
}


/*****

 Execute Command with redirected I/O

*****/

void exec_redirect_in(void) {
  redirect sin(STDIN, sa--);
	exec();
}

char *exec_pipe_out(void) {
  redirect sout(STDOUT);
  exec();
  return save_file(sout);
}

char *exec_pipe_in_pipe_out(char *file_name) {
  char *result;
  {
    redirect sin(STDIN, file_name);
    redirect sout(STDOUT);
    exec();
    result = save_file(sout);
  }
  discard_temp_file(file_name);
  return result;
}

char *exec_redirect_in_pipe_out(void) {
  redirect sout(STDOUT);
  exec_redirect_in();
  return save_file(sout);
}

unsigned check_integer(void) {
  unsigned index = sd << sa--;
	if (st[index].type == integer_type) return index;
	CHANGE_REDUCTION(undeclared_variable);
	if (st[index].type == string_type) CHANGE_REDUCTION(string_variable);
	return index;
}

void assign_value(unsigned index) {
  char *text = copy(sa--);
  release(st[index]);
	st[index].type = value_type;
  st[index].data.text = text;
}

void grab_output(char *temp_name) {
  unlink(sa);                               // delete old file
  rename(temp_name, sa--);                  // rename temp file
  delete [] temp_name;                      // discard name string
}

void append_output(char *temp_name) {
  redirect sout(STDOUT, sa--, 1);           // append to file named on sa
  redirect sin(STDIN, temp_name);
  char *buf[2000];
  int n;
  while (1) {
    n = read(STDIN, buf, 2000);
    if (n == 0) break;
    write(STDOUT, buf, n);
  }
  unlink(temp_name);
  delete [] temp_name;
}

void action_string(void) {
  action_pointer ap;
  as >> ap;
  unsigned length = (unsigned)(PCB.pointer - ap.pointer);
  array <unsigned char> action(ap.pointer,length + 1);
  action[length] = 0;
  redirect sout(STDOUT);
	char *result;

  ap.pointer = action;
  perform_action(ap);
	result = content(sout);
	++sa << result;
	delete [] result;
}


// Program Control functions

// If/else statement

int do_if(int pc, int cc) {
  action_pointer ap;
  as >> ap;
	if (!pc && cc && exitflag == 0) {
    unsigned length = (unsigned) (PCB.pointer - ap.pointer);
    array<unsigned char> q(ap.pointer, length+1);
    q[length] = 0;
    ap.pointer = q;
    perform_action(ap);
  }
  return pc || cc;
}

// While statement

void do_while(int cc) {
  unsigned length;
  action_pointer ap;
  as >> ap;
  if (cc == 0) return;
  length = (unsigned) (PCB.pointer - ap.pointer);
  array<unsigned char> q(ap.pointer, length+1);
  q[length] = 0;
  ap.pointer = q;
  perform_action(ap);
	if (exitflag) return;
  PCB.pointer = CONTEXT.pointer;
  PCB.line = CONTEXT.line;
  PCB.column = CONTEXT.column;
}


// For Statement
// Note that this is the for statement in the DOS batch languange for, not C

void do_for_loop(void) {
	int n,k;
  char *q;
  char *seps = " \t\v\f\r\n";
  action_pointer ap;
  as >> ap;
  unsigned length = (unsigned)(PCB.pointer - ap.pointer);
  array <unsigned char> action(ap.pointer, length + 1);
  action[length] = 0;

  ap.pointer = action;
  n = size(sa);
  array<char> text(sa--, n + 1);


  unsigned index = sd << sa--;

  ++ps;
  for (q = strtok(text, seps); q != NULL; q = strtok(NULL,seps)) {
    if (*q == '(') {
      int k = strlen(q) - 1;
			assert(q[k] == ')');
			q[k] = 0;
			q++;
		}
		else if (*q == '"') {
			int k = strlen(q) - 1;
			assert(q[k] == '"');
			q[k] = 0;
			q++;
		}
    ps << q;
  }
	k = n = size(ps);
  array<char *> args(n);
	while (k--) ps >> args[k];
  --ps;
	symbol_table_entry save_table_entry = st[index];
	st[index].type = value_type;

  for (k = 0; k < n && exitflag == 0; k++) {
    st[index].data.text = args[k];
    perform_action(ap);
	}
	st[index] = save_table_entry;
}

void invoke_script(void) {
	int handle = open(sa, O_TEXT | O_RDONLY);
	long size;
	unsigned n;
  action_pointer ap;

	if (handle < 0) {
		fprintf(stderr,"Cannot open %s\n", (char *) sa--);
		exit(1);
	}
	--sa;
	size = filelength(handle);
	assert(size < 65536L);
  array <unsigned char> data((unsigned) size+1);
	n = (unsigned) read(handle,data,(unsigned) size);
	data[n] = 0;
	close(handle);
  exitflag = 0;
  ap.pointer = data;
  ap.line = ap.column = 1;
	perform_action(ap);
	st[errorlevel_index].data.integer = exitcode;
  exitflag = exitcode = 0;
  return;
}

internal_commands_descriptor internal_commands[] = {
  {"ECHO", echo},
  {"EXIT", exit_script},
  {"FILES", files},
  {"PAUSE", pause},
//  {"RETURN", return_script},
  {"SUBDIRS", subdirs},
  {NULL, NULL}
};

struct built_ins_descriptor built_ins[] = {
  {"file_exists", file_exists},
  {"directory_exists", directory_exists},
  {"string_length", string_length},
  {"file_length", get_file_length},
  {"disk_space", disk_space},
  {"file_time", file_time},
  {NULL, NULL}
};

void set_extension(char *path, char *e) {
	char s[MAXPATH];
	char drive[MAXDRIVE];
	char dir[MAXDIR];
  char file[MAXFILE];
  char ext[MAXEXT];

  fnsplit(path,drive,dir,file,ext);
  fnmerge(s, drive, dir, file, e);
	++sa << s;
}

/*
 Note that if this program is called without any arguments, it looks for a
 script with the same name as the executable. Thus, to make an install
 program that picks up the install script without any arguments, you simply
 rename DSL.EXE to INSTALL.EXE. Then when you run it without any arguments
 it will run the INSTALL.DSL script.
*/

void main(int argc, char *argv[]) {
  int arg_number = 0;
  int i = 1;
  int j = 0;

  init_dos_internals();
	set_arg(j++, argv[0]);
  if (argc > i && (argv[i][0] == '/' || argv[i][0] == '-')) {
		if (toupper(argv[i][1]) != 'D') {
      printf("Unrecognized switch -- /%s\n",argv[i][1]);
      return;
    }
    debug_switch = 1;
    i++;
  }
	if (argc > i) arg_number = i++;
  set_extension(argv[arg_number], "DSL");
  set_arg(j++,copy(sa));
	while (i < argc) set_arg(j++, argv[i++]);
  define_integer("argc", j);
  invoke_script();                          // Takes file name from sa
  exit(exitcode);
}
#line - "dsl.cpp"

#ifndef CONVERT_CASE
#define CONVERT_CASE(c) (c)
#endif
#ifndef TAB_SPACING
#define TAB_SPACING 8
#endif

static void ag_rp_1(void) {
#line - "dsl.syn"
  lookup();
#line - "dsl.cpp"
}

static void ag_rp_2(void) {
#line - "dsl.syn"
  sa << '[';
#line - "dsl.cpp"
}

static void ag_rp_3(void) {
#line - "dsl.syn"
  concat(sa) << ']', lookup();
#line - "dsl.cpp"
}

static void ag_rp_4(void) {
#line - "dsl.syn"
  concat(sa);
#line - "dsl.cpp"
}

static void ag_rp_5(void) {
#line - "dsl.syn"
  concat(sa);
#line - "dsl.cpp"
}

static void ag_rp_6(int c) {
#line - "dsl.syn"
  ++sa << c;
#line - "dsl.cpp"
}

static void ag_rp_7(int c) {
#line - "dsl.syn"
  sa << c;
#line - "dsl.cpp"
}

static void ag_rp_8(void) {
#line - "dsl.syn"
  action_string();
#line - "dsl.cpp"
}

static void ag_rp_9(void) {
#line - "dsl.syn"
  as << CONTEXT;
#line - "dsl.cpp"
}

static void ag_rp_10(void) {
#line - "dsl.syn"
  --sa;
#line - "dsl.cpp"
}

static void ag_rp_11(void) {
#line - "dsl.syn"
action_pointer a; as >> a;
#line - "dsl.cpp"
}

static void ag_rp_12(void) {
#line - "dsl.syn"
  ++sa;
#line - "dsl.cpp"
}

static void ag_rp_13(int c) {
#line - "dsl.syn"
  sa << c;
#line - "dsl.cpp"
}

static void ag_rp_14(void) {
#line - "dsl.syn"
  sa << '(';
#line - "dsl.cpp"
}

static void ag_rp_15(void) {
#line - "dsl.syn"
  concat(sa) << ')';
#line - "dsl.cpp"
}

static void ag_rp_16(void) {
#line - "dsl.syn"
  ++sa;
#line - "dsl.cpp"
}

static void ag_rp_17(int c) {
#line - "dsl.syn"
  sa << c;
#line - "dsl.cpp"
}

static void ag_rp_18(int c) {
#line - "dsl.syn"
  sa << c;
#line - "dsl.cpp"
}

static int ag_rp_19(void) {
#line - "dsl.syn"
  return '\a';
#line - "dsl.cpp"
}

static int ag_rp_20(void) {
#line - "dsl.syn"
  return '\b';
#line - "dsl.cpp"
}

static int ag_rp_21(void) {
#line - "dsl.syn"
  return '\f';
#line - "dsl.cpp"
}

static int ag_rp_22(void) {
#line - "dsl.syn"
  return '\n';
#line - "dsl.cpp"
}

static int ag_rp_23(void) {
#line - "dsl.syn"
  return '\r';
#line - "dsl.cpp"
}

static int ag_rp_24(void) {
#line - "dsl.syn"
  return '\t';
#line - "dsl.cpp"
}

static int ag_rp_25(void) {
#line - "dsl.syn"
  return '\v';
#line - "dsl.cpp"
}

static int ag_rp_26(void) {
#line - "dsl.syn"
  return '\\';
#line - "dsl.cpp"
}

static int ag_rp_27(void) {
#line - "dsl.syn"
  return '\?';
#line - "dsl.cpp"
}

static int ag_rp_28(void) {
#line - "dsl.syn"
  return '\'';
#line - "dsl.cpp"
}

static int ag_rp_29(void) {
#line - "dsl.syn"
  return '"';
#line - "dsl.cpp"
}

static int ag_rp_30(int d) {
#line - "dsl.syn"
  return d-'0';
#line - "dsl.cpp"
}

static int ag_rp_31(int n, int d) {
#line - "dsl.syn"
  return 8*n + d-'0';
#line - "dsl.cpp"
}

static int ag_rp_32(int n, int d) {
#line - "dsl.syn"
  return 8*n + d-'0';
#line - "dsl.cpp"
}

static int ag_rp_33(long n) {
#line - "dsl.syn"
  return (int) n;
#line - "dsl.cpp"
}

static long ag_rp_34(long n, long d) {
#line - "dsl.syn"
  return 16*n + d;
#line - "dsl.cpp"
}

static void ag_rp_35(void) {
#line - "dsl.syn"
  exec();
#line - "dsl.cpp"
}

static void ag_rp_36(void) {
#line - "dsl.syn"
  exec_redirect_in();
#line - "dsl.cpp"
}

static void ag_rp_37(char * file) {
#line - "dsl.syn"
  exec_pipe_in(file);
#line - "dsl.cpp"
}

static void ag_rp_38(char * file) {
#line - "dsl.syn"
  grab_output(file);
#line - "dsl.cpp"
}

static void ag_rp_39(char * file) {
#line - "dsl.syn"
  append_output(file);
#line - "dsl.cpp"
}

static char * ag_rp_40(void) {
#line - "dsl.syn"
  return exec_pipe_out();
#line - "dsl.cpp"
}

static char * ag_rp_41(void) {
#line - "dsl.syn"
  return exec_redirect_in_pipe_out();
#line - "dsl.cpp"
}

static char * ag_rp_42(char * file) {
#line - "dsl.syn"
  return exec_pipe_in_pipe_out(file);
#line - "dsl.cpp"
}

static void ag_rp_43(void) {
#line - "dsl.syn"
  sa << 0, ++ps << sa;
#line - "dsl.cpp"
}

static void ag_rp_44(void) {
#line - "dsl.syn"
  ps << sa, sa << 0;
#line - "dsl.cpp"
}

static void ag_rp_45(void) {
#line - "dsl.syn"
  ps << sa, sa << 0;
#line - "dsl.cpp"
}

static void ag_rp_46(int pc) {
#line - "dsl.syn"
  do_if(pc,1);
#line - "dsl.cpp"
}

static int ag_rp_47(int cc) {
#line - "dsl.syn"
  return cc;
#line - "dsl.cpp"
}

static int ag_rp_48(int cc) {
#line - "dsl.syn"
  return cc;
#line - "dsl.cpp"
}

static int ag_rp_49(int pc, int cc) {
#line - "dsl.syn"
  return do_if(pc,cc!=0);
#line - "dsl.cpp"
}

static int ag_rp_50(long cc) {
#line - "dsl.syn"
  return (int) cc;
#line - "dsl.cpp"
}

static int ag_rp_51(int cc) {
#line - "dsl.syn"
  return do_if(0,cc != 0);
#line - "dsl.cpp"
}

static void ag_rp_52(unsigned v) {
#line - "dsl.syn"
  assign_value(v);
#line - "dsl.cpp"
}

static void ag_rp_53(unsigned v, long x) {
#line - "dsl.syn"
  st[v].data.integer = (int) x;
#line - "dsl.cpp"
}

static void ag_rp_54(unsigned v) {
#line - "dsl.syn"
  st[v].data.text = copy(sa--);
#line - "dsl.cpp"
}

static void ag_rp_55(unsigned v, long n, long x) {
#line - "dsl.syn"
  st[v].data.text[(unsigned)n] = (int) x;
#line - "dsl.cpp"
}

static unsigned ag_rp_56(void) {
#line - "dsl.syn"
  return check_integer();
#line - "dsl.cpp"
}

static void ag_rp_57(long cc) {
#line - "dsl.syn"
  do_while(cc != 0);
#line - "dsl.cpp"
}

static void ag_rp_58(void) {
#line - "dsl.syn"
  do_for_loop();
#line - "dsl.cpp"
}

static void ag_rp_59(int n) {
#line - "dsl.syn"
  define_action(n);
#line - "dsl.cpp"
}

static void ag_rp_60(long x) {
#line - "dsl.syn"
  define_integer(sa--, x);
#line - "dsl.cpp"
}

static void ag_rp_61(void) {
#line - "dsl.syn"
  define_string();
#line - "dsl.cpp"
}

static int ag_rp_62(void) {
#line - "dsl.syn"
  return 0;
#line - "dsl.cpp"
}

static int ag_rp_63(int n) {
#line - "dsl.syn"
  return n+1;
#line - "dsl.cpp"
}

static void ag_rp_64(int c) {
#line - "dsl.syn"
  ++sa << c;
#line - "dsl.cpp"
}

static void ag_rp_65(int c) {
#line - "dsl.syn"
  sa << c;
#line - "dsl.cpp"
}

static void ag_rp_66(int c) {
#line - "dsl.syn"
  sa << c;
#line - "dsl.cpp"
}

static long ag_rp_67(long c, long x, long y) {
#line - "dsl.syn"
  return c != 0 ? x : y;
#line - "dsl.cpp"
}

static long ag_rp_68(long x, long y) {
#line - "dsl.syn"
  return x != 0 || y!=0;
#line - "dsl.cpp"
}

static long ag_rp_69(long x, long y) {
#line - "dsl.syn"
  return x != 0 && y !=0;
#line - "dsl.cpp"
}

static long ag_rp_70(long x, long y) {
#line - "dsl.syn"
  return x | y;
#line - "dsl.cpp"
}

static long ag_rp_71(long x, long y) {
#line - "dsl.syn"
  return x ^ y;
#line - "dsl.cpp"
}

static long ag_rp_72(long x, long y) {
#line - "dsl.syn"
  return x & y;
#line - "dsl.cpp"
}

static long ag_rp_73(long x, long y) {
#line - "dsl.syn"
  return x == y;
#line - "dsl.cpp"
}

static long ag_rp_74(long x, long y) {
#line - "dsl.syn"
  return x != y;
#line - "dsl.cpp"
}

static long ag_rp_75(void) {
#line - "dsl.syn"
  return string_comp() == 0;
#line - "dsl.cpp"
}

static long ag_rp_76(void) {
#line - "dsl.syn"
  return string_comp() != 0;
#line - "dsl.cpp"
}

static long ag_rp_77(long x, long y) {
#line - "dsl.syn"
  return x < y;
#line - "dsl.cpp"
}

static long ag_rp_78(long x, long y) {
#line - "dsl.syn"
  return x > y;
#line - "dsl.cpp"
}

static long ag_rp_79(long x, long y) {
#line - "dsl.syn"
  return x <= y;
#line - "dsl.cpp"
}

static long ag_rp_80(long x, long y) {
#line - "dsl.syn"
  return x >= y;
#line - "dsl.cpp"
}

static long ag_rp_81(void) {
#line - "dsl.syn"
  return string_comp() < 0;
#line - "dsl.cpp"
}

static long ag_rp_82(void) {
#line - "dsl.syn"
  return string_comp() > 0;
#line - "dsl.cpp"
}

static long ag_rp_83(void) {
#line - "dsl.syn"
  return string_comp() <= 0;
#line - "dsl.cpp"
}

static long ag_rp_84(void) {
#line - "dsl.syn"
  return string_comp() >= 0;
#line - "dsl.cpp"
}

static long ag_rp_85(long x, long y) {
#line - "dsl.syn"
  return x << y;
#line - "dsl.cpp"
}

static long ag_rp_86(long x, long y) {
#line - "dsl.syn"
  return x >> y;
#line - "dsl.cpp"
}

static long ag_rp_87(long x, long y) {
#line - "dsl.syn"
  return x + y;
#line - "dsl.cpp"
}

static long ag_rp_88(long x, long y) {
#line - "dsl.syn"
  return x - y;
#line - "dsl.cpp"
}

static long ag_rp_89(long x, long y) {
#line - "dsl.syn"
  return x * y;
#line - "dsl.cpp"
}

static long ag_rp_90(long x, long y) {
#line - "dsl.syn"
  return x / y;
#line - "dsl.cpp"
}

static long ag_rp_91(long x, long y) {
#line - "dsl.syn"
  return x % y;
#line - "dsl.cpp"
}

static long ag_rp_92(long x) {
#line - "dsl.syn"
      assert(x);
			return x;
		
#line - "dsl.cpp"
}

static long ag_rp_93(long x) {
#line - "dsl.syn"
  return x;
#line - "dsl.cpp"
}

static long ag_rp_94(long x) {
#line - "dsl.syn"
  return -x;
#line - "dsl.cpp"
}

static long ag_rp_95(long x) {
#line - "dsl.syn"
  return ~x;
#line - "dsl.cpp"
}

static long ag_rp_96(long x) {
#line - "dsl.syn"
  return !x;
#line - "dsl.cpp"
}

static long ag_rp_97(long n) {
#line - "dsl.syn"
  return ((unsigned char *) sa--)[(unsigned) n];
#line - "dsl.cpp"
}

static long ag_rp_98(void) {
#line - "dsl.syn"
                              long temp;
                              sscanf(sa--, "%ld", &temp);
                              return temp;
                            
#line - "dsl.cpp"
}

static long ag_rp_99(long x) {
#line - "dsl.syn"
  return x;
#line - "dsl.cpp"
}

static long ag_rp_100(long x) {
#line - "dsl.syn"
  return (*st[(unsigned)x].data.func)();
#line - "dsl.cpp"
}

static long ag_rp_101(void) {
#line - "dsl.syn"
  return name_type();
#line - "dsl.cpp"
}

static void ag_rp_102(void) {
#line - "dsl.syn"
  concat(sa);
#line - "dsl.cpp"
}

static void ag_rp_103(long first, long last) {
#line - "dsl.syn"
  extract((unsigned)first, (unsigned) last);
#line - "dsl.cpp"
}

static void ag_rp_104(void) {
#line - "dsl.syn"
  sa << '[';
#line - "dsl.cpp"
}

static void ag_rp_105(void) {
#line - "dsl.syn"
  concat(sa) << ']', lookup();
#line - "dsl.cpp"
}

static void ag_rp_106(long x) {
#line - "dsl.syn"
  ++sa << st[(unsigned)x].data.text;
#line - "dsl.cpp"
}

static void ag_rp_107(long x) {
#line - "dsl.syn"
  ++sa << sd[(unsigned)x];
#line - "dsl.cpp"
}

static void ag_rp_108(void) {
#line - "dsl.syn"
  action_string();
#line - "dsl.cpp"
}

static void ag_rp_109(long x) {
#line - "dsl.syn"
  ++sa,sa.printf("%ld",x);
#line - "dsl.cpp"
}

static long ag_rp_110(void) {
#line - "dsl.syn"
  return 0;
#line - "dsl.cpp"
}

static long ag_rp_111(long x, long d) {
#line - "dsl.syn"
  return 16*x + d-'0';
#line - "dsl.cpp"
}

static long ag_rp_112(int d) {
#line - "dsl.syn"
  return (d&7) + 9;
#line - "dsl.cpp"
}

static long ag_rp_113(void) {
#line - "dsl.syn"
  return 0;
#line - "dsl.cpp"
}

static long ag_rp_114(long n, int d) {
#line - "dsl.syn"
  return 8*n + d-'0';
#line - "dsl.cpp"
}

static long ag_rp_115(int d) {
#line - "dsl.syn"
  return d-'0';
#line - "dsl.cpp"
}

static long ag_rp_116(long n, int d) {
#line - "dsl.syn"
  return 10*n + d-'0';
#line - "dsl.cpp"
}

static int ag_rp_117(int c) {
#line - "dsl.syn"
  return c;
#line - "dsl.cpp"
}

static void ag_rp_118(screen_descriptor * scd) {
#line - "dsl.syn"
  display_queries(scd);
#line - "dsl.cpp"
}

static screen_descriptor * ag_rp_119(void) {
#line - "dsl.syn"
  return reset(qs), new screen_descriptor;
#line - "dsl.cpp"
}

static screen_descriptor * ag_rp_120(screen_descriptor * scd) {
#line - "dsl.syn"
  return scd->title = formula(), scd;
#line - "dsl.cpp"
}

static screen_descriptor * ag_rp_121(screen_descriptor * scd, int c) {
#line - "dsl.syn"
  return scd->color = c, scd;
#line - "dsl.cpp"
}

static screen_descriptor * ag_rp_122(screen_descriptor * scd, int c) {
#line - "dsl.syn"
  return scd->entry_color = c, scd;
#line - "dsl.cpp"
}

static screen_descriptor * ag_rp_123(screen_descriptor * scd, int c) {
#line - "dsl.syn"
  return scd->highlight_color = c, scd;
#line - "dsl.cpp"
}

static screen_descriptor * ag_rp_124(screen_descriptor * scd, long w, long h) {
#line - "dsl.syn"
  return scd->width = (unsigned)w, scd->height = (unsigned) h, scd;
#line - "dsl.cpp"
}

static screen_descriptor * ag_rp_125(screen_descriptor * scd, long x, long y) {
#line - "dsl.syn"
  return scd->pos.x = (unsigned) x,scd->pos.y = (unsigned) y, scd;
#line - "dsl.cpp"
}

static screen_descriptor * ag_rp_126(screen_descriptor * scd, query_item * q) {
#line - "dsl.syn"
  return qs << *q, delete q, scd;
#line - "dsl.cpp"
}

static screen_descriptor * ag_rp_127(screen_descriptor * scd, query_item * q) {
#line - "dsl.syn"
  return qs << *q, delete q, scd;
#line - "dsl.cpp"
}

static int ag_rp_128(long fg, long bg) {
#line - "dsl.syn"
  return COLOR((unsigned)fg,(unsigned)bg);
#line - "dsl.cpp"
}

static query_item * ag_rp_129(void) {
#line - "dsl.syn"
  return clear(new query_item);
#line - "dsl.cpp"
}

static query_item * ag_rp_130(query_item * q) {
#line - "dsl.syn"
  return q->id = sd << sa--, q;
#line - "dsl.cpp"
}

static query_item * ag_rp_131(query_item * q) {
#line - "dsl.syn"
  return q->value = formula(), q;
#line - "dsl.cpp"
}

static query_item * ag_rp_132(query_item * q) {
#line - "dsl.syn"
  return q->prompt = formula(), q;
#line - "dsl.cpp"
}

static query_item * ag_rp_133(query_item * q) {
#line - "dsl.syn"
  return q->explanation = formula(),q;
#line - "dsl.cpp"
}

static query_item * ag_rp_134(void) {
#line - "dsl.syn"
  return clear(new query_item);
#line - "dsl.cpp"
}

static query_item * ag_rp_135(query_item * q) {
#line - "dsl.syn"
  return q->prompt = formula(), q;
#line - "dsl.cpp"
}

static query_item * ag_rp_136(query_item * q) {
#line - "dsl.syn"
  return q->explanation = formula(),q;
#line - "dsl.cpp"
}

static query_item * ag_rp_137(query_item * q) {
#line - "dsl.syn"
  return q->action = copy_action(), q;
#line - "dsl.cpp"
}

static void ag_rp_138(void) {
#line - "dsl.syn"
  reset(is) << (sd << sa--);
#line - "dsl.cpp"
}

static void ag_rp_139(void) {
#line - "dsl.syn"
  is << (sd << sa--);
#line - "dsl.cpp"
}

static void ag_rp_140(void) {
#line - "dsl.syn"
  sa << '[';
#line - "dsl.cpp"
}

static void ag_rp_141(void) {
#line - "dsl.syn"
  concat(sa) << ']';
#line - "dsl.cpp"
}


#define READ_COUNTS 
#define WRITE_COUNTS 
#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 dsl_vs_type const ag_null_value NULL_VALUE_INITIALIZER;

static const unsigned char far ag_rpx[] = {
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  1,  2,  3,  0,  4,  0,  5,  6,  7,  0,  8,  0,  9,
   10,  0, 11,  0,  0, 12,  0, 13, 14, 15,  0, 16,  0, 17, 18, 19, 20, 21,
   22, 23, 24, 25, 26, 27, 28, 29,  0,  0,  0,  0,  0, 30, 31, 32, 33,  0,
   34,  0,  0, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0, 46,  0, 47, 48, 49, 50, 51,  0,  0,  0,  0,
    0,  0,  0,  0, 52,  0,  0, 53, 54, 55, 56, 57,  0,  0, 58, 59, 60, 61,
   62,  0,  0, 63, 64, 65, 66,  0, 67,  0, 68,  0, 69,  0, 70,  0, 71,  0,
   72,  0, 73, 74, 75, 76,  0, 77, 78, 79, 80, 81, 82, 83, 84,  0, 85, 86,
    0, 87, 88,  0, 89, 90, 91, 92,  0, 93, 94, 95, 96,  0,  0, 97, 98,  0,
   99,100,  0,101,  0,102,  0,103,104,105,  0,106,107,108,109,  0,  0,  0,
    0,  0,  0,110,111,  0,112,113,114,115,116,117,  0,  0,118,119,  0,120,
  121,122,123,124,125,126,127,128,129,  0,130,131,132,133,134,  0,135,136,
  137,138,139,  0,  0,  0,140,141
};

static const unsigned char far ag_key_itt[] = {
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0
};

static const unsigned short far ag_key_pt[] = {
  0,211,  0,214,  0,218,  0,221,  0,220,  0,219,  0,223,  0,224,
  0,225,  0,162,  0,163,  0,247,  0,248,  0,249,  0,250,  0,252,
  0,253,  0,254,  0,255,  0,256,  0,257,  0,258,  0,259,  0,260,
0
};

static const unsigned char far ag_key_ch[] = {
    0, 42, 47,255, 47, 97,105,115,255, 42, 47,255, 42, 47,255, 88,120,255,
   60, 61,255, 61, 62,255,101,111,255,108,110,120,255,105,111,255,116,255,
  102,110,255, 99,105,116,255, 33, 38, 46, 47, 48, 60, 61, 62, 97, 98, 99,
  100,101,102,104,105,108,112,115,116,118,119,124,255, 47, 97,105,115,255,
   47,255, 42, 47,255,110,120,255,105,111,255,102,110,255, 99,105,116,255,
   47, 97, 98, 99,100,101,102,104,105,108,112,115,116,118,119,255, 42, 47,
  255,108,110,120,255,105,111,255,102,110,255, 99,105,116,255, 47, 97, 98,
   99,100,101,102,104,105,108,112,115,116,118,119,255,102,110,255, 99,116,
  255, 47, 97,102,105,115,119,255, 42, 47,255, 60, 61,255, 61, 62,255,116,
  255,110,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,101,102,
  104,105,108,115,116,124,255,102,110,255, 99,116,255, 97,102,105,115,119,
  255, 42, 47,255, 88,120,255, 47, 48,255, 88,120,255, 48,255, 47,255, 34,
   39, 63, 92, 97, 98,102,110,114,116,118,120,255, 92,255, 42, 47,255, 60,
   61,255, 61, 62,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,
  101,102,104,105,108,115,116,124,255, 42, 47,255, 47,255, 47, 62,255, 47,
   98, 99,101,102,104,108,115,116,255, 62,255, 47,119,255, 47,101,255, 88,
  120,255, 47, 48,255, 60, 61,255, 61, 62,255, 33, 38, 46, 47, 60, 61, 62,
  124,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,101,102,104,
  105,108,115,116,124,255, 60, 61,255, 61, 62,255,105,116,255, 33, 38, 46,
   47, 60, 61, 62, 97, 98, 99,101,102,104,105,108,115,116,124,255, 33, 60,
   61, 62,255,105,116,255, 33, 38, 46, 47, 61, 97, 98, 99,101,102,104,105,
  108,115,116,124,255,105,116,255, 38, 46, 47, 97, 98, 99,101,102,104,105,
  108,115,116,124,255,105,116,255, 46, 47, 97, 98, 99,101,102,104,105,108,
  115,116,124,255, 42, 47,255, 60, 61,255, 61, 62,255,108,110,255,105,116,
  255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,100,101,102,104,105,108,115,
  116,119,124,255, 47,101,112,255, 47,100,101,112,118,255, 47, 99,255, 99,
  255,105,255, 47, 62,100,255,102,110,255, 99,116,255, 47, 97,101,102,105,
  115,119,255,101,255, 42, 47,255, 47,105,255, 47,105,255, 60, 62,255,100,
  255,105,255, 46,255, 42, 47,255,105,116,255, 33, 38, 46, 47, 60, 61, 62,
   97, 98, 99,101,102,104,105,108,115,116,124,255
};

static const unsigned char far ag_key_act[] = {
  0,0,0,4,2,7,7,7,4,3,3,4,0,0,4,5,5,4,0,0,4,0,0,4,7,5,4,7,7,7,4,7,7,4,5,
  4,5,6,4,7,7,7,4,3,3,3,2,2,2,3,2,7,7,7,2,2,2,7,2,7,7,2,7,7,7,3,4,3,7,7,
  7,4,3,4,0,0,4,7,7,4,7,7,4,5,7,4,7,7,7,4,2,7,7,7,7,2,2,7,2,7,7,2,7,7,7,
  4,0,0,4,7,7,7,4,7,7,4,5,7,4,7,7,7,4,2,7,7,7,7,2,2,7,2,7,7,2,7,7,7,4,5,
  7,4,7,7,4,3,7,7,2,2,7,4,0,0,4,0,0,4,0,0,4,5,4,6,4,7,7,4,3,3,3,2,2,3,2,
  7,7,7,7,7,7,2,7,2,7,3,4,5,7,4,7,7,4,7,7,2,2,7,4,0,0,4,5,5,4,2,2,4,5,5,
  4,2,4,3,4,0,0,0,0,0,0,0,0,0,0,0,0,4,2,4,0,0,4,0,0,4,0,0,4,7,7,4,3,3,3,
  2,2,3,2,7,7,7,7,7,7,7,7,2,7,3,4,0,0,4,2,4,3,3,4,3,7,7,7,7,7,7,7,7,4,3,
  4,3,7,4,3,7,4,5,5,4,3,2,4,0,0,4,0,0,4,3,3,3,3,2,3,2,3,4,7,7,4,3,3,3,3,
  3,3,3,7,7,7,7,7,7,7,7,2,7,3,4,0,0,4,0,0,4,7,7,4,3,3,3,3,2,3,2,7,7,7,7,
  7,7,7,7,2,7,3,4,3,3,3,3,4,7,7,4,3,3,3,3,3,7,7,7,7,7,7,7,7,2,7,3,4,7,7,
  4,3,3,3,7,7,7,7,7,7,7,7,2,7,3,4,7,7,4,3,3,7,7,7,7,7,7,7,7,2,7,3,4,0,0,
  4,0,0,4,0,0,4,7,7,4,7,7,4,3,3,3,2,2,3,2,7,7,7,7,2,7,7,7,7,2,7,7,3,4,3,
  7,7,4,3,7,7,7,7,4,3,7,4,7,4,7,4,3,3,7,4,5,7,4,7,7,4,3,7,7,7,2,2,7,4,7,
  4,0,0,4,2,7,4,3,7,4,3,3,4,7,4,7,4,3,4,0,0,4,7,7,4,3,3,3,2,3,3,3,7,7,7,
  7,7,7,7,7,2,7,3,4
};

static const unsigned short far ag_key_parm[] = {
    0, 15, 18,  0,  0, 12, 14, 16,  0, 14, 15,  0, 15, 18,  0, 20, 18,  0,
  236,234,  0,235,210,  0, 40, 10,  0,  0, 26, 44,  0, 36,  6,  0, 14,  0,
    2,  8,  0, 22, 30, 16,  0,233,229,246,  0,  0,  0,232,  0, 12, 46, 34,
    0,  0,  0, 28,  0, 32, 42,  0, 24, 38,  4,228,  0, 18, 12, 14, 16,  0,
   15,  0, 15, 18,  0, 26, 44,  0, 36,  6,  0,  2, 14,  0, 22, 30, 16,  0,
    0, 12, 46, 34, 40,  0,  0, 28,  0, 32, 42,  0, 24, 38,  4,  0, 15, 18,
    0,  0, 26, 44,  0, 36,  6,  0,  2, 14,  0, 22, 30, 16,  0,  0, 12, 46,
   34, 40,  0,  0, 28,  0, 32, 42,  0, 24, 38,  4,  0,  2, 14,  0, 22, 16,
    0, 18, 12,  6,  0,  0,  4,  0, 15, 18,  0,236,234,  0,235,210,  0, 14,
    0,  8,  0, 30, 16,  0,233,229,246,  0,  0,232,  0, 12, 46, 34, 26, 36,
   28,  0, 32,  0, 24,228,  0,  2, 14,  0, 22, 16,  0, 12,  6,  0,  0,  4,
    0, 15, 18,  0, 20, 18,  0,  0,  0,  0, 20, 18,  0,  0,  0, 18,  0, 64,
   63, 62, 61, 54, 55, 56, 57, 58, 59, 60, 72,  0,  0,  0, 15, 18,  0,236,
  234,  0,235,210,  0, 30, 16,  0,233,229,246,  0,  0,232,  0, 12, 46, 34,
   26, 36, 28, 14, 32,  0, 24,228,  0, 15, 18,  0,  0,  0, 18,210,  0, 18,
   46, 34, 26, 36, 28, 32, 30, 24,  0,210,  0, 18,  4,  0, 18,  0,  0, 20,
   18,  0, 15,  0,  0,236,234,  0,235,210,  0,233,229,246, 18,  0,232,  0,
  228,  0, 30, 16,  0,233,229,246, 18,234,232,235, 12, 46, 34, 26, 36, 28,
   14, 32,  0, 24,228,  0,236,234,  0,235,210,  0, 30, 16,  0,233,229,246,
   18,  0,232,  0, 12, 46, 34, 26, 36, 28, 14, 32,  0, 24,228,  0,233,234,
  232,235,  0, 30, 16,  0,233,229,246, 18,232, 12, 46, 34, 26, 36, 28, 14,
   32,  0, 24,228,  0, 30, 16,  0,229,246, 18, 12, 46, 34, 26, 36, 28, 14,
   32,  0, 24,228,  0, 30, 16,  0,246, 18, 12, 46, 34, 26, 36, 28, 14, 32,
    0, 24,228,  0, 15, 18,  0,236,234,  0,235,210,  0,  0, 26,  0, 30, 16,
    0,233,229,246,  0,  0,232,  0, 12, 46, 34, 10,  0, 36, 28, 14, 32,  0,
   24,  4,228,  0, 18, 44, 42,  0, 18, 40, 44, 42, 38,  0, 15, 34,  0, 34,
    0,  8,  0, 18,210, 10,  0,  2, 14,  0, 22, 16,  0, 18, 12,  0,  6,  0,
    0,  4,  0,  0,  0, 15, 18,  0,  0,  2,  0, 18,  2,  0,234,235,  0, 10,
    0,  2,  0,246,  0, 15, 18,  0, 30, 16,  0,233,229,246,  0,234,232,235,
   12, 46, 34, 26, 36, 28, 14, 32,  0, 24,228,  0
};

static const unsigned short far ag_key_jmp[] = {
    0,  0,  0,  0,  1,  0,  6,  9,  0, 15, 17,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0, 44,  0,  0, 50, 53, 57,  0, 67, 71,  0,  0,  0,
    0, 34,  0, 96,101,104,  0, 19, 21, 23, 12, 15, 18, 25, 21, 27, 33, 39,
   24, 27, 31, 73, 36, 82, 90, 39,109,114,122,127,  0,129,131,137,140,  0,
  146,  0,  0,  0,  0,172,176,  0,186,190,  0,  0,201,  0,217,222,225,  0,
   74,148,154,160,165, 77, 80,192, 83,203,211, 86,230,235,243,  0,  0,  0,
    0,272,275,279,  0,289,293,  0,  0,304,  0,320,325,328,  0,106,248,254,
  260,265,109,113,295,116,306,314,119,333,338,346,  0,  0,362,  0,364,369,
    0,351,353,359,139,142,374,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,161,  0,431,434,  0,379,381,383,152,155,385,158,387,393,399,404,409,
  414,163,423,165,439,444,  0,  0,455,  0,457,462,  0,446,452,187,190,467,
    0,  0,  0,  0,  0,  0,  0,199,202,  0,  0,  0,  0,208,  0,472,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,215,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,529,532,  0,474,476,478,230,233,480,236,482,488,494,
  499,504,509,518,521,239,537,542,  0,  0,  0,  0,261,  0,544,546,  0,548,
  550,556,561,566,571,580,588,592,  0,597,  0,599,601,  0,606,608,  0,  0,
    0,  0,612,287,  0,  0,  0,  0,  0,  0,  0,614,616,618,620,293,622,296,
  624,  0,687,690,  0,626,628,630,632,634,636,638,640,646,652,657,662,667,
  676,679,308,695,700,  0,  0,  0,  0,  0,  0,  0,759,762,  0,702,704,706,
  708,330,710,333,712,718,724,729,734,739,748,751,336,767,772,  0,774,776,
  778,780,  0,839,842,  0,782,784,786,788,790,792,798,804,809,814,819,828,
  831,363,847,852,  0,907,910,  0,854,856,858,860,866,872,877,882,887,896,
  899,383,915,920,  0,973,976,  0,922,924,926,932,938,943,948,953,962,965,
  401,981,986,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,1015,1018,  0,1047,
  1050,  0,988,990,992,418,421,994,424,996,1002,1008,1013,427,1022,1027,
  1036,1039,430,1055,1060,1065,  0,1067,1069,1080,  0,1086,1088,1095,1106,
  1112,  0,1120,1122,  0,1127,  0,1132,  0,1134,1136,1138,  0,  0,1155,  0,
  1157,1162,  0,1140,1142,1148,1152,475,478,1167,  0,1172,  0,  0,  0,  0,
  491,1176,  0,1178,1180,  0,1182,1184,  0,1186,  0,1188,  0,1190,  0,  0,
    0,  0,1251,1254,  0,1192,1194,1196,509,1198,1200,1202,1204,1210,1216,
  1221,1226,1231,1240,1243,512,1259,1264,  0
};

static const unsigned short far ag_key_index[] = {
    4,  9, 43, 67,  0, 72, 72, 72, 90,123,  0,  0,  0,145, 67,  0,  0,  0,
  168,168,  0,  0,  0, 72,  0,145,193,205,  0,211, 72,213,228,  0,242,264,
   72, 72,264,266, 72,  0,  0, 72,  0,266,  0,269,  0,  0,  0,  0,279,266,
    0,281,284,213,  0,290,299,  0,211,311, 67,228,242,242,242,264,242,242,
  290,290,290,290,  0,  0,211,211,211,211,211,339,339,358,339,358,311,366,
  386,386,386,386,404, 67,  0,205,205,205,213,433,  0,  0,228,228,  0, 72,
    0,211,  0,211, 72,  0,454, 72,  0,458, 72,  0, 72,  0,464,467,464,467,
   72,  0,213, 72,  0,469,290,211,  0,211,  0,290,  0,  0,  0,471,266,266,
  266,481,489,145,  0,  0,  0,  0,  0,  4,  0,  0,358,  0,290,211,290,211,
  290,211,211,211,211,211,290,211,290,  0,290,  0,  0,  0,290,  0,290,  0,
  211,211,211,211,211,211,290,211,290,211,211,290,211,290,211,290,211,228,
    0,  0,  0,266,  0,213, 72,  0, 72,  0,213,  0,  0, 72,  0, 72,  0,213,
  211,211,213,213,211,  0, 72,  0,  0,213,213,213,213,213,266,  0,266,  0,
  494,497,242,  0,211,311,  0,339,339,211,339,339,311,311,311,311,366,366,
  339,339,339,339,500,311,311,366,386,386,386,386,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,213,213,503,211,266,266,505,  0,507,507,290,211,
  515,213,213,213,213,213,213,290,211,211,211,  0,  0, 72,  0,213,  0,290,
  211,  0,213,  0,  0
};

static const unsigned char far ag_key_ends[] = {
99,116,105,111,110,0, 110,116,0, 116,114,105,110,103,0, 47,0, 
42,0, 61,0, 38,0, 46,0, 61,0, 99,116,105,111,110,0, 
117,116,116,111,110,0, 111,108,111,114,0, 102,97,117,108,116,0, 
115,101,0, 116,114,121,0, 112,108,97,110,97,116,105,111,110,0, 
101,108,100,0, 114,0, 105,103,104,108,105,103,104,116,0, 
111,99,97,116,105,111,110,0, 114,111,109,112,116,0, 114,101,101,110,0, 
122,101,0, 114,105,110,103,0, 105,116,108,101,0, 
97,114,105,97,98,108,101,0, 104,105,108,101,0, 124,0, 47,0, 
99,116,105,111,110,0, 110,116,0, 116,114,105,110,103,0, 42,0, 
99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, 
101,102,97,117,108,116,0, 116,114,121,0, 
112,108,97,110,97,116,105,111,110,0, 101,108,100,0, 114,0, 
105,103,104,108,105,103,104,116,0, 116,0, 111,99,97,116,105,111,110,0, 
114,111,109,112,116,0, 114,101,101,110,0, 122,101,0, 
114,105,110,103,0, 105,116,108,101,0, 97,114,105,97,98,108,101,0, 
104,105,108,101,0, 99,116,105,111,110,0, 117,116,116,111,110,0, 
111,108,111,114,0, 101,102,97,117,108,116,0, 115,101,0, 
116,114,121,0, 112,108,97,110,97,116,105,111,110,0, 101,108,100,0, 
114,0, 105,103,104,108,105,103,104,116,0, 116,0, 
111,99,97,116,105,111,110,0, 114,111,109,112,116,0, 114,101,101,110,0, 
122,101,0, 114,105,110,103,0, 105,116,108,101,0, 
97,114,105,97,98,108,101,0, 104,105,108,101,0, 47,0, 
99,116,105,111,110,0, 111,114,0, 116,0, 114,101,101,110,0, 
114,105,110,103,0, 104,105,108,101,0, 61,0, 38,0, 46,0, 61,0, 
99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, 
110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 
111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
105,116,108,101,0, 124,0, 99,116,105,111,110,0, 111,114,0, 116,0, 
114,101,101,110,0, 114,105,110,103,0, 104,105,108,101,0, 47,0, 
61,0, 38,0, 46,0, 61,0, 99,116,105,111,110,0, 117,116,116,111,110,0, 
111,108,111,114,0, 110,116,114,121,0, 105,101,108,100,0, 
105,103,104,108,105,103,104,116,0, 110,116,0, 
111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
105,116,108,101,0, 124,0, 47,0, 62,0, 47,0, 117,116,116,111,110,0, 
111,108,111,114,0, 110,116,114,121,0, 105,101,108,100,0, 
105,103,104,108,105,103,104,116,0, 111,99,97,116,105,111,110,0, 
105,122,101,0, 105,116,108,101,0, 62,0, 47,0, 104,105,108,101,0, 
47,0, 108,115,101,0, 42,0, 61,0, 38,0, 46,0, 47,0, 61,0, 
124,0, 61,0, 38,0, 46,0, 47,0, 61,0, 61,0, 61,0, 
99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, 
110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 
110,116,0, 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 47,0, 61,0, 
99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, 
110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 
110,116,0, 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
105,116,108,101,0, 124,0, 61,0, 61,0, 61,0, 61,0, 61,0, 38,0, 
46,0, 47,0, 61,0, 99,116,105,111,110,0, 117,116,116,111,110,0, 
111,108,111,114,0, 110,116,114,121,0, 105,101,108,100,0, 
105,103,104,108,105,103,104,116,0, 110,116,0, 
111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
105,116,108,101,0, 124,0, 38,0, 46,0, 47,0, 99,116,105,111,110,0, 
117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0, 
105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0, 
111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
105,116,108,101,0, 124,0, 46,0, 47,0, 99,116,105,111,110,0, 
117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0, 
105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0, 
111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 61,0, 
99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, 
111,0, 115,101,0, 116,114,121,0, 105,101,108,100,0, 
105,103,104,108,105,103,104,116,0, 110,116,0, 
111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
105,116,108,101,0, 104,105,108,101,0, 124,0, 47,0, 
120,112,108,97,110,97,116,105,111,110,0, 114,111,109,112,116,0, 
47,0, 101,102,97,117,108,116,0, 120,112,108,97,110,97,116,105,111,110,0, 
114,111,109,112,116,0, 97,114,105,97,98,108,101,0, 42,0, 
111,108,111,114,0, 111,108,111,114,0, 110,0, 47,0, 62,0, 111,0, 
47,0, 99,116,105,111,110,0, 108,115,101,0, 111,114,0, 116,0, 
114,101,101,110,0, 114,105,110,103,0, 104,105,108,101,0, 
108,115,101,0, 102,0, 47,0, 102,0, 61,0, 61,0, 111,0, 102,0, 
46,0, 61,0, 38,0, 46,0, 61,0, 61,0, 61,0, 99,116,105,111,110,0, 
117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0, 
105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0, 
111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
105,116,108,101,0, 124,0, 
};

#define AG_TCV(x) ag_tcv[(x)]

static const unsigned short far ag_tcv[] = {
   28,193,193,193,193,193,193,193,193, 11, 17, 11, 11, 11,193,193,193,193,
  193,193,193,193,193,193,193,193, 28,193,193,193,193,193, 11,243, 50,204,
  193,241,231,169,213,212,239,237,251,238,193,240,167,194,194,194,194,194,
  194,194,195,195,226,216,207,215,209,227,217,261,261,261,261,261,261,262,
  262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,
  262,203, 70,202,230,262,193,261,261,261,261,261,261,262,262,262,262,262,
  262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,206,208,205,
  242,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
  193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
  193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
  193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
  193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
  193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
  193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
  193,193,193,193
};

#ifndef SYNTAX_ERROR
#define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \
  (PCB).error_message, (PCB).line, (PCB).column)
#endif

#ifndef FIRST_LINE
#define FIRST_LINE 1
#endif

#ifndef FIRST_COLUMN
#define FIRST_COLUMN 1
#endif

#ifndef PARSER_STACK_OVERFLOW
#define PARSER_STACK_OVERFLOW {fprintf(stderr, \
   "\nParser stack overflow, line %d, column %d\n",\
   (PCB).line, (PCB).column);}
#endif

#ifndef REDUCTION_TOKEN_ERROR
#define REDUCTION_TOKEN_ERROR {fprintf(stderr, \
    "\nReduction token error, line %d, column %d\n", \
    (PCB).line, (PCB).column);}
#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 = (dsl_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 = (dsl_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 = (dsl_token_type) ag_key_pt[ag_k1+1];
      break;
    }
    case ag_set_key:
      ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
      (PCB).token_number = (dsl_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 = (dsl_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 = (dsl_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);
  }
}


#ifndef AG_NEWLINE
#define AG_NEWLINE 10
#endif

#ifndef AG_RETURN
#define AG_RETURN 13
#endif

#ifndef AG_FORMFEED
#define AG_FORMFEED 12
#endif

#ifndef AG_TABCHAR
#define AG_TABCHAR 9
#endif

static void ag_track(void) {
  int ag_k = (int) ((PCB).la_ptr - (PCB).pointer);
  while (ag_k--) {
    switch (*(PCB).pointer++) {
    case AG_NEWLINE:
      (PCB).column = 1, (PCB).line++;
    case AG_RETURN:
    case AG_FORMFEED:
      break;
    case AG_TABCHAR:
      (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING);
      break;
    default:
      (PCB).column++;
    }
  }
}


static void ag_prot(void) {
  int ag_k;
  ag_k = 128 - ++(PCB).btsx;
  if (ag_k <= (PCB).ssx) {
    (PCB).exit_flag = AG_STACK_ERROR_CODE;
    PARSER_STACK_OVERFLOW;
    return;
  }
  (PCB).bts[(PCB).btsx] = (PCB).sn;
  (PCB).bts[ag_k] = (PCB).ssx;
  (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx];
  (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx];
  (PCB).cs[ag_k] = (PCB).cs[(PCB).ssx];
}

static void ag_undo(void) {
  if ((PCB).drt == -1) return;
  while ((PCB).btsx) {
    int ag_k = 128 - (PCB).btsx;
    (PCB).sn = (PCB).bts[(PCB).btsx--];
    (PCB).ssx = (PCB).bts[ag_k];
    (PCB).vs[(PCB).ssx] = (PCB).vs[ag_k];
    (PCB).ss[(PCB).ssx] = (PCB).ss[ag_k];
    (PCB).cs[(PCB).ssx] = (PCB).cs[ag_k];
  }
  (PCB).token_number = (dsl_token_type) (PCB).drt;
  (PCB).ssx = (PCB).dssx;
  (PCB).sn = (PCB).dsn;
  (PCB).drt = -1;
}



static const int far ag_rtt[] = {
  102,105,100,  0,152,155,153,156,  0
};

static const unsigned short far ag_tstt[] = {
225,224,223,206,28,18,17,15,11,0,2,12,13,117,197,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
  209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,17,15,14,11,0,
  12,13,
15,11,0,2,12,13,
225,224,223,206,28,18,17,0,8,22,23,24,25,26,27,41,114,115,116,198,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
  209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,17,11,0,20,21,
262,261,15,11,0,2,12,13,117,197,
262,261,15,11,0,2,12,13,117,197,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,195,194,193,
  169,167,70,15,11,0,2,12,13,117,197,
262,261,260,259,258,257,256,255,254,253,252,251,250,249,248,247,243,242,241,
  240,239,238,237,231,230,227,226,225,224,223,221,218,217,216,215,214,213,
  209,208,207,206,205,204,195,194,193,169,167,70,50,18,17,15,11,0,2,12,13,
  117,197,
262,261,260,259,258,257,256,255,254,253,252,251,250,249,248,247,243,242,241,
  240,239,238,237,231,230,227,226,225,224,223,221,218,217,216,215,214,213,
  211,209,208,207,206,205,204,195,194,193,169,167,70,50,28,18,17,15,11,0,
  2,12,13,117,197,
262,261,0,1,166,196,
262,261,0,1,166,196,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,195,194,193,
  169,167,70,0,9,201,222,
262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221,
  218,217,216,214,213,205,195,194,193,169,167,70,50,18,17,0,8,84,85,198,
225,224,223,206,18,17,0,8,23,24,25,41,114,115,116,198,
28,0,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
  209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,11,0,
17,0,
262,261,260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,
  234,233,232,231,230,229,228,227,226,225,224,223,220,217,216,215,213,212,
  210,209,208,207,206,205,204,203,195,194,167,28,18,17,15,11,0,2,12,13,
  117,197,
262,261,260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,
  234,233,232,231,230,229,228,227,226,225,224,223,220,217,216,215,213,212,
  210,209,208,207,206,205,204,203,195,194,167,28,18,17,15,11,0,2,12,13,
  117,197,
262,261,215,195,194,167,0,101,119,166,196,
262,261,215,195,194,167,0,101,119,166,196,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,195,194,193,169,
  167,70,0,
15,11,0,2,12,13,117,197,
206,0,38,39,41,
18,17,0,8,198,
262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221,
  218,217,216,214,213,205,195,194,193,169,167,70,50,0,3,5,6,10,24,33,43,
  49,75,76,80,86,87,88,89,91,92,93,95,96,97,98,99,100,102,105,109,110,114,
  115,116,172,173,199,200,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209,
  208,207,206,205,204,195,194,193,169,167,163,162,70,50,18,17,15,11,0,2,
  12,13,117,197,
262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
  200,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,195,194,193,
  169,167,70,15,11,0,2,12,13,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209,
  208,207,206,205,204,195,194,193,169,167,70,50,18,17,0,3,5,6,8,10,34,38,
  39,40,41,43,49,79,81,82,101,198,199,200,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
  209,208,207,206,205,204,203,202,195,194,193,169,167,72,70,64,63,62,61,
  60,59,58,57,56,55,54,50,11,0,51,53,65,66,67,68,69,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
  209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,17,11,0,46,48,
260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233,
  232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207,
  206,205,204,203,28,18,17,15,11,0,2,12,13,117,197,
204,203,18,17,15,11,0,2,12,13,117,197,
213,15,11,0,2,12,13,117,197,
206,15,11,0,2,12,13,117,197,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,204,203,
  195,194,193,169,167,70,18,17,15,11,0,2,12,13,117,197,
203,0,29,
213,15,11,0,2,12,13,117,197,
213,0,45,
206,0,41,
262,261,15,11,0,2,12,13,117,197,
217,215,0,
204,0,34,
213,0,45,
260,255,254,253,252,250,249,248,205,18,17,0,8,40,174,176,177,178,179,181,
  182,183,184,185,190,198,
262,261,0,1,166,196,
217,215,0,101,107,
215,0,101,
215,0,101,
210,209,208,0,81,82,83,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,210,209,
  208,207,206,205,195,194,193,169,167,70,50,18,17,0,3,5,6,10,31,35,38,39,
  41,43,49,77,78,199,200,201,
206,0,38,39,41,
218,0,98,109,
211,205,18,17,0,8,84,85,198,
205,18,17,0,8,84,85,198,
205,0,40,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,206,
  204,195,194,193,169,167,163,162,70,50,15,11,0,2,12,13,117,197,
262,261,195,194,167,0,119,166,196,
262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
  200,
262,261,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,7,34,38,39,41,45,
  49,101,108,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
217,203,0,29,107,
225,224,223,216,206,205,204,28,18,17,0,34,103,104,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
  209,208,207,206,205,204,203,202,195,194,193,167,72,70,64,63,62,61,60,59,
  58,57,56,55,54,50,11,0,53,65,66,67,68,69,170,
195,194,167,0,
194,167,0,
261,195,194,167,0,74,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209,
  208,207,206,205,204,195,194,193,169,167,70,50,18,17,15,11,0,2,12,13,117,
  197,
260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233,
  232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207,
  206,205,204,203,28,18,17,15,11,0,2,12,13,117,197,
260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233,
  232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207,
  206,205,204,203,28,18,17,15,11,0,2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
213,0,45,154,
262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,151,155,156,166,196,200,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156,
  159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156,
  159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156,
  159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156,
  159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
241,240,239,0,144,145,147,
238,237,0,141,142,
217,203,0,29,107,
236,210,0,83,139,
235,234,233,232,209,207,204,0,34,79,82,133,134,136,137,
235,234,209,207,0,79,82,136,137,
233,232,0,133,134,
231,0,131,
230,0,129,
208,0,81,
229,0,126,
228,227,0,121,124,
225,224,223,216,206,205,28,18,17,0,103,104,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,195,194,193,169,
  167,70,0,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209,
  208,207,206,205,204,195,194,193,169,167,163,162,70,50,18,17,15,11,0,2,
  12,13,117,197,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209,
  208,207,206,205,204,195,194,193,169,167,163,162,70,50,18,17,15,11,0,2,
  12,13,117,197,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209,
  208,207,206,205,204,195,194,193,169,167,163,162,70,50,18,17,15,11,0,2,
  12,13,117,197,
203,0,29,
262,261,260,255,254,253,252,251,250,249,248,246,243,242,241,240,239,238,237,
  236,235,234,233,232,231,230,229,228,227,226,225,224,223,219,218,217,216,
  215,213,212,211,210,209,208,207,206,205,204,203,202,195,194,193,169,167,
  70,50,28,18,17,15,11,0,2,12,13,117,197,
194,167,0,
261,195,194,167,0,73,74,
194,167,0,
194,167,0,
213,0,43,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,15,11,0,2,12,13,117,197,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,30,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
  193,169,167,70,50,0,3,5,6,10,43,49,199,200,201,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
206,15,11,0,2,12,13,117,197,
206,0,41,
259,258,206,205,18,17,0,8,38,39,40,41,188,189,198,
206,15,11,0,2,12,13,117,197,
206,0,41,
259,258,257,256,205,18,17,0,8,40,186,187,188,189,198,
215,15,11,0,2,12,13,117,197,
215,0,101,
215,15,11,0,2,12,13,117,197,
215,0,101,
254,15,11,0,2,12,13,117,197,
254,0,176,184,
254,15,11,0,2,12,13,117,197,
254,0,176,184,
215,15,11,0,2,12,13,117,197,
215,0,101,
18,17,0,8,198,
215,15,11,0,2,12,13,117,197,
215,0,101,
262,261,220,195,194,167,0,111,119,166,196,
262,261,215,213,206,204,195,194,169,167,163,162,50,15,11,0,2,12,13,117,197,
262,261,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,7,34,38,39,41,45,
  49,101,108,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
  200,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,206,
  204,195,194,193,169,167,163,162,70,50,15,11,0,2,12,13,117,197,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
  193,169,167,70,50,0,3,5,6,10,33,43,49,76,199,200,201,
203,0,29,
204,0,34,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
210,209,208,207,205,18,17,0,79,
262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221,
  218,217,216,214,213,195,194,193,169,167,70,50,18,17,0,3,5,6,8,10,24,33,
  43,49,75,76,80,89,91,92,93,95,96,97,98,99,100,102,105,109,110,114,115,
  116,172,173,198,199,200,201,
211,0,90,
262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221,
  218,217,216,214,213,195,194,193,169,167,70,50,18,17,0,3,5,6,8,10,24,33,
  43,49,75,76,80,89,91,92,93,95,96,97,98,99,100,102,105,109,110,114,115,
  116,172,173,198,199,200,201,
212,204,0,34,44,
217,203,0,29,107,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,158,
213,0,45,
262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,150,151,155,156,166,196,200,
225,224,223,206,205,28,18,17,15,11,0,2,12,13,117,197,
169,0,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
235,234,233,232,212,209,207,204,0,34,44,79,82,133,134,136,137,
212,0,44,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,141,142,143,146,148,149,150,151,152,153,155,
  156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,141,142,143,146,148,149,150,151,152,153,155,
  156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156,
  159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,140,141,142,143,148,149,150,151,152,153,155,
  156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,140,141,142,143,148,149,150,151,152,153,155,
  156,159,160,161,164,166,196,200,244,245,
262,261,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,7,34,38,39,41,45,
  49,101,108,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,138,140,141,142,143,148,149,150,151,152,153,
  155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,138,140,141,142,143,148,149,150,151,152,153,
  155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
  200,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
  200,
262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
  200,
262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
  200,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
  200,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
  200,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,135,138,140,141,142,143,148,149,150,151,152,
  153,155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,135,138,140,141,142,143,148,149,150,151,152,
  153,155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,135,138,140,141,142,143,148,149,150,151,152,
  153,155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,108,135,138,140,141,142,143,148,149,150,151,152,
  153,155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,106,108,132,135,138,140,141,142,143,148,149,150,
  151,152,153,155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,106,108,132,135,138,140,141,142,143,148,149,150,
  151,152,153,155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,106,108,130,132,135,138,140,141,142,143,148,149,
  150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,106,108,128,130,132,135,138,140,141,142,143,148,
  149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,106,108,127,128,130,132,135,138,140,141,142,143,
  148,149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,106,108,125,127,128,130,132,135,138,140,141,142,
  143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,101,106,108,123,125,127,128,130,132,135,138,140,141,
  142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,
  245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
261,195,194,167,0,74,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
  209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,17,11,0,46,48,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
212,0,44,
203,0,29,
212,0,44,
18,17,0,8,198,
215,15,11,0,2,12,13,117,197,
215,0,101,
215,15,11,0,2,12,13,117,197,
215,0,101,
18,17,0,8,198,
215,0,101,
215,0,101,
215,15,11,0,2,12,13,117,197,
215,0,101,
215,15,11,0,2,12,13,117,197,
215,0,101,
18,17,0,8,198,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
18,17,0,8,198,
18,17,0,8,198,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
  193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,15,11,0,2,12,13,117,197,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
215,0,101,
216,205,204,18,17,0,34,103,104,
216,205,18,17,0,103,104,
204,0,34,
204,0,34,
204,0,34,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,210,209,
  208,206,205,195,194,193,169,167,70,50,18,17,0,3,5,6,10,31,35,38,39,41,
  43,49,77,78,199,200,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,3,5,6,10,35,38,39,41,43,49,199,200,201,
204,0,34,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
214,206,18,17,15,11,0,2,12,13,117,197,
214,206,18,17,0,8,38,39,41,84,85,198,
260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233,
  232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207,
  206,205,204,203,28,18,17,15,11,0,2,12,13,117,197,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
217,203,0,29,107,
212,204,0,34,44,
241,240,239,0,144,145,147,
241,240,239,0,144,145,147,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
238,237,0,141,142,
238,237,0,141,142,
204,0,34,
204,0,34,
204,0,34,
204,0,34,
204,0,34,
204,0,34,
236,210,0,83,139,
236,210,0,83,139,
236,210,0,83,139,
236,210,0,83,139,
235,234,209,207,204,0,34,79,82,136,137,
235,234,209,207,0,79,82,136,137,
235,234,209,207,0,79,82,136,137,
233,232,0,133,134,
231,0,131,
230,0,129,
208,0,81,
229,0,126,
226,0,122,
204,202,0,32,34,
206,0,38,39,41,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
  193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
  193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
  193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
  193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
  193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,195,194,193,
  169,167,70,0,3,201,
251,0,180,
251,0,180,
251,0,180,
203,0,29,
204,18,17,0,8,34,198,
219,206,204,0,34,112,113,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
210,209,208,205,18,17,0,
210,209,208,205,204,18,17,0,34,
214,0,92,93,
204,202,0,32,34,
246,0,157,
246,212,0,44,157,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
260,255,254,253,252,251,250,249,248,246,235,234,233,232,231,230,229,228,227,
  226,225,224,223,217,216,212,209,208,207,206,205,204,203,28,18,17,15,11,
  0,2,12,13,117,197,
204,18,17,0,8,34,198,
204,18,17,0,8,34,198,
204,18,17,0,8,34,198,
204,18,17,0,8,34,198,
204,18,17,0,8,34,198,
18,17,0,8,198,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,192,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
  193,169,167,70,50,0,3,5,6,43,49,191,199,200,201,
206,15,11,0,2,12,13,117,197,
206,0,38,39,41,
216,205,18,17,0,103,104,
206,0,38,39,41,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
  2,12,13,117,197,
262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
  200,244,245,
262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
203,0,29,
212,0,44,
204,202,0,32,34,

};


static unsigned const char far ag_astt[6809] = {
  8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
  9,9,9,9,9,9,9,9,9,9,9,9,9,1,3,9,7,3,1,1,9,5,3,3,1,1,1,1,1,8,1,1,7,1,0,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,8,1,7,1,1,5,5,1,1,7,1,1,1,1,3,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,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,1,1,7,1,1,1,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,5,1,1,7,1,1,1,1,3,1,1,7,
  1,2,2,1,1,7,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,7,1,1,1,8,8,
  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,8,8,8,8,8,8,8,1,1,7,1,1,1,1,
  1,1,1,1,1,1,5,3,3,3,3,1,1,1,1,1,3,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
  9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,5,3,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,5,5,1,1,7,1,
  1,1,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,1,1,7,1,1,1,1,3,1,1,1,10,10,10,7,1,2,2,
  2,1,1,1,10,10,10,7,1,2,2,2,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
  10,10,10,10,10,4,1,1,5,1,1,1,1,3,1,7,2,1,2,1,1,5,3,1,2,2,2,1,2,2,2,2,2,2,2,
  2,2,2,2,1,1,1,1,1,2,2,1,2,8,2,2,2,2,2,2,2,7,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,5,5,5,5,5,5,5,5,5,5,5,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,1,7,1,1,1,1,3,1,1,1,1,1,2,7,1,1,2,
  1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,
  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,2,2,1,1,1,2,2,2,1,1,
  1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,9,5,3,3,1,1,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,7,2,3,3,3,1,3,2,1,3,2,
  1,1,3,3,3,3,1,1,1,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,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,7,3,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,3,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,
  1,1,7,1,1,1,1,3,5,5,5,5,1,1,7,1,1,1,1,3,5,1,1,7,1,1,1,1,3,5,1,1,7,1,1,1,1,
  3,10,10,10,10,10,10,10,10,10,10,10,10,10,10,5,10,5,5,5,10,10,10,10,10,10,5,
  5,1,1,7,1,1,1,1,3,1,5,1,5,1,1,7,1,1,1,1,3,1,7,1,1,7,2,5,5,1,1,7,1,1,1,1,3,
  4,4,4,1,4,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,7,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  7,1,2,2,1,1,7,1,1,1,7,1,1,7,1,1,1,1,7,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,5,5,5,8,1,5,2,2,2,2,2,2,2,5,5,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,1,1,7,2,
  1,2,1,5,3,1,8,5,1,1,7,1,1,1,1,5,1,1,7,1,1,3,1,1,7,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,1,1,7,1,1,1,1,3,1,1,10,10,10,4,2,2,2,1,
  1,1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,
  2,1,2,1,2,1,2,1,1,1,2,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,5,1,1,5,5,5,1,5,5,
  1,5,5,5,7,1,2,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,2,2,2,2,2,2,2,2,2,2,2,1,1,7,1,1,1,1,1,1,1,10,10,10,5,10,10,5,2,10,
  10,10,5,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,1,1,7,1,1,1,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,1,1,7,1,1,1,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,1,1,7,1,1,1,
  1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,
  1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,7,1,2,1,1,1,1,1,
  2,7,1,2,2,1,2,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,
  2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,
  1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,
  2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,2,1,1,1,2,1,1,
  2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,
  2,1,2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,
  1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,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,2,2,1,1,1,2,2,2,1,1,1,1,1,1,5,1,1,1,1,1,5,1,1,1,1,5,1,1,1,
  1,5,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,5,1,1,1,5,1,1,
  5,1,1,5,1,1,5,1,1,1,5,1,1,5,5,5,1,5,5,5,5,5,7,2,2,10,10,10,10,10,10,10,10,
  10,10,10,10,10,10,10,10,10,10,10,10,10,4,5,5,5,5,5,5,5,5,5,5,5,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,1,7,1,1,1,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,1,1,7,1,1,1,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,1,1,7,1,1,1,1,
  3,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,
  5,5,5,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,1,7,1,1,1,1,3,2,2,
  7,2,1,1,1,7,1,1,2,2,5,2,2,5,2,7,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,1,1,7,1,1,1,1,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
  4,7,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,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,2,2,1,1,1,2,2,2,1,1,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,7,2,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
  1,2,2,2,2,7,1,1,1,1,1,2,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,2,2,1,1,1,2,2,2,1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,1,1,1,1,1,7,3,1,1,1,2,
  1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,5,1,1,7,1,1,1,
  1,3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,1,5,1,1,7,1,1,1,
  1,3,1,7,1,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,
  1,10,10,10,7,1,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,
  2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,
  1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,
  2,7,1,1,1,1,1,2,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,2,2,
  1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,
  3,1,1,1,2,1,2,1,1,1,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,1,1,7,1,1,1,1,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,
  7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,
  2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,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,7,2,3,3,1,1,1,1,1,1,1,1,1,5,1,1,4,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,1,2,2,2,2,2,2,2,5,2,3,3,1,1,1,2,1,2,1,1,1,1,1,4,4,4,1,4,4,4,7,1,2,2,
  2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,1,1,5,1,3,3,3,1,
  3,1,1,1,3,1,1,3,2,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,2,2,1,
  2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,1,1,5,1,3,3,3,1,3,1,
  1,1,3,1,1,3,2,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,3,1,1,7,1,
  1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,7,1,1,1,1,1,1,2,
  7,1,1,2,1,2,1,1,1,1,1,2,2,2,2,1,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,7,2,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,
  1,1,1,1,1,1,1,1,7,1,3,1,1,1,1,1,1,1,7,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,2,1,1,1,
  2,1,1,2,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,2,1,
  1,1,2,1,1,2,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,
  2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
  1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,
  1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,
  2,1,1,1,2,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,
  7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,
  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,
  2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,
  1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2,7,1,1,2,1,
  2,1,1,1,1,1,1,2,2,2,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,
  1,1,1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,2,7,1,1,2,1,2,1,1,
  1,1,1,1,2,2,2,2,1,1,1,1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,
  1,2,2,2,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2,
  7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,
  1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,
  1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,
  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
  1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,
  1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
  1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,
  2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,
  1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,
  3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,
  2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,
  2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,
  1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,
  1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,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,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,
  2,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,2,2,1,1,1,2,2,2,1,
  1,1,2,10,10,10,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,7,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,
  2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,7,1,1,4,1,1,7,2,1,1,7,2,1,5,1,1,7,1,1,1,1,3,
  1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,1,7,1,1,7,1,5,1,1,7,1,1,1,1,3,1,7,
  1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,
  1,1,1,1,2,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,2,2,1,1,1,
  2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,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,2,2,1,1,1,2,2,2,1,1,1,1,1,7,2,1,1,
  1,7,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,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,2,2,1,1,1,2,2,2,1,1,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,7,1,1,1,1,1,1,1,1,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,1,1,7,1,1,1,1,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,7,1,1,5,1,5,5,7,1,2,
  2,1,5,5,5,7,2,2,1,4,1,1,4,1,1,4,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,
  1,5,2,2,2,2,2,2,2,5,5,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,2,2,1,2,1,1,1,1,1,1,4,1,2,2,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,5,
  5,5,5,1,1,7,1,1,1,1,3,8,1,1,1,7,1,2,1,2,1,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,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,
  3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,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,2,2,1,1,1,2,2,2,1,1,1,1,1,4,1,1,1,1,7,
  1,3,1,1,1,4,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,
  1,1,2,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,2,2,1,1,1,2,2,
  2,1,1,1,1,1,4,1,1,1,1,4,1,1,1,4,1,1,4,1,1,4,1,1,4,1,1,4,1,1,4,1,1,1,4,1,1,
  1,1,4,1,1,1,1,4,1,1,1,1,4,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,
  1,1,4,1,1,1,1,1,1,4,1,1,1,4,1,1,4,1,1,4,1,1,4,1,1,7,1,1,1,7,2,1,1,7,2,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,7,1,1,1,1,1,1,1,1,1,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,7,1,1,1,1,1,1,1,1,1,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,7,1,1,1,1,1,1,1,1,1,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,7,1,1,1,1,1,1,1,1,1,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,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,7,1,1,7,1,1,7,1,1,4,1,1,1,1,7,2,1,1,1,8,1,
  7,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,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,2,2,1,1,1,2,2,2,1,1,1,4,4,4,4,4,4,7,4,
  4,4,4,1,4,4,7,1,1,7,1,1,1,1,7,2,1,1,7,1,1,1,7,2,1,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,
  1,2,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,2,2,1,1,1,2,2,2,1,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,5,5,5,
  1,1,7,1,1,1,1,3,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,
  1,1,7,2,1,1,1,1,7,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,
  1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,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,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,
  2,2,2,2,7,1,1,1,1,1,2,1,2,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,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,
  2,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,2,2,1,1,1,2,2,2,1,1,1,
  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,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,7,1,1,1,1,1,1,1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,
  2,1,5,5,5,7,2,2,1,7,2,1,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,
  3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,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,2,2,1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,4,1,1,7,2,1,1,
  7,2,1
};


static const unsigned short far ag_pstt[] = {
3,3,3,3,3,3,3,1,2,0,2,2,1,2,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,1,3,5,
  1,6,1,
1,128,472,128,128,1,
5,6,7,8,15,4,9,3,14,0,14,14,14,14,15,13,12,11,10,9,
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
  16,16,16,16,16,16,16,16,16,17,16,4,16,17,
471,471,1,2,5,2,2,1,2,500,
471,471,1,2,6,2,2,1,2,499,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,1,2,7,2,2,1,2,498,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,8,2,2,1,
  2,481,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,
  9,2,2,1,2,473,
18,19,10,20,130,130,
18,19,11,21,130,130,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,12,24,22,
  23,
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,88,
  26,26,26,26,26,26,26,4,9,13,25,25,26,9,
5,6,7,8,4,9,19,17,17,17,17,13,12,11,10,9,
20,15,
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,11,
12,17,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,18,2,2,1,2,
  537,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,19,2,2,1,2,
  536,
18,19,27,132,132,132,20,28,132,131,131,
18,19,27,132,132,132,21,29,132,131,131,
31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,126,
1,30,471,30,30,1,30,497,
8,24,123,31,35,
4,9,89,87,9,
30,30,30,37,30,30,30,30,30,30,30,30,30,30,30,5,6,7,43,36,30,30,40,41,58,30,
  30,30,30,30,30,47,26,44,22,21,39,57,45,33,32,57,53,52,57,56,58,57,56,54,
  46,57,57,57,55,55,51,50,49,41,48,12,11,10,47,42,35,34,38,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,27,
  2,2,1,2,490,
18,19,27,59,8,47,28,60,63,193,31,35,61,32,62,64,63,63,191,192,130,130,34,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,29,60,83,85,83,77,
  193,31,35,82,32,95,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,1,128,472,
  128,128,1,96,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,27,41,98,97,99,8,101,69,30,
  30,30,30,30,30,47,4,9,31,23,22,21,37,100,39,38,31,34,35,33,32,39,39,39,
  39,9,35,34,38,
49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
  49,49,49,49,49,49,49,103,102,61,60,59,58,57,56,55,54,53,52,51,46,49,32,
  48,50,50,50,105,104,50,
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,44,40,43,43,43,43,43,43,
  43,43,43,43,43,43,43,43,43,43,43,33,42,106,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,1,2,34,2,2,1,2,475,
471,471,471,471,1,2,35,2,2,1,2,474,
471,1,2,36,2,2,1,2,493,
471,1,2,37,2,2,1,2,522,
31,31,31,31,31,31,31,31,31,31,31,31,31,31,471,31,471,471,471,31,31,31,31,31,
  31,471,471,1,2,38,2,2,1,2,476,
107,26,108,
471,1,2,40,2,2,1,2,489,
59,41,109,
8,42,213,
471,471,1,2,43,2,2,1,2,496,
118,118,23,
69,83,110,
59,46,111,
112,115,126,118,120,122,124,129,101,4,9,47,214,212,130,128,125,123,121,119,
  117,114,127,116,113,9,
18,19,48,131,130,130,
132,27,49,134,133,
27,50,135,
27,51,136,
137,98,97,52,140,139,138,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,73,73,73,144,8,73,30,30,
  30,30,30,30,47,73,73,53,23,22,21,141,142,142,33,31,35,33,32,143,144,35,
  34,38,
8,54,103,31,35,
36,111,110,41,
146,88,4,9,56,145,145,146,9,
88,4,9,57,147,147,91,9,
101,58,93,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,1,2,59,2,2,1,2,488,
18,19,132,132,132,183,132,131,131,
18,19,27,59,8,47,61,60,63,193,31,35,61,32,62,148,63,63,191,192,130,130,34,
18,19,27,59,8,69,207,207,65,205,201,201,47,62,60,194,149,194,77,193,31,35,
  82,32,62,194,149,149,194,76,191,192,68,67,66,201,130,130,34,71,70,
132,107,184,150,151,
113,113,113,153,113,113,69,113,113,113,64,152,125,125,
154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
  154,154,154,154,154,154,154,154,154,154,154,154,103,102,61,60,59,58,57,
  56,55,54,53,52,51,154,154,65,154,154,154,105,104,154,154,
208,208,208,198,
206,206,197,
204,202,202,202,196,202,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,69,2,2,1,2,
  479,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,1,2,70,2,2,1,2,520,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,1,2,71,2,2,1,2,519,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,72,
  2,2,1,2,518,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,73,
  2,2,1,2,517,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,74,
  2,2,1,2,513,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,75,
  2,2,1,2,512,
59,76,155,181,
18,19,27,59,8,47,77,60,178,193,31,35,61,32,62,178,191,192,130,130,34,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,78,60,174,149,174,77,
  193,31,35,82,32,62,174,81,80,174,79,78,149,149,174,76,191,192,68,67,66,
  201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,79,60,173,149,173,77,
  193,31,35,82,32,62,173,81,80,173,79,78,149,149,173,76,191,192,68,67,66,
  201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,80,60,172,149,172,77,
  193,31,35,82,32,62,172,81,80,172,79,78,149,149,172,76,191,192,68,67,66,
  201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,81,60,171,149,171,77,
  193,31,35,82,32,62,171,81,80,171,79,78,149,149,171,76,191,192,68,67,66,
  201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,82,60,83,85,83,77,
  193,31,35,82,32,157,62,156,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
158,160,162,162,163,161,159,
74,75,159,165,164,
132,107,184,150,166,
168,137,150,167,169,
170,172,176,178,98,99,69,87,152,175,174,179,177,173,171,
170,172,98,99,145,183,182,181,180,
176,178,143,185,184,
186,141,187,
188,139,189,
97,137,190,
191,135,192,
193,195,133,196,194,
113,113,113,153,113,113,113,113,113,95,124,124,
31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,129,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,97,
  2,2,1,2,483,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,98,
  2,2,1,2,484,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,99,
  2,2,1,2,482,
107,36,108,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,1,2,101,2,2,1,2,480,
67,67,102,
204,197,197,197,103,197,197,
69,69,65,
68,68,64,
41,106,198,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,1,2,107,2,2,1,2,478,
24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,
  108,199,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,109,60,83,85,83,77,
  193,31,35,82,32,200,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,110,
  23,22,21,201,33,32,35,34,38,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,111,60,83,85,83,77,
  193,31,35,82,32,202,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
471,1,2,112,2,2,1,2,535,
8,113,230,
204,206,8,101,4,9,114,231,203,31,208,35,207,205,9,
471,1,2,115,2,2,1,2,530,
8,116,224,
204,206,211,213,101,4,9,117,225,215,214,212,210,209,9,
471,1,2,118,2,2,1,2,528,
27,119,216,
471,1,2,120,2,2,1,2,527,
27,121,217,
471,1,2,122,2,2,1,2,525,
126,123,218,127,
471,1,2,124,2,2,1,2,524,
126,125,219,127,
471,1,2,126,2,2,1,2,529,
27,127,220,
4,9,128,216,9,
471,1,2,129,2,2,1,2,523,
27,130,221,
18,19,222,132,132,132,131,223,132,131,131,
471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,132,2,2,1,2,492,
18,19,27,59,8,69,207,207,65,205,201,201,47,133,60,224,149,224,77,193,31,35,
  82,32,62,224,149,149,224,76,191,192,68,67,66,201,130,130,34,71,70,
18,19,27,59,8,47,134,60,63,193,31,35,61,32,62,225,63,63,191,192,130,130,34,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,135,60,83,85,83,77,
  193,31,35,82,32,226,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
  136,23,22,21,141,227,227,33,31,35,33,32,35,34,38,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,1,2,137,2,2,1,2,485,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
  138,23,22,21,141,228,228,33,31,35,33,32,35,34,38,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
  139,23,22,21,141,229,229,33,31,35,33,32,35,34,38,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,140,
  23,22,21,39,45,33,32,230,35,34,38,
107,32,108,
69,84,231,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
  74,23,22,21,141,232,232,33,31,35,33,32,35,34,38,
80,80,80,99,75,75,75,144,233,
30,30,30,37,30,30,30,30,30,30,30,30,30,30,30,5,6,7,43,36,30,30,40,41,30,30,
  30,30,30,30,47,4,9,89,44,22,21,87,39,96,45,33,32,96,53,52,96,99,54,46,
  96,96,96,55,55,51,50,49,41,48,12,11,10,47,42,9,35,34,38,
234,92,235,
30,30,30,37,30,30,30,30,30,30,30,30,30,30,30,5,6,7,43,36,30,30,40,41,30,30,
  30,30,30,30,47,4,9,89,44,22,21,87,39,95,45,33,32,95,53,52,95,100,54,46,
  95,95,95,55,55,51,50,49,41,48,12,11,10,47,42,9,35,34,38,
236,69,148,152,195,
132,107,149,150,166,
188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
  188,188,188,188,188,188,150,237,
59,151,238,
18,19,27,59,8,47,152,60,239,193,31,35,61,32,62,239,239,191,192,130,130,34,
471,471,471,471,471,471,471,471,1,2,153,2,2,1,2,491,
209,154,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
  155,23,22,21,141,240,240,33,31,35,33,32,35,34,38,
170,172,176,178,236,98,99,69,156,152,195,175,174,179,177,173,171,
236,157,180,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,158,
  2,2,1,2,516,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,159,60,169,149,169,
  77,193,31,35,82,32,62,169,81,80,169,168,79,78,149,149,169,76,191,192,68,
  67,66,201,130,130,34,71,70,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,160,
  2,2,1,2,515,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,161,60,169,149,169,
  77,193,31,35,82,32,62,169,81,80,169,167,79,78,149,149,169,76,191,192,68,
  67,66,201,130,130,34,71,70,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,162,
  2,2,1,2,514,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,163,60,166,149,166,
  77,193,31,35,82,32,62,166,81,80,166,79,78,149,149,166,76,191,192,68,67,
  66,201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,164,60,241,149,241,
  77,193,31,35,82,32,62,241,241,81,80,241,79,78,149,149,241,76,191,192,68,
  67,66,201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,165,60,242,149,242,
  77,193,31,35,82,32,62,242,242,81,80,242,79,78,149,149,242,76,191,192,68,
  67,66,201,130,130,34,71,70,
18,19,27,59,8,69,207,207,65,205,201,201,47,166,60,177,149,177,77,193,31,35,
  243,32,62,177,149,149,177,76,191,192,68,67,66,201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,167,60,83,149,83,77,
  193,31,35,82,32,62,83,244,83,81,80,83,79,78,149,149,83,76,191,192,68,67,
  66,201,130,130,34,71,70,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,168,
  2,2,1,2,511,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,169,60,83,149,83,77,
  193,31,35,82,32,62,83,245,83,81,80,83,79,78,149,149,83,76,191,192,68,67,
  66,201,130,130,34,71,70,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,170,
  2,2,1,2,510,
18,19,27,59,8,47,171,60,63,193,31,35,61,32,62,246,63,63,191,192,130,130,34,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,172,
  2,2,1,2,509,
18,19,27,59,8,47,173,60,63,193,31,35,61,32,62,247,63,63,191,192,130,130,34,
18,19,27,59,8,47,174,60,63,193,31,35,61,32,62,248,63,63,191,192,130,130,34,
18,19,27,59,8,47,175,60,63,193,31,35,61,32,62,249,63,63,191,192,130,130,34,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,176,
  2,2,1,2,508,
18,19,27,59,8,47,177,60,63,193,31,35,61,32,62,250,63,63,191,192,130,130,34,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,178,
  2,2,1,2,507,
18,19,27,59,8,47,179,60,63,193,31,35,61,32,62,251,63,63,191,192,130,130,34,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,180,60,83,149,83,77,
  193,31,35,82,32,62,83,252,84,83,81,80,83,79,78,149,149,83,76,191,192,68,
  67,66,201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,181,60,83,149,83,77,
  193,31,35,82,32,62,83,253,84,83,81,80,83,79,78,149,149,83,76,191,192,68,
  67,66,201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,182,60,83,149,83,77,
  193,31,35,82,32,62,83,254,84,83,81,80,83,79,78,149,149,83,76,191,192,68,
  67,66,201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,183,60,83,149,83,77,
  193,31,35,82,32,62,83,255,84,83,81,80,83,79,78,149,149,83,76,191,192,68,
  67,66,201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,184,60,83,85,83,77,
  193,31,35,82,32,62,256,83,257,86,84,83,81,80,83,79,78,85,85,83,76,191,
  192,68,67,66,201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,185,60,83,85,83,77,
  193,31,35,82,32,62,256,83,258,86,84,83,81,80,83,79,78,85,85,83,76,191,
  192,68,67,66,201,130,130,34,71,70,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,186,
  2,2,1,2,506,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,187,60,83,85,83,77,
  193,31,35,82,32,62,87,83,259,88,86,84,83,81,80,83,79,78,85,85,83,76,191,
  192,68,67,66,201,130,130,34,71,70,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,188,
  2,2,1,2,505,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,189,60,83,85,83,77,
  193,31,35,82,32,62,87,83,260,89,88,86,84,83,81,80,83,79,78,85,85,83,76,
  191,192,68,67,66,201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,190,60,83,85,83,77,
  193,31,35,82,32,62,87,83,261,90,89,88,86,84,83,81,80,83,79,78,85,85,83,
  76,191,192,68,67,66,201,130,130,34,71,70,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,191,
  2,2,1,2,504,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,192,60,83,85,83,77,
  193,31,35,82,32,62,87,83,262,91,90,89,88,86,84,83,81,80,83,79,78,85,85,
  83,76,191,192,68,67,66,201,130,130,34,71,70,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,193,
  2,2,1,2,503,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,194,60,83,85,83,77,
  193,31,35,82,32,62,87,83,263,92,91,90,89,88,86,84,83,81,80,83,79,78,85,
  85,83,76,191,192,68,67,66,201,130,130,34,71,70,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,195,
  2,2,1,2,502,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,196,60,83,85,83,77,
  193,31,35,82,32,264,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
204,72,72,72,70,72,
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,44,45,43,43,43,43,43,43,
  43,43,43,43,43,43,43,43,43,43,43,198,42,106,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
  199,23,22,21,141,265,265,33,31,35,33,32,35,34,38,
236,200,266,
107,27,108,
236,202,102,
4,9,203,234,9,
471,1,2,204,2,2,1,2,534,
27,205,267,
471,1,2,206,2,2,1,2,533,
27,207,268,
4,9,208,222,9,
27,209,269,
27,210,270,
471,1,2,211,2,2,1,2,532,
27,212,271,
471,1,2,213,2,2,1,2,531,
27,214,272,
4,9,215,221,9,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,216,60,83,85,83,77,
  193,31,35,82,32,273,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,217,60,83,85,83,77,
  193,31,35,82,32,274,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
4,9,218,218,9,
4,9,219,217,9,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,220,60,83,85,83,77,
  193,31,35,82,32,275,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,221,
  276,276,276,33,32,277,276,35,34,38,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,1,2,222,2,2,1,2,495,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
  223,23,22,21,141,278,278,33,31,35,33,32,35,34,38,
27,224,279,
153,113,69,113,113,225,152,116,116,
153,113,113,113,226,115,115,
69,112,231,
69,79,231,
69,78,231,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,73,73,73,8,73,30,30,30,
  30,30,30,47,73,73,230,23,22,21,141,142,142,33,31,35,33,32,143,280,35,34,
  38,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
  231,23,22,21,141,29,33,31,35,33,32,35,34,38,
69,85,231,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
  233,23,22,21,141,281,281,33,31,35,33,32,35,34,38,
471,471,471,471,1,2,234,2,2,1,2,486,
282,8,4,9,235,25,97,31,35,25,282,9,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,1,2,236,2,2,1,2,487,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
  237,23,22,21,141,283,283,33,31,35,33,32,35,34,38,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,238,60,83,85,83,77,
  193,31,35,82,32,284,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
132,107,185,150,151,
236,69,240,231,182,
158,160,162,164,163,161,159,
158,160,162,163,163,161,159,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,243,60,83,85,83,77,
  193,31,35,82,32,285,62,156,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
74,75,161,165,164,
74,75,160,165,164,
69,158,152,
69,157,152,
69,156,152,
69,155,152,
69,149,152,
69,148,152,
168,137,154,167,169,
168,137,153,167,169,
168,137,152,167,169,
168,137,151,167,169,
170,172,98,99,69,256,152,175,174,173,171,
170,172,98,99,147,183,182,181,180,
170,172,98,99,146,183,182,181,180,
176,178,144,185,184,
186,142,187,
188,140,189,
97,138,190,
191,136,192,
286,264,287,
69,288,265,25,231,
8,266,119,31,35,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,267,
  276,276,276,33,32,289,276,35,34,38,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,268,
  276,276,276,33,32,290,276,35,34,38,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,269,
  276,276,276,33,32,291,276,35,34,38,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,270,
  276,276,276,33,32,292,276,35,34,38,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,271,
  276,276,276,33,32,293,276,35,34,38,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,272,294,
  38,
295,273,296,
295,274,297,
295,275,298,
107,235,299,
69,4,9,277,215,300,9,
301,302,69,278,231,302,302,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,279,60,83,85,83,77,
  193,31,35,82,32,303,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
82,82,82,77,77,77,280,
81,81,81,76,69,76,76,281,231,
40,282,304,46,
69,288,283,189,231,
305,284,306,
305,236,285,180,306,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,286,
  2,2,1,2,501,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,287,60,83,85,83,77,
  193,31,35,82,32,134,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,
  288,2,2,1,2,477,
69,4,9,289,233,300,9,
69,4,9,290,232,300,9,
69,4,9,291,229,300,9,
69,4,9,292,228,300,9,
69,4,9,293,227,300,9,
4,9,294,226,9,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,295,
  2,2,1,2,526,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,296,60,83,85,83,77,
  193,31,35,82,32,220,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,297,60,83,85,83,77,
  193,31,35,82,32,219,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,298,60,83,85,83,77,
  193,31,35,82,32,223,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
  240,240,240,240,240,240,299,307,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,300,
  308,308,308,33,32,308,35,34,38,
471,1,2,301,2,2,1,2,494,
8,302,122,31,35,
153,113,113,113,303,117,117,
8,304,101,31,35,
471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,305,
  2,2,1,2,521,
18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,306,60,83,85,83,77,
  193,31,35,82,32,309,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
  307,23,22,21,141,310,310,33,31,35,33,32,35,34,38,
107,236,299,
236,309,187,
69,288,310,241,231,

};


static const unsigned short far ag_sbt[] = {
     0,  15,  56,  62,  82, 121, 131, 141, 171, 231, 293, 299, 305, 331,
   370, 386, 388, 424, 426, 485, 544, 555, 566, 588, 596, 601, 606, 675,
   718, 741, 803, 832, 886, 941, 980,1032,1044,1053,1062,1097,1100,1109,
  1112,1115,1125,1128,1131,1134,1160,1166,1171,1174,1177,1184,1233,1238,
  1242,1251,1259,1262,1299,1308,1331,1372,1377,1391,1445,1449,1452,1458,
  1499,1551,1603,1628,1653,1678,1703,1707,1728,1778,1828,1878,1928,1990,
  1997,2002,2007,2012,2027,2036,2041,2044,2047,2050,2053,2058,2070,2092,
  2135,2178,2221,2224,2292,2295,2302,2305,2308,2311,2344,2371,2433,2467,
  2529,2538,2541,2556,2565,2568,2583,2592,2595,2604,2607,2616,2620,2629,
  2633,2642,2645,2650,2659,2662,2673,2694,2735,2758,2820,2860,2897,2937,
  2977,3013,3016,3019,3059,3068,3137,3140,3209,3214,3219,3246,3249,3271,
  3287,3289,3329,3346,3349,3374,3425,3450,3501,3526,3576,3627,3678,3719,
  3771,3796,3848,3873,3896,3921,3944,3967,3990,4015,4038,4063,4086,4139,
  4192,4245,4298,4353,4408,4433,4489,4514,4571,4629,4654,4713,4738,4798,
  4823,4885,4891,4930,4970,4973,4976,4979,4984,4993,4996,5005,5008,5013,
  5016,5019,5028,5031,5040,5043,5048,5110,5172,5177,5182,5244,5279,5312,
  5352,5355,5364,5371,5374,5377,5380,5428,5467,5470,5510,5522,5534,5586,
  5626,5688,5693,5698,5705,5712,5774,5779,5784,5787,5790,5793,5796,5799,
  5802,5807,5812,5817,5822,5833,5842,5851,5856,5859,5862,5865,5868,5871,
  5876,5881,5916,5951,5986,6021,6056,6081,6084,6087,6090,6093,6100,6107,
  6169,6176,6185,6189,6194,6197,6202,6227,6289,6333,6340,6347,6354,6361,
  6368,6373,6398,6460,6522,6584,6611,6645,6654,6659,6666,6671,6696,6758,
  6798,6801,6804,6809
};


static const unsigned short far ag_sbe[] = {
     9,  53,  58,  69, 118, 125, 135, 165, 225, 287, 295, 301, 327, 365,
   376, 387, 423, 425, 479, 538, 550, 561, 587, 590, 597, 603, 638, 712,
   724, 758, 827, 865, 933, 977,1026,1038,1047,1056,1091,1098,1103,1110,
  1113,1119,1127,1129,1132,1145,1162,1168,1172,1175,1180,1216,1234,1239,
  1246,1254,1260,1293,1304,1314,1344,1374,1387,1437,1448,1451,1456,1493,
  1545,1597,1622,1647,1672,1697,1704,1713,1745,1795,1845,1895,1945,1993,
  1999,2004,2009,2019,2031,2038,2042,2045,2048,2051,2055,2067,2091,2129,
  2172,2215,2222,2286,2294,2299,2304,2307,2309,2338,2369,2388,2457,2484,
  2532,2539,2547,2559,2566,2575,2586,2593,2598,2605,2610,2617,2623,2630,
  2636,2643,2647,2653,2660,2668,2688,2707,2741,2775,2845,2891,2922,2962,
  3001,3014,3017,3044,3066,3101,3138,3173,3211,3216,3244,3247,3255,3281,
  3288,3314,3337,3347,3368,3391,3444,3467,3520,3543,3593,3644,3691,3736,
  3790,3813,3867,3879,3915,3927,3950,3973,4009,4021,4057,4069,4103,4156,
  4209,4262,4315,4370,4427,4450,4508,4531,4588,4648,4671,4732,4755,4817,
  4840,4889,4927,4955,4971,4974,4977,4981,4987,4994,4999,5006,5010,5014,
  5017,5022,5029,5034,5041,5045,5065,5127,5174,5179,5199,5268,5306,5337,
  5353,5360,5368,5372,5375,5378,5411,5453,5468,5495,5516,5526,5580,5611,
  5643,5690,5695,5701,5708,5729,5776,5781,5785,5788,5791,5794,5797,5800,
  5804,5809,5814,5819,5827,5837,5846,5853,5857,5860,5863,5866,5869,5873,
  5877,5905,5940,5975,6010,6045,6078,6082,6085,6088,6091,6096,6103,6124,
  6175,6183,6186,6191,6195,6199,6221,6244,6327,6336,6343,6350,6357,6364,
  6370,6392,6415,6477,6539,6609,6635,6648,6655,6663,6667,6690,6713,6783,
  6799,6802,6806,6809
};


static const unsigned char far ag_fl[] = {
  2,1,1,2,1,2,2,1,1,2,0,1,3,1,1,1,1,2,0,1,2,1,1,1,0,5,1,3,1,3,1,2,1,1,2,
  1,2,2,2,2,2,1,2,1,0,3,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,
  2,1,2,0,1,2,4,4,3,3,2,4,4,1,1,2,1,2,0,1,0,2,2,4,1,3,3,4,1,3,3,6,4,2,1,
  1,1,1,1,1,2,1,3,0,1,4,4,6,1,5,0,1,6,3,5,5,1,1,2,3,1,2,2,1,5,1,3,1,3,1,
  3,1,3,1,3,1,3,3,3,3,1,3,3,3,3,3,3,3,3,1,3,3,1,3,3,1,3,3,3,1,1,2,2,2,2,
  1,1,3,2,1,3,2,3,1,1,3,1,7,0,5,1,1,1,1,2,3,1,1,1,1,1,1,2,1,1,1,2,1,2,3,
  1,1,2,2,2,5,3,4,4,6,6,4,4,5,2,2,5,5,5,5,2,2,5,5,3,1,3,1,1,1,0,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,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,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,2,2,2,2,2,2,2,2
};

static const unsigned short far ag_ptt[] = {
    0,  2,  2, 12, 13, 13, 13,198, 20, 20, 21, 21,198, 25, 25, 25, 26, 26,
   27, 27, 22, 10, 10, 10, 30, 10, 33, 33, 31, 31,201,201, 35, 35, 38, 39,
   39, 39, 39, 39,199, 43, 43, 46, 48, 46,200, 49, 49, 51, 51, 53, 53, 53,
   53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 65, 65, 65, 67, 68, 69, 66, 73,
   73, 78, 78, 75, 75, 75, 75, 75, 80, 80, 80, 76, 77, 77, 84, 84, 85, 85,
   88, 88, 88, 23, 86, 86, 86, 86, 87, 87, 87, 87, 92, 91, 89, 89, 89, 89,
   89, 99, 99, 89, 95,104,104, 95, 95, 95,102, 98,113,113, 96, 24, 24, 24,
  222,117,117,222,  1,  1,  1, 94, 94,120,120,123,123,125,125,127,127,128,
  128,130,130,130,130,130,132,132,132,132,132,132,132,132,132,135,135,135,
  138,138,138,140,140,140,140,146,143,143,143,143,143,108,108,108,108,108,
  108,108,154,152,106,106,150,150,158,150,151,151,151,151,151,151,244,244,
  244,164,164,159,159, 74, 74,160,160,161,161,245,170,170, 97,172,172,172,
  172,172,172,172,172,172,172,176,182,182,182,182,182,182,183,183,183,183,
  183,175,175,191,191,191,192,191,119, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19, 19, 19, 19,
   19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
   19, 19, 19, 19, 19, 19, 19, 19, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
   36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37,
   37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 42, 42, 42,
   42, 42, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
   47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
   52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
   52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 71, 71,118,
  118,165,165,165,168,168,171,171,171,171,171,171,171,171,171,171,171,171,
  171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
  171,171,171,197,197,  8,  6,  5,  3, 32, 29, 34, 40, 41, 79, 81, 82, 83,
   90, 44, 45, 93,101,103,107,109,112,111,110,  9,114,115,116,122,121,124,
  126,129,131,133,134,136,137,139,141,142,144,145,147,148,149,  4,  7,157,
  173,174,177,178,180,179,181,184,185,186,187,188,189,190,166,196
};

static const unsigned short far  *ag_valid(int ag_k) {
  const unsigned short far  *ag_tp = &ag_tstt[ag_sbt[(PCB).sn+1]];
  while (*--ag_tp != (unsigned short) ag_k) if (*ag_tp == 0) return NULL;
  return ag_tp;
}

int dsl_change_reduction(dsl_token_type ag_k) {
  if (!ag_valid(ag_k)) return 0;
  (PCB).reduction_token = ag_k;
  return 1;
}

static void ag_default(const  int *ag_tp) {
  (PCB).ag_dsn = (PCB).sn;
  (PCB).ag_dtl = ag_tp;
  while (!ag_valid((dsl_token_type) *ag_tp)) ag_tp++;
  (PCB).reduction_token = (dsl_token_type) *ag_tp;
}



static void ag_ra(void)
{
  switch(ag_rpx[(PCB).ag_ap]) {
    case 1: ag_rp_1(); break;
    case 2: ag_rp_2(); break;
    case 3: ag_rp_3(); break;
    case 4: ag_rp_4(); break;
    case 5: ag_rp_5(); break;
    case 6: ag_rp_6(V(0,(int *))); break;
    case 7: ag_rp_7(V(1,(int *))); break;
    case 8: ag_rp_8(); break;
    case 9: ag_rp_9(); break;
    case 10: ag_rp_10(); break;
    case 11: ag_rp_11(); break;
    case 12: ag_rp_12(); break;
    case 13: ag_rp_13(V(0,(int *))); break;
    case 14: ag_rp_14(); break;
    case 15: ag_rp_15(); break;
    case 16: ag_rp_16(); break;
    case 17: ag_rp_17(V(0,(int *))); break;
    case 18: ag_rp_18(V(0,(int *))); break;
    case 19: V(0,(int *)) = ag_rp_19(); break;
    case 20: V(0,(int *)) = ag_rp_20(); break;
    case 21: V(0,(int *)) = ag_rp_21(); break;
    case 22: V(0,(int *)) = ag_rp_22(); break;
    case 23: V(0,(int *)) = ag_rp_23(); break;
    case 24: V(0,(int *)) = ag_rp_24(); break;
    case 25: V(0,(int *)) = ag_rp_25(); break;
    case 26: V(0,(int *)) = ag_rp_26(); break;
    case 27: V(0,(int *)) = ag_rp_27(); break;
    case 28: V(0,(int *)) = ag_rp_28(); break;
    case 29: V(0,(int *)) = ag_rp_29(); break;
    case 30: V(0,(int *)) = ag_rp_30(V(1,(int *))); break;
    case 31: V(0,(int *)) = ag_rp_31(V(0,(int *)), V(1,(int *))); break;
    case 32: V(0,(int *)) = ag_rp_32(V(0,(int *)), V(1,(int *))); break;
    case 33: V(0,(int *)) = ag_rp_33(V(1,(long *))); break;
    case 34: V(0,(long *)) = ag_rp_34(V(0,(long *)), V(1,(long *))); break;
    case 35: ag_rp_35(); break;
    case 36: ag_rp_36(); break;
    case 37: ag_rp_37(V(0,(char * *))); break;
    case 38: ag_rp_38(V(0,(char * *))); break;
    case 39: ag_rp_39(V(0,(char * *))); break;
    case 40: V(0,(char * *)) = ag_rp_40(); break;
    case 41: V(0,(char * *)) = ag_rp_41(); break;
    case 42: V(0,(char * *)) = ag_rp_42(V(0,(char * *))); break;
    case 43: ag_rp_43(); break;
    case 44: ag_rp_44(); break;
    case 45: ag_rp_45(); break;
    case 46: ag_rp_46(V(0,(int *))); break;
    case 47: V(0,(int *)) = ag_rp_47(V(2,(int *))); break;
    case 48: V(0,(int *)) = ag_rp_48(V(2,(int *))); break;
    case 49: V(0,(int *)) = ag_rp_49(V(0,(int *)), V(4,(int *))); break;
    case 50: V(0,(int *)) = ag_rp_50(V(2,(long *))); break;
    case 51: V(0,(int *)) = ag_rp_51(V(0,(int *))); break;
    case 52: ag_rp_52(V(0,(unsigned *))); break;
    case 53: ag_rp_53(V(0,(unsigned *)), V(2,(long *))); break;
    case 54: ag_rp_54(V(0,(unsigned *))); break;
    case 55: ag_rp_55(V(0,(unsigned *)), V(2,(long *)), V(4,(long *))); break;
    case 56: ag_default(&ag_rtt[0]); V(0,(unsigned *)) = ag_rp_56(); break;
    case 57: ag_rp_57(V(2,(long *))); break;
    case 58: ag_rp_58(); break;
    case 59: ag_rp_59(V(1,(int *))); break;
    case 60: ag_rp_60(V(3,(long *))); break;
    case 61: ag_rp_61(); break;
    case 62: V(0,(int *)) = ag_rp_62(); break;
    case 63: V(0,(int *)) = ag_rp_63(V(0,(int *))); break;
    case 64: ag_rp_64(V(0,(int *))); break;
    case 65: ag_rp_65(V(1,(int *))); break;
    case 66: ag_rp_66(V(1,(int *))); break;
    case 67: V(0,(long *)) = ag_rp_67(V(0,(long *)), V(2,(long *)), V(4,(long *))); break;
    case 68: V(0,(long *)) = ag_rp_68(V(0,(long *)), V(2,(long *))); break;
    case 69: V(0,(long *)) = ag_rp_69(V(0,(long *)), V(2,(long *))); break;
    case 70: V(0,(long *)) = ag_rp_70(V(0,(long *)), V(2,(long *))); break;
    case 71: V(0,(long *)) = ag_rp_71(V(0,(long *)), V(2,(long *))); break;
    case 72: V(0,(long *)) = ag_rp_72(V(0,(long *)), V(2,(long *))); break;
    case 73: V(0,(long *)) = ag_rp_73(V(0,(long *)), V(2,(long *))); break;
    case 74: V(0,(long *)) = ag_rp_74(V(0,(long *)), V(2,(long *))); break;
    case 75: V(0,(long *)) = ag_rp_75(); break;
    case 76: V(0,(long *)) = ag_rp_76(); break;
    case 77: V(0,(long *)) = ag_rp_77(V(0,(long *)), V(2,(long *))); break;
    case 78: V(0,(long *)) = ag_rp_78(V(0,(long *)), V(2,(long *))); break;
    case 79: V(0,(long *)) = ag_rp_79(V(0,(long *)), V(2,(long *))); break;
    case 80: V(0,(long *)) = ag_rp_80(V(0,(long *)), V(2,(long *))); break;
    case 81: V(0,(long *)) = ag_rp_81(); break;
    case 82: V(0,(long *)) = ag_rp_82(); break;
    case 83: V(0,(long *)) = ag_rp_83(); break;
    case 84: V(0,(long *)) = ag_rp_84(); break;
    case 85: V(0,(long *)) = ag_rp_85(V(0,(long *)), V(2,(long *))); break;
    case 86: V(0,(long *)) = ag_rp_86(V(0,(long *)), V(2,(long *))); break;
    case 87: V(0,(long *)) = ag_rp_87(V(0,(long *)), V(2,(long *))); break;
    case 88: V(0,(long *)) = ag_rp_88(V(0,(long *)), V(2,(long *))); break;
    case 89: V(0,(long *)) = ag_rp_89(V(0,(long *)), V(2,(long *))); break;
    case 90: V(0,(long *)) = ag_rp_90(V(0,(long *)), V(2,(long *))); break;
    case 91: V(0,(long *)) = ag_rp_91(V(0,(long *)), V(2,(long *))); break;
    case 92: V(0,(long *)) = ag_rp_92(V(0,(long *))); break;
    case 93: V(0,(long *)) = ag_rp_93(V(1,(long *))); break;
    case 94: V(0,(long *)) = ag_rp_94(V(1,(long *))); break;
    case 95: V(0,(long *)) = ag_rp_95(V(1,(long *))); break;
    case 96: V(0,(long *)) = ag_rp_96(V(1,(long *))); break;
    case 97: V(0,(long *)) = ag_rp_97(V(2,(long *))); break;
    case 98: V(0,(long *)) = ag_rp_98(); break;
    case 99: V(0,(long *)) = ag_rp_99(V(1,(long *))); break;
    case 100: V(0,(long *)) = ag_rp_100(V(0,(long *))); break;
    case 101: ag_default(&ag_rtt[4]); V(0,(long *)) = ag_rp_101(); break;
    case 102: ag_rp_102(); break;
    case 103: ag_rp_103(V(3,(long *)), V(5,(long *))); break;
    case 104: ag_rp_104(); break;
    case 105: ag_rp_105(); break;
    case 106: ag_rp_106(V(0,(long *))); break;
    case 107: ag_rp_107(V(0,(long *))); break;
    case 108: ag_rp_108(); break;
    case 109: ag_rp_109(V(1,(long *))); break;
    case 110: V(0,(long *)) = ag_rp_110(); break;
    case 111: V(0,(long *)) = ag_rp_111(V(0,(long *)), V(1,(long *))); break;
    case 112: V(0,(long *)) = ag_rp_112(V(0,(int *))); break;
    case 113: V(0,(long *)) = ag_rp_113(); break;
    case 114: V(0,(long *)) = ag_rp_114(V(0,(long *)), V(1,(int *))); break;
    case 115: V(0,(long *)) = ag_rp_115(V(0,(int *))); break;
    case 116: V(0,(long *)) = ag_rp_116(V(0,(long *)), V(1,(int *))); break;
    case 117: V(0,(int *)) = ag_rp_117(V(1,(int *))); break;
    case 118: ag_rp_118(V(0,(screen_descriptor * *))); break;
    case 119: V(0,(screen_descriptor * *)) = ag_rp_119(); break;
    case 120: V(0,(screen_descriptor * *)) = ag_rp_120(V(0,(screen_descriptor * *))); break;
    case 121: V(0,(screen_descriptor * *)) = ag_rp_121(V(0,(screen_descriptor * *)), V(1,(int *))); break;
    case 122: V(0,(screen_descriptor * *)) = ag_rp_122(V(0,(screen_descriptor * *)), V(2,(int *))); break;
    case 123: V(0,(screen_descriptor * *)) = ag_rp_123(V(0,(screen_descriptor * *)), V(2,(int *))); break;
    case 124: V(0,(screen_descriptor * *)) = ag_rp_124(V(0,(screen_descriptor * *)), V(3,(long *)), V(5,(long *))); break;
    case 125: V(0,(screen_descriptor * *)) = ag_rp_125(V(0,(screen_descriptor * *)), V(3,(long *)), V(5,(long *))); break;
    case 126: V(0,(screen_descriptor * *)) = ag_rp_126(V(0,(screen_descriptor * *)), V(1,(query_item * *))); break;
    case 127: V(0,(screen_descriptor * *)) = ag_rp_127(V(0,(screen_descriptor * *)), V(1,(query_item * *))); break;
    case 128: V(0,(int *)) = ag_rp_128(V(2,(long *)), V(4,(long *))); break;
    case 129: V(0,(query_item * *)) = ag_rp_129(); break;
    case 130: V(0,(query_item * *)) = ag_rp_130(V(0,(query_item * *))); break;
    case 131: V(0,(query_item * *)) = ag_rp_131(V(0,(query_item * *))); break;
    case 132: V(0,(query_item * *)) = ag_rp_132(V(0,(query_item * *))); break;
    case 133: V(0,(query_item * *)) = ag_rp_133(V(0,(query_item * *))); break;
    case 134: V(0,(query_item * *)) = ag_rp_134(); break;
    case 135: V(0,(query_item * *)) = ag_rp_135(V(0,(query_item * *))); break;
    case 136: V(0,(query_item * *)) = ag_rp_136(V(0,(query_item * *))); break;
    case 137: V(0,(query_item * *)) = ag_rp_137(V(0,(query_item * *))); break;
    case 138: ag_rp_138(); break;
    case 139: ag_rp_139(); break;
    case 140: ag_rp_140(); break;
    case 141: ag_rp_141(); break;
  }
  (PCB).la_ptr = (PCB).pointer;
}

#define TOKEN_NAMES dsl_token_names
const char *const dsl_token_names[263] = {
  "script file",
  "name",
  "ws",
  "literal",
  "integer constant",
  "string literal",
  "paren string",
  "character constant",
  "eol",
  "literals",
  "word",
  "white",
  "comment",
  "comment head",
  "\"*/\"",
  "\"/*\"",
  "",
  "'\\n'",
  "\"//\"",
  "not eol",
  "",
  "",
  "script file",
  "execution block",
  "declaration",
  "",
  "",
  "",
  "eof",
  "'['",
  "",
  "parameter string",
  "']'",
  "string",
  "'#'",
  "param word",
  "",
  "text char",
  "action text",
  "action text head",
  "'}'",
  "'{'",
  "operator",
  "paren string chars",
  "')'",
  "'('",
  "paren string char",
  "not paren",
  "",
  "string chars",
  "'\\\"'",
  "string char",
  "not double quote",
  "escape sequence",
  "\"\\\\a\"",
  "\"\\\\b\"",
  "\"\\\\f\"",
  "\"\\\\n\"",
  "\"\\\\r\"",
  "\"\\\\t\"",
  "\"\\\\v\"",
  "\"\\\\\\\\\"",
  "\"\\\\?\"",
  "\"\\\\\\'\"",
  "\"\\\\\\\"\"",
  "octal escape",
  "hex escape",
  "one octal",
  "two octal",
  "three octal",
  "'\\\\'",
  "",
  "\"\\\\x\"",
  "hex number",
  "hex digit",
  "command",
  "identifier",
  "parameters",
  "",
  "'<'",
  "piped command",
  "'|'",
  "'>'",
  "\">>\"",
  "",
  "",
  "command sequence",
  "if sequence",
  "",
  "statement",
  "\"else\"",
  "if statement",
  "if condition",
  "\"if\"",
  "conditional exp",
  "assignment",
  "for statement",
  "screen description",
  "while statement",
  "",
  "undeclared variable",
  "'='",
  "integer variable",
  "';'",
  "",
  "string variable",
  "string exp",
  "'@'",
  "primary exp",
  "\"while\"",
  "\"for\"",
  "\"in\"",
  "\"do\"",
  "",
  "\"action\"",
  "\"int\"",
  "\"string\"",
  "",
  "letter",
  "digit",
  "logical or exp",
  "'\\?'",
  "':'",
  "logical and exp",
  "\"||\"",
  "inclusive or exp",
  "\"&&\"",
  "exclusive or exp",
  "and exp",
  "'^'",
  "equality exp",
  "'&'",
  "relational exp",
  "\"==\"",
  "\"!=\"",
  "shift exp",
  "\"<=\"",
  "\">=\"",
  "additive exp",
  "\"<<\"",
  "multiplicative exp",
  "'+'",
  "'-'",
  "unary exp",
  "'*'",
  "'/'",
  "nonzero",
  "'%'",
  "'~'",
  "'!'",
  "string term",
  "string element",
  "numeric name",
  "built_in name",
  "built_in argument",
  "string name",
  "undefined name",
  "\"..\"",
  "",
  "hex constant",
  "octal constant",
  "decimal constant",
  "\"0x\"",
  "\"0X\"",
  "",
  "",
  "",
  "'0'",
  "",
  "'\\''",
  "char constant element",
  "not single quote",
  "screen items",
  "\"screen\"",
  "\"title\"",
  "formula",
  "color spec",
  "\"entry\"",
  "\"highlight\"",
  "\"size\"",
  "','",
  "\"location\"",
  "query line",
  "button line",
  "\"color\"",
  "\"field\"",
  "\"variable\"",
  "\"default\"",
  "\"prompt\"",
  "\"explanation\"",
  "\"button\"",
  "formula element",
  "",
  "",
  "",
  "",
  "",
  "",
  "eol",
  "paren string",
  "string literal",
  "literal",
  "']'",
  "'['",
  "'#'",
  "'}'",
  "'{'",
  "'<'",
  "'|'",
  "'>'",
  "\">>\"",
  "\"else\"",
  "')'",
  "'('",
  "\"if\"",
  "'='",
  "';'",
  "'@'",
  "\"while\"",
  "\"do\"",
  "\"in\"",
  "\"for\"",
  "literals",
  "\"action\"",
  "\"int\"",
  "\"string\"",
  "':'",
  "'\\?'",
  "\"||\"",
  "\"&&\"",
  "'^'",
  "'&'",
  "\"==\"",
  "\"!=\"",
  "\"<=\"",
  "\">=\"",
  "\"<<\"",
  "'+'",
  "'-'",
  "'*'",
  "'/'",
  "'%'",
  "'~'",
  "'!'",
  "integer constant",
  "character constant",
  "\"..\"",
  "\"screen\"",
  "\"title\"",
  "\"entry\"",
  "\"highlight\"",
  "','",
  "\"size\"",
  "\"location\"",
  "\"color\"",
  "\"field\"",
  "\"variable\"",
  "\"default\"",
  "\"prompt\"",
  "\"explanation\"",
  "\"button\"",
  "",
  "",

};

#ifndef MISSING_FORMAT
#define MISSING_FORMAT "Missing %s"
#endif
#ifndef UNEXPECTED_FORMAT
#define UNEXPECTED_FORMAT "Unexpected %s"
#endif
#ifndef UNNAMED_TOKEN
#define UNNAMED_TOKEN "input"
#endif


static void ag_diagnose(void) {
  int ag_snd = (PCB).sn;
  int ag_k = ag_sbt[ag_snd];

  if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) {
    sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
  }
  else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8
          && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1
          && *TOKEN_NAMES[ag_tstt[ag_k]]) {
    sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
  }
  else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) {
    sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]);
  }
  else if (isprint(INPUT_CODE((*(PCB).pointer))) && INPUT_CODE((*(PCB).pointer)) != '\\') {
    char buf[20];
    sprintf(buf, "\'%c\'", (char) INPUT_CODE((*(PCB).pointer)));
    sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf);
  }
  else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN);
  (PCB).error_message = (PCB).ag_msg;


}
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;
  (PCB).btsx = 0, (PCB).drt = -1;
  do {
    ag_track();
    (PCB).token_number = (dsl_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 == (dsl_token_type) ag_t);
  (PCB).la_ptr =  (PCB).pointer;
  return 1;
}

static int ag_action_11_proc(void) {
  int ag_t = (PCB).token_number;

  (PCB).btsx = 0, (PCB).drt = -1;
  do {
    (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
    (PCB).ssx--;
    ag_track();
    ag_ra();
    if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
    (PCB).ssx++;
    (PCB).token_number = (dsl_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 == (dsl_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];
  (PCB).btsx = 0, (PCB).drt = -1;
  (PCB).reduction_token = (dsl_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];
  (PCB).btsx = 0, (PCB).drt = -1;
  (PCB).reduction_token = (dsl_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];
  (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
  return 1;
}

static int ag_action_2_proc(void) {
  (PCB).btsx = 0, (PCB).drt = -1;
  if ((PCB).ssx >= 128) {
    (PCB).exit_flag = AG_STACK_ERROR_CODE;
    PARSER_STACK_OVERFLOW;
  }
  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
  GET_CONTEXT;
  (PCB).ss[(PCB).ssx] = (PCB).sn;
  (PCB).ssx++;
  (PCB).sn = (PCB).ag_ap;
  ag_track();
  return 0;
}

static int ag_action_9_proc(void) {
  if ((PCB).drt == -1) {
    (PCB).drt=(PCB).token_number;
    (PCB).dssx=(PCB).ssx;
    (PCB).dsn=(PCB).sn;
  }
  ag_prot();
  (PCB).vs[(PCB).ssx] = ag_null_value;
  GET_CONTEXT;
  (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;
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_1_proc(void) {
  ag_track();
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_1_r_proc(void) {
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_1_s_proc(void) {
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_4_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
  (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
  (PCB).btsx = 0, (PCB).drt = -1;
  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  else GET_CONTEXT;
  (PCB).ss[(PCB).ssx] = (PCB).sn;
  ag_track();
  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 short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
      else ag_t2 = ag_tx;
    } while (ag_t1 < ag_t2);
    if (ag_tstt[ag_t1] != (PCB).reduction_token) {
      (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; 
      REDUCTION_TOKEN_ERROR; break;}
      (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;
  (PCB).btsx = 0, (PCB).drt = -1;
  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  else GET_CONTEXT;
  (PCB).ss[(PCB).ssx] = (PCB).sn;
  ag_track();
  (PCB).reduction_token = (dsl_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 short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
      else ag_t2 = ag_tx;
    } while (ag_t1 < ag_t2);
    if (ag_tstt[ag_t1] != (PCB).reduction_token) {
      (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; 
      REDUCTION_TOKEN_ERROR; break;}
      (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_undo();
  (PCB).la_ptr =  (PCB).pointer;
  (PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
  ag_diagnose();
  SYNTAX_ERROR;
  {(PCB).la_ptr = (PCB).pointer + 1; ag_track();}
  return (PCB).exit_flag == AG_RUNNING_CODE;
}

static int ag_action_5_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap];
  (PCB).btsx = 0, (PCB).drt = -1;
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  else {
    GET_CONTEXT;
    (PCB).ss[(PCB).ssx] = (PCB).sn;
  }
  (PCB).la_ptr =  (PCB).pointer;
  (PCB).reduction_token = (dsl_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 short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
      else ag_t2 = ag_tx;
    } while (ag_t1 < ag_t2);
    if (ag_tstt[ag_t1] != (PCB).reduction_token) {
      (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; 
      REDUCTION_TOKEN_ERROR; break;}
      (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];
  (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
  if ((PCB).drt == -1) {
    (PCB).drt=(PCB).token_number;
    (PCB).dssx=(PCB).ssx;
    (PCB).dsn=(PCB).sn;
  }
  if (ag_sd) {
    (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  }
  else {
    ag_prot();
    (PCB).vs[(PCB).ssx] = ag_null_value;
    GET_CONTEXT;
    (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 short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
      else ag_t2 = ag_tx;
    } while (ag_t1 < ag_t2);
    if (ag_tstt[ag_t1] != (PCB).reduction_token) {
      (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; 
      REDUCTION_TOKEN_ERROR; break;}
      (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_dsl(void) {
  (PCB).la_ptr = (PCB).pointer;
  (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
  (PCB).exit_flag = AG_RUNNING_CODE;
  (PCB).line = FIRST_LINE;
  (PCB).column = FIRST_COLUMN;
  (PCB).btsx = 0, (PCB).drt = -1;
}

void dsl(void) {
  init_dsl();
  (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 = (dsl_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 short)(PCB).token_number)
          ag_t1 = ag_tx + 1;
        else ag_t2 = ag_tx;
      } while (ag_t1 < ag_t2);
      if (ag_tstt[ag_t1] != (unsigned short)(PCB).token_number)
        ag_t1 = ag_sbe[(PCB).sn];
    }
    (PCB).ag_ap = ag_pstt[ag_t1];
    (ag_gt_procs_scan[ag_astt[ag_t1]])();
  }
}