Mercurial > ~dholland > hg > ag > index.cgi
view tests/agcl/oldagsrc/good/xvmc.cpp @ 8:ec2b657edf13
Add explicit lint-comment-style fallthrough annotations.
GCC now assumes that if you don't have these you're making a mistake,
which is annoying.
XXX: This changeset updates the AG output files only (by hand) and is
XXX: abusive - rebuilding them will erase the change. However, I need
XXX: to get things to build before I can try to get AG to issue the
XXX: annotations itself, so this seems like a reasonable expedient.
author | David A. Holland |
---|---|
date | Mon, 30 May 2022 23:51:43 -0400 |
parents | 13d2b8934445 |
children |
line wrap: on
line source
/* XVMC.SYN Extensible Scripting Language Copyright (c) 1998 Parsifal Software, All Rights Reserved. The expression syntax is borrowed from C but with the addition of the FORTRAN exponentiation operator (**). The supported operations are: Assignment operators: =, +=, -=, *=, /=, %=, , &=, |=, ^=>>=, <<= Conditional expressions: ? : Logical operators: !, &&, || Bitwise logical operators: &, |, ^, ~ Comparison operators: ==, !=, <, <=, >, >= Shift operators: <<, >> Binary arithmetic operators: +, -, *, /, % Unary arithmetic operators: +, - Exponentiation: ** Autoincrement operators: ++, --; Cast operators (<type name>) Parentheses Function calls Object method calls Built in data types are int, double and String. Statements may include variable declarations, expression statements, blocks, if/else statements, while , do/while, or for statements, following the rules of C. The statement syntax has been written to avoid the conventional if/else ambiguity. Input strings may contain any number of statements. White space may be used freely, including both C and C++ style comments. xvmc.syn is compiled with the AnaGram parser generator yielding xvm.h and xvm.cpp. For information about AnaGram, visit http://www.parsifalsoft.com. */ #include <math.h> #include "xvm.h" // defines external interface #include "integer.h" #include "double.h" #include "xstring.h" static VirtualMachine *vm; typedef VirtualMachine::CodeSeg Code; // For the sake of readability /* * 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 XVMC_H #include "xvmc.h" #endif #ifndef XVMC_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]) vmCompile_pcb_type vmCompile_pcb; #define PCB vmCompile_pcb #define CHANGE_REDUCTION(x) vmCompile_change_reduction(vmCompile_##x##_token) int vmCompile_change_reduction(vmCompile_token_type); Code vmCompile_value(void); #line - "xvmc.syn" // begin embedded C #include <string.h> ErrorRecord::ErrorRecord(char *msg) : message(msg), line(PCB.line), column(PCB.column) {/* Initializers do it all */} ErrorLog errorLog; #define SYNTAX_ERROR errorLog.add(PCB.error_message) int VirtualMachine::compile(char *text) { vm = this; resetCharStack(); vmCompile_pcb.pointer = (unsigned char *) text; vmCompile(); { Code program = vmCompile_value() << EXIT; int n = program.size(); codeStore = new int[n]; while (n--) codeStore[n] = program[n]; } return vmCompile_pcb.exit_flag != AG_SUCCESS_CODE; } Code VirtualMachine::codeWhile(Code x, Code s) { Code branch(VirtualMachine::BR); branch << 0; //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined"); x << VirtualMachine::BRF << (s.size() + branch.size()); int blockLength = s.size() + x.size() + branch.size(); x << s << VirtualMachine::BR << -blockLength; return x; } Code VirtualMachine::codeDoWhile(Code s, Code x) { Code branch(VirtualMachine::BR); branch << 0; int blockLength = s.size() + x.size() + branch.size(); //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined"); s << x << VirtualMachine::BRT << -blockLength; return s; } Code VirtualMachine::codeFor(Code init, Code cond, Code inc, Code s) { s << inc; // append increment code to end of body of for loop //if (!cond.type->isTruthDefined()) errorLog.add("True/False not defined"); init << codeWhile(cond, s); return init; } #line - "xvmc.cpp" #ifndef CONVERT_CASE #define CONVERT_CASE(c) (c) #endif #ifndef TAB_SPACING #define TAB_SPACING 8 #endif Code vmCompile_value(void) { Code returnValue; returnValue = (*(Code *) &(PCB).vs[(PCB).ssx]); return returnValue; } static Code ag_rp_1(void) { #line - "xvmc.syn" return Code(); #line - "xvmc.cpp" } static Code ag_rp_2(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_3(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_4(void) { #line - "xvmc.syn" return errorLog.add("Continuing scan"), Code(); #line - "xvmc.cpp" } static Code ag_rp_5(int t, int n) { #line - "xvmc.syn" return vm->declareVariable(t,n), Code(); #line - "xvmc.cpp" } static Code ag_rp_6(int t, int n, Code x) { #line - "xvmc.syn" int name = vm->declareVariable(t,n); return Code(VirtualMachine::PUSHV) << name << x << VirtualMachine::ASSIGN << VirtualMachine::POP; #line - "xvmc.cpp" } static Code ag_rp_7(int t, int n, Code size) { #line - "xvmc.syn" return vm->declareArray(t,n, size); #line - "xvmc.cpp" } static Code ag_rp_8(int t, int n, Code args) { #line - "xvmc.syn" return vm->declareObject(t,n,args); #line - "xvmc.cpp" } static Code ag_rp_9(void) { #line - "xvmc.syn" return Code(); #line - "xvmc.cpp" } static Code ag_rp_10(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_11(Code x) { #line - "xvmc.syn" return x.initList(); #line - "xvmc.cpp" } static Code ag_rp_12(Code list, Code x) { #line - "xvmc.syn" return list.append(x); #line - "xvmc.cpp" } static Code ag_rp_13(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_14(Code x, Code s) { #line - "xvmc.syn" return x << s; #line - "xvmc.cpp" } static Code ag_rp_15(Code x) { #line - "xvmc.syn" return x << VirtualMachine::POP; #line - "xvmc.cpp" } static Code ag_rp_16(void) { #line - "xvmc.syn" return Code(); #line - "xvmc.cpp" } static Code ag_rp_17(void) { #line - "xvmc.syn" return Code(); #line - "xvmc.cpp" } static Code ag_rp_18(Code s) { #line - "xvmc.syn" return s; #line - "xvmc.cpp" } static Code ag_rp_19(Code s) { #line - "xvmc.syn" return errorLog.add("Continuing scan"), s; #line - "xvmc.cpp" } static Code ag_rp_20(Code s, Code x) { #line - "xvmc.syn" return vm->codeDoWhile(s,x); #line - "xvmc.cpp" } static Code ag_rp_21(Code x, Code s) { #line - "xvmc.syn" return vm->codeWhile(x,s); #line - "xvmc.cpp" } static Code ag_rp_22(Code init, Code cond, Code inc, Code s) { #line - "xvmc.syn" return vm->codeFor(init, cond, inc, s); #line - "xvmc.cpp" } static Code ag_rp_23(void) { #line - "xvmc.syn" return Code(); #line - "xvmc.cpp" } static Code ag_rp_24(Code x) { #line - "xvmc.syn" return x << VirtualMachine::POP; #line - "xvmc.cpp" } static Code ag_rp_25(Code list, Code x) { #line - "xvmc.syn" return list << x << VirtualMachine::POP; #line - "xvmc.cpp" } static Code ag_rp_26(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_27(Code x, Code s) { #line - "xvmc.syn" return vm->codeWhile(x,s); #line - "xvmc.cpp" } static Code ag_rp_28(Code init, Code cond, Code inc, Code s) { #line - "xvmc.syn" return vm->codeFor(init, cond, inc, s); #line - "xvmc.cpp" } static Code ag_rp_29(Code x, Code s) { #line - "xvmc.syn" return x << VirtualMachine::BRF << s.size() << s; #line - "xvmc.cpp" } static Code ag_rp_30(Code x, Code s1, Code s2) { #line - "xvmc.syn" s1 << VirtualMachine::BR << s2.size(); x << VirtualMachine::BRF << s1.size() << s1 << s2; return x; #line - "xvmc.cpp" } static Code ag_rp_31(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_32(Code x) { #line - "xvmc.syn" return x.testOK(); #line - "xvmc.cpp" } static Code ag_rp_33(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::ASSIGN; #line - "xvmc.cpp" } static Code ag_rp_34(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::ADD_EQ; #line - "xvmc.cpp" } static Code ag_rp_35(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::SUB_EQ; #line - "xvmc.cpp" } static Code ag_rp_36(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::MULT_EQ; #line - "xvmc.cpp" } static Code ag_rp_37(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::DIV_EQ; #line - "xvmc.cpp" } static Code ag_rp_38(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::MOD_EQ; #line - "xvmc.cpp" } static Code ag_rp_39(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::OR_EQ; #line - "xvmc.cpp" } static Code ag_rp_40(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::AND_EQ; #line - "xvmc.cpp" } static Code ag_rp_41(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::XOR_EQ; #line - "xvmc.cpp" } static Code ag_rp_42(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::LS_EQ; #line - "xvmc.cpp" } static Code ag_rp_43(Code k, Code x) { #line - "xvmc.syn" return k << x << VirtualMachine::RS_EQ; #line - "xvmc.cpp" } static Code ag_rp_44(int k) { #line - "xvmc.syn" return Code(VirtualMachine::PUSHV).setType(vm->symbolTable[k].type) << k; #line - "xvmc.cpp" } static Code ag_rp_45(Code k, Code x) { #line - "xvmc.syn" return k.setType(k.type->element) << x << VirtualMachine::SUBSCRIPT; #line - "xvmc.cpp" } static Code ag_rp_46(Code c, Code x, Code y) { #line - "xvmc.syn" //if (!c.type->isTruthDefined()) errorLog.add("True/False not defined"); x << VirtualMachine::BR << y.size(); c << VirtualMachine::BRF << x.size() << x << y; return c; #line - "xvmc.cpp" } static Code ag_rp_47(Code x) { #line - "xvmc.syn" return x.testOK(); #line - "xvmc.cpp" } static Code ag_rp_48(Code x, Code y) { #line - "xvmc.syn" //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined"); return x << VirtualMachine::OR << y.size() << y; #line - "xvmc.cpp" } static Code ag_rp_49(Code x, Code y) { #line - "xvmc.syn" //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined"); return x << VirtualMachine::AND << y.size() << y; #line - "xvmc.cpp" } static Code ag_rp_50(Code x) { #line - "xvmc.syn" return x.testOK(); #line - "xvmc.cpp" } static Code ag_rp_51(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::BITOR,y); #line - "xvmc.cpp" } static Code ag_rp_52(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::XOR,y); #line - "xvmc.cpp" } static Code ag_rp_53(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::BITAND,y); #line - "xvmc.cpp" } static Code ag_rp_54(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::EQ,y); #line - "xvmc.cpp" } static Code ag_rp_55(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::NE,y); #line - "xvmc.cpp" } static Code ag_rp_56(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::LT,y); #line - "xvmc.cpp" } static Code ag_rp_57(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::LE,y); #line - "xvmc.cpp" } static Code ag_rp_58(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::GT,y); #line - "xvmc.cpp" } static Code ag_rp_59(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::GE,y); #line - "xvmc.cpp" } static Code ag_rp_60(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::LS,y); #line - "xvmc.cpp" } static Code ag_rp_61(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::RS,y); #line - "xvmc.cpp" } static Code ag_rp_62(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::ADD,y); #line - "xvmc.cpp" } static Code ag_rp_63(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::SUB,y); #line - "xvmc.cpp" } static Code ag_rp_64(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::MULT,y); #line - "xvmc.cpp" } static Code ag_rp_65(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::DIV,y); #line - "xvmc.cpp" } static Code ag_rp_66(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::MOD,y); #line - "xvmc.cpp" } static Code ag_rp_67(int t, Code x) { #line - "xvmc.syn" return x.cast((VirtualMachine::Type::Id) t) << VirtualMachine::CAST << t; #line - "xvmc.cpp" } static Code ag_rp_68(Code x) { #line - "xvmc.syn" return x << VirtualMachine::INCR; #line - "xvmc.cpp" } static Code ag_rp_69(Code x) { #line - "xvmc.syn" return x << VirtualMachine::INCR; #line - "xvmc.cpp" } static Code ag_rp_70(Code x) { #line - "xvmc.syn" return x << VirtualMachine::NEG; #line - "xvmc.cpp" } static Code ag_rp_71(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static Code ag_rp_72(Code x) { #line - "xvmc.syn" return vm->list(stdout), x << VirtualMachine::NOT; #line - "xvmc.cpp" } static Code ag_rp_73(Code x) { #line - "xvmc.syn" return x << VirtualMachine::COMPL; #line - "xvmc.cpp" } static Code ag_rp_74(Code x, Code y) { #line - "xvmc.syn" return x.binop(VirtualMachine::POW,y); #line - "xvmc.cpp" } static Code ag_rp_75(double x) { #line - "xvmc.syn" return vm->doubleList.push(x), Code(VirtualMachine::PUSHD).setType(&DoubleType::doubleType) << (int)(vm->doubleList.size() - 1); #line - "xvmc.cpp" } static Code ag_rp_76(int x) { #line - "xvmc.syn" return Code(VirtualMachine::PUSHI).setType(&IntegerType::intType) << x; #line - "xvmc.cpp" } static Code ag_rp_77(int k) { #line - "xvmc.syn" return Code(VirtualMachine::PUSHS).setType(&StringType::stringType) << k; #line - "xvmc.cpp" } static Code ag_rp_78(Code k) { #line - "xvmc.syn" return k; #line - "xvmc.cpp" } static Code ag_rp_79(Code k) { #line - "xvmc.syn" return k << VirtualMachine::PUSH << VirtualMachine::INCR << VirtualMachine::POP; #line - "xvmc.cpp" } static Code ag_rp_80(Code k) { #line - "xvmc.syn" return k << VirtualMachine::PUSH << VirtualMachine::DECR << VirtualMachine::POP; #line - "xvmc.cpp" } static Code ag_rp_81(int n, Code args) { #line - "xvmc.syn" return vm->invokeFunction(n, args); #line - "xvmc.cpp" } static Code ag_rp_82(Code k, int n, Code args) { #line - "xvmc.syn" return vm->invokeMethod(k, n, args); #line - "xvmc.cpp" } static Code ag_rp_83(Code x) { #line - "xvmc.syn" return x; #line - "xvmc.cpp" } static double ag_rp_84(double x, int e) { #line - "xvmc.syn" return x*pow(10,e); #line - "xvmc.cpp" } static double ag_rp_85(double x, int e) { #line - "xvmc.syn" return x*pow(10,-e); #line - "xvmc.cpp" } static double ag_rp_86(int i, double f) { #line - "xvmc.syn" return i+f; #line - "xvmc.cpp" } static double ag_rp_87(int i) { #line - "xvmc.syn" return i; #line - "xvmc.cpp" } static double ag_rp_88(double f) { #line - "xvmc.syn" return f; #line - "xvmc.cpp" } static int ag_rp_89(int d) { #line - "xvmc.syn" return d-'0'; #line - "xvmc.cpp" } static int ag_rp_90(int x, int d) { #line - "xvmc.syn" return 10*x + d-'0'; #line - "xvmc.cpp" } static double ag_rp_91(int d) { #line - "xvmc.syn" return (d-'0')/10.; #line - "xvmc.cpp" } static double ag_rp_92(int d, double f) { #line - "xvmc.syn" return (d-'0' + f)/10.; #line - "xvmc.cpp" } static int ag_rp_93(int d) { #line - "xvmc.syn" return d-'0'; #line - "xvmc.cpp" } static int ag_rp_94(int x, int d) { #line - "xvmc.syn" return 10*x + d-'0'; #line - "xvmc.cpp" } static int ag_rp_95(int k) { #line - "xvmc.syn" char *name = popString(k); VirtualMachine::Type::Id id = VirtualMachine::Type::idType(name); if (id != VirtualMachine::Type::UNDEFINED) return (int) id; CHANGE_REDUCTION(variable_name); return vm->locateVariable(name); #line - "xvmc.cpp" } static int ag_rp_96(int c) { #line - "xvmc.syn" return pushChar(c), 1; #line - "xvmc.cpp" } static int ag_rp_97(int k, int c) { #line - "xvmc.syn" return pushChar(c), k+1; #line - "xvmc.cpp" } static int ag_rp_98(int c) { #line - "xvmc.syn" return c; #line - "xvmc.cpp" } static int ag_rp_99(int k) { #line - "xvmc.syn" return vm->stringList.push(CharString(popString(k))), vm->stringList.size() - 1; #line - "xvmc.cpp" } static int ag_rp_100(void) { #line - "xvmc.syn" return 0; #line - "xvmc.cpp" } static int ag_rp_101(int k, int c) { #line - "xvmc.syn" return pushChar(c), k+1; #line - "xvmc.cpp" } static int ag_rp_102(void) { #line - "xvmc.syn" return '\a'; #line - "xvmc.cpp" } static int ag_rp_103(void) { #line - "xvmc.syn" return '\b'; #line - "xvmc.cpp" } static int ag_rp_104(void) { #line - "xvmc.syn" return '\f'; #line - "xvmc.cpp" } static int ag_rp_105(void) { #line - "xvmc.syn" return '\n'; #line - "xvmc.cpp" } static int ag_rp_106(void) { #line - "xvmc.syn" return '\r'; #line - "xvmc.cpp" } static int ag_rp_107(void) { #line - "xvmc.syn" return '\t'; #line - "xvmc.cpp" } static int ag_rp_108(void) { #line - "xvmc.syn" return '\v'; #line - "xvmc.cpp" } static int ag_rp_109(void) { #line - "xvmc.syn" return '\\'; #line - "xvmc.cpp" } static int ag_rp_110(void) { #line - "xvmc.syn" return '\?'; #line - "xvmc.cpp" } static int ag_rp_111(void) { #line - "xvmc.syn" return '\''; #line - "xvmc.cpp" } static int ag_rp_112(void) { #line - "xvmc.syn" return '"'; #line - "xvmc.cpp" } static int ag_rp_113(int d) { #line - "xvmc.syn" return d-'0'; #line - "xvmc.cpp" } static int ag_rp_114(int n, int d) { #line - "xvmc.syn" return 8*n + d-'0'; #line - "xvmc.cpp" } static int ag_rp_115(int n, int d) { #line - "xvmc.syn" return 8*n + d-'0'; #line - "xvmc.cpp" } static int ag_rp_116(int d) { #line - "xvmc.syn" return d; #line - "xvmc.cpp" } static int ag_rp_117(int n, int d) { #line - "xvmc.syn" return 16*n + d; #line - "xvmc.cpp" } static int ag_rp_118(int d) { #line - "xvmc.syn" return (d&7) + 9; #line - "xvmc.cpp" } #define READ_COUNTS #define WRITE_COUNTS #undef V #define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i])) #undef VS #define VS(i) (PCB).vs[(PCB).ssx + i] #ifndef GET_CONTEXT #define GET_CONTEXT CONTEXT = (PCB).input_context #endif typedef enum { ag_action_1, ag_action_2, ag_action_3, ag_action_4, ag_action_5, ag_action_6, ag_action_7, ag_action_8, ag_action_9, ag_action_10, ag_action_11, ag_action_12 } ag_parser_action; #ifndef NULL_VALUE_INITIALIZER #define NULL_VALUE_INITIALIZER = { 0 } #endif static vmCompile_vs_type const ag_null_value NULL_VALUE_INITIALIZER; static const unsigned char ag_rpx[] = { 0, 1, 2, 0, 0, 0, 0, 3, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 0, 46, 47, 0, 48, 0, 49, 50, 0, 51, 0, 52, 0, 53, 0, 54, 55, 0, 56, 57, 58, 59, 0, 60, 61, 0, 62, 63, 0, 64, 65, 66, 0, 67, 0, 68, 69, 70, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, 86, 87, 88, 0, 0, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 0, 0, 99,100,101, 0, 0,102,103,104,105,106,107,108,109,110,111,112, 0, 0, 0, 0, 0, 113,114,115,116,117, 0,118 }; static const unsigned char ag_key_itt[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const unsigned short ag_key_pt[] = { 0,164, 0,165, 0,166, 0,167, 0,168,0 }; static const unsigned char ag_key_ch[] = { 0, 42, 47,255, 43, 45, 47,100,102,105,119,255, 42,255, 38, 61,255, 42, 61,255, 43, 61,255, 45, 61,255, 42, 47, 61,255, 61,255, 60, 61,255, 61, 255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, 45, 47, 60, 61, 62, 94, 100,101,102,105,119,124,255, 43, 45,100,102,105,119,255, 34, 39, 63, 92, 97, 98,102,110,114,116,118,120,255, 92,255, 42, 47,255, 60, 61,255, 61, 62,255, 33, 38, 42, 47, 60, 61, 62,124,255, 42, 47,255, 43, 45, 47,255, 42, 47,255, 60, 61,255, 61, 62,255, 33, 38, 42, 43, 45, 47, 60, 61, 62, 124,255, 60, 61,255, 61, 62,255, 33, 38, 42, 60, 61, 62,124,255, 43, 45, 255, 60, 61,255, 61, 62,255, 33, 38, 60, 61, 62,124,255, 33, 38, 60, 61, 62,124,255, 33, 38, 61,124,255, 38,124,255, 38,255, 42, 47,255, 47,255, 124,255, 38, 61,255, 42, 61,255, 43, 61,255, 45, 61,255, 42, 47, 61,255, 61,255, 60, 61,255, 61,255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, 45, 47, 60, 61, 62, 94,124,255, 42, 47,255, 43, 45, 47,100,101,102,105, 119,255, 38, 61,255, 42, 61,255, 43, 61,255, 45, 61,255, 61,255, 60, 61, 255, 61,255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, 45, 47, 60, 61, 62, 94,124,255, 60, 61,255, 61, 62,255, 33, 38, 42, 43, 45, 60, 61, 62, 124,255, 43, 45,100,101,102,105,119,255,119,255, 42, 47,255, 60, 61,255, 61, 62,255, 33, 38, 42, 43, 45, 47, 60, 61, 62,100,102,105,119,124,255 }; static const unsigned char ag_key_act[] = { 0,0,0,4,3,3,2,7,7,7,7,4,3,4,0,0,4,0,0,4,0,0,4,0,0,4,0,0,0,4,0,4,1,0,4, 0,4,0,1,4,0,0,4,3,3,2,2,2,2,2,2,3,2,3,7,7,7,7,7,2,4,3,3,7,7,7,7,4,0,0, 0,0,0,0,0,0,0,0,0,0,4,2,4,0,0,4,0,0,4,0,0,4,3,3,3,2,2,3,2,3,4,0,0,4,3, 3,2,4,0,0,4,0,0,4,0,0,4,3,3,3,3,3,2,2,3,2,3,4,0,0,4,0,0,4,3,3,3,2,3,2, 3,4,3,3,4,0,0,4,0,0,4,3,3,2,3,2,3,4,3,3,3,3,3,3,4,3,3,3,3,4,3,3,4,3,4, 0,0,4,2,4,3,4,0,0,4,0,0,4,0,0,4,0,0,4,0,0,0,4,0,4,1,0,4,0,4,0,1,4,0,0, 4,3,3,2,2,2,2,2,2,3,2,3,2,4,0,0,4,3,3,2,7,7,7,7,7,4,0,0,4,0,0,4,0,0,4, 0,0,4,0,4,1,0,4,0,4,0,1,4,0,0,4,3,3,2,2,2,2,3,2,3,2,3,2,4,0,0,4,0,0,4, 3,3,3,3,3,2,3,2,3,4,3,3,7,7,7,7,7,4,7,4,0,0,4,0,0,4,0,0,4,3,3,3,3,3,2, 2,3,2,7,7,7,7,3,4 }; static const unsigned char ag_key_parm[] = { 0, 98,103, 0,199,200, 0, 0, 2, 8, 4, 0,102, 0,182,175, 0,203, 171, 0,199,169, 0,200,170, 0, 98,103,172, 0,177, 0,192,189, 0,178, 0,191,193, 0,174,181, 0,187,173, 0, 0, 0, 0, 0, 0,186, 0,176, 0, 6, 2, 8, 4, 0, 0,199,200, 0, 2, 8, 4, 0,135,134,133,132, 125,126,127,128,129,130,131,143, 0, 0, 0, 98,103, 0,192,189, 0,191, 193, 0,187,182,203, 0, 0,186, 0,181, 0, 98,103, 0,199,200, 0, 0, 98,103, 0,192,189, 0,191,193, 0,187,182,203,199,200, 0, 0,186, 0, 181, 0,192,189, 0,191,193, 0,187,182,203, 0,186, 0,181, 0,199,200, 0,192,189, 0,191,193, 0,187,182, 0,186, 0,181, 0,187,182,189,186, 191,181, 0,187,182,186,181, 0,182,181, 0,182, 0, 98,103, 0, 0, 0, 181, 0,182,175, 0,203,171, 0,199,169, 0,200,170, 0, 98,103,172, 0, 177, 0,192,189, 0,178, 0,191,193, 0,174,181, 0,187,173, 0, 0, 0, 0, 0, 0,186, 0,176, 0, 0, 98,103, 0,199,200, 0, 0, 6, 2, 8, 4, 0,182,175, 0,203,171, 0,199,169, 0,200,170, 0,177, 0,192,189, 0,178, 0,191,193, 0,174,181, 0,187,173, 0, 0, 0, 0,172, 0,186, 0,176, 0, 0,192,189, 0,191,193, 0,187,182,203,199,200, 0,186, 0, 181, 0,199,200, 0, 6, 2, 8, 4, 0, 4, 0, 98,103, 0,192,189, 0, 191,193, 0,187,182,203,199,200, 0, 0,186, 0, 0, 2, 8, 4,181, 0 }; static const unsigned short ag_key_jmp[] = { 0, 0, 0, 0, 0, 2, 1, 4, 6, 9, 11, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 18, 20, 14, 17, 20, 23, 26, 32, 22, 37, 24, 26, 28, 32, 35, 37, 40, 0, 42, 44, 46, 48, 51, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 60, 62, 83, 86, 64, 89, 66, 0, 0, 0, 0, 68, 70,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 74, 76, 78, 80,108,111, 82,114, 84, 0, 0, 0, 0, 0, 0, 0, 86, 88, 90,128, 92,131, 94, 0, 96, 98, 0, 0, 0, 0, 0, 0, 0,100,102,145,104,148,106, 0,108,110,112,114, 116,118, 0,120,122,124,126, 0,128,130, 0,132, 0, 0, 0, 0,175, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 0, 0,203, 0, 0, 0, 0,136,138,182,185,188, 191,194,200,140,205,142,208, 0, 0, 0, 0,144,146,224,148,150,154,157, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 0, 0, 0, 0, 0,253, 0, 0, 0, 0,164,166,236,239,242,245,168,250,170, 255,172,258, 0, 0, 0, 0, 0, 0, 0,174,176,178,180,182,274,184,277, 186, 0,188,190,192,194,198,201,203, 0,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,215,217,219,221,300,303,223,306,225,227,230,232,237, 0 }; static const unsigned short ag_key_index[] = { 4, 0, 12, 43, 61, 0, 0, 12, 12, 81, 0, 81, 92, 92, 92, 92, 92,104, 104,104,104,117,117,134,104,142,142,142,142,142,142,142,151,151,151,158, 165,170,170,173,170,170,178,178,180,180,211, 0,178, 0, 4, 4,227,261, 261, 61, 0, 61, 61, 61, 0, 0, 0, 0, 61, 0, 0, 81, 81, 81, 0, 92, 92, 0,104,142,142,280, 0, 0,104,142,104,142,104,142,142,142,104,142, 104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142, 104,142,104,142,104,142,104,142,142,142,178, 0,104,142,104,142,104,142, 104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142, 142,290,142,298, 61,227, 0,211,178,178,178,178,104,178,178,104,309,178, 178,178, 0, 0, 0, 0, 0,142,151,151,151,151,151,151,151,151,158,158, 165,170,170,170,170, 0, 0, 0, 0, 0, 0, 0, 4, 61, 0, 0, 0, 0, 142,142,142, 0, 92, 92,142,142,142,142,142, 0, 0, 0, 0, 0,142, 0, 61 }; static const unsigned char ag_key_ends[] = { 43,0, 45,0, 111,0, 111,114,0, 102,0, 104,105,108,101,0, 47,0, 61,0, 61,0, 61,0, 61,0, 111,0, 108,115,101,0, 111,114,0, 102,0, 104,105,108,101,0, 43,0, 45,0, 111,0, 111,114,0, 102,0, 104,105,108,101,0, 61,0, 38,0, 42,0, 61,0, 124,0, 43,0, 45,0, 61,0, 38,0, 42,0, 43,0, 45,0, 61,0, 124,0, 61,0, 38,0, 42,0, 61,0, 124,0, 43,0, 45,0, 61,0, 38,0, 61,0, 124,0, 61,0, 38,0, 61,0, 61,0, 61,0, 124,0, 61,0, 38,0, 61,0, 124,0, 38,0, 124,0, 38,0, 124,0, 61,0, 61,0, 61,0, 61,0, 43,0, 45,0, 111,0, 108,115,101,0, 111,114,0, 102,0, 104,105,108,101,0, 61,0, 61,0, 61,0, 61,0, 61,0, 61,0, 38,0, 42,0, 43,0, 45,0, 61,0, 124,0, 43,0, 45,0, 111,0, 108,115,101,0, 111,114,0, 102,0, 104,105,108,101,0, 104,105,108,101,0, 61,0, 38,0, 42,0, 43,0, 45,0, 61,0, 111,0, 111,114,0, 102,0, 104,105,108,101,0, 124,0, }; #define AG_TCV(x) ag_tcv[(x)] static const unsigned char ag_tcv[] = { 7,208,208,208,208,208,208,208,208,151,107,151,151,151,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,151,201,209,208, 208,198,185,210,160,159,196,194,161,195,206,197,211,211,211,211,211,211, 211,211,212,212,179,154,188,156,190,180,208,213,213,213,213,214,213,215, 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, 215,158,216,157,184,215,208,213,213,213,213,214,213,215,215,215,215,215, 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,163,183,162, 202,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, 208,208,208,208 }; #ifndef SYNTAX_ERROR #define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \ (PCB).error_message, (PCB).line, (PCB).column) #endif #ifndef FIRST_LINE #define FIRST_LINE 1 #endif #ifndef FIRST_COLUMN #define FIRST_COLUMN 1 #endif #ifndef PARSER_STACK_OVERFLOW #define PARSER_STACK_OVERFLOW {fprintf(stderr, \ "\nParser stack overflow, line %d, column %d\n",\ (PCB).line, (PCB).column);} #endif #ifndef REDUCTION_TOKEN_ERROR #define REDUCTION_TOKEN_ERROR {fprintf(stderr, \ "\nReduction token error, line %d, column %d\n", \ (PCB).line, (PCB).column);} #endif #ifndef INPUT_CODE #define INPUT_CODE(T) (T) #endif typedef enum {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key, ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words; static void ag_get_key_word(int ag_k) { int ag_save = (int) ((PCB).la_ptr - (PCB).pointer); const unsigned char *ag_p; int ag_ch; while (1) { switch (ag_key_act[ag_k]) { case ag_cf_end_key: { const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k]; do { if ((ag_ch = *sp++) == 0) { int ag_k1 = ag_key_parm[ag_k]; int ag_k2 = ag_key_pt[ag_k1]; if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) goto ag_fail; (PCB).token_number = (vmCompile_token_type) ag_key_pt[ag_k1 + 1]; return; } } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch); goto ag_fail; } case ag_end_key: { const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k]; do { if ((ag_ch = *sp++) == 0) { (PCB).token_number = (vmCompile_token_type) ag_key_parm[ag_k]; return; } } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch); } case ag_no_match_key: ag_fail: (PCB).la_ptr = (PCB).pointer + ag_save; return; case ag_cf_set_key: { int ag_k1 = ag_key_parm[ag_k]; int ag_k2 = ag_key_pt[ag_k1]; ag_k = ag_key_jmp[ag_k]; if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) break; ag_save = (int) ((PCB).la_ptr - (PCB).pointer); (PCB).token_number = (vmCompile_token_type) ag_key_pt[ag_k1+1]; break; } case ag_set_key: ag_save = (int) ((PCB).la_ptr - (PCB).pointer); (PCB).token_number = (vmCompile_token_type) ag_key_parm[ag_k]; case ag_jmp_key: ag_k = ag_key_jmp[ag_k]; break; case ag_accept_key: (PCB).token_number = (vmCompile_token_type) ag_key_parm[ag_k]; return; case ag_cf_accept_key: { int ag_k1 = ag_key_parm[ag_k]; int ag_k2 = ag_key_pt[ag_k1]; if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) (PCB).la_ptr = (PCB).pointer + ag_save; else (PCB).token_number = (vmCompile_token_type) ag_key_pt[ag_k1+1]; return; } } ag_ch = CONVERT_CASE(*(PCB).la_ptr++); ag_p = &ag_key_ch[ag_k]; if (ag_ch <= 255) while (*ag_p < ag_ch) ag_p++; if (ag_ch > 255 || *ag_p != ag_ch) { (PCB).la_ptr = (PCB).pointer + ag_save; return; } ag_k = (int) (ag_p - ag_key_ch); } } #ifndef AG_NEWLINE #define AG_NEWLINE 10 #endif #ifndef AG_RETURN #define AG_RETURN 13 #endif #ifndef AG_FORMFEED #define AG_FORMFEED 12 #endif #ifndef AG_TABCHAR #define AG_TABCHAR 9 #endif static void ag_track(void) { int ag_k = (int) ((PCB).la_ptr - (PCB).pointer); while (ag_k--) { switch (*(PCB).pointer++) { case AG_NEWLINE: (PCB).column = 1, (PCB).line++; case AG_RETURN: case AG_FORMFEED: break; case AG_TABCHAR: (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING); break; default: (PCB).column++; } } } static void ag_prot(void) { int ag_k; ag_k = 128 - ++(PCB).btsx; if (ag_k <= (PCB).ssx) { (PCB).exit_flag = AG_STACK_ERROR_CODE; PARSER_STACK_OVERFLOW; return; } (PCB).bts[(PCB).btsx] = (PCB).sn; (PCB).bts[ag_k] = (PCB).ssx; (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx]; (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx]; } 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 = (vmCompile_token_type) (PCB).drt; (PCB).ssx = (PCB).dssx; (PCB).sn = (PCB).dsn; (PCB).drt = -1; } static const int ag_rtt[] = { 17, 53, 0 }; static const unsigned char ag_tstt[] = { 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,151,107,103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,0,105, 106, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,102,0, 100,101, 151,107,103,98,0,1, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,9,7,0,2,3,4,5,6,8,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38, 40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, 92,93,95,108,112,114,121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,0, 107,0, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,0, 102,0, 216,215,214,213,212,211,209,208,206,202,201,198,197,196,195,194,190,188,185, 184,183,180,179,163,162,161,160,159,158,157,156,154,151,143,135,134,133, 132,131,130,129,128,127,126,125,0,118,120,136,137,138,139,140, 212,211,0,113,114, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,143,135,134, 133,132,131,130,129,128,127,126,125,0,120,123,136,137,138,139,140, 203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181, 180,179,161,159,157,154,151,107,103,98,0,1,152,153, 212,211,206,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, 183,182,181,180,179,161,159,157,154,151,107,103,98,0,1,114,152,153, 214,0, 203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181, 180,179,161,159,157,154,151,107,103,98,0,1,152,153, 203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181, 180,179,161,159,157,154,151,107,103,98,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,203,202,201,200,199,198,197,196,195,194,193, 192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,160,159,157, 154,151,107,103,98,0,1,152,153, 215,214,213,212,211,210,209,206,203,202,201,200,199,198,197,196,195,194,193, 192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,160,159,157, 154,151,107,103,98,0,1,152,153, 203,0,94, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,17,19, 22,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, 92,93,95,108,112,114,121,155,204,205,207,217, 198,197,196,0,84,85,86, 195,194,0,81,82, 193,192,0,78,79, 191,190,189,188,0,73,74,75,76, 187,186,0,70,71, 185,0,68, 184,0,66, 182,0,62, 183,0,64, 182,181,180,179,161,159,157,154,0, 160,151,107,103,98,0,1,152,153, 160,151,107,103,98,0,1,152,153, 181,180,0,56,59, 181,180,179,161,159,157,154,0, 215,214,213,212,211,206,203,200,199,198,197,196,195,194,193,192,191,190,189, 188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171, 170,169,161,160,159,158,157,156,154,151,107,103,98,0,1,152,153, 160,0,22, 160,151,107,103,98,0,1,152,153, 160,0,22, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,151,107,103,98,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,168,166,165,164,163,162,161,160,159,158,157, 156,154,151,107,103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,167,166,165,164, 163,162,160,159,154,151,107,103,98,7,0,1,152,153, 206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, 183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,161,159,158, 157,156,154,0,18,20,43,44,45,46,47,48,49,50,51,52,89,90,96, 215,214,213,206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187, 186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169, 161,160,159,158,157,156,154,0,22, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,0,2,3,4,5,14,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55, 58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112, 114,121,155,204,205,207,217, 160,0,22, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,0,2,3,4,5,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,58, 60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114, 121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,0,2,3,4,5,14,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55, 58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112, 114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 162,160,154,9,0,2,3,4,5,8,13,14,15,16,17,19,22,27,28,29,30,31,32,33,37, 38,40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90, 91,92,93,95,108,112,114,121,155,204,205,207,217, 154,0,16, 215,214,213,0,3,155, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,161,160,159,158,157,156,154,0,11,12,18,20,21,22, 24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,141, 142,147,148,149,150, 154,0,16, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,9,7,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38,40, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 211,0, 214,213,212,211,0,144, 211,0, 211,0, 214,213,212,211,0,144, 210,0, 214,212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, 183,182,181,180,179,161,159,157,154,151,107,103,98,0,113,114, 214,212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, 183,182,181,180,179,161,159,157,154,151,107,103,98,0,113,114, 212,211,195,194,0,110, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, 183,182,181,180,179,161,159,158,157,154,0,20,89,90,96, 159,0,24, 159,0,24, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207, 217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207, 217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205, 207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205, 207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, 205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, 205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, 205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, 205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, 205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, 205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155, 204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121, 155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,60,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114, 121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114, 121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108, 112,114,121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, 92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, 92,93,95,108,112,114,121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 215,214,213,0,3,155, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, 0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5, 19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 167,0,39, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,154,0,2,3,4,5, 19,22,34,36,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 166,0,32,37, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 162,160,154,9,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,30,31,32,33,37,38, 40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, 92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,167,166,165,164, 163,162,160,154,151,107,103,98,7,0,1,152,153, 160,158,156,154,0,18,20,22, 216,215,214,213,212,211,210,209,208,206,203,202,201,200,199,198,197,196,195, 194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177, 176,175,174,173,172,171,170,169,163,162,161,160,159,158,157,156,154,151, 107,103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, 103,98,7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,203,202,201,200,199,198,197,196,195, 194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,168,166, 165,164,163,162,161,160,159,158,157,156,154,151,107,103,98,7,0,1,152, 153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, 7,0,1,152,153, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,161,160,159,158,157,156,0,18,20,21,22,24,26,29, 56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,141,142,147, 148,149,150, 154,0,16, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,161,160,159,158,157,156,154,7,0,11,12,18,20,21, 22,24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122, 141,142,147,148,149,150, 212,211,0,111,114, 212,211,0,111,114, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180, 179,161,159,157,154,0,84,85,86, 198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180, 179,161,159,157,154,0,84,85,86, 195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159, 157,154,0,81,82, 195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159, 157,154,0,81,82, 193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154, 0,78,79, 193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154, 0,78,79, 193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154, 0,78,79, 193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154, 0,78,79, 191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,0,73,74, 75,76, 191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,0,73,74, 75,76, 187,186,185,184,183,182,181,180,179,161,159,157,154,0,70,71, 185,184,183,182,181,180,179,161,159,157,154,0,68, 183,182,181,180,179,161,159,157,154,0,64, 184,183,182,181,180,179,161,159,157,154,0,66, 182,181,180,179,161,159,157,154,0, 179,0,57, 159,0,24, 159,0,24, 160,0,22, 157,0,21, 161,159,0,26, 159,0,24, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,151,107,103,98,0,1,152,153, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,9,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38,40,41, 42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93, 95,108,112,114,121,155,204,205,207,217, 161,0,26, 154,0,16, 154,0,16, 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, 185,184,183,180,179,163,162,161,160,159,158,157,156,154,0,11,12,18,20, 21,22,24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122, 141,142,147,148,149,150, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5, 19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 154,7,0,16, 212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183, 182,181,180,179,161,159,157,154,151,107,103,98,0,114, 212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183, 182,181,180,179,161,159,157,154,151,107,103,98,0,114, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,41, 42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93, 95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5, 19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, 93,95,108,112,114,121,155,204,205,207,217, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, 35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, 92,93,95,108,112,114,121,155,204,205,207,217, 162,154,0,16,30, 159,0,24, 157,0,21, 159,0,24, 154,0,16, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5, 19,22,34,36,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, 159,0,24, 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, 160,154,0,2,3,4,5,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,58, 60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114, 121,155,204,205,207,217, }; static unsigned const char ag_astt[7073] = { 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,1,1,1,8,7,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,7,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,7,1,1,9,9,1,1, 5,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,1,2,2,0,1,2,2,1,2,1, 1,1,2,2,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,2, 1,2,2,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,5,3,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,5,3,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,7,2,1,1,10,10,10, 10,10,10,2,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 10,10,10,10,10,1,2,2,2,2,2,2,2,2,2,2,2,7,2,2,2,1,1,1,2,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,10,10,1,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,2,1,3,1,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1, 1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,1,5,1,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3, 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1, 1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1, 2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2, 1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1, 2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2, 1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1, 1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2, 1,1,1,1,1,1,1,1,7,2,1,2,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,2,1,2,2,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,1,1,1,1,5,1,1,1,1,1,1,5,1, 1,1,1,1,1,5,1,1,1,5,1,1,5,1,1,7,1,1,5,1,4,5,5,5,5,5,5,5,7,5,1,1,1,1,7,1,1, 3,5,1,1,1,1,7,1,1,3,1,1,7,1,1,4,4,5,5,5,5,5,7,10,10,10,10,10,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1, 1,7,1,1,3,1,7,1,5,1,1,1,1,7,1,1,3,1,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,1,1,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,1,4,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,4,4,1,4,1,4,7,1,1,1,1,1,1,1,1,1,1,1,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,4,4,4,4,4,4,4,4,4,4, 4,4,1,4,4,4,4,4,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2, 2,1,1,1,2,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, 2,1,2,2,1,1,1,1,1,1,1,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1, 2,2,2,1,1,2,2,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,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2, 2,1,2,1,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,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2, 1,2,2,1,2,2,1,2,1,1,1,2,2,1,2,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,2,1,2,2,1,1,1,1,1,1,1,7,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,7,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,2,7,2,1,2,2,2,2,1,2,1,1,1,2,2,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,2,1,2,2,1,1,1,1,1,1,2,7,2,2,2,2,7,2,2, 5,2,5,2,2,10,10,5,2,2,7,4,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,2,1,4,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,2,1,8,8,1,1,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3, 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1, 1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,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,2,1,2,2,1,1,1,1,1,1,1,4,1,1,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,4,4,7,1,2,2,1,1,7,2,1,7,1,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2, 2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1, 1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2, 2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1, 1,1,7,2,1,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2, 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1, 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2, 2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2, 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1, 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1, 1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2, 2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2, 2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2, 1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1, 1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1, 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1, 1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7, 1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2, 2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1, 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2, 2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2, 1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1, 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1, 3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,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,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7, 2,1,2,2,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,2,1,2,2,1, 1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,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,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,7,1,1, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1, 1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,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,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,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,2,1,2,2,1,1,1,1,1,1,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1, 2,2,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,2,1,2,2,1,1,1,1, 1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1, 1,1,1,7,2,1,2,2,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,2,1, 2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1, 2,1,1,1,1,1,1,1,1,7,2,1,2,2,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,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3, 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,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,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1, 1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,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,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,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,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2, 2,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,2,1,2,2,1,1,1,1,1, 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1, 1,1,7,2,1,2,2,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,2,1,2, 2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2, 1,1,1,1,1,1,1,1,7,2,1,2,2,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,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2, 1,2,2,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,2,1,2,2,1,1,1, 1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,5,1,2,2,2,2,2,1,2,1, 1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,7,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,7,2,1,2,2,2,2,1,2,1,1,1,2,2,1,2,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,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,1,1,1,4,7,1,1,1,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1, 1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1, 1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,3,3,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,1,1,1,1,8,8,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,2,7,1,2,2,2,7,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2, 1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,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,7,1,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,7,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1, 1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,4,4,4, 4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1, 1,1,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,4,4,4,4,4,4,4,4,4,4,7,1,1,4,4,4,4,4,4,4, 4,7,1,1,4,4,4,4,4,4,4,4,4,7,1,4,4,4,4,4,4,4,4,7,1,7,1,1,7,2,1,7,2,1,7,1,1, 7,2,1,4,7,1,1,7,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1, 3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2,2,1,2,1,1,1,2,2, 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,2,1,2,2,1, 1,1,1,1,1,1,5,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,8,1,1,1,1,1,1,8,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2, 1,1,1,1,1,1,1,1,7,2,1,2,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,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,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,2,1,2,2,1,1,1,1,1,1,1,2,7,2, 10,10,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,2,10,10, 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,2,2,2,2,2,2,1, 2,1,1,1,1,1,1,1,1,7,2,1,2,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,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1, 1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2, 2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,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,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1, 2,2,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,2,1,2,2,1,1,1,1, 1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,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,2,1,2,2,1,1,1,1,1,1,1,1,7,2,2,1,7,2,1,7,2,1,7,2, 1,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,7,1,2,2,2,2,2,1,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,1,2,2,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,2,1,2,2,1,1,1,1,1,1 }; static const unsigned short ag_pstt[] = { 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,1,2,4,0,3,3,4, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,1,5,6, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,2,7, 8, 349,349,1,2,351,349, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,62,1,4, 99,54,101,100,0,64,21,21,63,24,61,60,31,21,21,59,58,57,56,49,55,47,60, 53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, 100,14,100,129,11,46,16,15,12,13, 115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, 115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,117, 118,6, 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,112, 113,8, 65,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70, 70,70,70,70,70,70,70,70,66,156,155,154,153,152,151,150,149,148,147,146, 9,70,70,70,69,68,67,70, 71,71,10,126,71, 65,143,143,143,143,143,143,141,143,143,143,143,143,143,143,143,143,143,143, 143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,66,156,155, 154,153,152,151,150,149,148,147,146,11,143,143,143,69,68,67,143, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,3,3,1,2,12,3,3,405, 130,130,72,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,3,3,1,2,13,3,130,3,415, 73,119, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,3,3,1,2,15,3,3,403, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,3,3,1,2,16,3,3,402, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,17,3,3,400, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,18,3,3,399, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,19,3,3,392, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,20,3,3,393, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,3,3,1,2,21,3,3,398, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,3,3,1,2,22,3,3,397, 74,97,75, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,24,3,3,358, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,25,99,54,101,100,76,77,54, 27,28,96,96,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,26,99,54,101,100,76,77,54, 27,28,95,95,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,27,99,54,101,100,76,77,54, 27,28,94,94,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,28,99,54,101,100,76,77,54, 27,28,93,93,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,29,99,54,101,100,76,77,54, 27,28,92,92,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,30,99,54,101,100,76,77,54, 27,28,91,91,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,99,54,101,100,79,78,31, 78,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 80,82,84,81,85,83,81, 20,19,78,87,86, 88,90,73,91,89, 92,94,96,98,70,99,97,95,93, 100,102,68,103,101, 104,66,105, 106,64,107, 108,39,109, 110,61,111, 63,59,59,59,59,59,59,59,41, 350,3,3,1,2,42,3,3,366, 350,3,3,1,2,43,3,3,364, 112,114,44,115,113, 58,58,56,56,56,56,56,45, 137,137,137,137,137,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,3,3,1,2,46,3,3,353, 24,47,116, 350,3,3,1,2,48,3,3,363, 24,49,117, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,3,3,1,2,50,3,3,362, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,3,3,1,2,350,51,3,3,361, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,3,3,1,2,350,52,3,3,352, 118,102,21,22,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 102,102,102,102,102,122,124,126,128,130,132,134,136,138,140,102,102,120, 102,142,102,53,143,121,141,139,137,135,133,131,129,127,125,123,103,104, 119, 135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, 135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, 135,24,135,135,135,135,135,54,144, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,55,99, 54,101,100,38,24,60,31,145,38,59,58,57,56,49,55,47,60,53,54,45,44,41,40, 39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11, 46,16,15,12,13, 24,56,146, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,57,99, 54,101,100,24,60,31,29,36,59,58,57,56,49,55,47,60,53,54,45,44,41,40,39, 38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46, 16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,58,99, 54,101,100,147,24,60,31,147,147,59,58,57,56,49,55,47,60,53,54,45,44,41, 40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129, 11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,149,24,52,62, 59,99,54,101,100,148,21,21,63,24,61,60,31,21,21,59,25,58,57,56,49,55,47, 60,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 52,60,23, 136,136,136,61,150,46, 152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106, 110,114,156,51,159,24,160,120,151,142,165,62,164,165,164,164,164,164, 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, 164,164,164,164,164,164,164,164,164, 52,63,9, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,166,2, 64,99,54,101,100,22,22,63,24,61,60,31,22,22,59,58,57,56,49,55,47,60,53, 54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, 100,14,100,129,11,46,16,15,12,13, 162,65, 168,168,165,165,66,165, 164,160, 163,159, 168,168,166,166,158,166, 138,70, 131,71,71,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, 131,131,131,131,131,131,131,131,131,131,131,131,131,71,132,71, 125,71,71,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, 125,125,125,125,125,125,125,125,125,125,125,125,125,72,124,71, 168,168,167,168,73,168, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,74,3,3, 401, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,75,99,54,101,100,76,77,54, 27,28,98,98,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,76,99,54,101,100,78,31,78, 53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, 100,14,100,129,11,46,16,15,12,13, 118,102,21,22,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 102,102,102,102,102,102,102,120,102,102,77,121,103,104,119, 160,78,107, 160,79,169, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,80,3,3,396, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,81,99,54,101,100,31,77,54, 27,28,87,87,87,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,82,3,3,395, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,83,99,54,101,100,31,77,54, 27,28,86,86,86,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,84,3,3,394, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,85,99,54,101,100,31,77,54, 27,28,85,85,85,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,86,99,54,101,100,31,77,54, 170,27,28,170,170,170,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,87,99,54,101,100,31,77,54, 171,27,28,171,171,171,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,88,3,3, 391, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,89,99,54,101,100,31,77,54, 172,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,90,3,3, 390, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,91,99,54,101,100,31,77,54, 173,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,92,3,3, 389, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,93,99,54,101,100,31,77,54, 174,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12, 13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,94,3,3,388, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,95,99,54,101,100,31,77,54, 175,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12, 13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,96,3,3, 387, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,97,99,54,101,100,31,77,54, 176,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12, 13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,98,3,3,386, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,99,99,54,101,100,31,77,54, 177,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12, 13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,100,3,3, 385, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,101,99,54,101,100,31,77, 54,178,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16, 15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,102,3,3, 384, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,103,99,54,101,100,31,77, 54,179,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16, 15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,104,3,3,383, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,105,99,54,101,100,31,77, 54,180,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46, 16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,106,3,3,382, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,107,99,54,101,100,31,77, 54,181,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11, 46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,108,3,3, 380, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,109,99,54,101,100,31,77, 54,182,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100, 129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,110,3,3,381, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,111,99,54,101,100,31,77, 54,183,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129, 11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,112,3,3, 379, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,113,99,54,101,100,31,77, 54,184,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14, 100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,114,3,3,378, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,115,99,54,101,100,185,31, 185,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26, 25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,116,99,54,101,100,41,31, 186,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29, 26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,117,99,54,101,100,41,31, 187,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29, 26,25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,118, 3,3,404, 136,136,136,119,188,46, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,120,3,3,356, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,121,99,54,101,100,189,31, 189,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26, 25,23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,122,3,3, 376, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,123,99,54,101,100,53,31, 53,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,124,3,3, 375, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,125,99,54,101,100,52,31, 52,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,126,3,3, 374, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,127,99,54,101,100,51,31, 51,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,128,3,3, 373, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,129,99,54,101,100,50,31, 50,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,130,3,3, 372, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,131,99,54,101,100,49,31, 49,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,132,3,3, 371, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,133,99,54,101,100,48,31, 48,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,134,3,3, 370, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,135,99,54,101,100,47,31, 47,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,136,3,3, 369, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,137,99,54,101,100,46,31, 46,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,138,3,3, 368, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,139,99,54,101,100,45,31, 45,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,140,3,3, 367, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,141,99,54,101,100,44,31, 44,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,142,3,3,354, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,143,99,54,101,100,43,31, 43,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,144,99,54,101,100,17, 31,191,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 192,19,193, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,146,99,54,101,100,33, 31,195,194,33,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 43,147,196,49, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,149,24,52,197, 148,99,54,101,100,22,22,63,24,61,60,31,22,22,59,26,58,57,56,49,55,47,60, 53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, 100,14,100,129,11,46,16,15,12,13, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,3,3,1,2,350,149,3,3,360, 24,120,142,11,150,200,199,198, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3, 1,2,350,151,3,3,355, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,152, 3,3,414, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,153, 3,3,413, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,154, 3,3,412, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,155, 3,3,411, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,156,3,3,377, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,157, 3,3,410, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,158, 3,3,409, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, 350,159,3,3,359, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,160,3,3,357, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,161, 3,3,408, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,162, 3,3,407, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,163, 3,3,406, 152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106, 110,114,156,51,159,24,160,120,151,142,6,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, 52,165,10, 152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106, 110,114,156,51,159,24,160,120,151,142,201,201,166,164,201,164,164,164, 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, 164,164,164,164,164,164,164,164,164,164, 133,133,167,202,133, 133,133,168,203,133, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,169,99,54,101,100,31,77, 54,27,28,89,89,89,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 80,82,84,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,170, 85,83,81, 80,82,84,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,171, 85,83,81, 20,19,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,172,87,86, 20,19,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,173,87,86, 88,90,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,174,91,89, 88,90,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,175,91,89, 88,90,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,176,91,89, 88,90,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,177,91,89, 92,94,96,98,72,72,72,72,72,72,72,72,72,72,72,72,72,178,99,97,95,93, 92,94,96,98,71,71,71,71,71,71,71,71,71,71,71,71,71,179,99,97,95,93, 100,102,69,69,69,69,69,69,69,69,69,69,69,180,103,101, 104,67,67,67,67,67,67,67,67,67,67,181,105, 110,62,62,62,62,62,62,62,62,182,111, 106,65,65,65,65,65,65,65,65,65,183,107, 63,60,60,60,60,60,60,60,184, 156,185,204, 160,186,40, 160,187,35, 24,188,205, 151,189,55, 159,16,190,206, 160,191,105, 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, 350,350,3,3,1,2,192,3,3,365, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,62,193, 99,54,101,100,39,39,63,24,61,60,31,39,39,59,58,57,56,49,55,47,60,53,54, 45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100, 14,100,129,11,46,16,15,12,13, 159,32,207, 52,195,208, 52,196,28, 152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106, 110,114,156,51,209,159,24,160,120,151,142,209,197,164,209,164,164,164, 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, 164,164,164,164,164,164,164,164,164,164, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,198,99,54,101,100,17, 31,210,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,199,99,54,101,100,211,31, 211,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26, 25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,200,99,54,101,100,12,31, 12,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 52,7,201,10, 134,134,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, 123,123,123,123,123,123,123,123,123,123,123,123,202,134, 134,134,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, 122,122,122,122,122,122,122,122,122,122,122,122,203,134, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,204,99,54,101,100,31,57, 77,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, 100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,205,99,54,101,100,17, 31,212,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,206,99,54,101,100,18,31, 18,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,207,99,54,101,100,34,31, 34,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, 23,100,14,100,129,11,46,16,15,12,13, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,208,99,54,101,100,41,31, 213,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29, 26,25,23,100,14,100,129,11,46,16,15,12,13, 149,52,209,10,27, 160,210,14, 151,211,13, 160,212,106, 52,213,214, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,214,99,54,101,100,33, 31,215,194,33,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, 160,215,216, 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,216,99, 54,101,100,24,60,31,30,37,59,58,57,56,49,55,47,60,53,54,45,44,41,40,39, 38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46, 16,15,12,13, }; static const unsigned short ag_sbt[] = { 0, 30, 68, 107, 113, 194, 229, 231, 267, 269, 322, 327, 381, 414, 451, 453, 486, 519, 563, 607, 651, 695, 741, 787, 790, 834, 876, 918, 960,1002,1044,1086,1144,1151,1156,1161,1170,1175,1178,1181,1184,1187, 1196,1205,1214,1219,1227,1281,1284,1293,1296,1325,1373,1406,1462,1508, 1582,1585,1658,1732,1813,1816,1822,1888,1891,1970,1972,1978,1980,1982, 1988,1990,2025,2060,2066,2089,2131,2188,2222,2225,2228,2272,2315,2359, 2402,2446,2489,2533,2577,2600,2645,2668,2713,2736,2782,2826,2872,2895, 2941,2985,3031,3054,3101,3124,3171,3215,3263,3307,3356,3379,3430,3474, 3524,3547,3600,3644,3701,3759,3817,3859,3865,3909,3966,3989,4046,4069, 4126,4149,4206,4229,4286,4309,4366,4389,4446,4469,4526,4549,4606,4629, 4686,4709,4766,4810,4867,4927,4930,4990,4994,5074,5106,5114,5177,5219, 5261,5303,5345,5389,5431,5473,5517,5574,5616,5658,5700,5763,5766,5833, 5838,5843,5886,5914,5942,5966,5990,6012,6034,6056,6078,6100,6122,6138, 6151,6162,6174,6183,6186,6189,6192,6195,6198,6202,6205,6234,6312,6315, 6318,6321,6388,6448,6505,6562,6566,6599,6632,6688,6748,6805,6862,6920, 6925,6928,6931,6934,6937,6997,7000,7073 }; static const unsigned short ag_sbe[] = { 26, 65, 104, 111, 136, 228, 230, 266, 268, 314, 324, 373, 410, 446, 452, 482, 515, 559, 603, 647, 691, 737, 783, 788, 830, 849, 891, 933, 975,1017,1059,1101,1147,1153,1158,1165,1172,1176,1179,1182,1185,1195, 1201,1210,1216,1226,1277,1282,1289,1294,1321,1369,1402,1446,1506,1529, 1583,1606,1679,1755,1814,1819,1854,1889,1914,1971,1976,1979,1981,1986, 1989,2022,2057,2064,2085,2104,2146,2217,2223,2226,2268,2287,2355,2374, 2442,2461,2504,2548,2596,2615,2664,2683,2732,2751,2822,2841,2891,2910, 2981,3000,3050,3069,3120,3139,3211,3230,3303,3322,3375,3394,3470,3489, 3543,3562,3640,3659,3716,3774,3855,3862,3905,3924,3985,4004,4065,4084, 4145,4164,4225,4244,4305,4324,4385,4404,4465,4484,4545,4564,4625,4644, 4705,4724,4806,4825,4883,4928,4946,4991,5017,5102,5110,5173,5215,5257, 5299,5341,5385,5427,5469,5513,5570,5612,5654,5696,5731,5764,5799,5835, 5840,5858,5910,5938,5963,5987,6009,6031,6053,6075,6095,6117,6135,6149, 6160,6172,6182,6184,6187,6190,6193,6196,6200,6203,6230,6256,6313,6316, 6319,6354,6404,6463,6520,6564,6597,6630,6647,6704,6763,6820,6877,6922, 6926,6929,6932,6935,6953,6998,7021,7073 }; static const unsigned char ag_fl[] = { 2,1,2,1,2,0,1,4,1,2,3,2,4,5,5,0,1,1,3,1,1,1,2,2,1,2,3,5,4,2,9,0,1,1,3, 4,2,9,2,4,4,1,1,3,3,3,3,3,3,3,3,3,3,3,1,4,1,5,1,1,3,1,3,1,1,3,1,3,1,3, 1,3,3,1,3,3,3,3,1,3,3,1,3,3,1,3,3,3,1,4,1,2,2,2,2,2,2,1,3,1,1,1,1,2,2, 4,6,3,1,1,2,0,1,3,1,2,0,1,3,1,0,1,4,4,3,2,2,1,1,1,2,1,2,1,2,1,1,2,3,1, 1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,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, 0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 }; static const unsigned char ag_ptt[] = { 0, 6, 6, 11, 11, 12, 12, 6, 13, 13, 13, 15, 15, 15, 15, 23, 23, 25, 25, 14, 14, 8, 8, 27, 27, 27, 27, 27, 27, 27, 27, 34, 34, 36, 36, 32, 28, 28, 28, 28, 38, 35, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 42, 42, 41, 41, 55, 54, 54, 58, 58, 61, 60, 60, 63, 63, 65, 65, 67, 67, 67, 69, 69, 69, 69, 69, 72, 72, 72, 77, 77, 77, 80, 80, 80, 80, 83, 83, 87, 87, 87, 87, 87, 87, 87, 88, 88, 93, 93, 93, 93, 93, 93, 93, 93, 93, 1,100,100,101,101, 1,105,105,106,106, 1,204,110,110,204,204,108,108, 108, 95, 95,217,217,113,113,111,111, 17,155,155,207,118,118,205,121,121, 123,123,120,120,120,120,120,120,120,120,120,120,120,120,120,136,136,136, 138,139,140,137,137,144,144,114, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,104,104,104,104,104,104,104,104,104,104,104,104,104,104, 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, 104,104,115,115,115,116,116,116,116,116,119,119,119,119,119,119,119,119, 119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, 119,119,119,119,119,119,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, 124,124,145,145,146,146,152,152,153,153, 16, 3, 18, 21, 20, 24, 22, 26, 30, 29, 31, 33, 37, 39, 40, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 57, 56, 59, 62, 64, 66, 68, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82, 84, 85, 86, 89, 90, 91, 92, 94, 2, 4, 96, 5,147,122,117,142,148,149,109,150, 141,112 }; 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 vmCompile_change_reduction(vmCompile_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((vmCompile_token_type) *ag_tp)) ag_tp++; (PCB).reduction_token = (vmCompile_token_type) *ag_tp; } static void ag_ra(void) { switch(ag_rpx[(PCB).ag_ap]) { case 1: V(0,(Code *)) = ag_rp_1(); break; case 2: V(0,(Code *)) = ag_rp_2(V(0,(Code *))); break; case 3: V(0,(Code *)) = ag_rp_3(V(0,(Code *))); break; case 4: V(0,(Code *)) = ag_rp_4(); break; case 5: V(0,(Code *)) = ag_rp_5(V(0,(int *)), V(1,(int *))); break; case 6: V(0,(Code *)) = ag_rp_6(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break; case 7: V(0,(Code *)) = ag_rp_7(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break; case 8: V(0,(Code *)) = ag_rp_8(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break; case 9: V(0,(Code *)) = ag_rp_9(); break; case 10: V(0,(Code *)) = ag_rp_10(V(0,(Code *))); break; case 11: V(0,(Code *)) = ag_rp_11(V(0,(Code *))); break; case 12: V(0,(Code *)) = ag_rp_12(V(0,(Code *)), V(2,(Code *))); break; case 13: V(0,(Code *)) = ag_rp_13(V(0,(Code *))); break; case 14: V(0,(Code *)) = ag_rp_14(V(0,(Code *)), V(1,(Code *))); break; case 15: V(0,(Code *)) = ag_rp_15(V(0,(Code *))); break; case 16: V(0,(Code *)) = ag_rp_16(); break; case 17: V(0,(Code *)) = ag_rp_17(); break; case 18: V(0,(Code *)) = ag_rp_18(V(1,(Code *))); break; case 19: V(0,(Code *)) = ag_rp_19(V(1,(Code *))); break; case 20: V(0,(Code *)) = ag_rp_20(V(1,(Code *)), V(2,(Code *))); break; case 21: V(0,(Code *)) = ag_rp_21(V(0,(Code *)), V(1,(Code *))); break; case 22: V(0,(Code *)) = ag_rp_22(V(2,(Code *)), V(4,(Code *)), V(6,(Code *)), V(8,(Code *))); break; case 23: V(0,(Code *)) = ag_rp_23(); break; case 24: V(0,(Code *)) = ag_rp_24(V(0,(Code *))); break; case 25: V(0,(Code *)) = ag_rp_25(V(0,(Code *)), V(2,(Code *))); break; case 26: V(0,(Code *)) = ag_rp_26(V(2,(Code *))); break; case 27: V(0,(Code *)) = ag_rp_27(V(0,(Code *)), V(1,(Code *))); break; case 28: V(0,(Code *)) = ag_rp_28(V(2,(Code *)), V(4,(Code *)), V(6,(Code *)), V(8,(Code *))); break; case 29: V(0,(Code *)) = ag_rp_29(V(0,(Code *)), V(1,(Code *))); break; case 30: V(0,(Code *)) = ag_rp_30(V(0,(Code *)), V(1,(Code *)), V(3,(Code *))); break; case 31: V(0,(Code *)) = ag_rp_31(V(2,(Code *))); break; case 32: V(0,(Code *)) = ag_rp_32(V(0,(Code *))); break; case 33: V(0,(Code *)) = ag_rp_33(V(0,(Code *)), V(2,(Code *))); break; case 34: V(0,(Code *)) = ag_rp_34(V(0,(Code *)), V(2,(Code *))); break; case 35: V(0,(Code *)) = ag_rp_35(V(0,(Code *)), V(2,(Code *))); break; case 36: V(0,(Code *)) = ag_rp_36(V(0,(Code *)), V(2,(Code *))); break; case 37: V(0,(Code *)) = ag_rp_37(V(0,(Code *)), V(2,(Code *))); break; case 38: V(0,(Code *)) = ag_rp_38(V(0,(Code *)), V(2,(Code *))); break; case 39: V(0,(Code *)) = ag_rp_39(V(0,(Code *)), V(2,(Code *))); break; case 40: V(0,(Code *)) = ag_rp_40(V(0,(Code *)), V(2,(Code *))); break; case 41: V(0,(Code *)) = ag_rp_41(V(0,(Code *)), V(2,(Code *))); break; case 42: V(0,(Code *)) = ag_rp_42(V(0,(Code *)), V(2,(Code *))); break; case 43: V(0,(Code *)) = ag_rp_43(V(0,(Code *)), V(2,(Code *))); break; case 44: V(0,(Code *)) = ag_rp_44(V(0,(int *))); break; case 45: V(0,(Code *)) = ag_rp_45(V(0,(Code *)), V(2,(Code *))); break; case 46: V(0,(Code *)) = ag_rp_46(V(0,(Code *)), V(2,(Code *)), V(4,(Code *))); break; case 47: V(0,(Code *)) = ag_rp_47(V(0,(Code *))); break; case 48: V(0,(Code *)) = ag_rp_48(V(0,(Code *)), V(2,(Code *))); break; case 49: V(0,(Code *)) = ag_rp_49(V(0,(Code *)), V(2,(Code *))); break; case 50: V(0,(Code *)) = ag_rp_50(V(0,(Code *))); break; case 51: V(0,(Code *)) = ag_rp_51(V(0,(Code *)), V(2,(Code *))); break; case 52: V(0,(Code *)) = ag_rp_52(V(0,(Code *)), V(2,(Code *))); break; case 53: V(0,(Code *)) = ag_rp_53(V(0,(Code *)), V(2,(Code *))); break; case 54: V(0,(Code *)) = ag_rp_54(V(0,(Code *)), V(2,(Code *))); break; case 55: V(0,(Code *)) = ag_rp_55(V(0,(Code *)), V(2,(Code *))); break; case 56: V(0,(Code *)) = ag_rp_56(V(0,(Code *)), V(2,(Code *))); break; case 57: V(0,(Code *)) = ag_rp_57(V(0,(Code *)), V(2,(Code *))); break; case 58: V(0,(Code *)) = ag_rp_58(V(0,(Code *)), V(2,(Code *))); break; case 59: V(0,(Code *)) = ag_rp_59(V(0,(Code *)), V(2,(Code *))); break; case 60: V(0,(Code *)) = ag_rp_60(V(0,(Code *)), V(2,(Code *))); break; case 61: V(0,(Code *)) = ag_rp_61(V(0,(Code *)), V(2,(Code *))); break; case 62: V(0,(Code *)) = ag_rp_62(V(0,(Code *)), V(2,(Code *))); break; case 63: V(0,(Code *)) = ag_rp_63(V(0,(Code *)), V(2,(Code *))); break; case 64: V(0,(Code *)) = ag_rp_64(V(0,(Code *)), V(2,(Code *))); break; case 65: V(0,(Code *)) = ag_rp_65(V(0,(Code *)), V(2,(Code *))); break; case 66: V(0,(Code *)) = ag_rp_66(V(0,(Code *)), V(2,(Code *))); break; case 67: V(0,(Code *)) = ag_rp_67(V(1,(int *)), V(3,(Code *))); break; case 68: V(0,(Code *)) = ag_rp_68(V(1,(Code *))); break; case 69: V(0,(Code *)) = ag_rp_69(V(1,(Code *))); break; case 70: V(0,(Code *)) = ag_rp_70(V(1,(Code *))); break; case 71: V(0,(Code *)) = ag_rp_71(V(1,(Code *))); break; case 72: V(0,(Code *)) = ag_rp_72(V(1,(Code *))); break; case 73: V(0,(Code *)) = ag_rp_73(V(1,(Code *))); break; case 74: V(0,(Code *)) = ag_rp_74(V(0,(Code *)), V(2,(Code *))); break; case 75: V(0,(Code *)) = ag_rp_75(V(0,(double *))); break; case 76: V(0,(Code *)) = ag_rp_76(V(0,(int *))); break; case 77: V(0,(Code *)) = ag_rp_77(V(0,(int *))); break; case 78: V(0,(Code *)) = ag_rp_78(V(0,(Code *))); break; case 79: V(0,(Code *)) = ag_rp_79(V(0,(Code *))); break; case 80: V(0,(Code *)) = ag_rp_80(V(0,(Code *))); break; case 81: V(0,(Code *)) = ag_rp_81(V(0,(int *)), V(2,(Code *))); break; case 82: V(0,(Code *)) = ag_rp_82(V(0,(Code *)), V(2,(int *)), V(4,(Code *))); break; case 83: V(0,(Code *)) = ag_rp_83(V(1,(Code *))); break; case 84: V(0,(double *)) = ag_rp_84(V(0,(double *)), V(3,(int *))); break; case 85: V(0,(double *)) = ag_rp_85(V(0,(double *)), V(3,(int *))); break; case 86: V(0,(double *)) = ag_rp_86(V(0,(int *)), V(2,(double *))); break; case 87: V(0,(double *)) = ag_rp_87(V(0,(int *))); break; case 88: V(0,(double *)) = ag_rp_88(V(1,(double *))); break; case 89: V(0,(int *)) = ag_rp_89(V(0,(int *))); break; case 90: V(0,(int *)) = ag_rp_90(V(0,(int *)), V(1,(int *))); break; case 91: V(0,(double *)) = ag_rp_91(V(0,(int *))); break; case 92: V(0,(double *)) = ag_rp_92(V(0,(int *)), V(1,(double *))); break; case 93: V(0,(int *)) = ag_rp_93(V(0,(int *))); break; case 94: V(0,(int *)) = ag_rp_94(V(0,(int *)), V(1,(int *))); break; case 95: ag_default(&ag_rtt[0]); V(0,(int *)) = ag_rp_95(V(0,(int *))); break; case 96: V(0,(int *)) = ag_rp_96(V(0,(int *))); break; case 97: V(0,(int *)) = ag_rp_97(V(0,(int *)), V(1,(int *))); break; case 98: V(0,(int *)) = ag_rp_98(V(1,(int *))); break; case 99: V(0,(int *)) = ag_rp_99(V(0,(int *))); break; case 100: V(0,(int *)) = ag_rp_100(); break; case 101: V(0,(int *)) = ag_rp_101(V(0,(int *)), V(1,(int *))); break; case 102: V(0,(int *)) = ag_rp_102(); break; case 103: V(0,(int *)) = ag_rp_103(); break; case 104: V(0,(int *)) = ag_rp_104(); break; case 105: V(0,(int *)) = ag_rp_105(); break; case 106: V(0,(int *)) = ag_rp_106(); break; case 107: V(0,(int *)) = ag_rp_107(); break; case 108: V(0,(int *)) = ag_rp_108(); break; case 109: V(0,(int *)) = ag_rp_109(); break; case 110: V(0,(int *)) = ag_rp_110(); break; case 111: V(0,(int *)) = ag_rp_111(); break; case 112: V(0,(int *)) = ag_rp_112(); break; case 113: V(0,(int *)) = ag_rp_113(V(1,(int *))); break; case 114: V(0,(int *)) = ag_rp_114(V(0,(int *)), V(1,(int *))); break; case 115: V(0,(int *)) = ag_rp_115(V(0,(int *)), V(1,(int *))); break; case 116: V(0,(int *)) = ag_rp_116(V(1,(int *))); break; case 117: V(0,(int *)) = ag_rp_117(V(0,(int *)), V(1,(int *))); break; case 118: V(0,(int *)) = ag_rp_118(V(0,(int *))); break; } (PCB).la_ptr = (PCB).pointer; } #define TOKEN_NAMES vmCompile_token_names const char *const vmCompile_token_names[218] = { "input string", "white space", "real", "name string", "string literal", "character constant", "input string", "eof", "statements", "error", "", "", "", "statement", "executable statement", "declaration", "';'", "type name", "'='", "expression", "'['", "']'", "'('", "expression list", "')'", "expressions", "','", "unconditional statement", "conditional statement", "'{'", "'}'", "\"do\"", "while clause", "\"for\"", "for exprs", "condition", "for expr list", "\"while\"", "if clause", "\"else\"", "\"if\"", "conditional expression", "lvalue", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"", "\"%=\"", "\"|=\"", "\"&=\"", "\"^=\"", "\"<<=\"", "\">>=\"", "variable name", "logical or expression", "logical or condition", "'\\?'", "':'", "logical and expression", "\"||\"", "bitwise or expression", "logical and condition", "\"&&\"", "bitwise xor expression", "'|'", "bitwise and expression", "'^'", "equality expression", "'&'", "relational expression", "\"==\"", "\"!=\"", "shift expression", "'<'", "\"<=\"", "'>'", "\">=\"", "additive expression", "\"<<\"", "\">>\"", "multiplicative expression", "'+'", "'-'", "cast expression", "'*'", "'/'", "'%'", "unary expression", "power expression", "\"++\"", "\"--\"", "'!'", "'~'", "primary", "\"**\"", "integer constant", "'.'", "space", "\"/*\"", "", "", "", "\"*/\"", "\"//\"", "", "", "", "'\\n'", "simple real", "", "", "exponent", "integer", "fraction part", "digit", "letter", "", "'\\''", "char constant element", "not single quote", "escape sequence", "string chars", "'\\\"'", "string char", "not double quote", "\"\\\\a\"", "\"\\\\b\"", "\"\\\\f\"", "\"\\\\n\"", "\"\\\\r\"", "\"\\\\t\"", "\"\\\\v\"", "\"\\\\\\\\\"", "\"\\\\?\"", "\"\\\\\\'\"", "\"\\\\\\\"\"", "octal escape", "hex escape", "one octal", "two octal", "three octal", "'\\\\'", "", "\"\\\\x\"", "hex digit", "", "", "", "", "", "", "", "", "", "';'", "name string", "'='", "']'", "'['", "')'", "'('", "','", "'}'", "'{'", "\"do\"", "\"for\"", "\"while\"", "\"else\"", "\"if\"", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"", "\"%=\"", "\"|=\"", "\"&=\"", "\"^=\"", "\"<<=\"", "\">>=\"", "':'", "'\\?'", "\"||\"", "\"&&\"", "'|'", "'^'", "'&'", "\"==\"", "\"!=\"", "'<'", "\"<=\"", "'>'", "\">=\"", "\"<<\"", "\">>\"", "'+'", "'-'", "'*'", "'/'", "'%'", "\"++\"", "\"--\"", "'!'", "'~'", "\"**\"", "real", "string literal", "'.'", "character constant", "", "'\\\"'", "'\\''", "", "", "", "", "", "'\\\\'", "integer", }; #ifndef MISSING_FORMAT #define MISSING_FORMAT "Missing %s" #endif #ifndef UNEXPECTED_FORMAT #define UNEXPECTED_FORMAT "Unexpected %s" #endif #ifndef UNNAMED_TOKEN #define UNNAMED_TOKEN "input" #endif static void ag_diagnose(void) { int ag_snd = (PCB).sn; int ag_k = ag_sbt[ag_snd]; if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) { sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]); } else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8 && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1 && *TOKEN_NAMES[ag_tstt[ag_k]]) { sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]); } else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) { sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]); } else if (isprint(INPUT_CODE((*(PCB).pointer))) && INPUT_CODE((*(PCB).pointer)) != '\\') { char buf[20]; sprintf(buf, "\'%c\'", (char) INPUT_CODE((*(PCB).pointer))); sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf); } else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN); (PCB).error_message = (PCB).ag_msg; } static int ag_action_1_r_proc(void); static int ag_action_2_r_proc(void); static int ag_action_3_r_proc(void); static int ag_action_4_r_proc(void); static int ag_action_1_s_proc(void); static int ag_action_3_s_proc(void); static int ag_action_1_proc(void); static int ag_action_2_proc(void); static int ag_action_3_proc(void); static int ag_action_4_proc(void); static int ag_action_5_proc(void); static int ag_action_6_proc(void); static int ag_action_7_proc(void); static int ag_action_8_proc(void); static int ag_action_9_proc(void); static int ag_action_10_proc(void); static int ag_action_11_proc(void); static int ag_action_8_proc(void); static int (*const ag_r_procs_scan[])(void) = { ag_action_1_r_proc, ag_action_2_r_proc, ag_action_3_r_proc, ag_action_4_r_proc }; static int (*const ag_s_procs_scan[])(void) = { ag_action_1_s_proc, ag_action_2_r_proc, ag_action_3_s_proc, ag_action_4_r_proc }; static int (*const ag_gt_procs_scan[])(void) = { ag_action_1_proc, ag_action_2_proc, ag_action_3_proc, ag_action_4_proc, ag_action_5_proc, ag_action_6_proc, ag_action_7_proc, ag_action_8_proc, ag_action_9_proc, ag_action_10_proc, ag_action_11_proc, ag_action_8_proc }; static int ag_action_1_er_proc(void); static int ag_action_2_er_proc(void); static int ag_action_3_er_proc(void); static int ag_action_4_er_proc(void); static int (*const ag_er_procs_scan[])(void) = { ag_action_1_er_proc, ag_action_2_er_proc, ag_action_3_er_proc, ag_action_4_er_proc }; static void ag_error_resynch(void) { int ag_k; int ag_ssx = (PCB).ssx; ag_diagnose(); SYNTAX_ERROR; if ((PCB).exit_flag != AG_RUNNING_CODE) return; while (1) { ag_k = ag_sbt[(PCB).sn]; while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++; if (ag_tstt[ag_k] || (PCB).ssx == 0) break; (PCB).sn = (PCB).ss[--(PCB).ssx]; } if (ag_tstt[ag_k] == 0) { (PCB).sn = PCB.ss[(PCB).ssx = ag_ssx]; (PCB).exit_flag = AG_SYNTAX_ERROR_CODE; return; } ag_k = ag_sbt[(PCB).sn]; while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++; (PCB).ag_ap = ag_pstt[ag_k]; (ag_er_procs_scan[ag_astt[ag_k]])(); while (1) { ag_k = ag_sbt[(PCB).sn]; while (ag_tstt[ag_k] != (unsigned char) (PCB).token_number && ag_tstt[ag_k]) ag_k++; if (ag_tstt[ag_k] && ag_astt[ag_k] != ag_action_10) break; if ((PCB).token_number == 7) {(PCB).exit_flag = AG_SYNTAX_ERROR_CODE; return;} {(PCB).la_ptr = (PCB).pointer + 1; ag_track();} (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); (PCB).la_ptr++; if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); if (ag_ch <= 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } } (PCB).la_ptr = (PCB).pointer; } static int ag_action_10_proc(void) { int ag_t = (PCB).token_number; (PCB).btsx = 0, (PCB).drt = -1; do { ag_track(); (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); (PCB).la_ptr++; if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); if (ag_ch <= 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } } while ((PCB).token_number == (vmCompile_token_type) ag_t); (PCB).la_ptr = (PCB).pointer; return 1; } static int ag_action_11_proc(void) { int ag_t = (PCB).token_number; (PCB).btsx = 0, (PCB).drt = -1; do { (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; (PCB).ssx--; ag_track(); ag_ra(); if ((PCB).exit_flag != AG_RUNNING_CODE) return 0; (PCB).ssx++; (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); (PCB).la_ptr++; if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); if (ag_ch <= 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } } while ((PCB).token_number == (vmCompile_token_type) ag_t); (PCB).la_ptr = (PCB).pointer; return 1; } static int ag_action_3_r_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; (PCB).btsx = 0, (PCB).drt = -1; (PCB).reduction_token = (vmCompile_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 = (vmCompile_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 = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; return 1; } static int ag_action_2_proc(void) { (PCB).btsx = 0, (PCB).drt = -1; if ((PCB).ssx >= 128) { (PCB).exit_flag = AG_STACK_ERROR_CODE; PARSER_STACK_OVERFLOW; } (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; (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).la_ptr = (PCB).pointer; return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_2_r_proc(void) { (PCB).ssx++; (PCB).sn = (PCB).ag_ap; return 0; } static int ag_action_7_proc(void) { --(PCB).ssx; (PCB).la_ptr = (PCB).pointer; (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_1_proc(void) { ag_track(); (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_1_r_proc(void) { (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_1_s_proc(void) { (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_4_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; (PCB).btsx = 0, (PCB).drt = -1; (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (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).pointer; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (PCB).ss[(PCB).ssx] = (PCB).sn; ag_track(); (PCB).reduction_token = (vmCompile_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) { int ag_k = ag_sbt[(PCB).sn]; while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++; if (ag_tstt[ag_k] == 0) ag_undo(); (PCB).la_ptr = (PCB).pointer; ag_error_resynch(); 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).la_ptr = (PCB).pointer; (PCB).reduction_token = (vmCompile_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 = (vmCompile_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).la_ptr = (PCB).pointer; while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); 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_2_er_proc(void) { (PCB).btsx = 0, (PCB).drt = -1; (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; (PCB).ssx++; (PCB).sn = (PCB).ag_ap; return 0; } static int ag_action_1_er_proc(void) { (PCB).btsx = 0, (PCB).drt = -1; (PCB).exit_flag = AG_SUCCESS_CODE; return 0; } static int ag_action_4_er_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; (PCB).btsx = 0, (PCB).drt = -1; (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (PCB).ss[(PCB).ssx] = (PCB).sn; 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_er_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap] - 1; (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).reduction_token = (vmCompile_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; } void init_vmCompile(void) { (PCB).la_ptr = (PCB).pointer; (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0; (PCB).exit_flag = AG_RUNNING_CODE; (PCB).line = FIRST_LINE; (PCB).column = FIRST_COLUMN; (PCB).btsx = 0, (PCB).drt = -1; } void vmCompile(void) { init_vmCompile(); (PCB).exit_flag = AG_RUNNING_CODE; while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbt[(PCB).sn]; if (ag_tstt[ag_t1]) { unsigned ag_t2 = ag_sbe[(PCB).sn] - 1; (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); (PCB).la_ptr++; if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); if (ag_ch <= 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] > (unsigned char)(PCB).token_number) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); if (ag_tstt[ag_t1] != (unsigned char)(PCB).token_number) ag_t1 = ag_sbe[(PCB).sn]; } (PCB).ag_ap = ag_pstt[ag_t1]; (ag_gt_procs_scan[ag_astt[ag_t1]])(); } }