Mercurial > ~dholland > hg > ag > index.cgi
view tests/agcl/contrib/good/bug-I158.c @ 6:607e3be6bad8
Adjust to the moving target called the C++ standard.
Apparently nowadays it's not allowed to define an explicit copy
constructor but not an assignment operator. Consequently, defining the
explicit copy constructor in terms of the implicit/automatic
assignment operator for general convenience no longer works.
Add assignment operators.
Caution: not tested with the IBM compiler, but there's no particular
reason it shouldn't work.
author | David A. Holland |
---|---|
date | Mon, 30 May 2022 23:46:22 -0400 |
parents | 13d2b8934445 |
children |
line wrap: on
line source
/* YABASIC --- a tiny integrated Basic Compiler/Interpreter BISON - part this Program is subject to the GNU General Public License; see the file yabasic.c for details. */ #undef WINDOWS #include "yabasic.h" /* definitions of yabasic */ #include <malloc.h> #if HAVE_ALLOCA_H #include <alloca.h> #endif void __yy_bcopy(char *,char *,int); /* prototype missing */ int yylineno=1; int yylex(void); /* * 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 BUG-I158_H #include "bug-I158.h" #endif #ifndef BUG-I158_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]) bug-I158_pcb_type bug-I158_pcb; #define PCB bug-I158_pcb #define CHANGE_REDUCTION(x) bug-I158_change_reduction(bug-I158_##x##_token) int bug-I158_change_reduction(bug-I158_token_type); #ifndef CONVERT_CASE #define CONVERT_CASE(c) (c) #endif #ifndef TAB_SPACING #define TAB_SPACING 8 #endif #define ag_rp_1(x, e) (x*pow(10,e)) #define ag_rp_2(x, e) (x*pow(10,-e)) #define ag_rp_3(i, f) (i+f) #define ag_rp_4(f) (f) #define ag_rp_5(d) (d-'0') #define ag_rp_6(x, d) (10*x + d-'0') #define ag_rp_7(d) ((d-'0')/10.) #define ag_rp_8(d, f) ((d-'0' + f)/10.) #define ag_rp_9(d) (d-'0') #define ag_rp_10(x, d) (10*x + d-'0') #define ag_rp_11(c) (pushChar(c), 1) #define ag_rp_12(k, c) (pushChar(c), k+1) #define ag_rp_13(k) (strdup(popString(k))) #define ag_rp_14(k) (pushChar('$'), strdup(popString(k+1))) #define ag_rp_15(k) (strdup(popString(k))) #define ag_rp_16(d) (pushChar(d), 1) #define ag_rp_17(k, d) (pushChar(d), k+1) #define ag_rp_18(k) (strdup(popString(k))) #define ag_rp_19(k) (strdup(popString(k))) static void ag_rp_20(void) { /* Line -, bug-I158.syn */ if (errorlevel<=ERROR) {YYABORT;} } static void ag_rp_21(void) { /* Line -, bug-I158.syn */ yylineno+=$3; } static void ag_rp_22(void) { /* Line -, bug-I158.syn */ create_goto($2); } static void ag_rp_23(void) { /* Line -, bug-I158.syn */ create_gosub($2); } static void ag_rp_24(void) { /* Line -, bug-I158.syn */ create_exception(TRUE); } static void ag_rp_25(void) { /* Line -, bug-I158.syn */ create_exception(FALSE); } static void ag_rp_26(void) { /* Line -, bug-I158.syn */ create_skipper(); } static void ag_rp_27(void) { /* Line -, bug-I158.syn */ create_nop(); } static void ag_rp_28(void) { /* Line -, bug-I158.syn */ create_skipper(); } static void ag_rp_29(void) { /* Line -, bug-I158.syn */ create_nop(); } static void ag_rp_30(void) { /* Line -, bug-I158.syn */ create_label($2); } static void ag_rp_31(void) { /* Line -, bug-I158.syn */ create_myopen($2,'+'); } static void ag_rp_32(void) { /* Line -, bug-I158.syn */ create_myopen($2,'-'); } static void ag_rp_33(void) { /* Line -, bug-I158.syn */ create_myclose($2); } static void ag_rp_34(void) { /* Line -, bug-I158.syn */ create_revert(FALSE); } static void ag_rp_35(void) { /* Line -, bug-I158.syn */ lastinput->args=0; } static void ag_rp_36(void) { /* Line -, bug-I158.syn */ create_restore(""); } static void ag_rp_37(void) { /* Line -, bug-I158.syn */ create_restore($2); } static void ag_rp_38(void) { /* Line -, bug-I158.syn */ create_return(); } static void ag_rp_39(void) { /* Line -, bug-I158.syn */ create_openwin(FALSE); } static void ag_rp_40(void) { /* Line -, bug-I158.syn */ create_openwin(TRUE); } static void ag_rp_41(void) { /* Line -, bug-I158.syn */ create_dot(); } static void ag_rp_42(void) { /* Line -, bug-I158.syn */ create_line('l'); } static void ag_rp_43(void) { /* Line -, bug-I158.syn */ create_circle() } static void ag_rp_44(void) { /* Line -, bug-I158.syn */ create_text(TRUE); } static void ag_rp_45(void) { /* Line -, bug-I158.syn */ create_text(FALSE); } static void ag_rp_46(void) { /* Line -, bug-I158.syn */ create_makemap(); } static void ag_rp_47(void) { /* Line -, bug-I158.syn */ create_line('a'); } static void ag_rp_48(void) { /* Line -, bug-I158.syn */ create_tick(1); } static void ag_rp_49(void) { /* Line -, bug-I158.syn */ create_tick(3); } static void ag_rp_50(void) { /* Line -, bug-I158.syn */ create_tick(0); } static void ag_rp_51(void) { /* Line -, bug-I158.syn */ create_tick(2); } static void ag_rp_52(void) { /* Line -, bug-I158.syn */ create_closewin(); } static void ag_rp_53(void) { /* Line -, bug-I158.syn */ create_clearwin(); } static void ag_rp_54(void) { /* Line -, bug-I158.syn */ create_clearscreen(); } static void ag_rp_55(void) { /* Line -, bug-I158.syn */ create_openprinter(0); } static void ag_rp_56(void) { /* Line -, bug-I158.syn */ create_openprinter(1); } static void ag_rp_57(void) { /* Line -, bug-I158.syn */ create_closeprinter(); } static void ag_rp_58(void) { /* Line -, bug-I158.syn */ create_mywait(); } static void ag_rp_59(void) { /* Line -, bug-I158.syn */ create_bell(); } static void ag_rp_60(void) { /* Line -, bug-I158.syn */ create_function(MYINKEY); create_popstrsym(NULL); } static void ag_rp_61(void) { /* Line -, bug-I158.syn */ create_function(MYSYSTEM2); create_popdblsym(NULL); } static void ag_rp_62(void) { /* Line -, bug-I158.syn */ create_poke('s'); } static void ag_rp_63(void) { /* Line -, bug-I158.syn */ create_poke('d'); } static void ag_rp_64(void) { /* Line -, bug-I158.syn */ create_myend(); } static void ag_rp_65(void) { /* Line -, bug-I158.syn */ create_popstrsym($1); } static void ag_rp_66(void) { /* Line -, bug-I158.syn */ create_pushstrptr($3); } static void ag_rp_67(void) { /* Line -, bug-I158.syn */ create_changestring(MYMID); } static void ag_rp_68(void) { /* Line -, bug-I158.syn */ create_pushstrptr($3); } static void ag_rp_69(void) { /* Line -, bug-I158.syn */ create_changestring(MYLEFT); } static void ag_rp_70(void) { /* Line -, bug-I158.syn */ create_pushstrptr($3); } static void ag_rp_71(void) { /* Line -, bug-I158.syn */ create_changestring(MYRIGHT); } static void ag_rp_72(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_73(void) { /* Line -, bug-I158.syn */ create_doarray($1,ASSIGNSTRINGARRAY); } static void ag_rp_74(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_75(void) { /* Line -, bug-I158.syn */ create_doarray($3,GETSTRINGPOINTER); } static void ag_rp_76(void) { /* Line -, bug-I158.syn */ create_changestring(MYMID); } static void ag_rp_77(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_78(void) { /* Line -, bug-I158.syn */ create_doarray($3,GETSTRINGPOINTER); } static void ag_rp_79(void) { /* Line -, bug-I158.syn */ create_changestring(MYLEFT); } static void ag_rp_80(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_81(void) { /* Line -, bug-I158.syn */ create_doarray($3,GETSTRINGPOINTER); } static void ag_rp_82(void) { /* Line -, bug-I158.syn */ create_changestring(MYRIGHT); } static void ag_rp_83(void) { /* Line -, bug-I158.syn */ create_pushstrsym($1); } static void ag_rp_84(void) { /* Line -, bug-I158.syn */ if ($1==NULL) {error(ERROR,"String not terminated");create_pushstr("");} else {create_pushstr($1);} } static void ag_rp_85(void) { /* Line -, bug-I158.syn */ create_concat(); } static void ag_rp_86(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_87(void) { /* Line -, bug-I158.syn */ create_doarray($1,CALLSTRINGARRAY); } static void ag_rp_88(void) { /* Line -, bug-I158.syn */ create_function(MYLEFT); } static void ag_rp_89(void) { /* Line -, bug-I158.syn */ create_function(MYRIGHT); } static void ag_rp_90(void) { /* Line -, bug-I158.syn */ create_function(MYMID); } static void ag_rp_91(void) { /* Line -, bug-I158.syn */ create_function(MYSTR); } static void ag_rp_92(void) { /* Line -, bug-I158.syn */ create_function(MYSTR2); } static void ag_rp_93(void) { /* Line -, bug-I158.syn */ create_function(MYINKEY); } static void ag_rp_94(void) { /* Line -, bug-I158.syn */ create_function(MYCHR); } static void ag_rp_95(void) { /* Line -, bug-I158.syn */ create_function(MYUPPER); } static void ag_rp_96(void) { /* Line -, bug-I158.syn */ create_function(MYLOWER); } static void ag_rp_97(void) { /* Line -, bug-I158.syn */ create_function(MYLTRIM); } static void ag_rp_98(void) { /* Line -, bug-I158.syn */ create_function(MYRTRIM); } static void ag_rp_99(void) { /* Line -, bug-I158.syn */ create_function(MYTRIM); } static void ag_rp_100(void) { /* Line -, bug-I158.syn */ create_function(MYSYSTEM); } static void ag_rp_101(void) { /* Line -, bug-I158.syn */ create_function(MYDATE); } static void ag_rp_102(void) { /* Line -, bug-I158.syn */ create_function(MYTIME); } static void ag_rp_103(void) { /* Line -, bug-I158.syn */ create_function(MYPEEK2); } static void ag_rp_104(void) { /* Line -, bug-I158.syn */ create_popdblsym($1); } static void ag_rp_105(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_106(void) { /* Line -, bug-I158.syn */ create_doarray($1,ASSIGNARRAY); } static void ag_rp_107(void) { /* Line -, bug-I158.syn */ create_pushdbl($1); } static void ag_rp_108(void) { /* Line -, bug-I158.syn */ create_pushdblsym($1); } static void ag_rp_109(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_110(void) { /* Line -, bug-I158.syn */ create_doarray($1,CALLARRAY); } static void ag_rp_111(void) { /* Line -, bug-I158.syn */ create_dblbin('+'); } static void ag_rp_112(void) { /* Line -, bug-I158.syn */ create_dblbin('-'); } static void ag_rp_113(void) { /* Line -, bug-I158.syn */ create_dblbin('*'); } static void ag_rp_114(void) { /* Line -, bug-I158.syn */ create_dblbin('/'); } static void ag_rp_115(void) { /* Line -, bug-I158.syn */ create_dblbin('^'); } static void ag_rp_116(void) { /* Line -, bug-I158.syn */ create_negate(); } static void ag_rp_117(void) { /* Line -, bug-I158.syn */ create_map(); } static void ag_rp_118(void) { /* Line -, bug-I158.syn */ create_function(MYSIN); } static void ag_rp_119(void) { /* Line -, bug-I158.syn */ create_function(MYASIN); } static void ag_rp_120(void) { /* Line -, bug-I158.syn */ create_function(MYCOS); } static void ag_rp_121(void) { /* Line -, bug-I158.syn */ create_function(MYACOS); } static void ag_rp_122(void) { /* Line -, bug-I158.syn */ create_function(MYTAN); } static void ag_rp_123(void) { /* Line -, bug-I158.syn */ create_function(MYATAN); } static void ag_rp_124(void) { /* Line -, bug-I158.syn */ create_function(MYATAN2); } static void ag_rp_125(void) { /* Line -, bug-I158.syn */ create_function(MYEXP); } static void ag_rp_126(void) { /* Line -, bug-I158.syn */ create_function(MYLOG); } static void ag_rp_127(void) { /* Line -, bug-I158.syn */ create_function(MYSQRT); } static void ag_rp_128(void) { /* Line -, bug-I158.syn */ create_function(MYINT); } static void ag_rp_129(void) { /* Line -, bug-I158.syn */ create_function(MYFRAC); } static void ag_rp_130(void) { /* Line -, bug-I158.syn */ create_function(MYMOD); } static void ag_rp_131(void) { /* Line -, bug-I158.syn */ create_function(MYRAN); } static void ag_rp_132(void) { /* Line -, bug-I158.syn */ create_function(MYRAN2); } static void ag_rp_133(void) { /* Line -, bug-I158.syn */ create_function(MYMIN); } static void ag_rp_134(void) { /* Line -, bug-I158.syn */ create_function(MYMAX); } static void ag_rp_135(void) { /* Line -, bug-I158.syn */ create_function(MYXMAP); } static void ag_rp_136(void) { /* Line -, bug-I158.syn */ create_function(MYYMAP); } static void ag_rp_137(void) { /* Line -, bug-I158.syn */ create_function(MYLEN); } static void ag_rp_138(void) { /* Line -, bug-I158.syn */ create_function(MYVAL); } static void ag_rp_139(void) { /* Line -, bug-I158.syn */ create_function(MYASC); } static void ag_rp_140(void) { /* Line -, bug-I158.syn */ create_function(MYINSTR); } static void ag_rp_141(void) { /* Line -, bug-I158.syn */ create_function(MYSYSTEM2); } static void ag_rp_142(void) { /* Line -, bug-I158.syn */ create_function(MYPEEK); } static double ag_rp_143(void) { /* Line -, bug-I158.syn */ $$=$1; } static double ag_rp_144(void) { /* Line -, bug-I158.syn */ $$=$2; } static double ag_rp_145(void) { /* Line -, bug-I158.syn */ $$=-$2; } static double ag_rp_146(void) { /* Line -, bug-I158.syn */ $$=$1; } static double ag_rp_147(void) { /* Line -, bug-I158.syn */ $$=atoi($1); } static int ag_rp_148(void) { /* Line -, bug-I158.syn */ $$=atoi($1); } static char * ag_rp_149(void) { /* Line -, bug-I158.syn */ $$=$1; } static char * ag_rp_150(void) { /* Line -, bug-I158.syn */ $$=$1; } static void ag_rp_151(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_152(void) { /* Line -, bug-I158.syn */ create_dim($1,'d'); } static void ag_rp_153(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_154(void) { /* Line -, bug-I158.syn */ create_dim($3,'d'); } static void ag_rp_155(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_156(void) { /* Line -, bug-I158.syn */ create_dim($1,'s'); } static void ag_rp_157(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_158(void) { /* Line -, bug-I158.syn */ create_dim($3,'s'); } static void ag_rp_159(void) { /* Line -, bug-I158.syn */ inccounter(); } static void ag_rp_160(void) { /* Line -, bug-I158.syn */ inccounter(); } static void ag_rp_161(void) { /* Line -, bug-I158.syn */ pushname($2);create_popdblsym($2);pushgoto(); create_pushdblsym($2); } static void ag_rp_162(void) { /* Line -, bug-I158.syn */ create_dblrelop(($8>0)?'{':'}'); create_decide(); pushlabel(); } static void ag_rp_163(void) { /* Line -, bug-I158.syn */ yylineno+=$10; } static void ag_rp_164(void) { /* Line -, bug-I158.syn */ create_pushdbl($8); create_pushdblsym($2); create_dblbin('+'); create_popdblsym($2); swap();popgoto();poplabel(); } static void ag_rp_165(void) { /* Line -, bug-I158.syn */ end_of_file=TRUE; error(ERROR,"'next'-statement is missing"); YYABORT; } static double ag_rp_166(void) { /* Line -, bug-I158.syn */ $$=1.0; } static double ag_rp_167(void) { /* Line -, bug-I158.syn */ $$=$2; } static void ag_rp_168(void) { /* Line -, bug-I158.syn */ pop(); } static void ag_rp_169(void) { /* Line -, bug-I158.syn */ if (strcmp(pop()->pointer,$1)) {error(ERROR,"'for' and 'next' do not match"); YYABORT;} } static void ag_rp_170(void) { /* Line -, bug-I158.syn */ create_decide();pushlabel(); } static void ag_rp_171(void) { /* Line -, bug-I158.syn */ pushlabel();swap();poplabel(); } static void ag_rp_172(void) { /* Line -, bug-I158.syn */ poplabel(); } static void ag_rp_173(void) { /* Line -, bug-I158.syn */ end_of_file=TRUE; error(ERROR,"'endif'-statement is missing"); YYABORT; } static void ag_rp_174(void) { /* Line -, bug-I158.syn */ create_boole('|'); } static void ag_rp_175(void) { /* Line -, bug-I158.syn */ create_boole('&'); } static void ag_rp_176(void) { /* Line -, bug-I158.syn */ create_boole('!'); } static void ag_rp_177(void) { /* Line -, bug-I158.syn */ create_strrelop('='); } static void ag_rp_178(void) { /* Line -, bug-I158.syn */ create_strrelop('!'); } static void ag_rp_179(void) { /* Line -, bug-I158.syn */ create_strrelop('<'); } static void ag_rp_180(void) { /* Line -, bug-I158.syn */ create_strrelop('{'); } static void ag_rp_181(void) { /* Line -, bug-I158.syn */ create_strrelop('>'); } static void ag_rp_182(void) { /* Line -, bug-I158.syn */ create_strrelop('}'); } static void ag_rp_183(void) { /* Line -, bug-I158.syn */ create_dblrelop('='); } static void ag_rp_184(void) { /* Line -, bug-I158.syn */ create_dblrelop('!'); } static void ag_rp_185(void) { /* Line -, bug-I158.syn */ create_dblrelop('<'); } static void ag_rp_186(void) { /* Line -, bug-I158.syn */ create_dblrelop('{'); } static void ag_rp_187(void) { /* Line -, bug-I158.syn */ create_dblrelop('>'); } static void ag_rp_188(void) { /* Line -, bug-I158.syn */ create_dblrelop('}'); } static void ag_rp_189(void) { /* Line -, bug-I158.syn */ create_testeof($3); } static void ag_rp_190(void) { /* Line -, bug-I158.syn */ create_myread('d');create_popdblsym($1); } static void ag_rp_191(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_192(void) { /* Line -, bug-I158.syn */ create_myread('d');create_doarray($1,ASSIGNARRAY); } static void ag_rp_193(void) { /* Line -, bug-I158.syn */ create_myread('s');create_popstrsym($1); } static void ag_rp_194(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_195(void) { /* Line -, bug-I158.syn */ create_myread('s');create_doarray($1,ASSIGNSTRINGARRAY); } static void ag_rp_196(void) { /* Line -, bug-I158.syn */ create_readdata('d');create_popdblsym($1); } static void ag_rp_197(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_198(void) { /* Line -, bug-I158.syn */ create_readdata('d');create_doarray($1,ASSIGNARRAY); } static void ag_rp_199(void) { /* Line -, bug-I158.syn */ create_readdata('s');create_popstrsym($1); } static void ag_rp_200(void) { /* Line -, bug-I158.syn */ pushcounter(); } static void ag_rp_201(void) { /* Line -, bug-I158.syn */ create_readdata('s');create_doarray($1,ASSIGNSTRINGARRAY); } static void ag_rp_202(void) { /* Line -, bug-I158.syn */ create_strdata($1); } static void ag_rp_203(void) { /* Line -, bug-I158.syn */ create_dbldata($1); } static void ag_rp_204(void) { /* Line -, bug-I158.syn */ create_strdata($3); } static void ag_rp_205(void) { /* Line -, bug-I158.syn */ create_dbldata($3); } static void ag_rp_206(void) { /* Line -, bug-I158.syn */ create_print('d'); } static void ag_rp_207(void) { /* Line -, bug-I158.syn */ create_print('d'); } static void ag_rp_208(void) { /* Line -, bug-I158.syn */ create_print('s'); } static void ag_rp_209(void) { /* Line -, bug-I158.syn */ create_print('s'); } static void ag_rp_210(void) { /* Line -, bug-I158.syn */ create_myswitch(0);create_readline(NULL); } static void ag_rp_211(void) { /* Line -, bug-I158.syn */ create_myswitch(0);create_readline(NULL); } static void ag_rp_212(void) { /* Line -, bug-I158.syn */ create_myswitch(0); } static void ag_rp_213(void) { /* Line -, bug-I158.syn */ create_myswitch(0); } static void ag_rp_214(void) { /* Line -, bug-I158.syn */ create_myswitch(0); } static void ag_rp_215(void) { /* Line -, bug-I158.syn */ create_revert(TRUE);create_myswitch(0); } static void ag_rp_216(void) { /* Line -, bug-I158.syn */ create_myswitch(0); } static void ag_rp_217(void) { /* Line -, bug-I158.syn */ create_revert(TRUE);create_myswitch(0); } static void ag_rp_218(void) { /* Line -, bug-I158.syn */ create_readline($1); } static void ag_rp_219(void) { /* Line -, bug-I158.syn */ create_mymove(); } static void ag_rp_220(void) { /* Line -, bug-I158.syn */ create_myswitch($2); } static int ag_rp_221(void) { /* Line -, bug-I158.syn */ $$=$2; } static int ag_rp_222(void) { /* Line -, bug-I158.syn */ $$=$1; } static void ag_rp_223(void) { /* Line -, bug-I158.syn */ create_print('n'); } static void ag_rp_224(void) { /* Line -, bug-I158.syn */ create_goto($1);create_findnop(); } static void ag_rp_225(void) { /* Line -, bug-I158.syn */ create_goto($3);create_findnop(); } static void ag_rp_226(void) { /* Line -, bug-I158.syn */ create_gosub($1);create_findnop(); } static void ag_rp_227(void) { /* Line -, bug-I158.syn */ create_gosub($3);create_findnop(); } #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 bug-I158_vs_type const ag_null_value NULL_VALUE_INITIALIZER; static const unsigned char ag_rpx[] = { 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 0, 35, 0, 0, 36, 37, 38, 0, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 0, 84, 85, 86, 87, 0, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103, 104,105,106,107, 0,108,109,110, 0,111,112,113,114,115,116, 0,117,118, 119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136, 137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154, 155,156,157,158,159,160,161,162,163,164, 0, 0,165,166,167,168,169,170, 171,172, 0, 0,173, 0,174,175,176,177,178,179,180,181,182,183,184,185, 186,187,188,189, 0, 0, 0, 0,190,191,192,193,194,195, 0, 0,196,197, 198,199,200,201,202,203,204,205, 0,206,207,208,209,210, 0,211,212, 0, 213, 0,214, 0,215,216,217,218,219,220,221,222,223, 0,224,225,226,227 }; static const unsigned char ag_key_itt[] = { 0 }; static const unsigned short ag_key_pt[] = { 0 }; static const unsigned char ag_key_ch[] = { 0, 83, 84,255, 79,255, 70, 71,255, 83, 84,255, 79,255, 71, 83, 84,255, 84,255, 83, 84,255, 79,255, 71,255, 83,255, 78,255 }; static const unsigned char ag_key_act[] = { 0,3,3,4,2,4,3,2,4,3,3,4,2,4,2,3,3,4,3,4,3,3,4,2,4,2,4,3,4,3,4 }; static const unsigned char ag_key_parm[] = { 0,135,134, 0, 0, 0,176, 0, 0,135,134, 0, 0, 0, 0,184,153, 0, 153, 0,135,134, 0, 0, 0, 0, 0,184, 0,183, 0 }; static const unsigned char ag_key_jmp[] = { 0, 3, 6, 0, 1, 0, 0, 4, 0, 8, 11, 0, 9, 0, 12, 13, 17, 0, 19, 0, 21, 24, 0, 20, 0, 23, 0, 26, 0, 30, 0 }; static const unsigned char ag_key_index[] = { 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const unsigned char ag_key_ends[] = { 79,82,0, 85,66,0, 79,0, 85,66,0, 79,0, 84,69,80,0, 79,0, 79,0, 85,66,0, 79,0, 84,69,80,0, 69,88,84,0, }; #define AG_TCV(x) (((int)(x) >= -1 && (int)(x) <= 255) ? ag_tcv[(x) + 1] : 0) static const unsigned char ag_tcv[] = { 125,125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 202, 26, 0, 0, 0,154,155,118, 12,141, 15, 17,119, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0,203, 0, 0, 0, 0, 0,204,204,204,204, 11,204, 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, 204,204, 0, 0, 0,120, 0, 0,204,204,204,204, 11,204,204,204,204,204, 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; #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 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; #ifndef GET_INPUT #define GET_INPUT ((PCB).input_code = getchar()) #endif static int ag_look_ahead(void) { if ((PCB).rx < (PCB).fx) { return CONVERT_CASE((PCB).lab[(PCB).rx++]); } GET_INPUT; (PCB).fx++; return CONVERT_CASE((PCB).lab[(PCB).rx++] = (PCB).input_code); } static void ag_get_key_word(int ag_k) { int save_index = (PCB).rx; const unsigned char *sp; int ag_ch; while (1) { switch (ag_key_act[ag_k]) { case ag_cf_end_key: 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 + ag_look_ahead()]) goto ag_fail; (PCB).rx--; (PCB).token_number = (bug-I158_token_type) ag_key_pt[ag_k1 + 1]; return; } } while (ag_look_ahead() == ag_ch); goto ag_fail; case ag_end_key: sp = ag_key_ends + ag_key_jmp[ag_k]; do { if ((ag_ch = *sp++) == 0) { (PCB).token_number = (bug-I158_token_type) ag_key_parm[ag_k]; return; } } while (ag_look_ahead() == ag_ch); case ag_no_match_key: ag_fail: (PCB).rx = save_index; 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 + (ag_ch = ag_look_ahead())]) break; save_index = --(PCB).rx; (PCB).token_number = (bug-I158_token_type) ag_key_pt[ag_k1+1]; break; } case ag_set_key: save_index = (PCB).rx; (PCB).token_number = (bug-I158_token_type) ag_key_parm[ag_k]; case ag_jmp_key: ag_k = ag_key_jmp[ag_k]; ag_ch = ag_look_ahead(); break; case ag_accept_key: (PCB).token_number = (bug-I158_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 + ag_look_ahead()]) (PCB).rx = save_index; else { (PCB).rx--; (PCB).token_number = (bug-I158_token_type) ag_key_pt[ag_k1+1]; } return; } default: /* not reachable; here to suppress compiler warnings */ goto ag_fail; } if (ag_ch <= 255) while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_ch > 255 || ag_key_ch[ag_k] != ag_ch) { (PCB).rx = save_index; return; } } } #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 = 0; while (ag_k < (PCB).rx) { int ag_ch = (PCB).lab[ag_k++]; switch (ag_ch) { 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++; } } ag_k = 0; while ((PCB).rx < (PCB).fx) (PCB).lab[ag_k++] = (PCB).lab[(PCB).rx++]; (PCB).fx = ag_k; (PCB).rx = 0; } 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]; } 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).token_number = (bug-I158_token_type) (PCB).drt; (PCB).ssx = (PCB).dssx; (PCB).sn = (PCB).dsn; (PCB).drt = -1; } static const unsigned char ag_tstt[] = { 126,125,0,123,124, 7,0,127, 125,0, 7,0, 204,176,135,134,125,115,112,102,98,97,96,79,78,77,74,73,72,70,69,68,67,65, 64,63,62,61,48,47,46,45,44,43,39,35,34,11,0,128, 204,176,135,134,125,115,112,102,98,97,96,79,78,77,74,73,72,70,69,68,67,65, 64,63,62,61,48,47,46,45,44,43,39,35,34,11,0,21,24,25,129,130,131,132, 133, 204,26,20,11,0, 204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100, 99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,76,75,54,30, 20,17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,185, 204,11,0,21,24, 154,60,0, 154,0, 154,0, 154,0, 154,60,0, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 154,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 66,50,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100, 99,98,97,96,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,76,75,74,30,20, 17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,152,167,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170, 204,11,0,21,24,25,151, 204,20,11,0,5,21,24,27,28, 30,20,17,15,12,0,2,3,9,10,16,27,28,29,150, 204,11,0,21,24,25,149,194, 204,202,49,30,11,0,147,197,198,199, 204,203,202,154,141,125,117,116,114,113,112,111,110,109,108,107,106,105,104, 103,102,101,100,99,98,97,96,95,94,93,92,91,90,88,87,86,85,84,83,82,81, 80,76,75,51,49,30,20,17,15,11,0,143,197,198, 202,71,66,20,0,4,6,27,28, 202,71,66,20,0,4,6,27,28, 204,20,11,0,5,21,24,27,28, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,36,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,20,11,0,5,21,24,27,28, 204,20,11,0,5,21,24,27,28, 203,184,155,153,141,135,134,125,120,119,118,60,59,58,57,56,55,53,52,40,20, 17,15,12,11,7,0, 20,0,18, 203,184,155,153,141,135,134,125,120,119,118,60,59,58,57,56,55,53,52,40,20, 17,15,12,11,7,0,19, 20,0, 11,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 31,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 154,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 154,0, 154,0, 154,0, 120,119,118,60,59,58,57,56,55,15,12,0, 60,59,58,57,56,55,12,0, 204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100, 99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,76,75,54,30, 20,17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,185, 204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100, 99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,76,75,54,30, 20,17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,185, 53,52,40,0,186, 204,20,11,0, 60,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,169, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,11,0,21,25, 204,11,0,21,25, 204,11,0,21,25, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,159, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,26,20,11,0, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 141,12,0, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 120,119,118,15,12,0, 154,0, 141,120,119,118,15,12,0, 141,0, 141,0, 153,0, 141,120,119,118,15,12,0, 141,0, 204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100, 99,98,97,96,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,76,75,30,20,17, 15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170, 141,12,0, 141,0, 153,0, 154,0, 154,0, 141,0, 20,17,0,3,9,10,16,27,28, 20,17,0,3,9,10,16,27,28, 141,0, 154,0, 154,0, 141,0, 154,0, 20,0,4,27,28, 30,0,29,200, 204,30,11,0,201, 204,11,0,21,24,25,148,191, 49,0,198, 204,203,154,141,125,117,116,114,113,112,111,110,109,108,107,106,105,104,103, 102,101,100,99,98,97,96,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,76, 75,30,20,17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,144,167,170, 20,0,4,27,28, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 141,0, 135,134,120,119,118,15,12,0, 38,37,0, 20,0,18, 20,0,18, 20,15,12,0,13, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,155,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82, 81,80,76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 32,30,0, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 120,119,118,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,171, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,168, 202,20,0,4,6,27,28, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 0, 155,53,52,0, 155,120,119,118,60,59,58,57,56,55,15,12,0, 155,60,59,58,57,56,55,12,0, 204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100, 99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,76,75,54,30, 20,17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,185, 204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100, 99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,76,75,54,30, 20,17,15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170,185, 40,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 120,119,118,15,12,0, 154,141,0,158, 154,141,0,157, 154,141,0,156, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 12,0, 155,12,0, 204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100, 99,98,97,96,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,76,75,30,20,17, 15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170, 155,12,0, 155,120,119,118,15,12,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,74,20,17,15,11,0,3,9,10,16,21,24,27,28,136,152,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,174, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,172, 204,11,0,21,24,25, 30,20,17,15,12,0,2,3,9,10,16,27,28,29, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,196, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,195, 204,11,0,21,24,25,194, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 30,0,29,200, 154,0, 154,0, 141,0, 12,0, 120,119,118,15,12,0, 203,141,125,0,145, 12,0, 141,120,119,118,15,12,0, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,20,11,0,139, 204,20,11,0,137, 20,0,14, 20,0,14, 155,12,0, 155,12,0, 141,12,0, 155,12,0, 155,12,0, 155,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 141,120,119,118,15,12,0, 141,120,119,118,15,12,0, 155,120,119,118,15,12,0, 141,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,141,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,12,0, 155,12,0, 155,12,0, 155,12,0, 155,12,0, 155,12,0, 155,12,0, 155,120,119,118,15,12,0, 155,141,120,119,118,15,12,0, 141,12,0, 141,12,0, 141,12,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 155,0, 120,119,118,15,12,0, 120,119,118,15,12,0, 120,119,118,15,12,0, 120,119,118,15,12,0, 120,119,118,15,12,0, 120,119,118,15,12,0, 0, 120,0, 120,0, 120,119,118,0, 120,119,118,0, 12,0, 12,0, 12,0, 12,0, 12,0, 12,0, 0, 0, 52,0, 126,0, 153,120,119,118,15,12,0,177, 120,119,118,15,12,0, 155,141,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,165, 141,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,163, 141,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,161, 141,0, 155,141,0, 120,119,118,15,12,0, 12,0, 141,120,119,118,15,12,0, 120,119,118,15,12,0, 12,0, 12,0, 141,120,119,118,15,12,0, 12,0, 120,119,118,15,12,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 154,0, 154,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 141,120,119,118,15,12,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,193, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,192, 204,11,0,21,24,25,148,191, 204,154,117,116,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100, 99,98,97,96,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80,76,75,30,20,17, 15,11,0,3,9,10,16,21,24,25,27,28,29,136,142,167,170, 203,125,0,146, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 141,12,0, 204,20,11,0,5,21,24,27,28,140, 204,20,11,0,5,21,24,27,28,138, 20,0, 20,0, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 155,141,0, 155,141,0, 42,41,8,0,187, 153,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 60,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 60,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 155,141,0, 155,141,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,175, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,173, 155,141,0, 155,141,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 12,0, 120,119,118,15,12,0, 141,120,119,118,15,12,0, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 141,0, 141,0, 155,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,12,0, 141,120,119,118,15,12,0, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 42,41,8,0,188, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 120,119,118,15,12,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 155,141,0, 155,120,119,118,15,12,0, 155,141,0, 155,120,119,118,15,12,0, 155,141,0, 141,120,119,118,15,12,0, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 155,120,119,118,15,12,0, 141,120,119,118,15,12,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,160,170, 155,120,119,118,15,12,0, 155,141,0, 155,141,0, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 12,0, 204,20,11,0,5,21,24,27,28, 204,20,11,0,5,21,24,27,28, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 126,0, 42,8,0,189, 184,120,119,118,15,12,7,0,1, 120,119,118,15,12,0, 141,0,166, 60,0, 141,0,164, 60,0, 141,0,162, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 12,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 155,141,0, 155,141,0, 12,0, 155,120,119,118,15,12,0, 42,8,0,190, 20,17,15,12,0,2,3,9,10,16,27,28, 7,0,178, 141,0, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 141,0, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 141,0, 155,120,119,118,15,12,0, 153,120,119,118,15,12,0, 7,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 12,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 12,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 60,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 126,0,179, 155,120,119,118,15,12,0, 155,120,119,118,15,12,0, 141,120,119,118,15,12,0, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 141,120,119,118,15,12,0, 126,0, 60,0, 60,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 12,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 183,8,0,180, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 155,120,119,118,15,12,0, 141,120,119,118,15,12,0, 183,8,0,181, 12,0, 12,0, 60,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 204,125,11,0,21,24,182, 204,154,117,116,114,111,109,108,107,106,105,103,102,101,98,97,96,30,11,0,21, 25,29,142,167, 141,120,119,118,15,12,0, 12,0, 204,154,113,112,110,104,100,99,95,94,93,92,91,90,88,87,86,85,84,83,82,81,80, 76,75,20,17,15,11,0,3,9,10,16,21,24,27,28,136,170, 120,119,118,15,12,0, }; static unsigned const char ag_astt[7483] = { 1,8,7,0,1,4,7,1,3,7,1,7,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, 4,4,4,4,4,4,4,4,4,4,4,7,1,2,1,1,1,5,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1, 1,1,2,1,2,1,1,1,1,1,1,2,7,1,1,1,3,3,3,3,3,10,2,10,10,4,2,1,2,2,1,1,1,1,1,1, 1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 7,2,2,1,1,1,1,1,2,1,2,1,1,1,1,1,2,2,7,1,1,1,1,7,1,7,1,7,1,7,1,1,7,2,1,2,2, 1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,2,2,7,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,2,7,2,2,1,1,1,1,2,1,1,1,1,2,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1, 1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1, 1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7, 2,2,1,1,1,1,2,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,2,1,1,1,1,1,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1, 1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1, 1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,7,2,2,1,1,1,1,2,1,1,2,1,2,2,7,1,1,1,1,2,2,2,4,2,1,2,2,1,1,1,1,1,1,7,2,2, 2,1,1,2,1,2,1,2,2,7,1,1,1,1,1,4,1,1,4,4,7,1,1,1,1,4,4,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,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,4,4,4, 4,4,7,1,1,2,1,2,2,2,7,2,2,2,1,1,1,1,2,7,2,1,2,1,2,2,2,7,2,1,2,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,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1, 2,2,2,7,2,1,2,2,1,2,2,2,7,2,1,2,2,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,4,7,1,7,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,10,1,5,5,5,5, 7,3,10,4,1,5,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1, 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, 1,7,1,7,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,2,7,2,2,1, 1,1,1,2,1,1,1,1,4,1,4,1,7,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,7,2,1,2,2, 1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1, 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1, 1,1,1,2,1,2,1,1,1,1,1,1,1,4,7,1,10,10,10,4,1,7,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,4,4,4,4,7,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,2,7,1,1,2,2,7,1,1,2,2,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,4,4,4,4,7,1,2,1,2,2,1,1,1,1, 1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,10,2,10,10,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1, 1,1,1,1,2,7,1,1,2,1,1,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,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,1,1,1,1,1,2,7,2,2,1,1,1, 1,2,1,1,1,1,1,1,1,1,4,1,7,1,1,1,1,1,1,7,1,4,1,4,1,7,1,1,1,1,1,1,7,1,7,2,1, 2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,7,1,7,1,7,1,7,1,7,1,5,1,1,7, 2,2,1,1,2,1,1,1,7,2,2,1,1,2,1,1,5,1,4,1,4,1,5,1,7,2,7,2,2,1,1,7,2,3,4,4,4, 7,1,2,2,7,1,1,1,2,1,1,4,2,2,5,1,8,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,2,1,1, 1,1,1,2,7,2,2,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,4,1,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1, 7,1,1,1,1,1,1,1,7,2,2,7,1,4,2,1,5,2,8,1,1,7,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1, 1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2, 1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2, 1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1, 2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,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,2,7,2,2,1,1,1,1, 2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1, 1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7, 2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2, 1,1,1,2,2,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1, 1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1, 2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1, 1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1, 1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1, 1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1, 1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1, 2,1,1,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,4,4,4,4,4,7, 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,4,4,4,4,7,1,1,2,7,2,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,1,1,2,7,2,2,1,1,1, 1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2, 1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1, 2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1, 1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2, 1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2, 1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1, 2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,4,3,1,1,7,3,1,1,1,1,1,1, 1,1,1,1,1,7,3,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,2,1, 1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1, 1,1,1,1,1,1,1,4,1,4,7,1,1,4,7,1,1,4,7,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,1,4,3,1,7,2,1,2,2,1,1,1,1, 1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 7,2,2,1,1,1,1,1,2,1,2,1,1,1,1,2,1,7,3,1,1,1,1,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,2,2,1,1, 1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1, 2,7,1,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,1,1,1,1,1,1,2, 7,2,2,1,1,1,1,2,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,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,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,1,1,1,1,1,1,2,7,2,2,1, 1,1,1,2,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,1,1,2, 7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,7,2,2,1,1,1,1,2,1,1,2,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,4,4,4,4,7,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,4,4, 4,4,7,1,2,2,7,1,1,1,1,1,1,1,1,7,2,2,2,1,1,2,1,2,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,4,4,4,4,7,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,4,4,4,4,7,1,2,2,7,1,1,1,3,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,2,7,2,2,1,1,1,1,2,1,1,1,1,7,2,3,1,4,1,4,1,5,1,4,1,1,1, 1,1,4,4,1,4,7,1,1,4,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7, 1,1,2,1,1,4,4,4,7,1,4,4,4,7,1,2,7,1,2,7,1,2,1,7,2,1,7,1,1,7,2,1,7,2,1,7,2, 1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,1,1,1,1,1,1,7,1,1,1,1,1,1,7,2,1,1,1,1,1,7, 1,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,1,7,2,1, 1,1,1,1,7,2,1,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,1,7,2,1,1,1,1,1,7,2,1,7,2,1,7,2,1,7,2,1,7,2,1,7,2,1,7,2,1,7,2,1,1,1,1, 1,7,2,1,1,1,1,1,1,7,1,1,7,1,1,7,1,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,2,7,1,1,1,1,1,4,1,1, 1,1,1,4,1,1,1,1,1,4,1,1,1,1,1,4,1,1,1,1,1,4,1,1,1,1,1,4,4,1,4,1,4,1,1,1,4, 1,1,1,4,1,4,1,4,1,4,1,4,1,4,1,4,4,4,1,4,1,7,4,1,1,1,1,1,7,1,1,1,1,1,1,4,1, 1,7,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,4,4,4,4,7,1,1,7,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,4,4,4,4,7,1,1,7,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,4,4,4,4,7,1,1,7,1,1,7,1,1,1,1,1,4,1, 4,1,1,1,1,1,1,7,1,1,1,1,1,5,1,4,1,4,1,1,1,1,1,1,7,1,4,1,1,1,1,1,4,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,2,7,2,2,1,1,1,1,2,1,1,1,1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2, 1,1,1,1,1,7,1,7,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,2, 7,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,7,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,4,4,4,4,7,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,4,4,4,4,7,1,2,2,7,1,1,1,3,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,1,2,1, 2,1,1,1,1,3,4,7,3,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, 2,7,2,2,1,1,1,1,2,1,1,1,1,1,4,2,2,2,7,2,1,2,2,1,1,2,2,2,7,2,1,2,2,1,1,10,4, 10,4,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1, 1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,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,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2, 1,7,2,1,7,4,4,4,7,1,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1, 1,1,7,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,2,7,2,2,1,1, 1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2, 2,1,1,1,1,2,1,1,1,2,1,7,2,1,7,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,4,4,4,4,7,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,4,4,4, 4,7,1,2,1,7,2,1,7,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, 2,7,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,1,4,1,1,1,1,1,4,1,1,1,1,1,1,4,2,1, 2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,1,4,1,4,2,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,7,1,1,1,1,1,1,7,2,1,1,1,1,1, 7,2,1,1,1,1,1,7,5,1,5,7,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,4,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,2,7,2,2,1,1,1,1,2,1,1,1,1,1,7,1,1,1,1,1,1,7,1,1, 7,1,1,1,1,1,1,7,1,1,7,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2, 7,1,1,2,1,1,2,1,1,1,1,1,7,1,1,1,1,1,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,7,2,1, 7,2,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,1,4,2,2,2,7,2,1, 2,2,1,2,2,2,7,2,1,2,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,1,1,2,7,2,2,1,1,1,1,2,1,1,1,3,7,4,4,7,1,1,1,1,1,1,1,4,7,1,1,1,1,1,1,4,4, 7,1,1,7,4,7,1,1,7,4,7,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,7,2,2,1,1,1,1,2,1,1,1,1,4,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,2,7,2,2,1,1,1,1,2,1,1,1,2,1,7,2,1,7,1,4,2,1,1,1,1,1,7,3,2, 7,3,1,1,1,1,7,2,2,2,1,1,2,1,4,7,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1, 2,7,1,1,2,1,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,1,7,1, 1,1,1,1,1,7,1,1,1,1,1,1,7,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,1,4,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,2,7,2,2,1,1,1,1,2,1,1,1,1,4,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,2,7,2,2,1,1,1,1,2,1,1,1,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,4,7,1,1, 1,1,1,1,1,7,1,1,1,1,1,1,7,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1, 1,2,7,1,1,2,1,1,1,1,1,1,1,1,7,1,7,1,7,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,1,4,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,2,7,2,2,1,1,1,1,2,1,1,1,4,4,7,1,2,1,2,2, 1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1, 1,1,2,7,1,1,2,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,7,1,2,7,1,1,4,1,4,1,7,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,2,7,2,2,1,1,1,1,2,1,1,1,2, 4,2,7,1,2,3,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,7,1,1,2,1,1,1,1,1,1,1,1, 7,1,4,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,2,7,2,2,1,1, 1,1,2,1,1,1,1,1,1,1,1,4 }; static const unsigned short ag_pstt[] = { 1,2,0,0,2, 30,1,3, 28,2, 4,3, 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, 31,31,31,31,31,31,31,31,31,31,31,4,5, 17,8,36,37,33,14,15,80,12,10,11,18,19,20,21,79,16,17,22,23,25,32,33,27,28, 29,84,26,57,24,30,31,7,35,34,17,5,6,9,13,32,32,32,32,32, 18,20,18,18,19, 17,86,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47, 48,53,54,55,56,82,57,58,59,60,61,62,63,64,65,49,50,85,66,38,39,79,17,7, 129,171,42,40,6,80,81,172,41,105,83,84,84,83,87, 17,17,8,88,89, 90,91,9, 92,10, 93,11, 94,12, 95,96,13, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,14,97,81,105,99, 99, 100,15, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,16,129,171,42,40,88,80,172,41,102,102, 73,74,17, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 103,38,39,79,17,18,129,171,42,40,88,80,172,41,104,105,104, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 103,38,39,79,17,19,129,171,42,40,88,80,172,41,104,106,104, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 103,38,39,79,17,20,129,171,42,40,88,80,172,41,104,107,104, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,21,129,171,42,40,88,80,172,41,108,108, 17,110,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47, 48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,103,66,38,39,79,17,22, 129,171,42,40,6,80,81,172,41,105,104,111,109,111,104, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 103,38,39,79,17,23,129,171,42,40,88,80,172,41,104,112,104, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 103,38,39,79,17,24,129,171,42,40,88,80,172,41,104,113,104, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 103,38,39,79,17,25,129,171,42,40,88,80,172,41,104,61,104, 17,17,26,6,115,114,116, 17,22,17,55,56,88,175,174,41, 66,38,39,117,118,28,239,168,171,42,40,172,41,238,119, 17,17,29,6,121,120,122,122, 247,124,123,250,247,30,127,127,126,125, 254,254,124,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, 254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, 254,254,254,254,254,254,254,128,123,254,254,254,254,254,31,129,129,257, 130,77,72,22,32,263,49,173,41, 130,131,132,22,33,263,133,173,41, 17,22,17,34,46,88,175,174,41, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 135,38,39,79,17,35,129,171,42,40,88,80,172,41,134,134, 17,22,17,36,39,88,175,174,41, 17,22,17,37,38,88,175,174,41, 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, 11,38, 136,39,10, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,12,137,7,7,7,7,40,9, 23,21, 138,1, 139,43, 140,44, 141,45, 142,46, 143,47, 144,48, 145,49, 146,50, 147,51, 148,52, 149,53, 150,54, 151,55, 152,56, 153,57, 154,58, 155,59, 156,60, 157,61, 158,62, 159,63, 160,64, 161,65, 162,66, 163,67, 164,68, 165,69, 166,70, 167,71, 168,72, 169,73, 170,74, 171,75, 172,76, 173,77, 174,78, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,79,129,171,42,40,88,80,172,41,175,175, 176,131, 177,103, 178,82, 185,186,187,184,180,182,179,181,183,188,189,83, 195,191,193,190,192,194,196,84, 17,86,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47, 48,53,54,55,56,82,57,58,59,60,61,62,63,64,65,49,50,85,66,38,39,79,17,85, 129,171,42,40,6,80,81,172,41,105,83,84,84,83,197, 17,86,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47, 48,53,54,55,56,82,57,58,59,60,61,62,63,64,65,49,50,85,66,38,39,79,17,86, 129,171,42,40,6,80,81,172,41,105,199,200,200,199,198, 202,201,197,87,203, 18,18,18,19, 204,89, 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, 127,127,127,127,127,127,127,127,127,127,90,205, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,91,129,171,42,40,88,80,172,41,206,206, 17,17,92,97,207, 17,17,93,97,208, 17,17,94,97,209, 92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, 92,92,92,92,95,210, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,96,97,81,105, 211,211, 18,20,18,18,97, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,98,97,81,105, 212,212, 213,196,99, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,100,97,81,105, 214,214, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,101,129,171,42,40,88,80,172,41,215,215, 185,186,187,188,189,78, 216,103, 217,185,186,187,188,189,104, 218,71, 219,70, 220,107, 221,185,186,187,188,189,108, 222,109, 17,110,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47, 48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,66,38,39,79,17,110,129, 171,42,40,6,80,81,172,41,105,215,212,212,215, 223,196,111, 224,112, 225,113, 226,114, 227,115, 228,58, 38,39,117,170,171,42,40,172,41, 38,39,118,169,171,42,40,172,41, 229,54, 230,235, 231,232, 232,53, 233,123, 22,124,261,173,41, 66,125,259,251, 249,252,249,126,234, 17,17,127,6,236,235,52,237, 123,256,258, 17,242,110,240,242,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52, 76,77,78,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,66,38,39,79, 17,129,129,171,42,40,6,80,81,172,41,105,239,238,240,238,239, 22,130,262,173,41, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,75,97,81,105, 241,241, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,132,129,171,42,40,88,80,172,41,242,242, 243,133, 244,245,185,186,187,188,189,134, 41,40,135, 136,13,14, 136,8,6, 247,246,247,138,247, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,139,97,81,105, 248,248, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,140,97,81,105, 249,249, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,141,97,81,105, 250,250, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,142,97,81,105, 251,251, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,143,97,81,105, 252,252, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,144,97,81,105, 253,253, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,145,129,171,42,40,88,80,172,41,254,254, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,146,129,171,42,40,88,80,172,41,255,255, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,147,129,171,42,40,88,80,172,41,256,256, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,148,129,171,42,40,88,80,172,41,257,257, 17,157,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65, 49,50,38,39,79,17,149,129,171,42,40,88,80,172,41,258,258, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,150,129,171,42,40,88,80,172,41,259,259, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,151,129,171,42,40,88,80,172,41,260,260, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,152,129,171,42,40,88,80,172,41,261,261, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,153,129,171,42,40,88,80,172,41,262,262, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,154,129,171,42,40,88,80,172,41,263,263, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,155,129,171,42,40,88,80,172,41,264,264, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,156,129,171,42,40,88,80,172,41,265,265, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,157,129,171,42,40,88,80,172,41,266,266, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,158,129,171,42,40,88,80,172,41,267,267, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,159,129,171,42,40,88,80,172,41,268,268, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,160,129,171,42,40,88,80,172,41,269,269, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,161,129,171,42,40,88,80,172,41,270,270, 25,24,162, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,163,97,81,105, 271,271, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,164,97,81,105, 272,272, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,165,97,81,105, 273,273, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,166,97,81,105, 274,274, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,167,97,81,105, 275,275, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,168,97,81,105, 276,276, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,169,97,81,105, 277,277, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,170,129,171,42,40,88,80,172,41,278,278, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,171,129,171,42,40,88,80,172,41,279,279, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,172,97,81,105, 280,280, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,173,97,81,105, 281,281, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,174,97,81,105, 282,282, 185,186,187,140, 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, 132,132,132,132,132,132,132,132,132,132,176,283, 107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, 107,107,107,107,107,107,107,107,107,107,177,284, 130,22,178,263,285,173,41, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,179,129,171,42,40,88,80,172,41,286,286, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,180,129,171,42,40,88,80,172,41,287,287, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,181,129,171,42,40,88,80,172,41,288,288, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,182,129,171,42,40,88,80,172,41,289,289, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,183,129,171,42,40,88,80,172,41,290,290, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,184,129,171,42,40,88,80,172,41,291,291, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,185,129,171,42,40,88,80,172,41,292,292, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,186,129,171,42,40,88,80,172,41,293,293, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,187,129,171,42,40,88,80,172,41,294,294, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,188,129,171,42,40,88,80,172,41,295,295, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,189,129,171,42,40,88,80,172,41,296,296, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,190,97,81,105, 297,297, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,191,97,81,105, 298,298, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,192,97,81,105, 299,299, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,193,97,81,105, 300,300, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,194,97,81,105, 301,301, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,195,97,81,105, 302,302, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,196,97,81,105, 303,303, 206, 203,202,201,198, 134,185,186,187,184,180,182,179,181,183,188,189,199, 109,195,191,193,190,192,194,196,200, 17,86,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47, 48,53,54,55,56,82,57,58,59,60,61,62,63,64,65,49,50,85,66,38,39,79,17, 201,129,171,42,40,6,80,81,172,41,105,83,84,84,83,304, 17,86,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47, 48,53,54,55,56,82,57,58,59,60,61,62,63,64,65,49,50,85,66,38,39,79,17, 202,129,171,42,40,6,80,81,172,41,105,83,84,84,83,305, 306,203, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,204,129,171,42,40,88,80,172,41,307,307, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,205,129,171,42,40,88,80,172,41,308,309,308, 185,186,187,188,189,126, 310,90,207,311, 312,88,208,313, 314,86,209,315, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,210,129,171,42,40,88,80,172,41,308,316,308, 196,85, 109,196,212, 17,110,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47, 48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,66,38,39,79,17,213,129, 171,42,40,6,80,81,172,41,105,317,318,318,317, 81,196,214, 134,185,186,187,188,189,215, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,216,129,171,42,40,88,80,172,41,319,319, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,217,129,171,42,40,88,80,172,41,320,320, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,218,97,81,105, 321,321, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,219,97,81,105, 322,322, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 103,38,39,79,17,220,129,171,42,40,88,80,172,41,104,67,104, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,221,129,171,42,40,88,80,172,41,323,323, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,222,97,81,105, 324,324, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 103,38,39,79,17,223,129,171,42,40,88,80,172,41,104,64,104, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,224,129,171,42,40,88,80,172,41,325,325, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 103,38,39,79,17,225,129,171,42,40,88,80,172,41,104,62,104, 180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, 180,180,180,180,180,180,180,180,180,180,226,326, 176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, 176,176,176,176,176,176,176,176,176,176,227,327, 17,17,228,6,329,328, 66,38,39,117,118,229,241,168,171,42,40,172,41,240, 236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, 236,236,236,236,236,236,236,236,236,236,230,330, 233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, 233,233,233,233,233,233,233,233,233,233,231,331, 17,17,232,6,121,120,231, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,233,129,171,42,40,88,80,172,41,332,332, 66,234,259,253, 333,227, 334,224, 335,222, 196,245, 185,186,187,188,189,243, 50,336,50,240,337, 196,76, 338,185,186,187,188,189,242, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,243,97,81,105, 339,339, 44,44,44,244,340, 42,42,42,245,341, 15,246,342, 15,247,343, 167,196,248, 166,196,249, 344,196,250, 164,196,251, 163,196,252, 162,196,253, 161,185,186,187,188,189,254, 160,185,186,187,188,189,255, 345,185,186,187,188,189,256, 346,185,186,187,188,189,257, 156,185,186,187,188,189,258, 347,185,186,187,188,189,259, 154,185,186,187,188,189,260, 153,185,186,187,188,189,261, 152,185,186,187,188,189,262, 151,185,186,187,188,189,263, 150,185,186,187,188,189,264, 148,348,185,186,187,188,189,265, 147,185,186,187,188,189,266, 146,185,186,187,188,189,267, 145,185,186,187,188,189,268, 144,185,186,187,188,189,269, 143,185,186,187,188,189,270, 125,196,271, 122,196,272, 121,196,273, 120,196,274, 119,196,275, 118,196,276, 117,196,277, 116,185,186,187,188,189,278, 113,349,185,186,187,188,189,279, 350,196,280, 351,196,281, 352,196,282, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,283,129,171,42,40,88,80,172,41,308,353,308, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,284,129,171,42,40,88,80,172,41,308,354,308, 219,285, 185,186,187,188,189,218, 185,186,187,188,189,217, 185,186,187,188,189,216, 185,186,187,188,189,215, 185,186,187,188,189,214, 185,186,187,188,189,213, 139, 185,138, 185,137, 185,186,187,136, 185,186,187,135, 196,212, 196,211, 196,210, 196,209, 196,208, 196,207, 106, 205, 201,204, 355,306, 186,185,186,187,188,189,307,356, 185,186,187,188,189,184, 358,357,309, 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, 100,100,100,100,100,100,100,100,100,100,310,359, 360,311, 97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97, 97,97,97,97,312,361, 362,313, 94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94, 94,94,94,94,314,363, 364,315, 365,357,316, 185,186,187,188,189,83, 196,82, 366,185,186,187,188,189,319, 185,186,187,188,189,141, 196,69, 196,68, 367,185,186,187,188,189,323, 196,65, 185,186,187,188,189,63, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,326,129,171,42,40,88,80,172,41,308,368,308, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,327,129,171,42,40,88,80,172,41,308,369,308, 370,328, 371,329, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,330,129,171,42,40,88,80,172,41,308,372,308, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,331,129,171,42,40,88,80,172,41,308,373,308, 374,185,186,187,188,189,332, 228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, 228,228,228,228,228,228,228,228,228,228,333,375, 225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, 225,225,225,225,225,225,225,225,225,225,334,376, 17,17,335,6,236,235,223,237, 17,110,124,123,67,43,44,68,45,70,71,69,72,73,46,74,115,75,51,52,76,77,78,47, 48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50,66,38,39,79,17,336,129, 171,42,40,6,80,81,172,41,105,378,377,377,378, 51,264,337,51, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,338,129,171,42,40,88,80,172,41,379,379, 380,196,48, 17,22,17,340,268,88,175,174,41,381, 17,22,17,341,266,88,175,174,41,382, 16,5, 16,4, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,344,97,81,105, 383,383, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,345,129,171,42,40,88,80,172,41,384,384, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,346,129,171,42,40,88,80,172,41,385,385, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,347,129,171,42,40,88,80,172,41,386,386, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,348,129,171,42,40,88,80,172,41,387,387, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,349,97,81,105, 388,388, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,350,129,171,42,40,88,80,172,41,389,389, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,351,129,171,42,40,88,80,172,41,390,390, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,352,129,171,42,40,88,80,172,41,391,391, 133,357,353, 108,357,354, 198,198,198,355,392, 393,356, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,357,129,171,42,40,88,80,172,41,394,394, 395,358, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,359,129,171,42,40,88,80,172,41,308,396,308, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,360,129,171,42,40,88,80,172,41,397,397, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,361,129,171,42,40,88,80,172,41,308,398,308, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,362,129,171,42,40,88,80,172,41,399,399, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,363,129,171,42,40,88,80,172,41,308,400,308, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,364,129,171,42,40,88,80,172,41,401,401, 402,365, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,366,129,171,42,40,88,80,172,41,403,403, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,367,129,171,42,40,88,80,172,41,404,404, 181,357,368, 177,357,369, 182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, 182,182,182,182,182,182,182,182,182,182,370,405, 178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, 178,178,178,178,178,178,178,178,178,178,371,406, 237,357,372, 234,357,373, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,374,129,171,42,40,88,80,172,41,407,407, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,375,129,171,42,40,88,80,172,41,308,408,308, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,376,129,171,42,40,88,80,172,41,308,409,308, 196,246, 185,186,187,188,189,244, 410,185,186,187,188,189,59, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,380,97,81,105, 411,411, 412,45, 413,43, 165,196,383, 159,185,186,187,188,189,384, 158,185,186,187,188,189,385, 155,185,186,187,188,189,386, 149,185,186,187,188,189,387, 114,196,388, 414,185,186,187,188,189,389, 111,185,186,187,188,189,390, 110,185,186,187,188,189,391, 220,415,220,392,416, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,393,129,171,42,40,88,80,172,41,417,417, 185,186,187,188,189,185, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,395,129,171,42,40,88,80,172,41,418,418, 419,357,396, 420,185,186,187,188,189,397, 421,357,398, 422,185,186,187,188,189,399, 423,357,400, 424,185,186,187,188,189,401, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,402,97,81,105, 425,425, 142,185,186,187,188,189,403, 426,185,186,187,188,189,404, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,405,129,171,42,40,88,80,172,41,308,427,308, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,406,129,171,42,40,88,80,172,41,308,428,308, 260,185,186,187,188,189,407, 229,357,408, 226,357,409, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,410,97,81,105, 429,429, 196,47, 17,22,17,412,269,88,175,174,41, 17,22,17,413,267,88,175,174,41, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,414,129,171,42,40,88,80,172,41,430,430, 221,415, 199,199,416,431, 432,185,186,187,188,189,193,417,433, 185,186,187,188,189,128, 101,419,434, 435,420, 98,421,436, 437,422, 95,423,438, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,424,129,171,42,40,88,80,172,41,439,439, 196,93, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,426,129,171,42,40,88,80,172,41,440,440, 183,357,427, 179,357,428, 196,60, 112,185,186,187,188,189,430, 200,202,431,200, 38,39,117,118,432,194,168,171,42,40,172,41, 187,433,441, 442,434, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,435,97,81,105, 443,443, 444,436, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,437,97,81,105, 445,445, 446,438, 447,185,186,187,188,189,439, 448,185,186,187,188,189,440, 449,441, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,442,129,171,42,40,88,80,172,41,450,450, 196,91, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,444,129,171,42,40,88,80,172,41,451,451, 196,89, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,446,129,171,42,40,88,80,172,41,452,452, 453,447, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,448,129,171,42,40,88,80,172,41,454,454, 188,449,455, 456,185,186,187,188,189,450, 457,185,186,187,188,189,451, 458,185,186,187,188,189,452, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,453,97,81,105, 459,459, 460,185,186,187,188,189,454, 461,455, 462,456, 463,457, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,458,129,171,42,40,88,80,172,41,464,464, 196,87, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,460,129,171,42,40,88,80,172,41,465,465, 189,189,461,466, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,462,97,81,105, 467,467, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,463,97,81,105, 468,468, 469,185,186,187,188,189,464, 470,185,186,187,188,189,465, 471,192,466,471, 196,102, 196,99, 472,469, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,470,129,171,42,40,88,80,172,41,473,473, 17,195,17,471,88,196,190, 17,98,124,123,67,68,70,71,69,72,73,74,115,75,76,77,78,66,17,472,97,81,105, 474,474, 475,185,186,187,188,189,473, 196,96, 17,101,43,44,45,46,51,52,47,48,53,54,55,56,57,58,59,60,61,62,63,64,65,49,50, 38,39,79,17,475,129,171,42,40,88,80,172,41,476,476, 185,186,187,188,189,66, }; static const unsigned short ag_sbt[] = { 0, 5, 8, 10, 12, 50, 95, 100, 163, 168, 171, 173, 175, 177, 180, 205, 207, 247, 250, 292, 334, 376, 416, 478, 520, 562, 604, 611, 620, 635, 643, 653, 708, 717, 726, 735, 776, 785, 794, 821, 824, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 968, 970, 972, 974, 986, 994,1057,1120,1125,1129,1131,1162,1202,1207,1212,1217,1248,1273, 1278,1303,1306,1331,1371,1377,1379,1386,1388,1390,1392,1399,1401,1461, 1464,1466,1468,1470,1472,1474,1483,1492,1494,1496,1498,1500,1502,1507, 1511,1516,1524,1527,1591,1596,1621,1661,1663,1671,1674,1677,1680,1685, 1710,1735,1760,1785,1810,1835,1875,1915,1955,1995,2036,2076,2116,2156, 2196,2236,2276,2316,2356,2396,2436,2476,2516,2519,2544,2569,2594,2619, 2644,2669,2694,2734,2774,2799,2824,2849,2853,2884,2915,2922,2962,3002, 3042,3082,3122,3162,3202,3242,3282,3322,3362,3387,3412,3437,3462,3487, 3512,3537,3538,3542,3555,3564,3627,3690,3692,3732,3773,3779,3783,3787, 3791,3832,3834,3837,3897,3900,3907,3947,3987,4012,4037,4079,4119,4144, 4186,4226,4268,4299,4330,4336,4350,4381,4412,4419,4459,4463,4465,4467, 4469,4471,4477,4482,4484,4491,4516,4521,4526,4529,4532,4535,4538,4541, 4544,4547,4550,4557,4564,4571,4578,4585,4592,4599,4606,4613,4620,4627, 4635,4642,4649,4656,4663,4670,4673,4676,4679,4682,4685,4688,4691,4698, 4706,4709,4712,4715,4756,4797,4799,4805,4811,4817,4823,4829,4835,4836, 4838,4840,4844,4848,4850,4852,4854,4856,4858,4860,4861,4862,4864,4866, 4874,4880,4883,4914,4916,4947,4949,4980,4982,4985,4991,4993,5000,5006, 5008,5010,5017,5019,5025,5066,5107,5109,5111,5152,5193,5200,5231,5262, 5270,5330,5334,5374,5377,5387,5397,5399,5401,5426,5466,5506,5546,5586, 5611,5651,5691,5731,5734,5737,5742,5744,5784,5786,5827,5867,5908,5948, 5989,6029,6031,6071,6111,6114,6117,6148,6179,6182,6185,6225,6266,6307, 6309,6315,6322,6347,6349,6351,6354,6361,6368,6375,6382,6385,6392,6399, 6406,6411,6451,6457,6497,6500,6507,6510,6517,6520,6527,6552,6559,6566, 6607,6648,6655,6658,6661,6686,6688,6697,6706,6746,6748,6752,6761,6767, 6770,6772,6775,6777,6780,6820,6822,6862,6865,6868,6870,6877,6881,6893, 6896,6898,6923,6925,6950,6952,6959,6966,6968,7008,7010,7050,7052,7092, 7094,7134,7137,7144,7151,7158,7183,7190,7192,7194,7196,7236,7238,7278, 7282,7307,7332,7339,7346,7350,7352,7354,7356,7396,7403,7428,7435,7437, 7477,7483 }; static const unsigned short ag_sbe[] = { 2, 6, 9, 11, 48, 86, 99, 147, 165, 170, 172, 174, 176, 179, 199, 206, 236, 249, 280, 322, 364, 405, 462, 508, 550, 592, 606, 614, 625, 637, 648, 704, 712, 721, 729, 765, 779, 788, 820, 822, 850, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 957, 969, 971, 973, 985, 993,1041,1104,1123,1128,1130,1160,1191,1204,1209,1214,1246,1267,1277, 1297,1305,1325,1360,1376,1378,1385,1387,1389,1391,1398,1400,1446,1463, 1465,1467,1469,1471,1473,1476,1485,1493,1495,1497,1499,1501,1503,1508, 1514,1518,1525,1575,1592,1615,1650,1662,1670,1673,1675,1678,1683,1704, 1729,1754,1779,1804,1829,1864,1904,1944,1984,2025,2065,2105,2145,2185, 2225,2265,2305,2345,2385,2425,2465,2505,2518,2538,2563,2588,2613,2638, 2663,2688,2723,2763,2793,2818,2843,2852,2882,2913,2917,2951,2991,3031, 3071,3111,3151,3191,3231,3271,3311,3351,3381,3406,3431,3456,3481,3506, 3531,3537,3541,3554,3563,3611,3674,3691,3721,3761,3778,3781,3785,3789, 3820,3833,3836,3882,3899,3906,3936,3976,4006,4031,4067,4108,4138,4174, 4215,4256,4297,4328,4332,4341,4379,4410,4414,4448,4460,4464,4466,4468, 4470,4476,4480,4483,4490,4510,4519,4524,4527,4530,4534,4537,4540,4543, 4546,4549,4556,4563,4570,4577,4584,4591,4598,4605,4612,4619,4626,4634, 4641,4648,4655,4662,4669,4672,4675,4678,4681,4684,4687,4690,4697,4705, 4708,4711,4714,4744,4785,4798,4804,4810,4816,4822,4828,4834,4835,4837, 4839,4843,4847,4849,4851,4853,4855,4857,4859,4860,4861,4863,4865,4872, 4879,4882,4912,4915,4945,4948,4978,4981,4984,4990,4992,4999,5005,5007, 5009,5016,5018,5024,5054,5095,5108,5110,5140,5181,5199,5229,5260,5264, 5315,5332,5363,5376,5380,5390,5398,5400,5420,5455,5495,5535,5575,5605, 5640,5680,5720,5733,5736,5740,5743,5773,5785,5815,5856,5896,5937,5977, 6018,6030,6060,6100,6113,6116,6146,6177,6181,6184,6214,6254,6295,6308, 6314,6321,6341,6348,6350,6353,6360,6367,6374,6381,6384,6391,6398,6405, 6409,6440,6456,6486,6499,6506,6509,6516,6519,6526,6546,6558,6565,6595, 6636,6654,6657,6660,6680,6687,6691,6700,6735,6747,6750,6759,6766,6768, 6771,6773,6776,6778,6809,6821,6851,6864,6867,6869,6876,6879,6885,6894, 6897,6917,6924,6944,6951,6958,6965,6967,6997,7009,7039,7051,7081,7093, 7123,7135,7143,7150,7157,7177,7189,7191,7193,7195,7225,7237,7267,7280, 7301,7326,7338,7345,7348,7351,7353,7355,7385,7399,7422,7434,7436,7466, 7482,7483 }; static const unsigned char ag_fl[] = { 1,1,0,1,4,4,3,0,1,2,2,1,2,1,2,1,2,1,2,1,2,1,1,2,3,3,1,2,2,0,0,0,5,0,1, 1,1,1,2,2,3,3,0,5,0,5,2,6,4,2,0,5,3,2,2,1,2,1,2,5,7,2,4,4,4,4,16,4,4,4, 2,2,2,2,2,2,3,2,2,1,1,4,4,4,1,3,0,11,0,9,0,9,0,7,0,0,15,0,0,13,0,0,13, 1,1,1,3,0,5,3,6,6,8,4,6,1,4,4,4,4,4,4,4,1,1,4,3,0,7,1,1,1,0,5,3,3,3,3, 3,3,2,3,6,4,4,4,4,4,4,6,4,4,4,4,4,6,4,3,6,6,4,4,4,4,4,6,4,4,1,2,2,1,1, 1,1,1,0,5,0,7,0,5,0,7,1,3,0,0,0,0,15,1,1,0,2,0,1,0,0,0,9,1,1,3,3,3,2,3, 3,3,3,3,3,3,3,3,3,3,3,4,0,2,1,3,1,0,5,1,0,5,1,3,1,0,5,1,0,5,1,1,3,3,0, 1,3,1,3,0,1,1,0,2,0,3,0,1,1,1,2,1,6,2,2,1,0,1,1,3,1,3 }; static const unsigned char ag_ptt[] = { 0, 9, 13, 13, 9, 9, 10, 19, 19, 10, 10, 16, 16, 18, 18, 14, 14, 21, 21, 24, 25, 27, 28, 28, 29, 29,122,122,123,124,127,128,124,129,129,129, 129,129,129,129,129,129,137,129,139,129,129,129,129,129,145,129,129,129, 129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, 129,129,129,129,129,129,129,129,129,129,129,129,129,130,156,130,157,130, 158,130,159,130,161,162,130,163,164,130,165,166,130,142,142,142,142,168, 142,142,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, 131,169,131,136,136,136,171,136,136,136,136,136,136,136,136,152,152,170, 170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, 170,170,170,170,170,170, 2, 2, 2, 3, 3, 4, 5, 5,172,151,173,151, 174,151,175,151,160,160,177,178,179,180,132,181,181, 1, 1,182,182,186, 187,189,133,190,190,185,185,185,185,185,185,185,185,185,185,185,185,185, 185,185,185,185,188,188,148,148,191,192,191,191,193,191,149,149,194,195, 194,194,196,194,150,150,150,150,144,144,144,144,144,147,147,147,199,147, 201,147,143,143,143,143,143,200,198,197, 6, 6,146,146,138,138,140,140 }; static const unsigned char *ag_valid(int ag_k) { const unsigned char *ag_tp = &ag_tstt[ag_sbt[(PCB).sn+1]]; while (*--ag_tp != (unsigned char) ag_k) if (*ag_tp == 0) return NULL; return ag_tp; } int bug-I158_change_reduction(bug-I158_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((bug-I158_token_type) *ag_tp)) ag_tp++; (PCB).reduction_token = (bug-I158_token_type) *ag_tp; } static void ag_ra(void) { switch(ag_rpx[(PCB).ag_ap]) { case 1: ag_rp_1(V(0,(void *)), V(3,(int *))); break; case 2: ag_rp_2(V(0,(void *)), V(3,(int *))); break; case 3: ag_rp_3(V(0,(void *)), V(2,(void *))); break; case 4: ag_rp_4(V(1,(void *))); break; case 5: ag_rp_5(V(0,(int *))); break; case 6: ag_rp_6(V(0,(void *)), V(1,(int *))); break; case 7: ag_rp_7(V(0,(int *))); break; case 8: ag_rp_8(V(0,(int *)), V(1,(void *))); break; case 9: V(0,(int *)) = ag_rp_9(V(0,(int *))); break; case 10: V(0,(int *)) = ag_rp_10(V(0,(int *)), V(1,(int *))); break; case 11: V(0,(int *)) = ag_rp_11(V(0,(int *))); break; case 12: V(0,(int *)) = ag_rp_12(V(0,(int *)), V(1,(int *))); break; case 13: V(0,(char * *)) = ag_rp_13(V(0,(int *))); break; case 14: V(0,(char * *)) = ag_rp_14(V(0,(int *))); break; case 15: V(0,(char * *)) = ag_rp_15(V(0,(int *))); break; case 16: V(0,(int *)) = ag_rp_16(V(0,(int *))); break; case 17: V(0,(int *)) = ag_rp_17(V(0,(int *)), V(1,(int *))); break; case 18: V(0,(char * *)) = ag_rp_18(V(1,(int *))); break; case 19: V(0,(char * *)) = ag_rp_19(V(1,(int *))); break; case 20: ag_rp_20(); break; case 21: ag_rp_21(); break; case 22: ag_rp_22(); break; case 23: ag_rp_23(); break; case 24: ag_rp_24(); break; case 25: ag_rp_25(); break; case 26: ag_rp_26(); break; case 27: ag_rp_27(); break; case 28: ag_rp_28(); break; case 29: ag_rp_29(); break; case 30: ag_rp_30(); break; case 31: ag_rp_31(); break; case 32: ag_rp_32(); break; case 33: ag_rp_33(); break; case 34: ag_rp_34(); break; case 35: ag_rp_35(); break; case 36: ag_rp_36(); break; case 37: ag_rp_37(); break; case 38: ag_rp_38(); break; case 39: ag_rp_39(); break; case 40: ag_rp_40(); break; case 41: ag_rp_41(); break; case 42: ag_rp_42(); break; case 43: ag_rp_43(); break; case 44: ag_rp_44(); break; case 45: ag_rp_45(); break; case 46: ag_rp_46(); break; case 47: ag_rp_47(); break; case 48: ag_rp_48(); break; case 49: ag_rp_49(); break; case 50: ag_rp_50(); break; case 51: ag_rp_51(); break; case 52: ag_rp_52(); break; case 53: ag_rp_53(); break; case 54: ag_rp_54(); break; case 55: ag_rp_55(); break; case 56: ag_rp_56(); break; case 57: ag_rp_57(); break; case 58: ag_rp_58(); break; case 59: ag_rp_59(); break; case 60: ag_rp_60(); break; case 61: ag_rp_61(); break; case 62: ag_rp_62(); break; case 63: ag_rp_63(); break; case 64: ag_rp_64(); break; case 65: ag_rp_65(); break; case 66: ag_rp_66(); break; case 67: ag_rp_67(); break; case 68: ag_rp_68(); break; case 69: ag_rp_69(); break; case 70: ag_rp_70(); break; case 71: ag_rp_71(); break; case 72: ag_rp_72(); break; case 73: ag_rp_73(); break; case 74: ag_rp_74(); break; case 75: ag_rp_75(); break; case 76: ag_rp_76(); break; case 77: ag_rp_77(); break; case 78: ag_rp_78(); break; case 79: ag_rp_79(); break; case 80: ag_rp_80(); break; case 81: ag_rp_81(); break; case 82: ag_rp_82(); break; case 83: ag_rp_83(); break; case 84: ag_rp_84(); break; case 85: ag_rp_85(); break; case 86: ag_rp_86(); break; case 87: ag_rp_87(); break; case 88: ag_rp_88(); break; case 89: ag_rp_89(); break; case 90: ag_rp_90(); break; case 91: ag_rp_91(); break; case 92: ag_rp_92(); break; case 93: ag_rp_93(); break; case 94: ag_rp_94(); break; case 95: ag_rp_95(); break; case 96: ag_rp_96(); break; case 97: ag_rp_97(); break; case 98: ag_rp_98(); break; case 99: ag_rp_99(); break; case 100: ag_rp_100(); break; case 101: ag_rp_101(); break; case 102: ag_rp_102(); break; case 103: ag_rp_103(); break; case 104: ag_rp_104(); break; case 105: ag_rp_105(); break; case 106: ag_rp_106(); break; case 107: ag_rp_107(); break; case 108: ag_rp_108(); break; case 109: ag_rp_109(); break; case 110: ag_rp_110(); break; case 111: ag_rp_111(); break; case 112: ag_rp_112(); break; case 113: ag_rp_113(); break; case 114: ag_rp_114(); break; case 115: ag_rp_115(); break; case 116: ag_rp_116(); break; case 117: ag_rp_117(); break; case 118: ag_rp_118(); break; case 119: ag_rp_119(); break; case 120: ag_rp_120(); break; case 121: ag_rp_121(); break; case 122: ag_rp_122(); break; case 123: ag_rp_123(); break; case 124: ag_rp_124(); break; case 125: ag_rp_125(); break; case 126: ag_rp_126(); break; case 127: ag_rp_127(); break; case 128: ag_rp_128(); break; case 129: ag_rp_129(); break; case 130: ag_rp_130(); break; case 131: ag_rp_131(); break; case 132: ag_rp_132(); break; case 133: ag_rp_133(); break; case 134: ag_rp_134(); break; case 135: ag_rp_135(); break; case 136: ag_rp_136(); break; case 137: ag_rp_137(); 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; case 142: ag_rp_142(); break; case 143: V(0,(double *)) = ag_rp_143(); break; case 144: V(0,(double *)) = ag_rp_144(); break; case 145: V(0,(double *)) = ag_rp_145(); break; case 146: V(0,(double *)) = ag_rp_146(); break; case 147: V(0,(double *)) = ag_rp_147(); break; case 148: V(0,(int *)) = ag_rp_148(); break; case 149: V(0,(char * *)) = ag_rp_149(); break; case 150: V(0,(char * *)) = ag_rp_150(); break; case 151: ag_rp_151(); break; case 152: ag_rp_152(); break; case 153: ag_rp_153(); break; case 154: ag_rp_154(); break; case 155: ag_rp_155(); break; case 156: ag_rp_156(); break; case 157: ag_rp_157(); break; case 158: ag_rp_158(); break; case 159: ag_rp_159(); break; case 160: ag_rp_160(); break; case 161: ag_rp_161(); break; case 162: ag_rp_162(); break; case 163: ag_rp_163(); break; case 164: ag_rp_164(); break; case 165: ag_rp_165(); break; case 166: V(0,(double *)) = ag_rp_166(); break; case 167: V(0,(double *)) = ag_rp_167(); break; case 168: ag_rp_168(); break; case 169: ag_rp_169(); break; case 170: ag_rp_170(); break; case 171: ag_rp_171(); break; case 172: ag_rp_172(); break; case 173: ag_rp_173(); break; case 174: ag_rp_174(); break; case 175: ag_rp_175(); break; case 176: ag_rp_176(); break; case 177: ag_rp_177(); break; case 178: ag_rp_178(); break; case 179: ag_rp_179(); break; case 180: ag_rp_180(); break; case 181: ag_rp_181(); break; case 182: ag_rp_182(); break; case 183: ag_rp_183(); break; case 184: ag_rp_184(); break; case 185: ag_rp_185(); break; case 186: ag_rp_186(); break; case 187: ag_rp_187(); break; case 188: ag_rp_188(); break; case 189: ag_rp_189(); break; case 190: ag_rp_190(); break; case 191: ag_rp_191(); break; case 192: ag_rp_192(); break; case 193: ag_rp_193(); break; case 194: ag_rp_194(); break; case 195: ag_rp_195(); break; case 196: ag_rp_196(); break; case 197: ag_rp_197(); break; case 198: ag_rp_198(); break; case 199: ag_rp_199(); break; case 200: ag_rp_200(); break; case 201: ag_rp_201(); break; case 202: ag_rp_202(); break; case 203: ag_rp_203(); break; case 204: ag_rp_204(); break; case 205: ag_rp_205(); break; case 206: ag_rp_206(); break; case 207: ag_rp_207(); break; case 208: ag_rp_208(); break; case 209: ag_rp_209(); break; case 210: ag_rp_210(); break; case 211: ag_rp_211(); break; case 212: ag_rp_212(); break; case 213: ag_rp_213(); break; case 214: ag_rp_214(); break; case 215: ag_rp_215(); break; case 216: ag_rp_216(); break; case 217: ag_rp_217(); break; case 218: ag_rp_218(); break; case 219: ag_rp_219(); break; case 220: ag_rp_220(); break; case 221: V(0,(int *)) = ag_rp_221(); break; case 222: V(0,(int *)) = ag_rp_222(); break; case 223: ag_rp_223(); break; case 224: ag_rp_224(); break; case 225: ag_rp_225(); break; case 226: ag_rp_226(); break; case 227: ag_rp_227(); break; } } #define TOKEN_NAMES bug-I158_token_names const char *const bug-I158_token_names[205] = { "program", "step_part", "const", "number", "intnum", "symbol_or_lineno", "hashed_number", "SEP", "EOFILE", "FNUM", "simple real", "", "'+'", "", "exponent", "'-'", "integer part", "'.'", "fraction part", "", "digit", "name", "letter", "", "SYMBOL", "STRSYM", "'$'", "DIGITS", "digit string", "STRING", "'\\\"'", "string text", "'\\n'", "GOSUB", "LABEL", "ON", "INTERRUPT", "BREAK", "CONTINUE", "IF", "THEN", "ELSE", "ENDIF", "PRINT", "INPUT", "LINE", "RETURN", "DIM", "END", "AT", "SCREEN", "REVERSE", "AND", "OR", "NOT", "NE", "LE", "GE", "LT", "GT", "EQ", "READ", "DATA", "RESTORE", "OPEN", "CLOSE", "WINDOW", "DOT", "CIRCLE", "TEXT", "CLEAR", "PRINTER", "WAIT", "BELL", "MAP", "XMAP", "YMAP", "ARROW", "XTICK", "YTICK", "SIN", "ASIN", "COS", "ACOS", "TAN", "ATAN", "EXP", "LOG", "SQRT", "MYEOF", "INT", "FRAC", "MOD", "RAN", "LEN", "VAL", "LEFT", "RIGHT", "MID", "MIN", "MAX", "STR", "INKEY", "CHR", "ASC", "UPPER", "LOWER", "TRIM", "LTRIM", "RTRIM", "INSTR", "SYSTEM", "SYSTEM2", "PEEK", "PEEK2", "POKE", "DATE", "TIME", "'*'", "'/'", "'^'", "UMINUS", "NAME", "program", "statement list", "eof", "statement_list", "", "", "statement", "string_assignment", "assignment", "for_loop", "if_clause", "\"GOTO\"", "\"GOSUB\"", "expression", "", "goto_list", "", "gosub_list", "','", "string_expression", "printintro", "printlist", "", "semicolon", "inputintro", "inputlist", "readlist", "datalist", "dimlist", "mapping", "\"TO\"", "'('", "')'", "", "", "", "", "indexlist", "", "", "", "", "", "", "string_function", "", "", "function", "", "", "", "", "", "\"FOR\"", "", "", "", "", "next_or_eofile", "next_symbol", "\"NEXT\"", "\"STEP\"", "condition", "", "", "else_part", "", "endif_or_eof", "input", "", "", "readitem", "", "", "stream", "position", "", "prompt", "", "'#'", "';'", "", }; #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((*(PCB).lab)) && (*(PCB).lab) != '\\') { char buf[20]; sprintf(buf, "\'%c\'", (char) (*(PCB).lab)); 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(); if ((PCB).rx < (PCB).fx) { (PCB).input_code = (PCB).lab[(PCB).rx++]; (PCB).token_number = (bug-I158_token_type) AG_TCV((PCB).input_code);} else { GET_INPUT; (PCB).lab[(PCB).fx++] = (PCB).input_code; (PCB).token_number = (bug-I158_token_type) AG_TCV((PCB).input_code); (PCB).rx++; } if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE((PCB).input_code); 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 == (bug-I158_token_type) ag_t); (PCB).rx = 0; 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).lab; (PCB).ssx--; ag_track(); ag_ra(); if ((PCB).exit_flag != AG_RUNNING_CODE) return 0; (PCB).ssx++; if ((PCB).rx < (PCB).fx) { (PCB).input_code = (PCB).lab[(PCB).rx++]; (PCB).token_number = (bug-I158_token_type) AG_TCV((PCB).input_code);} else { GET_INPUT; (PCB).lab[(PCB).fx++] = (PCB).input_code; (PCB).token_number = (bug-I158_token_type) AG_TCV((PCB).input_code); (PCB).rx++; } if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE((PCB).input_code); 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 == (bug-I158_token_type) ag_t); (PCB).rx = 0; 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 = (bug-I158_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 = (bug-I158_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 = (bug-I158_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).lab; (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; (PCB).ss[(PCB).ssx] = (PCB).sn; (PCB).ssx++; (PCB).sn = (PCB).ag_ap; (PCB).rx = 0; 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).rx = 0; (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 = (bug-I158_token_type) ag_ptt[(PCB).ag_ap]; (PCB).btsx = 0, (PCB).drt = -1; (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).lab; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (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 char)(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).lab; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (PCB).ss[(PCB).ssx] = (PCB).sn; ag_track(); (PCB).reduction_token = (bug-I158_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); 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).rx = 0; (PCB).exit_flag = AG_SYNTAX_ERROR_CODE; ag_diagnose(); SYNTAX_ERROR; {(PCB).rx = 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 { (PCB).ss[(PCB).ssx] = (PCB).sn; } (PCB).rx = 0; (PCB).reduction_token = (bug-I158_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); 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 = (bug-I158_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; (PCB).ss[(PCB).ssx] = (PCB).sn; } (PCB).rx = 0; while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); 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_bug-I158(void) { (PCB).rx = (PCB).fx = 0; (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 bug-I158(void) { init_bug-I158(); (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; if ((PCB).rx < (PCB).fx) { (PCB).input_code = (PCB).lab[(PCB).rx++]; (PCB).token_number = (bug-I158_token_type) AG_TCV((PCB).input_code);} else { GET_INPUT; (PCB).lab[(PCB).fx++] = (PCB).input_code; (PCB).token_number = (bug-I158_token_type) AG_TCV((PCB).input_code); (PCB).rx++; } if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE((PCB).input_code); if (ag_ch < 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] > (unsigned char)(PCB).token_number) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); if (ag_tstt[ag_t1] != (unsigned char)(PCB).token_number) ag_t1 = ag_sbe[(PCB).sn]; } (PCB).ag_ap = ag_pstt[ag_t1]; (ag_gt_procs_scan[ag_astt[ag_t1]])(); } }