// *******************************************************************
// This file has been automatically generated from the grammar in file
// BLD.grm by ilog.language.syntax.ParserGenerator on
// Tue Oct 07 10:31:43 CEST 2008 --- !!! PLEASE DO NO EDIT !!!
// *******************************************************************

package ilog.rif.bld;

import java.io.Reader;
import java.io.StringReader;
import java.io.IOException;
import ilog.language.syntax.*;
import java.io.PrintStream;
import ilog.language.tools.Misc;


/* ************ */
/* PARSER CLASS */
/* ************ */

public class Parser extends StaticParser
{
  /* ************************ */
  /* PARSER CLASS CONSTRUCTOR */
  /* ************************ */

  public Parser(Tokenizer t)
    {
      input = t;
      xmlroot = "Document";
      String[] ns = {"rif","http://www.w3.org/2007/rif#","xsi","http://www.w3.org/2001/XMLSchema-instance","xs","http://www.w3.org/2001/XMLSchema#"};
      namespaces = ns;
    }

  /* ************************* */
  /* PARSER CLASS DECLARATIONS */
  /* ************************* */

  static
    {
      Lexicon.reserved("Group");
      Lexicon.reserved("External");
      Lexicon.reserved("Exists");
      Lexicon.reserved("Forall");
      Lexicon.reserved("Or");
      Lexicon.reserved("And");
    }



  long start;
  boolean quiet = true;
  boolean applet = false;
  String xmlForm;
  PrintStream out = System.out;

  public void setStartTime ()
    {
      start = System.currentTimeMillis();
    }

  public void setApplet (boolean flag)
    {
      applet = flag;
    }

  public void setQuiet (boolean flag)
    {
      quiet = flag;
    }

  public void setOutputStream (PrintStream stream)
    {
      out = stream;
    }

  public String xmlForm ()
    {
      return xmlForm;
    }

  
  void showXml ()
    {
      if (applet)
	{
	  xmlForm = xmlForm(currentNode().xmlDocument());
	}
      else
	{
	  out.println("*** Total parsing time = "
		      +(System.currentTimeMillis()-start)
		      +" ms");

	  if (!quiet)
	    {
	      errorManager().tallyErrors();
	      if (Misc.askYesNo("*** Do you want to see the XML serialization"))
		{
		  out.println();
		  try
		    {
		      writeXml(currentNode(),System.out);
		    }
		  catch (Exception e)
		    {
		      e.printStackTrace();
		    }	      
		  //               currentNode().display();
		  out.println();
		}
	    }
	}
    }


  /* ********************** */
  /* STATIC INITIALIZATIONS */
  /* ********************** */

  static
    {
      initializeTerminals();
      initializeNonTerminals();
      initializeRules();
      initializeParserActions();
      initializeParserStates();
      initializeActionTables();
      initializeGotoTables();
      initializeStateTables();
    }

  /* ********************* */
  /* PARTIAL PARSE METHODS */
  /* ********************* */

  final static ParseNode $RIFDOCUMENT_SWITCH$ = new ParseNode(terminals[3]);

  public final void parseRifDocument (String s) throws IOException
    {
      parseRifDocument(new StringReader(s));
    }

  public final void parseRifDocument (Reader r) throws IOException
    {
      input.setReader(r);
      errorManager().recoverFromErrors(false);
      setSwitchToken($RIFDOCUMENT_SWITCH$);
      parse();
    }

  /* **************** */
  /* SEMANTIC ACTIONS */
  /* **************** */

  protected ParseNode semanticAction(ParserRule $rule$) throws IOException
    {
      ParseNode $head$ = new ParseNode($rule$.head);

      switch($rule$.index())
        {
          case 2:
            {
            $head$ = $head$.copy(node($rule$,2));
            break;
            }
          case 62:
            {
            showXml();
            break;
            }
          case 0: case 1: case 10: case 16: case 18: case 44: case 51: case 56: 
            break;
          default:
            $head$ = $head$.copy(node($rule$,1));
            break;
        }
      return $head$;
    }

  /* **************** */
  /* TERMINAL SYMBOLS */
  /* **************** */

  static void initializeTerminals ()
    {
      terminals = new ParserTerminal[24];

      newTerminal(0,"$EMPTY$",1,2);
      newTerminal(1,"$E_O_I$",1,2);
      newTerminal(2,"error",1,2);
      newTerminal(3,"$RifDocument_switch$",1,2);
      newTerminal(4,"OPENPAR",1,2);
      newTerminal(5,"CLOSEPAR",1,2);
      newTerminal(6,"OPENBRA",1,2);
      newTerminal(7,"CLOSEBRA",1,2);
      newTerminal(8,"GROUP",11,2);
      newTerminal(9,"EXTERNAL",11,2);
      newTerminal(10,"LEXSPACE",11,2);
      newTerminal(11,"COLON",11,2);
      newTerminal(12,"OR",21,2);
      newTerminal(13,"AND",21,2);
      newTerminal(14,"FORALL",21,2);
      newTerminal(15,"EXISTS",21,2);
      newTerminal(16,"IF",31,2);
      newTerminal(17,"ARROW",31,2);
      newTerminal(18,"EQUAL",31,2);
      newTerminal(19,"MEMBER",31,2);
      newTerminal(20,"SUBCLASS",31,2);
      newTerminal(21,"VARIABLE",41,2);
      { // Code for XML serialization annotation:
        // [ localname = "Var" child = ( $VALUE ) ]
        terminals[21].setXmlInfo(new XmlInfo("Var"));
        terminals[21].setTerminalValueFlag();
      }
      newTerminal(22,"STRING",41,2);
      { // Code for XML serialization annotation:
        // [ localname = "Str" child = ( $VALUE ) ]
        terminals[22].setXmlInfo(new XmlInfo("Str"));
        terminals[22].setTerminalValueFlag();
      }
      newTerminal(23,"IDENTIFIER",41,2);
      { // Code for XML serialization annotation:
        // [ localname = "Id" child = ( $VALUE ) ]
        terminals[23].setXmlInfo(new XmlInfo("Id"));
        terminals[23].setTerminalValueFlag();
      }
    }

  /* ******************** */
  /* NON-TERMINAL SYMBOLS */
  /* ******************** */

  static void initializeNonTerminals ()
    {
      nonterminals = new ParserNonTerminal[37];

      newNonTerminal(0,"$START$");
      newNonTerminal(1,"$ROOTS$");
      newNonTerminal(2,"RifDocument");
      newNonTerminal(3,"Group");
      newNonTerminal(4,"Meta_opt");
      newNonTerminal(5,"RuleSet_opt");
      newNonTerminal(6,"Meta");
      newNonTerminal(7,"Frame");
      newNonTerminal(8,"Rule");
      newNonTerminal(9,"Clause");
      newNonTerminal(10,"Vars_opt");
      newNonTerminal(11,"Atomic");
      newNonTerminal(12,"Implies");
      newNonTerminal(13,"Formula");
      newNonTerminal(14,"RuleSet");
      newNonTerminal(15,"RuleOrGroup");
      newNonTerminal(16,"Vars");
      newNonTerminal(17,"Formulas_opt");
      newNonTerminal(18,"Atom");
      newNonTerminal(19,"Equal");
      newNonTerminal(20,"Member");
      newNonTerminal(21,"Subclass");
      newNonTerminal(22,"Const");
      newNonTerminal(23,"UniTermBody");
      newNonTerminal(24,"Term");
      newNonTerminal(25,"FrameAttributes_opt");
      newNonTerminal(26,"Var");
      newNonTerminal(27,"Expr");
      newNonTerminal(28,"SymSpace");
      newNonTerminal(29,"SubTerms_opt");
      newNonTerminal(30,"SubTerms");
      newNonTerminal(31,"SubTerm");
      newNonTerminal(32,"TermAttribute");
      newNonTerminal(33,"FrameAttributes");
      newNonTerminal(34,"FrameAttribute");
      newNonTerminal(35,"Formulas");
      newNonTerminal(36,"OuterDocument");
    }

  /* **************** */
  /* PRODUCTION RULES */
  /* **************** */

  static void initializeRules ()
    {
      rules = new ParserRule[64];

      rules[0] = new ParserRule(0,1,0,1,2);
      rules[1] = new ParserRule(1,1,1,1,2);
      rules[2] = new ParserRule(1,2,2,1,2);
      rules[3] = new ParserRule(3,5,3,1,2);
      { // Code for XML serialization annotation:
        // [ localname = "Group" children = ( meta*2 rule*4 ) ]
        rules[3].setXmlInfo(new XmlInfo("Group"));
        int[] xmlChildren = {2,4};
        rules[3].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[2][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("meta",true);
        paths[0] = path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("rule",true);
        paths[1] = path;
        rules[3].addXmlInfo(paths);
      }
      rules[4] = new ParserRule(6,1,4,1,2);
      rules[5] = new ParserRule(8,1,5,1,2);
      rules[6] = new ParserRule(8,5,6,1,2);
      { // Code for XML serialization annotation:
        // [ localname = "Forall" children = ( declare*2 formula.4 ) ]
        rules[6].setXmlInfo(new XmlInfo("Forall"));
        int[] xmlChildren = {2,4};
        rules[6].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[2][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("declare",true);
        paths[0] = path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("formula");
        paths[1] = path;
        rules[6].addXmlInfo(paths);
      }
      rules[7] = new ParserRule(9,1,7,1,2);
      rules[8] = new ParserRule(9,1,8,1,2);
      rules[9] = new ParserRule(12,3,9,31,2);
      { // Code for XML serialization annotation:
        // [ localname = "Implies" children = ( if.3 then.1 ) ]
        rules[9].setXmlInfo(new XmlInfo("Implies"));
        int[] xmlChildren = {3,1};
        rules[9].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[2][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("if");
        paths[0] = path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("then");
        paths[1] = path;
        rules[9].addXmlInfo(paths);
      }
      rules[10] = new ParserRule(5,0,10,1,2);
      rules[11] = new ParserRule(5,1,11,1,2);
      rules[12] = new ParserRule(14,1,12,1,2);
      rules[13] = new ParserRule(14,2,13,1,2);
      rules[14] = new ParserRule(15,1,14,1,2);
      rules[15] = new ParserRule(15,1,15,1,2);
      rules[16] = new ParserRule(4,0,16,1,2);
      rules[17] = new ParserRule(4,1,17,1,2);
      rules[18] = new ParserRule(10,0,18,1,2);
      rules[19] = new ParserRule(10,1,19,1,2);
      rules[20] = new ParserRule(13,1,20,1,2);
      rules[21] = new ParserRule(13,4,21,1,2);
      { // Code for XML serialization annotation:
        // [ localname = "And" children = ( formula*3 ) ]
        rules[21].setXmlInfo(new XmlInfo("And"));
        int[] xmlChildren = {3};
        rules[21].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[1][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("formula",true);
        paths[0] = path;
        rules[21].addXmlInfo(paths);
      }
      rules[22] = new ParserRule(13,4,22,1,2);
      { // Code for XML serialization annotation:
        // [ localname = "Or" children = ( formula*3 ) ]
        rules[22].setXmlInfo(new XmlInfo("Or"));
        int[] xmlChildren = {3};
        rules[22].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[1][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("formula",true);
        paths[0] = path;
        rules[22].addXmlInfo(paths);
      }
      rules[23] = new ParserRule(13,5,23,1,2);
      { // Code for XML serialization annotation:
        // [ localname = "Exists" children = ( declare*2 formula.4 ) ]
        rules[23].setXmlInfo(new XmlInfo("Exists"));
        int[] xmlChildren = {2,4};
        rules[23].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[2][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("declare",true);
        paths[0] = path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("formula");
        paths[1] = path;
        rules[23].addXmlInfo(paths);
      }
      rules[24] = new ParserRule(13,4,24,1,2);
      { // Code for XML serialization annotation:
        // [ localname = "External" children = ( content.3 ) ]
        rules[24].setXmlInfo(new XmlInfo("External"));
        int[] xmlChildren = {3};
        rules[24].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[1][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("content");
        paths[0] = path;
        rules[24].addXmlInfo(paths);
      }
      rules[25] = new ParserRule(11,1,25,1,2);
      rules[26] = new ParserRule(11,1,26,1,2);
      rules[27] = new ParserRule(11,1,27,1,2);
      rules[28] = new ParserRule(11,1,28,1,2);
      rules[29] = new ParserRule(11,1,29,1,2);
      rules[30] = new ParserRule(18,4,30,1,2);
      { // Code for XML serialization annotation:
        // [ localname = "Atom" children = ( op.1 arg*3 ) ]
        rules[30].setXmlInfo(new XmlInfo("Atom"));
        int[] xmlChildren = {1,3};
        rules[30].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[2][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("op");
        paths[0] = path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("arg",true);
        paths[1] = path;
        rules[30].addXmlInfo(paths);
      }
      rules[31] = new ParserRule(19,3,31,31,2);
      { // Code for XML serialization annotation:
        // [ localname = "Equal" children = ( left.1 right.3 ) ]
        rules[31].setXmlInfo(new XmlInfo("Equal"));
        int[] xmlChildren = {1,3};
        rules[31].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[2][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("left");
        paths[0] = path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("right");
        paths[1] = path;
        rules[31].addXmlInfo(paths);
      }
      rules[32] = new ParserRule(20,3,32,31,2);
      { // Code for XML serialization annotation:
        // [ localname = "Member" children = ( lower.1 upper.3 ) ]
        rules[32].setXmlInfo(new XmlInfo("Member"));
        int[] xmlChildren = {1,3};
        rules[32].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[2][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("lower");
        paths[0] = path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("upper");
        paths[1] = path;
        rules[32].addXmlInfo(paths);
      }
      rules[33] = new ParserRule(21,3,33,31,2);
      { // Code for XML serialization annotation:
        // [ localname = "Subclass" children = ( lower.1 upper.3 ) ]
        rules[33].setXmlInfo(new XmlInfo("Subclass"));
        int[] xmlChildren = {1,3};
        rules[33].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[2][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("lower");
        paths[0] = path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("upper");
        paths[1] = path;
        rules[33].addXmlInfo(paths);
      }
      rules[34] = new ParserRule(7,4,34,1,2);
      { // Code for XML serialization annotation:
        // [ localname = "Frame" children = ( object.1 slot*3 ) ]
        rules[34].setXmlInfo(new XmlInfo("Frame"));
        int[] xmlChildren = {1,3};
        rules[34].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[2][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("object");
        paths[0] = path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("slot",true);
        paths[1] = path;
        rules[34].addXmlInfo(paths);
      }
      rules[35] = new ParserRule(24,1,35,1,2);
      rules[36] = new ParserRule(24,1,36,1,2);
      rules[37] = new ParserRule(24,1,37,1,2);
      rules[38] = new ParserRule(24,4,38,1,2);
      { // Code for XML serialization annotation:
        // [ localname = "External" children = ( content.3 ) ]
        rules[38].setXmlInfo(new XmlInfo("External"));
        int[] xmlChildren = {3};
        rules[38].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[1][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("content");
        paths[0] = path;
        rules[38].addXmlInfo(paths);
      }
      rules[39] = new ParserRule(27,4,39,1,2);
      { // Code for XML serialization annotation:
        // [ localname = "Expr" children = ( op.1 arg*3 ) ]
        rules[39].setXmlInfo(new XmlInfo("Expr"));
        int[] xmlChildren = {1,3};
        rules[39].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[2][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("op");
        paths[0] = path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("arg",true);
        paths[1] = path;
        rules[39].addXmlInfo(paths);
      }
      rules[40] = new ParserRule(22,3,40,11,2);
      { // Code for XML serialization annotation:
        // [ localname = "Const" attributes = { type = $TEXT ( "&" 3/typespace ";" 3/typename ) } children = ( 1[1] ) ]
        rules[40].setXmlInfo(new XmlInfo("Const"));
        XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[1];
        XmlTextInfoArg[] formArgs = new XmlTextInfoArg[4];
        (formArgs[0] = new XmlTextInfoArg()).setText("&");
        formArgs[1] = new XmlTextInfoArg(3,"typespace");
        (formArgs[2] = new XmlTextInfoArg()).setText(";");
        formArgs[3] = new XmlTextInfoArg(3,"typename");
        XmlSpecialForm textForm = new XmlSpecialForm(formArgs);
        xmlAttributes[0] = new XmlAttributeInfo("type",textForm);
        rules[40].addXmlInfo(xmlAttributes);
        int[] xmlChildren = {1};
        rules[40].addXmlInfo(xmlChildren);
          {
             int[][] paths = new int[1][];
             int[] path;
             path = new int[1];
             path[0] = 1;
             paths[0] = path;
             rules[40].addXmlInfo(paths);
          }
      }
      rules[41] = new ParserRule(28,3,41,41,2);
      { // Code for XML serialization annotation:
        // [ localname = "Symspace" attributes = { typespace = 1 typename = 3 } ]
        rules[41].setXmlInfo(new XmlInfo("Symspace"));
        XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[2];
        xmlAttributes[0] = XmlAttributeInfo.eltXmlAttributeInfo("typespace");
        xmlAttributes[0].setChild(1);
        xmlAttributes[1] = XmlAttributeInfo.eltXmlAttributeInfo("typename");
        xmlAttributes[1].setChild(3);
        rules[41].addXmlInfo(xmlAttributes);
      }
      rules[42] = new ParserRule(26,1,42,41,2);
      rules[43] = new ParserRule(23,1,43,1,2);
      rules[44] = new ParserRule(29,0,44,1,2);
      rules[45] = new ParserRule(29,1,45,1,2);
      rules[46] = new ParserRule(30,1,46,1,2);
      rules[47] = new ParserRule(30,2,47,1,2);
      rules[48] = new ParserRule(31,1,48,1,2);
      rules[49] = new ParserRule(31,1,49,1,2);
      rules[50] = new ParserRule(32,3,50,31,2);
      rules[51] = new ParserRule(25,0,51,1,2);
      rules[52] = new ParserRule(25,1,52,1,2);
      rules[53] = new ParserRule(33,1,53,1,2);
      rules[54] = new ParserRule(33,2,54,1,2);
      rules[55] = new ParserRule(34,3,55,31,2);
      { // Code for XML serialization annotation:
        // [ localname = "Prop" children = ( key.1 val.3 ) ]
        rules[55].setXmlInfo(new XmlInfo("Prop"));
        int[] xmlChildren = {1,3};
        rules[55].addXmlInfo(xmlChildren);
        XmlWrapper[][] paths = new XmlWrapper[2][];
        XmlWrapper[] path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("key");
        paths[0] = path;
        path = new XmlWrapper[1];
        path[0] = new XmlWrapper("val");
        paths[1] = path;
        rules[55].addXmlInfo(paths);
      }
      rules[56] = new ParserRule(17,0,56,1,2);
      rules[57] = new ParserRule(17,1,57,1,2);
      rules[58] = new ParserRule(35,1,58,1,2);
      rules[59] = new ParserRule(35,2,59,1,2);
      rules[60] = new ParserRule(16,1,60,1,2);
      rules[61] = new ParserRule(16,2,61,1,2);
      rules[62] = new ParserRule(2,1,62,1,2);
      rules[63] = new ParserRule(36,1,63,1,2);
      { // Code for XML serialization annotation:
        // [ localname = "payload" children = ( 1 ) ]
        rules[63].setXmlInfo(new XmlInfo("payload"));
        int[] xmlChildren = {1};
        rules[63].addXmlInfo(xmlChildren);
      }
    }

  /* ************** */
  /* PARSER ACTIONS */
  /* ************** */

  static void initializeParserActions ()
    {
      actions = new ParserAction[535];

      newAction(0,5,0);
      newAction(1,2,0);
      newAction(2,0,3);
      newAction(3,0,5);
      newAction(4,1,1);
      newAction(5,0,5);
      newAction(6,1,62);
      newAction(7,1,16);
      newAction(8,0,11);
      newAction(9,0,15);
      newAction(10,0,16);
      newAction(11,1,63);
      newAction(12,0,47);
      newAction(13,1,17);
      newAction(14,1,4);
      newAction(15,0,38);
      newAction(16,0,33);
      newAction(17,1,35);
      newAction(18,1,35);
      newAction(19,1,35);
      newAction(20,1,35);
      newAction(21,1,35);
      newAction(22,1,35);
      newAction(23,1,35);
      newAction(24,1,35);
      newAction(25,1,35);
      newAction(26,1,35);
      newAction(27,1,35);
      newAction(28,1,35);
      newAction(29,1,35);
      newAction(30,0,20);
      newAction(31,1,36);
      newAction(32,1,36);
      newAction(33,1,36);
      newAction(34,1,36);
      newAction(35,1,36);
      newAction(36,1,36);
      newAction(37,1,36);
      newAction(38,1,36);
      newAction(39,1,36);
      newAction(40,1,36);
      newAction(41,1,36);
      newAction(42,1,36);
      newAction(43,1,36);
      newAction(44,1,36);
      newAction(45,1,36);
      newAction(46,1,36);
      newAction(47,1,37);
      newAction(48,1,37);
      newAction(49,1,37);
      newAction(50,1,37);
      newAction(51,1,37);
      newAction(52,1,37);
      newAction(53,1,37);
      newAction(54,1,37);
      newAction(55,1,37);
      newAction(56,1,37);
      newAction(57,1,37);
      newAction(58,1,37);
      newAction(59,1,37);
      newAction(60,1,37);
      newAction(61,1,37);
      newAction(62,1,37);
      newAction(63,0,17);
      newAction(64,1,42);
      newAction(65,1,42);
      newAction(66,1,42);
      newAction(67,1,42);
      newAction(68,1,42);
      newAction(69,1,42);
      newAction(70,1,42);
      newAction(71,1,42);
      newAction(72,1,42);
      newAction(73,1,42);
      newAction(74,1,42);
      newAction(75,1,42);
      newAction(76,1,42);
      newAction(77,1,42);
      newAction(78,1,42);
      newAction(79,1,42);
      newAction(80,1,42);
      newAction(81,0,11);
      newAction(82,0,32);
      newAction(83,0,20);
      newAction(84,0,11);
      newAction(85,0,15);
      newAction(86,0,16);
      newAction(87,1,44);
      newAction(88,0,31);
      newAction(89,1,43);
      newAction(90,1,35);
      newAction(91,1,35);
      newAction(92,1,35);
      newAction(93,1,35);
      newAction(94,0,20);
      newAction(95,0,29);
      newAction(96,1,45);
      newAction(97,0,11);
      newAction(98,0,15);
      newAction(99,0,16);
      newAction(100,1,46);
      newAction(101,1,46);
      newAction(102,1,46);
      newAction(103,1,46);
      newAction(104,1,48);
      newAction(105,1,48);
      newAction(106,1,48);
      newAction(107,1,48);
      newAction(108,1,49);
      newAction(109,1,49);
      newAction(110,1,49);
      newAction(111,1,49);
      newAction(112,1,47);
      newAction(113,1,47);
      newAction(114,1,47);
      newAction(115,1,47);
      newAction(116,0,11);
      newAction(117,0,15);
      newAction(118,0,16);
      newAction(119,1,50);
      newAction(120,1,50);
      newAction(121,1,50);
      newAction(122,1,50);
      newAction(123,1,39);
      newAction(124,1,39);
      newAction(125,1,39);
      newAction(126,1,39);
      newAction(127,1,39);
      newAction(128,1,39);
      newAction(129,1,39);
      newAction(130,1,39);
      newAction(131,1,39);
      newAction(132,1,39);
      newAction(133,1,39);
      newAction(134,1,39);
      newAction(135,1,39);
      newAction(136,1,38);
      newAction(137,1,38);
      newAction(138,1,38);
      newAction(139,1,38);
      newAction(140,1,38);
      newAction(141,1,38);
      newAction(142,1,38);
      newAction(143,1,38);
      newAction(144,1,38);
      newAction(145,1,38);
      newAction(146,1,38);
      newAction(147,1,38);
      newAction(148,1,38);
      newAction(149,1,38);
      newAction(150,1,38);
      newAction(151,1,38);
      newAction(152,0,35);
      newAction(153,1,40);
      newAction(154,1,40);
      newAction(155,1,40);
      newAction(156,1,40);
      newAction(157,1,40);
      newAction(158,1,40);
      newAction(159,1,40);
      newAction(160,1,40);
      newAction(161,1,40);
      newAction(162,1,40);
      newAction(163,1,40);
      newAction(164,1,40);
      newAction(165,1,40);
      newAction(166,1,40);
      newAction(167,1,40);
      newAction(168,1,40);
      newAction(169,1,40);
      newAction(170,0,36);
      newAction(171,0,37);
      newAction(172,1,41);
      newAction(173,1,41);
      newAction(174,1,41);
      newAction(175,1,41);
      newAction(176,1,41);
      newAction(177,1,41);
      newAction(178,1,41);
      newAction(179,1,41);
      newAction(180,1,41);
      newAction(181,1,41);
      newAction(182,1,41);
      newAction(183,1,41);
      newAction(184,1,41);
      newAction(185,1,41);
      newAction(186,1,41);
      newAction(187,1,41);
      newAction(188,1,41);
      newAction(189,0,11);
      newAction(190,0,15);
      newAction(191,1,51);
      newAction(192,0,16);
      newAction(193,0,46);
      newAction(194,1,52);
      newAction(195,0,11);
      newAction(196,0,15);
      newAction(197,0,16);
      newAction(198,1,53);
      newAction(199,1,53);
      newAction(200,1,53);
      newAction(201,1,53);
      newAction(202,0,43);
      newAction(203,0,11);
      newAction(204,0,15);
      newAction(205,0,16);
      newAction(206,1,55);
      newAction(207,1,55);
      newAction(208,1,55);
      newAction(209,1,55);
      newAction(210,1,54);
      newAction(211,1,54);
      newAction(212,1,54);
      newAction(213,1,54);
      newAction(214,1,34);
      newAction(215,1,34);
      newAction(216,1,34);
      newAction(217,1,34);
      newAction(218,1,34);
      newAction(219,1,34);
      newAction(220,1,34);
      newAction(221,1,34);
      newAction(222,1,34);
      newAction(223,1,34);
      newAction(224,1,34);
      newAction(225,0,5);
      newAction(226,1,10);
      newAction(227,0,52);
      newAction(228,0,11);
      newAction(229,0,15);
      newAction(230,0,16);
      newAction(231,0,105);
      newAction(232,1,11);
      newAction(233,0,5);
      newAction(234,0,52);
      newAction(235,0,11);
      newAction(236,0,15);
      newAction(237,0,16);
      newAction(238,0,98);
      newAction(239,0,99);
      newAction(240,0,100);
      newAction(241,0,38);
      newAction(242,1,5);
      newAction(243,1,5);
      newAction(244,1,5);
      newAction(245,1,5);
      newAction(246,1,5);
      newAction(247,1,5);
      newAction(248,1,18);
      newAction(249,0,16);
      newAction(250,1,7);
      newAction(251,1,7);
      newAction(252,1,7);
      newAction(253,1,7);
      newAction(254,1,7);
      newAction(255,1,7);
      newAction(256,0,67);
      newAction(257,1,8);
      newAction(258,1,8);
      newAction(259,1,8);
      newAction(260,1,8);
      newAction(261,1,8);
      newAction(262,1,8);
      newAction(263,1,25);
      newAction(264,1,25);
      newAction(265,1,25);
      newAction(266,1,25);
      newAction(267,1,25);
      newAction(268,1,25);
      newAction(269,1,25);
      newAction(270,1,25);
      newAction(271,1,25);
      newAction(272,1,25);
      newAction(273,1,26);
      newAction(274,1,26);
      newAction(275,1,26);
      newAction(276,1,26);
      newAction(277,1,26);
      newAction(278,1,26);
      newAction(279,1,26);
      newAction(280,1,26);
      newAction(281,1,26);
      newAction(282,1,26);
      newAction(283,1,27);
      newAction(284,1,27);
      newAction(285,1,27);
      newAction(286,1,27);
      newAction(287,1,27);
      newAction(288,1,27);
      newAction(289,1,27);
      newAction(290,1,27);
      newAction(291,1,27);
      newAction(292,1,27);
      newAction(293,1,28);
      newAction(294,1,28);
      newAction(295,1,28);
      newAction(296,1,28);
      newAction(297,1,28);
      newAction(298,1,28);
      newAction(299,1,28);
      newAction(300,1,28);
      newAction(301,1,28);
      newAction(302,1,28);
      newAction(303,1,29);
      newAction(304,1,29);
      newAction(305,1,29);
      newAction(306,1,29);
      newAction(307,1,29);
      newAction(308,1,29);
      newAction(309,1,29);
      newAction(310,1,29);
      newAction(311,1,29);
      newAction(312,1,29);
      newAction(313,1,12);
      newAction(314,1,12);
      newAction(315,1,12);
      newAction(316,1,12);
      newAction(317,1,12);
      newAction(318,1,12);
      newAction(319,1,14);
      newAction(320,1,14);
      newAction(321,1,14);
      newAction(322,1,14);
      newAction(323,1,14);
      newAction(324,1,14);
      newAction(325,1,15);
      newAction(326,1,15);
      newAction(327,1,15);
      newAction(328,1,15);
      newAction(329,1,15);
      newAction(330,1,15);
      newAction(331,0,64);
      newAction(332,1,35);
      newAction(333,1,35);
      newAction(334,1,35);
      newAction(335,1,35);
      newAction(336,0,11);
      newAction(337,0,15);
      newAction(338,0,16);
      newAction(339,1,44);
      newAction(340,0,66);
      newAction(341,1,30);
      newAction(342,1,30);
      newAction(343,1,30);
      newAction(344,1,30);
      newAction(345,1,30);
      newAction(346,1,30);
      newAction(347,1,30);
      newAction(348,1,30);
      newAction(349,1,30);
      newAction(350,1,30);
      newAction(351,1,39);
      newAction(352,1,39);
      newAction(353,1,39);
      newAction(354,1,39);
      newAction(355,0,70);
      newAction(356,0,71);
      newAction(357,0,72);
      newAction(358,0,73);
      newAction(359,0,11);
      newAction(360,0,16);
      newAction(361,1,9);
      newAction(362,1,9);
      newAction(363,1,9);
      newAction(364,1,9);
      newAction(365,1,9);
      newAction(366,1,9);
      newAction(367,1,20);
      newAction(368,1,20);
      newAction(369,1,20);
      newAction(370,1,20);
      newAction(371,1,20);
      newAction(372,1,20);
      newAction(373,1,20);
      newAction(374,1,20);
      newAction(375,1,20);
      newAction(376,0,90);
      newAction(377,0,84);
      newAction(378,0,16);
      newAction(379,0,74);
      newAction(380,0,11);
      newAction(381,0,77);
      newAction(382,0,64);
      newAction(383,1,24);
      newAction(384,1,24);
      newAction(385,1,24);
      newAction(386,1,24);
      newAction(387,1,24);
      newAction(388,1,24);
      newAction(389,1,24);
      newAction(390,1,24);
      newAction(391,1,24);
      newAction(392,0,80);
      newAction(393,0,16);
      newAction(394,1,60);
      newAction(395,1,60);
      newAction(396,0,70);
      newAction(397,0,71);
      newAction(398,0,72);
      newAction(399,0,73);
      newAction(400,0,11);
      newAction(401,0,16);
      newAction(402,1,61);
      newAction(403,1,61);
      newAction(404,0,83);
      newAction(405,1,23);
      newAction(406,1,23);
      newAction(407,1,23);
      newAction(408,1,23);
      newAction(409,1,23);
      newAction(410,1,23);
      newAction(411,1,23);
      newAction(412,1,23);
      newAction(413,1,23);
      newAction(414,0,70);
      newAction(415,0,71);
      newAction(416,0,72);
      newAction(417,0,73);
      newAction(418,1,56);
      newAction(419,0,11);
      newAction(420,0,16);
      newAction(421,0,89);
      newAction(422,1,57);
      newAction(423,0,70);
      newAction(424,0,71);
      newAction(425,0,72);
      newAction(426,0,73);
      newAction(427,0,11);
      newAction(428,0,16);
      newAction(429,1,58);
      newAction(430,1,58);
      newAction(431,1,58);
      newAction(432,1,58);
      newAction(433,1,58);
      newAction(434,1,58);
      newAction(435,1,58);
      newAction(436,1,59);
      newAction(437,1,59);
      newAction(438,1,59);
      newAction(439,1,59);
      newAction(440,1,59);
      newAction(441,1,59);
      newAction(442,1,59);
      newAction(443,1,22);
      newAction(444,1,22);
      newAction(445,1,22);
      newAction(446,1,22);
      newAction(447,1,22);
      newAction(448,1,22);
      newAction(449,1,22);
      newAction(450,1,22);
      newAction(451,1,22);
      newAction(452,0,70);
      newAction(453,0,71);
      newAction(454,0,72);
      newAction(455,0,73);
      newAction(456,1,56);
      newAction(457,0,11);
      newAction(458,0,16);
      newAction(459,0,92);
      newAction(460,1,21);
      newAction(461,1,21);
      newAction(462,1,21);
      newAction(463,1,21);
      newAction(464,1,21);
      newAction(465,1,21);
      newAction(466,1,21);
      newAction(467,1,21);
      newAction(468,1,21);
      newAction(469,0,95);
      newAction(470,1,19);
      newAction(471,0,16);
      newAction(472,0,11);
      newAction(473,0,15);
      newAction(474,0,16);
      newAction(475,0,97);
      newAction(476,1,6);
      newAction(477,1,6);
      newAction(478,1,6);
      newAction(479,1,6);
      newAction(480,1,6);
      newAction(481,1,6);
      newAction(482,0,11);
      newAction(483,0,15);
      newAction(484,0,16);
      newAction(485,0,11);
      newAction(486,0,15);
      newAction(487,0,16);
      newAction(488,0,11);
      newAction(489,0,15);
      newAction(490,0,16);
      newAction(491,1,33);
      newAction(492,1,33);
      newAction(493,1,33);
      newAction(494,1,33);
      newAction(495,1,33);
      newAction(496,1,33);
      newAction(497,1,33);
      newAction(498,1,33);
      newAction(499,1,33);
      newAction(500,1,33);
      newAction(501,1,32);
      newAction(502,1,32);
      newAction(503,1,32);
      newAction(504,1,32);
      newAction(505,1,32);
      newAction(506,1,32);
      newAction(507,1,32);
      newAction(508,1,32);
      newAction(509,1,32);
      newAction(510,1,32);
      newAction(511,1,31);
      newAction(512,1,31);
      newAction(513,1,31);
      newAction(514,1,31);
      newAction(515,1,31);
      newAction(516,1,31);
      newAction(517,1,31);
      newAction(518,1,31);
      newAction(519,1,31);
      newAction(520,1,31);
      newAction(521,1,13);
      newAction(522,1,13);
      newAction(523,1,13);
      newAction(524,1,13);
      newAction(525,1,13);
      newAction(526,1,13);
      newAction(527,1,3);
      newAction(528,1,3);
      newAction(529,1,3);
      newAction(530,1,3);
      newAction(531,1,3);
      newAction(532,1,3);
      newAction(533,1,3);
      newAction(534,1,2);
    }

  /* ************* */
  /* PARSER STATES */
  /* ************* */

  static void initializeParserStates ()
    {
      states = new ParserState[107];

      for (int i=0; i<107; i++) newState(i);
    }

  /* ************* */
  /* ACTION TABLES */
  /* ************* */

  static void initializeActionTables ()
    {
      newActionTables(98);

      newActionTable(0,2);
	setAction(0,8,3);
	setAction(0,3,2);

      newActionTable(1,1);
	setAction(1,1,1);

      newActionTable(2,1);
	setAction(2,1,4);

      newActionTable(3,1);
	setAction(3,8,5);

      newActionTable(4,1);
	setAction(4,1,6);

      newActionTable(5,4);
	setAction(5,4,7);
	setAction(5,9,9);
	setAction(5,21,10);
	setAction(5,22,8);

      newActionTable(6,1);
	setAction(6,1,11);

      newActionTable(7,1);
	setAction(7,4,12);

      newActionTable(8,1);
	setAction(8,4,13);

      newActionTable(9,1);
	setAction(9,4,14);

      newActionTable(10,1);
	setAction(10,6,15);

      newActionTable(11,1);
	setAction(11,10,16);

      newActionTable(12,14);
	setAction(12,15,25);
	setAction(12,4,30);
	setAction(12,8,20);
	setAction(12,16,26);
	setAction(12,7,19);
	setAction(12,12,22);
	setAction(12,22,29);
	setAction(12,17,27);
	setAction(12,13,23);
	setAction(12,9,21);
	setAction(12,21,28);
	setAction(12,6,18);
	setAction(12,14,24);
	setAction(12,5,17);

      newActionTable(13,16);
	setAction(13,15,39);
	setAction(13,19,43);
	setAction(13,8,34);
	setAction(13,16,40);
	setAction(13,18,42);
	setAction(13,7,33);
	setAction(13,12,36);
	setAction(13,22,46);
	setAction(13,17,41);
	setAction(13,13,37);
	setAction(13,9,35);
	setAction(13,21,45);
	setAction(13,6,32);
	setAction(13,20,44);
	setAction(13,14,38);
	setAction(13,5,31);

      newActionTable(14,16);
	setAction(14,15,55);
	setAction(14,19,59);
	setAction(14,8,50);
	setAction(14,16,56);
	setAction(14,18,58);
	setAction(14,7,49);
	setAction(14,12,52);
	setAction(14,22,62);
	setAction(14,17,57);
	setAction(14,13,53);
	setAction(14,9,51);
	setAction(14,21,61);
	setAction(14,6,48);
	setAction(14,20,60);
	setAction(14,14,54);
	setAction(14,5,47);

      newActionTable(15,1);
	setAction(15,4,63);

      newActionTable(16,17);
	setAction(16,15,73);
	setAction(16,4,64);
	setAction(16,19,77);
	setAction(16,8,68);
	setAction(16,16,74);
	setAction(16,18,76);
	setAction(16,7,67);
	setAction(16,12,70);
	setAction(16,22,80);
	setAction(16,17,75);
	setAction(16,13,71);
	setAction(16,9,69);
	setAction(16,21,79);
	setAction(16,6,66);
	setAction(16,20,78);
	setAction(16,14,72);
	setAction(16,5,65);

      newActionTable(17,1);
	setAction(17,22,81);

      newActionTable(18,1);
	setAction(18,5,82);

      newActionTable(19,1);
	setAction(19,4,83);

      newActionTable(20,4);
	setAction(20,9,85);
	setAction(20,21,86);
	setAction(20,5,87);
	setAction(20,22,84);

      newActionTable(21,1);
	setAction(21,5,88);

      newActionTable(22,1);
	setAction(22,5,89);

      newActionTable(23,6);
	setAction(23,17,95);
	setAction(23,4,94);
	setAction(23,9,91);
	setAction(23,21,92);
	setAction(23,5,90);
	setAction(23,22,93);

      newActionTable(24,4);
	setAction(24,9,98);
	setAction(24,21,99);
	setAction(24,5,96);
	setAction(24,22,97);

      newActionTable(25,4);
	setAction(25,9,101);
	setAction(25,21,102);
	setAction(25,5,100);
	setAction(25,22,103);

      newActionTable(26,4);
	setAction(26,9,105);
	setAction(26,21,106);
	setAction(26,5,104);
	setAction(26,22,107);

      newActionTable(27,4);
	setAction(27,9,109);
	setAction(27,21,110);
	setAction(27,5,108);
	setAction(27,22,111);

      newActionTable(28,4);
	setAction(28,9,113);
	setAction(28,21,114);
	setAction(28,5,112);
	setAction(28,22,115);

      newActionTable(29,3);
	setAction(29,9,117);
	setAction(29,21,118);
	setAction(29,22,116);

      newActionTable(30,4);
	setAction(30,9,120);
	setAction(30,21,121);
	setAction(30,5,119);
	setAction(30,22,122);

      newActionTable(31,13);
	setAction(31,15,131);
	setAction(31,8,126);
	setAction(31,16,132);
	setAction(31,7,125);
	setAction(31,12,128);
	setAction(31,22,135);
	setAction(31,17,133);
	setAction(31,13,129);
	setAction(31,9,127);
	setAction(31,21,134);
	setAction(31,6,124);
	setAction(31,14,130);
	setAction(31,5,123);

      newActionTable(32,16);
	setAction(32,15,144);
	setAction(32,19,148);
	setAction(32,8,139);
	setAction(32,16,145);
	setAction(32,18,147);
	setAction(32,7,138);
	setAction(32,12,141);
	setAction(32,22,151);
	setAction(32,17,146);
	setAction(32,13,142);
	setAction(32,9,140);
	setAction(32,21,150);
	setAction(32,6,137);
	setAction(32,20,149);
	setAction(32,14,143);
	setAction(32,5,136);

      newActionTable(33,1);
	setAction(33,23,152);

      newActionTable(34,17);
	setAction(34,15,162);
	setAction(34,4,153);
	setAction(34,19,166);
	setAction(34,8,157);
	setAction(34,16,163);
	setAction(34,18,165);
	setAction(34,7,156);
	setAction(34,12,159);
	setAction(34,22,169);
	setAction(34,17,164);
	setAction(34,13,160);
	setAction(34,9,158);
	setAction(34,21,168);
	setAction(34,6,155);
	setAction(34,20,167);
	setAction(34,14,161);
	setAction(34,5,154);

      newActionTable(35,1);
	setAction(35,11,170);

      newActionTable(36,1);
	setAction(36,23,171);

      newActionTable(37,17);
	setAction(37,15,181);
	setAction(37,4,172);
	setAction(37,19,185);
	setAction(37,8,176);
	setAction(37,16,182);
	setAction(37,18,184);
	setAction(37,7,175);
	setAction(37,12,178);
	setAction(37,22,188);
	setAction(37,17,183);
	setAction(37,13,179);
	setAction(37,9,177);
	setAction(37,21,187);
	setAction(37,6,174);
	setAction(37,20,186);
	setAction(37,14,180);
	setAction(37,5,173);

      newActionTable(38,4);
	setAction(38,9,190);
	setAction(38,21,192);
	setAction(38,7,191);
	setAction(38,22,189);

      newActionTable(39,1);
	setAction(39,7,193);

      newActionTable(40,4);
	setAction(40,9,196);
	setAction(40,21,197);
	setAction(40,7,194);
	setAction(40,22,195);

      newActionTable(41,4);
	setAction(41,9,199);
	setAction(41,21,200);
	setAction(41,7,198);
	setAction(41,22,201);

      newActionTable(42,1);
	setAction(42,17,202);

      newActionTable(43,4);
	setAction(43,9,207);
	setAction(43,21,208);
	setAction(43,7,206);
	setAction(43,22,209);

      newActionTable(44,4);
	setAction(44,9,211);
	setAction(44,21,212);
	setAction(44,7,210);
	setAction(44,22,213);

      newActionTable(45,11);
	setAction(45,15,221);
	setAction(45,13,219);
	setAction(45,4,214);
	setAction(45,9,217);
	setAction(45,8,216);
	setAction(45,21,223);
	setAction(45,16,222);
	setAction(45,14,220);
	setAction(45,12,218);
	setAction(45,5,215);
	setAction(45,22,224);

      newActionTable(46,6);
	setAction(46,9,229);
	setAction(46,8,225);
	setAction(46,21,230);
	setAction(46,14,227);
	setAction(46,5,226);
	setAction(46,22,228);

      newActionTable(47,1);
	setAction(47,5,231);

      newActionTable(48,6);
	setAction(48,9,236);
	setAction(48,8,233);
	setAction(48,21,237);
	setAction(48,14,234);
	setAction(48,5,232);
	setAction(48,22,235);

      newActionTable(49,4);
	setAction(49,19,239);
	setAction(49,6,241);
	setAction(49,18,238);
	setAction(49,20,240);

      newActionTable(50,6);
	setAction(50,9,244);
	setAction(50,8,243);
	setAction(50,21,246);
	setAction(50,14,245);
	setAction(50,5,242);
	setAction(50,22,247);

      newActionTable(51,2);
	setAction(51,4,248);
	setAction(51,21,249);

      newActionTable(52,7);
	setAction(52,9,252);
	setAction(52,8,251);
	setAction(52,21,254);
	setAction(52,16,256);
	setAction(52,14,253);
	setAction(52,5,250);
	setAction(52,22,255);

      newActionTable(53,6);
	setAction(53,9,259);
	setAction(53,8,258);
	setAction(53,21,261);
	setAction(53,14,260);
	setAction(53,5,257);
	setAction(53,22,262);

      newActionTable(54,10);
	setAction(54,15,269);
	setAction(54,13,267);
	setAction(54,9,265);
	setAction(54,8,264);
	setAction(54,21,271);
	setAction(54,16,270);
	setAction(54,14,268);
	setAction(54,12,266);
	setAction(54,5,263);
	setAction(54,22,272);

      newActionTable(55,10);
	setAction(55,15,279);
	setAction(55,13,277);
	setAction(55,9,275);
	setAction(55,8,274);
	setAction(55,21,281);
	setAction(55,16,280);
	setAction(55,14,278);
	setAction(55,12,276);
	setAction(55,5,273);
	setAction(55,22,282);

      newActionTable(56,10);
	setAction(56,15,289);
	setAction(56,13,287);
	setAction(56,9,285);
	setAction(56,8,284);
	setAction(56,21,291);
	setAction(56,16,290);
	setAction(56,14,288);
	setAction(56,12,286);
	setAction(56,5,283);
	setAction(56,22,292);

      newActionTable(57,10);
	setAction(57,15,299);
	setAction(57,13,297);
	setAction(57,9,295);
	setAction(57,8,294);
	setAction(57,21,301);
	setAction(57,16,300);
	setAction(57,14,298);
	setAction(57,12,296);
	setAction(57,5,293);
	setAction(57,22,302);

      newActionTable(58,10);
	setAction(58,15,309);
	setAction(58,13,307);
	setAction(58,9,305);
	setAction(58,8,304);
	setAction(58,21,311);
	setAction(58,16,310);
	setAction(58,14,308);
	setAction(58,12,306);
	setAction(58,5,303);
	setAction(58,22,312);

      newActionTable(59,6);
	setAction(59,9,315);
	setAction(59,8,314);
	setAction(59,21,317);
	setAction(59,14,316);
	setAction(59,5,313);
	setAction(59,22,318);

      newActionTable(60,6);
	setAction(60,9,321);
	setAction(60,8,320);
	setAction(60,21,323);
	setAction(60,14,322);
	setAction(60,5,319);
	setAction(60,22,324);

      newActionTable(61,6);
	setAction(61,9,327);
	setAction(61,8,326);
	setAction(61,21,329);
	setAction(61,14,328);
	setAction(61,5,325);
	setAction(61,22,330);

      newActionTable(62,5);
	setAction(62,4,331);
	setAction(62,19,334);
	setAction(62,6,332);
	setAction(62,18,333);
	setAction(62,20,335);

      newActionTable(63,1);
	setAction(63,5,340);

      newActionTable(64,14);
	setAction(64,15,347);
	setAction(64,19,353);
	setAction(64,8,342);
	setAction(64,16,348);
	setAction(64,18,352);
	setAction(64,12,344);
	setAction(64,22,350);
	setAction(64,13,345);
	setAction(64,9,343);
	setAction(64,21,349);
	setAction(64,6,351);
	setAction(64,20,354);
	setAction(64,14,346);
	setAction(64,5,341);

      newActionTable(65,6);
	setAction(65,15,357);
	setAction(65,13,355);
	setAction(65,9,358);
	setAction(65,21,360);
	setAction(65,12,356);
	setAction(65,22,359);

      newActionTable(66,6);
	setAction(66,9,363);
	setAction(66,8,362);
	setAction(66,21,365);
	setAction(66,14,364);
	setAction(66,5,361);
	setAction(66,22,366);

      newActionTable(67,9);
	setAction(67,15,373);
	setAction(67,13,371);
	setAction(67,9,369);
	setAction(67,8,368);
	setAction(67,21,374);
	setAction(67,14,372);
	setAction(67,12,370);
	setAction(67,5,367);
	setAction(67,22,375);

      newActionTable(68,1);
	setAction(68,4,376);

      newActionTable(69,1);
	setAction(69,4,377);

      newActionTable(70,1);
	setAction(70,21,378);

      newActionTable(71,1);
	setAction(71,4,379);

      newActionTable(72,1);
	setAction(72,5,381);

      newActionTable(73,1);
	setAction(73,4,382);

      newActionTable(74,9);
	setAction(74,15,389);
	setAction(74,13,387);
	setAction(74,9,385);
	setAction(74,8,384);
	setAction(74,21,390);
	setAction(74,14,388);
	setAction(74,12,386);
	setAction(74,5,383);
	setAction(74,22,391);

      newActionTable(75,2);
	setAction(75,4,392);
	setAction(75,21,393);

      newActionTable(76,2);
	setAction(76,4,394);
	setAction(76,21,395);

      newActionTable(77,2);
	setAction(77,4,402);
	setAction(77,21,403);

      newActionTable(78,1);
	setAction(78,5,404);

      newActionTable(79,9);
	setAction(79,15,411);
	setAction(79,13,409);
	setAction(79,9,407);
	setAction(79,8,406);
	setAction(79,21,412);
	setAction(79,14,410);
	setAction(79,12,408);
	setAction(79,5,405);
	setAction(79,22,413);

      newActionTable(80,7);
	setAction(80,15,416);
	setAction(80,13,414);
	setAction(80,9,417);
	setAction(80,21,420);
	setAction(80,5,418);
	setAction(80,12,415);
	setAction(80,22,419);

      newActionTable(81,1);
	setAction(81,5,421);

      newActionTable(82,7);
	setAction(82,15,425);
	setAction(82,13,423);
	setAction(82,9,426);
	setAction(82,21,428);
	setAction(82,12,424);
	setAction(82,5,422);
	setAction(82,22,427);

      newActionTable(83,7);
	setAction(83,15,433);
	setAction(83,13,432);
	setAction(83,9,430);
	setAction(83,21,434);
	setAction(83,12,431);
	setAction(83,5,429);
	setAction(83,22,435);

      newActionTable(84,7);
	setAction(84,15,440);
	setAction(84,13,439);
	setAction(84,9,437);
	setAction(84,21,441);
	setAction(84,12,438);
	setAction(84,5,436);
	setAction(84,22,442);

      newActionTable(85,9);
	setAction(85,15,449);
	setAction(85,13,447);
	setAction(85,9,445);
	setAction(85,8,444);
	setAction(85,21,450);
	setAction(85,14,448);
	setAction(85,12,446);
	setAction(85,5,443);
	setAction(85,22,451);

      newActionTable(86,1);
	setAction(86,5,459);

      newActionTable(87,9);
	setAction(87,15,466);
	setAction(87,13,464);
	setAction(87,9,462);
	setAction(87,8,461);
	setAction(87,21,467);
	setAction(87,14,465);
	setAction(87,12,463);
	setAction(87,5,460);
	setAction(87,22,468);

      newActionTable(88,1);
	setAction(88,4,469);

      newActionTable(89,2);
	setAction(89,4,470);
	setAction(89,21,471);

      newActionTable(90,1);
	setAction(90,5,475);

      newActionTable(91,6);
	setAction(91,9,478);
	setAction(91,8,477);
	setAction(91,21,480);
	setAction(91,14,479);
	setAction(91,5,476);
	setAction(91,22,481);

      newActionTable(92,10);
	setAction(92,15,497);
	setAction(92,13,495);
	setAction(92,9,493);
	setAction(92,8,492);
	setAction(92,21,499);
	setAction(92,16,498);
	setAction(92,14,496);
	setAction(92,12,494);
	setAction(92,5,491);
	setAction(92,22,500);

      newActionTable(93,10);
	setAction(93,15,507);
	setAction(93,13,505);
	setAction(93,9,503);
	setAction(93,8,502);
	setAction(93,21,509);
	setAction(93,16,508);
	setAction(93,14,506);
	setAction(93,12,504);
	setAction(93,5,501);
	setAction(93,22,510);

      newActionTable(94,10);
	setAction(94,15,517);
	setAction(94,13,515);
	setAction(94,9,513);
	setAction(94,8,512);
	setAction(94,21,519);
	setAction(94,16,518);
	setAction(94,14,516);
	setAction(94,12,514);
	setAction(94,5,511);
	setAction(94,22,520);

      newActionTable(95,6);
	setAction(95,9,523);
	setAction(95,8,522);
	setAction(95,21,525);
	setAction(95,14,524);
	setAction(95,5,521);
	setAction(95,22,526);

      newActionTable(96,7);
	setAction(96,9,530);
	setAction(96,8,529);
	setAction(96,21,532);
	setAction(96,1,527);
	setAction(96,14,531);
	setAction(96,5,528);
	setAction(96,22,533);

      newActionTable(97,1);
	setAction(97,1,534);

    }

  /* *********** */
  /* GOTO TABLES */
  /* *********** */

  static void initializeGotoTables ()
    {
      newGotoTables(28);

      newGotoTable(0,4);
	setGoto(0,2,2);
	setGoto(0,36,4);
	setGoto(0,1,1);
	setGoto(0,3,6);

      newGotoTable(1,0);

      newGotoTable(2,3);
	setGoto(2,2,106);
	setGoto(2,36,4);
	setGoto(2,3,6);

      newGotoTable(3,7);
	setGoto(3,4,7);
	setGoto(3,26,13);
	setGoto(3,6,8);
	setGoto(3,24,10);
	setGoto(3,7,9);
	setGoto(3,27,14);
	setGoto(3,22,12);

      newGotoTable(4,2);
	setGoto(4,22,19);
	setGoto(4,27,18);

      newGotoTable(5,9);
	setGoto(5,32,27);
	setGoto(5,30,24);
	setGoto(5,26,13);
	setGoto(5,23,21);
	setGoto(5,31,25);
	setGoto(5,29,22);
	setGoto(5,24,26);
	setGoto(5,27,14);
	setGoto(5,22,23);

      newGotoTable(6,6);
	setGoto(6,32,27);
	setGoto(6,26,13);
	setGoto(6,31,28);
	setGoto(6,24,26);
	setGoto(6,27,14);
	setGoto(6,22,23);

      newGotoTable(7,4);
	setGoto(7,26,13);
	setGoto(7,24,30);
	setGoto(7,27,14);
	setGoto(7,22,12);

      newGotoTable(8,1);
	setGoto(8,28,34);

      newGotoTable(9,7);
	setGoto(9,34,41);
	setGoto(9,26,13);
	setGoto(9,33,40);
	setGoto(9,24,42);
	setGoto(9,25,39);
	setGoto(9,27,14);
	setGoto(9,22,12);

      newGotoTable(10,5);
	setGoto(10,34,45);
	setGoto(10,26,13);
	setGoto(10,24,42);
	setGoto(10,27,14);
	setGoto(10,22,12);

      newGotoTable(11,4);
	setGoto(11,26,13);
	setGoto(11,24,44);
	setGoto(11,27,14);
	setGoto(11,22,12);

      newGotoTable(12,17);
	setGoto(12,15,60);
	setGoto(12,19,56);
	setGoto(12,8,61);
	setGoto(12,26,13);
	setGoto(12,11,53);
	setGoto(12,18,55);
	setGoto(12,3,62);
	setGoto(12,7,59);
	setGoto(12,12,54);
	setGoto(12,27,14);
	setGoto(12,22,63);
	setGoto(12,9,51);
	setGoto(12,21,58);
	setGoto(12,20,57);
	setGoto(12,14,49);
	setGoto(12,24,50);
	setGoto(12,5,48);

      newGotoTable(13,15);
	setGoto(13,15,104);
	setGoto(13,19,56);
	setGoto(13,8,61);
	setGoto(13,26,13);
	setGoto(13,11,53);
	setGoto(13,18,55);
	setGoto(13,3,62);
	setGoto(13,7,59);
	setGoto(13,12,54);
	setGoto(13,27,14);
	setGoto(13,22,63);
	setGoto(13,9,51);
	setGoto(13,21,58);
	setGoto(13,20,57);
	setGoto(13,24,50);

      newGotoTable(14,3);
	setGoto(14,26,79);
	setGoto(14,16,94);
	setGoto(14,10,93);

      newGotoTable(15,9);
	setGoto(15,32,27);
	setGoto(15,30,24);
	setGoto(15,26,13);
	setGoto(15,23,65);
	setGoto(15,31,25);
	setGoto(15,29,22);
	setGoto(15,24,26);
	setGoto(15,27,14);
	setGoto(15,22,23);

      newGotoTable(16,11);
	setGoto(16,13,68);
	setGoto(16,19,56);
	setGoto(16,26,13);
	setGoto(16,21,58);
	setGoto(16,11,69);
	setGoto(16,18,55);
	setGoto(16,20,57);
	setGoto(16,24,50);
	setGoto(16,7,59);
	setGoto(16,27,14);
	setGoto(16,22,63);

      newGotoTable(17,2);
	setGoto(17,26,79);
	setGoto(17,16,78);

      newGotoTable(18,3);
	setGoto(18,18,75);
	setGoto(18,22,76);
	setGoto(18,27,18);

      newGotoTable(19,1);
	setGoto(19,26,81);

      newGotoTable(20,11);
	setGoto(20,13,82);
	setGoto(20,19,56);
	setGoto(20,26,13);
	setGoto(20,21,58);
	setGoto(20,11,69);
	setGoto(20,18,55);
	setGoto(20,20,57);
	setGoto(20,24,50);
	setGoto(20,7,59);
	setGoto(20,27,14);
	setGoto(20,22,63);

      newGotoTable(21,13);
	setGoto(21,19,56);
	setGoto(21,26,13);
	setGoto(21,11,69);
	setGoto(21,18,55);
	setGoto(21,35,86);
	setGoto(21,7,59);
	setGoto(21,22,63);
	setGoto(21,27,14);
	setGoto(21,17,85);
	setGoto(21,13,87);
	setGoto(21,21,58);
	setGoto(21,20,57);
	setGoto(21,24,50);

      newGotoTable(22,11);
	setGoto(22,13,88);
	setGoto(22,19,56);
	setGoto(22,26,13);
	setGoto(22,21,58);
	setGoto(22,11,69);
	setGoto(22,18,55);
	setGoto(22,20,57);
	setGoto(22,24,50);
	setGoto(22,7,59);
	setGoto(22,27,14);
	setGoto(22,22,63);

      newGotoTable(23,13);
	setGoto(23,19,56);
	setGoto(23,26,13);
	setGoto(23,11,69);
	setGoto(23,18,55);
	setGoto(23,35,86);
	setGoto(23,7,59);
	setGoto(23,22,63);
	setGoto(23,27,14);
	setGoto(23,17,91);
	setGoto(23,13,87);
	setGoto(23,21,58);
	setGoto(23,20,57);
	setGoto(23,24,50);

      newGotoTable(24,12);
	setGoto(24,19,56);
	setGoto(24,9,96);
	setGoto(24,26,13);
	setGoto(24,21,58);
	setGoto(24,11,53);
	setGoto(24,18,55);
	setGoto(24,20,57);
	setGoto(24,24,50);
	setGoto(24,7,59);
	setGoto(24,12,54);
	setGoto(24,27,14);
	setGoto(24,22,63);

      newGotoTable(25,4);
	setGoto(25,26,13);
	setGoto(25,24,103);
	setGoto(25,27,14);
	setGoto(25,22,12);

      newGotoTable(26,4);
	setGoto(26,26,13);
	setGoto(26,24,102);
	setGoto(26,27,14);
	setGoto(26,22,12);

      newGotoTable(27,4);
	setGoto(27,26,13);
	setGoto(27,24,101);
	setGoto(27,27,14);
	setGoto(27,22,12);

    }

  /* ************ */
  /* STATE TABLES */
  /* ************ */

  static void initializeStateTables ()
    {
      setTables(0,0,0);
      setTables(1,1,1);
      setTables(2,2,1);
      setTables(3,3,2);
      setTables(4,4,1);
      setTables(5,5,3);
      setTables(6,6,1);
      setTables(7,7,1);
      setTables(8,8,1);
      setTables(9,9,1);
      setTables(10,10,1);
      setTables(11,11,1);
      setTables(12,12,1);
      setTables(13,13,1);
      setTables(14,14,1);
      setTables(15,15,1);
      setTables(16,16,1);
      setTables(17,17,4);
      setTables(18,18,1);
      setTables(19,19,1);
      setTables(20,20,5);
      setTables(21,21,1);
      setTables(22,22,1);
      setTables(23,23,1);
      setTables(24,24,6);
      setTables(25,25,1);
      setTables(26,26,1);
      setTables(27,27,1);
      setTables(28,28,1);
      setTables(29,29,7);
      setTables(30,30,1);
      setTables(31,31,1);
      setTables(32,32,1);
      setTables(33,33,8);
      setTables(34,34,1);
      setTables(35,35,1);
      setTables(36,36,1);
      setTables(37,37,1);
      setTables(38,38,9);
      setTables(39,39,1);
      setTables(40,40,10);
      setTables(41,41,1);
      setTables(42,42,1);
      setTables(43,29,11);
      setTables(44,43,1);
      setTables(45,44,1);
      setTables(46,45,1);
      setTables(47,46,12);
      setTables(48,47,1);
      setTables(49,48,13);
      setTables(50,49,1);
      setTables(51,50,1);
      setTables(52,51,14);
      setTables(53,52,1);
      setTables(54,53,1);
      setTables(55,54,1);
      setTables(56,55,1);
      setTables(57,56,1);
      setTables(58,57,1);
      setTables(59,58,1);
      setTables(60,59,1);
      setTables(61,60,1);
      setTables(62,61,1);
      setTables(63,62,1);
      setTables(64,20,15);
      setTables(65,63,1);
      setTables(66,64,1);
      setTables(67,65,16);
      setTables(68,66,1);
      setTables(69,67,1);
      setTables(70,68,1);
      setTables(71,69,1);
      setTables(72,70,17);
      setTables(73,71,1);
      setTables(74,17,18);
      setTables(75,72,1);
      setTables(76,73,1);
      setTables(77,74,1);
      setTables(78,75,19);
      setTables(79,76,1);
      setTables(80,65,20);
      setTables(81,77,1);
      setTables(82,78,1);
      setTables(83,79,1);
      setTables(84,80,21);
      setTables(85,81,1);
      setTables(86,82,22);
      setTables(87,83,1);
      setTables(88,84,1);
      setTables(89,85,1);
      setTables(90,80,23);
      setTables(91,86,1);
      setTables(92,87,1);
      setTables(93,88,1);
      setTables(94,89,19);
      setTables(95,29,24);
      setTables(96,90,1);
      setTables(97,91,1);
      setTables(98,29,25);
      setTables(99,29,26);
      setTables(100,29,27);
      setTables(101,92,1);
      setTables(102,93,1);
      setTables(103,94,1);
      setTables(104,95,1);
      setTables(105,96,1);
      setTables(106,97,1);
    }
}

/* ***************** */
/* ANCILLARY CLASSES */
/* ***************** */



////////////////////////////////////////////////////////////////////////


