home *** CD-ROM | disk | FTP | other *** search
/ Programmer's ROM - The Computer Language Library / programmersrom.iso / ada / print / pret.src < prev    next >
Encoding:
Text File  |  1988-05-03  |  326.9 KB  |  7,123 lines

  1.  
  2. -------- SIMTEL20 Ada Software Repository Prologue ------------
  3. --                                                           -*
  4. -- Unit name    : Source Formatter
  5. -- Version      : 1.0
  6. -- Contact      : Lt. Colonel Falgiano
  7. --              : ESD/SCW
  8. --              : Hanscom AFB, MA  01731
  9. -- Author       : Bill Toscano, Michael Gordon
  10. --              : Intermetrics, Inc, 
  11. --              : 733 Concord Ave
  12. --              : Cambridge, MA 02138 
  13. -- DDN Address  :
  14. -- Copyright    : (c) 1985 Intermetrics, Inc. 
  15. -- Date created : 15 September 1985 
  16. -- Release date : 5 April 1985 
  17. -- Last update  : 17 March 1985 
  18. --                                                           -*
  19. ---------------------------------------------------------------
  20. --                                                           -*
  21. -- Keywords     : 
  22. ----------------:
  23. --
  24. -- Abstract     : The standard format of source code listed with this tool
  25. ----------------: shall be the format used in the Ada LRM.  Options shall allow
  26. ----------------: the user to specify the number of spaces per indent level,  
  27. ----------------: the form for printing categories of key words and identifiers 
  28. ----------------: (eg, upper case, lower case, etc.), and similiar parameters  
  29. ----------------: which can be varied without deviating from the LRM. 
  30. ----------------: 
  31. ----------------: This tool was developed as a precursor for 
  32. ----------------: the WMCCS Information System (WIS).  An
  33. ----------------: executable version of the tool has been 
  34. ----------------: demonstrated.  This source code has sub-
  35. ----------------: sequently been recompiled but has not under-
  36. ----------------: gone extensive testing.
  37. ----------------:
  38. --                                                           -*
  39. ------------------ Revision history ---------------------------
  40. --                                                           -*
  41. -- DATE         VERSION AUTHOR                  HISTORY 
  42. -- 03/85        1.0  Bill Toscano               Initial Release 
  43. --                                                           -* 
  44. ------------------ Distribution and Copyright -----------------
  45. --                                                           -*
  46. -- This prologue must be included in all copies of this software.
  47. -- 
  48. -- This software is copyright by the author.
  49. -- 
  50. -- This software is released to the Ada community.
  51. -- This software is released to the Public Domain (note:
  52. --   software released to the Public Domain is not subject
  53. --   to copyright protection).
  54. -- Restrictions on use or distribution:  NONE
  55. --                                                           -*
  56. ----------------- Disclaimer ----------------------------------
  57. --                                                           -*
  58. -- This software and its documentation are provided "AS IS" and
  59. -- without any expressed or implied warranties whatsoever.
  60. --
  61. -- No warranties as to performance, merchantability, or fitness
  62. -- for a particular purpose exist.
  63. --
  64. -- Because of the diversity of conditions and hardware under
  65. -- which this software may be used, no warranty of fitness for
  66. -- a particular purpose is offered.  The user is advised to 
  67. -- test the software thoroughly before relying on it.  The user
  68. -- must assume the entire risk and liability of using this 
  69. -- software.
  70. --
  71. -- In no event shall any person or organization of people be
  72. -- held responsible for any direct, indirect, consequential
  73. -- or inconsequential damages or lost profits.
  74. --                                                          -*
  75. ----------------- END-PROLOGUE -------------------------------
  76. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  77. --PPRDECLS.DAT
  78. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  79.  
  80. with ParseTables;
  81. with Paginated_Output;
  82.  
  83. package Pretty_Printer_Declarations is
  84. --| Declarations for pretty printer tool
  85.  
  86. --| Overview
  87.  
  88. --| This package contains declarations for the pretty printer tool.
  89. --| These declarations serve to parameterize the pretty printer, and are
  90. --| referred to throught all pretty printer routines.  All the "parameters,"
  91. --| with the exception of those which are actual formal parameters to the
  92. --| pretty print call are located in this package so that modifications to 
  93. --| them can be made easily.
  94.  
  95. --| Notes
  96.  
  97. --| Abbreviations Used:
  98. --|
  99. --| RH: Right Hand
  100. --|
  101. --| Installation specific values for "parameterizing" the pretty printer
  102. --| should be inserted in this package.  See the installation guide for
  103. --| details.
  104.  
  105.     ----------------------------------------------------------------
  106.     -- Pretty_Printer File Declarations
  107.     ----------------------------------------------------------------
  108.  
  109.     Output_File : Paginated_Output.Paginated_File_Handle;
  110.     --| File handle to pass to Paginated Output routines
  111.  
  112.     ----------------------------------------------------------------
  113.     -- Declarations to parameterize Pretty_Printer
  114.     ----------------------------------------------------------------
  115.  
  116.     type Delimiter_Name is (Basic,     --| %, :, !
  117.                             Extended); --| ", #, |
  118.     Delimiters : Delimiter_Name := Extended;
  119.     --| Determines whether to use the Basic or Extended character set for
  120.     --| output.
  121.  
  122.     Max_Columns : constant := 133;
  123.     subtype Column_Range is Positive range Positive'First .. Max_Columns;
  124.     Page_Width : Column_Range := 80;
  125.     --| Width of output page
  126.  
  127.     RH_Margin : Column_Range := 60;
  128.     --| The column beyond which no indenting is performed.
  129.  
  130.     subtype Indentation_Range is
  131.         Natural range 0 .. RH_Margin;
  132.     Indentation_Level : Indentation_Range := 2;
  133.     --| Indentation Level for all constructs
  134.  
  135.     Max_Depth : constant := 1000; -- arbitrary choice
  136.     subtype Depth_Range is natural range 0 .. Max_Depth;
  137.     Depth : Depth_Range := 0; --| Depth of pretty printing.
  138.                               --| Depth = 0 --> Print everything
  139.                               --| Depth = 1 --> Print only outermost scope
  140.                               --| Depth = 2 --> Print outermost 2 scopes
  141.                               --| etc.
  142.  
  143.     type Case_Name is (Uppercase,    --| abcd --> ABCD
  144.                        Lowercase,    --| AbcD --> abcd
  145.                        Capitalize1,  --| ABC_def --> ABC_Def
  146.                        Capitalize2,  --| ABC_def --> Abc_Def
  147.                        Bold,         --| lowercase and Bold according to 
  148.                                      --| Change_Case.Bold_Print
  149.                        As_Is);       --| As it appeared in souce
  150.  
  151.     Keyword    : Case_Name := Bold;      --| How to print keywords
  152.     Identifier : Case_Name := Uppercase; --| How to print identifiers
  153.  
  154.     type Switch is (On, Off);
  155.     Comment_Formatting  : Switch := On;
  156.     --| If off, just put comments at the same source line and column position
  157.     --| as they appeared in the source.  If this is not possible, put at 
  158.     --| the same source column position on the next line.  If on, indent 
  159.     --| comments to source level, and precede comments preceding a statement
  160.     --| with a blank line.
  161.  
  162.     Colon_Alignment     : Switch := On; 
  163.     --| If on, align colons in declarations
  164.  
  165.     Explicit_Param_Mode : Switch := On; 
  166.     --| If on, insert parameter modes of default parameters
  167.  
  168.     Closing_Identifiers : Switch := On;
  169.     --| If on, insert closing identifiers and designators which didn't appear 
  170.     --| in the source.
  171.  
  172.     Paginated_Format    : Switch := Off;
  173.     --| If on, print headers on each page and put page breaks in between
  174.     --| pages.
  175.  
  176.     type Spacing is
  177.         (After, Before, Around, None);
  178.  
  179.     Spacing_Table : Array(1 .. ParseTables.Comment_TokenValue) of Spacing := (
  180.     -- unfortunately, type of ParseTables.xxxTokenValue has non-static bound,
  181.     -- so positional rather than named associations must be used to initialize
  182.     -- Spacing_Table.
  183.  
  184.     -- The spacing table determines, in general, how to space each token.
  185.     -- However, the spacing of some tokens is context dependent, and so
  186.     -- some of the spacing is dynamically handled in other places.  
  187.     -- Spaced_Token refers to Pretty_Printer_Utilities.Spaced_Token.
  188.     -- The special cases are described below.
  189.  
  190.      -- ParseTables.Empty_TokenValue =>
  191.         None,
  192.      -- ParseTables.AbortTokenValue => 
  193.         After,
  194.      -- ParseTables.AbsTokenValue =>  -- Spaced_Token inserts space after
  195.         None,                         -- unless followed by '('
  196.      -- ParseTables.AcceptTokenValue => 
  197.         After,
  198.      -- ParseTables.AccessTokenValue => 
  199.         After,
  200.      -- ParseTables.AllTokenValue => 
  201.         None,
  202.      -- ParseTables.AndTokenValue => 
  203.         Around,
  204.      -- ParseTables.ArrayTokenValue => 
  205.         None, 
  206.      -- ParseTables.AtTokenValue => 
  207.         Around,
  208.      -- ParseTables.BeginTokenValue => 
  209.         None, 
  210.      -- ParseTables.BodyTokenValue => 
  211.         After,
  212.      -- ParseTables.CaseTokenValue =>  -- Spaced_Token inserts space after if
  213.         None,                          -- not followed by ';'
  214.      -- ParseTables.ConstantTokenValue =>  -- Spaced_Token inserts space before
  215.         After,                             -- if not following ':='
  216.      -- ParseTables.DeclareTokenValue => 
  217.         None, 
  218.      -- ParseTables.DelayTokenValue => 
  219.         After, 
  220.      -- ParseTables.DeltaTokenValue =>  -- Spaced_Token inserts space before if
  221.         None,                           -- not following ''' or 'IS', after if
  222.                                         -- not followed by ';'
  223.      -- ParseTables.DigitsTokenValue => -- Spaced_Token inserts space before if
  224.         None,                           -- not following ''', or 'IS' after if
  225.                                         -- not followed by ';'
  226.      -- ParseTables.DoTokenValue => 
  227.         Before, 
  228.      -- ParseTables.ElseTokenValue => 
  229.         After,
  230.      -- ParseTables.ElsifTokenValue => 
  231.         After, 
  232.      -- ParseTables.EndTokenValue =>  -- Spaced_Token inserts space after if
  233.         None,                         -- not followed by ';'
  234.      -- ParseTables.EntryTokenValue => 
  235.         After, 
  236.      -- ParseTables.ExceptionTokenValue => 
  237.         None,
  238.      -- ParseTables.ExitTokenValue =>  -- Spaced_Token inserts space after if
  239.         None,                          -- not followed by ';' 
  240.      -- ParseTables.ForTokenValue => 
  241.         After,
  242.      -- ParseTables.FunctionTokenValue => 
  243.         After, 
  244.      -- ParseTables.GenericTokenValue => 
  245.         None,
  246.      -- ParseTables.GotoTokenValue => 
  247.         After, 
  248.      -- ParseTables.IfTokenValue =>  -- Spaced_Token inserts space after if 
  249.         None,                        -- not followed by ';'
  250.      -- ParseTables.InTokenValue =>  -- Spaced_Token inserts space before if
  251.         After,                       -- not following ':'
  252.      -- ParseTables.IsTokenValue => 
  253.         Around,
  254.      -- ParseTables.LimitedTokenValue => 
  255.         After, 
  256.      -- ParseTables.LoopTokenValue =>  -- Spaced_Token inserts space after if 
  257.         None,                          -- not followed by ';' and space before
  258.                                        -- if not following ':'
  259.      -- ParseTables.ModTokenValue =>  -- Spaced_Token inserts space before if
  260.         After,                        -- not following 'AT'
  261.      -- ParseTables.NewTokenValue => 
  262.         After,
  263.      -- ParseTables.NotTokenValue => 
  264.         After, 
  265.      -- ParseTables.NullTokenValue => 
  266.         None,
  267.      -- ParseTables.OfTokenValue => 
  268.         Around, 
  269.      -- ParseTables.OrTokenValue => 
  270.         Around,
  271.      -- ParseTables.OthersTokenValue => 
  272.         None,    
  273.      -- ParseTables.OutTokenValue => 
  274.         After,
  275.      -- ParseTables.PackageTokenValue => 
  276.         After, 
  277.      -- ParseTables.PragmaTokenValue => 
  278.         After,
  279.      -- ParseTables.PrivateTokenValue => 
  280.         None,  
  281.      -- ParseTables.ProcedureTokenValue => 
  282.         After,
  283.      -- ParseTables.RaiseTokenValue =>  -- Spaced_Token inserts space after if
  284.         None,                           -- not followed by ';'
  285.      -- ParseTables.RangeTokenValue =>  -- Spaced_Token inserts space before if
  286.         None,                           -- not following ''' or 'IS', after if
  287.                                         -- not followed by ';'
  288.      -- ParseTables.RecordTokenValue =>  -- Spaced_Token inserts space after if
  289.         None,                            -- not followed by ';'
  290.      -- ParseTables.RemTokenValue => 
  291.         Around,
  292.      -- ParseTables.RenamesTokenValue => 
  293.         Around, 
  294.      -- ParseTables.ReturnTokenValue =>  -- Spaced_Token inserts space after if
  295.         Before,                          -- not followed by ';'
  296.      -- ParseTables.ReverseTokenValue => 
  297.         After, 
  298.      -- ParseTables.SelectTokenValue =>  -- Spaced_Token inserts space after if
  299.         None,                            -- not followed by ';'
  300.      -- ParseTables.SeparateTokenValue => 
  301.         None,
  302.      -- ParseTables.SubtypeTokenValue => 
  303.         After,
  304.      -- ParseTables.TaskTokenValue => 
  305.         After,
  306.      -- ParseTables.TerminateTokenValue => 
  307.         None,
  308.      -- ParseTables.ThenTokenValue =>  -- Spaced_Token inserts space before if 
  309.         After,                         -- not preceded by "and"  
  310.      -- ParseTables.TypeTokenValue => 
  311.         After, 
  312.      -- ParseTables.UseTokenValue =>   -- Spaced_Token inserts space before if
  313.         After,                         -- not preceded by ';'
  314.      -- ParseTables.WhenTokenValue => 
  315.         After,
  316.      -- ParseTables.WhileTokenValue => 
  317.         After,
  318.      -- ParseTables.WithTokenValue => 
  319.         After,
  320.      -- ParseTables.XorTokenValue => 
  321.         Around, 
  322.      -- ParseTables.IdentifierTokenValue => 
  323.         None,
  324.      -- ParseTables.NumericTokenValue => 
  325.         None,
  326.      -- ParseTables.StringTokenValue => 
  327.         None,
  328.      -- ParseTables.CharacterTokenValue => 
  329.         None,
  330.      -- ParseTables.Ampersand_TokenValue => 
  331.         Around,
  332.      -- ParseTables.Apostrophe_TokenValue => 
  333.         None,
  334.      -- ParseTables.LeftParen_TokenValue => 
  335.         None,
  336.      -- ParseTables.RightParen_TokenValue => 
  337.         None,
  338.      -- ParseTables.Star_TokenValue => 
  339.         None,
  340.      -- ParseTables.Plus_TokenValue =>  -- Parser.Apply_Actions inserts space
  341.         None,                           -- after if it is a binary operator,
  342.                                         -- before if not following '('
  343.      -- ParseTables.Comma_TokenValue =>  
  344.         After,                           
  345.      -- ParseTables.Minus_TokenValue =>  -- Parser.Apply_Actions inserts space
  346.         None,                            -- after if it is a binary operator,
  347.                                          -- before if not following '('
  348.      -- ParseTables.Dot_TokenValue =>
  349.         None,
  350.      -- ParseTables.Slash_TokenValue => 
  351.         None,
  352.      -- ParseTables.Colon_TokenValue => 
  353.         Around,
  354.      -- ParseTables.SemiColon_TokenValue => 
  355.         After,
  356.      -- ParseTables.LT_TokenValue => 
  357.         Around,
  358.      -- ParseTables.EQ_TokenValue => 
  359.         Around,
  360.      -- ParseTables.GT_TokenValue => 
  361.         Around,
  362.      -- ParseTables.Bar_TokenValue => 
  363.         Around,
  364.      -- ParseTables.EQGT_TokenValue => 
  365.         Around,
  366.      -- ParseTables.DotDot_TokenValue => 
  367.         Around,
  368.      -- ParseTables.StarStar_TokenValue => 
  369.         None,
  370.      -- ParseTables.ColonEQ_TokenValue => 
  371.         After,
  372.      -- ParseTables.SlashEQ_TokenValue => 
  373.         Around,
  374.      -- ParseTables.GTEQ_TokenValue => 
  375.         Around,
  376.      -- ParseTables.LTEQ_TokenValue => 
  377.         Around,
  378.      -- ParseTables.LTLT_TokenValue => 
  379.         None,
  380.      -- ParseTables.GTGT_TokenValue => 
  381.         After,
  382.      -- ParseTables.LTGT_TokenValue => 
  383.         None,
  384.      -- ParseTables.Comment_TokenValue => 
  385.         None);
  386.      -----------------------------------------------------------------
  387.  
  388. end Pretty_Printer_Declarations;
  389.  
  390. ----------------------------------------------------------------------
  391. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  392. --PPRUTILS.SPC
  393. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  394. ---------------------------------------------------------------------
  395.  
  396. with ParserDeclarations;
  397. with Lists;
  398. with Stack_Pkg;
  399.  
  400. package Pretty_Printer_Utilities is
  401. --| Utilities for pretty printer
  402.  
  403.  
  404. --| Overview
  405.  
  406. --| This package contains all the utility subprograms for the pretty
  407. --| printer called from Parser.Parse and Parser.Apply_Actions.  Each
  408. --| utility is described in detail below in its specification.
  409.  
  410.     package PD renames ParserDeclarations;
  411.  
  412.     package Comment_Lists is new Lists(PD.ParseStackElement);
  413.  
  414.     Comment_Buffer : Comment_Lists.List; 
  415.     --| List of comments in between two tokens
  416.  
  417.     type Pop_To_Where is (To_Output, To_Nowhere);
  418.     --| Used in popping closing identifiers/designators
  419.  
  420.     -----------------------------------------------------------------
  421.  
  422.     procedure Initialize;  --| Initializes the utilities
  423.  
  424.     -----------------------------------------------------------------
  425.  
  426.     procedure Put( --| Puts the token in the buffer or in the output file
  427.         Next_Token : in out PD.ParseStackElement);
  428.         --| Token that was just pushed on parse stack
  429.  
  430.     --| Effects
  431.  
  432.     --| Put examines the Buffering flag in 
  433.     --| Pretty_Printer_Declarations to see whether buffering is turned on.
  434.     --| If buffering is turned on, the token is placed in the buffer; if not,
  435.     --| Print_Token is called to print the token.
  436.  
  437.     -----------------------------------------------------------------
  438.  
  439.     procedure Put_Space(Spaces : in Natural := 1);
  440.     --| Puts a space in the output file.
  441.  
  442.     --| Effects
  443.  
  444.     --| Paginated Output is used to put a space in the output file.  The
  445.     --| current column information is also updated.
  446.  
  447.     -----------------------------------------------------------------
  448.  
  449.     procedure Print_Comments(Buffer : in out Comment_Lists.List);
  450.     --| Outputs buffered comments
  451.  
  452.     --| Effects
  453.  
  454.     --| If comment formatting is off, comments are output at the same
  455.     --| line and column position as they appeared in the source.  If this
  456.     --| is not possible, the comment is positioned at the next line and the
  457.     --| source column.  If comment formatting is on, comments in the 
  458.     --| declarative parts are printed alongside declarations; comments in
  459.     --| the body are preceded by a blank line and indented to the level of
  460.     --| the source if possible.  If a comment cannot be indented to the level
  461.     --| of the source, it is handled the same way as comments with comment
  462.     --| formatting off.
  463.  
  464.     -----------------------------------------------------------------
  465.  
  466.     procedure New_Line;  --| Requests a new line in the buffer or output
  467.  
  468.     --| Effects
  469.  
  470.     --| New_Line examines the Buffering flag in Pretty_Printer_Declarations
  471.     --| to see whether buffering is turned on, and requests a new line
  472.     --| in the buffer or the output.
  473.  
  474.     -----------------------------------------------------------------
  475.  
  476.     procedure Start_Buffering_Colon_Declarations;
  477.     --| Starts buffering colon declarations
  478.  
  479.     --| Effects
  480.  
  481.     --| Starts buffering the colon declarations or other constructs
  482.     --| containing colons.
  483.  
  484.     -----------------------------------------------------------------
  485.  
  486.     procedure Print_Colon_Declarations_Buffer;
  487.     --| Writes the colon declarations buffer to the output file
  488.  
  489.     --| Effects
  490.  
  491.     --| Writes the contents of the buffer to the output file,
  492.     --| after lining up the colons.
  493.  
  494.     -----------------------------------------------------------------
  495.  
  496.     procedure Increase_Indent;  --| Increases indent 
  497.  
  498.     --| Effects
  499.  
  500.     --| Requests an increase of the indent by PPD.Indentation_Level.
  501.  
  502.     --| Requires
  503.  
  504.     --| It is expected that New_Line will be called with each call to
  505.     --| Increase_Indent, in order to keep the Current_Column information
  506.     --| up to date.
  507.  
  508.     -----------------------------------------------------------------
  509.  
  510.     procedure Decrease_Indent;  --| Decreases indent 
  511.  
  512.     --| Effects
  513.  
  514.     --| Requests a decrease of the indent by PPD.Indentation_Level.
  515.  
  516.     --| Requires
  517.  
  518.     --| It is expected that New_Line will have been called before each call to
  519.     --| Increase_Indent, in order to keep the Current_Column information
  520.     --| up to date.
  521.  
  522.     -----------------------------------------------------------------
  523.  
  524.     procedure Change_Indent;   --| Changes the indent
  525.  
  526.     --| Effects
  527.  
  528.     --| Requests a change in  the indent by an amount other than 
  529.     --| PPD.Indentation_Level.  Indent is changed to the current column.
  530.     --| This procedure is used to line up parameter lists or discriminant 
  531.     --| specification lists.
  532.  
  533.     --| Requires
  534.  
  535.     --| This pair of procedures (Change_Indent, Resume_Normal_Indentation)
  536.     --| are expected to be called without any intervening Increase_Indent
  537.     --| or Decrease_Indent calls.
  538.  
  539.     -----------------------------------------------------------------
  540.  
  541.     procedure Resume_Normal_Indentation;   --| Changes the indent back
  542.  
  543.     --| Effects
  544.  
  545.     --| Changes the indent back to what it was before Change_Indent was
  546.     --| called.
  547.  
  548.     --| Requires
  549.  
  550.     --| This pair of procedures (Change_Indent, Resume_Normal_Indentation)
  551.     --| are expected to be called without any intervening Increase_Indent
  552.     --| or Decrease_Indent calls.
  553.  
  554.     -----------------------------------------------------------------
  555.  
  556.     procedure Pop_Identifier(Where : in Pop_To_Where := To_Nowhere);
  557.  
  558.     --| Effects
  559.  
  560.     --| Pops an identifier off the stack of identifiers/designators.  Stack is
  561.     --| used for keeping track of beginning and closing identifiers/designators
  562.     --| so that default closing identifiers/designators can be output.
  563.  
  564.     -----------------------------------------------------------------
  565.  
  566.     procedure Push_Identifier;
  567.  
  568.     --| Effects
  569.  
  570.     --| Pushes an identifier/designator on the identifier stack, which is used
  571.     --| for keeping track of beginning and closing identifiers/designators, so
  572.     --| that default closing identifiers can be filled in.
  573.  
  574.     -----------------------------------------------------------------
  575.  
  576.     procedure Push_Empty_Token;
  577.  
  578.     --| Effects
  579.  
  580.     --| Pushes the empty token on the stack of beginning/closing
  581.     --| identifiers/designators.  This procedure exists to handle loop and
  582.     --| block identifiers which are optional at both the beginning and end
  583.     --| of the block.  If the identifier is left off, the empty
  584.     --| empty token is pushed as the loop or block identifer in order
  585.     --| to synchronize the stack when it is automatically popped at
  586.     --| the end of a loop or block.
  587.  
  588.     -----------------------------------------------------------------
  589.  
  590.     procedure Insert_In_Token;
  591.  
  592.     --| Effects
  593.  
  594.     --| Inserts the token "in" into the output.  Called when subprogram
  595.     --| specification with default parameters is found in the source.
  596.  
  597.     -----------------------------------------------------------------
  598.  
  599.     procedure Increment_Scope;
  600.  
  601.     --| Effects
  602.  
  603.     --| Requests that Current_Scope be incremented.  Scope is used with
  604.     --| the Depth parameter to determine whether to print tokens or a
  605.     --| place holder.
  606.  
  607.     -----------------------------------------------------------------
  608.  
  609.     procedure Decrement_Scope(Place_Holder : in String);
  610.  
  611.     --| Effects
  612.  
  613.     --| Requests that Current_Scope be decremented. Sets "requests" back to 
  614.     --| 0 and prints out a placeholder if printing had been suppressed for 
  615.     --| this scope.
  616.  
  617.     -----------------------------------------------------------------
  618.  
  619.     procedure Switch_Comment_Context;
  620.  
  621.     --| Effects
  622.  
  623.     --| Switches the current comment context from declarative part to body,
  624.     --| in order that comments be formatted appropriately in each part.
  625.  
  626. ---------------------------------------------------------------------
  627.  
  628. end Pretty_Printer_Utilities;
  629.  
  630. ---------------------------------------------------------------------
  631. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  632. --PARSE.BDY
  633. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  634. -- $Source: /nosc/work/parser/RCS/Parse.bdy,v $
  635. -- $Revision: 4.0 $ -- $Date: 85/02/19 12:00:03 $ -- $Author: carol $
  636.  
  637. ----------------------------------------------------------------------
  638.  
  639. with Lex;                       -- the lexical analyzer
  640. with ParseStack;                -- elements awaiting parsing
  641. with StateStack;                -- stack of parse states
  642. with ParseTables;               -- state tables generated by parser
  643.                                 -- generator
  644. use ParseTables;
  645.  
  646. with Grammar_Constants;         -- constants generated by parser generator
  647. use Grammar_Constants;
  648.  
  649. with Pretty_Printer_Utilities;-- Pretty_Printer specific routines
  650.  
  651. package body Parser is
  652.  
  653.     ------------------------------------------------------------------
  654.  
  655.     procedure Apply_Actions(
  656.         Rule_Number : in PT.LeftHandSideRange) is separate;
  657.  
  658.     ------------------------------------------------------------------
  659.  
  660.     function Parse return PD.ParseStackElement is
  661.  
  662.     --| Overview
  663.     --|
  664.     --| The appropriate reference is:
  665.     --|
  666.     --| Using the NYU LALR Parser Generator. Philippe Charles and
  667.     --| Gerald Fisher. Courant Institute, New York University, 251 Mercer
  668.     --| Street, New York, N.Y.  10012. Unpublished paper. 1981.
  669.     --|
  670.  
  671.     --|
  672.     --| Notes
  673.     --|
  674.     --| Abbreviations Used:
  675.     --|
  676.     --| Cur : Current - used as prefix
  677.     --| LH  : LeftHand
  678.     --| RH  : RightHand
  679.     --|
  680.  
  681.     ------------------------------------------------------------------
  682.     -- Reduce Action Work Variables
  683.     ------------------------------------------------------------------
  684.  
  685.     Reduce_Action_Number   : PT.LeftHandSideRange;
  686.         --| reduction to perform
  687.  
  688.     Reduce_Action_LH_Value : GrammarSymbolRange;
  689.         --| grammar symbol number of left hand side of reduction
  690.  
  691.     Reduce_Action_RH_Size  : PD.StateParseStacksIndex;
  692.         --| number of elements in right hand side of reduction
  693.  
  694.     ------------------------------------------------------------------
  695.     -- Other Objects
  696.     ------------------------------------------------------------------
  697.  
  698.     Current_Action      : ActionRange;
  699.         --| return from PT.GetAction.
  700.  
  701.     Start_State         : constant := 1;
  702.         --| Start state for parser.
  703.  
  704.     Last_Element_Popped : PD.ParseStackElement;
  705.         --| Last element popped from parse stack
  706.  
  707.     ------------------------------------------------------------------
  708.  
  709.     begin
  710.  
  711.     --|
  712.     --| Algorithm
  713.     --|
  714.     --| Function PT.GetAction returns an action value,
  715.     --| which indicate one of four possible actions:
  716.     --|
  717.     --| Error:  action value = 0.
  718.     --| Shift:  0 < action value < StateCountPlusOne.
  719.     --| Accept: action value = StateCountPlusOne.
  720.     --| Reduce: action value > StateCountPlusOne.
  721.     --|
  722.     --| The action is processed (as described below).
  723.     --| This is repeated until no more tokens are obtained.
  724.     --|
  725.     --| The basic action processing is:
  726.     --|
  727.     --| SHIFT ACTION: the next token is placed on the ParseStack.
  728.     --|
  729.     --| REDUCE ACTION: the handle (a grammar rule's right hand side)
  730.     --| found on the ParseStack is replaced with a
  731.     --| non-terminal (grammar rule's left hand side) to which
  732.     --| it has been reduced, and a new state.
  733.     --|
  734.     --| ACCEPT ACTION: the ParseStack contains the root
  735.     --| of the parse tree, and processing is finished for
  736.     --| If another compilation unit is present, parsing continues.
  737.     --|
  738.     --| ERROR ACTION: the exception Parser_Error is raised.
  739.  
  740.     ------------------------------------------------------------------
  741.     
  742.         -- Initialize Lexical Analyzer
  743.         Lex.Initialization;
  744.  
  745.         PD.CurToken := Lex.GetNextNonCommentToken;
  746.  
  747.         StateStack.Push(Start_State);
  748.  
  749.         Do_Parse: loop
  750.  
  751.             Current_Action := PT.GetAction(
  752.                 StateStack.CopyTop,
  753.                 PD.CurToken.gram_sym_val);
  754.  
  755.             -- Accept action
  756.             exit when (Current_Action in PD.Accept_Action_Range);
  757.         
  758.             if Current_Action in PD.Shift_Action_Range then
  759.  
  760.                 -- Pretty Printer Utility call
  761.                 Pretty_Printer_Utilities.Put(PD.CurToken);
  762.  
  763.                 -- Shift token from CurToken to ParseStack.
  764.                 ParseStack.Push(PD.CurToken);
  765.  
  766.                 -- Add new state to top of StateStack
  767.                 StateStack.Push(Current_Action);
  768.          
  769.                 -- Get next token.
  770.                 PD.CurToken := Lex.GetNextNonCommentToken;
  771.         
  772.             elsif Current_Action in PD.Reduce_Action_Range then
  773.         
  774.                 Reduce_Action_Number := Current_Action -
  775.                     StateCountPlusOne;
  776.  
  777.                 Reduce_Action_LH_Value  :=
  778.                     PT.Get_LeftHandSide(Reduce_Action_Number);
  779.  
  780.                 Reduce_Action_RH_Size :=
  781.                     PT.Get_RightHandSide(Reduce_Action_Number);
  782.  
  783.                 -- Reduce Parse Stack
  784.                 ParseStack.Reduce(Reduce_Action_RH_Size);
  785.  
  786.                 ParseStack.Push((
  787.                     gram_sym_val => Reduce_Action_LH_Value,
  788.                     lexed_token => (
  789.                         text => PD.Null_Source_Text,
  790.                         srcpos_line => 0,
  791.                         srcpos_column => 0)));
  792.  
  793.                 -- Reduce State Stack
  794.                 StateStack.Reduce(Reduce_Action_RH_Size);
  795.  
  796.                 StateStack.Push(PT.GetAction(
  797.                     StateStack.CopyTop,
  798.                     Reduce_Action_LH_Value));
  799.  
  800.                 Apply_Actions(Reduce_Action_Number);
  801.  
  802.                 else -- Current_Action is in PD.Error_Action_Range
  803.                     raise PD.Parser_Error;
  804.             end if;
  805.         end loop Do_Parse;
  806.         return ParseStack.Pop;
  807.     
  808.     exception
  809.         when PD.MemoryOverflow =>
  810.             -- raised if Parse runs out of newable memory.
  811.             raise PD.MemoryOverflow;
  812.     
  813.     end Parse;
  814.     
  815.     ------------------------------------------------------------------
  816.  
  817. end Parser;
  818.  
  819. ----------------------------------------------------------------------
  820. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  821. --APPLYACT.SUB
  822. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  823.      
  824.  with Pretty_Printer_Declarations;
  825.  with Pretty_Printer_Utilities;
  826.      
  827.  separate (Parser)
  828.  procedure Apply_Actions(Rule_Number : in PT.LeftHandSideRange) is
  829.  -- all procedure calls in this unit are procedures in package
  830.  -- Pretty_Printer_Utilities
  831.      
  832.      use Pretty_Printer_Utilities;
  833.      
  834.  begin
  835.      
  836.      case Rule_Number is
  837.      
  838.      
  839.  -- pragma ::= PRAGMA identifier ( general_component_associations ) ;
  840.      
  841.   when 1
  842.      
  843.  -- pragma ::= PRAGMA identifier ;
  844.      
  845.   | 2 =>
  846.      
  847.          New_Line;
  848.      
  849.  -- basic_declaration ::= generic_instantiation
  850.      
  851.   when 9 =>
  852.      
  853.          Decrease_Indent;
  854.          Pop_Identifier;
  855.          Decrement_Scope("generic instantiation");
  856.      
  857.  -- basic_colon_declaration ::= object_declaration
  858.      
  859.   when 11
  860.      
  861.  -- basic_colon_declaration ::= number_declaration
  862.      
  863.   | 12
  864.      
  865.  -- basic_colon_declaration ::= exception_declaration
  866.      
  867.   | 13
  868.      
  869.  -- basic_colon_declaration ::= renaming_colon_declaration
  870.      
  871.   | 14 =>
  872.      
  873.          New_Line;
  874.      
  875.  -- type_definition ::= record_type_definition ;
  876.      
  877.   when 30 =>
  878.      
  879.          Decrease_Indent;
  880.      
  881.  -- component_list ::= {pragma_decl} {component_declaration}
  882.  --     component_declaration closing_{pragma_decl}
  883.      
  884.   when 66
  885.      
  886.  -- component_list ::= {pragma_decl} {component_declaration}' variant_part
  887.  --     {pragma_decl}
  888.      
  889.   | 67 =>
  890.      
  891.          Decrease_Indent;
  892.      
  893.  -- component_list ::= null_statement {pragma_decl}
  894.      
  895.   when 68 =>
  896.      
  897.          -- buffering started at record_terminal so must print out
  898.          Print_Colon_Declarations_Buffer;
  899.          Decrease_Indent;
  900.      
  901.  -- component_declaration ::= identifier_list : subtype_indication
  902.  --     [:=expression] ;
  903.      
  904.   when 69 =>
  905.      
  906.          New_Line;
  907.      
  908.  -- variant_part ::= CASE__identifier__IS {pragma_variant}__variant__{variant}
  909.  --     END CASE ;
  910.      
  911.   when 71 =>
  912.      
  913.          New_Line;
  914.      
  915.  -- declarative_part ::= {basic_declarative_item}
  916.      
  917.   when 80
  918.      
  919.  -- declarative_part ::= {basic_declarative_item} body {later_declarative_item}
  920.      
  921.      
  922.   | 81 =>
  923.      
  924.          Decrease_Indent;
  925.      
  926.  -- basic_declarative_item ::= basic_declaration
  927.      
  928.   when 82
  929.      
  930.  -- basic_declarative_item ::= representation_clause
  931.      
  932.   | 83
  933.      
  934.  -- basic_declarative_item ::= use_clause
  935.      
  936.   | 84
  937.      
  938.  -- later_declarative_item ::= subprogram_declaration
  939.      
  940.   | 86
  941.      
  942.  -- later_declarative_item ::= package_declaration
  943.      
  944.   | 87
  945.      
  946.  -- later_declarative_item ::= task_specification
  947.      
  948.   | 88
  949.      
  950.  -- later_declarative_item ::= generic_specification
  951.      
  952.   | 89
  953.      
  954.  -- later_declarative_item ::= use_clause
  955.      
  956.   | 90 =>
  957.      
  958.          New_Line;
  959.      
  960.  -- later_declarative_item ::= generic_instantiation
  961.      
  962.   when 91 =>
  963.      
  964.          New_Line;
  965.          Decrease_Indent;
  966.          Pop_Identifier;
  967.          Decrement_Scope("generic instantiation");
  968.      
  969.  -- body ::= proper_body
  970.      
  971.   when 92
  972.      
  973.  -- body ::= body_stub
  974.      
  975.   | 93 =>
  976.      
  977.          New_Line;
  978.      
  979.  -- proper_body ::= subprogram_body
  980.      
  981.   when 94
  982.      
  983.  -- proper_body ::= package_body
  984.      
  985.   | 95
  986.      
  987.  -- proper_body ::= task_body
  988.      
  989.   | 96 =>
  990.      
  991.          Switch_Comment_Context;
  992.      
  993.  -- binary_adding_operator ::= +
  994.      
  995.   when 150
  996.      
  997.  -- binary_adding_operator ::= -
  998.      
  999.   | 151 =>
  1000.      
  1001.          Put_Space;
  1002.      
  1003.  -- sequence_of_statements ::= {pragma_stm} statement {statement}
  1004.      
  1005.   when 168 =>
  1006.      
  1007.          Decrease_Indent;
  1008.      
  1009.  -- simple_statement ::= assignment_statement
  1010.      
  1011.   when 174
  1012.      
  1013.  -- simple_statement ::= exit_statement
  1014.      
  1015.   | 175
  1016.      
  1017.  -- simple_statement ::= return_statement
  1018.      
  1019.   | 176
  1020.      
  1021.  -- simple_statement ::= goto_statement
  1022.      
  1023.   | 177
  1024.      
  1025.  -- simple_statement ::= abort_statement
  1026.      
  1027.   | 179
  1028.      
  1029.  -- simple_statement ::= raise_statement
  1030.      
  1031.   | 180
  1032.      
  1033.  -- simple_statement ::= code_statement
  1034.      
  1035.   | 181
  1036.      
  1037.  -- compound_statement ::= if_statement
  1038.      
  1039.   | 183
  1040.      
  1041.  -- compound_statement ::= case_statement
  1042.      
  1043.   | 184
  1044.      
  1045.  -- compound_statement ::= loop_statement
  1046.      
  1047.   | 185
  1048.      
  1049.  -- compound_statement ::= block_statement
  1050.      
  1051.   | 186
  1052.      
  1053.  -- compound_statement ::= select_statement
  1054.      
  1055.   | 188
  1056.      
  1057.  -- null_statement ::= NULL ;
  1058.      
  1059.   | 190 =>
  1060.      
  1061.          New_Line;
  1062.      
  1063.  -- subprogram_declaration ::= subprogram_specification ;
  1064.      
  1065.   when 214 =>
  1066.      
  1067.          Pop_Identifier;
  1068.      
  1069.  -- designator ::= identifier
  1070.      
  1071.   when 219
  1072.      
  1073.  -- designator ::= string_literal
  1074.      
  1075.   | 220 =>
  1076.      
  1077.          Push_Identifier;
  1078.      
  1079.  -- generic_parameter_mode ::= :
  1080.      
  1081.   when 224 =>
  1082.      
  1083.          Insert_In_Token;
  1084.      
  1085.  -- subprogram_body ::= subprogram_specification__IS
  1086.  --     declarative_part__begin_end_block [end_designator] ;
  1087.      
  1088.   when 227 =>
  1089.      
  1090.          Decrement_Scope("body");
  1091.      
  1092.  -- call_statement ::= name ;
  1093.      
  1094.   when 228 =>
  1095.      
  1096.          New_Line;
  1097.      
  1098.  -- package_declaration ::= package_specification ;
  1099.      
  1100.   when 229 =>
  1101.      
  1102.          Decrement_Scope("specification");
  1103.      
  1104.  -- package_body ::= PACKAGE__BODY__start_identifier__IS declarative_part END
  1105.  --     [identifier] ;
  1106.      
  1107.   when 232
  1108.      
  1109.  -- package_body ::= PACKAGE__BODY__start_identifier__IS
  1110.  --     declarative_part__begin_end_block [identifier] ;
  1111.      
  1112.   | 233 =>
  1113.      
  1114.          Decrement_Scope("body");
  1115.      
  1116.  -- renaming_declaration ::= PACKAGE start_identifier RENAMES expanded_name ;
  1117.      
  1118.   when 241
  1119.      
  1120.  -- renaming_declaration ::= subprogram_specification RENAMES name ;
  1121.      
  1122.   | 242
  1123.      
  1124.  -- task_specification ::= TASK start_identifier ;
  1125.      
  1126.   | 243
  1127.      
  1128.  -- task_specification ::= TASK TYPE start_identifier ;
  1129.      
  1130.   | 244 =>
  1131.      
  1132.          Pop_Identifier;
  1133.      
  1134.  -- task_body ::= TASK__BODY__start_identifier__IS
  1135.  --     declarative_part__begin_end_block [identifier] ;
  1136.      
  1137.   when 247 =>
  1138.      
  1139.          Decrement_Scope("body");
  1140.      
  1141.  -- entry_declaration ::= ENTRY identifier [(discrete_range)][formal_part] ;
  1142.      
  1143.   when 248 =>
  1144.      
  1145.          New_Line;
  1146.      
  1147.  -- accept_statement ::= ACCEPT start_identifier [(expression)][formal_part] ;
  1148.      
  1149.   when 249 =>
  1150.      
  1151.          Pop_Identifier;
  1152.          New_Line;
  1153.      
  1154.  -- accept_statement ::=
  1155.  --     ACCEPT__start_identifier__[(expression)][formal_part]__DO
  1156.  --     sequence_of_statements END [identifier] ;
  1157.      
  1158.   when 250
  1159.      
  1160.  -- delay_statement ::= DELAY simple_expression ;
  1161.      
  1162.   | 251 =>
  1163.      
  1164.          New_Line;
  1165.      
  1166.  -- select_alternative ::= {pragma_stm}
  1167.  --     WHEN__condition__=>__selective_wait_alternative
  1168.      
  1169.   when 256
  1170.      
  1171.  -- select_alternative ::= {pragma_stm} selective_wait_alternative
  1172.      
  1173.   | 257 =>
  1174.      
  1175.          Decrease_Indent;
  1176.      
  1177.  -- TERMINATE__; ::= TERMINATE ;
  1178.      
  1179.   when 264 =>
  1180.      
  1181.          New_Line;
  1182.      
  1183.  -- compilation_unit ::= pragma_header ( general_component_associations ) ;
  1184.      
  1185.   when 270
  1186.      
  1187.  -- compilation_unit ::= pragma_header ;
  1188.      
  1189.   | 271
  1190.      
  1191.  -- compilation_unit ::= context_clause library_or_secondary_unit
  1192.      
  1193.   | 272 =>
  1194.      
  1195.          New_Line;
  1196.      
  1197.  -- library_or_secondary_unit ::= generic_instantiation
  1198.      
  1199.   when 276 =>
  1200.      
  1201.          Decrease_Indent;
  1202.          Pop_Identifier;
  1203.          Decrement_Scope("generic instantiation");
  1204.      
  1205.  -- library_or_secondary_unit ::= subprogram_body
  1206.      
  1207.   when 277
  1208.      
  1209.  -- library_or_secondary_unit ::= package_body
  1210.      
  1211.   | 278 =>
  1212.      
  1213.          Switch_Comment_Context;
  1214.      
  1215.  -- body_stub ::= subprogram_specification IS SEPARATE ;
  1216.      
  1217.   when 282
  1218.      
  1219.  -- body_stub ::= PACKAGE BODY start_identifier IS SEPARATE ;
  1220.      
  1221.   | 283
  1222.      
  1223.  -- body_stub ::= TASK BODY start_identifier IS SEPARATE ;
  1224.      
  1225.   | 284 =>
  1226.      
  1227.          Pop_Identifier;
  1228.      
  1229.  -- generic_specification ::= generic_formal_part subprogram_specification ;
  1230.      
  1231.   when 292 =>
  1232.      
  1233.          Pop_Identifier;
  1234.      
  1235.  -- generic_specification ::= generic_formal_part package_specification ;
  1236.      
  1237.   when 293 =>
  1238.      
  1239.          Decrement_Scope("specification");
  1240.      
  1241.  -- generic_formal_part ::= generic_terminal {generic_parameter_declaration}
  1242.      
  1243.   when 294 =>
  1244.      
  1245.          Decrease_Indent;
  1246.      
  1247.  -- generic_parameter_declaration ::= identifier_list generic_parameter_mode
  1248.  --     type_mark [:=expression] ;
  1249.      
  1250.   when 295
  1251.      
  1252.  -- generic_parameter_declaration ::= TYPE identifier IS generic_type_definition
  1253.      
  1254.  --     ;
  1255.      
  1256.   | 296
  1257.      
  1258.  -- generic_parameter_declaration ::= TYPE identifier left_paren
  1259.  --     discriminant_specification {;discriminant_specification} right_paren IS
  1260.      
  1261.  --     generic_type_definition ;
  1262.      
  1263.   | 297 =>
  1264.      
  1265.          New_Line;
  1266.      
  1267.  -- generic_parameter_declaration ::= WITH subprogram_specification
  1268.  --     [IS__name__or__<>] ;
  1269.      
  1270.   when 298 =>
  1271.      
  1272.          New_Line;
  1273.          Pop_Identifier;
  1274.      
  1275.  -- representation_clause ::= record_representation_clause
  1276.      
  1277.   when 320 =>
  1278.      
  1279.          Decrease_Indent;
  1280.      
  1281.  -- component_clause ::= name AT simple_expression range_constraint ;
  1282.      
  1283.   when 325 =>
  1284.      
  1285.          New_Line;
  1286.      
  1287.  -- alignment_clause ::= AT MOD simple_expression ;
  1288.      
  1289.   when 326 =>
  1290.      
  1291.          New_Line;
  1292.          Increase_Indent;
  1293.      
  1294.  -- [loop_identifier:] ::= empty
  1295.      
  1296.   when 415 =>
  1297.      
  1298.          Push_Empty_Token;
  1299.      
  1300.  -- [loop_identifier:] ::= identifier :
  1301.      
  1302.   when 416 =>
  1303.      
  1304.          Push_Identifier;
  1305.      
  1306.  -- [identifier] ::= empty
  1307.      
  1308.   when 417 =>
  1309.      
  1310.          Pop_Identifier(To_Output);
  1311.      
  1312.  -- [identifier] ::= identifier
  1313.      
  1314.   when 418 =>
  1315.      
  1316.          Pop_Identifier;
  1317.      
  1318.  -- [block_identifier:] ::= empty
  1319.      
  1320.   when 419 =>
  1321.      
  1322.          Push_Empty_Token;
  1323.      
  1324.  -- [block_identifier:] ::= identifier :
  1325.      
  1326.   when 420 =>
  1327.      
  1328.          Push_Identifier;
  1329.      
  1330.  -- {pragma_alt}__exception_handler_list ::= {pragma_alt} exception_handler_list
  1331.      
  1332.      
  1333.   when 421 =>
  1334.      
  1335.          Decrease_Indent;
  1336.      
  1337.  -- [end_designator] ::= empty
  1338.      
  1339.   when 426 =>
  1340.      
  1341.          Pop_Identifier(To_Output);
  1342.      
  1343.  -- [end_designator] ::= identifier
  1344.      
  1345.   when 427
  1346.      
  1347.  -- [end_designator] ::= string_literal
  1348.      
  1349.   | 428 =>
  1350.      
  1351.          Pop_Identifier;
  1352.      
  1353.  -- {with_clause{use_clause}} ::= {with_clause{use_clause}} with_clause
  1354.  --     use_clause_list
  1355.      
  1356.   when 452 =>
  1357.      
  1358.          New_Line;
  1359.      
  1360.  -- record_terminal ::= RECORD
  1361.      
  1362.   when 470 =>
  1363.      
  1364.          New_Line;
  1365.          Increase_Indent;
  1366.          Start_Buffering_Colon_Declarations;
  1367.      
  1368.  -- closing_{pragma_decl} ::= {pragma_decl}
  1369.      
  1370.   when 471
  1371.      
  1372.  -- {component_declaration}' ::= {component_declaration}
  1373.      
  1374.   | 472 =>
  1375.      
  1376.          Print_Colon_Declarations_Buffer;
  1377.      
  1378.  -- start_of_record_type ::= EMPTY
  1379.      
  1380.   when 473 =>
  1381.      
  1382.          New_Line;
  1383.          Increase_Indent;
  1384.      
  1385.  -- CASE__identifier__IS ::= CASE identifier IS
  1386.      
  1387.   when 474 =>
  1388.      
  1389.          New_Line;
  1390.          Increase_Indent;
  1391.      
  1392.  -- WHEN__variant_choice__{|variant_choice}__=> ::= WHEN__choice__{|choice}__=>
  1393.      
  1394.      
  1395.   when 475
  1396.      
  1397.  -- WHEN__variant_OTHERS__=> ::= WHEN__OTHERS__=>
  1398.      
  1399.   | 476 =>
  1400.      
  1401.          Start_Buffering_Colon_Declarations;
  1402.      
  1403.  -- WHEN__choice__{|choice}__=> ::= WHEN choice {|choice} =>
  1404.      
  1405.   when 477
  1406.      
  1407.  -- WHEN__OTHERS__=> ::= WHEN OTHERS =>
  1408.      
  1409.   | 478
  1410.      
  1411.  -- generic_terminal ::= GENERIC
  1412.      
  1413.   | 479
  1414.      
  1415.  -- CASE__expression__IS ::= CASE expression IS
  1416.      
  1417.   | 480 =>
  1418.      
  1419.          New_Line;
  1420.          Increase_Indent;
  1421.      
  1422.  -- {pragma_alt}__case_statement_alternative__{case_statement_alternative} ::=
  1423.  --     {pragma_alt} case_statement_alternative {case_statement_alternative}
  1424.      
  1425.   when 481 =>
  1426.      
  1427.          Decrease_Indent;
  1428.      
  1429.  -- loop_terminal ::= LOOP
  1430.      
  1431.   when 482 =>
  1432.      
  1433.          New_Line;
  1434.          Increase_Indent;
  1435.      
  1436.  -- begin_terminal ::= BEGIN
  1437.      
  1438.   when 483 =>
  1439.      
  1440.          Switch_Comment_Context;
  1441.          New_Line;
  1442.          Increase_Indent;
  1443.      
  1444.  -- {pragma_variant}__variant__{variant} ::= {pragma_variant} variant {variant}
  1445.      
  1446.      
  1447.   when 484 =>
  1448.      
  1449.          Decrease_Indent;
  1450.      
  1451.  -- exception_terminal ::= EXCEPTION
  1452.      
  1453.   when 485 =>
  1454.      
  1455.          New_Line;
  1456.          Increase_Indent;
  1457.      
  1458.  -- declare_terminal ::= DECLARE
  1459.      
  1460.   when 486 =>
  1461.      
  1462.          Switch_Comment_Context;
  1463.          New_Line;
  1464.          Increase_Indent;
  1465.      
  1466.  -- PACKAGE__start_identifier__IS ::= PACKAGE start_identifier IS
  1467.      
  1468.   when 487 =>
  1469.      
  1470.          Increment_Scope;
  1471.          New_Line;
  1472.          Increase_Indent;
  1473.      
  1474.  -- start_identifier ::= identifier
  1475.      
  1476.   when 488 =>
  1477.      
  1478.          Push_Identifier;
  1479.      
  1480.  -- {basic_declarative_item}' ::= {basic_declarative_item}
  1481.      
  1482.   when 489
  1483.      
  1484.  -- {entry_declaration}__{representation_clause} ::= {entry_declaration}
  1485.  --     {representation_clause}
  1486.      
  1487.   | 490 =>
  1488.      
  1489.          Decrease_Indent;
  1490.      
  1491.  -- private_terminal ::= PRIVATE
  1492.      
  1493.   when 491 =>
  1494.      
  1495.          New_Line;
  1496.          Increase_Indent;
  1497.      
  1498.  -- PACKAGE__BODY__start_identifier__IS ::= PACKAGE BODY start_identifier IS
  1499.      
  1500.   when 492 =>
  1501.      
  1502.          Increment_Scope;
  1503.          New_Line;
  1504.          Increase_Indent;
  1505.      
  1506.  -- TASK__start_identifier__IS ::= TASK start_identifier IS
  1507.      
  1508.   when 493
  1509.      
  1510.  -- TASK__TYPE__start_identifier__IS ::= TASK TYPE start_identifier IS
  1511.      
  1512.   | 494 =>
  1513.      
  1514.          New_Line;
  1515.          Increase_Indent;
  1516.      
  1517.  -- TASK__BODY__start_identifier__IS ::= TASK BODY start_identifier IS
  1518.      
  1519.   when 495 =>
  1520.      
  1521.          Increment_Scope;
  1522.          New_Line;
  1523.          Increase_Indent;
  1524.      
  1525.  -- ACCEPT__start_identifier__[(expression)][formal_part]__DO ::= ACCEPT
  1526.  --     start_identifier [(expression)][formal_part] DO
  1527.      
  1528.   when 496
  1529.      
  1530.  -- select_terminal ::= SELECT
  1531.      
  1532.   | 497 =>
  1533.      
  1534.          New_Line;
  1535.          Increase_Indent;
  1536.      
  1537.  -- call_statement__[sequence_of_statements] ::= call_statement
  1538.  --     [sequence_of_statements]
  1539.      
  1540.   when 498 =>
  1541.      
  1542.          Decrease_Indent;
  1543.      
  1544.  -- delay_alternative_in_timed_entry ::= delay_alternative
  1545.      
  1546.   when 500
  1547.      
  1548.  -- WHEN__condition__=>__selective_wait_alternative ::= WHEN__condition__=>
  1549.  --     selective_wait_alternative
  1550.      
  1551.   | 501 =>
  1552.      
  1553.          Decrease_Indent;
  1554.      
  1555.  -- WHEN__condition__=> ::= WHEN condition =>
  1556.      
  1557.   when 502
  1558.      
  1559.  -- WHEN__exception_choice__{|exception_choice}__=> ::= WHEN exception_choice
  1560.  --     {|exception_choice} =>
  1561.      
  1562.   | 503 =>
  1563.      
  1564.          New_Line;
  1565.          Increase_Indent;
  1566.      
  1567.  -- FUNCTION__designator__IS ::= FUNCTION designator IS
  1568.      
  1569.   when 504
  1570.      
  1571.  -- subprogram_specification__IS ::= subprogram_specification IS
  1572.      
  1573.   | 505 =>
  1574.      
  1575.          Increment_Scope;
  1576.          New_Line;
  1577.          Increase_Indent;
  1578.      
  1579.  -- {component_clause}' ::= {component_clause}
  1580.      
  1581.   when 506 =>
  1582.      
  1583.          Decrease_Indent;
  1584.      
  1585.  -- SEPARATE__(__expanded_name__) ::= SEPARATE ( expanded_name )
  1586.      
  1587.   when 507 =>
  1588.      
  1589.          New_Line;
  1590.      
  1591.  -- {basic_colon_declaration} ::= start_{basic_colon_declaration}
  1592.  --     {basic_colon_declaration}' basic_colon_declaration {pragma_decl}
  1593.      
  1594.   when 508 =>
  1595.      
  1596.          Print_Colon_Declarations_Buffer;
  1597.      
  1598.  -- start_{basic_colon_declaration} ::= EMPTY
  1599.      
  1600.   when 509 =>
  1601.      
  1602.          Start_Buffering_Colon_Declarations;
  1603.      
  1604.  -- condition__THEN ::= condition THEN
  1605.      
  1606.   when 514
  1607.      
  1608.  -- ELSIF__condition__THEN ::= ELSIF condition THEN
  1609.      
  1610.   | 515
  1611.      
  1612.  -- else_terminal ::= ELSE
  1613.      
  1614.   | 516
  1615.      
  1616.  -- or_terminal ::= OR
  1617.      
  1618.   | 517 =>
  1619.      
  1620.          New_Line;
  1621.          Increase_Indent;
  1622.      
  1623.  -- discriminant_; ::= ;
  1624.      
  1625.   when 518
  1626.      
  1627.  -- parameter_; ::= ;
  1628.      
  1629.   | 519 =>
  1630.      
  1631.          New_Line;
  1632.      
  1633.  -- left_paren ::= (
  1634.      
  1635.   when 520 =>
  1636.      
  1637.          Change_Indent;
  1638.          Start_Buffering_Colon_Declarations;
  1639.      
  1640.  -- right_paren ::= )
  1641.      
  1642.   when 521 =>
  1643.      
  1644.          Print_Colon_Declarations_Buffer;
  1645.          Resume_Normal_Indentation;
  1646.      
  1647.      when others =>
  1648.          null;
  1649.      end case;
  1650.  end Apply_Actions;
  1651.      
  1652. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1653. --CHANGE.SPC
  1654. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1655.  
  1656. with Pretty_Printer_Declarations; use Pretty_Printer_Declarations; 
  1657. -- to get visibility on =
  1658. with ParserDeclarations;
  1659.  
  1660. package Change_Text is
  1661. --| Subprograms for the manipulation of source text
  1662.  
  1663. --| Overview
  1664.  
  1665. --| This package provides several subprograms which manipulate source text
  1666. --| in various ways.
  1667. --| 
  1668. --| Change_Case alters the case of the text passed in,
  1669. --| Change_Sharp changes the extended delimiter character '#' to the basic
  1670. --|     character ':' in the text of a based literal.
  1671. --| String_Value returns the text of a string with the extended and basic
  1672. --|     string delimiters represented appropriately within the string.
  1673. --| Bold_Print prints a token in bold form.
  1674.  
  1675.     package PPD renames Pretty_Printer_Declarations;
  1676.     package PD  renames ParserDeclarations;
  1677.  
  1678.     -----------------------------------------------------------------------
  1679.  
  1680.     function Change_Case(Token_Text : in PD.Source_Text;  --| text to change
  1681.                          To_Case    : in PPD.Case_Name    --| case in which to 
  1682.                                                           --| print Token_Text
  1683.                          ) return String;
  1684.     --| Changes the case of Token_Text
  1685.  
  1686.     --| Effects
  1687.  
  1688.     --| The Token_Text is changed according to the To_Case passed in.  When
  1689.     --| To_Case is PPD.Bold, the return value is the same as if lowercase
  1690.     --| had been requested.  The actual bold printing is handled in procedure
  1691.     --| Bold_Print rather than here for two reasons:
  1692.     --|
  1693.     --|      1.  Tokens which would ordinarily be bold printed should be only
  1694.     --|          lowercased when bold printing is selected with
  1695.     --|          Paginated_Format off.  This is to prevent control characters
  1696.     --|          from being inserted into a file which is supposed to be
  1697.     --|          valid Ada.
  1698.     --|
  1699.     --|      2.  In determining the length of a token for placement in the
  1700.     --|          output, control characters which have no printable form,
  1701.     --|          and therefore do not take up any columns on the page, should
  1702.     --|          not be counted.
  1703.     --|
  1704.  
  1705.     -----------------------------------------------------------------------
  1706.  
  1707.     function Change_Sharp(Token_Text : in PD.Source_Text) return String;
  1708.     --| Changes the extended character '#' to the basic character ':'
  1709.  
  1710.     --| Effects
  1711.  
  1712.     --| This function changes all of the '#' characters in the passed-in
  1713.     --| Token_Text to ':' characters.  Its primary use should be for changing
  1714.     --| these characters in the text of a based literal.
  1715.  
  1716.  
  1717.     -----------------------------------------------------------------------
  1718.  
  1719.     function String_Value(Token_Text : in PD.Source_Text) return String;
  1720.     --| Returns the correct text for a string, based on its delimiters
  1721.  
  1722.     --| Effects
  1723.  
  1724.     --| This function returns a string with the correct delimiters (basic
  1725.     --| or extended) and embedded delimiter characters represented correctly.
  1726.     --| For example, the input string "Here is a % character" when output
  1727.     --| with Basic Delimiters must be converted to %Here is a %% character"
  1728.     --| with the embedded delimiter character doubled.  This ensures that
  1729.     --| valid Ada strings are reproduced.
  1730.  
  1731.     -----------------------------------------------------------------------
  1732.  
  1733.     procedure Bold_Print(Text : in String);
  1734.     --| Bold prints the Text passed in.
  1735.  
  1736.     --| Effects
  1737.  
  1738.     --| This procedure currently bold prints by inserting backspace characters
  1739.     --| in the output to overstrike the Text passed in twice.  The body of this
  1740.     --| procedure may be changed in order to support other methods of
  1741.     --| bold printing.
  1742.  
  1743.     -----------------------------------------------------------------------
  1744.  
  1745. end Change_Text;
  1746.  
  1747. ---------------------------------------------------------------------------
  1748. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1749. --CHANGE.BDY
  1750. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1751.  
  1752. with Paginated_Output;
  1753.  
  1754. package body Change_Text is
  1755. --| Subprograms for the manipulation of source text
  1756.  
  1757. --| Overview
  1758.  
  1759. --| Change_Text, Change_Sharp and String_Value are all functions which which
  1760. --| take a parameter of type PD.Source_Text which is an access to a string
  1761. --| type and return a string.  Each dereferences its parameter, performs the
  1762. --| appropriate manipulations and returns the manipulated string.  Bold_Print
  1763. --| is a procedure bold prints the string passed in.
  1764.  
  1765.     package PO renames Paginated_Output;
  1766.  
  1767.     -----------------------------------------------------------------------
  1768.     -- Local Subprogram Specifications
  1769.     -----------------------------------------------------------------------
  1770.  
  1771.     function Uppercase (Char : in Character) return Character;
  1772.     --| Returns the uppercase value of the passed in character
  1773.  
  1774.     --| Effects
  1775.  
  1776.     --| If Char is alphabetic, its uppercase value is returned.  Otherwise,
  1777.     --| Char is returned unchanged.
  1778.  
  1779.     -----------------------------------------------------------------------
  1780.  
  1781.     function Lowercase (Char : in Character) return Character;
  1782.     --| Returns the lowercase value of the passed in character
  1783.  
  1784.     --| Effects
  1785.  
  1786.     --| If Char is alphabetic, its lowercase value is returned.  Otherwise,
  1787.     --| Char is returned unchanged.
  1788.  
  1789.     -----------------------------------------------------------------------
  1790.     -- External Subprogram Bodies
  1791.     -----------------------------------------------------------------------
  1792.  
  1793.     function Change_Case (Token_Text : in PD.Source_Text;
  1794.                           To_Case    : in PPD.Case_Name) return String is
  1795.  
  1796.         Preceding_Underscore : Boolean := True;
  1797.         --| Flags that the preceding character is an underscore, indicating
  1798.         --| that the following character should be capitalized.  Initialized
  1799.         --| to True so that the first character of the Token will be 
  1800.         --| capitalized.
  1801.  
  1802.     begin
  1803.  
  1804.         -- case selectors match enumeration type PPD.Case_Name
  1805.         case To_Case is
  1806.             when PPD.Uppercase =>
  1807.                 for I in Token_Text.all'Range loop
  1808.                     Token_Text.all(I) := Uppercase(Token_Text.all(I));
  1809.                 end loop;
  1810.                 return Token_Text.all;
  1811.  
  1812.             -- For Bold, lowercase and the bold printing will be handled
  1813.             -- in Print_Token routine.
  1814.             when PPD.Lowercase | PPD.Bold => 
  1815.                 for I in Token_Text.all'Range loop
  1816.                     Token_Text.all(I) := Lowercase(Token_Text.all(I));
  1817.                 end loop;
  1818.                 return Token_Text.all;
  1819.             when PPD.Capitalize1 =>
  1820.                 for I in Token_Text.all'Range loop
  1821.                     if Preceding_Underscore then
  1822.                         Token_Text.all(I) := Uppercase(Token_Text.all(I));
  1823.                     end if;
  1824.                     if Token_Text.all(I) = '_' then
  1825.                         Preceding_Underscore := True;
  1826.                     else
  1827.                         Preceding_Underscore := False;
  1828.                     end if;
  1829.                 end loop;
  1830.                 return Token_Text.all;
  1831.             when PPD.Capitalize2 =>
  1832.                 for I in Token_Text.all'Range loop
  1833.                     if Preceding_Underscore then
  1834.                         Token_Text.all(I) := Uppercase(Token_Text.all(I));
  1835.                     else
  1836.                         Token_Text.all(I) := Lowercase(Token_Text.all(I));
  1837.                     end if;
  1838.                     if Token_Text.all(I) = '_' then
  1839.                         Preceding_Underscore := True;
  1840.                     else 
  1841.                         Preceding_Underscore := False;
  1842.                     end if;
  1843.                 end loop;
  1844.                 return Token_Text.all;
  1845.             when PPD.As_Is =>
  1846.                 return Token_Text.all;
  1847.         end case;
  1848.     end Change_Case;
  1849.  
  1850.     -----------------------------------------------------------------------
  1851.  
  1852.     function Change_Sharp (Token_Text : in PD.Source_Text) return String is
  1853.     begin
  1854.         for I in Token_Text.all'Range loop
  1855.             if Token_Text.all(I) = '#' then 
  1856.                 Token_Text.all(I) := ':';
  1857.             end if;
  1858.         end loop;
  1859.         return Token_Text.all;
  1860.     end Change_Sharp;
  1861.  
  1862.     -----------------------------------------------------------------------
  1863.  
  1864.     function String_Value (Token_Text : in PD.Source_Text) return String is
  1865.         Start_Slice      : Positive; --| Marks a point in the input string as 
  1866.                                      --| the start of the next slice to be
  1867.                                      --| copied.
  1868.         String_Text      : PD.Source_Text; --| String being built
  1869.         Delimiter_Char   : Character := '"'; --| String delimiter character
  1870.         Delimiter_String : String(1 .. 1) := """";
  1871.         --| String to insert into the string being built as delimiter character
  1872.  
  1873.     begin
  1874.         if PPD.Delimiters = PPD.Basic then
  1875.             Delimiter_Char := '%';
  1876.             Delimiter_String := "%";
  1877.         else
  1878.             Delimiter_Char := '"';
  1879.             Delimiter_String := """"; 
  1880.         end if;
  1881.         String_Text := new String'(Delimiter_String);
  1882.         Start_Slice := Token_Text'First;
  1883.         for I in Token_Text'Range loop
  1884.             if Token_Text.all(i) = Delimiter_Char then
  1885.                 String_Text := new String'(
  1886.                     String_Text.all & Token_Text.all(Start_Slice .. I) & 
  1887.                     Delimiter_String);
  1888.                 Start_Slice := I + 1;
  1889.             end if;
  1890.         end loop;
  1891.         return String_Text.all & Token_Text.all(Start_Slice .. 
  1892.             Token_Text.all'Last) & Delimiter_String;
  1893.     end String_Value;         
  1894.  
  1895.     -----------------------------------------------------------------------
  1896.  
  1897.     procedure Bold_Print(Text : in String) is
  1898.         Overstrikes : Constant := 3; --| Number of times to overstrike token.
  1899.     begin
  1900.         PO.Put(PPD.Output_File, Text);
  1901.         if PPD.Paginated_Format = PPD.On then
  1902.             for I in 1 .. Overstrikes loop
  1903.                 for J in Text'First .. Text'Last loop
  1904.                     PO.Put(PPD.Output_File, ASCII.BS);
  1905.                 end loop;
  1906.                 PO.Put(PPD.Output_File, Text);
  1907.             end loop;
  1908.         end if;
  1909.     end Bold_Print;
  1910.  
  1911.     -----------------------------------------------------------------------
  1912.     -- Local Subprogram Bodies
  1913.     -----------------------------------------------------------------------
  1914.  
  1915.     function Uppercase (Char : in Character) return Character is
  1916.     begin
  1917.         if Char in 'a' .. 'z' then
  1918.             return Character'Val(Character'Pos(Char) - Character'Pos('a') +
  1919.                 Character'Pos('A'));
  1920.         else
  1921.             return Char;
  1922.         end if;
  1923.     end Uppercase; 
  1924.  
  1925.     -----------------------------------------------------------------------
  1926.  
  1927.     function Lowercase (Char : in Character) return Character is
  1928.     begin
  1929.         if Char in 'A' .. 'Z' then
  1930.             return Character'Val(Character'Pos(Char) - Character'Pos('A') +
  1931.                 Character'Pos('a'));
  1932.         else
  1933.             return Char;
  1934.         end if;
  1935.     end Lowercase;
  1936.  
  1937.     -----------------------------------------------------------------------
  1938.  
  1939. end Change_Text;
  1940.  
  1941. ---------------------------------------------------------------------------
  1942. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1943. --PRETTY.SPC
  1944. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1945.  
  1946. with Pretty_Printer_Declarations;   -- Parameters of pretty printer
  1947.  
  1948. procedure Pretty_Print(
  1949. --| Formats source code according to Ada Language Reference Manual (LRM)
  1950. --| conventions as the default or to the specified conventions.  
  1951.  
  1952.     Source_File: in String;
  1953.     --| The name of the source file
  1954.  
  1955.     Output_File: in String := "";
  1956.     --| The name of the output file.  If "", standard output is used.
  1957.  
  1958.     Comment_Formatting : in Pretty_Printer_Declarations.Switch :=
  1959.         Pretty_Printer_Declarations.Comment_Formatting;
  1960.     --| Indicates whether or not to do comment formatting
  1961.  
  1962.     Paginated_Format : in Pretty_Printer_Declarations.Switch := 
  1963.         Pretty_Printer_Declarations.Paginated_Format;
  1964.     --| Indicates whether or not to have paginated output.
  1965.     --| Off implies that the pretty printer output is valid as Ada source which
  1966.     --| may be compiled.
  1967.  
  1968.     Depth : in Pretty_Printer_Declarations.Depth_Range := 
  1969.         Pretty_Printer_Declarations.Depth);
  1970.     --| Indicates the depth of pretty printing.  If 0, everything is pretty
  1971.     --| printed; If 1, only the outermost scope is pretty printed; If 2, only
  1972.     --| the outermost 2 scopes are printed, etc.
  1973.  
  1974.     --| Effects
  1975.  
  1976.     --| The pretty printer reformats source text to conform with the
  1977.     --| conventions used in the Ada Language Reference Manual by default
  1978.     --| or parameterized as on the command line and in the package
  1979.     --| Pretty_Printer_Declarations.  The defaults are as follows:
  1980.     --|
  1981.     --| - Colons are lined up vertically, if specified as such in 
  1982.     --|   package Pretty_Printer_Declarations.
  1983.     --| - Indentation of all constructs is done as in the LRM
  1984.     --| - Identifiers and keywords are printed as in the LRM, or as specified
  1985.     --|   in the package Pretty_Printer_Declarations.
  1986.     --| - Parameter modes (in, out, or in out) are shown explicitly if
  1987.     --|   specified as such in Pretty_Printer_Declarations.
  1988.     --| - Closing identifiers (eg. end SQRT;) are printed, if specified in the
  1989.     --|   package Pretty_Printer_Declarations.
  1990.     --| - Comment formatting is done if requested:
  1991.     --|   - Blank lines between a declaration and the descriptive
  1992.     --|     comment following it are removed.
  1993.     --|   - Blank lines between comments and the statements
  1994.     --|     directly following them are removed.
  1995.     --|   - Comments are indented to the same level as the source text.
  1996.     --| - Output is either paginated or not, as specified.  If the output is
  1997.     --|   not paginated, it is valid as Ada source which may be compiled.
  1998.     --| - Delimiters are printed using either the Basic (%, :, !) or
  1999.     --|   extended (", #, |) character sets, as specified in package
  2000.     --|   Pretty_Printer_Declarations.
  2001.  
  2002. ---------------------------------------------------------------------
  2003. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2004. --DRIVER.ADA
  2005. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2006.  
  2007. with Pretty_Print;
  2008. with Pretty_Printer_Declarations;
  2009. with Command_Line_Interface;
  2010. with ParserDeclarations;
  2011. with VMS_Lib;
  2012. with TEXT_IO;
  2013.  
  2014. procedure Pretty_Print_Driver is
  2015. --| Decodes command line and calls Pretty_Print
  2016.  
  2017.     package PD  renames ParserDeclarations;
  2018.     package PPD renames Pretty_Printer_Declarations;
  2019.     package CLI renames Command_Line_Interface;
  2020.  
  2021.     Incorrect_Call          : exception;
  2022.     --| Raised when too many or too few parameters given
  2023.  
  2024.     Bad_Comment_Switch      : exception;
  2025.     --| Raised when value other than on or off given for comment switch
  2026.  
  2027.     Bad_Paginate_Switch     : exception;
  2028.     --| Raised when value other than on or off given for paginate switch
  2029.  
  2030.     Bad_Depth_Value         : exception;
  2031.     --| Raised when value outside of PPD.Depth_Range is given for depth
  2032.  
  2033.     Required_Source_Missing : exception;
  2034.     --| Raised when Source parameter is omitted
  2035.  
  2036.     Input_File  : PD.Source_Text := new String'(""); 
  2037.     Output_File : PD.Source_Text := new String'(""); 
  2038.     -- Default is standard output.
  2039.  
  2040.     Positional  : Natural := 0; --| Number of positional parameters
  2041.     Total       : Natural := 0; --| Total number of parameters.
  2042.  
  2043.     Max_Parameters    : constant := 5;
  2044.  
  2045.     procedure Put_Help_Message is
  2046.     begin
  2047.         TEXT_IO.NEW_LINE;
  2048.         TEXT_IO.PUT_LINE("-- PRETTY_PRINT: Formats Ada source files");
  2049.         TEXT_IO.PUT_LINE("type SWITCH is (ON, OFF);");
  2050.         TEXT_IO.PUT_LINE("type DEPTH_RANGE is NATURAL RANGE " &
  2051.                          PPD.Depth_Range'Image(PPD.Depth_Range'First) &
  2052.                          " .." &
  2053.                          PPD.Depth_Range'Image(PPD.Depth_Range'Last) &
  2054.                          ";");
  2055.         TEXT_IO.NEW_LINE;
  2056.         TEXT_IO.PUT_LINE("procedure PRETTY_PRINT (SOURCE      : STRING;");
  2057.         TEXT_IO.PUT_LINE("                        OUTPUT      : STRING := """";" );
  2058.         TEXT_IO.PUT_LINE("                        COMMENTS    : SWITCH := " &
  2059.                          PPD.Switch'Image(PPD.Comment_Formatting) & ";");
  2060.         TEXT_IO.PUT_LINE("                        PAGINATE    : SWITCH := " &
  2061.                          PPD.Switch'Image(PPD.Paginated_Format) & ";");
  2062.         TEXT_IO.PUT_LINE("                        DEPTH       : DEPTH_RANGE " &
  2063.                          ":= " & PPD.Depth_Range'Image(PPD.Depth) & ");");
  2064.         TEXT_IO.NEW_LINE;
  2065.         TEXT_IO.PUT_LINE("-- SOURCE specifies the file to be pretty printed ");
  2066.         TEXT_IO.PUT_LINE("-- OUTPUT specifies the result file (default" &
  2067.                          " is standard output)");
  2068.         TEXT_IO.PUT_LINE("-- COMMENTS indicates whether or not to do " &
  2069.                          "comment formatting");
  2070.         TEXT_IO.PUT_LINE("-- PAGINATE indicates whether or not to " &
  2071.                          "paginate the output");
  2072.         TEXT_IO.PUT_LINE("-- DEPTH indicates the depth of the scope of " &
  2073.                          "pretty printing");
  2074.         TEXT_IO.NEW_LINE;
  2075.     end Put_Help_Message;    
  2076.     
  2077. begin
  2078.  
  2079.     --------------------------------------------------------------------
  2080.     -- Change driver here to install values which "parameterize" the 
  2081.     -- pretty printer, before default values are obtained from package
  2082.     -- Pretty_Printer_Declarations.  See installation guide for details.
  2083.     --------------------------------------------------------------------
  2084.  
  2085.     -- Error messages go to standard error
  2086.     VMS_Lib.Set_Error;
  2087.     CLI.Initialize;
  2088.     Positional := CLI.Positional_Arg_Count;
  2089.     Total := CLI.Named_Arg_Count + Positional;
  2090.     if (Total = 0) then
  2091.         raise Incorrect_Call;
  2092.     elsif (Total > Max_Parameters) then
  2093.         TEXT_IO.PUT_LINE("Too many parameters.");
  2094.         TEXT_IO.NEW_LINE;
  2095.         raise Incorrect_Call;
  2096.     end if;
  2097.     
  2098.     -- get all named values or defaults
  2099.     Input_File := new String'(CLI.Named_Arg_Value("SOURCE", ""));
  2100.     Output_File := new String'(CLI.Named_Arg_Value("OUTPUT", ""));
  2101.     begin
  2102.         PPD.Comment_Formatting := PPD.Switch'Value(CLI.Named_Arg_Value(
  2103.             "COMMENTS", PPD.Switch'Image(PPD.Comment_Formatting)));
  2104.     exception
  2105.         when Constraint_Error =>
  2106.             raise Bad_Comment_Switch;
  2107.     end;
  2108.     begin
  2109.         PPD.Paginated_Format := PPD.Switch'Value(CLI.Named_Arg_Value(
  2110.             "PAGINATE", PPD.Switch'Image(PPD.Paginated_Format)));
  2111.     exception
  2112.         when Constraint_Error =>
  2113.             raise Bad_Paginate_Switch;
  2114.     end;
  2115.     begin
  2116.         PPD.Depth := PPD.Depth_Range'Value(CLI.Named_Arg_Value("DEPTH", 
  2117.             PPD.Depth_Range'Image(PPD.Depth)));
  2118.     exception
  2119.         when Constraint_Error =>
  2120.             raise Bad_Depth_Value;
  2121.     end;
  2122.  
  2123.     -- get any positional associations
  2124.     if Positional >= 1 then
  2125.         Input_File := new String'(CLI.Positional_Arg_Value(1));
  2126.         if Positional >= 2 then
  2127.             Output_File := new String'(CLI.Positional_Arg_Value(2));
  2128.             if Positional >= 3 then
  2129.                 begin
  2130.                     PPD.Comment_Formatting := PPD.Switch'Value(
  2131.                         CLI.Positional_Arg_Value(3));
  2132.                 exception
  2133.                     when Constraint_Error =>
  2134.                         raise Bad_Comment_Switch;
  2135.                 end;
  2136.                 if Positional >= 4 then
  2137.                     begin
  2138.                         PPD.Paginated_Format := PPD.Switch'Value(
  2139.                             CLI.Positional_Arg_Value(4));
  2140.                     exception 
  2141.                         when Constraint_Error =>
  2142.                             raise Bad_Paginate_Switch;
  2143.                     end;
  2144.                     if Positional = Max_Parameters then
  2145.                         begin
  2146.                             PPD.Depth := PPD.Depth_Range'Value(
  2147.                                 CLI.Positional_Arg_Value(Max_Parameters));
  2148.                         exception
  2149.                             when Constraint_Error =>
  2150.                                 raise Bad_Depth_Value;
  2151.                         end;
  2152.                     end if;
  2153.                 end if;
  2154.             end if;
  2155.         end if;
  2156.     end if;
  2157.     CLI.Finalize;
  2158.     if Input_File.all = "" then
  2159.         raise Required_Source_Missing;
  2160.     end if;
  2161.  
  2162.     -- Echo command line
  2163.     TEXT_IO.PUT_LINE("PRETTY_PRINT(SOURCE => """ & Input_File.all & """,");
  2164.     TEXT_IO.PUT_LINE("             OUTPUT => """ & Output_File.all & """,");
  2165.     TEXT_IO.PUT_LINE("             COMMENTS => " & 
  2166.         PPD.Switch'Image(PPD.Comment_Formatting) & ",");
  2167.     TEXT_IO.PUT_LINE("             PAGINATE => " & 
  2168.         PPD.Switch'Image(PPD.Paginated_Format) & ",");
  2169.     TEXT_IO.PUT_LINE("             DEPTH =>" & 
  2170.         PPD.DEPTH_RANGE'IMAGE(PPD.DEPTH) & ");");
  2171.     TEXT_IO.NEW_LINE;
  2172.  
  2173.     Pretty_Print(Source_File => Input_File.all,
  2174.                  Output_File => Output_File.all,
  2175.                  Comment_Formatting => PPD.Comment_Formatting,
  2176.                  Paginated_Format => PPD.Paginated_Format,
  2177.                  Depth => PPD.Depth);
  2178. exception
  2179.     when Incorrect_Call =>
  2180.         Put_Help_Message;
  2181.     when Bad_Comment_Switch =>
  2182.         TEXT_IO.PUT_LINE("If optional parameter COMMENTS is specified, it " &
  2183.                          "must have the value ON or OFF.");
  2184.     when Bad_Paginate_Switch =>
  2185.         TEXT_IO.PUT_LINE("If optional parameter PAGINATE is specified, it " &
  2186.                          "must have the value ON or OFF.");
  2187.     when Bad_Depth_Value =>
  2188.         TEXT_IO.PUT_LINE("If optional parameter DEPTH is specified, it must " &
  2189.                          "be in the range " & 
  2190.                          PPD.Depth_Range'Image(PPD.Depth_Range'First) &
  2191.                          " .." &
  2192.                          PPD.Depth_Range'Image(PPD.Depth_Range'Last));
  2193.     when Required_Source_Missing =>
  2194.         TEXT_IO.PUT_LINE("Required parameter SOURCE is missing.");
  2195.     when CLI.Invalid_Parameter_Order =>
  2196.         TEXT_IO.PUT_LINE("Error : No positional parameters may occur after" &
  2197.                          " a named parameter.");
  2198.         Put_Help_Message;
  2199.     when CLI.Missing_Positional_Arg =>
  2200.         TEXT_IO.PUT_LINE("Error : Positional parameter is missing.");
  2201.         Put_Help_Message;
  2202.     when CLI.Unreferenced_Named_Arg =>
  2203.         TEXT_IO.PUT_LINE("Error : Parameter name given does not exist.");
  2204.     Put_Help_Message;
  2205.     when CLI.Invalid_Named_Association =>
  2206.         TEXT_IO.PUT_LINE("Error : Named association has a missing value.");
  2207.         Put_Help_Message;
  2208.     when others =>
  2209.         TEXT_IO.PUT_LINE(ITEM => "Pretty_Print internal error."); 
  2210. end Pretty_Print_Driver;
  2211.  
  2212. ---------------------------------------------------------------------
  2213. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2214. --GETNEXT.SUB
  2215. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2216.  
  2217. with Pretty_Printer_Utilities;
  2218. separate (Lex)
  2219. function GetNextNonCommentToken return PD.ParseStackElement is
  2220. --| Buffers all comments preceding the next token and returns next token to
  2221. --| lexer
  2222.  
  2223.     package PPU renames Pretty_Printer_Utilities;
  2224.  
  2225. begin
  2226.     PPU.Comment_Buffer := PPU.Comment_Lists.Create;
  2227.     loop
  2228.         CST := GetNextSourceToken;
  2229.         exit when (CST.gram_sym_val = PT.EOF_TokenValue) or
  2230.             (CST.gram_sym_val /= PT.Comment_TokenValue);
  2231.         PPU.Comment_Lists.Attach(PPU.Comment_Buffer, CST);
  2232.     end loop;
  2233.     return CST;    -- return the token that is not a comment
  2234. end GetNextNonCommentToken;
  2235. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2236. --GRMCONST.BDY
  2237. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2238.      
  2239. Package body Grammar_Constants is
  2240.      
  2241.     function setGrammarSymbolCount return ParserInteger is
  2242.     begin
  2243.         return    363  ;
  2244.     end setGrammarSymbolCount;
  2245.      
  2246.     function setActionCount return ParserInteger is
  2247.     begin
  2248.         return   1520  ;
  2249.     end setActionCount;
  2250.      
  2251.     function setStateCountPlusOne return ParserInteger is
  2252.     begin
  2253.         return    997  ;
  2254.     end setStateCountPlusOne;
  2255.      
  2256.     function setLeftHandSideCount return ParserInteger is
  2257.     begin
  2258.     return    521  ;
  2259.     end setLeftHandSideCount;
  2260.      
  2261.     function setRightHandSideCount return ParserInteger is
  2262.     begin
  2263.         return    521  ;
  2264.     end setRightHandSideCount;
  2265.      
  2266. end Grammar_Constants;
  2267.      
  2268. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2269. --PPRUTILS.BDY
  2270. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2271.  
  2272. with Pretty_Printer_Declarations; use Pretty_Printer_Declarations; -- to get
  2273.     -- visibility on =
  2274. with Change_Text;
  2275. with Paginated_Output;
  2276. with ParseTables;
  2277. with Grammar_Constants; use Grammar_Constants;  -- to get visibility on =
  2278. with Unchecked_Deallocation;
  2279.  
  2280. package body Pretty_Printer_Utilities is
  2281. --| Utilities for pretty printer
  2282.  
  2283.     package PPD renames Pretty_Printer_Declarations;
  2284.     package CT  renames Change_Text;
  2285.     package PO  renames Paginated_Output;
  2286.     package PT  renames ParseTables;
  2287.  
  2288.     package Token_Stack_Pkg is new Stack_Pkg(PD.ParseStackElement);
  2289.  
  2290.     -----------------------------------------------------------------
  2291.     -- Local declarations for Utilities
  2292.     -----------------------------------------------------------------
  2293.  
  2294.     Identifier_Stack : Token_Stack_Pkg.Stack;
  2295.     --| Stack of identifiers/designators
  2296.  
  2297.     Current_Scope       : PPD.Depth_Range := 1;
  2298.     --| Current scope of units in input
  2299.  
  2300.     Beginning_Of_Line   : Boolean := True;
  2301.     --| Tells whether the current column is at the beginning of a line
  2302.  
  2303.     Current_Column      : PPD.Column_Range := PPD.Column_Range'First;
  2304.     --| Current column in output file
  2305.  
  2306.     Current_Indent      : PPD.Indentation_Range := 0;
  2307.     --| Current indentation in output file
  2308.  
  2309.     Temporary_Indent    : PPD.Indentation_Range := 0;
  2310.     --| Temporary indentation in output file, when statement or declaration
  2311.     --| with no embedded requests for newlines is too big to fit on one line.
  2312.  
  2313.     Previous_Indent     : PPD.Indentation_Range := 0;
  2314.     --| Saved indent for returning to after parameters or discriminants are
  2315.     --| lined up.
  2316.  
  2317.     Current_Change_Column : PPD.Indentation_Range := 0;
  2318.     --| Column to change indent to
  2319.  
  2320.     Unperformed_Indents : Natural := 0;
  2321.     --| The number of indents "requested" after the RH_Margin has been exceeded
  2322.     --| for situations where nesting is so deep that it is not
  2323.     --| worthwhile to further indent.
  2324.  
  2325.     Empty_Token         : PD.ParseStackElement := 
  2326.         (gram_sym_val => PT.Empty_TokenValue,
  2327.          lexed_token => (text => new string'(""),
  2328.                          srcpos_line => 0,
  2329.                          srcpos_column => 0));
  2330.  
  2331.     Previous_Token      : PD.ParseStackElement := Empty_Token;
  2332.     --| Previous Token from the input stream
  2333.  
  2334.     Saved_Token         : PD.ParseStackElement := Empty_Token;
  2335.     --| Previous identifier or string literal, saved so that it may be stacked
  2336.     --| and closing identifiers printed. 
  2337.  
  2338.     type Context is (Declarative_Part, Body_Part);
  2339.     Comment_Context     : Context := Declarative_Part;
  2340.     --| Current Context for formatting comments
  2341.  
  2342.     type Request_Descriptor is
  2343.         record
  2344.             New_Lines  : Natural := 0;
  2345.             --| Number of times New_Line was called before printing new lines.
  2346.             Increases  : Natural := 0;
  2347.             --| Number of times Increase_Indent was called before processing
  2348.             --| any of these requests.
  2349.             Decreases  : Natural := 0;
  2350.             --| Number of times Decrease_Indent was called before processing
  2351.             --| any of these requests.
  2352.             Changes    : Natural := 0;
  2353.             --| Number of times Change_Indent was called before processing
  2354.             --| any of these requests.
  2355.             Resumes    : Natural := 0;
  2356.             --| Number of times Resume_Normal_Indentation was called before 
  2357.             --| processing any of these requests
  2358.         end record;
  2359.  
  2360.     Requests : Request_Descriptor;
  2361.  
  2362.     type Scope_Request_Descriptor is
  2363.         record
  2364.             Increments : Natural := 0;
  2365.             --| Number of times Increment_Scope was called before processing
  2366.             --| any of these requests.
  2367.             Decrements : Natural := 0;
  2368.             --| Number of times Decrement_Scope was called before processing
  2369.             --| any of these requests.
  2370.         end record;
  2371.  
  2372.     type Token_Descriptor is
  2373.         record
  2374.             Token                 : PD.ParseStackElement;
  2375.             Comments              : Comment_Lists.List;
  2376.             Requests              : Request_Descriptor;
  2377.             Scope_Requests        : Scope_Request_Descriptor;
  2378.             Current_Change_Column : PPD.Indentation_Range := 0;
  2379.             -- for lining up parameter/discriminant lists
  2380.             Place_Holder          : PD.Source_Text := PD.Null_Source_Text;
  2381.             -- for depth processing
  2382.             Left_Side_Length      : Natural := 0; -- for lining up colons
  2383.         end record;
  2384.  
  2385.     Token_To_Buffer : Token_Descriptor;
  2386.  
  2387.     package Token_Lists is new Lists(Token_Descriptor);
  2388.  
  2389.     Token_Buffer        : Token_Lists.List;
  2390.  
  2391.     Buffering_Colon_Declarations : Boolean := False;
  2392.     --| Whether or not to save declarations in order to line up the colons.
  2393.  
  2394.     -----------------------------------------------------------------
  2395.     -- Local subprogram specifications
  2396.     -----------------------------------------------------------------
  2397.  
  2398.     procedure Initialize_Descriptor(Descriptor : in out Token_Descriptor);
  2399.     --| Initializes an object of type Token_Descriptor
  2400.  
  2401.     -----------------------------------------------------------------
  2402.  
  2403.     procedure Free is new
  2404.         Unchecked_Deallocation (String, PD.Source_Text);
  2405.  
  2406.     -----------------------------------------------------------------
  2407.  
  2408.     procedure Print_Token(Next_Token : in out PD.ParseStackElement);
  2409.     --| Prints Next_Token and updates column information
  2410.  
  2411.     -----------------------------------------------------------------
  2412.  
  2413.     function Token_Text(Token: in PD.ParseStackElement) return String;
  2414.     --| Returns the canonical "text" of a token (in extended character set)
  2415.  
  2416.     -----------------------------------------------------------------
  2417.  
  2418.     function Spaced_Token(Current, Previous : in PD.ParseStackElement) return 
  2419.         String;
  2420.     --| Returns the text of a token with appropriate spaces around it, in
  2421.     --| accordance with PPD.Spacing_Table and any extra spaces that are
  2422.     --| necessary.
  2423.  
  2424.     -----------------------------------------------------------------
  2425.  
  2426.     procedure Print_New_Line;
  2427.     --| Puts a newline in the output and updates column information.
  2428.  
  2429.     -----------------------------------------------------------------
  2430.  
  2431.     procedure Process_Increase_Requests;
  2432.     --| Increases the indentation unless PPD.RH_Margin is exceeded, 
  2433.     --| in which case Unperformed_Indents is incremented.
  2434.  
  2435.     -----------------------------------------------------------------
  2436.  
  2437.     procedure Process_Decrease_Requests;
  2438.     --| Decreases the indentation unless there were unperformed indents,
  2439.     --| in which case Unperformed_Indents is decremented.
  2440.  
  2441.     -----------------------------------------------------------------
  2442.  
  2443.     procedure Process_Change_Requests;
  2444.     --| Changes the indentation to the current column
  2445.  
  2446.     -----------------------------------------------------------------
  2447.  
  2448.     procedure Process_Resume_Requests;
  2449.     --| Resumes the indentation level before the call to 
  2450.     --| Process_Change_Requests.
  2451.  
  2452.     -----------------------------------------------------------------
  2453.     -- External Subprogram Bodies
  2454.     -----------------------------------------------------------------
  2455.  
  2456.     procedure Initialize is
  2457.     begin
  2458.         Identifier_Stack := Token_Stack_Pkg.Create;
  2459.         Current_Scope := 1;
  2460.         Beginning_Of_Line := True;
  2461.         Current_Column := 1;
  2462.         Current_Indent := 0;
  2463.         Temporary_Indent := 0;
  2464.         Unperformed_Indents := 0;
  2465.         Empty_Token := (gram_sym_val => PT.Empty_TokenValue,
  2466.                         lexed_token => (text => new string'(""),
  2467.                         srcpos_line => 0, srcpos_column => 0));
  2468.         Previous_Token := Empty_Token;
  2469.         Saved_Token := Empty_Token;
  2470.         Requests := (0, 0, 0, 0, 0);
  2471.  
  2472.         Buffering_Colon_Declarations := False;
  2473.     end Initialize;
  2474.  
  2475.     -----------------------------------------------------------------
  2476.  
  2477.     procedure Put(Next_Token : in out PD.ParseStackElement) is
  2478.     begin
  2479.  
  2480.         -- if the Token_To_Buffer belonged in the colon Token_Buffer, attach
  2481.         -- it there.  (Values have been assigned to Token_To_Buffer but it
  2482.         -- has not been attached to the buffer)
  2483.         if Buffering_Colon_Declarations and (Token_To_Buffer.Token.gram_sym_val
  2484.             /= PT.Comment_TokenValue) then
  2485.             Token_Lists.Attach(Token_Buffer, Token_To_Buffer);
  2486.             Initialize_Descriptor(Token_To_Buffer);
  2487.         end if;
  2488.  
  2489.         -- function designator can be string literal or identifier, so save
  2490.         -- both, so closing identifier/designator can be printed.
  2491.         if (Next_Token.gram_sym_val = PT.IdentifierTokenValue) or
  2492.             (Next_Token.gram_sym_val = PT.StringTokenValue) then
  2493.             Saved_Token := Next_Token;
  2494.         end if;
  2495.  
  2496.         if Buffering_Colon_Declarations then
  2497.             Token_To_Buffer.Token := Next_Token;
  2498.             Token_To_Buffer.Comments := Comment_Buffer;
  2499.         elsif (PPD.Depth = 0) or (Current_Scope <= PPD.Depth) then
  2500.             Print_Comments(Comment_Buffer);
  2501.             Print_Token(Next_Token);  
  2502.         else
  2503.  
  2504.             -- save previous token here in case comments come after
  2505.             -- a placeholder
  2506.             Previous_Token := Next_Token;
  2507.         end if;
  2508.     end Put;
  2509.  
  2510.     -----------------------------------------------------------------
  2511.  
  2512.     procedure Put_Space(Spaces : in Natural := 1) is
  2513.         Blank : constant String := "                    " &
  2514.             "                                                            ";
  2515.     begin
  2516.         if Buffering_Colon_Declarations then
  2517.             Token_Lists.Attach(Token_Buffer, Token_To_Buffer);
  2518.             Initialize_Descriptor(Token_To_Buffer);
  2519.             Token_To_Buffer.Token := Empty_Token;
  2520.             Token_To_Buffer.Token.lexed_token.text := 
  2521.                 new String'(Blank(1 .. Spaces));
  2522.         elsif (PPD.Depth = 0) or (Current_Scope <= PPD.Depth) then
  2523.             if Current_Column + Spaces - 1 > PPD.Page_Width then
  2524.                 Print_New_Line;
  2525.                 Temporary_Indent := PPD.Indentation_Level;
  2526.                 Current_Column := Current_Indent + Temporary_Indent + 1;
  2527.             end if;
  2528.  
  2529.             if Beginning_Of_Line then
  2530.                 PO.Space(PPD.Output_File, Current_Column - 1);
  2531.             end if;
  2532.             PO.Space(PPD.Output_File, Spaces);
  2533.             Current_Column := Current_Column + Spaces;
  2534.         end if;
  2535.     end Put_Space;
  2536.  
  2537.     -----------------------------------------------------------------
  2538.  
  2539.     procedure Print_Comments(Buffer : in out Comment_Lists.List) is
  2540.  
  2541.         Iter           : Comment_Lists.ListIter; --| Iterates down comment list
  2542.         Comment_Token  : PD.ParseStackElement; --| Element in list of comments
  2543.         New_Lines      : Natural := 0;         --| number of new_lines
  2544.                                                --| between comments
  2545.  
  2546.     begin
  2547.  
  2548.         Iter := Comment_Lists.MakeListIter(Buffer);
  2549.         if (PPD.Comment_Formatting = PPD.On) and 
  2550.             not Comment_Lists.IsEmpty(Buffer) and
  2551.             (Comment_Context = Body_Part) then
  2552.  
  2553.             -- process all "requests" dealing with indentation before printing
  2554.             -- comments if comments are being formatted and the context is the 
  2555.             -- body part.  Process these first, so that Print_New_Line takes
  2556.             -- indentation into account.
  2557.             Process_Increase_Requests;
  2558.             Process_Decrease_Requests;
  2559.             Process_Change_Requests;
  2560.             Process_Resume_Requests;
  2561.             if Requests.New_Lines > 0 then
  2562.                 Print_New_Line;
  2563.                 Requests.New_Lines := 0;
  2564.             end if;
  2565.  
  2566.             -- print extra new line if not at the beginning of the line,
  2567.             -- to get to the beginning of a new line
  2568.             if not Beginning_Of_Line then
  2569.                 Print_New_Line;
  2570.             end if;
  2571.             Print_New_Line;
  2572.         end if;
  2573.         while Comment_Lists.More(Iter) loop
  2574.             Comment_Lists.Next(Iter, Comment_Token);
  2575.  
  2576.             -- Print new lines between this comment token and
  2577.             -- previous token in source, unless new lines were already printed
  2578.             -- for comment formatting.
  2579.             New_Lines := Comment_Token.lexed_token.srcpos_line - 
  2580.                 Previous_Token.lexed_token.srcpos_line;
  2581.             if (PPD.Comment_Formatting = PPD.Off) or
  2582.                 (Comment_Context = Declarative_Part) or
  2583.                 (Previous_Token.gram_sym_val = PT.Comment_TokenValue) then
  2584.                 for I in 1 .. New_Lines loop
  2585.                     Print_New_Line;
  2586.                 end loop;
  2587.             end if;
  2588.  
  2589.             -- if Comment Formatting is on, try to indent to level of source 
  2590.             if (PPD.Comment_Formatting = PPD.On) and 
  2591.                 ((PPD.Page_Width - Current_Column) >=
  2592.                 Token_Text(Comment_Token)'Length) then
  2593.                 if Beginning_Of_Line then
  2594.                     PO.Space(PPD.Output_File, Current_Column - 1);
  2595.                 else
  2596.  
  2597.                     -- put extra space in so comment is separated from previous
  2598.                     -- token
  2599.                     Put_Space;
  2600.                 end if;
  2601.             else
  2602.                 if New_Lines > 0 then
  2603.                     Current_Column := 1;
  2604.                 end if;
  2605.  
  2606.                 -- if comment can't go where it was in source, put it at same
  2607.                 -- column on next line.
  2608.                 if Comment_Token.lexed_token.srcpos_column < Current_Column 
  2609.                     then
  2610.                     PO.Skip_Line(PPD.Output_File);
  2611.                     PO.Space(PPD.Output_File, Comment_Token.lexed_token.
  2612.                         srcpos_column - 1);
  2613.                 else
  2614.                     PO.Space(PPD.Output_File, Comment_Token.lexed_token.
  2615.                         srcpos_column - Current_Column);
  2616.                 end if;
  2617.             end if; 
  2618.             PO.Put(PPD.Output_File, Token_Text(Comment_Token)); 
  2619.             Free(Comment_Token.lexed_token.text);
  2620.             Previous_Token := Comment_Token;
  2621.         end loop;
  2622.  
  2623.         -- process any requests not handled earlier
  2624.         Process_Increase_Requests;
  2625.         Process_Decrease_Requests;
  2626.         Process_Change_Requests;
  2627.         Process_Resume_Requests;
  2628.  
  2629.         -- if there were some comments in buffer put new line after them
  2630.         if (not Comment_Lists.IsEmpty(Buffer)) then
  2631.             Print_New_Line;
  2632.         else
  2633.             for I in 1 .. Requests.New_Lines loop
  2634.                 Print_New_Line;
  2635.             end loop; 
  2636.         end if;
  2637.         Requests.New_Lines := 0;
  2638.  
  2639.         Comment_Lists.Destroy(Buffer);
  2640.     end Print_Comments;
  2641.  
  2642.     -----------------------------------------------------------------
  2643.  
  2644.     procedure New_Line is
  2645.     --| Requests a new_line for the output.  The newline is not actually
  2646.     --| printed here, in order that comments are put in the appropriate
  2647.     --| place.  The actual newline is printed in Print_New_Line.
  2648.     begin
  2649.         if Buffering_Colon_Declarations then
  2650.             Token_To_Buffer.Requests.New_Lines := 
  2651.                 Token_To_Buffer.Requests.New_Lines + 1;
  2652.         else
  2653.             Requests.New_Lines := Requests.New_Lines + 1;
  2654.         end if;
  2655.     end New_Line;
  2656.  
  2657.     -----------------------------------------------------------------
  2658.  
  2659.     procedure Start_Buffering_Colon_Declarations is
  2660.     begin
  2661.  
  2662.         -- create new list if not already buffering and tokens are being
  2663.         -- printed for the current depth
  2664.         if not Buffering_Colon_Declarations and 
  2665.             ((PPD.Depth = 0) or (Current_Scope <= PPD.Depth)) then
  2666.             Buffering_Colon_Declarations := True;
  2667.             Token_Buffer := Token_Lists.Create;
  2668.         end if;
  2669.     end Start_Buffering_Colon_Declarations;
  2670.  
  2671.     -----------------------------------------------------------------
  2672.  
  2673.     procedure Print_Colon_Declarations_Buffer is
  2674.         Iterator       : Token_Lists.ListIter;
  2675.         Buffered_Token : Token_Descriptor;
  2676.         Second_Buffer  : Token_Lists.List := Token_Lists.Create;
  2677.         Current_Length : Natural := 0;
  2678.         Max_Length     : Natural := 0;
  2679.     begin
  2680.         if (PPD.Depth = 0) or (Current_Scope <= PPD.Depth) then
  2681.  
  2682.             -- attach last token to list.  Token would usually be attached
  2683.             -- in the call to Put for the token following Token_To_Buffer.
  2684.             Token_Lists.Attach(Token_Buffer, Token_To_Buffer);
  2685.  
  2686.             Buffering_Colon_Declarations := False;
  2687.  
  2688.             -- get maximum identifier list length, updating tokens with length
  2689.             -- information, and attach each token to Second_Buffer with this
  2690.             -- new information.
  2691.             Iterator := Token_Lists.MakeListIter(Token_Buffer);
  2692.             while Token_Lists.More(Iterator) loop
  2693.                 Token_Lists.Next(Iterator, Buffered_Token);
  2694.  
  2695.                 -- This can't be a case statement because of non-static bound
  2696.                 -- of type for PT.xxxTokenValue
  2697.                 if (Buffered_Token.Token.gram_sym_val = 
  2698.                     PT.IdentifierTokenValue) or
  2699.                     (Buffered_Token.Token.gram_sym_val = PT.Comma_TokenValue) 
  2700.                     then
  2701.                     if not Comment_Lists.IsEmpty(Buffered_Token.Comments) then
  2702.                         if Current_Length > Max_Length then
  2703.                             Max_Length := Current_Length;
  2704.                         end if;
  2705.                         Current_Length := 0;
  2706.                     end if;
  2707.                     Current_Length := Current_Length +
  2708.                         Spaced_Token(Buffered_Token.Token, 
  2709.                             Previous_Token)'Length;
  2710.                     Token_Lists.Attach(Second_Buffer, Buffered_Token);
  2711.                 elsif (Buffered_Token.Token.gram_sym_val = 
  2712.                     PT.Colon_TokenValue) or 
  2713.                     (Buffered_Token.Token.gram_sym_val = PT.NullTokenValue) 
  2714.                     then
  2715.                     if Current_Length > Max_Length then
  2716.                         Max_Length := Current_Length;
  2717.                     end if;
  2718.                     if Comment_Lists.IsEmpty(Buffered_Token.Comments) then
  2719.                         Buffered_Token.Left_Side_Length := Current_Length;
  2720.                     end if;
  2721.                     Current_Length := 0;
  2722.                     Token_Lists.Attach(Second_Buffer, Buffered_Token);
  2723.  
  2724.                     -- skip to semicolon
  2725.                     while Token_Lists.More(Iterator) and
  2726.                         Buffered_Token.Token.gram_sym_val /= 
  2727.                         PT.SemiColon_TokenValue loop
  2728.                         Token_Lists.Next(Iterator, Buffered_Token);
  2729.                         Token_Lists.Attach(Second_Buffer, Buffered_Token);
  2730.                     end loop;
  2731.                 end if; 
  2732.             end loop;
  2733.             Token_Lists.Destroy(Token_Buffer);
  2734.  
  2735.             -- Print out Second_Buffer
  2736.             Iterator := Token_Lists.MakeListIter(Second_Buffer);
  2737.             while Token_Lists.More(Iterator) loop
  2738.                 Token_Lists.Next(Iterator, Buffered_Token);
  2739.                 if (PPD.Depth = 0) or (Current_Scope <= PPD.Depth) then
  2740.                     Print_Comments(Buffered_Token.Comments);
  2741.                     if (PPD.Colon_Alignment = PPD.On) and 
  2742.                         (Buffered_Token.Token.gram_sym_val = 
  2743.                         PT.Colon_TokenValue) then
  2744.                         Put_Space(Max_Length - Buffered_Token.Left_Side_Length);
  2745.                     end if;
  2746.                     Print_Token(Buffered_Token.Token);
  2747.                 end if;
  2748.                 Requests := Buffered_Token.Requests;
  2749.                 Current_Change_Column := Buffered_Token.Current_Change_Column;
  2750.                 for I in 1 .. Buffered_Token.Scope_Requests.Increments loop
  2751.                     Increment_Scope;
  2752.                 end loop;
  2753.                 for I in 1 .. Buffered_Token.Scope_Requests.Decrements loop
  2754.                     Decrement_Scope(Buffered_Token.Place_Holder.all);
  2755.                 end loop;
  2756.             end loop;
  2757.             Token_Lists.Destroy(Second_Buffer);
  2758.     
  2759.             Initialize_Descriptor(Token_To_Buffer);
  2760.             Buffering_Colon_Declarations := False;
  2761.         end if;
  2762.     end Print_Colon_Declarations_Buffer;
  2763.  
  2764.     -----------------------------------------------------------------
  2765.  
  2766.     procedure Increase_Indent is
  2767.     --| Requests an increase in indentation.  The increase is not actually
  2768.     --| processed here, in order that comments are put in the appropriate
  2769.     --| place.  The actual increase is processed in Process_Increase_Requests.
  2770.     begin
  2771.         if Buffering_Colon_Declarations then
  2772.             Token_To_Buffer.Requests.Increases := 
  2773.                 Token_To_Buffer.Requests.Increases + 1;
  2774.         else
  2775.             Requests.Increases := Requests.Increases + 1;
  2776.         end if;
  2777.     end Increase_Indent;
  2778.  
  2779.     -----------------------------------------------------------------
  2780.  
  2781.     procedure Decrease_Indent is
  2782.     --| Requests a decrease in indentation.  The decrease is not actually
  2783.     --| processed here, in order that comments are put in the appropriate
  2784.     --| place.  The actual decrease is processed in Process_Decrease_Requests.
  2785.     begin
  2786.         if Buffering_Colon_Declarations then
  2787.             Token_To_Buffer.Requests.Decreases := 
  2788.                 Token_To_Buffer.Requests.Decreases + 1;
  2789.         else
  2790.             Requests.Decreases := Requests.Decreases + 1;
  2791.         end if;
  2792.     end Decrease_Indent;
  2793.  
  2794.     -----------------------------------------------------------------
  2795.  
  2796.     procedure Change_Indent is
  2797.     --| Requests a change in indentation.  The change is not actually
  2798.     --| processed here, in order that comments are put in the appropriate
  2799.     --| place.  The actual change is processed in Process_Change_Requests.
  2800.     begin
  2801.         if Buffering_Colon_Declarations then
  2802.             Token_To_Buffer.Requests.Changes := 
  2803.                 Token_To_Buffer.Requests.Changes + 1;
  2804.             Token_To_Buffer.Current_Change_Column := Current_Column;
  2805.         else
  2806.             Requests.Changes := Requests.Changes + 1;
  2807.             Current_Change_Column := Current_Column;
  2808.         end if;
  2809.     end Change_Indent;
  2810.  
  2811.     -----------------------------------------------------------------
  2812.  
  2813.     procedure Resume_Normal_Indentation is
  2814.     --| Requests a resume of the previous indentation.  This is not actually
  2815.     --| processed here, in order that comments are put in the appropriate
  2816.     --| place.  The actual resume is processed in Process_Resume_Requests.
  2817.     begin
  2818.         if Buffering_Colon_Declarations then
  2819.             Token_To_Buffer.Requests.Resumes := 
  2820.                 Token_To_Buffer.Requests.Resumes + 1;
  2821.         else
  2822.             Requests.Resumes := Requests.Resumes + 1;
  2823.         end if;
  2824.     end Resume_Normal_Indentation;
  2825.  
  2826.     -----------------------------------------------------------------
  2827.  
  2828.     procedure Pop_Identifier(Where : in Pop_To_Where := To_Nowhere) is
  2829.         Popped_Token : PD.ParseStackElement; --| The token popped off stack 
  2830.     begin
  2831.         if (Where = To_Nowhere) or (PPD.Closing_Identifiers = PPD.Off) or
  2832.             ((PPD.Depth /= 0) and (Current_Scope > PPD.Depth)) then
  2833.             Token_Stack_Pkg.Pop(Identifier_Stack);
  2834.         else
  2835.             Token_Stack_Pkg.Pop(Identifier_Stack, Popped_Token);
  2836.             Put(Popped_Token);
  2837.         end if;
  2838.     end Pop_Identifier;
  2839.  
  2840.     -----------------------------------------------------------------
  2841.  
  2842.     procedure Push_Identifier is
  2843.     begin
  2844.  
  2845.         -- set source line and column to 0 so that new column and line may
  2846.         -- be assigned when the pushed token is output as a closing designator
  2847.         -- or identifier.
  2848.         Saved_Token.lexed_token.srcpos_line := 0;
  2849.         Saved_Token.lexed_token.srcpos_column := 0;
  2850.         Token_Stack_Pkg.Push(Identifier_Stack, Saved_Token);
  2851.     end Push_Identifier;
  2852.  
  2853.     -----------------------------------------------------------------
  2854.  
  2855.     procedure Push_Empty_Token is
  2856.     begin
  2857.         Token_Stack_Pkg.Push(Identifier_Stack, Empty_Token);
  2858.     end Push_Empty_Token;
  2859.  
  2860.     -----------------------------------------------------------------
  2861.  
  2862.     procedure Insert_In_Token is
  2863.         In_Token : PD.ParseStackElement := (gram_sym_val => PT.InTokenValue,
  2864.             lexed_token => (text => new string'("in"),
  2865.                             srcpos_line => 0,
  2866.                             srcpos_column => 0));
  2867.         --| "In" token with source line and column positions set to 0 so that
  2868.         --| new line and column positions may be assigned the token when it
  2869.         --| is output. 
  2870.     begin
  2871.         if PPD.Explicit_Param_Mode = PPD.On then
  2872.             Put(In_Token);
  2873.         end if;
  2874.     end Insert_In_Token;
  2875.  
  2876.     -----------------------------------------------------------------
  2877.  
  2878.     procedure Increment_Scope is
  2879.     begin
  2880.         if Buffering_Colon_Declarations then
  2881.             Token_To_Buffer.Scope_Requests.Increments := 
  2882.                 Token_To_Buffer.Scope_Requests.Increments + 1;
  2883.         else
  2884.             Current_Scope := Current_Scope + 1;
  2885.         end if;
  2886.     end Increment_Scope;
  2887.  
  2888.     -----------------------------------------------------------------
  2889.  
  2890.     procedure Decrement_Scope(Place_Holder : in String) is
  2891.     begin
  2892.         if Buffering_Colon_Declarations then
  2893.             Token_To_Buffer.Scope_Requests.Decrements := 
  2894.                 Token_To_Buffer.Scope_Requests.Decrements + 1;
  2895.             Token_To_Buffer.Place_Holder := new String'(Place_Holder);
  2896.         else
  2897.             if (Current_Scope - PPD.Depth = 1) and (PPD.Depth /= 0) then
  2898.                 Requests := (0, 0, 0, 0, 0);
  2899.                 Current_Change_Column := 0;
  2900.                 PO.Put(PPD.Output_File, "<" & Place_Holder & ">");
  2901.             end if;
  2902.             Current_Scope := Current_Scope - 1;
  2903.         end if;
  2904.     end Decrement_Scope;
  2905.  
  2906.     -----------------------------------------------------------------
  2907.  
  2908.     procedure Switch_Comment_Context is
  2909.     begin
  2910.         if Comment_Context = Declarative_Part then
  2911.             Comment_Context := Body_Part;
  2912.         else
  2913.             Comment_Context := Declarative_Part;
  2914.         end if;
  2915.     end Switch_Comment_Context;
  2916.  
  2917.     -----------------------------------------------------------------
  2918.     -- Local subprogram bodies
  2919.     -----------------------------------------------------------------
  2920.  
  2921.     procedure Initialize_Descriptor(Descriptor : in out Token_Descriptor) is
  2922.     begin
  2923.  
  2924.         Descriptor.Token := Empty_Token;
  2925.         -- Change grammar symbol to comment token value which it
  2926.         -- can never be (since comments are buffered separately)
  2927.         Descriptor.Token.gram_sym_val := PT.Comment_TokenValue;
  2928.         Descriptor.Requests := (0, 0, 0, 0, 0);
  2929.         Descriptor.Scope_Requests := (0, 0);
  2930.         Descriptor.Current_Change_Column := 0;
  2931.         Descriptor.Place_Holder := PD.Null_Source_Text;
  2932.         Descriptor.Left_Side_Length := 0;
  2933.     end Initialize_Descriptor;
  2934.  
  2935.     -----------------------------------------------------------------
  2936.  
  2937.     procedure Print_Token(Next_Token : in out PD.ParseStackElement) is
  2938.  
  2939.         Token_Length : Natural := 0;
  2940.         Blank_Lines  : Integer := 0;
  2941.  
  2942.     begin
  2943.  
  2944.         -- give line and column position to tokens being inserted that weren't
  2945.         -- in the source.
  2946.         if Next_Token.lexed_token.srcpos_line = 0 then
  2947.             Next_Token.lexed_token.srcpos_line := Previous_Token.lexed_token.
  2948.                 srcpos_line;
  2949.             Next_Token.lexed_token.srcpos_column := Previous_Token.lexed_token.
  2950.                 srcpos_column;
  2951.         end if;
  2952.  
  2953.         if (PPD.Comment_Formatting = PPD.Off) or 
  2954.             (Comment_Context = Declarative_Part) or
  2955.             ((Comment_Context = Body_Part) and (Previous_Token.gram_sym_val /= 
  2956.             PT.Comment_TokenValue)) then
  2957.  
  2958.             -- print out any blank lines that appeared in source between the
  2959.             -- previous token and this one.
  2960.             Blank_Lines := Next_Token.lexed_token.srcpos_line - Previous_Token.
  2961.                 lexed_token.srcpos_line - 1;
  2962.  
  2963.             -- print extra new line if not at beginning of line, so blank line
  2964.             -- will be printed rather than just a new line
  2965.             if not Beginning_Of_Line and (Blank_Lines > 0) then
  2966.                 Print_New_Line;
  2967.             end if;
  2968.             PO.Skip_Line(PPD.Output_File, Blank_Lines);
  2969.         end if;
  2970.  
  2971.         Token_Length := Spaced_Token(Next_Token, Previous_Token)'Length;
  2972.  
  2973.         -- If adding this token will make the line longer than the
  2974.         -- page width then go to the next line and indent. 
  2975.         if (Current_Column + Token_Length - 1) > PPD.Page_Width then
  2976.             Print_New_Line;
  2977.             Temporary_Indent := PPD.Indentation_Level;
  2978.             Current_Column := Current_Indent + Temporary_Indent + 1;
  2979.         end if;
  2980.  
  2981.         -- output spaces if at the beginning of the line to get to the current
  2982.         -- indentation level.
  2983.         if Beginning_Of_Line then
  2984.             PO.Space(PPD.Output_File, Current_Column - 1);
  2985.         end if;
  2986.  
  2987.         -- Output token, bold printing if appropriate
  2988.         if ((Next_Token.gram_sym_val in PD.ReservedWordRange) and
  2989.             (PPD.Keyword = PPD.Bold)) or ((Next_Token.gram_sym_val = 
  2990.             PT.IdentifierTokenValue) and (PPD.Identifier = PPD.Bold)) then
  2991.             CT.Bold_Print(Spaced_Token(Next_Token, Previous_Token));
  2992.         else 
  2993.             PO.Put(PPD.Output_File, Spaced_Token(Next_Token, Previous_Token));
  2994.         end if; 
  2995.  
  2996.         Beginning_Of_Line := False;
  2997.  
  2998.         -- if the token was too big to fit even on the new line allocated it,
  2999.         -- set the current_column to the next line
  3000.         if Token_Length > PPD.Page_Width - Current_Indent then
  3001.             Print_New_Line;
  3002.             Temporary_Indent := PPD.Indentation_Level;
  3003.             Current_Column := Current_Indent + Temporary_Indent + 1;
  3004.         else
  3005.             Current_Column := Current_Column + Token_Length;
  3006.         end if;
  3007.         if Next_Token.gram_sym_val /= PT.Empty_TokenValue then
  3008.             Previous_Token := Next_Token;
  3009.         end if;
  3010.     end Print_Token;
  3011.  
  3012.     -----------------------------------------------------------------
  3013.  
  3014.     function Token_Text(Token: in PD.ParseStackElement) return String is
  3015.     begin
  3016.         if (Token.gram_sym_val in PD.SingleDelimiterRange) or
  3017.             (Token.gram_sym_val in PD.DoubleDelimiterRange) then
  3018.             if Token.gram_sym_val = PT.Bar_TokenValue then
  3019.                 if PPD.Delimiters = PPD.Basic then 
  3020.                     return ("!");
  3021.                 else
  3022.                     return ("|");
  3023.                 end if;
  3024.             else 
  3025.                 return PT.Get_Grammar_Symbol(Token.gram_sym_val);
  3026.             end if;
  3027.         elsif Token.gram_sym_val = PT.StringTokenValue then
  3028.             return CT.String_Value(Token.lexed_token.text);
  3029.         elsif Token.gram_sym_val = PT.CharacterTokenValue then
  3030.             return (Token.lexed_token.text.all & "'");
  3031.         elsif Token.gram_sym_val = PT.Comment_TokenValue then
  3032.             return ("--" & Token.lexed_token.text.all);
  3033.         elsif Token.gram_sym_val in PD.ReservedWordRange then
  3034.             return CT.Change_Case(Token.lexed_token.text, PPD.Keyword);
  3035.         elsif Token.gram_sym_val = PT.IdentifierTokenValue then
  3036.             return CT.Change_Case(Token.lexed_token.text, PPD.Identifier);
  3037.         elsif (Token.gram_sym_val = PT.NumericTokenValue) and
  3038.             (PPD.Delimiters = PPD.Basic) then
  3039.             return CT.Change_Sharp(Token.lexed_token.text);
  3040.         else
  3041.             return Token.lexed_token.text.all;
  3042.         end if;
  3043.     end Token_Text;
  3044.  
  3045.     -----------------------------------------------------------------
  3046.  
  3047.     function Spaced_Token(Current, Previous : in PD.ParseStackElement) return 
  3048.         String is
  3049.         Preceding_Space : Boolean := False;
  3050.     begin
  3051.  
  3052.         -- Given context of Current and Previous grammar symbols, determine
  3053.         -- whether space should precede current token.
  3054.         -- This can't be a case statement because of non-static bound of
  3055.         -- GrammarSymbolRange, which is the type of all names of the
  3056.         -- form PT.xxxTokenValue
  3057.         if (Current.gram_sym_val = PT.ModTokenValue) then
  3058.             if Previous.gram_sym_val /= PT.AtTokenValue then
  3059.                 Preceding_Space := True;
  3060.             end if;
  3061.         elsif (Current.gram_sym_val = PT.UseTokenValue) then
  3062.             if Previous.gram_sym_val /= PT.SemiColon_TokenValue then
  3063.                 Preceding_Space := True;
  3064.             end if;
  3065.         elsif (Current.gram_sym_val = PT.ColonEQ_TokenValue) then
  3066.             if Previous.gram_sym_val /= PT.ConstantTokenValue then
  3067.                 Preceding_Space := True;
  3068.             end if;
  3069.         elsif (Current.gram_sym_val = PT.ThenTokenValue) then
  3070.             if Previous.gram_sym_val /= PT.AndTokenValue then
  3071.                 Preceding_Space := True;
  3072.             end if;
  3073.         elsif (Current.gram_sym_val = PT.InTokenValue) or
  3074.               (Current.gram_sym_val = PT.LoopTokenValue) then
  3075.             if Previous.gram_sym_val /= PT.Colon_TokenValue then
  3076.                 Preceding_Space := True;
  3077.             end if;
  3078.         elsif (Current.gram_sym_val = PT.Plus_TokenValue) or
  3079.               (Current.gram_sym_val = PT.Minus_TokenValue) then
  3080.             if Previous.gram_sym_val /= PT.LeftParen_TokenValue then
  3081.                 Preceding_Space := True;
  3082.             end if;
  3083.         elsif (Current.gram_sym_val = PT.RangeTokenValue) or 
  3084.               (Current.gram_sym_val = PT.DigitsTokenValue) or
  3085.               (Current.gram_sym_val = PT.DeltaTokenValue) then
  3086.             if (Previous.gram_sym_val /= PT.Apostrophe_TokenValue) and
  3087.                (Previous.gram_sym_val /= PT.IsTokenValue) then
  3088.                 Preceding_Space := True;
  3089.             end if;
  3090.         elsif (Previous.gram_sym_val = PT.CaseTokenValue) or
  3091.                (Previous.gram_sym_val = PT.DeltaTokenValue) or
  3092.                (Previous.gram_sym_val = PT.DigitsTokenValue) or
  3093.                (Previous.gram_sym_val = PT.EndTokenValue) or
  3094.                (Previous.gram_sym_val = PT.ExitTokenValue) or
  3095.                (Previous.gram_sym_val = PT.IfTokenValue) or
  3096.                (Previous.gram_sym_val = PT.LoopTokenValue) or
  3097.                (Previous.gram_sym_val = PT.ReturnTokenValue) or
  3098.                (Previous.gram_sym_val = PT.RaiseTokenValue) or
  3099.                (Previous.gram_sym_val = PT.RangeTokenValue) or
  3100.                (Previous.gram_sym_val = PT.SelectTokenValue) then
  3101.             if (Current.gram_sym_val /= PT.SemiColon_TokenValue) and
  3102.                 -- Empty Token handles pop of loop or block identifier. 
  3103.                 (Current.gram_sym_val /= PT.Empty_TokenValue) then
  3104.                 Preceding_Space := True;
  3105.             end if;
  3106.         elsif (Previous.gram_sym_val = PT.AbsTokenValue) then
  3107.             if Current.gram_sym_val /= PT.LeftParen_TokenValue then
  3108.                 Preceding_Space := True;
  3109.             end if;
  3110.         end if;
  3111.  
  3112.         -- Return the spaced token
  3113.         case PPD.Spacing_Table(Current.gram_sym_val) is
  3114.              when PPD.After =>   
  3115.                  if Beginning_Of_Line or not Preceding_Space then
  3116.                      return Token_Text(Current) & " ";
  3117.                  else
  3118.                      return " " & Token_Text(Current) & " ";
  3119.                  end if;
  3120.              when PPD.Before =>
  3121.                  if Beginning_Of_Line then
  3122.                      return Token_Text(Current); 
  3123.                  else
  3124.                      return " " & Token_Text(Current);
  3125.                  end if;
  3126.              when PPD.Around =>
  3127.                  if Beginning_of_Line then
  3128.                      return Token_Text(Current) & " ";
  3129.                  else
  3130.                      return " " & Token_Text(Current) & " ";
  3131.                  end if;
  3132.              when PPD.None =>
  3133.                  if Beginning_of_Line or not Preceding_Space then
  3134.                      return Token_Text(Current);
  3135.                  else
  3136.                      return " " & Token_Text(Current);
  3137.                  end if; 
  3138.         end case;
  3139.     end Spaced_Token;
  3140.  
  3141.     -----------------------------------------------------------------
  3142.  
  3143.     procedure Print_New_Line is
  3144.     begin
  3145.         Temporary_Indent := 0;
  3146.         Current_Column := Current_Indent + 1;
  3147.         PO.Skip_Line(PPD.Output_File);
  3148.         Beginning_Of_Line := True;
  3149.     end Print_New_Line;
  3150.  
  3151.     -----------------------------------------------------------------
  3152.  
  3153.     procedure Process_Increase_Requests is
  3154.     begin
  3155.         for I in 1 .. Requests.Increases loop
  3156.             if Current_Indent + PPD.Indentation_Level < PPD.RH_Margin then
  3157.                 Current_Indent := Current_Indent + PPD.Indentation_Level;
  3158.             else
  3159.                 Unperformed_Indents := Unperformed_Indents + 1;
  3160.             end if;
  3161.         end loop;
  3162.         Requests.Increases := 0;
  3163.     end Process_Increase_Requests;
  3164.  
  3165.     -----------------------------------------------------------------
  3166.  
  3167.     procedure Process_Decrease_Requests is
  3168.     begin
  3169.         for I in 1 .. Requests.Decreases loop
  3170.             if Unperformed_Indents = 0 then
  3171.                 Current_Indent := Current_Indent - PPD.Indentation_Level;
  3172.             else
  3173.                 Unperformed_Indents := Unperformed_Indents - 1;
  3174.             end if;
  3175.         end loop;
  3176.         Requests.Decreases := 0;
  3177.     end Process_Decrease_Requests;
  3178.  
  3179.     -----------------------------------------------------------------
  3180.  
  3181.     procedure Process_Change_Requests is
  3182.     begin
  3183.         if Requests.Changes > 0 then
  3184.             Previous_Indent := Current_Indent;
  3185.             if Current_Change_Column < PPD.RH_Margin then
  3186.                 Current_Indent := Current_Change_Column - 1;
  3187.             end if;
  3188.  
  3189.             -- Since new line does not always occur before change_indent,
  3190.             -- need to update current column info.
  3191.             Temporary_Indent := 0;
  3192.             Current_Column := Current_Indent + 1;
  3193.         end if;
  3194.         Requests.Changes := 0;
  3195.     end Process_Change_Requests;
  3196.  
  3197.     -----------------------------------------------------------------
  3198.  
  3199.     procedure Process_Resume_Requests is
  3200.     begin
  3201.         if Requests.Resumes > 0 then
  3202.             Current_Indent := Previous_Indent;
  3203.         end if;
  3204.         Requests.Resumes := 0;
  3205.     end Process_Resume_Requests;
  3206.  
  3207.     -----------------------------------------------------------------
  3208.  
  3209. end Pretty_Printer_Utilities;
  3210.  
  3211. ---------------------------------------------------------------------
  3212. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  3213. --PRETTY.BDY
  3214. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  3215.  
  3216. with Pretty_Printer_Utilities;
  3217. with ParserDeclarations;            -- declarations for parser
  3218. with Parser;                        -- contains parse and Apply_Actions
  3219. with Host_Dependencies;
  3220. with Paginated_Output;
  3221. with TEXT_IO;
  3222.  
  3223. procedure Pretty_Print(
  3224.     Source_File : in String;
  3225.     Output_File : in String := "";
  3226.     Comment_Formatting : in Pretty_Printer_Declarations.Switch :=
  3227.         Pretty_Printer_Declarations.Comment_Formatting;
  3228.     Paginated_Format : in Pretty_Printer_Declarations.Switch := 
  3229.         Pretty_Printer_Declarations.Paginated_Format;
  3230.     Depth : in Pretty_Printer_Declarations.Depth_Range :=
  3231.         Pretty_Printer_Declarations.Depth) is
  3232.  
  3233.     use Pretty_Printer_Declarations;
  3234.  
  3235.     package PPD renames Pretty_Printer_Declarations;
  3236.     package PPU renames Pretty_Printer_Utilities;
  3237.     package PD  renames ParserDeclarations;
  3238.     package HD  renames Host_Dependencies;
  3239.     package PO  renames Paginated_Output;
  3240.  
  3241.                          -- Objects --
  3242.  
  3243.     Return_Value : PD.ParseStackElement;
  3244.     Input_File   : TEXT_IO.FILE_TYPE;
  3245.  
  3246. begin
  3247.     TEXT_IO.OPEN(FILE => Input_File,
  3248.                  MODE => TEXT_IO.IN_FILE,
  3249.                  NAME => Source_File);
  3250.     TEXT_IO.SET_INPUT(Input_File);
  3251.     PPD.Comment_Formatting := Comment_Formatting;
  3252.     PPD.Paginated_Format := Paginated_Format;
  3253.     PPD.Depth := Depth;
  3254.     PPU.Initialize;
  3255.  
  3256.     if PPD.Paginated_Format = PPD.On then
  3257.         PO.Create_Paginated_File(File_Handle => PPD.Output_File,
  3258.                                  File_Name => Output_File);
  3259.         PO.Set_Header(File_Handle => PPD.Output_File, Header_Line => 1,
  3260.             Header_Text => "Pretty Printer Output on ~d at " & 
  3261.             "~t                                ~p");
  3262.         PO.Set_Header(File_Handle => PPD.Output_File, Header_Line => 2,
  3263.             Header_Text => "Source File: " & Source_File);
  3264.     else
  3265.         PO.Create_Paginated_File(File_Handle => PPD.Output_File,
  3266.                                  File_Name => Output_File,
  3267.                                  Header_Size => 0,
  3268.                                  Footer_Size => 0,
  3269.                                  Page_Size => 0);
  3270.     end if;  
  3271.  
  3272.     -- main loop of pretty printer is Parser.Parse.  Pretty printing actions
  3273.     -- are in Parser.Apply_Actions which is called by Parse on each reduction.
  3274.     Return_Value := Parser.Parse;
  3275.  
  3276.     -- print any comments following the last token in the file.
  3277.     PPU.Print_Comments(PPU.Comment_Buffer);
  3278.     PO.Close_Paginated_File(PPD.Output_File);
  3279.     TEXT_IO.CLOSE(Input_File);
  3280.  
  3281. exception
  3282.     when TEXT_IO.NAME_ERROR =>
  3283.         TEXT_IO.PUT_LINE(ITEM => "Error opening file " & Source_File & 
  3284.             " for input.");
  3285.     when PD.Parser_Error =>
  3286.         TEXT_IO.NEW_LINE;
  3287.         TEXT_IO.PUT_LINE(ITEM => "Syntax Error in Source: Line: " &
  3288.             HD.Source_Line'Image(PD.CurToken.lexed_token.srcpos_line) &
  3289.             " Column: " & HD.Source_Column'Image(
  3290.             PD.CurToken.lexed_token.srcpos_column));
  3291.     when PO.File_Error =>
  3292.         TEXT_IO.PUT_LINE(ITEM => "Error opening file " & Output_File &
  3293.             " for output.");
  3294.  
  3295.     -- Handle others in driver.
  3296.     when others =>
  3297.         raise;
  3298. end Pretty_Print;
  3299.  
  3300. ---------------------------------------------------------------------
  3301. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  3302. --PTBLS.BDY
  3303. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  3304.      
  3305. package body ParseTables is
  3306. ----------------------------------------------------------------------
  3307. -- The rest of the constants used to  the Parse Tables
  3308. ----------------------------------------------------------------------
  3309.      
  3310.     DefaultValue : constant := 1 ; -- default for aggregates.
  3311.      
  3312.     ActionTableOneLength : constant GC.ParserInteger :=
  3313.           8544  ;
  3314.         --| Length (number of entries) in map ActionTableOne.
  3315.     subtype ActionTableOneRange is GC.ParserInteger
  3316.             range 1..ActionTableOneLength;
  3317.      
  3318.     ActionTableTwoLength : constant GC.ParserInteger :=
  3319.           8544  ;
  3320.         --| Length (number of entries) in map ActionTableTwo.
  3321.     subtype ActionTableTwoRange is GC.ParserInteger
  3322.             range 1..ActionTableTwoLength;
  3323.      
  3324.     DefaultMapLength : constant GC.ParserInteger :=
  3325.            996  ;
  3326.         --| Length (number of entries) in map Defaults.
  3327.     subtype DefaultMapRange is GC.ParserInteger range 1..DefaultMapLength;
  3328.      
  3329.     FollowMapLength : constant GC.ParserInteger :=
  3330.            267  ;
  3331.         --| Length (number of entries) in the FollowMap.
  3332.      
  3333.     GrammarSymbolCountPlusOne : constant GC.ParserInteger :=
  3334.            364  ;
  3335.         --| Number of symbols plus one in the parse tables.
  3336.         -- NYU Reference Name: NUM_INPUTS
  3337.      
  3338.     ActionTableSize : constant GC.ParserInteger :=
  3339.           5711  ;
  3340.         --| Maximum entry in Action Tables referenced by hash
  3341.         --| function. Entries above TableSize are collision chains.
  3342.         -- NYU Reference Name: TABLE_SIZE
  3343.      
  3344.     ------------------------------------------------------------------
  3345.     -- Tables generated by Parse Tables Generator
  3346.     ------------------------------------------------------------------
  3347.      
  3348.     subtype GrammarSymbolRepRangePlusZero is
  3349.         GrammarSymbolRepRangePlusZeroCommon;
  3350.      
  3351.     GrammarSymbolTableIndex : constant
  3352.         array (GrammarSymbolRange'first .. GrammarSymbolRange'last * 2)
  3353.         of GC.ParserInteger :=
  3354.          (    1,    0,    1,    5,    6,    8,    9,   14,   15,   20
  3355. ,   21,   23,   24,   26,   27,   31,   32,   33,   34,   38
  3356. ,   39,   42,   43,   46,   47,   54,   55,   61,   62,   66
  3357. ,   67,   71,   72,   77,   78,   79,   80,   83,   84,   88
  3358. ,   89,   91,   92,   96,   97,  105,  106,  109,  110,  112
  3359. ,  113,  120,  121,  127,  128,  131,  132,  133,  134,  135
  3360. ,  136,  137,  138,  144,  145,  148,  149,  151,  152,  154
  3361. ,  155,  157,  158,  161,  162,  163,  164,  165,  166,  171
  3362. ,  172,  174,  175,  181,  182,  187,  188,  194,  195,  203
  3363. ,  204,  208,  209,  213,  214,  219,  220,  222,  223,  229
  3364. ,  230,  235,  236,  242,  243,  248,  249,  256,  257,  263
  3365. ,  264,  267,  268,  276,  277,  280,  281,  284,  285,  287
  3366. ,  288,  291,  292,  296,  297,  300,  301,  303,  304,  313
  3367. ,  314,  328,  329,  342,  343,  359,  360,  360,  361,  361
  3368. ,  362,  362,  363,  363,  364,  364,  365,  365,  366,  366
  3369. ,  367,  367,  368,  368,  369,  369,  370,  370,  371,  371
  3370. ,  372,  372,  373,  373,  374,  374,  375,  377,  378,  379
  3371. ,  380,  381,  382,  383,  384,  385,  386,  387,  388,  389
  3372. ,  390,  391,  392,  393,  394,  395,  396,  397,  398,  412
  3373. ,  413,  416,  417,  420,  421,  431,  432,  461,  462,  467
  3374. ,  468,  483,  484,  500,  501,  519,  520,  541,  542,  560
  3375. ,  561,  578,  579,  599,  600,  620,  621,  640,  641,  658
  3376. ,  659,  681,  682,  699,  700,  720,  721,  746,  747,  761
  3377. ,  762,  779,  780,  793,  794,  821,  822,  831,  832,  844
  3378. ,  845,  865,  866,  892,  893,  916,  917,  931,  932,  941
  3379. ,  942,  967,  968,  996,  997, 1007, 1008, 1034, 1035, 1057
  3380. , 1058, 1077, 1078, 1098, 1099, 1120, 1121, 1142, 1143, 1165
  3381. , 1166, 1174, 1175, 1184, 1185, 1206, 1207, 1222, 1223, 1247
  3382. , 1248, 1269, 1270, 1286, 1287, 1319, 1320, 1355, 1356, 1374
  3383. , 1375, 1402, 1403, 1420, 1421, 1445, 1446, 1475, 1476, 1499
  3384. , 1500, 1526, 1527, 1542, 1543, 1546, 1547, 1560, 1561, 1577
  3385. , 1578, 1582, 1583, 1602, 1603, 1617, 1618, 1631, 1632, 1644
  3386. , 1645, 1667, 1668, 1688, 1689, 1709, 1710, 1733, 1734, 1745
  3387. , 1746, 1759, 1760, 1779, 1780, 1815, 1816, 1858, 1859, 1865
  3388. , 1866, 1889, 1890, 1895, 1896, 1919, 1920, 1935, 1936, 1939
  3389. , 1940, 1963, 1964, 1985, 1986, 2006, 2007, 2016, 2017, 2038
  3390. , 2039, 2049, 2050, 2058, 2059, 2073, 2074, 2085, 2086, 2094
  3391. , 2095, 2111, 2112, 2129, 2130, 2138, 2139, 2146, 2147, 2166
  3392. , 2167, 2188, 2189, 2197, 2198, 2231, 2232, 2252, 2253, 2279
  3393. , 2280, 2309, 2310, 2327, 2328, 2356, 2357, 2391, 2392, 2429
  3394. , 2430, 2437, 2438, 2460, 2461, 2482, 2483, 2505, 2506, 2534
  3395. , 2535, 2562, 2563, 2602, 2603, 2609, 2610, 2666, 2667, 2702
  3396. , 2703, 2706, 2707, 2713, 2714, 2747, 2748, 2753, 2754, 2783
  3397. , 2784, 2807, 2808, 2816, 2817, 2836, 2837, 2855, 2856, 2877
  3398. , 2878, 2898, 2899, 2918, 2919, 2941, 2942, 2954, 2955, 2966
  3399. , 2967, 2975, 2976, 2986, 2987, 3008, 3009, 3024, 3025, 3042
  3400. , 3043, 3050, 3051, 3070, 3071, 3084, 3085, 3100, 3101, 3114
  3401. , 3115, 3129, 3130, 3144, 3145, 3159, 3160, 3173, 3174, 3187
  3402. , 3188, 3199, 3200, 3213, 3214, 3227, 3228, 3242, 3243, 3258
  3403. , 3259, 3274, 3275, 3279, 3280, 3318, 3319, 3366, 3367, 3396
  3404. , 3397, 3405, 3406, 3425, 3426, 3495, 3496, 3522, 3523, 3548
  3405. , 3549, 3564, 3565, 3582, 3583, 3595, 3596, 3607, 3608, 3621
  3406. , 3622, 3636, 3637, 3669, 3670, 3683, 3684, 3701, 3702, 3737
  3407. , 3738, 3756, 3757, 3772, 3773, 3796, 3797, 3812, 3813, 3835
  3408. , 3836, 3861, 3862, 3871, 3872, 3875, 3876, 3897, 3898, 3925
  3409. , 3926, 3941, 3942, 3962, 3963, 3991, 3992, 4016, 4017, 4032
  3410. , 4033, 4067, 4068, 4083, 4084, 4109, 4110, 4153, 4154, 4185
  3411. , 4186, 4217, 4218, 4248, 4249, 4265, 4266, 4292, 4293, 4349
  3412. , 4350, 4363, 4364, 4385, 4386, 4401, 4402, 4416, 4417, 4434
  3413. , 4435, 4458, 4459, 4505, 4506, 4531, 4532, 4549, 4550, 4566
  3414. , 4567, 4587, 4588, 4611, 4612, 4623, 4624, 4663, 4664, 4676
  3415. , 4677, 4687, 4688, 4719, 4720, 4726, 4727, 4744, 4745, 4757
  3416. , 4758, 4773, 4774, 4787, 4788, 4812, 4813, 4819, 4820, 4844
  3417. , 4845, 4862, 4863, 4873, 4874, 4902, 4903, 4949, 4950, 4966
  3418. , 4967, 4982, 4983, 5001, 5002, 5017, 5018, 5048, 5049, 5077
  3419. , 5078, 5100, 5101, 5118, 5119, 5137, 5138, 5159, 5160, 5183
  3420. , 5184, 5235, 5236, 5259, 5260, 5283, 5284, 5296, 5297, 5329
  3421. , 5330, 5343, 5344, 5371, 5372, 5390, 5391, 5406, 5407, 5422
  3422. , 5423, 5438, 5439, 5450, 5451, 5464, 5465, 5473, 5474, 5482
  3423. , 5483, 5536, 5537, 5561, 5562, 5574, 5575, 5587, 5588, 5602
  3424. , 5603, 5624, 5625, 5652, 5653, 5674, 5675, 5685, 5686, 5704
  3425. , 5705, 5727, 5728, 5758, 5759, 5773, 5774, 5792, 5793, 5810
  3426. , 5811, 5829, 5830, 5860, 5861, 5886)  ;
  3427.      
  3428.     GrammarSymbolTable : constant String :=
  3429.          ('A','B','O','R','T','A','B','S','A','C'
  3430. ,'C','E','P','T','A','C','C','E','S','S'
  3431. ,'A','L','L','A','N','D','A','R','R','A'
  3432. ,'Y','A','T','B','E','G','I','N','B','O'
  3433. ,'D','Y','C','A','S','E','C','O','N','S'
  3434. ,'T','A','N','T','D','E','C','L','A','R'
  3435. ,'E','D','E','L','A','Y','D','E','L','T'
  3436. ,'A','D','I','G','I','T','S','D','O','E'
  3437. ,'L','S','E','E','L','S','I','F','E','N'
  3438. ,'D','E','N','T','R','Y','E','X','C','E'
  3439. ,'P','T','I','O','N','E','X','I','T','F'
  3440. ,'O','R','F','U','N','C','T','I','O','N'
  3441. ,'G','E','N','E','R','I','C','G','O','T'
  3442. ,'O','I','F','I','N','I','S','L','I','M'
  3443. ,'I','T','E','D','L','O','O','P','M','O'
  3444. ,'D','N','E','W','N','O','T','N','U','L'
  3445. ,'L','O','F','O','R','O','T','H','E','R'
  3446. ,'S','O','U','T','P','A','C','K','A','G'
  3447. ,'E','P','R','A','G','M','A','P','R','I'
  3448. ,'V','A','T','E','P','R','O','C','E','D'
  3449. ,'U','R','E','R','A','I','S','E','R','A'
  3450. ,'N','G','E','R','E','C','O','R','D','R'
  3451. ,'E','M','R','E','N','A','M','E','S','R'
  3452. ,'E','T','U','R','N','R','E','V','E','R'
  3453. ,'S','E','S','E','L','E','C','T','S','E'
  3454. ,'P','A','R','A','T','E','S','U','B','T'
  3455. ,'Y','P','E','T','A','S','K','T','E','R'
  3456. ,'M','I','N','A','T','E','T','H','E','N'
  3457. ,'T','Y','P','E','U','S','E','W','H','E'
  3458. ,'N','W','H','I','L','E','W','I','T','H'
  3459. ,'X','O','R','i','d','e','n','t','i','f'
  3460. ,'i','e','r','n','u','m','e','r','i','c'
  3461. ,'_','l','i','t','e','r','a','l','s','t'
  3462. ,'r','i','n','g','_','l','i','t','e','r'
  3463. ,'a','l','c','h','a','r','a','c','t','e'
  3464. ,'r','_','l','i','t','e','r','a','l','&'
  3465. ,''','(',')','*','+',',','-','.','/',':'
  3466. ,';','<','=','>',''','|',''','=','>','.'
  3467. ,'.','*','*',':','=','/','=','>','=','<'
  3468. ,'=','<','<','>','>','<','>','c','o','m'
  3469. ,'m','e','n','t','_','l','i','t','e','r'
  3470. ,'a','l','$','E','O','F','$','A','C','C'
  3471. ,'c','o','m','p','i','l','a','t','i','o'
  3472. ,'n','g','e','n','e','r','a','l','_','c'
  3473. ,'o','m','p','o','n','e','n','t','_','a'
  3474. ,'s','s','o','c','i','a','t','i','o','n'
  3475. ,'s','p','r','a','g','m','a','t','y','p'
  3476. ,'e','_','d','e','c','l','a','r','a','t'
  3477. ,'i','o','n','b','a','s','i','c','_','d'
  3478. ,'e','c','l','a','r','a','t','i','o','n'
  3479. ,'s','u','b','t','y','p','e','_','d','e'
  3480. ,'c','l','a','r','a','t','i','o','n','s'
  3481. ,'u','b','p','r','o','g','r','a','m','_'
  3482. ,'d','e','c','l','a','r','a','t','i','o'
  3483. ,'n','p','a','c','k','a','g','e','_','d'
  3484. ,'e','c','l','a','r','a','t','i','o','n'
  3485. ,'t','a','s','k','_','s','p','e','c','i'
  3486. ,'f','i','c','a','t','i','o','n','g','e'
  3487. ,'n','e','r','i','c','_','s','p','e','c'
  3488. ,'i','f','i','c','a','t','i','o','n','g'
  3489. ,'e','n','e','r','i','c','_','i','n','s'
  3490. ,'t','a','n','t','i','a','t','i','o','n'
  3491. ,'r','e','n','a','m','i','n','g','_','d'
  3492. ,'e','c','l','a','r','a','t','i','o','n'
  3493. ,'o','b','j','e','c','t','_','d','e','c'
  3494. ,'l','a','r','a','t','i','o','n','b','a'
  3495. ,'s','i','c','_','c','o','l','o','n','_'
  3496. ,'d','e','c','l','a','r','a','t','i','o'
  3497. ,'n','n','u','m','b','e','r','_','d','e'
  3498. ,'c','l','a','r','a','t','i','o','n','e'
  3499. ,'x','c','e','p','t','i','o','n','_','d'
  3500. ,'e','c','l','a','r','a','t','i','o','n'
  3501. ,'r','e','n','a','m','i','n','g','_','c'
  3502. ,'o','l','o','n','_','d','e','c','l','a'
  3503. ,'r','a','t','i','o','n','i','d','e','n'
  3504. ,'t','i','f','i','e','r','_','l','i','s'
  3505. ,'t','s','u','b','t','y','p','e','_','i'
  3506. ,'n','d','i','c','a','t','i','o','n','['
  3507. ,':','=','e','x','p','r','e','s','s','i'
  3508. ,'o','n',']','c','o','n','s','t','r','a'
  3509. ,'i','n','e','d','_','a','r','r','a','y'
  3510. ,'_','d','e','f','i','n','i','t','i','o'
  3511. ,'n','e','x','p','r','e','s','s','i','o'
  3512. ,'n','{',',','i','d','e','n','t','i','f'
  3513. ,'i','e','r','}','f','u','l','l','_','t'
  3514. ,'y','p','e','_','d','e','c','l','a','r'
  3515. ,'a','t','i','o','n','i','n','c','o','m'
  3516. ,'p','l','e','t','e','_','t','y','p','e'
  3517. ,'_','d','e','c','l','a','r','a','t','i'
  3518. ,'o','n','p','r','i','v','a','t','e','_'
  3519. ,'t','y','p','e','_','d','e','c','l','a'
  3520. ,'r','a','t','i','o','n','t','y','p','e'
  3521. ,'_','d','e','f','i','n','i','t','i','o'
  3522. ,'n','l','e','f','t','_','p','a','r','e'
  3523. ,'n','d','i','s','c','r','i','m','i','n'
  3524. ,'a','n','t','_','s','p','e','c','i','f'
  3525. ,'i','c','a','t','i','o','n','{',';','d'
  3526. ,'i','s','c','r','i','m','i','n','a','n'
  3527. ,'t','_','s','p','e','c','i','f','i','c'
  3528. ,'a','t','i','o','n','}','r','i','g','h'
  3529. ,'t','_','p','a','r','e','n','e','n','u'
  3530. ,'m','e','r','a','t','i','o','n','_','t'
  3531. ,'y','p','e','_','d','e','f','i','n','i'
  3532. ,'t','i','o','n','i','n','t','e','g','e'
  3533. ,'r','_','t','y','p','e','_','d','e','f'
  3534. ,'i','n','i','t','i','o','n','r','e','a'
  3535. ,'l','_','t','y','p','e','_','d','e','f'
  3536. ,'i','n','i','t','i','o','n','a','r','r'
  3537. ,'a','y','_','t','y','p','e','_','d','e'
  3538. ,'f','i','n','i','t','i','o','n','r','e'
  3539. ,'c','o','r','d','_','t','y','p','e','_'
  3540. ,'d','e','f','i','n','i','t','i','o','n'
  3541. ,'a','c','c','e','s','s','_','t','y','p'
  3542. ,'e','_','d','e','f','i','n','i','t','i'
  3543. ,'o','n','d','e','r','i','v','e','d','_'
  3544. ,'t','y','p','e','_','d','e','f','i','n'
  3545. ,'i','t','i','o','n','t','y','p','e','_'
  3546. ,'m','a','r','k','c','o','n','s','t','r'
  3547. ,'a','i','n','t','t','y','p','e','_','n'
  3548. ,'a','m','e','|','s','u','b','t','y','p'
  3549. ,'e','_','n','a','m','e','r','a','n','g'
  3550. ,'e','_','c','o','n','s','t','r','a','i'
  3551. ,'n','t','f','l','o','a','t','i','n','g'
  3552. ,'_','p','o','i','n','t','_','c','o','n'
  3553. ,'s','t','r','a','i','n','t','f','i','x'
  3554. ,'e','d','_','p','o','i','n','t','_','c'
  3555. ,'o','n','s','t','r','a','i','n','t','s'
  3556. ,'i','m','p','l','e','_','e','x','p','r'
  3557. ,'e','s','s','i','o','n','e','n','u','m'
  3558. ,'e','r','a','t','i','o','n','_','l','i'
  3559. ,'t','e','r','a','l','_','s','p','e','c'
  3560. ,'i','f','i','c','a','t','i','o','n','{'
  3561. ,',','e','n','u','m','e','r','a','t','i'
  3562. ,'o','n','_','l','i','t','e','r','a','l'
  3563. ,'_','s','p','e','c','i','f','i','c','a'
  3564. ,'t','i','o','n','}','e','n','u','m','e'
  3565. ,'r','a','t','i','o','n','_','l','i','t'
  3566. ,'e','r','a','l','f','l','o','a','t','i'
  3567. ,'n','g','_','a','c','c','u','r','a','c'
  3568. ,'y','_','d','e','f','i','n','i','t','i'
  3569. ,'o','n','[','r','a','n','g','e','_','c'
  3570. ,'o','n','s','t','r','a','i','n','t',']'
  3571. ,'f','i','x','e','d','_','a','c','c','u'
  3572. ,'r','a','c','y','_','d','e','f','i','n'
  3573. ,'i','t','i','o','n','u','n','c','o','n'
  3574. ,'s','t','r','a','i','n','e','d','_','a'
  3575. ,'r','r','a','y','_','d','e','f','i','n'
  3576. ,'i','t','i','o','n','i','n','d','e','x'
  3577. ,'_','s','u','b','t','y','p','e','_','d'
  3578. ,'e','f','i','n','i','t','i','o','n','{'
  3579. ,',','i','n','d','e','x','_','s','u','b'
  3580. ,'t','y','p','e','_','d','e','f','i','n'
  3581. ,'i','t','i','o','n','}','i','n','d','e'
  3582. ,'x','_','c','o','n','s','t','r','a','i'
  3583. ,'n','t','n','a','m','e','d','i','s','c'
  3584. ,'r','e','t','e','_','r','a','n','g','e'
  3585. ,'{',',','d','i','s','c','r','e','t','e'
  3586. ,'_','r','a','n','g','e','}','r','a','n'
  3587. ,'g','e','s','t','a','r','t','_','o','f'
  3588. ,'_','r','e','c','o','r','d','_','t','y'
  3589. ,'p','e','r','e','c','o','r','d','_','t'
  3590. ,'e','r','m','i','n','a','l','c','o','m'
  3591. ,'p','o','n','e','n','t','_','l','i','s'
  3592. ,'t','{','p','r','a','g','m','a','_','d'
  3593. ,'e','c','l','}','{','c','o','m','p','o'
  3594. ,'n','e','n','t','_','d','e','c','l','a'
  3595. ,'r','a','t','i','o','n','}','c','o','m'
  3596. ,'p','o','n','e','n','t','_','d','e','c'
  3597. ,'l','a','r','a','t','i','o','n','c','l'
  3598. ,'o','s','i','n','g','_','{','p','r','a'
  3599. ,'g','m','a','_','d','e','c','l','}','{'
  3600. ,'c','o','m','p','o','n','e','n','t','_'
  3601. ,'d','e','c','l','a','r','a','t','i','o'
  3602. ,'n','}',''','v','a','r','i','a','n','t'
  3603. ,'_','p','a','r','t','n','u','l','l','_'
  3604. ,'s','t','a','t','e','m','e','n','t','C'
  3605. ,'A','S','E','_','_','i','d','e','n','t'
  3606. ,'i','f','i','e','r','_','_','I','S','{'
  3607. ,'p','r','a','g','m','a','_','v','a','r'
  3608. ,'i','a','n','t','}','_','_','v','a','r'
  3609. ,'i','a','n','t','_','_','{','v','a','r'
  3610. ,'i','a','n','t','}','W','H','E','N','_'
  3611. ,'_','v','a','r','i','a','n','t','_','c'
  3612. ,'h','o','i','c','e','_','_','{','|','v'
  3613. ,'a','r','i','a','n','t','_','c','h','o'
  3614. ,'i','c','e','}','_','_','=','>','v','a'
  3615. ,'r','i','a','n','t','W','H','E','N','_'
  3616. ,'_','v','a','r','i','a','n','t','_','O'
  3617. ,'T','H','E','R','S','_','_','=','>','c'
  3618. ,'h','o','i','c','e','{','b','a','s','i'
  3619. ,'c','_','d','e','c','l','a','r','a','t'
  3620. ,'i','v','e','_','i','t','e','m','}','d'
  3621. ,'e','c','l','a','r','a','t','i','v','e'
  3622. ,'_','p','a','r','t','b','o','d','y','{'
  3623. ,'l','a','t','e','r','_','d','e','c','l'
  3624. ,'a','r','a','t','i','v','e','_','i','t'
  3625. ,'e','m','}','b','a','s','i','c','_','d'
  3626. ,'e','c','l','a','r','a','t','i','v','e'
  3627. ,'_','i','t','e','m','r','e','p','r','e'
  3628. ,'s','e','n','t','a','t','i','o','n','_'
  3629. ,'c','l','a','u','s','e','u','s','e','_'
  3630. ,'c','l','a','u','s','e','l','a','t','e'
  3631. ,'r','_','d','e','c','l','a','r','a','t'
  3632. ,'i','v','e','_','i','t','e','m','p','r'
  3633. ,'o','p','e','r','_','b','o','d','y','b'
  3634. ,'o','d','y','_','s','t','u','b','s','u'
  3635. ,'b','p','r','o','g','r','a','m','_','b'
  3636. ,'o','d','y','p','a','c','k','a','g','e'
  3637. ,'_','b','o','d','y','t','a','s','k','_'
  3638. ,'b','o','d','y','i','n','d','e','x','e'
  3639. ,'d','_','c','o','m','p','o','n','e','n'
  3640. ,'t','s','e','l','e','c','t','e','d','_'
  3641. ,'c','o','m','p','o','n','e','n','t','a'
  3642. ,'t','t','r','i','b','u','t','e','s','e'
  3643. ,'l','e','c','t','o','r','a','t','t','r'
  3644. ,'i','b','u','t','e','_','d','e','s','i'
  3645. ,'g','n','a','t','o','r','c','o','m','p'
  3646. ,'o','n','e','n','t','_','a','s','s','o'
  3647. ,'c','i','a','t','i','o','n','s','a','g'
  3648. ,'g','r','e','g','a','t','e','e','x','p'
  3649. ,'r','e','s','s','i','o','n',',','e','x'
  3650. ,'p','r','e','s','s','i','o','n','{',','
  3651. ,'e','x','p','r','e','s','s','i','o','n'
  3652. ,'}','[',',','o','t','h','e','r','s','='
  3653. ,'>','e','x','p','r','e','s','s','i','o'
  3654. ,'n',']','c','h','o','i','c','e','{','|'
  3655. ,'c','h','o','i','c','e','}','=','>','e'
  3656. ,'x','p','r','e','s','s','i','o','n','{'
  3657. ,',','c','h','o','i','c','e','{','|','c'
  3658. ,'h','o','i','c','e','}','=','>','e','x'
  3659. ,'p','r','e','s','s','i','o','n','}','o'
  3660. ,'t','h','e','r','s','=','>','e','x','p'
  3661. ,'r','e','s','s','i','o','n','g','a','_'
  3662. ,'e','x','p','r','e','s','s','i','o','n'
  3663. ,'{',',','g','a','_','e','x','p','r','e'
  3664. ,'s','s','i','o','n','}','i','d','e','n'
  3665. ,'t','i','f','i','e','r','{','|','i','d'
  3666. ,'e','n','t','i','f','i','e','r','}','='
  3667. ,'>','e','x','p','r','e','s','s','i','o'
  3668. ,'n','{',',','i','d','e','n','t','i','f'
  3669. ,'i','e','r','{','|','i','d','e','n','t'
  3670. ,'i','f','i','e','r','}','=','>','e','x'
  3671. ,'p','r','e','s','s','i','o','n','}','r'
  3672. ,'e','l','a','t','i','o','n','r','e','l'
  3673. ,'a','t','i','o','n','{','A','N','D','_'
  3674. ,'_','r','e','l','a','t','i','o','n','}'
  3675. ,'r','e','l','a','t','i','o','n','{','O'
  3676. ,'R','_','_','r','e','l','a','t','i','o'
  3677. ,'n','}','r','e','l','a','t','i','o','n'
  3678. ,'{','X','O','R','_','_','r','e','l','a'
  3679. ,'t','i','o','n','}','r','e','l','a','t'
  3680. ,'i','o','n','{','A','N','D','_','_','T'
  3681. ,'H','E','N','_','_','r','e','l','a','t'
  3682. ,'i','o','n','}','r','e','l','a','t','i'
  3683. ,'o','n','{','O','R','_','_','E','L','S'
  3684. ,'E','_','_','r','e','l','a','t','i','o'
  3685. ,'n','}','[','r','e','l','a','t','i','o'
  3686. ,'n','a','l','_','o','p','e','r','a','t'
  3687. ,'o','r','_','_','s','i','m','p','l','e'
  3688. ,'_','e','x','p','r','e','s','s','i','o'
  3689. ,'n',']','[','N','O','T',']','I','N','['
  3690. ,'u','n','a','r','y','_','a','d','d','i'
  3691. ,'n','g','_','o','p','e','r','a','t','o'
  3692. ,'r',']','t','e','r','m','{','b','i','n'
  3693. ,'a','r','y','_','a','d','d','i','n','g'
  3694. ,'_','o','p','e','r','a','t','o','r','_'
  3695. ,'_','t','e','r','m','}','f','a','c','t'
  3696. ,'o','r','{','m','u','l','t','i','p','l'
  3697. ,'y','i','n','g','_','o','p','e','r','a'
  3698. ,'t','o','r','_','_','f','a','c','t','o'
  3699. ,'r','}','t','e','r','m','p','r','i','m'
  3700. ,'a','r','y','[','e','x','p','o','n','e'
  3701. ,'n','t','i','a','t','i','n','g','_','o'
  3702. ,'p','e','r','a','t','o','r','_','_','p'
  3703. ,'r','i','m','a','r','y',']','f','a','c'
  3704. ,'t','o','r','h','i','g','h','_','p','r'
  3705. ,'e','c','e','d','e','n','c','e','_','u'
  3706. ,'n','a','r','y','_','o','p','e','r','a'
  3707. ,'t','o','r','p','a','r','e','n','t','h'
  3708. ,'e','s','i','z','e','d','_','e','x','p'
  3709. ,'r','e','s','s','i','o','n','a','l','l'
  3710. ,'o','c','a','t','o','r','q','u','a','l'
  3711. ,'i','f','i','e','d','_','e','x','p','r'
  3712. ,'e','s','s','i','o','n','r','e','l','a'
  3713. ,'t','i','o','n','a','l','_','o','p','e'
  3714. ,'r','a','t','o','r','b','i','n','a','r'
  3715. ,'y','_','a','d','d','i','n','g','_','o'
  3716. ,'p','e','r','a','t','o','r','u','n','a'
  3717. ,'r','y','_','a','d','d','i','n','g','_'
  3718. ,'o','p','e','r','a','t','o','r','m','u'
  3719. ,'l','t','i','p','l','y','i','n','g','_'
  3720. ,'o','p','e','r','a','t','o','r','e','x'
  3721. ,'p','o','n','e','n','t','i','a','t','i'
  3722. ,'n','g','_','o','p','e','r','a','t','o'
  3723. ,'r','e','x','p','a','n','d','e','d','_'
  3724. ,'n','a','m','e','{','p','r','a','g','m'
  3725. ,'a','_','s','t','m','}','s','t','a','t'
  3726. ,'e','m','e','n','t','{','s','t','a','t'
  3727. ,'e','m','e','n','t','}','s','e','q','u'
  3728. ,'e','n','c','e','_','o','f','_','s','t'
  3729. ,'a','t','e','m','e','n','t','s','s','i'
  3730. ,'m','p','l','e','_','s','t','a','t','e'
  3731. ,'m','e','n','t','c','o','m','p','o','u'
  3732. ,'n','d','_','s','t','a','t','e','m','e'
  3733. ,'n','t','{','l','a','b','e','l','}','+'
  3734. ,'a','s','s','i','g','n','m','e','n','t'
  3735. ,'_','s','t','a','t','e','m','e','n','t'
  3736. ,'e','x','i','t','_','s','t','a','t','e'
  3737. ,'m','e','n','t','r','e','t','u','r','n'
  3738. ,'_','s','t','a','t','e','m','e','n','t'
  3739. ,'g','o','t','o','_','s','t','a','t','e'
  3740. ,'m','e','n','t','d','e','l','a','y','_'
  3741. ,'s','t','a','t','e','m','e','n','t','a'
  3742. ,'b','o','r','t','_','s','t','a','t','e'
  3743. ,'m','e','n','t','r','a','i','s','e','_'
  3744. ,'s','t','a','t','e','m','e','n','t','c'
  3745. ,'o','d','e','_','s','t','a','t','e','m'
  3746. ,'e','n','t','c','a','l','l','_','s','t'
  3747. ,'a','t','e','m','e','n','t','i','f','_'
  3748. ,'s','t','a','t','e','m','e','n','t','c'
  3749. ,'a','s','e','_','s','t','a','t','e','m'
  3750. ,'e','n','t','l','o','o','p','_','s','t'
  3751. ,'a','t','e','m','e','n','t','b','l','o'
  3752. ,'c','k','_','s','t','a','t','e','m','e'
  3753. ,'n','t','a','c','c','e','p','t','_','s'
  3754. ,'t','a','t','e','m','e','n','t','s','e'
  3755. ,'l','e','c','t','_','s','t','a','t','e'
  3756. ,'m','e','n','t','l','a','b','e','l','c'
  3757. ,'o','n','d','i','t','i','o','n','_','_'
  3758. ,'T','H','E','N','_','_','s','e','q','u'
  3759. ,'e','n','c','e','_','o','f','_','s','t'
  3760. ,'a','t','e','m','e','n','t','s','{','E'
  3761. ,'L','S','I','F','_','_','c','o','n','d'
  3762. ,'i','t','i','o','n','_','_','T','H','E'
  3763. ,'N','_','_','s','e','q','u','e','n','c'
  3764. ,'e','_','o','f','_','s','t','a','t','e'
  3765. ,'m','e','n','t','s','}','[','E','L','S'
  3766. ,'E','_','_','s','e','q','u','e','n','c'
  3767. ,'e','_','o','f','_','s','t','a','t','e'
  3768. ,'m','e','n','t','s',']','c','o','n','d'
  3769. ,'i','t','i','o','n','C','A','S','E','_'
  3770. ,'_','e','x','p','r','e','s','s','i','o'
  3771. ,'n','_','_','I','S','{','p','r','a','g'
  3772. ,'m','a','_','a','l','t','}','_','_','c'
  3773. ,'a','s','e','_','s','t','a','t','e','m'
  3774. ,'e','n','t','_','a','l','t','e','r','n'
  3775. ,'a','t','i','v','e','_','_','{','c','a'
  3776. ,'s','e','_','s','t','a','t','e','m','e'
  3777. ,'n','t','_','a','l','t','e','r','n','a'
  3778. ,'t','i','v','e','}','W','H','E','N','_'
  3779. ,'_','c','h','o','i','c','e','_','_','{'
  3780. ,'|','c','h','o','i','c','e','}','_','_'
  3781. ,'=','>','c','a','s','e','_','s','t','a'
  3782. ,'t','e','m','e','n','t','_','a','l','t'
  3783. ,'e','r','n','a','t','i','v','e','W','H'
  3784. ,'E','N','_','_','O','T','H','E','R','S'
  3785. ,'_','_','=','>','[','l','o','o','p','_'
  3786. ,'i','d','e','n','t','i','f','i','e','r'
  3787. ,':',']','l','o','o','p','_','t','e','r'
  3788. ,'m','i','n','a','l','[','i','d','e','n'
  3789. ,'t','i','f','i','e','r',']','i','t','e'
  3790. ,'r','a','t','i','o','n','_','r','u','l'
  3791. ,'e','b','e','g','i','n','_','e','n','d'
  3792. ,'_','b','l','o','c','k','d','e','c','l'
  3793. ,'a','r','a','t','i','v','e','_','p','a'
  3794. ,'r','t','_','_','b','e','g','i','n','_'
  3795. ,'e','n','d','_','b','l','o','c','k','b'
  3796. ,'e','g','i','n','_','t','e','r','m','i'
  3797. ,'n','a','l','e','x','c','e','p','t','i'
  3798. ,'o','n','_','t','e','r','m','i','n','a'
  3799. ,'l','{','p','r','a','g','m','a','_','a'
  3800. ,'l','t','}','_','_','e','x','c','e','p'
  3801. ,'t','i','o','n','_','h','a','n','d','l'
  3802. ,'e','r','_','l','i','s','t','[','b','l'
  3803. ,'o','c','k','_','i','d','e','n','t','i'
  3804. ,'f','i','e','r',':',']','d','e','c','l'
  3805. ,'a','r','e','_','t','e','r','m','i','n'
  3806. ,'a','l','s','u','b','p','r','o','g','r'
  3807. ,'a','m','_','s','p','e','c','i','f','i'
  3808. ,'c','a','t','i','o','n','s','t','a','r'
  3809. ,'t','_','i','d','e','n','t','i','f','i'
  3810. ,'e','r','p','a','r','a','m','e','t','e'
  3811. ,'r','_','s','p','e','c','i','f','i','c'
  3812. ,'a','t','i','o','n','{',';','p','a','r'
  3813. ,'a','m','e','t','e','r','_','s','p','e'
  3814. ,'c','i','f','i','c','a','t','i','o','n'
  3815. ,'}','d','e','s','i','g','n','a','t','o'
  3816. ,'r','m','o','d','e','g','e','n','e','r'
  3817. ,'i','c','_','p','a','r','a','m','e','t'
  3818. ,'e','r','_','m','o','d','e','s','u','b'
  3819. ,'p','r','o','g','r','a','m','_','s','p'
  3820. ,'e','c','i','f','i','c','a','t','i','o'
  3821. ,'n','_','_','I','S','[','e','n','d','_'
  3822. ,'d','e','s','i','g','n','a','t','o','r'
  3823. ,']','p','a','c','k','a','g','e','_','s'
  3824. ,'p','e','c','i','f','i','c','a','t','i'
  3825. ,'o','n','P','A','C','K','A','G','E','_'
  3826. ,'_','s','t','a','r','t','_','i','d','e'
  3827. ,'n','t','i','f','i','e','r','_','_','I'
  3828. ,'S','{','b','a','s','i','c','_','d','e'
  3829. ,'c','l','a','r','a','t','i','v','e','_'
  3830. ,'i','t','e','m','}',''','p','r','i','v'
  3831. ,'a','t','e','_','t','e','r','m','i','n'
  3832. ,'a','l','P','A','C','K','A','G','E','_'
  3833. ,'_','B','O','D','Y','_','_','s','t','a'
  3834. ,'r','t','_','i','d','e','n','t','i','f'
  3835. ,'i','e','r','_','_','I','S','{',',','e'
  3836. ,'x','p','a','n','d','e','d','_','n','a'
  3837. ,'m','e','}','T','A','S','K','_','_','s'
  3838. ,'t','a','r','t','_','i','d','e','n','t'
  3839. ,'i','f','i','e','r','_','_','I','S','{'
  3840. ,'e','n','t','r','y','_','d','e','c','l'
  3841. ,'a','r','a','t','i','o','n','}','_','_'
  3842. ,'{','r','e','p','r','e','s','e','n','t'
  3843. ,'a','t','i','o','n','_','c','l','a','u'
  3844. ,'s','e','}','T','A','S','K','_','_','T'
  3845. ,'Y','P','E','_','_','s','t','a','r','t'
  3846. ,'_','i','d','e','n','t','i','f','i','e'
  3847. ,'r','_','_','I','S','T','A','S','K','_'
  3848. ,'_','B','O','D','Y','_','_','s','t','a'
  3849. ,'r','t','_','i','d','e','n','t','i','f'
  3850. ,'i','e','r','_','_','I','S','[','(','d'
  3851. ,'i','s','c','r','e','t','e','_','r','a'
  3852. ,'n','g','e',')',']','[','f','o','r','m'
  3853. ,'a','l','_','p','a','r','t',']','e','n'
  3854. ,'t','r','y','_','d','e','c','l','a','r'
  3855. ,'a','t','i','o','n','[','(','e','x','p'
  3856. ,'r','e','s','s','i','o','n',')',']','['
  3857. ,'f','o','r','m','a','l','_','p','a','r'
  3858. ,'t',']','A','C','C','E','P','T','_','_'
  3859. ,'s','t','a','r','t','_','i','d','e','n'
  3860. ,'t','i','f','i','e','r','_','_','[','('
  3861. ,'e','x','p','r','e','s','s','i','o','n'
  3862. ,')',']','[','f','o','r','m','a','l','_'
  3863. ,'p','a','r','t',']','_','_','D','O','s'
  3864. ,'e','l','e','c','t','i','v','e','_','w'
  3865. ,'a','i','t','c','o','n','d','i','t','i'
  3866. ,'o','n','a','l','_','e','n','t','r','y'
  3867. ,'_','c','a','l','l','t','i','m','e','d'
  3868. ,'_','e','n','t','r','y','_','c','a','l'
  3869. ,'l','s','e','l','e','c','t','_','t','e'
  3870. ,'r','m','i','n','a','l','s','e','l','e'
  3871. ,'c','t','_','a','l','t','e','r','n','a'
  3872. ,'t','i','v','e','{','O','R','_','_','s'
  3873. ,'e','l','e','c','t','_','a','l','t','e'
  3874. ,'r','n','a','t','i','v','e','}','W','H'
  3875. ,'E','N','_','_','c','o','n','d','i','t'
  3876. ,'i','o','n','_','_','=','>','_','_','s'
  3877. ,'e','l','e','c','t','i','v','e','_','w'
  3878. ,'a','i','t','_','a','l','t','e','r','n'
  3879. ,'a','t','i','v','e','s','e','l','e','c'
  3880. ,'t','i','v','e','_','w','a','i','t','_'
  3881. ,'a','l','t','e','r','n','a','t','i','v'
  3882. ,'e','a','c','c','e','p','t','_','a','l'
  3883. ,'t','e','r','n','a','t','i','v','e','d'
  3884. ,'e','l','a','y','_','a','l','t','e','r'
  3885. ,'n','a','t','i','v','e','t','e','r','m'
  3886. ,'i','n','a','t','e','_','a','l','t','e'
  3887. ,'r','n','a','t','i','v','e','[','s','e'
  3888. ,'q','u','e','n','c','e','_','o','f','_'
  3889. ,'s','t','a','t','e','m','e','n','t','s'
  3890. ,']','T','E','R','M','I','N','A','T','E'
  3891. ,'_','_',';','c','a','l','l','_','s','t'
  3892. ,'a','t','e','m','e','n','t','_','_','['
  3893. ,'s','e','q','u','e','n','c','e','_','o'
  3894. ,'f','_','s','t','a','t','e','m','e','n'
  3895. ,'t','s',']','e','l','s','e','_','t','e'
  3896. ,'r','m','i','n','a','l','o','r','_','t'
  3897. ,'e','r','m','i','n','a','l','d','e','l'
  3898. ,'a','y','_','a','l','t','e','r','n','a'
  3899. ,'t','i','v','e','_','i','n','_','t','i'
  3900. ,'m','e','d','_','e','n','t','r','y','{'
  3901. ,',','n','a','m','e','}','{','c','o','m'
  3902. ,'p','i','l','a','t','i','o','n','_','u'
  3903. ,'n','i','t','}','p','r','a','g','m','a'
  3904. ,'_','h','e','a','d','e','r','c','o','m'
  3905. ,'p','i','l','a','t','i','o','n','_','u'
  3906. ,'n','i','t','c','o','n','t','e','x','t'
  3907. ,'_','c','l','a','u','s','e','l','i','b'
  3908. ,'r','a','r','y','_','o','r','_','s','e'
  3909. ,'c','o','n','d','a','r','y','_','u','n'
  3910. ,'i','t','s','u','b','u','n','i','t','{'
  3911. ,'w','i','t','h','_','c','l','a','u','s'
  3912. ,'e','{','u','s','e','_','c','l','a','u'
  3913. ,'s','e','}','}','{',',','u','s','e','d'
  3914. ,'_','i','d','e','n','t','i','f','i','e'
  3915. ,'r','}','w','i','t','h','_','c','l','a'
  3916. ,'u','s','e','S','E','P','A','R','A','T'
  3917. ,'E','_','_','(','_','_','e','x','p','a'
  3918. ,'n','d','e','d','_','n','a','m','e','_'
  3919. ,'_',')','W','H','E','N','_','_','e','x'
  3920. ,'c','e','p','t','i','o','n','_','c','h'
  3921. ,'o','i','c','e','_','_','{','|','e','x'
  3922. ,'c','e','p','t','i','o','n','_','c','h'
  3923. ,'o','i','c','e','}','_','_','=','>','e'
  3924. ,'x','c','e','p','t','i','o','n','_','h'
  3925. ,'a','n','d','l','e','r','e','x','c','e'
  3926. ,'p','t','i','o','n','_','c','h','o','i'
  3927. ,'c','e','g','e','n','e','r','i','c','_'
  3928. ,'f','o','r','m','a','l','_','p','a','r'
  3929. ,'t','g','e','n','e','r','i','c','_','t'
  3930. ,'e','r','m','i','n','a','l','{','g','e'
  3931. ,'n','e','r','i','c','_','p','a','r','a'
  3932. ,'m','e','t','e','r','_','d','e','c','l'
  3933. ,'a','r','a','t','i','o','n','}','g','e'
  3934. ,'n','e','r','i','c','_','p','a','r','a'
  3935. ,'m','e','t','e','r','_','d','e','c','l'
  3936. ,'a','r','a','t','i','o','n','g','e','n'
  3937. ,'e','r','i','c','_','t','y','p','e','_'
  3938. ,'d','e','f','i','n','i','t','i','o','n'
  3939. ,'[','I','S','_','_','n','a','m','e','_'
  3940. ,'_','o','r','_','_','<','>',']','g','e'
  3941. ,'n','e','r','i','c','_','a','s','s','o'
  3942. ,'c','i','a','t','i','o','n','{',',','g'
  3943. ,'e','n','e','r','i','c','_','a','s','s'
  3944. ,'o','c','i','a','t','i','o','n','}','F'
  3945. ,'U','N','C','T','I','O','N','_','_','d'
  3946. ,'e','s','i','g','n','a','t','o','r','_'
  3947. ,'_','I','S','[','g','e','n','e','r','i'
  3948. ,'c','_','f','o','r','m','a','l','_','p'
  3949. ,'a','r','a','m','e','t','e','r','=','>'
  3950. ,']','g','e','n','e','r','i','c','_','a'
  3951. ,'c','t','u','a','l','_','p','a','r','a'
  3952. ,'m','e','t','e','r','g','e','n','e','r'
  3953. ,'i','c','_','f','o','r','m','a','l','_'
  3954. ,'p','a','r','a','m','e','t','e','r','g'
  3955. ,'e','n','e','r','i','c','_','a','c','t'
  3956. ,'u','a','l','_','p','a','r','a','m','e'
  3957. ,'t','e','r','l','e','n','g','t','h','_'
  3958. ,'c','l','a','u','s','e','e','n','u','m'
  3959. ,'e','r','a','t','i','o','n','_','r','e'
  3960. ,'p','r','e','s','e','n','t','a','t','i'
  3961. ,'o','n','_','c','l','a','u','s','e','a'
  3962. ,'d','d','r','e','s','s','_','c','l','a'
  3963. ,'u','s','e','r','e','c','o','r','d','_'
  3964. ,'r','e','p','r','e','s','e','n','t','a'
  3965. ,'t','i','o','n','_','c','l','a','u','s'
  3966. ,'e','{','c','o','m','p','o','n','e','n'
  3967. ,'t','_','c','l','a','u','s','e','}','''
  3968. ,'a','l','i','g','n','m','e','n','t','_'
  3969. ,'c','l','a','u','s','e','c','o','m','p'
  3970. ,'o','n','e','n','t','_','c','l','a','u'
  3971. ,'s','e','{','p','r','a','g','m','a','_'
  3972. ,'v','a','r','i','a','n','t','}','{','p'
  3973. ,'r','a','g','m','a','_','a','l','t','}'
  3974. ,'d','i','s','c','r','i','m','i','n','a'
  3975. ,'n','t','_',';','{','v','a','r','i','a'
  3976. ,'n','t','}','{','|','c','h','o','i','c'
  3977. ,'e','}','{','b','a','s','i','c','_','d'
  3978. ,'e','c','l','a','r','a','t','i','v','e'
  3979. ,'_','i','t','e','m','}','_','_','b','a'
  3980. ,'s','i','c','_','d','e','c','l','a','r'
  3981. ,'a','t','i','v','e','_','i','t','e','m'
  3982. ,'|','E','M','P','T','Y','{','b','a','s'
  3983. ,'i','c','_','c','o','l','o','n','_','d'
  3984. ,'e','c','l','a','r','a','t','i','o','n'
  3985. ,'}','g','a','_','e','x','p','r','e','s'
  3986. ,'s','i','o','n','{','|','i','d','e','n'
  3987. ,'t','i','f','i','e','r','}','c','o','n'
  3988. ,'d','i','t','i','o','n','_','_','T','H'
  3989. ,'E','N','E','L','S','I','F','_','_','c'
  3990. ,'o','n','d','i','t','i','o','n','_','_'
  3991. ,'T','H','E','N','{','c','a','s','e','_'
  3992. ,'s','t','a','t','e','m','e','n','t','_'
  3993. ,'a','l','t','e','r','n','a','t','i','v'
  3994. ,'e','}','e','x','c','e','p','t','i','o'
  3995. ,'n','_','h','a','n','d','l','e','r','_'
  3996. ,'l','i','s','t','p','a','r','a','m','e'
  3997. ,'t','e','r','_',';','{','e','n','t','r'
  3998. ,'y','_','d','e','c','l','a','r','a','t'
  3999. ,'i','o','n','}','{','r','e','p','r','e'
  4000. ,'s','e','n','t','a','t','i','o','n','_'
  4001. ,'c','l','a','u','s','e','}','o','p','t'
  4002. ,'i','o','n','a','l','_','s','e','q','u'
  4003. ,'e','n','c','e','_','o','f','_','s','t'
  4004. ,'a','t','e','m','e','n','t','s','u','s'
  4005. ,'e','_','c','l','a','u','s','e','_','l'
  4006. ,'i','s','t','{','|','e','x','c','e','p'
  4007. ,'t','i','o','n','_','c','h','o','i','c'
  4008. ,'e','}','{','c','o','m','p','o','n','e'
  4009. ,'n','t','_','c','l','a','u','s','e','}'
  4010. ,'W','H','E','N','_','_','c','o','n','d'
  4011. ,'i','t','i','o','n','_','_','=','>','s'
  4012. ,'t','a','r','t','_','{','b','a','s','i'
  4013. ,'c','_','c','o','l','o','n','_','d','e'
  4014. ,'c','l','a','r','a','t','i','o','n','}'
  4015. ,'{','b','a','s','i','c','_','c','o','l'
  4016. ,'o','n','_','d','e','c','l','a','r','a'
  4017. ,'t','i','o','n','}',''')  ;
  4018.         --| Table of symbols used in the grammar.
  4019.         -- NYU Reference Name: NO_SYM
  4020.      
  4021.     LeftHandSide :
  4022.          constant array (LeftHandSideRange)
  4023.          of GrammarSymbolRange :=
  4024.           (  100,  100,  102,  102,  102,  102,  102,  102,  102,  102
  4025. ,  111,  111,  111,  111,  110,  110,  110,  110,  112,  115
  4026. ,  101,  101,  101,  121,  121,  124,  124,  124,  124,  124
  4027. ,  124,  124,  103,  116,  116,  136,  137,  137,  137,  137
  4028. ,  135,  139,  139,  129,  143,  145,  145,  130,  131,  131
  4029. ,  140,  146,  141,  148,  132,  132,  149,  118,  150,  152
  4030. ,  154,  154,  156,  156,  133,  159,  159,  159,  162,  126
  4031. ,  165,  170,  170,  172,  172,  172,  134,  122,  122,  174
  4032. ,  174,  177,  177,  177,  180,  180,  180,  180,  180,  180
  4033. ,  180,  175,  175,  181,  181,  181,  153,  153,  153,  153
  4034. ,  153,  153,  186,  187,  187,  189,  189,  189,  188,  190
  4035. ,  190,  190,  190,  192,  191,  191,  191,  191,  191,  191
  4036. ,   99,   99,   99,  119,  119,  119,  119,  119,  119,  201
  4037. ,  201,  142,  211,  214,  214,  216,  212,  212,  212,  212
  4038. ,  212,  212,  212,  219,  219,  219,  219,  219,  219,  220
  4039. ,  220,  220,  221,  221,  215,  215,  222,  222,  222,  222
  4040. ,  223,  218,  218,  217,  217,  217,  217,  228,  226,  226
  4041. ,  226,  226,  229,  229,  229,  229,  229,  229,  229,  229
  4042. ,  229,  229,  230,  230,  230,  230,  230,  230,  247,  166
  4043. ,  232,  241,  251,  242,  255,  255,  243,  243,  260,  260
  4044. ,  260,  262,  261,  261,  244,  244,  233,  233,  233,  233
  4045. ,  234,  234,  235,  104,  268,  268,  268,  268,  272,  272
  4046. ,  270,  273,  273,  274,  274,  274,  183,  240,  105,  277
  4047. ,  277,  184,  184,  123,  123,  123,  123,  179,  114,  114
  4048. ,  109,  109,  106,  106,  106,  106,  185,  288,  245,  245
  4049. ,  236,  246,  246,  246,  291,  295,  295,  298,  298,  298
  4050. ,  299,  300,  301,  303,  292,  293,  237,   98,  310,  311
  4051. ,  311,  311,  313,  313,  313,  313,  313,  313,  313,  312
  4052. ,  317,  182,  182,  182,  314,  113,  320,  321,  321,  238
  4053. ,  238,  107,  107,  322,  325,  325,  325,  325,  326,  326
  4054. ,  326,  326,  326,  326,  326,  326,  108,  108,  108,  108
  4055. ,  108,  108,  328,  332,  332,  333,  178,  178,  178,  178
  4056. ,  334,  335,  337,  337,  340,  339,  336,  239,  160,  160
  4057. ,  341,  341,  225,  225,  342,  342,  117,  117,  120,  120
  4058. ,  138,  224,  224,  144,  144,  147,  147,  151,  151,  155
  4059. ,  155,  161,  161,  127,  127,  344,  344,  345,  345,  173
  4060. ,  173,  173,  176,  176,  193,  193,  195,  196,  196,  194
  4061. ,  194,  197,  348,  348,  348,  198,  198,  199,  200,  200
  4062. ,  349,  349,  202,  202,  203,  203,  204,  204,  205,  205
  4063. ,  206,  206,  207,  207,  208,  208,  209,  209,  209,  210
  4064. ,  210,  213,  213,  227,  227,  231,  231,  248,  249,  249
  4065. ,  250,  250,  352,  352,  257,  257,  259,  259,  266,  266
  4066. ,  265,  353,  353,  271,  271,  276,  276,  276,  282,  282
  4067. ,  355,  355,  356,  356,  287,  287,  287,  287,  289,  289
  4068. ,  289,  289,  296,  296,  302,  302,  308,  308,  309,  309
  4069. ,  315,  315,  358,  358,  316,  316,  359,  359,  324,  324
  4070. ,  327,  327,  327,  329,  329,  331,  331,  360,  360,  158
  4071. ,  163,  164,  157,  167,  169,  171,  254,  256,  323,  252
  4072. ,  253,  258,  263,  168,  264,  267,  278,  269,  279,  284
  4073. ,  280,  281,  283,  285,  286,  290,  294,  304,  357,  307
  4074. ,  297,  361,  319,  330,  275,  338,  318,  347,  362,  363
  4075. ,  363,  346,  346,  350,  351,  305,  306,  343,  354,  125
  4076. ,  128)  ;
  4077.         --| Map of the grammar rule number (constant array ) to
  4078.         --| numeric value of left hand side symbol.
  4079.         -- NYU Reference Name: LHS
  4080.      
  4081.     RightHandSide :
  4082.          constant array (RightHandSideRange)
  4083.          of GC.ParserInteger :=
  4084.           (    6,    3,    1,    1,    1,    1,    1,    1,    1,    1
  4085. ,    1,    1,    1,    1,    5,    6,    5,    6,    6,    2
  4086. ,    1,    1,    1,    4,    8,    2,    2,    2,    2,    2
  4087. ,    2,    2,    5,    1,    2,    1,    1,    1,    1,    3
  4088. ,    2,    2,    4,    4,    1,    1,    1,    1,    1,    1
  4089. ,    2,    2,    2,    2,    1,    1,    7,    4,    3,    4
  4090. ,    2,    1,    1,    3,    5,    4,    4,    2,    5,    4
  4091. ,    5,    2,    2,    1,    3,    2,    2,    3,    7,    1
  4092. ,    3,    1,    1,    1,    1,    1,    1,    1,    1,    1
  4093. ,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1
  4094. ,    1,    1,    4,    3,    3,    1,    1,    1,    3,    1
  4095. ,    1,    1,    1,    3,    2,    5,    5,    3,    3,    1
  4096. ,    1,    4,    2,    1,    1,    1,    1,    1,    1,    2
  4097. ,    3,    1,    1,    2,    2,    3,    1,    1,    1,    1
  4098. ,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1
  4099. ,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1
  4100. ,    1,    3,    3,    2,    5,    4,    4,    3,    1,    1
  4101. ,    2,    2,    1,    1,    1,    1,    1,    1,    1,    1
  4102. ,    1,    1,    1,    1,    1,    1,    1,    1,    3,    2
  4103. ,    4,    7,    1,    5,    2,    2,    7,    8,    2,    4
  4104. ,    5,    2,    3,    5,    5,    4,    2,    4,    3,    5
  4105. ,    2,    3,    3,    2,    2,    6,    4,    8,    1,    1
  4106. ,    4,    1,    2,    1,    2,    3,    4,    2,    2,    4
  4107. ,    6,    5,    4,    6,   10,    5,    9,    4,    6,    6
  4108. ,    5,    4,    3,    4,    5,    5,    4,    4,    4,    5
  4109. ,    3,    1,    1,    1,    7,    2,    2,    1,    1,    1
  4110. ,    2,    2,    2,    2,    8,    9,    4,    1,    2,    5
  4111. ,    2,    2,    1,    1,    1,    1,    1,    1,    1,    1
  4112. ,    4,    4,    6,    6,    2,    4,    2,    1,    1,    2
  4113. ,    3,    3,    3,    2,    5,    5,    9,    4,    3,    2
  4114. ,    2,    2,    2,    1,    1,    1,    4,    8,    4,    8
  4115. ,    4,    8,    1,    1,    1,    1,    1,    1,    1,    1
  4116. ,    5,    5,    9,   10,    5,    4,    6,    4,    0,    2
  4117. ,    0,    2,    0,    2,    0,    2,    0,    2,    0,    3
  4118. ,    1,    1,    3,    0,    3,    0,    1,    0,    3,    0
  4119. ,    3,    0,    3,    0,    3,    0,    2,    0,    3,    1
  4120. ,    3,    2,    1,    3,    3,    3,    4,    0,    3,    0
  4121. ,    2,    3,    1,    3,    2,    1,    3,    4,    0,    3
  4122. ,    0,    3,    3,    3,    3,    3,    3,    3,    4,    4
  4123. ,    4,    4,    0,    2,    1,    2,    1,    2,    3,    1
  4124. ,    3,    0,    2,    1,    3,    1,    2,    2,    0,    3
  4125. ,    0,    2,    0,    2,    0,    2,    0,    1,    0,    2
  4126. ,    2,    1,    2,    0,    3,    0,    1,    1,    0,    3
  4127. ,    1,    3,    0,    3,    0,    4,    3,    7,    0,    4
  4128. ,    3,    7,    0,    3,    1,    1,    0,    3,    1,    2
  4129. ,    0,    3,    1,    3,    0,    3,    0,    3,    0,    2
  4130. ,    0,    2,    2,    0,    3,    1,    3,    1,    3,    1
  4131. ,    1,    1,    0,    3,    1,    1,    4,    3,    1,    3
  4132. ,    3,    1,    1,    3,    1,    1,    3,    1,    1,    2
  4133. ,    1,    4,    3,    4,    4,    4,    1,    2,    3,    1
  4134. ,    2,    3,    4,    3,    2,    1,    4,    4,    0,    3
  4135. ,    0,    3,    1,    2,    3,    1,    1,    1,    1,    1
  4136. ,    1)  ;
  4137.         --| Map of the grammar rule number (constant array ) to
  4138.         --| size of right hand sides (number of symbols).
  4139.         -- NYU Reference Name: RHS
  4140.      
  4141.     ActionTableOne :
  4142.          constant array (ActionTableOneRange)
  4143.          of GC.ParserInteger :=
  4144.           ( 7231,   54,    0,    0,    0,   55,    0,    0,    0,    0
  4145. ,  960,    0,  510,    0,   58,   59, 7234,   61, 7237,   63
  4146. ,    0,    0,   64,   65,   66,   67,    0,   68,   69,   70
  4147. ,   71,   72,   49,    0,   73,    0,    0,  313,    0,    0
  4148. ,    0,    0,    0,  100,    0,  101,  102,  103,    0,    0
  4149. ,    0,    0,    0,  356,    0,   50,    0,    0,    0,    0
  4150. ,    0,    0,    0,    0,  620,    0,   51,  950,    0,    0
  4151. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4152. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4153. ,    0,   79,    0,  625,    0,    0,  295,    0,  176,   52
  4154. ,   53,   54,    0,    0,    0,   55,  178,  179,    0,  212
  4155. ,  213, 7240, 7243,    0,   58,   59,   60, 7246,   62, 7249
  4156. ,    0,  787,   64,   65, 7252, 7255,  398, 7259,   69, 7263
  4157. , 7266,   72,    0,    0, 7271,    0, 1496,  105,    0,  429
  4158. , 1412, 7274,    0, 7277, 7280,    0,    0,    0, 7283,    0
  4159. ,    0,    0, 7286,    0, 1496,    0,    0,    0,    0,    0
  4160. ,    0,  433,   38,   39,   40,    0,  434,    0,  435, 7289
  4161. ,    0,    0,    0,  323,    0,  673,    0, 1412,   79,    0
  4162. ,  436,    0,   43,   44,    0,    0,    0,    0,    0,    0
  4163. ,    0,  425,  774, 7292,   43,   44,    0,    0,   45, 1416
  4164. ,    0, 7295,    0, 7298, 7301,    0,    0,  437,    0,    0
  4165. ,    0,    0,    0,  429, 7304,    0,    0, 7307,  431,    0
  4166. ,  183,    0, 1412,   86,    0,    0,  432,    0,    0,    0
  4167. ,  231,    0, 7310,    0,    0,  433,   93,  855,    0,    0
  4168. ,  434,    0, 7313,    0,    0,  892,    0,    0,  981,    0
  4169. ,    0, 1412,   97,    0,  436,    0,   43,   44,  523,    0
  4170. ,    0, 7316,    0,    0,  698,    0,    0,    0, 7319, 7322
  4171. ,  606,   16,    0,    0,    0,  144,    0, 7325,    0,    0
  4172. , 7328, 7331,  660,  763,    0,  607,    0,    0,    0,  438
  4173. ,    0,    0, 7335,    0,  426,   80,    0,  608,    0,    0
  4174. ,  609,   52, 7338,   54,   79,  428,   37,    0,    0,    0
  4175. ,    0,    0,    0,   52,   53,   54,    0,    0,    0,   55
  4176. ,    0,    0,    0,    0, 7341,   39,   40,    0,    0,  319
  4177. ,    0,    0,    0,  183,    0,  232,   64,   65, 7346, 7349
  4178. ,   40, 7352, 7355,   70, 7359, 7362,  444, 7365, 7368,  447
  4179. , 7371, 7374,  450, 7377, 7380, 7383, 7390, 7393, 7397,  457
  4180. , 7400,  459,  460,   46,    0,   47,    0, 7403,  122,   42
  4181. ,   43, 7407, 7411,  996, 7414,   52,   53, 7417,    0, 7420
  4182. ,    0,  463,   81,    0,    0,  611,    0, 7423,   39,   40
  4183. ,  438,    0,    0,    0,    0,    0,    0,  777,  558,    0
  4184. ,    0,    0,  545,    0,    0,  464,  465, 7426, 7430, 7433
  4185. ,    0,  131,    0,    0,  373,  441,    0,  122, 7436, 7439
  4186. , 7442, 7445,  446, 7448,  448,  449, 7451,  451, 7454,  453
  4187. ,  454, 7458,  456, 7461,  458,  459,  460,    0,  489,    0
  4188. ,  118,  461,  171,  712,    0, 7464,  462,    0,    0,    0
  4189. ,    0,    0,    0,    0,    0,  463, 7467, 7470,    0, 7473
  4190. ,    0,    0,    3,  503,    0,    0,    0,    0,    0,  525
  4191. , 7476, 7479,    0,    0,    0,   52, 7483, 7486,   54,  464
  4192. ,  465, 7489,  467, 7493,    0,    0,  240,    0,    0,   52
  4193. , 7496, 7499,  242,    0, 7502,   55,    0,    0,   64,   65
  4194. , 7505,   67,    0, 7508, 7511, 7514,   71,   72, 7518,    0
  4195. ,   73,    0,   64,   65,   66,   67,    0,   68,   69, 7521
  4196. ,   71, 7525,    0,  710, 7529,    0, 7532,    0,  161,  620
  4197. ,  714,    0,  961,    0,    0,  715,    0,    0,   52,   53
  4198. ,   54,    0,  243,  425,   55,  426,    0,    0,   82,    0
  4199. ,    0, 7537,   39, 7540,   59, 7544, 7547,   62, 7550,    0
  4200. , 1165, 7553, 7556,   66, 7559,  429, 7562,   69, 7565, 7568
  4201. , 7571, 7576,    0,   73, 7579,  217,  470,  218,  432,  938
  4202. ,  464,  385,   42,  386,   44,    0,    0, 7582,  717,  718
  4203. , 7586,  720, 7590, 7594, 7597,    0,  179,    0,    0,  543
  4204. ,    0,  544, 1165, 1412,    0,    0,  436,    0,   43, 7601
  4205. ,    0,    0,  259,  988,  768,    0,    0,    0,    0,    0
  4206. ,  769,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4207. ,    0,    0,  619,  437,  865,  387,    0,    0,    0,    0
  4208. ,    0,  883,    0,    0,    0,    0,  661,    0,    0,    0
  4209. ,  511,  723,    0,    0,    0,    0, 7604,  116,  287,    0
  4210. ,    0,    0,    0,    0,    0,    0,    0,    0,  233, 7607
  4211. ,    0,    0,  162,    4,    5,    6,    7,    0,    0,    8
  4212. ,    0,    0,    0,    0,    0,    0,    0,    0,   38, 7610
  4213. , 7613,   54,    0,  116,  439,    0,    0,  939,    0,    0
  4214. ,  876,   38, 7616, 7620,   54,    0,    0,  440, 7623,    0
  4215. ,    0,  715,  512,  841,    0,    0,    0,   58, 7626, 7629
  4216. , 7633, 7636, 7639,    0,   45,   64,   65, 7642, 7646, 7650
  4217. , 7653, 7656, 7659, 7662, 7665,    0,    0, 7668,    0,    0
  4218. ,   46,    0,   47,  233,    0,  506,    0,    0,    0,    0
  4219. ,    0,   38, 7671,   40,    0,    0,  464,    0,    0,    0
  4220. ,    0,    0,    0,    0,  818,  718,  719, 7674,    0,  721
  4221. ,  442,  443,  444,  445,  446,  447,  448,  449,  450, 7677
  4222. ,  452, 7680, 7683, 7688, 7691, 7694,  458, 7697,  460,    0
  4223. ,   46,    0,   47, 7700,    0,  268,    0,    0, 7703,    0
  4224. ,    0,    0,    0,    0,    0,    0,  171,  463,  287,    0
  4225. ,    0,    0,    0,    0,   38,   39, 7706,  471,    0,  171
  4226. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4227. ,    0,  464,  465, 7709,  467, 7712,    0,    0,    0,   52
  4228. ,   53, 7715,    0,  582, 7718, 7721,   43, 7724,  390, 7727
  4229. , 7730,    0, 7733, 7736,   54,   47,  116,    0, 7739,    0
  4230. ,    0,    0, 7742,   65,   66, 7745,    0, 7748, 7751, 7754
  4231. , 7760, 7763,   63,    0,   73,   64,   65,   66,   67,    0
  4232. ,   68,   69,   70,   71,   72,    0,    0,   73,    0,  165
  4233. ,    0,    0,    0,    0, 7767,    0,    0,    0, 7770,    0
  4234. ,    0,    0,   52,   53,   54,    0,    0,    0,   55,    0
  4235. ,    0,    0,    0,    0,  111,  371,    0,   58,   59,   60
  4236. ,   61, 7773,   63,    0,    0,   64,   65,   66,   67,    0
  4237. ,   68,   69, 7776,   71,   72,    0,    0, 7780,    0,    0
  4238. ,    0,    0,    0,    0,  116,    0,    0,    0,    0,    0
  4239. ,  724,  495,    0,    0,    0,  184,    0,    0,  122,    0
  4240. ,   43,   44,    0,    0,    0,   52,   53,   54,    0,    0
  4241. ,    0,   55,    0,    0,    0,    0,  805,    0,    0,  260
  4242. ,    0,    0,    0,    0,    0,    0,    0,    0,   64, 7783
  4243. ,   66,   67,    0,   68, 7786,   70,   71, 7789,  390,  391
  4244. , 7792,    0,  601,    0,    0,    0,    0,  374,    0,    0
  4245. ,  662,    0,    0,    0,    0, 7795,    0,  118,    0,    0
  4246. ,   37,  270,  271,    0,    0,    0,    0,    0,    0,  940
  4247. ,    0,    0,    0,    0,    0,    0,    0,    0,  167,  725
  4248. ,    0,    0,    0,  620,    0,    0,  894,    0,    0,    0
  4249. ,    0,    0, 7798,   39, 7802,    0,    0,    0,    0,    0
  4250. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4251. ,  273,  953,  621, 7805,    0,    0,    0,    0,    0,   52
  4252. , 7808,   54,  122,   42,   43,   44,    0,    0,   45,    0
  4253. ,    0,   46,    0, 7811,    0,  926,    0,  132,  261,    0
  4254. ,    0,    0,    0, 7814,    0,    0,    0,   75,    0,   76
  4255. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  626
  4256. ,    0,  122,    0,   43,   44,    0,    0,    0,    0,    0
  4257. ,    0,    0,  250,    0,    0,  790, 7817,    0,  954,    0
  4258. ,    0,  375,    0,    0,    0,    0, 7820,    0,  134, 7823
  4259. ,  136,    0,    0,  137,    0,    0,  138,  139,  140,  269
  4260. ,    0,    0,  989,    0,    0,  884,    0,    0,    0,    0
  4261. ,  171,    0,    0,    0,    0,    0,    0,  920,   38,   39
  4262. ,   40,    0,    0,    0,    0,    0,    0,    0,  997,    0
  4263. ,    0,    0,    0,    0,    0,  274,    0,    0,    0,    0
  4264. ,  857,    0,    0,   52,   53,   54,    0,    0,  122, 7826
  4265. ,   43,   44,    0,    0,   45,    0,    0,   46,    0, 7830
  4266. ,    0,    0,    0,    0,    0,    0,   64,   65, 7833,   67
  4267. ,    0,   68,   69, 7836, 7839,   72,    0,    0,   73,    0
  4268. ,    0,    0,   52,   53,   54,    0,    0,    0,    0,  858
  4269. ,    0,    0,    0,  927,    0,    0,    0,    0,    0,    0
  4270. ,    0,    0,  496,    0,    0,    0,   38,   39,   40,    0
  4271. ,    0,    0,    0,    0,  141,  142,    0,    0,    0,    0
  4272. ,    0,    0,    0,    0,    0, 7842, 7845,    0,    0,    0
  4273. ,    0,    0,    0,    0,    0,    0, 7848, 7851,   43,   44
  4274. ,    0,    0,   45,    0,    0,   46,    0,   47,    0,   37
  4275. ,    0,    0,    0,    0,  235,    0,    0,   38,   39,   40
  4276. ,    0,    0,    0,    0,  750,    0,    0,    0,    0,   52
  4277. ,   53,   54,    0,    0,    0,   55,    0,    0,    0,    0
  4278. ,  806, 7854, 7857,   40,   58,   59, 7860, 7863, 7866, 7870
  4279. , 7873,    0,   64, 7876,   66,   67,   46,   68, 7879,   70
  4280. ,   71,   72,    0,    0,   73,    0,    0,  969,    0,    0
  4281. ,    0,  122, 7883, 7886, 7889,    0,    0,   45,    0,  836
  4282. ,   46,    0,   47,  113,  171,    0,    0,    0,    0,    0
  4283. ,  395, 7892,  473,  474,  475,  476, 7895, 7898,  271,    0
  4284. ,    0,  567,    0,    0,   38, 7901,   40,    0,    0,    0
  4285. ,    0,    0,  792,    0,    0,    0,    0, 7904,   53,   54
  4286. ,    0,    0,    0,   55,  287, 7907,    0,    0,  272,    0
  4287. ,    0,    0,   58,   59, 7910, 7913, 7918, 7921,  656,    0
  4288. , 7925,   65,   66, 7928,    0, 7932, 7935, 7938, 7941,   72
  4289. ,    0,    0, 7944,    0,    0,    0,    0,    0,    0, 7947
  4290. ,    0,    0,    0,    0,  262,    0,    0,    0,   52,   53
  4291. ,   54,  246,    0,    0,   55,    0,    0,    0,  144,   38
  4292. ,   39,   40, 7950, 7953, 7956,   60,   61,   62,   63,    0
  4293. ,    0,   64, 7959, 7962, 7965,    0,   68, 7968, 7971, 7976
  4294. ,   72, 7979,  146,   73,    0,    0,    0,  376,  147,  122
  4295. , 7982, 7985, 7988, 7991,    0, 7994,   65, 7998, 8001, 1448
  4296. , 8004,   69, 8007,   71,   72,  807,    0,   73,    0,    0
  4297. ,    0,    0,    0,  866,    0,    0,    0,    0,  955,    0
  4298. ,    0,    0,    0,    0,    0,    0,    0,  302,    0,    0
  4299. ,    0,    0, 1265,    0,    0,   52,   53,   54,    0,    0
  4300. ,    0,   55,  183, 8010,    0,  395,  146,    0,    0,    0
  4301. ,  148,  274,  147,  275,    0,    0,    0,    0, 8013,   65
  4302. ,   66, 8016,    0,   68,   69,   70, 8019,   72,    0,    0
  4303. ,   73,    0,    0,    0,    0,    0,    0, 8022, 8025,    0
  4304. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4305. ,    0,  428,  403,    0,    0,    0,  126,    0,    0,  184
  4306. ,    0,    0,    0,  116,    0,    0,    0,    0,    0,    0
  4307. , 8029, 8032, 8036,    0,    0,    0,   55,    0,    0, 8039
  4308. ,    0,  361,    0,    0,    0,   58,   59,   60, 8042,   62
  4309. ,   63,  963,    0, 8047,   65,   66,   67,    0, 8050, 8053
  4310. , 8057, 8060, 8063, 8067,    0,   73,   45,  867,    0,   46
  4311. ,    0,   47,  242,    0,    0,    0,    0,    0,    0,    0
  4312. ,   38,   39,   40,    0,    0,  116,    0,    0,  751,    0
  4313. ,    0,    0,  381,  382,    0,    0,  438,    0,    0,    0
  4314. ,  132,  727, 8070,    0,    0,    0,  133,    0,    0,    0
  4315. , 8073,   42, 8076,   44,    0,    0,   45,    0, 1416,   46
  4316. ,  427,   47, 8080,  428,   37,    0,    0,    0,    0,    0
  4317. ,    0,    0,  429, 8083,    0,  729,  430, 8086,  664,    0
  4318. ,    0, 1412,    0,    0,   38, 8089,   40,    0, 8092,    0
  4319. ,    0,  134,  135,  136,  433,    0, 8095, 8099, 8102, 8105
  4320. , 8108, 8111,    0,    0, 8114,    0,    5, 8117,    7,    0
  4321. , 1412, 8121, 1505, 8124,  122, 8127, 8130,   44,    0,    0
  4322. , 8134, 8137, 8141, 8146,    0,   47,  122, 8149, 8153, 8156
  4323. , 1505, 1505,   45,    0,    0,   46,    0,   47,  171,    0
  4324. ,  437, 1505, 1505,  886,   64, 8159, 8162,   67,    0,   68
  4325. , 8165, 8168, 8173, 8177,    0,    0, 8180,    0,    0,   46
  4326. ,    0,   47,    0,    0,    0,    0,    0,    0,    0,    0
  4327. ,    0,   52, 8183,   54,    0,    0,    0,   55,    0,  878
  4328. ,    0,    0,  114,   38, 8186, 8191, 8194,   59,   60,   61
  4329. , 8198, 8201,    0,    0,   64,   65, 8205,   67,    0,   68
  4330. ,   69, 8208, 8212, 8215, 8218,    0,   73,    0,    0,    0
  4331. ,    0,  760,    0,  122, 8221, 8226, 8230, 8233,  142, 8238
  4332. ,   45,    0,   46, 8241,   47,   47,    0,   50,    0,  143
  4333. ,    0,   11,    0,   38, 8244, 8247, 8251,   54,   51,    0
  4334. ,   12,   55,    0,  929, 1094,    0,    0,   52,   53,   54
  4335. ,    0,    0,    0, 8255,    0,    0,    0,    0,   64,   65
  4336. ,   66,   67,    0, 8258, 8261, 8264, 8267, 8270,  567,   45
  4337. , 8274, 8277, 8281, 8284,    0,   68, 8288, 8291, 8295,   72
  4338. ,  445,  446, 8298, 8301, 8305,  450, 8309, 8313, 8316, 8319
  4339. , 8322, 8327,  457,  458, 8331, 8334,   66,   67,    0,   68
  4340. , 8337, 8340, 8344,   72,    0,  462, 8347, 8350, 1094, 1094
  4341. , 1094, 1094, 1336, 8353, 8356, 8360, 8363,  390, 8367, 1094
  4342. , 1094,    0,   38, 8370, 8373,    0, 1094, 1094, 1094,    0
  4343. ,    0,    0,    0,    0,   52, 8376, 8379,   54,  464,  465
  4344. , 8382, 8386, 8389,    0,    0,    0,    0,    0,    0,    0
  4345. ,   58, 8392, 8396, 8399, 8403, 8406,  895, 8409, 8412, 8417
  4346. , 8420, 8424,   68, 8428, 8432, 8436, 8440,   72,    0,   73
  4347. ,   73,    0,    0,    0,    0,    0,    0,    0,    0,  564
  4348. ,  115,    0,    0,    0,   52, 8443,   54, 8446,    0,    0
  4349. ,   55,    0,    0,    0,  383,    0,    0,    0,    0,    0
  4350. ,  808,    0, 8449,    0,    0,    0,  781,  497,   65,  297
  4351. ,   67,    0,   68,   69,   70,   71, 8452,    0,    0,    0
  4352. ,    0,    0,    0,    0,    0,   97,    0,    0,    0,  287
  4353. ,    0,    0,    0,   74,    0,    0,    0,    0,    0,    0
  4354. ,  171,    0,  665,    0,   16,    0,    0,  503,    0,  330
  4355. ,    0,    0,  690,  116,    0, 8455,  183,    0,  730,    0
  4356. ,    0,    0,    0, 8458,    0,    0,    0,    0,    0,    0
  4357. ,    0,    0,    0, 8461,   53,   54,    0,    0,    0,   55
  4358. ,    0,    0,    0,    0,    0,    0,    0,  330,   58,   59
  4359. , 8465,   61,   62,   63,    0,    0,   64,   65,   66, 8468
  4360. ,    0,   68, 8471, 8474, 8478, 8481,    0,    0,   73,    0
  4361. ,    0,    0,    0,  184,  279,  116,  280,  281,    0,    0
  4362. ,    0,    0,    0,  565,  519,    0,  118,    0,    0,    0
  4363. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4364. ,    0,    0,    0,  879,    0,    0,  176,    0,    0,    0
  4365. ,    0,    0,    0,  908,    0,  314,    0,  782,    0,    0
  4366. ,    0,    0,  184,    0,    0,    0,  733,    0,  734,    0
  4367. ,    0,    0,  628,    0,    0, 8484,    0,    0,  868,    0
  4368. ,    0,    0,    0,  395,  146,    0,  735,    0,  118,    0
  4369. ,  147,  242,    0,  579,    0,    0,  964,    0,    0,    0
  4370. , 8487,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4371. ,    0,    0,  301,    0,    0,    0,    0,    0,    0,    0
  4372. ,    0,    0,    0,    0,    0,  794,    0,    0,    0,    0
  4373. ,    0,    0,    0,    0,    0,    0,    0,    0,  282,    0
  4374. ,    0,  302,    0,    0,    0,    0,    0,   38,  144,   40
  4375. ,    0,    0,    0,  250,    0,    0,    0,    0,    0,    0
  4376. ,    0,  517,    0,    0,    0,    0,    0,  343,  426,  783
  4377. ,    0,  145,  146,    0,  301,    0,    0, 8490, 8493, 8496
  4378. ,   44,    0,    0,   45,  648,  752,    0,    0,    0,    0
  4379. ,    0,    0,    0,    0,    0,    0,    0,  326,    0,    0
  4380. ,    0,    0,    0,    0,    0,    0,    0,  183,    0,  317
  4381. ,    0,    0,    0,    0,    0,   79,    0,  602,  773,    0
  4382. ,    0,  710,    0,    0,    0,  711,    0,    0,  116,    0
  4383. ,    0,  784,    0,    0,    0,    0,    0,    0,    0,    0
  4384. ,  847,   37,    0,    0,  183,    0,    0,    0,    0,    0
  4385. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4386. ,  503,    0, 8499,    0, 8502, 8505,    0,    0,  504,    0
  4387. ,    0,    0,    0, 8508,   39,   40,  795,    0,  586,    0
  4388. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4389. ,  116,    0,    0,    0,    0,  183,  956,    0,   52,   53
  4390. ,   54,  699,    0,  122, 8511,   43,   44,    0,    0,   45
  4391. ,    0,    0,   46, 1468, 8514, 8517,  505, 1350,    0,    0
  4392. ,    0,  327,    0,    0,  172,    0,  368,    0,   70,   71
  4393. ,   72,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4394. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4395. ,    0,    0,  184,    0,    0,    0,    0,    0,    0,    0
  4396. ,    0,    0,    0,    0,    0,    0,  116, 8520,    0,    0
  4397. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4398. ,  287,    0, 8523,  344,    0,    0, 8526,  566,  118,  629
  4399. ,    0,  171,  328,    0,    0,    0,    0,    0,  492,   38
  4400. , 8529,   40,    0,    0,    0,    0,    0,    0,    0,  715
  4401. ,    0,    0,    0,    0, 8532,   14,    0,  518,    0,  318
  4402. ,    0,    0,  589,    0,   52,   53,   54,    0,    0,  122
  4403. , 8535,   43,   44,   16,    0,   45,    0,  519,   46, 8539
  4404. ,   47,    0, 8544,    0,    0,  623,    0,   64,   65, 8548
  4405. ,   67,  590,   68,   69, 8551, 8554, 8557,  702,    0,   73
  4406. ,  363, 8560,  717,  718,  719,  720,    0, 8563,    0,  912
  4407. ,    0,    0,    0,    0, 8566,   39,   40,    0,    0,  121
  4408. ,   37,    0,    0,  387,    0,    0,    0,    0,    0,    0
  4409. ,    0,    0,   18,   19,    0,   20,   21,    0,    0,    0
  4410. ,    0,    0,    0,  845,  122,   42, 8569, 8572,    0,    0
  4411. ,   45,    0,   38, 8575,   40, 8578,    0,  171,    0,    0
  4412. ,    0,    0,  248,    0,    0, 8581,    0,    0,    0,    0
  4413. ,   37,    0,    0,    0,    0,    0,    0,  503,    0,    0
  4414. ,    0,    0, 8584,   42,   43, 8587,    0,    0,   45,    0
  4415. , 8590, 8593,   54,   47,    0,    0, 8597,    0,  504,    0
  4416. ,    0,  326,   38,   39, 8600,   58,   59,   60,   61,   62
  4417. ,   63,   22,   23,   64,   65,   66,   67,    0,   68,   69
  4418. ,   70, 8604,   72,    0,    0,   73,    0,    0,   38,   39
  4419. ,   40,    0, 8607, 8610, 8613,   44,    0,    0, 8617, 1357
  4420. ,    0,   46,  809,   47,  242,    0,  991,    0,    0,    0
  4421. , 1357,  126,    0,    0, 1357, 1357, 1357,    0,  122, 8620
  4422. ,   43,   44,  384,    0, 8623,   52,   53, 8626,    0,   47
  4423. , 8629, 8632, 8636, 1357, 8639,    0,  367,    0,    0,    0
  4424. ,    0,    0,    0,    0, 1357, 1357,  567,  591, 8642, 8645
  4425. ,   66,   67,    0,   68, 8649,   70, 8653,   72,    0,    0
  4426. ,   73,    0,    0, 8656, 8660, 8663,   27,    0,  796, 8667
  4427. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  810
  4428. , 8671,    0,    0,    0,    0,  329,   64,   65,   66, 8675
  4429. ,    0,   68,   69, 8678, 8681, 8684, 8688,  630,   73,   45
  4430. ,  754, 8691, 8694,    0,   47,    0, 8697,    0,   43, 8702
  4431. ,   32,   33,   38, 8705, 8708,   54,    0,    0,   34,   55
  4432. ,    0,    0,    0,    0,    0,    0,    0,    0,   58,   59
  4433. ,   60,   61,   62,   63,  811,    0,   64,   65,   66, 8711
  4434. ,   53, 8714, 8717, 8720, 8723, 8726,    0,    0, 8730,    0
  4435. ,    0,   46,    0,   47,    0,    0,  328,    0,    0,    0
  4436. ,    0,    0,   64, 8733,   66,   67,  184, 8737,   69,   70
  4437. , 8740,   72,    0,    0,   73,  568,  880,    0,  569,    0
  4438. ,    0,  125,    0,    0,    0,    0,  145,  146,    0,    0
  4439. ,    0,  944,    0,  147, 8743,    0,   49,    0,    0,  887
  4440. , 8746,    0,    0,    0,    0,    0,    0,    0,    0, 8749
  4441. ,  825,    0,    0,    0,   52, 8752,   54,    0,    0, 8755
  4442. ,   55,    0,    0,    0,    0,    0,   38, 8758, 8761,   54
  4443. ,   51,  603,  506,    0,    0,    0,    0,   64,   65,   66
  4444. ,   67,    0,   68,   69, 8764,   71,   72,    0,    0,   73
  4445. ,    0,    0,    0,    0,   13, 8767,  122,   42,   43,   44
  4446. ,    0,    0,   45, 8770,   53, 8773,    0,   47,    0, 8776
  4447. ,  408,    0,    0,   16,    0,    0, 8779, 8782, 8785,   59
  4448. ,   60,   61,   62,   63,  188,    0,   64,   65, 8789,   67
  4449. ,    0,   68,   69, 8792,   71,   72, 8795,    0,   73,    0
  4450. ,  756,  346,    0,    0,    0,    0, 8798,   42,   43,   44
  4451. ,  744,    0,   45,   85,  503,   46,    0,   47,    0,    0
  4452. ,    0,    0,  504, 1094,    0,  826,    0,    0,    0,    0
  4453. ,    0,  233,  409, 8801,  411,  412,  413,    0, 8804,    0
  4454. ,    0,    0,    0,    0,  171,   84, 1094,    0,    0,    0
  4455. , 1094,    0, 1094,    0,    0, 1094,    0,    0,    0,    0
  4456. ,    0,    0,    0,    0,    0, 1094,  809,    0,    0,    0
  4457. ,  992,  571,    0,    0,    0,  306,  931, 8807, 8810, 8813
  4458. , 8816,    0,    0, 8820,    0, 1094, 1094, 1094, 1094, 1094
  4459. , 1094, 1094, 8823, 8826, 8829, 8833,   62, 8836, 8839, 1094
  4460. ,   64, 8842,   66, 8845,    0, 8849, 8852, 8856, 8860, 8864
  4461. ,  208, 8868, 8871, 8875,  594,    0,  218,    0,    0,    0
  4462. ,  595,  480,    0,    0,  957,  284,    0,   52,   53,   54
  4463. ,    0,    0,    0,   55,    0,    0,    0,    0,    0,    0
  4464. ,    0,    0,    0,  812,    0,    0,    0,  838,    0,    0
  4465. ,   64,   65,   66,   67,  191, 8878, 8881, 8884, 8888, 8891
  4466. , 8895,  198, 8898,    0,    0, 1416,    0,  427,    0, 8901
  4467. ,  428,    0,    0,    0, 8904,  201, 8907,    0,    0,  429
  4468. , 1412,    0,   37,  430,  431,    0,    0,    0, 1412,    0
  4469. ,    0,    0,  432,    0, 1442,   37,  417,  765, 8910,    0
  4470. ,  861,  433,    0,   25,    0,   26, 8913,   37,  435, 8916
  4471. ,    0,  210,    0,  211, 8919,   39, 8922, 1412,    0,    0
  4472. ,  436,    0,   43,   44,    0,  604,    0,   38, 8925,   40
  4473. ,  204,  205,  206,    0,  207,  208, 8928,  102,  103,   38
  4474. ,   39,   40,    0,    0, 8931,   42,  386, 8934,    0,    0
  4475. , 8938,   33,    0,   46,    0, 8941,    0,  122, 8944,   43
  4476. ,   44,    0,    0,   45,    0,    0, 8947,    0,   47,  122
  4477. , 8950,   43,   44,  324,    0,   45,    0,    0,   46,    0
  4478. ,   47,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4479. ,    0,    0,    0,    0,    0,    0,  506,    0,  387,    0
  4480. ,    0,    0, 8953,   39,   40,    0,    0,    0,  439,    0
  4481. ,    0,    0,    0, 1358,    0,    0,    0, 1358, 1358, 1358
  4482. ,    0, 8956,   84,  365,    0,    0,  730,  363, 8960,    0
  4483. ,   26,   27, 8963,   42, 8966, 8971, 8976, 1358, 8979,  106
  4484. ,    0, 8982,   53, 8985,    0,  171,  124, 1358, 1358, 8988
  4485. ,    0, 1358, 1358,    0,    0,    0,  250, 8991,    0,    0
  4486. ,    0,    0,    0,    0,   85,   52,   53,   54,    0,    0
  4487. ,    0,   55,    0,    0,    0,   32, 8994,    0,   52,   53
  4488. , 8997, 9000,   60, 9003, 9007, 9011,  444, 9014, 9018, 9022
  4489. , 9026, 9031, 9035, 9039, 9042, 9045, 9048, 9053,  456, 9056
  4490. , 9059, 9062, 9066,   66,   67,   58, 9069, 9073, 9078, 9081
  4491. , 9085,    0,  462, 9089, 9092,   66, 9095,    0,   68, 9098
  4492. , 9101, 9105,   72,  785,    0,   73,    0,  216,   38, 9108
  4493. , 9112,    0,    0,    0,  828,  572, 9115,    0,  307,    0
  4494. ,    0,    0,  330,    0, 9118, 9121,  465, 9124,  467, 9127
  4495. , 1096, 1096, 1096, 9132, 9135, 9139, 9142, 1096, 9145, 9148
  4496. ,   43, 9151, 1096, 1096,   45, 9154,    0, 9157,    0, 9160
  4497. , 1096, 1096, 1094,    0,    0,    0, 9163,   65, 9166,   67
  4498. ,    0, 9169,   69,   70,   71,   72,    0,  183,   73, 9172
  4499. ,    0, 1094,    0,    0,    0,    0,    0,    0,    0,  523
  4500. ,    0,    0, 9175,   88,    0,    0, 9178, 9181,   37,    0
  4501. , 9184, 9187, 9191, 1094, 1094, 1094, 1094, 1094, 1094, 1094
  4502. , 1094,    0,    0, 1094, 1094, 1094, 9195, 1378, 1094, 9199
  4503. ,    0, 1094, 9202, 1094,    0, 9205,    0,    0,  914,    0
  4504. ,   38, 9208, 9211,    0,  184,    0,  171,    0,    0,    0
  4505. ,    0,    0,    0,    0,    0,    0,    0,  666,    0,   37
  4506. ,    0,   83,  811,  286,    0, 9214,    0,    0,    0,    0
  4507. ,  122,   42,   43,   44,    0,    0,   45,    0,    0, 9217
  4508. ,   53, 9221,    0,    0,    0,   55,    0,    0,    0,    0
  4509. ,    0, 9224,   39,   40,   58,   59, 9227,   61,   62,   63
  4510. ,  738, 9230, 9233,   65,   66,   67,    0,   68, 9236,   70
  4511. ,   71,   72,  531,    0,   73,    0,    0,    0,  915,    0
  4512. ,    0, 9239,   42, 9242, 9245,  535,  536, 9248,  538,  539
  4513. ,   46,    0,   47,  540, 9251, 9254,    0,  985,    0,    0
  4514. ,  543,    0,  544,  545,  704,    0,    0,  287,    0,    0
  4515. ,    0,  546,    0,   38,   39,   40,    0,    0,  171,    0
  4516. ,    0,    0,    0,    0,    0,    0,   38, 9257, 9260,   40
  4517. ,    0,   37,    0,    0,    0, 9263,    0,    0,  217,    0
  4518. ,  218,  330,    0,  122, 9266,   43, 9269,    0,    0,   45
  4519. ,    0, 9272,   53,   54,  629,    0,  122, 9275, 9279, 9283
  4520. ,   44,    0,   45, 9286,   39, 9289, 9292,   47,   47,  125
  4521. , 9295,    0,    0,    0,   64,   65,   66,   67,    0,   68
  4522. ,   69,   70, 9298,   72, 9302,   44,   73,  251, 9305,    0
  4523. ,    0,    0,  830,  122, 9308,   43,   44,    0,    0,   45
  4524. ,    0,    0, 9311, 9314, 9317,    0,    0,  127,   55,  128
  4525. ,    0,  129,    0, 9320, 9323, 9326,   40,   58,   59,   60
  4526. ,   61,   62, 9329,    0,    0,   64,   65,   66,   67,    0
  4527. ,   68, 9332, 9335, 9338, 9343,   44,    0,   73,   45,    0
  4528. ,    0,   46,    0,   47, 9347, 9350, 9354,   44,  763,    0
  4529. ,   45,  120,    0,   46,    0,   47,  309,    0,    0,  574
  4530. , 9357,    0,    0,    0,   52, 9360,   54,  118,    0,    0
  4531. , 9363,    0,  757,    0,    0,  395,  146,   52, 9366, 9369
  4532. ,   54,  171,  147,   55,   55,    0,  567,    0,    0, 9372
  4533. ,   67,    0,  298,   69,   70,   71, 9375,    0,  575,  679
  4534. ,   64, 9378, 9381, 9384, 9388, 9391, 9394, 9398, 9401, 9405
  4535. , 9409,    0,   73,   73,   52,   53,   54,    0,    0,    0
  4536. , 9412,  287,    0,    0,    0,    0,    0,    0,   38,   39
  4537. ,   40,    0, 9415,    0,    0,    0,    0,    0,   65,  173
  4538. ,   67,    0, 9418,   69,   70,   71,   72,    0,  289,    0
  4539. ,    0,    0,    0, 9421, 9424,   54,    0,    0,  122, 9427
  4540. ,   43,   44,    0,    0, 9431, 9434, 9437, 9440,   58, 9443
  4541. ,   60, 9446,   62,   63,  739,    0,   64,   65,   66,   67
  4542. ,   58, 9449, 9453, 9456, 9459, 9462,  151,    0, 9465, 9468
  4543. ,   66,   67,    0,   68, 9471, 9474, 9477, 9480,    0,    0
  4544. , 9483,    0,    0,   46,    0,   47,    0,   37,    0,    0
  4545. ,    0,    0,    0,    0,    0,    0,    0,    0, 9486,    0
  4546. ,    0,    0,    0,    0,    0,    0,  176,    0,  634,    0
  4547. ,    0,    0,    0,  116,   37,  266,    0,    0,  392,   38
  4548. ,   39,   40,  330,  153,    0,  705,  775, 9489,    0,  763
  4549. ,    0,    0,    0,    0,    0,  432,    0,    0,    0,   37
  4550. ,    0,  624,    0,    0,    0,    0,   38, 9492,   40,   41
  4551. ,   42, 9495,   44,    0,    0,   45,    0,    0, 9498,   52
  4552. , 9501,   54, 9505,    0,  849,   55,  958,    0,    0,    0
  4553. ,    0,   38,   39, 9508,    0,    0,  122,   42,   43,   44
  4554. ,  395, 9511, 9514, 9517, 9520, 9523,  118, 9526,   69,   70
  4555. , 9530,   72,    0,    0, 9533,   52,   53, 9536,    0,    0
  4556. ,    0, 9539,   42, 9542,   44,    0,    0, 9545,   88,    0
  4557. , 9548,    0,   47,    0,    0,    0,    0,    0, 9552,   65
  4558. ,   66,   67,    0,   68,   69, 9555, 9558, 9561,   44,    0
  4559. ,   73,    0, 9564,    0,    0,    0,    0,   51,    0,    0
  4560. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4561. ,    0,    0,    0, 9567,  993,  888,    0,  767,  768,    0
  4562. ,    0,    0,    0,   37, 9570,  923,  369,  763,    0,    0
  4563. ,   52,   53, 9573,    0,  620,    0,   55,    0,  287,    0
  4564. ,    0,    0,   56,   57,    0,   58,   59,   60,   61, 9576
  4565. ,   63,    0,    0,   64, 9579, 9582, 9585, 9589, 9592, 9595
  4566. ,   70,   71,   72, 9598,  935,   73,    0,    0,    0,    0
  4567. ,    0,    0,  799,  419,    0,    0,    0,    0,    0,    0
  4568. ,   64,   65, 9601, 9604, 9607, 9610, 9613, 9616, 9619,   72
  4569. ,    0,   45,   73,    0,   46,    0,   47,   58,   59,   60
  4570. ,   61,   62,   63,    0,    0,   64, 9623, 9626, 9629,    0
  4571. ,   68,   69,   70, 9632,   72,  183,    0, 9635,    0,  871
  4572. ,    0,    0,    0,    0,    0,    0,  523,    0,    0,  524
  4573. , 9638,    0,    0,  698,    0,    0,   37,  525,  526,    0
  4574. ,   90,    0,    0,   93,    0,    0,    0,    0,    0,    0
  4575. ,    0,    0,    0,  527,    0,    0,  528,    0,    0,    0
  4576. ,    0,    0,  265,    0,    0,  529,    0,    0, 9641, 9644
  4577. ,   40,    0,  973,  171,    0,    0,    0,    0,    0,    0
  4578. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4579. , 9647,    0, 9650,    0,    0,    0,    0,    0,  122,   42
  4580. ,   43,   44,    0,    0,   45,    0,   52, 9653,   54,   47
  4581. ,    0,    0,   55,    0,    0,    0,    0,    0,    0,    0
  4582. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,   64
  4583. ,   65, 9656,   67,    0,   68,   69, 9659,   71,   72,  531
  4584. ,    0, 9662,  975, 9665,    0,  532,    0,    0,    0,  337
  4585. ,  533,  534,  535,  536,  537,  538,  539,    0,    0,    0
  4586. ,  540,  541,  542,    0,  636,    0,    0,  543,    0,  544
  4587. ,  545,    0,    0,    0,    0,  287,    0,    0,  546, 9668
  4588. ,    0,    0,    0,    0,    0,    0,  171,  116,    0,    0
  4589. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  233
  4590. ,    0,    0,    0,   90,    0,    0,    0,    0,    0,  330
  4591. ,    0,    0,  800,    0,    0,    0,   90,    0,   86,   52
  4592. ,   53,   54,    0,    0,    0,   55,  977, 9671,  978,    0
  4593. ,  524,   87,   88,    0, 9674,    0,    0,  508,  605,  606
  4594. ,    0,    0,   64,   65,   66,   67,    0,   68, 9677,   70
  4595. ,   71,   72,    0,    0, 9680,    0,    0,  503,  770,    0
  4596. ,  118,    0,  655,    0,    0, 9683,  608,    0,    0,  609
  4597. ,    0,    0,    0,    0,    0,    0,    0,  889,    0,    0
  4598. ,    0,    0,    0,    0,  184,    0,    0,    0,    0,    0
  4599. ,    0,    0,  222,  610,    0,    0,    0,    0,  620,  233
  4600. ,    0,    0,    0,  965,    0,    0,    0,  223,    0,    0
  4601. ,    0,    0,    0,  863,    0,    0,    0,    0,    0,    0
  4602. ,  237,    0,    0,    0,  310, 9686, 9689, 9692, 9695,    0
  4603. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4604. , 9698,    0,  658,    0,    0,    0,  301,    0,    0,    0
  4605. ,   37,    0,    0,    0,  611,    0,  612,   38, 9701,   40
  4606. ,    0,    0,    0,    0,    0,    0,    0,    0,  176,    0
  4607. ,    0,  545,    0,    0,    0,    0,    0,    0,  801,    0
  4608. ,    0,   86,   38,   39,   40,    0,    0,  122,   42,   43
  4609. ,   44,    0,    0, 9704,   87,   95,   46,    0,   47,    0
  4610. ,   37,    0,    0,    0,   90,    0,    0,    0,    0,    0
  4611. ,    0,    0, 9707,   42,   43,   44,  979,    0,   45,    0
  4612. ,    0,   46,  484,   47,    0,    0,    0,    0,    0,    0
  4613. ,    0,    0,   38,   39,   40,    0,    0,    0,    0,    0
  4614. ,    0,    0,    0,    0,    0,   52, 9710,  312,    0,    0
  4615. ,    0,    0,    0,    0,    0,    0,    0,  176,    0,    0
  4616. ,    0,    0,  122,   42, 9713,   44,   49,    0, 9716,    0
  4617. ,    0,   46,    0,   47,    0,  171,    0,    0,    0,    0
  4618. ,    0,    0,    0,   96,    0,    0,  155,   79,    0,   50
  4619. ,    0,    0,  740,  338,    0,    0,    0,    0,    0,    0
  4620. ,   51,    0,    0,  683,    0,  395,  146,    0, 9719,   53
  4621. ,   54, 9722,  147,    0,   55,    0,    0,    0,    0,    0
  4622. ,    0,    0,    0,  378,    0,    0,    0,    0,  637,    0
  4623. ,    0,   64,   65, 9725, 9728,   54,   68, 9731,   70, 9735
  4624. ,   72,    0,    0,   73,    0, 9740,   57,   40, 9743,   59
  4625. , 9746,   61, 9749, 9752,    0,    0,   64,   65, 9755,   67
  4626. ,    0,   68,   69, 9758, 9761,   72, 9764,   90,   73,  420
  4627. ,    0,    0,    0,    0,    0,  122,   42,   43,   44,    0
  4628. ,    0,   45,    0, 9767,   53,   54,    0,    0,    0,   55
  4629. ,  525,  526,    0,    0,    0,    0,    0,    0,  292,    0
  4630. ,    0,  273,    0,    0,    0,    0,   64, 9770,   66,   67
  4631. ,  255,   68, 9774,   70, 9777,   72,    0,    0, 9780,  788
  4632. ,    0,  144,    0,    0,  834,    0,    0,   37,    0,    0
  4633. ,    0,    0,    0,    0,  313,    0,    0,    0,    0,    0
  4634. ,    0,  890,  994,  872,    0,  641,    0,    0,    0,    0
  4635. ,    0,  242,    0,    0,    0,    0,    0,    0,    0,   38
  4636. ,   39,   40,    0,  171,    0,    0,    0,    0,    0,    0
  4637. ,    0,    0,    0,    0,    0,    0,  577,    0,    0,    0
  4638. ,    0,    0,    0,    0,    0,    0,    0,    0,   79, 9783
  4639. ,   42, 9786, 9789,    0,    0, 9792,   52,   53, 9795,    0
  4640. ,   47, 9799,   55,    0,    0,    0,    0,    0,    0,  901
  4641. ,    0,  642, 9802,  643, 9805,  645,    0,    0,    0,    0
  4642. ,  543, 9808, 9811, 9815,    0,    0, 9818,   71, 9821,    0
  4643. ,    0,    0,    0,   38,   39,   40,    0,    0, 9824,    0
  4644. ,    0,    0,    0,   49,   77,    0,    0,    0,    0,    0
  4645. ,    0,  122,   42, 9827,   44,    0,    0,   45,  924,    0
  4646. ,   46,    0,   47,  122, 9830,   43, 9833,    0,  598,   45
  4647. ,    0,    0,   46,    0,   47,    0,    0,   51,    0,    0
  4648. ,    0,    0,   45,    0,    0,    0,    0,    0,    0,    0
  4649. ,   37,    0,    0,    0,    0,    0,   38,   39,   40,    0
  4650. ,    0,    0,    0,    0,  947,    0,    0,    0,    0,    0
  4651. ,   52,   53,   54,    0,  242,    0,   55,  123,  183,    0
  4652. ,  864,  852, 9836, 9840,   40,   58, 9843, 9846, 9849, 9853
  4653. , 9857,    0,   45,   64,   65, 9860,   67,   47,   68, 9863
  4654. , 9866,   71,   72,    0,    0,   73,    0,    0,    0,  789
  4655. ,    0,  125,  122,   42,   43,   44,  741,    0,   45,  396
  4656. ,    0,   46,    0,   47,  547,    0, 9869,    0,    0,    0
  4657. ,  126,    0, 9872,   53,   54, 9875,    0,    0, 9879,    0
  4658. ,    0,  766,    0,    0,   52,   53,   54,  379,    0,  127
  4659. ,   55,  128,  314,  129,    0, 9882, 9885, 9888,   67,   58
  4660. , 9891, 9894, 9897, 9900, 9905,    0, 9909, 9912, 9915,   66
  4661. ,   67,    0,   68,   69, 9918,   71,   72,    0,  959,   73
  4662. ,    0,    0,    0,    0,    0,    0,    0, 9921,    0, 9924
  4663. ,    0,    0,    0,    0,  421,  133,    0,    0, 1390,    0
  4664. , 9927,    0,    0,    0,  145,  146,    0,   52,   53,   54
  4665. ,  791,  147,    0, 9930,    0,  174,    0,    0,    0,    0
  4666. ,    0,    0,  293, 1390,    0,    0,    0,    0,    0,    0
  4667. ,   64, 9933, 9936, 9939, 9942, 9945,   69,   70,   71, 9949
  4668. ,  134,  135, 9952, 1071, 1071,  256,    0,    0, 9955, 9959
  4669. , 9962,   61,   62,   63,    0,  176,   64,   65,   66,   67
  4670. ,    0,   68,   69,   70, 9965,   72,  995,    0,   73,    0
  4671. ,    0,  747,    0,  118,    0,  122,    0,   43, 9968,    0
  4672. ,    0,    0,  556,    0,    0,    0,    0,    0,    0,    0
  4673. ,    0,  966,    0,    0,    0,    0,   38,   39, 9971,    0
  4674. ,    0,    0,  339,    0,  615,    0,    0,    0,    0,  177
  4675. ,    0,    0,  315,    0,    0,    0,    0,    0,    0,    0
  4676. ,    0,    0,  185,   13,   14,    0,  122,   42,   43,   44
  4677. ,    0,    0,   45,    0,  330,   46,    0, 9974,    0,  225
  4678. ,    0,    0,   16,    0,    0,  839,    0,  698,    0,    0
  4679. ,    0,    0,  187,  226,    0,  903,  189, 9977,    0,  301
  4680. ,  487,    0,    0,  616,  506,    0,  141,  142,    0,    0
  4681. ,    0,    0,  891,    0,    0,    0,    0,    0,  143,    0
  4682. ,    0,    0,    0,    0,    0,    0,    0,    0,   37,    0
  4683. ,    0,    0,    0,    0,    0,    0,   52,   53, 9980,  192
  4684. , 9983,  194,  195, 9986,  197,  198,  199,    0,    0,    0
  4685. ,    0,    0,    0,    0,  171,    0,    0,    0,  200,  201
  4686. , 9989,   39,   40,    0,    0,  672,    0,    0,    0,    0
  4687. ,    0,    0,    0,   86,    0,    0,    0,    0,    0,    0
  4688. ,    0,    0,  157,    0,  395,  146,   87, 9992, 9995, 9998
  4689. ,  122,10001,   43,10004,    0,    0,   45,    0,    0,   46
  4690. ,  422,   47,    0,    0,    0,    0,    0,  183,    0,    0
  4691. ,   64,10008,   66,   67,  204,10011,10014,   70,   71,   72
  4692. ,    0,    0,   73,    0,    0,    0,    0,    0,   79,    0
  4693. ,  239,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4694. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  948
  4695. ,    0,  185,  949,  250,    0,    0,  639,    0,    0,    0
  4696. ,  321,    0,    0,    0,  184,   79,    0,10017,  423,    0
  4697. ,    0,    0,    0,    0,  370,  708,  322,    0,  171,    0
  4698. ,  700,  873,  702,    0,    0,    0,    0,    0,    0,    0
  4699. ,    0,    0,    0,    0,    0,    0,    0,  424,    0,   38
  4700. ,   39,   40,    0,    0,    0,  227,    0,    0,    0,    0
  4701. ,  144,   52,10021,   54,   26,   27,    0,   55,    0,    0
  4702. ,  210,    0,  211,    0,    0,  853,  294,    0,  854,  122
  4703. ,   42,   43,   44,  145,10024,10028,   66,   67,   46,10032
  4704. ,10035,   70,   71,   72,    0,    0,   73,    0,    0,    0
  4705. ,    0,    0,    0,   79,    0,   98,    0,    0,   16,10039
  4706. ,   33,    0,  316,    0,    0,    0,    0,10042,    0,10045
  4707. ,    0,  212,  213,  214,  215,    0,    0,  175,    0,    0
  4708. ,    0,    0,    0,  695,    0,    0,    0,    0,    0,    0
  4709. ,    0,    0,    0,    0,  617,    0,    0,  176,  709,   38
  4710. ,   39,   40,  257,    0,  557,    0,  287,    0,    0,  578
  4711. ,10048,  146,    0,    0,  814,    0,10052,10055,    0,10058
  4712. ,  937,    0,  229,    0,    0,    0,    0,  580,    0,   41
  4713. ,   42,   43,10061,    0,    0,   45,    0,    0,   46,    0
  4714. ,   47,    0,    0,    0,    0,  230,    0,    0,    0,    0
  4715. ,   52,   53,  177,    0,   60,  116,    0,   62,   80,    0
  4716. ,  214,   56,    0,  215,   57,    0,  425,   61,    0,  426
  4717. ,   63,    0,  754,   66,    0, 1416,  685,   67,    0,  427
  4718. ,   68,  158,    0, 1416,   70,    0,  428,   37,   71,  104
  4719. ,    0, 1496,   73,    0,  815,  250,    0,  430,   28,    0
  4720. ,  431,  686,    0, 1412,  106,    0,  432,  918,    0,  640
  4721. ,  318,    0,   42,  426,    0,   46,  427,    0,   47, 1416
  4722. ,    0,  233,  428,    0,  330, 1412,    0,  803,  430,    0
  4723. ,  748,  183,    0,  302,  435,    0,  524,   74,    0,  439
  4724. ,  107,    0,  605,  266,    0,  330,  438,    0,  882,  775
  4725. ,    0,  440,  776,  437,    0,  618,   37,    0,   53,  840
  4726. ,    0,  610,  756,   38,  216,    0,   38,   66,    0,   39
  4727. ,   67,    0,  696,   68,    0,   69,  439,   94,    0,  442
  4728. ,   71,    0,  443,   72,    0,  445,  710,    0,  446,   73
  4729. ,    0,  448,  904,    0,  449,  711,    0,  451,  905,    0
  4730. ,  452,  122,    0,  453,  874,  122,  440,   37,   42,    0
  4731. ,  454,   43,    0,  455,   43,   44,    0,  456,   44,    0
  4732. ,  458,   45,    0,  967,  461,  116,    0,  531,   44,  183
  4733. ,    0,  974,  462,    0,  976,   45,    0,   46,   54,    0
  4734. ,   47,  599,    0,  612,   38,    0,  466,  816,    2,    0
  4735. ,  467,  817,    0,  468,   90,    0,  442,   42,    0,  443
  4736. ,   43,    0,  444,   44,    0,  445,  296,    0,  447,   45
  4737. ,    0,  450,   46,    0,  184,  452,   47,    0,  455,  266
  4738. ,    0,  804,  457,    0,  266,  267,    0,  775,  600,    0
  4739. ,  977,  875,    0,  978,  763,    0,  426,  526,    0,  504
  4740. ,  399,  357,    0,   52,   53,    0,   53,   54,    0,  428
  4741. ,  466,   55,    0,  742,  468,    0,   53,  241,    0,  432
  4742. ,   54,    0,  287,  108,    0,  144,   66,    0,   68,  109
  4743. ,    0,   69,  110,    0,  250,  171,   70,    0,  687,  340
  4744. ,    0,  919,   70,   37,    0,   72,  258,  159,    0,   73
  4745. ,  641,    0,  951,  713,  301,  160,    0,   38, 1416,    0
  4746. ,   40,  427,   58,    0, 1416,   60,    0,  428,   61,    0
  4747. ,  856,   63,    0, 1165,   64,    0, 1165,   65,    0, 1165
  4748. ,   67,    0, 1412,   68,    0,  122,   70,    0,  430,   71
  4749. ,    0,  431,   43,   72,  332,    0,  778,   44,    0, 1412
  4750. ,  469,    0,   45,  716,  433,    0,   46,  719,  642,    0
  4751. ,   47,  434,  643,    0,  721,  644,    0,  722,  435,  645
  4752. ,    0,  893,   44,    0,  559,   37,    0,  171,   37,    0
  4753. ,   52,   39,    0,   53,   40,    0,  713,   52,   39,    0
  4754. ,   53,   40,    0,  968,   55,    0,   59,  122,    0,   60
  4755. ,   37,   42,    0,   61,   43,    0,   62,   44,    0,   63
  4756. ,  183,    0,   66,   52,   46,    0,  519,   67,   53,    0
  4757. ,   54,   47,    0,  118,   68,    0,   69,  385,    0,   70
  4758. ,   42,    0,   71,  386,    0,   72,   44,    0,   73,   45
  4759. ,    0,   39,  244,    0,  720,  696,    0,  451,  184,    0
  4760. ,  453,  122,    0,  233,  454,   37,   42,    0,  455,   43
  4761. ,    0,  456,   44,    0,  457,  387,    0,  459,   45,    0
  4762. ,  461,    9,    0,  462,  513,    0,  301,   40,    0,  466
  4763. ,  514,    0,  468,  358,    0,  581,   54,    0,  749,  122
  4764. ,    0,   42,   55,    0,  389,   44,    0,  787,  391,    0
  4765. ,   45,  163,    0,   52,  320,    0,   46,   53,    0,   55
  4766. ,  287,    0,  341,   64,    0,   67,  164,    0,   58,   68
  4767. ,    0,   59,   69,    0,  815,   60,   79,  171,   70,    0
  4768. ,   61,   71,    0,  646,   62,   72,    0,  743,  166,    0
  4769. ,  952,  183,    0,  494,   62,    0,   79,  125,   70,    0
  4770. ,   73,  234,    0,   65,  112,    0,   69,  490,    0,   72
  4771. ,  389,    0,   73,  176,    0,  300,  245,    0,  877,  272
  4772. ,   38,    0,   40,  180,    0,  759,  400,    0,   53,  819
  4773. ,    0,  581,   47,    0,  301,  133,    0,  820,  560,    0
  4774. ,  233,   37,    0,  982,  135,    0,  842,   42,   55,    0
  4775. ,  432,   47,    0,  962,   66,    0,   79,   70,    0,   37
  4776. ,   71,    0,   37,  287,    0,  488,  143,    0,  122,  171
  4777. ,    0,   42,  501,    0,  990,   38,    0,  768,   39,    0
  4778. ,   60,  242,    0,  122,   61,    0,  769,   42,   62,    0
  4779. ,   43,   63,    0,   44,  561,    0,   45,   65,    0,   47
  4780. ,   69,  116,    0,   37,   42,    0,  287,   43,    0,  663
  4781. ,   44,    0,  146,  472,    0,  843,  477,    0,  147,  270
  4782. ,    0,  688,   39,    0,   52,   78,    0,  941,  183,    0
  4783. ,   60,  122,    0,  655,  171,   61,   42,    0,   62,   43
  4784. ,    0,   63,   44,  401,    0,   64,   45,    0,  726,   67
  4785. ,   46,    0,   68,   47,    0,   69,  273,    0,   70,   37
  4786. ,    0,   71,  287,    0,   73,   45,    0,  491,  171,    0
  4787. ,  699, 1448,    0,   58, 1448,    0,   59,  121,    0,   65
  4788. ,   52,    0,   66,   53,    0,   67,   54,    0,   69,  242
  4789. ,    0,   70,  380,   55, 1448,    0,   71,    2,    0,  145
  4790. , 1448,    0,   42, 1448,    0,  515,   43,    0,  921,   44
  4791. ,    0,  983,  906,    0,  658,   64,   45,    0,   66,  181
  4792. ,    0,   67,   46,    0,   68,   47,    0,  171,   70,    0
  4793. ,  402,  359,    0,  689,   64,    0,   67,  333,    0,   71
  4794. ,  124,    0,  125,  276,    0,  242,  821,   37,    0,   38
  4795. ,   52,    0,   39,   53,  168,    0,   40,   54,    0,  183
  4796. ,  360,    0,  547,  622,   37,   61,    0,   64,  334,    0
  4797. ,  779,   68,    0,  859,   6   64,  334,    0
  4798. ,  779,   68,    0,  859,   69,  250,    0,  122,   70,    0
  4799. ,   42,   71,    0,   43,   72,  335,    0,  780,   44,    0
  4800. ,  728,  627,    0,  425,  385,    0,   37,  426,  386,    0
  4801. , 1416,  302,    0,  885, 1412,    0,  431,  562,    0,   39
  4802. ,  432,    0,  171,   37,    0,   38, 1505,  502,    0,   39
  4803. ,  169,    0,   40,  118,    0,  434,  138,    0,  139,  342
  4804. ,    0,  435,  140,    0,  516,  387,    0, 1505,  170,   10
  4805. ,    0, 1505,    8,    0, 1505,  436,    0,   42,   43,    0
  4806. ,   43,  793,   44,    0,   45,   38,    0,   52,   39,  236
  4807. ,    0,  907,  822,   53,   40,    0,   46,   54,    0,   42
  4808. ,   55,  287,    0,   43, 1505,    0,   44,  183,    0, 1505
  4809. ,   65,    0, 1505,   66,    0,   69,   41,    0, 1507,   70
  4810. ,   37,   42,    0,   37,   71,   43,    0,   72,   44,    0
  4811. ,   73,   45,    0,  713,   53,    0,   38,  301,   39,  277
  4812. ,    0,   39,   40,    0,   40,  184,   58,    0,  984,   62
  4813. ,    0,  942,  674,   63,    0,  844,   66,    0,  439,   70
  4814. ,   37,    0,  171,   71,    0,  266,   72,    0,  324,   49
  4815. ,    0,  122,  761,  440,   42,    0,   42,  762,   43,    0
  4816. ,   43,   44,    0,   44,  763,  141,  303,    0,  823,   45
  4817. ,    0,   46,  325,    0,   52,   39,    0,   52,   53,   40
  4818. ,    0,   53,  928,   54,    0,   55,   84,    0,   68,  122
  4819. ,    0,   69,   42,    0,   70,   43,    0,   71,   44,    0
  4820. ,   72, 1094,  404,    0,   73,   64,    0, 1094,   65,   52
  4821. ,    0,   66,   53,    0, 1094,   67,   54,    0, 1094,   69
  4822. ,    0,   70,  583,   55,    0,   71,  584,    0,   73,  447
  4823. ,    0,  448,   56,  190,    0, 1094,  449,   57,    0, 1094
  4824. ,  451,   58,    0,  452,   59,    0,  453,   60,    0,  454
  4825. ,   61,    0,   37,  455,  362,   62,    0,  287,  456,   63
  4826. ,    0,  459,   64,    0,  585,   65,    0,  461,   69,    0
  4827. , 1094,  171,   70,    0,  171,   71,    0, 1094,   73,    0
  4828. , 1094,  176,    0, 1094,  478,    0, 1094,  116,  463,    0
  4829. ,  821, 1094,    0, 1336,  389,  405,    0, 1094,  391,    0
  4830. , 1094,   39,    0, 1094,   40,    0,   52,   53,    0,   53
  4831. ,   54,    0,  116,  466,   55,    0,   55,  467,    0,  468
  4832. ,  304,    0,   59,   79,  171,    0,   60,  774,    0,  930
  4833. ,   61,   42,    0,   62,   43,    0,   63,   44,    0,  344
  4834. ,   64,    0,   64,   45,  697,   65,    0,   65,   66,    0
  4835. ,   66,  563,   67,    0,   67,   46,  406,    0,   68,   47
  4836. ,   69,    0,   69,  116,   70,    0,   70,  647,   71,    0
  4837. ,   71,   72,    0,  519,   53,    0,  255,  118,    0,  302
  4838. ,  247,    0,   72,  263,    0,  771,  278,    0,  764,  731
  4839. ,    0,   52,  732,  301,    0,  824,   60,    0,  822,   67
  4840. ,    0,   69,  116,    0,  242,  837,   70,    0,  970,   71
  4841. ,    0,   72,  183,    0,  330,  629,    0,  909,  675,    0
  4842. ,  250,  122,    0,  147,   42,    0,  428,   43,    0,  698
  4843. ,  676,    0, 1350,  438,    0,  649,  171,    0, 1468,   38
  4844. ,    0,   42,   55,    0,  910,   47,    0,  943,  116,    0
  4845. ,   37,  587,    0,  183,  407,    0,  736,  117,    0,  713
  4846. ,   39,    0,  588,   13,    0,   42,   55,   15,    0,  330
  4847. ,  184,  118,  377,    0,  869,   37,   17,    0,   66,  182
  4848. ,    0,  464,   70,    0,  700,   71,    0,  701,   72,    0
  4849. ,  716,  364,    0,  721,  911,    0,   38,  119,    0,  287
  4850. ,   43,    0,   44,  183,    0,   39,   46,    0,  753,   47
  4851. ,    0,  723,  301,    0,  122,  506,    0,   44,   83,    0
  4852. ,  503,   52,    0,  726,   46,   53,    0,   37,   55,    0
  4853. ,   40,  184,  325,    0,   71,  494,    0,  122,  125,    0
  4854. ,  860,   42,    0,   43,   84,  264,    0,   45,  479,    0
  4855. ,   42,  650,    0,   45,  503,    0,   46,   54,    0,  703
  4856. ,  171,    0,   37,   55, 1357,    0,  504,  183,    0,  498
  4857. , 1357,    0,   64, 1357,    0,  592,   65, 1357,    0,   69
  4858. ,  302, 1510,    0,   71,   24,    0,   38,   52,   25,    0
  4859. ,   39,   53,    0,   40,   54,   26,    0,   55,  287,   28
  4860. ,    0,  171,  507,   37,    0,   67,  184,    0,  122,   70
  4861. ,    0,   42,   71,    0,  896,   43,   72,    0,   44,  520
  4862. ,    0,  256,   29,    0,   46,   30,    0,  122,  171,  345
  4863. ,   31,    0,   44,  183,    0,   52,   39,    0,   53,   40
  4864. ,    0,   52,   67,    0,   54,   68,    0,   69,   41,    0
  4865. ,   70,   42,    0,   71,   43,    0,   55,   72,   44,    0
  4866. ,   73,   45,    0,   65,  846,  216,    0,   68,  593,    0
  4867. ,   71,  494,    0,  945,   37,    0,  797,  631,    0,  727
  4868. ,  305,    0,   53,   35,    0,  242,   50,    0,   52,   39
  4869. ,    0,   53,   40,    0,   70,   37,    0,  847,   14,    0
  4870. ,  677,   52,    0,   46,   54,    0,  302,   55,    0,   38
  4871. ,  283,    0,   39,  570,    0,  755,   40,   58,    0,  190
  4872. ,   66,    0,  250,   70,    0,  691,   83,    0,  122,  506
  4873. ,    0,  287,  410,    0,  897,  551,    0,  932,   52,    0
  4874. ,   53,  185,    0,   54,   13,    0, 1094,  250,   14,    0
  4875. ,   55,  651,    0,   58, 1094,    0,   59, 1094,    0,   60
  4876. ,  171, 1094,    0,   61,  186,    0,   63, 1094,    0, 1094
  4877. ,   16,    0,   65, 1311,    0,   67, 1094,  414,    0,   68
  4878. , 1094,    0,  649,   69, 1094,    0,   70, 1094,  415,    0
  4879. ,   71,  416,  187,    0,   72,  207,  188,    0,  971,  101
  4880. ,    0,   73,  102,  189,    0,  103,  190,    0,   68,  192
  4881. ,    0,   69,  193,    0,  425,   70,  194,    0,   71,  195
  4882. ,    0,  426,   72,  196,    0,  521,  197,    0,   73,  199
  4883. ,    0, 1416,   36,    0, 1442,  200,    0, 1442,  202,    0
  4884. ,  183,  811,    0,  434,   27,    0,  522,   28,    0,  106
  4885. ,   38,    0,   40,  285,    0,   39,  203,    0,  737,  101
  4886. ,    0,  385,  121,    0,  437,  678,   44,    0,   32,   45
  4887. ,    0,  438,   47,    0,   42,   34,    0,   46,  149,    0
  4888. ,   37,   42,    0,   38, 1358,    0,  440,  287,  209,    0
  4889. ,  922,   25,    0,  122,  171,    0,  632,   43, 1358,   28
  4890. ,    0,  848,  745,   44,  183,    0, 1358,  210,    0,   45
  4891. ,  211,    0,   52,   46,    0,   54,   47,    0,  652,  249
  4892. ,    0, 1509,  125,    0,  126,   33,    0,   54,   58,    0
  4893. ,  881,   59,    0,  116,   61,   34,    0,  442,   55,   62
  4894. ,    0,  443,   63,    0,  445, 1096,  212,    0,  446,   64
  4895. ,  213,    0,  447,   65,  214,    0,  448,   66,   52,  215
  4896. ,    0,  449,   67,   53,    0,  450,  184,   54,    0,  451
  4897. ,   68,    0,  452,   69,    0,  453,   70,    0,  454,   37
  4898. ,   71,   55,    0,  455,   72,    0,  457,  366,    0,  458
  4899. ,   73,    0,  459,   64,  367,    0,  460,   65,    0,  827
  4900. ,   68,   59,    0,  461,   69,   60,  233,    0,   70,   61
  4901. ,    0,   71,  499,   62,    0,   72, 1096,   63,    0,   73
  4902. ,   64,    0, 1096,   65,    0, 1096,   67,    0, 1096,   69
  4903. ,    0,  116,  171,   70,    0,  463,   71,    0,  898,   39
  4904. , 1096,    0,  809,   40,    0,  933,  829,    0, 1096,  250
  4905. ,    0,  464,  596,    0,  466,  308,    0,  468,  183, 1096
  4906. , 1094,    0, 1096,   52,    0,  519, 1096,   53,    0, 1096
  4907. ,   54,    0,  118, 1096,    0,  122, 1096,    0,   42,   55
  4908. ,    0,   44, 1096,    0,  144, 1312,    0,   46, 1096,    0
  4909. ,   47, 1096,    0,   64, 1094,    0,   66, 1094,    0,   68
  4910. , 1094,    0, 1094,   86,    0,  524,   87,    0,  438, 1094
  4911. ,    0,  813,  388,    0,  525,  389,    0,  526,  390, 1094
  4912. ,    0,  567,  391, 1094,    0,  913,  347, 1378,    0,  528
  4913. , 1094,    0,  250, 1094,    0,  287,  348,    0,  144,   39
  4914. ,    0,  301,   40,    0,  530,  667,    0,   52,  573,   46
  4915. ,    0,   54,   47,    0,   38,   89,    0,   60,  121,    0
  4916. ,  395,  336,    0,   64,  146,    0,   69,  147,    0,  122
  4917. ,   37,    0,  533,   43,    0,  534,   44,    0,  537,   45
  4918. ,    0,  541,   37,    0,  542,   37,    0,   38,   39,    0
  4919. ,   39,   40,    0,  633,   90,    0,  798,   42,    0,  552
  4920. ,   44,    0,  746,   52,    0,  122,   42,   55,    0,   42
  4921. ,  124,   43,    0,   43,   44,    0,   45,   38,    0,   46
  4922. ,   40,    0,   46,  288,    0,   37,  418,    0,  122,   37
  4923. ,   71,    0,   43,  692,    0,  126,  252,    0,  116,   42
  4924. ,    0,   38,   52,    0,   39,   53,    0,   40,   54,    0
  4925. ,  130,  372,    0,  899,   38,    0,   39,  150,    0,  831
  4926. ,   63,    0,   69,  171,    0,  122,   70,    0,   42,   71
  4927. ,  500,   91,    0,  266,   43,   72,    0,  122,  171,    0
  4928. ,  775,  653,   42,    0,  762,   43,    0,  934,  481,    0
  4929. ,  519,   53,    0,  862,   55,    0,   52,   53,    0,   53
  4930. ,   54,    0,  972,  144,    0,   37,   72,    0,   64,   65
  4931. ,    0,   65,   66,    0,   66,   52,   67,    0,   67,   53
  4932. ,    0,   54,   68,    0,   68,   69,  219,    0,   69,   70
  4933. ,    0,   70,   71,  220,    0,   71,  287,   72,    0,   72
  4934. ,  870,    0,  171,   55,    0,  171,   37,    0,  368,   68
  4935. ,    0,   52,  301,    0,   53,  349,    0,   42,   55,  350
  4936. ,    0,   45,   38,    0,   52,   39,    0,   53,   40,    0
  4937. ,   46,   54,    0,   47,   59,    0,   61,   55,    0,   68
  4938. ,  666,   59,    0,   69,   60,    0,   70,   61,    0,   71
  4939. ,   62,    0,   72,   63,    0,   73,   64,    0,  668,   65
  4940. ,    0,   69,  122,    0,   70,   42,    0,   71,   43,    0
  4941. ,   72,   44,    0,   73,   45,    0,  786,  152,    0,  946
  4942. ,  393,    0,   39,  368,    0,  287,   43,    0, 1417,   46
  4943. ,    0,   53,  680,   47,    0, 1417,  171,    0,   40, 1413
  4944. ,    0, 1413,  146,    0,   64,   45,    0,   65,   48,    0
  4945. ,   66,  519,    0,   67,   46,    0,   68,   47,  147,    0
  4946. ,   71,  553,    0,   73,   86,    0,   54,  221,    0,  122
  4947. ,   55,    0,   43,   49,    0,   45,   87,    0,   46, 1413
  4948. ,  290,    0,  635,   64,    0,  122,   70,    0,   71,   50
  4949. ,    0,   43,   72,    0,  253,   92,    0,  266,  654,    0
  4950. ,  775,  769,    0,  301,   54,    0,  171,   62,    0,  589
  4951. ,   65,    0,   38,   66,    0,   39,   89,   67,    0,   52
  4952. ,   40,    0,   53,   68,    0,   54,   69,    0,   55,  832
  4953. ,    0,   66,   52,    0,   67,   53,    0,   54,  681,    0
  4954. ,   68,  122,    0,   69,   42,    0,   70,   43,    0,   71
  4955. ,   55,   44,    0,   65,   52,    0,   66,   53,    0,   67
  4956. ,   54,    0,   71,  482,    0,   73,   86,    0,   86,   93
  4957. ,    0,  144,   38,    0,  900,   39,    0,  682,  154,    0
  4958. ,  530,   74,    0,   46,   53,    0,  394,   66,    0,   70
  4959. ,   94,    0,  974,   73,    0,  976,  351,    0,  903,  706
  4960. ,    0,  523,  183,    0,  285,  291,    0,  620,   69,    0
  4961. ,  607,   73,    0,  693,  656,    0,  250,   37,    0,  576
  4962. ,   43,    0,  833,   44,    0,  936,  483,    0,  657,  531
  4963. ,    0,  669,   39,    0,  554,   45,    0,   41,  311,    0
  4964. ,  352,   53,    0,  287,   43,    0,  670,   45,    0,  850
  4965. ,   52,    0,  916,  851,    0,   66,   52,    0,   67,   53
  4966. ,    0,  620,   69,   75,    0,   71,   55,  287,   76,    0
  4967. ,   56,   38,    0,  613,   58,    0,   60,  171,    0,  270
  4968. ,   62,    0,  271,   63,    0,  503,   66,    0,  555,   70
  4969. ,    0,  233,   71,    0,  986,  771,    0,  272,   52,    0
  4970. ,  512,   65,  254,    0,  620,   69,    0,  772,   71,    0
  4971. ,  787,   73,    0,   41,   37,    0,   43,   80,    0,   44
  4972. ,  485,    0,   45,   74,    0,   46,  597,   54,    0,  547
  4973. ,   37,    0,  902,  614,    0,  644,  233,    0,  509,   38
  4974. ,    0,  544,   39,  299,    0,  758,   40,    0,  274,   70
  4975. ,    0,  694,   72,    0,  116,  121,    0,  671,   43,    0
  4976. ,   37,   42,    0,   50,   44,    0,  503,   56,   38,    0
  4977. ,   57,   39,    0,   59,  122,    0,   60,   42,    0,   61
  4978. ,  287,   43,    0,  773,   62,   44,    0,  504,   63,    0
  4979. ,   66,   46,    0,   69,  171,    0,   70,  124,    0,  638
  4980. ,  238,    0,  120,   52,    0,  438,  548,  156,    0,  917
  4981. ,   55,    0,   64,  130,    0,  925,   65,    0,   66,  224
  4982. ,    0,   68,   59,    0,   69,   60,    0,   70,   61,    0
  4983. ,   71,  353,  287,   62,    0,  790,   72,   63,    0,  567
  4984. , 1390,    0,   73,   64,    0,  707,   65,    0,  171,   70
  4985. ,    0,  250,  354,    0,  287,  132,    0,  116,  171,    0
  4986. ,  116,   55,    0,   65, 1390,    0,   74,   66,    0,   52
  4987. ,   67,    0,   53, 1390,    0,   54,   68,  175,    0,   55
  4988. ,   72,    0,   73,  136,    0,   58,  486,  138,    0,   59
  4989. ,  139,    0,   60,  140,    0,   37,   71,    0,  835,   44
  4990. ,    0,   40,  684,    0,   47,  331,    0,  802,  190,    0
  4991. ,   54,  191,    0,  355,  193,    0,  269,  196,    0,   38
  4992. ,  202,    0,   52,   88,    0,   53,  549,    0,  987,   54
  4993. ,    0,  147,   42,    0,   55,  550,   44,    0,   65,   78
  4994. ,    0,   68,  205,    0,   69,  206,    0,  233,   37,  287
  4995. ,    0,   53,  228,    0,  493,   64,  146,    0,  980,   45
  4996. ,   65,    0,   68,   97,    0,   47,   69,  147,    0,   90
  4997. ,   32,    0,   37,   34,    0,  659,   99,    0,  395,  146
  4998. ,  317,    0,  147,   79,    0,  147,  171,    0,  579,  488
  4999. ,    0,   44,  397,    0)  ;
  5000.         --| Actions to perform for all combinations of parser
  5001.         --| states and input tokens.
  5002.         -- NYU Reference Name: ACTION_TABLE1
  5003.      
  5004.     ActionTableTwo :
  5005.         constant array (ActionTableTwoRange)
  5006.         of GC.ParserInteger :=
  5007.          (    0,211308,    0,    0,    0,211312,    0,    0,    0,    0
  5008. ,336959,    0,142787,    0,211321,211322,    0,211324,    0,211326
  5009. ,    0,    0,211329,211330,211331,211332,    0,211334,211335,211336
  5010. ,211337,211338,142807,    0,211341,    0,    0,148523,    0,    0
  5011. ,    0,    0,    0,11465,    0,11467,11468,11469,    0,    0
  5012. ,    0,    0,    0,91429,    0,142830,    0,    0,    0,    0
  5013. ,    0,    0,    0,    0,182816,    0,142841,331305,    0,    0
  5014. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5015. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5016. ,    0,148577,    0,182845,    0,    0,57206,    0,314203,142874
  5017. ,142875,142876,    0,    0,    0,142880,28661,114327,    0,154306
  5018. ,154307,    0,    0,    0,142889,142890,142891,    0,142893,    0
  5019. ,    0,262827,142897,142898,    0,    0,114346,    0,142903,    0
  5020. ,    0,142906,    0,    0,    0,    0,337085,11559,    0,337088
  5021. ,337089,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5022. ,    0,    0,    0,    0,337103,    0,    0,    0,    0,    0
  5023. ,    0,337110,245735,245736,245737,    0,337115,    0,337117,    0
  5024. ,    0,    0,    0,74416,    0,200060,    0,337126, 5889,    0
  5025. ,337129,    0,337131,337132,    0,    0,    0,    0,    0,    0
  5026. ,    0,120122,245765,    0,245767,245768,    0,    0,245771,120130
  5027. ,    0,    0,    0,    0,    0,    0,    0,337156,    0,    0
  5028. ,    0,    0,    0,120144,    0,    0,    0,    0,120149,    0
  5029. ,211527,    0,120153,40200,    0,    0,120157,    0,    0,    0
  5030. ,34496,    0,    0,    0,    0,120166,40213,280076,    0,    0
  5031. ,120171,    0,    0,    0,    0,302928,    0,    0,348619,    0
  5032. ,    0,120182,11674,    0,120185,    0,120187,120188,325785,    0
  5033. ,    0,    0,    0,    0,360057,    0,    0,    0,    0,    0
  5034. ,325797,11693,    0,    0,    0,342935,    0,    0,    0,    0
  5035. ,    0,    0,194456,245856,    0,325812,    0,    0,    0,120220
  5036. ,    0,    0,    0,    0,217312,148781,    0,325824,    0,    0
  5037. ,325827,337250,    0,337252,85969,217323,291567,    0,    0,    0
  5038. ,    0,    0,    0,245886,245887,245888,    0,    0,    0,245892
  5039. ,    0,    0,    0,    0,    0,51724,51725,    0,    0,68861
  5040. ,    0,    0,    0,217351,    0,34601,245909,245910,    0,    0
  5041. ,291601,    0,    0,245916,    0,    0,337295,    0,    0,337298
  5042. ,    0,    0,337301,    0,    0,    0,    0,    0,    0,337308
  5043. ,    0,337310,337311,51762,    0,51764,    0,    0,291629,291630
  5044. ,291631,    0,    0,360166,    0,120306,120307,    0,    0,    0
  5045. ,    0,337330, 6093,    0,    0,325912,    0,    0,91764,91765
  5046. ,217408,    0,    0,    0,    0,    0,    0,245970,154595,    0
  5047. ,    0,    0,325929,    0,    0,337354,337355,    0,    0,    0
  5048. ,    0,17544,    0,    0,103212,120346,    0,91793,    0,    0
  5049. ,    0,    0,120353,    0,120355,120356,    0,120358,    0,120360
  5050. ,120361,    0,120363,    0,120365,120366,120367,    0,126080,    0
  5051. ,126082,120372,51841,217461,    0,    0,120377,    0,    0,    0
  5052. ,    0,    0,    0,    0,    0,120386,    0,    0,    0,    0
  5053. ,    0,    0,  462,314568,    0,    0,    0,    0,    0,188932
  5054. ,    0,    0,    0,    0,    0,51874,    0,    0,217496,120410
  5055. ,120411,    0,120413,    0,    0,    0,40463,    0,    0,291750
  5056. ,    0,    0,40469,    0,    0,291756,    0,    0,51897,51898
  5057. ,    0,51900,    0,    0,    0,    0,51905,51906,    0,    0
  5058. ,51909,    0,291773,291774,291775,291776,    0,291778,291779,    0
  5059. ,291781,    0,    0,263229,    0,    0,    0,    0,23372,280368
  5060. ,217548,    0,337481,    0,    0,217553,    0,    0,91914,91915
  5061. ,91916,    0,40519,211850,91920,211852,    0,    0, 6259,    0
  5062. ,    0,    0,228992,    0,91930,    0,    0,91933,    0,    0
  5063. ,211867,    0,    0,91939,    0,211872,    0,91943,    0,    0
  5064. ,    0,    0,    0,91949,    0,34841,120507,34843,211885,326106
  5065. ,217598,229021,229022,229023,229024,    0,    0,    0,217606,217607
  5066. ,    0,217609,    0,    0,    0,    0,29151,    0,    0,189062
  5067. ,    0,189064,211909,211910,    0,    0,211913,    0,211915,    0
  5068. ,    0,    0,46300,354695,354696,    0,    0,    0,    0,    0
  5069. ,354702,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5070. ,    0,    0,177673,211940,286184,229075,    0,    0,    0,    0
  5071. ,    0,297613,    0,    0,    0,    0,194820,    0,    0,    0
  5072. ,143425,217669,    0,    0,    0,    0,    0,343317,229098,    0
  5073. ,    0,    0,    0,    0,    0,    0,    0,    0,86333,    0
  5074. ,    0,    0,23516,  673,  674,  675,  676,    0,    0,  679
  5075. ,    0,    0,    0,    0,    0,    0,    0,    0,52087,    0
  5076. ,    0,154888,    0,69225,212001,    0,    0,326224,    0,    0
  5077. ,291961,126343,    0,    0,229144,    0,    0,212014,    0,    0
  5078. ,    0,263417,143487,274841,    0,    0,    0,229157,    0,    0
  5079. ,    0,    0,    0,    0,52123,229165,229166,    0,    0,    0
  5080. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5081. ,126382,    0,126384,35009,    0,314850,    0,    0,    0,    0
  5082. ,    0,92127,    0,92129,    0,    0,263462,    0,    0,    0
  5083. ,    0,    0,    0,    0,263470,263471,263472,    0,    0,263475
  5084. ,212077,212078,212079,212080,212081,212082,212083,212084,212085,    0
  5085. ,212087,    0,    0,    0,    0,    0,212093,    0,212095,    0
  5086. ,92166,    0,92168,    0,    0,52194,    0,    0,    0,    0
  5087. ,    0,    0,    0,    0,    0,    0,52205,212114,126450,    0
  5088. ,    0,    0,    0,    0,132167,132168,    0,120748,    0,126461
  5089. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5090. ,    0,212138,212139,    0,212141,    0,    0,    0,    0,52238
  5091. ,52239,    0,    0,160751,    0,    0,132199,    0,229288,    0
  5092. ,    0,    0,    0,    0,126496,132208,40833,    0,    0,    0
  5093. ,    0,    0,    0,52262,52263,    0,    0,    0,    0,    0
  5094. ,    0,    0,126514,    0,52273,126517,126518,126519,126520,    0
  5095. ,126522,126523,126524,126525,126526,    0,    0,126529,    0,23733
  5096. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5097. ,    0,    0,92278,92279,92280,    0,    0,    0,92284,    0
  5098. ,    0,    0,    0,    0,12336,98002,    0,92293,92294,92295
  5099. ,92296,    0,92298,    0,    0,92301,92302,92303,92304,    0
  5100. ,92306,92307,    0,92309,92310,    0,    0,    0,    0,    0
  5101. ,    0,    0,    0,    0,63765,    0,    0,    0,    0,    0
  5102. ,217968,132304,    0,    0,    0,246528,    0,    0,303641,    0
  5103. ,303643,303644,    0,    0,    0,132318,132319,132320,    0,    0
  5104. ,    0,132324,    0,    0,    0,    0,257971,    0,    0,46667
  5105. ,    0,    0,    0,    0,    0,    0,    0,    0,132341,    0
  5106. ,132343,132344,    0,132346,    0,132348,132349,    0,126640,126641
  5107. ,    0,    0,172332,    0,    0,    0,    0,103805,    0,    0
  5108. ,195184,    0,    0,    0,    0,    0,    0,63838,    0,    0
  5109. ,52419,143796,143797,    0,    0,    0,    0,    0,    0,326556
  5110. ,    0,    0,    0,    0,    0,    0,    0,    0,23882,218057
  5111. ,    0,    0,    0,178084,    0,    0,303729,    0,    0,    0
  5112. ,    0,    0,    0,52452,    0,    0,    0,    0,    0,    0
  5113. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5114. ,143845,332309,178113,    0,    0,    0,    0,    0,    0,303762
  5115. ,    0,303764,52481,52482,52483,52484,    0,    0,52487,    0
  5116. ,    0,52490,    0,    0,    0,320911,    0,18230,46786,    0
  5117. ,    0,    0,    0,    0,    0,    0,    0,35373,    0,35375
  5118. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,183871
  5119. ,    0,275249,    0,275251,275252,    0,    0,    0,    0,    0
  5120. ,    0,    0,109641,    0,    0,263841,    0,    0,332376,    0
  5121. ,    0,103939,    0,    0,    0,    0,    0,    0,18281,    0
  5122. ,18283,    0,    0,18286,    0,    0,18289,18290,18291,52558
  5123. ,    0,    0,355244,    0,    0,298137,    0,    0,    0,    0
  5124. ,52569,    0,    0,    0,    0,    0,    0,315282,132531,132532
  5125. ,132533,    0,    0,    0,    0,    0,    0,    0, 1188,    0
  5126. ,    0,    0,    0,    0,    0,143970,    0,    0,    0,    0
  5127. ,281039,    0,    0,52602,52603,52604,    0,    0,132561,    0
  5128. ,132563,132564,    0,    0,132567,    0,    0,132570,    0,    0
  5129. ,    0,    0,    0,    0,    0,    0,52625,52626,    0,52628
  5130. ,    0,52630,52631,    0,    0,52634,    0,    0,52637,    0
  5131. ,    0,    0,275370,275371,275372,    0,    0,    0,    0,281088
  5132. ,    0,    0,    0,321069,    0,    0,    0,    0,    0,    0
  5133. ,    0,    0,132615,    0,    0,    0,155463,155464,155465,    0
  5134. ,    0,    0,    0,    0,18407,18408,    0,    0,    0,    0
  5135. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5136. ,    0,    0,    0,    0,    0,    0,    0,    0,155495,155496
  5137. ,    0,    0,155499,    0,    0,155502,    0,155504,    0,104107
  5138. ,    0,    0,    0,    0,35580,    0,    0,286867,286868,286869
  5139. ,    0,    0,    0,    0,229764,    0,    0,    0,    0,132682
  5140. ,132683,132684,    0,    0,    0,132688,    0,    0,    0,    0
  5141. ,258335,    0,    0,104141,132697,132698,    0,    0,    0,    0
  5142. ,    0,    0,132705,    0,132707,132708,286906,132710,    0,132712
  5143. ,132713,132714,    0,    0,132717,    0,    0,344027,    0,    0
  5144. ,    0,104169,    0,    0,    0,    0,    0,104175,    0,269796
  5145. ,104178,    0,104180,12805,155581,    0,    0,    0,    0,    0
  5146. ,344050,    0,121323,121324,121325,121326,    0,    0,52797,    0
  5147. ,    0,286951,    0,    0,144179,    0,144181,    0,    0,    0
  5148. ,    0,    0,252696,    0,    0,    0,    0,    0,155615,155616
  5149. ,    0,    0,    0,155620,286974,    0,    0,    0,52827,    0
  5150. ,    0,    0,155629,155630,    0,    0,    0,    0,309832,    0
  5151. ,    0,155638,155639,    0,    0,    0,    0,    0,    0,155646
  5152. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5153. ,    0,    0,    0,    0,47152,    0,    0,    0,287018,287019
  5154. ,287020,41448,    0,    0,287024,    0,    0,    0,18611,92855
  5155. ,92856,92857,    0,    0,    0,287035,287036,287037,287038,    0
  5156. ,    0,287041,    0,    0,    0,    0,287046,    0,    0,    0
  5157. ,287050,    0,18635,287053,    0,    0,    0,104305,18641,92885
  5158. ,    0,    0,    0,    0,    0,    0,104314,    0,    0, 1519
  5159. ,    0,104319,    0,104321,104322,258520,    0,104325,    0,    0
  5160. ,    0,    0,    0,287083,    0,    0,    0,    0,332776,    0
  5161. ,    0,    0,    0,    0,    0,    0,    0,184299,    0,    0
  5162. ,    0,    0, 1552,    0,    0,144330,144331,144332,    0,    0
  5163. ,    0,144336,41539,    0,    0,224294,224295,    0,    0,    0
  5164. ,18703,52970,224301,52972,    0,    0,    0,    0,    0,144354
  5165. ,144355,    0,    0,144358,144359,144360,    0,144362,    0,    0
  5166. ,144365,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5167. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5168. ,    0,321427,115832,    0,    0,    0,92992,    0,    0,41596
  5169. ,    0,    0,    0,264329,    0,    0,    0,    0,    0,    0
  5170. ,    0,    0,    0,    0,    0,    0,93012,    0,    0,    0
  5171. ,    0,93017,    0,    0,    0,93021,93022,93023,    0,93025
  5172. ,93026,338600,    0,    0,93030,93031,93032,    0,    0,    0
  5173. ,    0,    0,    0,    0,    0,93041,155863,287217,    0,155866
  5174. ,    0,155868,64493,    0,    0,    0,    0,    0,    0,    0
  5175. ,121611,121612,121613,    0,    0,138749,    0,    0,230128,    0
  5176. ,    0,    0,110201,110202,    0,    0,321512,    0,    0,    0
  5177. ,104498,218719,    0,    0,    0,    0,104504,    0,    0,    0
  5178. ,    0,121642,    0,121644,    0,    0,121647,    0,161626,121650
  5179. ,161628,121652,    0,161631,235875,    0,    0,    0,    0,    0
  5180. ,    0,    0,161640,    0,    0,218753,161644,    0,195912,    0
  5181. ,    0,161649,    0,    0,327271,    0,327273,    0,    0,    0
  5182. ,    0,104549,104550,104551,161662,    0,    0,    0,    0,    0
  5183. ,    0,    0,    0,    0,    0,    0, 1766,    0, 1768,    0
  5184. ,161678,    0,218790,    0,327301,    0,    0,327304,    0,    0
  5185. ,    0,    0,    0,    0,    0,327312,235937,    0,    0,    0
  5186. ,218808,218809,235943,    0,    0,235946,    0,235948,121729,    0
  5187. ,161708,218819,218820,298775,156001,    0,    0,156004,    0,156006
  5188. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,53218
  5189. ,    0,53220,    0,    0,    0,    0,    0,    0,    0,    0
  5190. ,    0,121762,    0,121764,    0,    0,    0,121768,    0,293100
  5191. ,    0,    0,13264,93219,    0,    0,    0,121778,121779,121780
  5192. ,    0,    0,    0,    0,121785,121786,    0,121788,    0,121790
  5193. ,121791,    0,    0,    0,    0,    0,121797,    0,    0,    0
  5194. ,    0,236022,    0,93249,    0,    0,    0,    0,104676,    0
  5195. ,258875,    0,93258,    0,93260,258880,    0,53286,    0,104687
  5196. ,    0, 1891,    0,59003,    0,    0,    0,327424,53297,    0
  5197. , 1900,327428,    0,321719,281743,    0,    0,236058,236059,236060
  5198. ,    0,    0,    0,    0,    0,    0,    0,    0,327445,327446
  5199. ,327447,327448,    0,    0,    0,    0,    0,    0,258923,59039
  5200. ,    0,    0,    0,    0,    0,236086,    0,    0,    0,236090
  5201. ,161848,161849,    0,    0,    0,161853,    0,    0,    0,    0
  5202. ,    0,    0,161860,161861,    0,    0,53355,53356,    0,53358
  5203. ,    0,    0,    0,53362,    0,161873,    0,    0,281807,281808
  5204. ,281809,281810,281811,    0,    0,    0,    0,121908,    0,281818
  5205. ,281819,    0,247555,    0,    0,    0,281825,281826,281827,    0
  5206. ,    0,    0,    0,    0,93370,    0,    0,258992,161906,161907
  5207. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5208. ,259005,    0,    0,    0,    0,    0,304699,    0,    0,    0
  5209. ,    0,    0,93398,    0,    0,    0,    0,259022,    0,93405
  5210. ,259025,    0,    0,    0,    0,    0,    0,    0,    0,156236
  5211. ,13462,    0,    0,    0,59154,    0,59156,    0,    0,    0
  5212. ,59160,    0,    0,    0,110563,    0,    0,    0,    0,    0
  5213. ,259055,    0,    0,    0,    0,    0,247639,133420,59178,59179
  5214. ,59180,    0,59182,59183,59184,59185,    0,    0,    0,    0
  5215. ,    0,    0,    0,    0,    0,87750,    0,    0,    0,247662
  5216. ,    0,    0,    0,53492,    0,    0,    0,    0,    0,    0
  5217. ,247673,    0,196276,    0,87769,    0,    0,270524,    0,207705
  5218. ,    0,    0,207708,344773,    0,    0,327643,    0,219136,    0
  5219. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5220. ,    0,    0,    0,    0,247707,247708,    0,    0,    0,247712
  5221. ,    0,    0,    0,    0,    0,    0,    0,264853,247721,247722
  5222. ,    0,247724,247725,247726,    0,    0,247729,247730,247731,    0
  5223. ,    0,247734,    0,    0,    0,    0,    0,    0,247741,    0
  5224. ,    0,    0,    0,327700,53573,219193,53575,53576,    0,    0
  5225. ,    0,    0,    0,156380,344844,    0,344846,    0,    0,    0
  5226. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5227. ,    0,    0,    0,293464,    0,    0,202091,    0,    0,    0
  5228. ,    0,    0,    0,310607,    0,82169,    0,247790,    0,    0
  5229. ,    0,    0,127864,    0,    0,    0,219244,    0,219246,    0
  5230. ,    0,    0,184984,    0,    0,    0,    0,    0,287788,    0
  5231. ,    0,    0,    0,259238,259239,    0,219264,    0,219266,    0
  5232. ,259245,333489,    0,259248,    0,    0,339205,    0,    0,    0
  5233. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5234. ,    0,    0,344932,    0,    0,    0,    0,    0,    0,    0
  5235. ,    0,    0,    0,    0,    0,253569,    0,    0,    0,    0
  5236. ,    0,    0,    0,    0,    0,    0,    0,    0,53697,    0
  5237. ,    0,333539,    0,    0,    0,    0,    0,25151,282147,25153
  5238. ,    0,    0,    0,299285,    0,    0,    0,    0,    0,    0
  5239. ,    0,145096,    0,    0,    0,    0,    0,87992,322144,247902
  5240. ,    0,282170,282171,    0,219352,    0,    0,    0,    0,    0
  5241. ,25184,    0,    0,25187,190807,230785,    0,    0,    0,    0
  5242. ,    0,    0,    0,    0,    0,    0,    0,76600,    0,    0
  5243. ,    0,    0,    0,    0,    0,    0,    0,322183,    0,82323
  5244. ,    0,    0,    0,    0,    0,82329,    0,173707,270795,    0
  5245. ,    0,322197,    0,    0,    0,322201,    0,    0,156585,    0
  5246. ,    0,247964,    0,    0,    0,    0,    0,    0,    0,    0
  5247. ,282239,105199,    0,    0,213711,    0,    0,    0,    0,    0
  5248. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5249. ,139484,    0,    0,    0,    0,    0,    0,    0,139492,    0
  5250. ,    0,    0,    0,    0,105232,105233,253720,    0,168057,    0
  5251. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5252. ,31005,    0,    0,    0,    0,345115,333694,    0,25302,25303
  5253. ,25304,213768,    0,105261,    0,105263,105264,    0,    0,105267
  5254. ,    0,    0,105270,345133,    0,    0,139540,345137,    0,    0
  5255. ,    0,76724,    0,    0,25328,    0,179527,    0,25332,25333
  5256. ,25334,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5257. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5258. ,    0,    0,345172,    0,    0,    0,    0,    0,    0,    0
  5259. ,    0,    0,    0,    0,    0,    0,145301,    0,    0,    0
  5260. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5261. ,105338,    0,    0,88208,    0,    0,    0,156744,13970,219567
  5262. ,    0,105349,76795,    0,    0,    0,    0,    0,128200,185311
  5263. ,    0,185313,    0,    0,    0,    0,    0,    0,    0,322385
  5264. ,    0,    0,    0,    0,    0, 2575,    0,145352,    0,82533
  5265. ,    0,    0,168201,    0,105382,105383,105384,    0,    0,185341
  5266. ,    0,185343,185344, 2593,    0,185347,    0,145372,185350,    0
  5267. ,185352,    0,    0,    0,    0,179646,    0,105405,105406,    0
  5268. ,105408,168230,105410,105411,    0,    0,    0,213924,    0,105417
  5269. ,93996,    0,322438,322439,322440,322441,    0,    0,    0,311023
  5270. ,    0,    0,    0,    0,    0,133988,133989,    0,    0,133992
  5271. ,191103,    0,    0,185395,    0,    0,    0,    0,    0,    0
  5272. ,    0,    0, 2652, 2653,    0, 2655, 2656,    0,    0,    0
  5273. ,    0,    0,    0,276791,134017,134018,    0,    0,    0,    0
  5274. ,134023,    0,191135,    0,191137,    0,    0,185429,    0,    0
  5275. ,    0,    0,42659,    0,    0,    0,    0,    0,    0,    0
  5276. ,156887,    0,    0,    0,    0,    0,    0,282536,    0,    0
  5277. ,    0,    0,    0,191166,191167,    0,    0,    0,191171,    0
  5278. ,    0,    0,185464,191176,    0,    0,    0,    0,356800,    0
  5279. ,    0,76964,156919,156920,    0,185477,185478,185479,185480,185481
  5280. ,185482, 2731, 2732,185485,185486,185487,185488,    0,185490,185491
  5281. ,185492,    0,185494,    0,    0,185497,    0,    0,305431,305432
  5282. ,305433,    0,    0,    0,    0,156952,    0,    0,    0,31314
  5283. ,    0,156958,259757,156960,65585,    0,356848,    0,    0,    0
  5284. ,31325,134124,    0,    0,31329,31330,31331,    0,305461,    0
  5285. ,305463,305464,111291,    0,    0,134138,134139,    0,    0,305472
  5286. ,    0,    0,    0,31348,    0,    0,134149,    0,    0,    0
  5287. ,    0,    0,    0,    0,31359,31360,157003,168426,    0,    0
  5288. ,134163,134164,    0,134166,    0,134168,    0,134170,    0,    0
  5289. ,134173,    0,    0,    0,    0,    0, 2826,    0,254112,    0
  5290. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,259834
  5291. ,    0,    0,    0,    0,    0,77088,191309,191310,191311,    0
  5292. ,    0,191314,191315,    0,    0,    0,    0,185609,191321,254143
  5293. ,231300,    0,    0,    0,254148,    0,    0,    0,328395,    0
  5294. , 2870, 2871,54271,    0,    0,157072,    0,    0, 2878,157076
  5295. ,    0,    0,    0,    0,    0,    0,    0,    0,157085,157086
  5296. ,157087,157088,157089,157090,259889,    0,157093,157094,157095,    0
  5297. ,305583,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5298. ,    0,54310,    0,54312,    0,    0,77159,    0,    0,    0
  5299. ,    0,    0,305605,    0,305607,305608,311320,    0,305611,305612
  5300. ,    0,305614,    0,    0,305617,157132,294197,    0,157135,    0
  5301. ,    0,254225,    0,    0,    0,    0,277074,277075,    0,    0
  5302. ,    0,328478,    0,277081,    0,    0,54355,    0,    0,299931
  5303. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5304. ,265676,    0,    0,    0,254258,    0,254260,    0,    0,    0
  5305. ,254264,    0,    0,    0,    0,    0,225715,    0,    0,328516
  5306. ,54389,174321,357074,    0,    0,    0,    0,254281,254282,254283
  5307. ,254284,    0,254286,254287,    0,254289,254290,    0,    0,254293
  5308. ,    0,    0,    0,    0,117234,    0,225745,225746,225747,225748
  5309. ,    0,    0,225751,    0,54423,    0,    0,225756,    0,    0
  5310. ,117250,    0,    0,117253,    0,    0,    0,    0,    0,54438
  5311. ,54439,54440,54441,54442,117264,    0,54445,54446,    0,54448
  5312. ,    0,54450,54451,    0,54453,54454,    0,    0,54457,    0
  5313. ,231500,88726,    0,    0,    0,    0,    0,191530,191531,191532
  5314. ,225799,    0,191535,83027,357156,191538,    0,191540,    0,    0
  5315. ,    0,    0,357164,140147,    0,265791,    0,    0,    0,    0
  5316. ,    0,174421,117312,    0,117314,117315,117316,    0,    0,    0
  5317. ,    0,    0,    0,    0,225833, 8816,140170,    0,    0,    0
  5318. ,140174,    0,140176,    0,    0,140179,    0,    0,    0,    0
  5319. ,    0,    0,    0,    0,    0,140189,260121,    0,    0,    0
  5320. ,357212,157328,    0,    0,    0,65956,322952,    0,    0,    0
  5321. ,    0,    0,    0,    0,    0,140209,140210,140211,140212,140213
  5322. ,140214,140215,    0,    0,    0,    0,225885,    0,    0,140223
  5323. ,225889,    0,225891,    0,    0,    0,    0,    0,    0,    0
  5324. ,117390,    0,    0,    0,168793,    0,168795,    0,    0,    0
  5325. ,168799,123112,    0,    0,334422,54584,    0,191650,191651,191652
  5326. ,    0,    0,    0,191656,    0,    0,    0,    0,    0,    0
  5327. ,    0,    0,    0,260198,    0,    0,    0,271624,    0,    0
  5328. ,191673,191674,191675,191676,31769,    0,    0,    0,    0,    0
  5329. ,    0,31776,    0,    0,    0,294486,    0,294488,    0,    0
  5330. ,294491,    0,    0,    0,    0,31790,    0,    0,    0,294500
  5331. ,294501,    0,111751,294504,294505,    0,    0,    0,294509,    0
  5332. ,    0,    0,294513,    0,294515,186007,117476,237408,    0,    0
  5333. ,283099,294522,    0,117483,    0,117485,    0,94643,294529,    0
  5334. ,    0,117491,    0,117493,    0,111784,    0,294538,    0,    0
  5335. ,294541,    0,294543,294544,    0,174615,    0,186039,    0,186041
  5336. ,31845,31846,31847,    0,31849,31850,    0,31852,31853,94675
  5337. ,94676,94677,    0,    0,    0,111814,111815,    0,    0,    0
  5338. ,    0,117531,    0,111822,    0,    0,    0,186069,    0,186071
  5339. ,186072,    0,    0,186075,    0,    0,    0,    0,186080,94705
  5340. ,    0,94707,94708,151819,    0,94711,    0,    0,94714,    0
  5341. ,94716,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5342. ,    0,    0,    0,    0,    0,    0,357438,    0,111867,    0
  5343. ,    0,    0,    0,134716,134717,    0,    0,    0,294629,    0
  5344. ,    0,    0,    0,117593,    0,    0,    0,117597,117598,117599
  5345. ,    0,    0,151868,94759,    0,    0,266092,317492,    0,    0
  5346. ,31945,31946,    0,134746,    0,    0,    0,117617,    0,31954
  5347. ,    0,    0,294663,    0,    0,186157,94782,117627,117628,    0
  5348. ,    0,117631,117632,    0,    0,    0,43393,    0,    0,    0
  5349. ,    0,    0,    0,    0, 9135,111934,111935,111936,    0,    0
  5350. ,    0,111940,    0,    0,    0,31990,    0,    0,186190,186191
  5351. ,    0,    0,111951,    0,    0,    0,294707,    0,    0,    0
  5352. ,    0,    0,    0,    0,    0,    0,    0,    0,294719,    0
  5353. ,    0,    0,    0,186215,186216,94841,    0,    0,    0,    0
  5354. ,    0,    0,294733,    0,    0,94851,    0,    0,94854,    0
  5355. ,    0,    0,94858,249056,    0,94861,    0,32042,214795,    0
  5356. ,    0,    0,    0,    0,266200,157692,    0,    0,66319,    0
  5357. ,    0,    0,169121,    0,    0,    0,294767,    0,294769,    0
  5358. ,140574,140575,140576,    0,    0,    0,    0,140581,    0,    0
  5359. ,214827,    0,140586,140587,214831,    0,    0,    0,    0,    0
  5360. ,140594,140595,14954,    0,    0,    0,    0,134890,    0,134892
  5361. ,    0,    0,134895,134896,134897,134898,    0,346207,134901,    0
  5362. ,    0,14973,    0,    0,    0,    0,    0,    0,    0,311953
  5363. ,    0,    0,    0, 9274,    0,    0,    0,    0,54967,    0
  5364. ,    0,    0,    0,14995,14996,14997,14998,14999,15000,15001
  5365. ,15002,    0,    0,15005,15006,15007,    0,15009,15010,    0
  5366. ,    0,15013,    0,15015,    0,    0,    0,    0,311992,    0
  5367. ,54999,    0,    0,    0,346264,    0,214913,    0,    0,    0
  5368. ,    0,    0,    0,    0,    0,    0,    0,197791,    0,186371
  5369. ,    0,37887,260617,55022,    0,    0,    0,    0,    0,    0
  5370. ,55029,55030,55031,55032,    0,    0,55035,    0,    0,    0
  5371. ,214947,    0,    0,    0,    0,214952,    0,    0,    0,    0
  5372. ,    0,    0,186404,186405,214961,214962,    0,214964,214965,214966
  5373. ,220678,    0,    0,214970,214971,214972,    0,214974,    0,214976
  5374. ,214977,214978,312066,    0,214981,    0,    0,    0,312072,    0
  5375. ,    0,    0,186434,    0,    0,312079,312080,    0,312082,312083
  5376. ,186442,    0,186444,312087,    0,    0,    0,352068,    0,    0
  5377. ,312094,    0,312096,312097,215011,    0,    0,55106,    0,    0
  5378. ,    0,312105,    0,60823,60824,60825,    0,    0,55117,    0
  5379. ,    0,    0,    0,    0,    0,    0,135079,    0,    0,300701
  5380. ,    0,26575,    0,    0,    0,    0,    0,    0,32293,    0
  5381. ,32295,255025,    0,60853,    0,60855,    0,    0,    0,60859
  5382. ,    0,    0,55151,55152,226483,    0,135109,    0,    0,    0
  5383. ,300732,    0,135115,    0,26608,    0,    0,135120,300740,186521
  5384. ,    0,    0,    0,    0,55173,55174,55175,55176,    0,55178
  5385. ,55179,55180,    0,55182,    0,283624,55185,43764,    0,    0
  5386. ,    0,    0,266498,26637,    0,26639,26640,    0,    0,26643
  5387. ,    0,    0,    0,    0,    0,    0,    0,186559,186560,186561
  5388. ,    0,186563,    0,    0,    0,    0,158013,186569,186570,186571
  5389. ,186572,186573,    0,    0,    0,186577,186578,186579,186580,    0
  5390. ,186582,    0,    0,    0,    0,249408,    0,186589,249411,    0
  5391. ,    0,249414,    0,249416,    0,    0,    0,158044,300820,    0
  5392. ,158047,15273,    0,158050,    0,158052,66677,    0,    0,158056
  5393. ,    0,    0,    0,    0,60974,    0,60976,192330,    0,    0
  5394. ,    0,    0,232312,    0,    0,306558,306559,135230,    0,    0
  5395. ,300852,26725,306565,135236,300856,    0,249459,    0,    0,    0
  5396. ,61000,    0,61002,61003,61004,61005,    0,    0,158095,203784
  5397. ,135253,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5398. ,    0,    0,135265,300885,26758,26759,26760,    0,    0,    0
  5399. ,    0,158118,    0,    0,    0,    0,    0,    0,329455,329456
  5400. ,329457,    0,    0,    0,    0,    0,    0,    0,26782,26783
  5401. ,26784,    0,    0,26787,26788,26789,26790,    0,55347,    0
  5402. ,    0,    0,    0,    0,    0,249528,    0,    0,329485,    0
  5403. ,329487,329488,    0,    0,    0,    0,    0,    0,249541,    0
  5404. ,249543,    0,249545,249546,220992,    0,249549,249550,249551,249552
  5405. ,158177,    0,    0,    0,    0,    0,21119,    0,    0,    0
  5406. ,158187,158188,    0,158190,    0,    0,    0,    0,    0,    0
  5407. ,    0,    0,    0,55402,    0,55404,    0, 4007,    0,    0
  5408. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5409. ,    0,    0,    0,    0,    0,    0,203911,    0,186780,    0
  5410. ,    0,    0,    0,278161,318139,329562,    0,    0,112547, 4039
  5411. , 4040, 4041,215349,21176,    0,215352,329573,    0,    0,329576
  5412. ,    0,    0,    0,    0,    0,243917,    0,    0,    0,301031
  5413. ,    0,181102,    0,    0,    0,    0,318171,    0,318173, 4069
  5414. , 4070,    0, 4072,    0,    0, 4075,    0,    0,    0,329606
  5415. ,    0,329608,    0,    0,278212,329612,335324,    0,    0,    0
  5416. ,    0,301063,301064,    0,    0,    0,318201,318202,318203,318204
  5417. ,152586,    0,    0,    0,    0,    0,278234,    0,329635,329636
  5418. ,    0,329638,    0,    0,    0,55514,55515,    0,    0,    0
  5419. ,    0,    0,301094,    0,301096,    0,    0,    0,38394,    0
  5420. ,    0,    0,301104,    0,    0,    0,    0,    0,    0,55538
  5421. ,55539,55540,    0,55542,55543,    0,    0,    0,118368,    0
  5422. ,55549,    0,    0,    0,    0,    0,    0, 4157,    0,    0
  5423. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5424. ,    0,    0,    0,    0,358256,301147,    0,244039,244040,    0
  5425. ,    0,    0,    0,49871,    0,318290,95562,318292,    0,    0
  5426. , 4190, 4191,    0,    0,266900,    0, 4196,    0,301170,    0
  5427. ,    0,    0, 4202, 4203,    0, 4205, 4206, 4207, 4208,    0
  5428. , 4210,    0,    0, 4213,    0,    0,    0,    0,    0,    0
  5429. , 4220, 4221, 4222,    0,324040, 4225,    0,    0,    0,    0
  5430. ,    0,    0,255516,118453,    0,    0,    0,    0,    0,    0
  5431. ,318345,318346,    0,    0,    0,    0,    0,    0,    0,318354
  5432. ,    0,49939,318357,    0,49942,    0,49944,301229,301230,301231
  5433. ,301232,301233,301234,    0,    0,301237,    0,    0,    0,    0
  5434. ,301242,301243,301244,    0,301246,346935,    0,    0,    0,289829
  5435. ,    0,    0,    0,    0,    0,    0,147061,    0,    0,147064
  5436. ,    0,    0,    0,346953,    0,    0,55695,147072,147073,    0
  5437. ,38566,    0,    0,84257,    0,    0,    0,    0,    0,    0
  5438. ,    0,    0,    0,147088,    0,    0,147091,    0,    0,    0
  5439. ,    0,    0,50010,    0,    0,147100,    0,    0,    0,    0
  5440. ,55729,    0,346992,50021,    0,    0,    0,    0,    0,    0
  5441. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5442. ,    0,    0,    0,    0,    0,    0,    0,    0,55757,55758
  5443. ,55759,55760,    0,    0,55763,    0,50054,    0,50056,55768
  5444. ,    0,    0,50060,    0,    0,    0,    0,    0,    0,    0
  5445. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,50077
  5446. ,50078,    0,50080,    0,50082,50083,    0,50085,50086,147174
  5447. ,    0,    0,347062,    0,    0,147180,    0,    0,    0,84363
  5448. ,147185,147186,147187,147188,147189,147190,147191,    0,    0,    0
  5449. ,147195,147196,147197,    0,187176,    0,    0,147202,    0,147204
  5450. ,147205,    0,    0,    0,    0,55834,    0,    0,147213,    0
  5451. ,    0,    0,    0,    0,    0,    0,55845,244309,    0,    0
  5452. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,152945
  5453. ,    0,    0,    0,10174,    0,    0,    0,    0,    0,255753
  5454. ,    0,    0,255756,    0,    0,    0,84430,    0,38744,55878
  5455. ,55879,55880,    0,    0,    0,55884,347146,    0,347148,    0
  5456. ,175820,38757,38758,    0,    0,    0,    0,141561,175828,175829
  5457. ,    0,    0,55901,55902,55903,55904,    0,55906,    0,55908
  5458. ,55909,55910,    0,    0,    0,    0,    0,284356,244380,    0
  5459. ,244382,    0,192985,    0,    0,    0,175856,    0,    0,175859
  5460. ,    0,    0,    0,    0,    0,    0,    0,301509,    0,    0
  5461. ,    0,    0,    0,    0,118764,    0,    0,    0,    0,    0
  5462. ,    0,    0,33107,175883,    0,    0,    0,    0,267264,84513
  5463. ,    0,    0,    0,341512,    0,    0,    0,33122,    0,    0
  5464. ,    0,    0,    0,284412,    0,    0,    0,    0,    0,    0
  5465. ,38846,    0,    0,    0,67405,    0,    0,    0,    0,    0
  5466. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5467. ,    0,    0,193065,    0,    0,    0,244468,    0,    0,    0
  5468. ,90275,    0,    0,    0,175944,    0,175946,107415,    0,107417
  5469. ,    0,    0,    0,    0,    0,    0,    0,    0,124559,    0
  5470. ,    0,175961,    0,    0,    0,    0,    0,    0,255922,    0
  5471. ,    0,10352,90307,90308,90309,    0,    0,107445,107446,107447
  5472. ,107448,    0,    0,    0,10365,10366,107454,    0,107456,    0
  5473. ,56059,    0,    0,    0,38930,    0,    0,    0,    0,    0
  5474. ,    0,    0,    0,90338,90339,90340,347336,    0,90343,    0
  5475. ,    0,90346,124613,90348,    0,    0,    0,    0,    0,    0
  5476. ,    0,    0,56091,56092,56093,    0,    0,    0,    0,    0
  5477. ,    0,    0,    0,    0,    0,67526,    0,67528,    0,    0
  5478. ,    0,    0,    0,    0,    0,    0,    0,313111,    0,    0
  5479. ,    0,    0,56121,56122,    0,56124,90391,    0,    0,    0
  5480. ,    0,56130,    0,56132,    0,107533,    0,    0,    0,    0
  5481. ,    0,    0,    0,10454,    0,    0,21879,39013,    0,90414
  5482. ,    0,    0,221770,84707,    0,    0,    0,    0,    0,    0
  5483. ,90425,    0,    0,204648,    0,113274,113275,    0,    0,107567
  5484. ,107568,    0,113281,    0,107572,    0,    0,    0,    0,    0
  5485. ,    0,    0,    0,107581,    0,    0,    0,    0,187540,    0
  5486. ,    0,107589,107590,    0,    0,90460,107594,    0,107596,    0
  5487. ,107598,    0,    0,107601,    0,    0,90471,61917,    0,90474
  5488. ,    0,90476,    0,    0,    0,    0,90481,90482,    0,90484
  5489. ,    0,90486,90487,    0,    0,90490,    0,10538,90493,119049
  5490. ,    0,    0,    0,    0,    0,61945,61946,61947,61948,    0
  5491. ,    0,61951,    0,    0,56243,56244,    0,    0,    0,56248
  5492. ,267556,267557,    0,    0,    0,    0,    0,    0,56257,    0
  5493. ,    0,210457,    0,    0,    0,    0,56265,    0,56267,56268
  5494. ,44847,56270,    0,56272,    0,56274,    0,    0,    0,250452
  5495. ,    0,267587,    0,    0,267590,    0,    0,233327,    0,    0
  5496. ,    0,    0,    0,    0,67715,    0,    0,    0,    0,    0
  5497. ,    0,301873,358984,290453,    0,267611,    0,    0,    0,    0
  5498. ,    0,176241,    0,    0,    0,    0,    0,    0,    0,233359
  5499. ,233360,233361,    0,62033,    0,    0,    0,    0,    0,    0
  5500. ,    0,    0,    0,    0,    0,    0,159133,    0,    0,    0
  5501. ,    0,    0,    0,    0,    0,    0,    0,    0,67769,    0
  5502. ,233390,    0,    0,    0,    0,    0,62066,62067,    0,    0
  5503. ,233400,    0,62072,    0,    0,    0,    0,    0,    0,307652
  5504. ,    0,267677,    0,267679,    0,267681,    0,    0,    0,    0
  5505. ,267686,    0,    0,    0,    0,    0,    0,62097,    0,    0
  5506. ,    0,    0,    0,16415,16416,16417,    0,    0,    0,    0
  5507. ,    0,    0,    0,233443, 5004,    0,    0,    0,    0,    0
  5508. ,    0,107809,107810,    0,107812,    0,    0,107815,319123,    0
  5509. ,107818,    0,107820,16445,    0,16447,    0,    0,170647,16451
  5510. ,    0,    0,16454,    0,16456,    0,    0,233477,    0,    0
  5511. ,    0,    0,90707,    0,    0,    0,    0,    0,    0,    0
  5512. ,204935,    0,    0,    0,    0,    0,56455,56456,56457,    0
  5513. ,    0,    0,    0,    0,330591,    0,    0,    0,    0,    0
  5514. ,233510,233511,233512,    0,147849,    0,233516,16499,296339,    0
  5515. ,284919,279209,    0,    0,204969,233525,    0,    0,    0,    0
  5516. ,    0,    0,56491,233533,233534,    0,233536,56496,233538,    0
  5517. ,    0,233541,233542,    0,    0,233545,    0,    0,    0,250682
  5518. ,    0,16533,204997,204998,204999,205000,222134,    0,205003,113628
  5519. ,    0,205006,    0,205008,147899,    0,    0,    0,    0,    0
  5520. ,16552,    0,    0,107931,107932,    0,    0,    0,    0,    0
  5521. ,    0,239292,    0,    0,16566,16567,16568,107945,    0,16571
  5522. ,16572,16573,67973,16575,    0,    0,    0,    0,107956,16581
  5523. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,16591
  5524. ,16592,    0,16594,16595,    0,16597,16598,    0,336416,16601
  5525. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5526. ,    0,    0,    0,    0,119414,45172,    0,    0,45175,    0
  5527. ,    0,    0,    0,    0,62314,62315,    0,56606,56607,56608
  5528. ,250783,62321,    0,    0,    0,28059,    0,    0,    0,    0
  5529. ,    0,    0,56621,45200,    0,    0,    0,    0,    0,    0
  5530. ,56629,    0,    0,    0,    0,    0,56635,56636,56637,    0
  5531. ,45217,45218,    0,45220,45221,45222,    0,    0,    0,    0
  5532. ,    0,205136,205137,205138,    0,28099,205141,205142,205143,205144
  5533. ,    0,205146,205147,205148,    0,205150,359348,    0,205153,    0
  5534. ,    0,228000,    0,228002,    0,176605,    0,176607,    0,    0
  5535. ,    0,    0,153768,    0,    0,    0,    0,    0,    0,    0
  5536. ,    0,342240,    0,    0,    0,    0,307979,307980,    0,    0
  5537. ,    0,    0,85256,    0,176634,    0,    0,    0,    0,28153
  5538. ,    0,    0,68133,    0,    0,    0,    0,    0,    0,    0
  5539. ,    0,    0,33877,33878,33879,    0,308009,308010,308011,308012
  5540. ,    0,    0,308015,    0,79577,308018,    0,    0,    0,33894
  5541. ,    0,    0,33897,    0,    0,273762,    0,290897,    0,    0
  5542. ,    0,    0,33907,33908,    0,308038,33911,    0,    0,228088
  5543. ,125291,    0,    0,176693,313758,    0,45343,45344,    0,    0
  5544. ,    0,    0,302344,    0,    0,    0,    0,    0,45355,    0
  5545. ,    0,    0,    0,    0,    0,    0,    0,    0,56787,    0
  5546. ,    0,    0,    0,    0,    0,    0,176726,176727,    0,33954
  5547. ,    0,33956,33957,    0,33959,33960,33961,    0,    0,    0
  5548. ,    0,    0,    0,    0,308097,    0,    0,    0,33973,33974
  5549. ,    0,56820,56821,    0,    0,199599,    0,    0,    0,    0
  5550. ,    0,    0,    0,216740,    0,    0,    0,    0,    0,    0
  5551. ,    0,    0,22575,    0,313838,313839,216753,    0,    0,    0
  5552. ,56849,    0,56851,    0,    0,    0,56855,    0,    0,56858
  5553. ,119680,56860,    0,    0,    0,    0,    0,279595,    0,    0
  5554. ,308153,    0,308155,308156,34029,    0,    0,308160,308161,308162
  5555. ,    0,    0,308165,    0,    0,    0,    0,    0,113997,    0
  5556. ,39756,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5557. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,331036
  5558. ,    0,153997,331039,188265,    0,    0,188268,    0,    0,    0
  5559. ,74052,    0,    0,    0,279652, 5525,    0,    0,119748,    0
  5560. ,    0,    0,    0,    0,96910,216842,74068,    0,56937,    0
  5561. ,291090,291091,291092,    0,    0,    0,    0,    0,    0,    0
  5562. ,    0,    0,    0,    0,    0,    0,    0,119777,    0,211155
  5563. ,211156,211157,    0,    0,    0,34120,    0,    0,    0,    0
  5564. ,45547,56970,    0,56972,34129,34130,    0,56976,    0,    0
  5565. ,34135,    0,34137,    0,    0,279713,56985,    0,279716,211185
  5566. ,211186,211187,211188,45570,    0,    0,56995,56996,211194,    0
  5567. ,    0,57000,57001,57002,    0,    0,57005,    0,    0,    0
  5568. ,    0,    0,    0,28457,    0,11326,    0,    0,11329,    0
  5569. ,34175,    0,68443,    0,    0,    0,    0,    0,    0,    0
  5570. ,    0,34186,34187,34188,34189,    0,    0,85591,    0,    0
  5571. ,    0,    0,    0,211239,    0,    0,    0,    0,    0,    0
  5572. ,    0,    0,    0,    0,176984,    0,    0,85611,216965,142723
  5573. ,142724,142725,45639,    0,154150,    0,211262,    0,    0,159866
  5574. ,    0,325487,    0,    0,262669,    0,    0,    0,    0,    0
  5575. ,325496,    0,34237,    0,    0,    0,    0,159884,    0,142753
  5576. ,142754,142755,    0,    0,    0,142759,    0,    0,142762,    0
  5577. ,142764,    0,    0,    0,    0,34260,    0,    0,    0,    0
  5578. ,211306,211307,85665,    0,211323,199901,    0,211325, 5729,    0
  5579. ,154308,142886,    0,154309,142887,    0,337066,142892,    0,337068
  5580. ,142894,    0,274252,142899,    0,337074,205721,142900,    0,337076
  5581. ,142902,22971,    0,337078,142904,    0,337079,245703,142905,11552
  5582. ,    0,337083,142909,    0,262847,205737,    0,337092,11565,    0
  5583. ,337093,205740,    0,337097,11570,    0,337101,314257,    0,188632
  5584. ,68701,    0,245766,120124,    0,245774,120132,    0,245776,120134
  5585. ,    0,154401,120135,    0,257209,120145,    0,257212,120148,    0
  5586. ,228672,120163,    0,245815,120173,    0,325788,143036,    0,337217
  5587. ,11690,    0,325796,245842,    0,297249,211584,    0,297252,245853
  5588. ,    0,337230,245854,120212,    0,177333,51691,    0,337251,274430
  5589. ,    0,325851,274452,51723,34590,    0,291599,245911,    0,291600
  5590. ,245912,    0,337290,245914,    0,245915,120273,40319,    0,337293
  5591. ,245917,    0,337294,245918,    0,337296,217365,    0,337297,245921
  5592. ,    0,337299,308744,    0,337300,217369,    0,337302,308747,    0
  5593. ,337303,51753,    0,337304,291616,217373,120286,91731,51754,    0
  5594. ,337305,51755,    0,337306,217375,51756,    0,337307,217376,    0
  5595. ,337309,51759,    0,343027,337316,126009,    0,325898,291632,274499
  5596. ,    0,360165,337321,    0,360167,291635,    0,291638,120308,    0
  5597. ,291640,171709,    0,325914,91763,    0,337356,263113,  407,    0
  5598. ,337357,263114,    0,337358,40386,    0,120349,91794,    0,120350
  5599. ,91795,    0,120351,91796,    0,120352,57531,    0,120354,91799
  5600. ,    0,120357,91802,    0,274556,120359,91804,    0,120362,51830
  5601. ,    0,257428,120364,    0,291706,51844,    0,291717,171786,    0
  5602. ,360250,291718,    0,360252,291720,    0,263176,188933,    0,314576
  5603. ,114691,91847,    0,217494,51875,    0,217495,51876,    0,263187
  5604. ,120412,51880,    0,223212,120414,    0,291751,40467,    0,354573
  5605. ,291752,    0,91870,11916,    0,188963,51899,    0,51902,11925
  5606. ,    0,51903,11926,    0,206101,91881,51904,    0,206104,86173
  5607. ,    0,314624,291780,228959,    0,291782,46209,23365,    0,291785
  5608. ,188987,    0,331764,217544,126168,23370,    0,228991,211858,    0
  5609. ,228993,211860,91929,    0,211862,91931,    0,211863,91932,    0
  5610. ,280397,91934,    0,211868,91937,    0,211869,91938,    0,211871
  5611. ,91940,    0,211873,91942,    0,154765,91944,    0,211876,91945
  5612. ,    0,211877,154767,91946,80524,    0,246144,154768,    0,211881
  5613. ,120505,    0,229027,217605,211894,    0,229030,217608,189053,    0
  5614. ,229032,211899,189055,    0,217611,189056,    0,217612,211901,189057
  5615. ,    0,303292,211916,    0,154853,52055,    0,229109,126311,    0
  5616. ,154886,52088,    0,154887,52089,    0,263408,229142,126344,    0
  5617. ,229143,126345,    0,343368,229148,    0,229158,52117,    0,229159
  5618. ,92095,52118,    0,229160,52119,    0,229161,52120,    0,229162
  5619. ,200607,    0,229167,212034,52126,    0,343388,229168,212035,    0
  5620. ,212036,52128,    0,343390,229170,    0,229171,126373,    0,229172
  5621. ,126374,    0,229173,126375,    0,229174,126376,    0,229177,126379
  5622. ,    0,92128,40729,    0,263473,212074,    0,212086,200664,    0
  5623. ,212088,92157,    0,257777,212089,132135,92158,    0,212090,92159
  5624. ,    0,212091,92160,    0,212092,126427,    0,212094,92163,    0
  5625. ,212100,  793,    0,212105,143573,    0,343476,132169,    0,212140
  5626. ,143608,    0,212142,92211,    0,160749,52240,    0,229284,132197
  5627. ,    0,132198,52244,    0,229287,132200,    0,263555,229289,    0
  5628. ,132203,23694,    0,126494,69384,    0,132206,126495,    0,126500
  5629. ,92234,    0,86527,52261,    0,52264,23709,    0,126509,52266
  5630. ,    0,126510,52267,    0,263575,126511,115089,92245,52268,    0
  5631. ,126512,52269,    0,189334,126513,52270,    0,223623,23738,    0
  5632. ,332136,246471,    0,132274,92297,    0,155129,132285,92308,    0
  5633. ,92313,35203,    0,132342,12411,    0,132347,126636,    0,132350
  5634. ,126639,    0,132353,29555,    0,63836,40992,    0,292313,143827
  5635. ,52451,    0,52453,29609,    0,235224,115293,    0,303763,263786
  5636. ,    0,320909,52492,    0,63924,18236,    0,263842,155333,    0
  5637. ,258141,132499,    0,349520,18282,    0,275337,132562,52608,    0
  5638. ,355301,132572,    0,338177,52627,    0,115453,52632,    0,155431
  5639. ,52633,    0,286835,132638,    0,138350,18419,    0,155493,132649
  5640. ,    0,155494,138361,    0,355423,104139,    0,355424,104140,    0
  5641. ,132699,121277,    0,286897,132700,    0,355430,286898,132701,    0
  5642. ,286899,132702,    0,286900,155547,    0,286903,132706,    0,286908
  5643. ,132711,29913,    0,144147,104170,    0,155570,104171,    0,195548
  5644. ,104172,    0,344051,121322,    0,275524,121327,    0,344057,52796
  5645. ,    0,207001,144180,    0,155614,35683,    0,326952,218443,    0
  5646. ,155631,144209,    0,309829,286985,155632,144210,    0,155633,144211
  5647. ,    0,155634,144212,115657,    0,155637,144215,    0,218461,155640
  5648. ,144218,    0,155642,144220,    0,155643,52845,    0,155644,92823
  5649. ,    0,155645,104246,    0,155649,52851,    0,127101,104257,    0
  5650. ,218500, 1482,    0,287033, 1483,    0,287034,92860,    0,287042
  5651. ,104290,    0,287043,104291,    0,287044,104292,    0,287047,184249
  5652. ,    0,287048,110007,104296, 1498,    0,287049, 1499,    0,18634
  5653. , 1501,    0,92886, 1510,    0,144286,92887,    0,315617,92888
  5654. ,    0,349884,309907,    0,309909,104313,92891,    0,104315,30072
  5655. ,    0,104316,92894,    0,104318,92896,    0,144297,104320,    0
  5656. ,115783,92939,    0,207174,144353,    0,144356,81535,    0,144361
  5657. ,92962,    0,92973,52996,    0,281437,264304,155795,    0,155827
  5658. ,93006,    0,155828,93007,24475,    0,155829,93008,    0,321455
  5659. ,93015,    0,281487,178689,121579,93024,    0,93029,81607,    0
  5660. ,247231,93034,    0,281498,93035,81613,    0,155857,93036,    0
  5661. ,155858,93037,    0,155859,93038,81616,    0,247236,155860,    0
  5662. ,218720,184454,    0,161618,121641,    0,327239,161620,121643,    0
  5663. ,161630,64543,    0,298705,161641,    0,161645,155934,    0,327272
  5664. ,161653,    0,155945,53147,    0,235907,218774,138820,    0,235908
  5665. ,24601,    0,235909,138822,    0,161667,104557,    0,104558,87425
  5666. ,    0,161669,104559,    0,144539,121695,    0,218785,24611, 1767
  5667. ,    0,218789, 1771,    0,218791,161681,    0,327302,161683,    0
  5668. ,327303,253060,161684,    0,327307,53179,    0,155978,53180,36047
  5669. ,    0,310176,264488,155979,53181,    0,327310,155980,    0,235938
  5670. ,155984,121718,    0,235939,218806,    0,235940,218807,    0,218823
  5671. ,156002,    0,218824,156003,    0,156007,53209,    0,218829,156008
  5672. ,93187,53210,    0,258807,156009,53211,    0,156010,53212,    0
  5673. ,156013,53215,    0,321648,121763,    0,258839,138908,93220,53243
  5674. ,    0,258840,93221,    0,258841,218864,121777,    0,350221,121781
  5675. ,    0,327378,201736,121782,    0,275984,121787,    0,161769,121792
  5676. ,58971,    0,327389,121793,    0,236014,121794,    0,76107,53263
  5677. ,    0,258869,236025,161782,93250,    0,258870,236026,93251,    0
  5678. ,258871,93252,    0,258872,236028,104675,64698,    0,264585,93255
  5679. ,    0,258878,76126,    0,161802,59004,    0,327422,161803,59005
  5680. ,    0,327423,321712,161804,    0,236064,76156,    0,327450,59033
  5681. ,    0,327451,59034,    0,327452,59035,    0,327453,59036,    0
  5682. ,327454,281766,116147,    0,327457,236081,    0,281770,236082,53330
  5683. ,    0,236083,53331,    0,281772,236084,53332,    0,281775,236087
  5684. ,    0,236088,161845,53336,    0,236089,161846,    0,236093,161850
  5685. ,    0,161851,53342,41920,    0,281783,161852,53343,    0,281785
  5686. ,161854,53345,    0,161855,53346,    0,161856,53347,    0,161857
  5687. ,53348,    0,247523,161858,93326,53349,    0,258946,161859,53350
  5688. ,    0,161862,53353,    0,161863,53354,    0,161868,53359,    0
  5689. ,281800,93337,53360,    0,258957,53361,    0,281805,53365,    0
  5690. ,281806,116187,    0,281812,121904,    0,281813,190437,161882,    0
  5691. ,338924,281814,    0,281815,121907,116196,    0,281817,121909,    0
  5692. ,281822,247556,    0,281823,247557,    0,258990,93371,    0,258991
  5693. ,93372,    0,338949,161908,93376,    0,258996,161909,    0,161910
  5694. ,64823,    0,259006,81965,59121,    0,259007,247585,    0,321829
  5695. ,259008,247586,    0,259009,247587,    0,259010,247588,    0,281856
  5696. ,93393,    0,259013,247591,213325,93394,    0,259014,93395,    0
  5697. ,259015,156217,93396,    0,259016,247594,116241,    0,259018,247596
  5698. ,93399,    0,259019,156221,93400,    0,259020,190488,93401,    0
  5699. ,259021,93402,    0,190508,59155,    0,230487,190510,    0,247635
  5700. ,42039,    0,59186,47764,    0,270532,53514,    0,236274,219141
  5701. ,    0,247706,219151,190596,    0,264856,247723,    0,339108,247732
  5702. ,    0,247735,144937,    0,310557,270580,247736,    0,344824,247737
  5703. ,    0,247738,127807,    0,287785,184987,    0,310654,202145,    0
  5704. ,116557,25181,    0,282177,25182,    0,322155,25183,    0,213729
  5705. ,202307,    0,345084,322240,    0,190888,25269,    0,345093,105231
  5706. ,    0,105262,25308,    0,310868,105272,    0,328002,13897,    0
  5707. ,185279,168146,    0,202427,116762,    0,219564,13968,    0,322376
  5708. ,185312,    0,168193, 2574,    0,185342,105388, 2590,    0,288149
  5709. ,202484,145374,105397,    0,288152,133955, 2602,    0,105407,31164
  5710. ,    0,322430,105412,    0,213922,105413,    0,213923,105414,    0
  5711. ,322437,93997,    0,322443,311021,    0,133987,14056,    0,185418
  5712. ,134019,    0,134020,116887,    0,191136,134026,    0,231115,134028
  5713. ,    0,322501,145460,    0,191165,139766,    0,191168,82659,    0
  5714. ,356792,185462,    0,265417,191174,185463,    0,305399,185468,    0
  5715. ,156921,116944,82678,    0,185493,134094,    0,156949,134105,    0
  5716. ,282592,156950,    0,156951,82708,48442,    0,156955,122689,    0
  5717. ,305462,191242,    0,305467,139848,    0,305470,134140,    0,214097
  5718. ,191253,    0,254075,134144,31346,    0,139856,31347,    0,134147
  5719. ,31349,    0,134161,31363,    0,168428,134162,31364,    0,134167
  5720. ,65635,31369,    0,134169, 2816,    0,254107,191286, 2823,    0
  5721. ,254108,191287,    0,254109,191288, 2825,    0,191292,157026, 2829
  5722. ,    0,157037,139904,54239,    0,191312,31404,    0,254137,191316
  5723. ,    0,254138,191317,    0,305538,254139,191318,    0,254140,145631
  5724. ,    0,179902, 2861,    0,254146, 2862,    0,328393,305549,88531
  5725. , 2866,    0,328396,311263,    0,157070,54272,    0,157071,54273
  5726. ,    0,305582,157096,    0,305584,157098,    0,157099,54301,    0
  5727. ,157100,54302,    0,157101,54303,    0,305588,157102,54304,    0
  5728. ,157105,54307,    0,305606,277051,168542,    0,305610,168546,    0
  5729. ,305613,254214,    0,328481,225683,    0,254244,185712,    0,265675
  5730. ,65790,    0,254259, 2975,    0,334217,54378,    0,328514,225716
  5731. ,    0,328515,225717,    0,254288,191467,    0,277143,117235,    0
  5732. ,202908,54422,    0,225754,54424,    0,334267,54428,    0,191499
  5733. ,54435,    0,191500,157234,    0,231478,191501,54437,    0,117268
  5734. ,54447,    0,208649,54452,    0,208652, 8767,    0,191529,140130
  5735. ,    0,225822,117313,    0,305781,151584,    0,322953,225866,    0
  5736. ,225867,31693,    0,225868,31694,    0,140204,65961,31695,    0
  5737. ,225872,191606,    0,225881,140216,    0,225882,140217,    0,225883
  5738. ,191617,140218,    0,225884,31710,    0,225886,140221,    0,140222
  5739. ,31713,    0,225890,140225,    0,225892,140227,117383,    0,225894
  5740. ,140229,    0,265872,225895,140230,    0,225896,140231,117387,    0
  5741. ,225897,117388,31723,    0,225898,117389,31724,    0,345831,117391
  5742. ,    0,225901,117392,31727,    0,117393,31728,    0,191678,31770
  5743. ,    0,191679,31771,    0,294478,191680,31772,    0,191681,31773
  5744. ,    0,294480,191682,31774,    0,145995,31775,    0,191685,31777
  5745. ,    0,294490, 3229,    0,294495,31789,    0,294497,31791,    0
  5746. ,294519,260253,    0,294527,117486,    0,146044,117489,    0,117494
  5747. ,111783,    0,111785,54675,    0,186040,31843,    0,220314,31851
  5748. ,    0,111813,94680,    0,294568,203192,111816,    0,117530,111819
  5749. ,    0,294576,111824,    0,186070,117538,    0,186078,20459,    0
  5750. ,134683,94706,    0,134715,117582,    0,294642,111890,31936,    0
  5751. ,317493,31943,    0,134745,111901,    0,186146,134747,117614,31949
  5752. ,    0,277523,226124,134748,117615,    0,117616,31951,    0,134751
  5753. ,31953,    0,294662,134754,    0,294664,134756,    0,191872,43386
  5754. ,    0,117637,94793,    0,94812,31991,    0,186192,111949,    0
  5755. ,294702,111950,    0,266149,111952,31998,    0,294705,186196,111953
  5756. ,    0,294706,111954,    0,294708,140511,32002,    0,294709,111957
  5757. ,32003,    0,294710,111958,32004,    0,294711,111959,94826,32005
  5758. ,    0,294712,111960,94827,    0,294713,117672,94828,    0,294714
  5759. ,111962,    0,294715,111963,    0,294716,111964,    0,294717,214763
  5760. ,111965,94832,    0,294718,111966,    0,294720,94835,    0,294721
  5761. ,111969,    0,294722,186213,94837,    0,294723,186214,    0,266172
  5762. ,186218,94842,    0,294728,186219,94843,83421,    0,186220,94844
  5763. ,    0,186221,134822,94845,    0,186222,140534,94846,    0,186225
  5764. ,94849,    0,140538,94850,    0,140540,94852,    0,140543,94855
  5765. ,    0,157677,134833,94856,    0,294742,94857,    0,306172,214796
  5766. ,140553,    0,260485,214797,    0,323312,266202,    0,140568,66325
  5767. ,    0,294766,169124,    0,294768,66328,    0,294770,289059,140573
  5768. ,14931,    0,140577,134866,    0,266220,140578,134867,    0,140579
  5769. ,134868,    0,266222,140580,    0,214825,140582,    0,214826,134872
  5770. ,    0,214828,140585,    0,197699,140589,    0,214834,140591,    0
  5771. ,214836,140593,    0,134889,14958,    0,134891,14960,    0,134894
  5772. ,14963,    0,14971, 9260,    0,311956, 9273,    0,289116,14988
  5773. ,    0,260562,112076,    0,311964,112079,    0,311965,112080,14993
  5774. ,    0,214879,112081,14994,    0,311980,89251,15008,    0,311983
  5775. ,15011,    0,89257,15014,    0,214902,89260,    0,311995,55000
  5776. ,    0,266308,55001,    0,312019,197799,    0,214946,157836,55038
  5777. ,    0,214948,55040,    0,186403, 9362,    0,214963,186408,    0
  5778. ,203546,83615,    0,214969,203547,    0,214975,203553,    0,186433
  5779. ,60791,    0,312077,186435,    0,312078,186436,    0,312081,186439
  5780. ,    0,312088,135047,    0,312089,300667,    0,300699,135080,    0
  5781. ,300700,135081,    0,186487, 9446,    0,255028,60854,    0,152232
  5782. ,60856,    0,226480,55150,    0,300729,135110,55156,    0,300730
  5783. ,186510,135111,    0,300731,135112,    0,300735,26607,    0,135118
  5784. ,26609,    0,300738,55165,    0,249343,117990,    0,283621,157979
  5785. ,55181,    0,283623,209380,    0,186540,43765,    0,192257,26638
  5786. ,    0,249375,186554,    0,249376,186555,    0,249377,186556,    0
  5787. ,186565,100900,    0,306497,158011,    0,158012,20948,    0,266528
  5788. ,186574,    0,186583,60941,    0,249405,186584,    0,249406,186585
  5789. ,135186, 9544,    0,300806,249407,186586,    0,158041,135197,    0
  5790. ,300817,192308,158042,    0,300818,158043,    0,323676,123791,    0
  5791. ,192328,60975,    0,283709,60980,    0,300850,135231,    0,300851
  5792. ,135232,    0,346549,198063,    0,329423,61006,    0,300873,135254
  5793. ,    0,300874,135255,    0,300875,283742,135256,    0,300876,283743
  5794. ,    0,283744,135258,    0,300878,135259,32461,    0,300879,135260
  5795. ,    0,300880,135261,32463,    0,300881,249482,135262,    0,300882
  5796. ,289460,    0,249493,26764,    0,158129,55331,    0,180983,26786
  5797. ,    0,249526,192416,    0,249527,89619,    0,329486,249532,89624
  5798. ,    0,329491,55363,    0,158162,55364,    0,158163,55365,    0
  5799. ,329494,158164,    0,329496,249542,    0,249544,158168,    0,249554
  5800. ,198155,158178,    0,249555,158179,    0,249556,158180,    0,249557
  5801. ,158181,    0,249558,158182,    0,249561,158185,    0,198163,158186
  5802. ,    0,158191,55393,    0,158192,55394,    0,158193,55395,    0
  5803. ,158194,55396,    0,158197,55399,    0,249591,21151,    0,329574
  5804. ,112556,    0,318172,95443,    0,55470, 4071,    0,209674, 4078
  5805. ,    0,329607,203965, 4080,    0,209678,55481,    0,301065,209689
  5806. ,    0,209697,152587,    0,329629,318207,    0,329630, 4103,    0
  5807. ,329631,278232,    0,329632,318210,    0,329634,318212,152593,    0
  5808. ,329637,152596,    0,329641,38380,    0,55516,32672,    0,301093
  5809. ,55520,    0,301095, 4123,    0,301099,38393,    0,301102,209726
  5810. ,55529,    0,186890,55537,    0,118365,55544,    0,55545, 4146
  5811. ,    0,118367,55546,    0,44129, 9863,    0,318278,192636,    0
  5812. ,318289,244046,    0,278320, 4192,    0,301181, 4209,    0,215521
  5813. , 4214,    0,49903, 4215,    0,49904,38482, 4216,    0,318322
  5814. ,49905,    0,318323, 4218,    0,318324, 4219,    0,318328,266929
  5815. ,    0,318347,301214,    0,318348,301215,    0,301216,204129,    0
  5816. ,318350,49933,    0,318351,49934,    0,318352,49935,    0,318353
  5817. ,301220,49936,    0,301238,118486,    0,301239,118487,    0,301240
  5818. ,118488,    0,301245,124204,    0,301249, 9988,    0,84244,10001
  5819. ,    0,147103,55727,    0,307012,55728,    0,204235,21483,    0
  5820. ,147127, 4352,    0,55766,50055,    0,112900,50079,    0,50084
  5821. ,10107,    0,347061,50089,    0,347063,90068,    0,352810,215746
  5822. ,    0,175817,118707,    0,135847,55893,    0,301480,55907,    0
  5823. ,175844,55913,    0,210121,192988,    0,324401,107383,    0,158783
  5824. ,67407,    0,267293,67408,    0,324404,124519,    0,193063,175930
  5825. ,    0,198792,107416,    0,153139,107451,    0,90337,67493,    0
  5826. ,90371,67527,    0,107522,56123,    0,198902,56127,    0,278896
  5827. ,107566,    0,313165,278899,    0,107591,90458,    0,107592,90459
  5828. ,    0,353168,107595, 4797,    0,107597,90464,56198, 4799,    0
  5829. ,90470,61915,    0,176138,90473,    0,90475,56209,    0,210408
  5830. ,90477,    0,210409,90478,    0,244680,90483,    0,153309,90488
  5831. ,    0,318929,90489,    0,353197,244688,    0,210439,56242,    0
  5832. ,210463,56266,44844,    0,301844,56271,    0,244736,56273,    0
  5833. ,250451,56277,    0,233389,107747,    0,233391,39217,    0,233392
  5834. ,124883,    0,233395,90620,    0,233398,170577,62068,    0,176291
  5835. ,16383,    0,307655,176302,    0,267680,216281,    0,142045,107779
  5836. ,    0,267688,107780,62092,    0,233423,107781,    0,210582,62096
  5837. ,    0,210584,62098,    0,33553,16420,    0,199187,107811,    0
  5838. ,56423,16446,    0,233466,16448,    0,313476,233522,204967,    0
  5839. ,233523,204968,    0,233526,56485,    0,233527,56486,    0,233528
  5840. ,107886,56487,    0,244951,233529,56488,    0,313484,233530,    0
  5841. ,233535,56494,    0,233539,107897,    0,233540,16522,    0,187878
  5842. ,39392,    0,136485,107930,    0,296396,147910,22268,    0,313532
  5843. ,107936,    0,107953,16577,    0,319261,107954,    0,107955,33712
  5844. ,    0,107958,16582,    0,107959,16583,    0,107960,16584,    0
  5845. ,107961,90828,56562,16585,    0,250737,107962,16586,    0,205051
  5846. ,45143,    0,107965,16589,    0,216475,16590,    0,56573,16596
  5847. ,    0,245049,90852,    0,205074,45166,    0,227929,205085,    0
  5848. ,302185,56612,    0,56630,45208,    0,233672,56631,    0,205118
  5849. ,56632,    0,205119,45211,    0,205120,56634,28079,    0,205124
  5850. ,56638,    0,56641,45219,    0,205133,125179,45225,    0,205134
  5851. ,45226,    0,205135,45227,    0,307947,205149,    0,267984,176608
  5852. ,    0,307981,205183,    0,308020,79580,    0,256641,33912,    0
  5853. ,176728,33953,    0,91065,33955,    0,308086,33958,    0,56819
  5854. ,33975,    0,308130,216754,    0,308131,148223,    0,353820,308132
  5855. ,    0,313845,56850,    0,308136,148228,56852,    0,308154, 5471
  5856. ,    0,308158,34030,    0,308159,34031,    0,336765,211123,56926
  5857. ,    0,56971,34127,    0,131236,56993,45571,    0,348255,211191
  5858. ,56994,    0,56998,11310,    0,211196,56999,45577,    0,216926
  5859. ,34174,    0,142691,34182,    0,194092,11340,    0,325486,159867
  5860. ,68491,    0,159873,68497,    0,325493,211273,    0,159876,125610
  5861. ,    0,142756,114201,    0)  ;
  5862.         --| Hash values to check against to verify that
  5863.         --| correct action has been found for this
  5864.         --| parser state and input token.
  5865.         -- NYU Reference Name: ACTION_TABLE2
  5866.      
  5867.     DefaultMap :
  5868.         constant array (DefaultMapRange) of GC.ParserInteger :=
  5869.          ( 1448,    0,    0,    0,    0, 1446,    0, 1277, 1266, 1447
  5870. ,    0, 1268,    0, 1476,    0,    0,    0, 1270, 1271, 1272
  5871. , 1273, 1274, 1275,    0, 1326,    0, 1326, 1326, 1269, 1276
  5872. ,    0,    0, 1456,    0,    0, 1326, 1152,    0, 1153, 1135
  5873. ,    0, 1134, 1096, 1095,    0, 1150, 1151,    0, 1370, 1390
  5874. , 1136, 1097, 1098, 1099, 1139, 1118, 1376, 1121, 1122, 1123
  5875. , 1124, 1125, 1126, 1129, 1130, 1394, 1399, 1397,    0, 1140
  5876. , 1137, 1138,    0, 1373, 1216, 1217,    0,    0, 1485,    0
  5877. , 1212,    0, 1502, 1211,    0,    0, 1077,    0, 1423, 1506
  5878. , 1226,    0, 1486,    0,    0, 1414,    0,    0,    0, 1282
  5879. , 1091, 1092, 1093,    0, 1326, 1326,    0,    0,    0, 1326
  5880. , 1291,    0, 1452, 1450, 1449, 1339, 1161, 1033, 1338,    0
  5881. ,    0, 1094,    0,    0, 1136, 1355,    0, 1367, 1365, 1117
  5882. ,    0, 1392,    0, 1143, 1141, 1145,    0, 1142, 1146, 1144
  5883. , 1127,    0,    0,    0,    0,    0,    0, 1372,    0, 1120
  5884. ,    0,    0,    0,    0,    0,    0,    0,    0, 1149, 1147
  5885. , 1148,    0, 1156, 1157, 1154, 1155,    0, 1158, 1131,    0
  5886. , 1136, 1132, 1395, 1501,    0, 1517,    0,    0, 1484,    0
  5887. ,    0,    0,    0, 1327,    0,    0,    0,    0,    0,    0
  5888. , 1000, 1079, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1018
  5889. , 1019, 1020, 1326, 1326, 1080, 1081, 1089, 1090,    0, 1326
  5890. , 1326, 1314, 1315, 1316, 1317, 1480, 1199, 1330, 1424, 1425
  5891. ,    0, 1359, 1508,    0,    0,    0,    0,    0, 1414, 1488
  5892. , 1326, 1414, 1415,    0,    0,    0, 1414, 1289, 1290,    0
  5893. ,    0, 1336,    0, 1457,    0,    0, 1326,    0,    0,    0
  5894. ,    0,    0,    0, 1133,    0,    0, 1073,    0, 1111,    0
  5895. , 1112, 1367, 1267, 1393, 1371, 1060, 1128, 1391, 1039, 1109
  5896. , 1108, 1110, 1107, 1106, 1159, 1160,    0, 1102, 1103, 1105
  5897. , 1104, 1101, 1376, 1374,    0,    0, 1390, 1380,    0, 1382
  5898. , 1384, 1381, 1383, 1385,    0,    0, 1396, 1398, 1400, 1214
  5899. , 1338,    0, 1421, 1489, 1421, 1504,    0, 1308,    0, 1094
  5900. ,    0, 1099,    0,    0,    0,    0,    0,    0,    0, 1426
  5901. , 1360, 1078,    0, 1502,    0, 1428,    0, 1430,    0,    0
  5902. ,    0, 1224,    0,    0, 1304, 1227,    0,    0, 1230,    0
  5903. ,    0,    0, 1458, 1017, 1221,    0,    0, 1306,    0, 1278
  5904. , 1451,    0, 1164, 1163, 1340, 1379, 1375, 1369, 1362, 1365
  5905. , 1116, 1072,    0,    0, 1363, 1365, 1368,    0, 1115,    0
  5906. ,    0, 1100, 1119, 1378, 1377, 1386, 1388, 1387, 1389, 1221
  5907. ,    0, 1219,    0,    0,    0,    0, 1313, 1461, 1310,    0
  5908. , 1463,    0,  999, 1470,    0,    0,    0,    0,    0,    0
  5909. ,    0, 1490, 1240, 1470, 1075,    0,    0,    0, 1083, 1084
  5910. , 1085, 1086, 1088, 1082, 1087, 1326,    0,    0,    0, 1414
  5911. ,    0, 1326, 1487, 1414,    0,    0,    0,    0,    0,    0
  5912. ,    0,    0,    0,    0, 1494, 1094,    0, 1331,    0, 1170
  5913. , 1330, 1166, 1167,    0, 1171, 1172, 1173, 1174, 1175, 1176
  5914. , 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1403
  5915. , 1332,    0,    0, 1330, 1249, 1250, 1251, 1330, 1200, 1482
  5916. , 1332, 1008, 1326, 1009, 1010, 1011,    0, 1461, 1414, 1229
  5917. , 1492, 1244,    0,    0,    0,    0,    0, 1222, 1334, 1461
  5918. , 1453, 1162, 1367, 1071, 1356, 1364, 1367, 1366, 1061, 1040
  5919. , 1220, 1334, 1518, 1516,    0,    0, 1213,    0,    0,    0
  5920. ,    0,    0,    0,    0,    0, 1489,    0,    0, 1031, 1492
  5921. , 1491, 1241,    0,    0,    0,    0,    0,    0,    0,    0
  5922. , 1053, 1021,    0,    0,    0,    0,    0,    0,    0, 1045
  5923. , 1046, 1047, 1343, 1343, 1052,    0,    0, 1351,    0, 1235
  5924. , 1361, 1279, 1239,    0, 1432, 1429, 1326,    0, 1444, 1436
  5925. ,    0,    0,    0, 1204,    0,    0, 1190, 1406,    0, 1330
  5926. , 1187, 1287,    0, 1208,    0,    0,    0,    0, 1225,    0
  5927. , 1401,    0, 1168, 1169, 1404,    0,    0,    0, 1479,    0
  5928. , 1330,    0, 1483, 1414, 1326,    0,    0, 1440,    0,    0
  5929. ,    0,    0,    0, 1228,    0,    0,    0, 1301,    0,    0
  5930. , 1302, 1303,    0, 1351, 1460, 1459, 1295, 1337, 1223,    0
  5931. ,    0,    0, 1114, 1113, 1218,    0, 1422,    0,    0, 1464
  5932. ,    0,    0,    0, 1467, 1326, 1319, 1318,    0, 1238, 1030
  5933. ,    0, 1032, 1034, 1035, 1036,    0, 1074,    0,    0, 1051
  5934. , 1049,    0, 1038, 1233, 1043, 1044, 1341, 1042, 1023, 1024
  5935. , 1025, 1026, 1027, 1028, 1029, 1344, 1048, 1050, 1467, 1326
  5936. ,    0,    0, 1427, 1242,    0,    0, 1431, 1243,    0,    0
  5937. ,    0, 1477, 1248,    0,    0, 1206, 1210, 1408, 1511, 1405
  5938. , 1288, 1209, 1186,    0,    0, 1330,    0,    0, 1333, 1330
  5939. , 1410, 1330,    0, 1196,    0, 1330,    0, 1414, 1414,    0
  5940. ,    0,    0, 1330, 1330, 1330, 1253, 1254, 1255, 1256, 1257
  5941. , 1330,    0,    0, 1408, 1201,    0, 1330, 1419, 1418,    0
  5942. ,    0,    0, 1334, 1334, 1031,    0, 1299, 1298, 1300, 1297
  5943. ,    0, 1293,    0, 1335, 1292,    0, 1215, 1309, 1462,  998
  5944. , 1324,    0, 1326, 1465,    0, 1503, 1280,    0, 1281, 1345
  5945. , 1136, 1347, 1059,    0, 1231,    0,    0, 1349, 1326, 1334
  5946. , 1515,    0,    0,    0, 1136,    0, 1421, 1245,    0, 1264
  5947. ,    0, 1421, 1493, 1246, 1205,    0, 1513,    0,    0, 1330
  5948. , 1330, 1325, 1188, 1402,    0,    0, 1355, 1192, 1478, 1193
  5949. ,    0,    0,    0, 1203,    0,    0, 1261,    0,    0, 1259
  5950. , 1443, 1495, 1258, 1260, 1514, 1330, 1330, 1498,    0, 1330
  5951. , 1286, 1285, 1454, 1284, 1420,    0,    0, 1334, 1334,    0
  5952. , 1283,    0,    0,    0, 1305, 1296,    0, 1307,    0,    0
  5953. ,    0,    0, 1326, 1037,    0,    0, 1058,    0, 1055, 1041
  5954. ,    0,    0, 1469,    0, 1065, 1067, 1470, 1076, 1352, 1434
  5955. ,    0, 1445, 1438,    0, 1207,    0,    0, 1409, 1407, 1191
  5956. , 1475,    0, 1411,    0, 1197, 1414,    0, 1202, 1247, 1499
  5957. , 1330,    0,    0,    0,    0, 1441,    0,    0,    0,    0
  5958. ,    0, 1012, 1014,    0,    0,    0,    0,    0,    0, 1466
  5959. ,    0,    0, 1056, 1057,    0, 1342, 1062,    0, 1326,    0
  5960. , 1326, 1328,    0,    0, 1022,    0, 1433,    0, 1437, 1512
  5961. ,    0, 1474, 1198,    0, 1414,    0,    0, 1497,    0,    0
  5962. ,    0, 1500, 1016, 1013, 1015, 1237, 1236,    0, 1323,    0
  5963. , 1320,    0,    0, 1346,    0, 1348,    0,    0, 1063,    0
  5964. , 1064,    0,    0,    0, 1234, 1421, 1421, 1189, 1194,    0
  5965. ,    0,    0, 1252, 1455, 1294, 1321,    0, 1054,    0, 1334
  5966. , 1471,    0, 1329, 1326, 1353, 1326, 1472, 1473, 1232,    0
  5967. ,    0, 1195, 1262,    0, 1322,    0,    0, 1069, 1481, 1070
  5968. , 1435, 1439, 1263, 1066, 1068, 1354)  ;
  5969.         --| Map of states (constant array ) to default reductions.
  5970.         -- NYU Reference Name: DEFAULT
  5971.      
  5972.     type FollowSymbolIndexArray is array ( PositiveParserInteger range <>)
  5973.         of GC.ParserInteger ;
  5974.      
  5975.     FollowSymbolMapIndex : constant FollowSymbolIndexArray :=
  5976.          (    1,    1,    2,    2,    3,    3,    4,   43,   44,   57
  5977. ,   58,   71,   72,   85,   86,  102,  103,  119,  120,  133
  5978. ,  134,  150,  151,  167,  168,  181,  182,  195,  196,  209
  5979. ,  210,  223,  224,  237,  238,  251,  252,  252,  253,  254
  5980. ,  255,  256,  257,  258,  259,  265,  266,  267,  268,  281
  5981. ,  282,  295,  296,  309,  310,  323,  324,  334,  335,  336
  5982. ,  337,  338,  339,  344,  345,  345,  346,  346,  347,  347
  5983. ,  348,  348,  349,  349,  350,  350,  351,  351,  352,  385
  5984. ,  386,  387,  388,  421,  422,  428,  429,  430,  431,  432
  5985. ,  433,  454,  455,  456,  457,  458,  459,  460,  461,  463
  5986. ,  464,  465,  466,  468,  469,  469,  470,  471,  472,  473
  5987. ,  474,  474,  475,  508,  509,  511,  512,  513,  514,  523
  5988. ,  524,  524,  525,  531,  532,  533,  534,  554,  555,  556
  5989. ,  557,  561,  562,  563,  564,  564,  565,  567,  568,  594
  5990. ,  595,  596,  597,  597,  598,  601,  602,  603,  604,  607
  5991. ,  608,  609,  610,  621,  622,  623,  624,  632,  633,  640
  5992. ,  641,  654,  655,  668,  669,  684,  685,  693,  694,  705
  5993. ,  706,  714,  715,  726,  727,  738,  739,  750,  751,  784
  5994. ,  785,  818,  819,  853,  854,  887,  888,  922,  923,  923
  5995. ,  924,  953,  954,  955,  956,  956,  957,  958,  959,  960
  5996. ,  961,  961,  962,  963,  964,  965,  966,  967,  968,  977
  5997. ,  978,  985,  986,  993,  994, 1001, 1002, 1009, 1010, 1017
  5998. , 1018, 1027, 1028, 1038, 1039, 1063, 1064, 1092, 1093, 1117
  5999. , 1118, 1147, 1148, 1176, 1177, 1205, 1206, 1212, 1213, 1242
  6000. , 1243, 1272, 1273, 1302, 1303, 1313, 1314, 1322, 1323, 1331
  6001. , 1332, 1340, 1341, 1347, 1348, 1384, 1385, 1412, 1413, 1439
  6002. , 1440, 1465, 1466, 1470, 1471, 1497, 1498, 1524, 1525, 1544
  6003. , 1545, 1571, 1572, 1598, 1599, 1625, 1626, 1652, 1653, 1679
  6004. , 1680, 1706, 1707, 1733, 1734, 1760, 1761, 1787, 1788, 1814
  6005. , 1815, 1841, 1842, 1868, 1869, 1895, 1896, 1922, 1923, 1949
  6006. , 1950, 1969, 1970, 1972, 1973, 1975, 1976, 1976, 1977, 1980
  6007. , 1981, 1982, 1983, 1983, 1984, 2004, 2005, 2006, 2007, 2027
  6008. , 2028, 2030, 2031, 2051, 2052, 2052, 2053, 2053, 2054, 2056
  6009. , 2057, 2059, 2060, 2080, 2081, 2082, 2083, 2083, 2084, 2085
  6010. , 2086, 2097, 2098, 2100, 2101, 2105, 2106, 2107, 2108, 2109
  6011. , 2110, 2112, 2113, 2113, 2114, 2114, 2115, 2127, 2128, 2128
  6012. , 2129, 2129, 2130, 2143, 2144, 2145, 2146, 2157, 2158, 2170
  6013. , 2171, 2172, 2173, 2176, 2177, 2177, 2178, 2181, 2182, 2193
  6014. , 2194, 2194, 2195, 2198, 2199, 2200, 2201, 2221, 2222, 2248
  6015. , 2249, 2275, 2276, 2302, 2303, 2310, 2311, 2313, 2314, 2316
  6016. , 2317, 2319, 2320, 2322, 2323, 2325, 2326, 2328, 2329, 2331
  6017. , 2332, 2334, 2335, 2338, 2339, 2340, 2341, 2361, 2362, 2366
  6018. , 2367, 2367, 2368, 2369, 2370, 2377, 2378, 2379, 2380, 2387
  6019. , 2388, 2392, 2393, 2400, 2401, 2408, 2409, 2414, 2415, 2416
  6020. , 2417, 2424, 2425, 2428, 2429, 2449, 2450, 2451, 2452, 2453
  6021. , 2454, 2456, 2457, 2462, 2463, 2468, 2469, 2474, 2475, 2475
  6022. , 2476, 2476, 2477, 2478, 2479, 2480, 2481, 2481, 2482, 2483
  6023. , 2484, 2484, 2485, 2486, 2487, 2500, 2501, 2514, 2515, 2528
  6024. , 2529, 2542, 2543, 2543, 2544, 2548, 2549, 2553, 2554, 2555
  6025. , 2556, 2557, 2558, 2558, 2559, 2560, 2561, 2562, 2563, 2563
  6026. , 2564, 2575, 2576, 2577, 2578, 2579, 2580, 2600, 2601, 2621
  6027. , 2622, 2623, 2624, 2625, 2626, 2626, 2627, 2629, 2630, 2631
  6028. , 2632, 2634, 2635, 2641, 2642, 2643, 2644, 2647, 2648, 2650
  6029. , 2651, 2651, 2652, 2652)  ;
  6030.      
  6031.     FollowSymbolMap : constant FollowSymbolArray :=
  6032.          (   96,   96,   72,    2,    4,   10,   12,   14,   15,   19
  6033. ,   20,   21,   22,   23,   24,   25,   26,   27,   28,   29
  6034. ,   33,   37,   39,   42,   43,   44,   45,   46,   51,   53
  6035. ,   54,   55,   56,   57,   59,   60,   61,   62,   63,   65
  6036. ,   67,   68,   92,   10,   21,   25,   26,   27,   42,   43
  6037. ,   44,   45,   55,   56,   59,   60,   65,   10,   21,   25
  6038. ,   26,   27,   42,   43,   44,   45,   55,   56,   59,   60
  6039. ,   65,   10,   21,   25,   26,   27,   42,   43,   44,   45
  6040. ,   55,   56,   59,   60,   65,   10,   21,   25,   26,   27
  6041. ,   42,   43,   44,   45,   54,   55,   56,   59,   60,   63
  6042. ,   65,   96,   10,   21,   25,   26,   27,   42,   43,   44
  6043. ,   45,   54,   55,   56,   59,   60,   63,   65,   96,   10
  6044. ,   21,   25,   26,   27,   42,   43,   44,   45,   55,   56
  6045. ,   59,   60,   65,   10,   21,   25,   26,   27,   42,   43
  6046. ,   44,   45,   54,   55,   56,   59,   60,   63,   65,   96
  6047. ,   10,   21,   25,   26,   27,   42,   43,   44,   45,   54
  6048. ,   55,   56,   59,   60,   63,   65,   96,   10,   21,   25
  6049. ,   26,   27,   42,   43,   44,   45,   55,   56,   59,   60
  6050. ,   65,   10,   21,   25,   26,   27,   42,   43,   44,   45
  6051. ,   55,   56,   59,   60,   65,   10,   21,   25,   26,   27
  6052. ,   42,   43,   44,   45,   55,   56,   59,   60,   65,   10
  6053. ,   21,   25,   26,   27,   42,   43,   44,   45,   55,   56
  6054. ,   59,   60,   65,   10,   21,   25,   26,   27,   42,   43
  6055. ,   44,   45,   55,   56,   59,   60,   65,   10,   21,   25
  6056. ,   26,   27,   42,   43,   44,   45,   55,   56,   59,   60
  6057. ,   65,   79,   80,   88,   72,   80,   80,   88,   31,   33
  6058. ,   58,   72,   75,   80,   85,   75,   79,   10,   21,   25
  6059. ,   26,   27,   42,   43,   44,   45,   55,   56,   59,   60
  6060. ,   65,   10,   21,   25,   26,   27,   42,   43,   44,   45
  6061. ,   55,   56,   59,   60,   65,   10,   21,   25,   26,   27
  6062. ,   42,   43,   44,   45,   55,   56,   59,   60,   65,   10
  6063. ,   21,   25,   26,   27,   42,   43,   44,   45,   55,   56
  6064. ,   59,   60,   65,    3,   35,   36,   37,   65,   66,   67
  6065. ,   68,   71,   74,   76,   72,   80,   72,   80,   18,   31
  6066. ,   50,   51,   71,   80,   80,   80,   80,   80,   80,   80
  6067. ,   80,    7,   16,   17,   30,   31,   33,   34,   36,   39
  6068. ,   47,   49,   50,   58,   64,   69,   71,   72,   73,   74
  6069. ,   75,   76,   78,   80,   81,   82,   83,   84,   85,   86
  6070. ,   87,   88,   89,   90,   91,   80,   88,    7,   16,   17
  6071. ,   30,   31,   33,   34,   36,   39,   47,   49,   50,   58
  6072. ,   64,   69,   71,   72,   73,   74,   75,   76,   78,   80
  6073. ,   81,   82,   83,   84,   85,   86,   87,   88,   89,   90
  6074. ,   91,   33,   72,   75,   80,   84,   85,   88,   80,   88
  6075. ,   80,   88,    7,   30,   31,   33,   36,   39,   47,   58
  6076. ,   64,   72,   75,   80,   81,   82,   83,   84,   85,   86
  6077. ,   88,   89,   90,   91,   72,   75,   72,   75,   72,   75
  6078. ,   47,   80,   88,   80,   88,   47,   80,   88,   80,   72
  6079. ,   75,   72,   75,   38,    7,    9,   30,   31,   33,   34
  6080. ,   36,   39,   47,   49,   58,   64,   69,   70,   71,   72
  6081. ,   73,   74,   75,   76,   77,   78,   80,   81,   82,   83
  6082. ,   84,   85,   86,   87,   88,   89,   90,   91,   33,   72
  6083. ,   75,   72,   75,    7,   31,   33,   39,   58,   64,   72
  6084. ,   75,   80,   85,   48,   12,   21,   37,   43,   65,   67
  6085. ,   68,   21,   61,   10,   12,   21,   22,   25,   26,   27
  6086. ,   42,   43,   44,   45,   54,   55,   56,   59,   60,   61
  6087. ,   63,   65,   67,   68,   12,   65,   12,   21,   43,   61
  6088. ,   65,   21,   61,   12,   21,   43,   61,    2,    4,   10
  6089. ,   12,   14,   15,   19,   20,   21,   23,   24,   25,   28
  6090. ,   29,   33,   37,   39,   43,   46,   51,   53,   61,   62
  6091. ,   65,   67,   68,   92,   43,   61,   21,   12,   37,   43
  6092. ,   65,   21,   61,   12,   37,   43,   65,   84,   85,   10
  6093. ,   21,   25,   26,   27,   42,   44,   45,   55,   56,   59
  6094. ,   60,   10,   21,   10,   21,   26,   27,   42,   43,   45
  6095. ,   56,   60,   10,   21,   26,   27,   42,   45,   56,   60
  6096. ,   10,   21,   25,   26,   27,   42,   43,   44,   45,   55
  6097. ,   56,   59,   60,   65,   10,   21,   25,   26,   27,   42
  6098. ,   43,   44,   45,   55,   56,   59,   60,   65,   10,   21
  6099. ,   25,   26,   27,   42,   43,   44,   45,   54,   55,   56
  6100. ,   59,   60,   63,   65,   10,   21,   26,   27,   42,   43
  6101. ,   45,   56,   60,   10,   21,   26,   27,   42,   43,   45
  6102. ,   54,   56,   60,   63,   96,   10,   21,   26,   27,   42
  6103. ,   43,   45,   56,   60,   10,   21,   26,   27,   42,   43
  6104. ,   45,   54,   56,   60,   63,   96,   10,   21,   26,   27
  6105. ,   42,   43,   45,   54,   56,   60,   63,   96,   10,   21
  6106. ,   26,   27,   42,   43,   45,   54,   56,   60,   63,   96
  6107. ,    7,    9,   30,   31,   33,   34,   36,   39,   47,   49
  6108. ,   58,   64,   69,   70,   71,   72,   73,   74,   75,   76
  6109. ,   77,   78,   80,   81,   82,   83,   84,   85,   86,   87
  6110. ,   88,   89,   90,   91,    7,    9,   30,   31,   33,   34
  6111. ,   36,   39,   47,   49,   58,   64,   69,   70,   71,   72
  6112. ,   73,   74,   75,   76,   77,   78,   80,   81,   82,   83
  6113. ,   84,   85,   86,   87,   88,   89,   90,   91,    7,    9
  6114. ,   30,   31,   33,   34,   36,   39,   47,   49,   58,   60
  6115. ,   64,   69,   70,   71,   72,   73,   74,   75,   76,   77
  6116. ,   78,   80,   81,   82,   83,   84,   85,   86,   87,   88
  6117. ,   89,   90,   91,    7,    9,   30,   31,   33,   34,   36
  6118. ,   39,   47,   49,   58,   64,   69,   70,   71,   72,   73
  6119. ,   74,   75,   76,   77,   78,   80,   81,   82,   83,   84
  6120. ,   85,   86,   87,   88,   89,   90,   91,    7,    9,   30
  6121. ,   31,   33,   34,   36,   39,   47,   49,   58,   60,   64
  6122. ,   69,   70,   71,   72,   73,   74,   75,   76,   77,   78
  6123. ,   80,   81,   82,   83,   84,   85,   86,   87,   88,   89
  6124. ,   90,   91,   72,    7,   30,   31,   33,   34,   36,   39
  6125. ,   47,   49,   58,   64,   69,   72,   73,   74,   75,   76
  6126. ,   78,   80,   81,   82,   83,   84,   85,   86,   87,   88
  6127. ,   89,   90,   91,   72,   75,   72,   72,   75,   72,   75
  6128. ,   72,   72,   75,   72,   75,   72,   75,    7,   31,   33
  6129. ,   39,   58,   64,   72,   75,   80,   85,    7,   31,   33
  6130. ,   58,   72,   75,   80,   85,   31,   33,   39,   58,   72
  6131. ,   75,   80,   85,   31,   33,   58,   64,   72,   75,   80
  6132. ,   85,    7,   31,   33,   58,   72,   75,   80,   85,   31
  6133. ,   33,   39,   58,   72,   75,   80,   85,    7,   31,   33
  6134. ,   39,   58,   64,   72,   75,   80,   85,    3,   35,   36
  6135. ,   37,   65,   66,   67,   68,   71,   74,   76,    7,   30
  6136. ,   31,   33,   36,   39,   47,   58,   64,   69,   72,   74
  6137. ,   75,   76,   80,   81,   82,   83,   84,   85,   86,   88
  6138. ,   89,   90,   91,    7,   30,   31,   33,   34,   36,   39
  6139. ,   47,   49,   58,   64,   69,   72,   73,   74,   75,   76
  6140. ,   78,   80,   81,   82,   83,   84,   85,   86,   88,   89
  6141. ,   90,   91,    7,   30,   31,   33,   36,   39,   47,   58
  6142. ,   64,   69,   72,   74,   75,   76,   80,   81,   82,   83
  6143. ,   84,   85,   86,   88,   89,   90,   91,    7,   30,   31
  6144. ,   33,   34,   36,   39,   47,   49,   58,   64,   69,   72
  6145. ,   73,   74,   75,   76,   78,   80,   81,   82,   83,   84
  6146. ,   85,   86,   87,   88,   89,   90,   91,    7,   30,   31
  6147. ,   33,   34,   36,   39,   47,   49,   58,   64,   69,   72
  6148. ,   73,   74,   75,   76,   78,   80,   81,   82,   83,   84
  6149. ,   85,   86,   88,   89,   90,   91,    7,   30,   31,   33
  6150. ,   34,   36,   39,   47,   49,   58,   64,   69,   72,   73
  6151. ,   74,   75,   76,   78,   80,   81,   82,   83,   84,   85
  6152. ,   86,   88,   89,   90,   91,   35,   37,   65,   66,   67
  6153. ,   68,   71,    7,   30,   31,   33,   34,   36,   39,   47
  6154. ,   49,   58,   64,   69,   72,   73,   74,   75,   76,   78
  6155. ,   80,   81,   82,   83,   84,   85,   86,   87,   88,   89
  6156. ,   90,   91,    7,   30,   31,   33,   34,   36,   39,   47
  6157. ,   49,   58,   64,   69,   72,   73,   74,   75,   76,   78
  6158. ,   80,   81,   82,   83,   84,   85,   86,   87,   88,   89
  6159. ,   90,   91,    7,   30,   31,   33,   34,   36,   39,   47
  6160. ,   49,   58,   64,   69,   72,   73,   74,   75,   76,   78
  6161. ,   80,   81,   82,   83,   84,   85,   86,   87,   88,   89
  6162. ,   90,   91,    3,   35,   36,   37,   65,   66,   67,   68
  6163. ,   71,   74,   76,    3,   35,   36,   37,   65,   66,   67
  6164. ,   68,   71,    3,   35,   36,   37,   65,   66,   67,   68
  6165. ,   71,    3,   35,   36,   37,   65,   66,   67,   68,   71
  6166. ,   35,   37,   65,   66,   67,   68,   71,    7,   16,   17
  6167. ,   30,   31,   33,   34,   36,   39,   47,   49,   50,   58
  6168. ,   61,   64,   69,   70,   71,   72,   73,   74,   75,   76
  6169. ,   77,   78,   80,   81,   82,   83,   84,   85,   86,   87
  6170. ,   88,   89,   90,   91,    2,    4,   10,   12,   14,   15
  6171. ,   19,   20,   21,   23,   24,   25,   28,   29,   33,   37
  6172. ,   39,   43,   46,   51,   53,   57,   61,   62,   65,   67
  6173. ,   68,   92,    2,    4,   10,   12,   14,   15,   19,   20
  6174. ,   21,   23,   24,   25,   28,   29,   33,   37,   39,   43
  6175. ,   46,   51,   53,   61,   62,   65,   67,   68,   92,    2
  6176. ,    4,   10,   12,   14,   15,   19,   20,   21,   23,   24
  6177. ,   25,   28,   29,   33,   37,   39,   46,   51,   53,   61
  6178. ,   62,   65,   67,   68,   92,   19,   20,   21,   23,   61
  6179. ,    2,    4,   10,   12,   14,   15,   19,   20,   21,   23
  6180. ,   24,   25,   28,   29,   33,   37,   39,   43,   46,   51
  6181. ,   53,   61,   62,   65,   67,   68,   92,    2,    4,   10
  6182. ,   12,   14,   15,   19,   20,   21,   23,   24,   25,   28
  6183. ,   29,   33,   37,   39,   43,   46,   51,   53,   61,   62
  6184. ,   65,   67,   68,   92,    2,    4,   10,   12,   14,   15
  6185. ,   24,   25,   28,   29,   33,   37,   46,   51,   53,   62
  6186. ,   65,   67,   68,   92,    2,    4,   10,   12,   14,   15
  6187. ,   19,   20,   21,   23,   24,   25,   28,   29,   33,   37
  6188. ,   39,   43,   46,   51,   53,   61,   62,   65,   67,   68
  6189. ,   92,    2,    4,   10,   12,   14,   15,   19,   20,   21
  6190. ,   23,   24,   25,   28,   29,   33,   37,   39,   43,   46
  6191. ,   51,   53,   61,   62,   65,   67,   68,   92,    2,    4
  6192. ,   10,   12,   14,   15,   19,   20,   21,   23,   24,   25
  6193. ,   28,   29,   33,   37,   39,   43,   46,   51,   53,   61
  6194. ,   62,   65,   67,   68,   92,    2,    4,   10,   12,   14
  6195. ,   15,   19,   20,   21,   23,   24,   25,   28,   29,   33
  6196. ,   37,   39,   43,   46,   51,   53,   61,   62,   65,   67
  6197. ,   68,   92,    2,    4,   10,   12,   14,   15,   19,   20
  6198. ,   21,   23,   24,   25,   28,   29,   33,   37,   39,   43
  6199. ,   46,   51,   53,   61,   62,   65,   67,   68,   92,    2
  6200. ,    4,   10,   12,   14,   15,   19,   20,   21,   23,   24
  6201. ,   25,   28,   29,   33,   37,   39,   43,   46,   51,   53
  6202. ,   61,   62,   65,   67,   68,   92,    2,    4,   10,   12
  6203. ,   14,   15,   19,   20,   21,   23,   24,   25,   28,   29
  6204. ,   33,   37,   39,   43,   46,   51,   53,   61,   62,   65
  6205. ,   67,   68,   92,    2,    4,   10,   12,   14,   15,   19
  6206. ,   20,   21,   23,   24,   25,   28,   29,   33,   37,   39
  6207. ,   43,   46,   51,   53,   61,   62,   65,   67,   68,   92
  6208. ,    2,    4,   10,   12,   14,   15,   19,   20,   21,   23
  6209. ,   24,   25,   28,   29,   33,   37,   39,   43,   46,   51
  6210. ,   53,   61,   62,   65,   67,   68,   92,    2,    4,   10
  6211. ,   12,   14,   15,   19,   20,   21,   23,   24,   25,   28
  6212. ,   29,   33,   37,   39,   43,   46,   51,   53,   61,   62
  6213. ,   65,   67,   68,   92,    2,    4,   10,   12,   14,   15
  6214. ,   19,   20,   21,   23,   24,   25,   28,   29,   33,   37
  6215. ,   39,   43,   46,   51,   53,   61,   62,   65,   67,   68
  6216. ,   92,    2,    4,   10,   12,   14,   15,   19,   20,   21
  6217. ,   23,   24,   25,   28,   29,   33,   37,   39,   43,   46
  6218. ,   51,   53,   61,   62,   65,   67,   68,   92,    2,    4
  6219. ,   10,   12,   14,   15,   19,   20,   21,   23,   24,   25
  6220. ,   28,   29,   33,   37,   39,   43,   46,   51,   53,   61
  6221. ,   62,   65,   67,   68,   92,    2,    4,   10,   12,   14
  6222. ,   15,   19,   20,   21,   23,   24,   25,   28,   29,   33
  6223. ,   37,   39,   43,   46,   51,   53,   61,   62,   65,   67
  6224. ,   68,   92,    2,    4,   10,   12,   14,   15,   19,   20
  6225. ,   21,   23,   24,   25,   28,   29,   33,   37,   39,   43
  6226. ,   46,   51,   53,   61,   62,   65,   67,   68,   92,    2
  6227. ,    4,   10,   12,   14,   15,   24,   25,   28,   29,   33
  6228. ,   37,   46,   51,   53,   62,   65,   67,   68,   92,   19
  6229. ,   20,   21,   19,   20,   21,   21,   33,   58,   80,   85
  6230. ,   43,   61,   21,    2,    4,   10,   12,   14,   15,   24
  6231. ,   25,   28,   29,   33,   37,   43,   46,   51,   53,   62
  6232. ,   65,   67,   68,   92,   21,   61,    2,    4,   10,   12
  6233. ,   14,   15,   24,   25,   28,   29,   33,   37,   43,   46
  6234. ,   51,   53,   62,   65,   67,   68,   92,   25,   33,   62
  6235. ,    2,    4,   10,   12,   14,   15,   24,   25,   28,   29
  6236. ,   33,   37,   43,   46,   51,   53,   62,   65,   67,   68
  6237. ,   92,   80,   33,   65,   67,   80,   65,   67,   80,    2
  6238. ,    4,   10,   12,   14,   15,   24,   25,   28,   29,   33
  6239. ,   37,   43,   46,   51,   53,   62,   65,   67,   68,   92
  6240. ,   43,   61,   21,   10,   14,   10,   25,   26,   27,   42
  6241. ,   43,   45,   55,   56,   59,   60,   65,   31,   50,   80
  6242. ,   18,   31,   50,   71,   80,   72,   80,   72,   80,   31
  6243. ,   51,   71,   65,   65,   10,   25,   26,   27,   35,   42
  6244. ,   43,   45,   55,   56,   59,   60,   65,   80,   80,   21
  6245. ,   25,   26,   27,   35,   42,   43,   44,   45,   55,   56
  6246. ,   59,   60,   65,   21,   44,   21,   25,   26,   27,   42
  6247. ,   43,   45,   55,   56,   59,   60,   65,   10,   21,   25
  6248. ,   26,   27,   42,   43,   45,   55,   56,   59,   60,   65
  6249. ,   75,   80,   21,   22,   25,   43,   21,   21,   22,   25
  6250. ,   43,   10,   25,   26,   27,   42,   43,   45,   55,   56
  6251. ,   59,   60,   65,   80,   21,   22,   25,   43,   18,   80
  6252. ,    2,    4,   10,   12,   14,   15,   24,   25,   28,   29
  6253. ,   33,   37,   43,   46,   51,   53,   62,   65,   67,   68
  6254. ,   92,    2,    4,   10,   12,   14,   15,   19,   20,   21
  6255. ,   23,   24,   25,   28,   29,   33,   37,   39,   43,   46
  6256. ,   51,   53,   61,   62,   65,   67,   68,   92,    2,    4
  6257. ,   10,   12,   14,   15,   19,   20,   21,   23,   24,   25
  6258. ,   28,   29,   33,   37,   39,   43,   46,   51,   53,   61
  6259. ,   62,   65,   67,   68,   92,    2,    4,   10,   12,   14
  6260. ,   15,   19,   20,   21,   23,   24,   25,   28,   29,   33
  6261. ,   37,   39,   43,   46,   51,   53,   61,   62,   65,   67
  6262. ,   68,   92,    4,   15,   43,   57,   61,   65,   67,   68
  6263. ,   19,   21,   39,   19,   21,   39,   19,   21,   39,   19
  6264. ,   21,   39,   19,   21,   39,   19,   21,   39,   19,   21
  6265. ,   39,   19,   21,   39,   19,   21,   39,   43,   19,   39
  6266. ,    2,    4,   10,   12,   14,   15,   24,   25,   28,   29
  6267. ,   33,   37,   43,   46,   51,   53,   62,   65,   67,   68
  6268. ,   92,    4,   15,   43,   57,   61,   21,   75,   80,   26
  6269. ,   27,   42,   43,   45,   54,   63,   96,   71,   80,   26
  6270. ,   27,   42,   43,   45,   54,   63,   96,   26,   27,   42
  6271. ,   45,   54,   26,   27,   42,   43,   45,   54,   63,   96
  6272. ,   26,   27,   42,   43,   45,   54,   63,   96,   26,   27
  6273. ,   42,   45,   54,   63,   75,   80,   26,   27,   42,   43
  6274. ,   45,   54,   60,   63,   26,   42,   45,   56,    2,    4
  6275. ,   10,   12,   14,   15,   24,   25,   28,   29,   33,   37
  6276. ,   43,   46,   51,   53,   62,   65,   67,   68,   92,   21
  6277. ,   61,   84,   85,   26,   42,   45,   26,   42,   45,   59
  6278. ,   63,   65,   26,   42,   45,   59,   63,   65,   26,   42
  6279. ,   45,   59,   63,   65,   80,   80,   72,   75,   72,   75
  6280. ,   35,   72,   75,   85,   72,   75,   10,   21,   25,   26
  6281. ,   27,   42,   43,   44,   45,   55,   56,   59,   60,   65
  6282. ,   10,   21,   25,   26,   27,   42,   43,   44,   45,   55
  6283. ,   56,   59,   60,   65,   10,   21,   25,   26,   27,   42
  6284. ,   43,   44,   45,   55,   56,   59,   60,   65,   10,   21
  6285. ,   25,   26,   27,   42,   43,   44,   45,   55,   56,   59
  6286. ,   60,   65,   21,   21,   43,   65,   67,   68,   21,   43
  6287. ,   65,   67,   68,   43,   61,   43,   61,   65,   21,   61
  6288. ,   84,   85,   65,   10,   21,   25,   26,   27,   42,   44
  6289. ,   45,   55,   56,   59,   60,   72,   75,   84,   85,    2
  6290. ,    4,   10,   12,   14,   15,   24,   25,   28,   29,   33
  6291. ,   37,   43,   46,   51,   53,   62,   65,   67,   68,   92
  6292. ,    2,    4,   10,   12,   14,   15,   24,   25,   28,   29
  6293. ,   33,   37,   43,   46,   51,   53,   62,   65,   67,   68
  6294. ,   92,   21,   61,   21,   61,   65,   21,   22,   25,   21
  6295. ,   25,   19,   21,   39,   26,   27,   42,   45,   54,   60
  6296. ,   63,   84,   85,   21,   65,   67,   68,    4,   15,   57
  6297. ,   65,   65)  ;
  6298.         --| Map of states to sets of follow symbols
  6299.         -- NYU Reference Name: FOLLOW
  6300.      
  6301.     ------------------------------------------------------------------
  6302.     -- Action_Token_Map
  6303.     ------------------------------------------------------------------
  6304.      
  6305.      
  6306.     type Action_Token_Array_Index is array(
  6307.         PositiveParserInteger range <>) of GC.ParserInteger ;
  6308.         --| For indexing the All Action Token Array.
  6309.         --| Maps a given state into the lower and upper bounds of a slice
  6310.         --| of the All Action Index Array.
  6311.      
  6312.     Action_Token_MapIndex : constant Action_Token_Array_Index :=
  6313.          (    1,    1,    2,    2,    3,    2,    3,    9,   10,   11
  6314. ,   12,   11,   12,   16,   17,   17,   18,   17,   18,   17
  6315. ,   18,   28,   29,   28,   29,   30,   31,   30,   31,   32
  6316. ,   33,   33,   34,   34,   35,   34,   35,   34,   35,   34
  6317. ,   35,   34,   35,   34,   35,   34,   35,   36,   37,   37
  6318. ,   38,   38,   39,   39,   40,   39,   40,   39,   40,   39
  6319. ,   40,   43,   44,   46,   47,   46,   47,   47,   48,   48
  6320. ,   49,   48,   49,   48,   49,   49,   50,   49,   50,   49
  6321. ,   50,   77,   78,   77,   78,   77,   78,   77,   78,   89
  6322. ,   90,   89,   90,   89,   90,   90,   91,   90,   91,   99
  6323. ,  100,  103,  104,  103,  104,  103,  104,  103,  104,  103
  6324. ,  104,  104,  105,  104,  105,  107,  108,  108,  109,  109
  6325. ,  110,  110,  111,  111,  112,  112,  113,  115,  116,  119
  6326. ,  120,  119,  120,  120,  121,  120,  121,  127,  128,  127
  6327. ,  128,  127,  128,  127,  128,  136,  137,  136,  137,  136
  6328. ,  137,  136,  137,  139,  140,  140,  141,  140,  141,  141
  6329. ,  142,  142,  143,  143,  144,  143,  144,  143,  144,  144
  6330. ,  145,  158,  159,  167,  168,  168,  169,  170,  171,  170
  6331. ,  171,  170,  171,  171,  172,  180,  181,  182,  183,  184
  6332. ,  185,  185,  186,  187,  188,  188,  189,  189,  190,  189
  6333. ,  190,  189,  190,  189,  190,  189,  190,  190,  191,  190
  6334. ,  191,  190,  191,  191,  192,  192,  193,  193,  194,  193
  6335. ,  194,  196,  197,  197,  198,  197,  198,  198,  199,  199
  6336. ,  200,  199,  200,  200,  201,  200,  201,  202,  203,  204
  6337. ,  205,  205,  206,  205,  206,  207,  208,  223,  224,  227
  6338. ,  228,  227,  228,  228,  229,  229,  230,  229,  230,  229
  6339. ,  230,  230,  231,  230,  231,  231,  232,  231,  232,  231
  6340. ,  232,  231,  232,  242,  243,  242,  243,  242,  243,  242
  6341. ,  243,  242,  243,  253,  254,  264,  265,  275,  276,  280
  6342. ,  281,  291,  292,  295,  296,  295,  296,  306,  307,  307
  6343. ,  308,  319,  320,  331,  332,  342,  343,  353,  354,  364
  6344. ,  365,  375,  376,  376,  377,  377,  378,  377,  378,  377
  6345. ,  378,  377,  378,  386,  387,  386,  387,  386,  387,  386
  6346. ,  387,  386,  387,  395,  396,  395,  396,  395,  396,  402
  6347. ,  403,  405,  406,  405,  406,  405,  406,  405,  406,  406
  6348. ,  407,  406,  407,  407,  408,  408,  409,  408,  409,  409
  6349. ,  410,  411,  412,  414,  415,  415,  416,  415,  416,  418
  6350. ,  419,  420,  421,  421,  422,  424,  425,  425,  426,  426
  6351. ,  427,  426,  427,  426,  427,  426,  427,  426,  427,  426
  6352. ,  427,  426,  427,  426,  427,  426,  427,  426,  427,  426
  6353. ,  427,  426,  427,  426,  427,  426,  427,  426,  427,  426
  6354. ,  427,  426,  427,  426,  427,  426,  427,  429,  430,  429
  6355. ,  430,  429,  430,  429,  430,  429,  430,  429,  430,  429
  6356. ,  430,  429,  430,  429,  430,  429,  430,  429,  430,  429
  6357. ,  430,  430,  431,  430,  431,  430,  431,  433,  434,  434
  6358. ,  435,  436,  437,  439,  440,  440,  441,  441,  442,  441
  6359. ,  442,  441,  442,  442,  443,  442,  443,  443,  444,  445
  6360. ,  446,  446,  447,  447,  448,  447,  448,  447,  448,  448
  6361. ,  449,  450,  451,  450,  451,  451,  452,  451,  452,  454
  6362. ,  455,  456,  457,  456,  457,  467,  468,  468,  469,  469
  6363. ,  470,  470,  471,  481,  482,  492,  493,  492,  493,  504
  6364. ,  505,  515,  516,  515,  516,  517,  518,  517,  518,  529
  6365. ,  530,  529,  530,  530,  531,  530,  531,  530,  531,  530
  6366. ,  531,  531,  532,  531,  532,  531,  532,  532,  533,  532
  6367. ,  533,  532,  533,  532,  533,  532,  533,  532,  533,  532
  6368. ,  533,  532,  533,  533,  534,  533,  534,  533,  534,  533
  6369. ,  534,  533,  534,  533,  534,  533,  534,  533,  534,  534
  6370. ,  535,  545,  546,  553,  554,  553,  554,  564,  565,  564
  6371. ,  565,  564,  565,  564,  565,  564,  565,  564,  565,  575
  6372. ,  576,  586,  587,  586,  587,  586,  587,  586,  587,  586
  6373. ,  587,  587,  588,  588,  589,  588,  589,  588,  589,  588
  6374. ,  589,  588,  589,  599,  600,  599,  600,  601,  602,  602
  6375. ,  603,  605,  606,  606,  607,  607,  608,  609,  610,  610
  6376. ,  611,  611,  612,  612,  613,  614,  615,  617,  618,  618
  6377. ,  619,  619,  620,  625,  626,  639,  640,  640,  641,  643
  6378. ,  644,  644,  645,  645,  646,  646,  647,  647,  648,  668
  6379. ,  669,  670,  671,  670,  671,  671,  672,  682,  683,  682
  6380. ,  683,  682,  683,  683,  684,  684,  685,  684,  685,  685
  6381. ,  686,  686,  687,  688,  689,  689,  690,  690,  691,  691
  6382. ,  692,  692,  693,  703,  704,  703,  704,  704,  705,  704
  6383. ,  705,  705,  706,  706,  707,  706,  707,  706,  707,  706
  6384. ,  707,  706,  707,  706,  707,  706,  707,  706,  707,  706
  6385. ,  707,  706,  707,  706,  707,  717,  718,  728,  729,  728
  6386. ,  729,  728,  729,  728,  729,  740,  741,  740,  741,  751
  6387. ,  752,  762,  763,  762,  763,  763,  764,  763,  764,  763
  6388. ,  764,  763,  764,  763,  764,  763,  764,  763,  764,  765
  6389. ,  766,  766,  767,  766,  767,  768,  769,  770,  771,  795
  6390. ,  796,  820,  821,  820,  821,  820,  821,  820,  821,  821
  6391. ,  822,  821,  822,  832,  833,  832,  833,  834,  835,  838
  6392. ,  839,  849,  850,  850,  851,  851,  852,  852,  853,  853
  6393. ,  854,  855,  856,  855,  856,  855,  856,  864,  865,  864
  6394. ,  865,  865,  866,  867,  868,  869,  870,  869,  870,  869
  6395. ,  870,  869,  870,  869,  870,  869,  870,  869,  870,  869
  6396. ,  870,  869,  870,  871,  872,  872,  873,  876,  877,  877
  6397. ,  878,  878,  879,  878,  879,  879,  880,  880,  881,  883
  6398. ,  884,  884,  885,  895,  896,  906,  907,  909,  910,  910
  6399. ,  911,  921,  922,  922,  923,  924,  925,  936,  937,  936
  6400. ,  937,  937,  938,  938,  939,  938,  939,  943,  944,  943
  6401. ,  944,  943,  944,  943,  944,  943,  944,  963,  964,  963
  6402. ,  964,  963,  964,  963,  964,  963,  964,  963,  964,  963
  6403. ,  964,  963,  964,  963,  964,  963,  964,  963,  964,  963
  6404. ,  964,  963,  964,  963,  964,  963,  964,  963,  964,  963
  6405. ,  964,  963,  964,  966,  967,  968,  969,  968,  969,  968
  6406. ,  969,  968,  969,  968,  969,  968,  969,  968,  969,  968
  6407. ,  969,  968,  969,  968,  969,  968,  969,  968,  969,  968
  6408. ,  969,  968,  969,  969,  970,  969,  970,  970,  971,  970
  6409. ,  971,  970,  971,  970,  971,  978,  979,  979,  980,  983
  6410. ,  984,  984,  985,  985,  986,  986,  987,  987,  988,  987
  6411. ,  988,  987,  988,  987,  988,  988,  989,  989,  990,  989
  6412. ,  990,  989,  990,  990,  991,  990,  991,  990,  991,  990
  6413. ,  991,  990,  991,  991,  992,  991,  992,  991,  992,  992
  6414. ,  993,  993,  994,  993,  994,  995,  996, 1006, 1007, 1007
  6415. , 1008, 1018, 1019, 1030, 1031, 1031, 1032, 1032, 1033, 1033
  6416. , 1034, 1034, 1035, 1036, 1037, 1037, 1038, 1041, 1042, 1042
  6417. , 1043, 1042, 1043, 1042, 1043, 1043, 1044, 1044, 1045, 1055
  6418. , 1056, 1066, 1067, 1067, 1068, 1068, 1069, 1069, 1070, 1071
  6419. , 1072, 1071, 1072, 1071, 1072, 1072, 1073, 1073, 1074, 1074
  6420. , 1075, 1075, 1076, 1076, 1077, 1077, 1078, 1078, 1079, 1078
  6421. , 1079, 1078, 1079, 1078, 1079, 1079, 1080, 1080, 1081, 1080
  6422. , 1081, 1081, 1082, 1082, 1083, 1082, 1083, 1083, 1084, 1083
  6423. , 1084, 1084, 1085, 1084, 1085, 1084, 1085, 1085, 1086, 1086
  6424. , 1087, 1087, 1088, 1087, 1088, 1088, 1089, 1091, 1092, 1092
  6425. , 1093, 1093, 1094, 1094, 1095, 1105, 1106, 1105, 1106, 1108
  6426. , 1109, 1110, 1111, 1110, 1111, 1110, 1111, 1111, 1112, 1111
  6427. , 1112, 1111, 1112, 1111, 1112, 1113, 1114, 1113, 1114, 1114
  6428. , 1115, 1119, 1120, 1120, 1121, 1125, 1126, 1125, 1126, 1136
  6429. , 1137, 1137, 1138, 1162, 1163, 1162, 1163, 1162, 1163, 1162
  6430. , 1163, 1163, 1164, 1165, 1166, 1166, 1167, 1166, 1167, 1177
  6431. , 1178, 1177, 1178, 1178, 1179, 1178, 1179, 1179, 1180, 1179
  6432. , 1180, 1180, 1181, 1188, 1189, 1188, 1189, 1189, 1190, 1191
  6433. , 1192, 1205, 1206, 1209, 1210, 1211, 1212, 1211, 1212, 1212
  6434. , 1213, 1213, 1214, 1214, 1215, 1214, 1215, 1215, 1216, 1216
  6435. , 1217, 1216, 1217, 1216, 1217, 1217, 1218, 1217, 1218, 1217
  6436. , 1218, 1220, 1221, 1220, 1221, 1220, 1221, 1220, 1221, 1231
  6437. , 1232, 1232, 1233, 1234, 1235, 1234, 1235, 1234, 1235, 1234
  6438. , 1235, 1235, 1236, 1235, 1236, 1236, 1237, 1247, 1248, 1247
  6439. , 1248, 1248, 1249, 1249, 1250, 1250, 1251, 1251, 1252, 1251
  6440. , 1252, 1251, 1252, 1251, 1252, 1252, 1253, 1252, 1253, 1252
  6441. , 1253, 1263, 1264, 1263, 1264, 1263, 1264, 1263, 1264, 1263
  6442. , 1264, 1264, 1265, 1264, 1265, 1275, 1276, 1276, 1277, 1276
  6443. , 1277, 1276, 1277, 1277, 1278, 1277, 1278, 1277, 1278, 1277
  6444. , 1278, 1277, 1278, 1277, 1278, 1277, 1278, 1277, 1278, 1277
  6445. , 1278, 1277, 1278, 1277, 1278, 1277, 1278, 1277, 1278, 1277
  6446. , 1278, 1277, 1278, 1277, 1278, 1277, 1278, 1277, 1278, 1278
  6447. , 1279, 1279, 1280, 1281, 1282, 1282, 1283, 1282, 1283, 1293
  6448. , 1294, 1294, 1295, 1295, 1296, 1295, 1296, 1297, 1298, 1308
  6449. , 1309, 1310, 1311, 1310, 1311, 1310, 1311, 1311, 1312, 1322
  6450. , 1323, 1322, 1323, 1322, 1323, 1324, 1325, 1324, 1325, 1324
  6451. , 1325, 1324, 1325, 1324, 1325, 1324, 1325, 1325, 1326, 1326
  6452. , 1327, 1326, 1327, 1327, 1328, 1339, 1340, 1339, 1340, 1339
  6453. , 1340, 1339, 1340, 1339, 1340, 1340, 1341, 1340, 1341, 1341
  6454. , 1342, 1341, 1342, 1342, 1343, 1343, 1344, 1344, 1345, 1345
  6455. , 1346, 1356, 1357, 1360, 1361, 1360, 1361, 1360, 1361, 1360
  6456. , 1361, 1360, 1361, 1360, 1361, 1360, 1361, 1360, 1361, 1360
  6457. , 1361, 1360, 1361, 1362, 1363, 1365, 1366, 1367, 1368, 1367
  6458. , 1368, 1369, 1370, 1369, 1370, 1369, 1370, 1370, 1371, 1371
  6459. , 1372, 1374, 1375, 1376, 1377, 1377, 1378, 1378, 1379, 1383
  6460. , 1384, 1384, 1385, 1384, 1385, 1384, 1385, 1384, 1385, 1384
  6461. , 1385, 1385, 1386, 1385, 1386, 1387, 1388, 1387, 1388, 1387
  6462. , 1388, 1388, 1389, 1388, 1389, 1388, 1389, 1388, 1389, 1388
  6463. , 1389, 1388, 1389, 1389, 1390, 1389, 1390, 1390, 1391, 1391
  6464. , 1392, 1394, 1395, 1394, 1395, 1395, 1396, 1395, 1396, 1395
  6465. , 1396, 1399, 1400, 1399, 1400, 1399, 1400, 1400, 1401, 1400
  6466. , 1401, 1402, 1403, 1403, 1404, 1404, 1405, 1404, 1405, 1405
  6467. , 1406, 1405, 1406, 1407, 1408, 1408, 1409, 1435, 1436, 1439
  6468. , 1440, 1440, 1441, 1440, 1441, 1440, 1441, 1443, 1444, 1443
  6469. , 1444, 1444, 1445, 1444, 1445, 1444, 1445, 1444, 1445, 1444
  6470. , 1445, 1445, 1446, 1445, 1446, 1456, 1457, 1457, 1458, 1457
  6471. , 1458, 1457, 1458, 1457, 1458, 1457, 1458, 1458, 1459, 1459
  6472. , 1460, 1460, 1461, 1460, 1461, 1460, 1461, 1461, 1462, 1461
  6473. , 1462, 1473, 1474, 1474, 1475, 1475, 1476, 1475, 1476, 1476
  6474. , 1477, 1477, 1478, 1477, 1478, 1478, 1479, 1502, 1503, 1502
  6475. , 1503, 1502, 1503, 1502, 1503, 1502, 1503, 1503, 1504, 1503
  6476. , 1504, 1503, 1504, 1503, 1504, 1503, 1504, 1504, 1505, 1504
  6477. , 1505, 1504, 1505, 1505, 1506, 1505, 1506, 1505, 1506, 1505
  6478. , 1506, 1516, 1517, 1527, 1528, 1528, 1529, 1529, 1530, 1530
  6479. , 1531, 1530, 1531, 1531, 1532, 1532, 1533, 1535, 1536, 1535
  6480. , 1536, 1535, 1536, 1536, 1537, 1536, 1537, 1547, 1548, 1548
  6481. , 1549, 1549, 1550, 1553, 1554, 1553, 1554, 1553, 1554, 1555
  6482. , 1556, 1567, 1568, 1567, 1568, 1569, 1570, 1569, 1570, 1569
  6483. , 1570, 1571, 1572, 1572, 1573, 1573, 1574, 1574, 1575, 1575
  6484. , 1576, 1575, 1576, 1584, 1585, 1584, 1585, 1584, 1585, 1585
  6485. , 1586, 1587, 1588, 1590, 1591, 1591, 1592, 1593, 1594, 1593
  6486. , 1594, 1594, 1595, 1595, 1596, 1595, 1596, 1595, 1596, 1595
  6487. , 1596, 1595, 1596, 1597, 1598, 1597, 1598, 1608, 1609, 1608
  6488. , 1609, 1609, 1610, 1610, 1611, 1610, 1611, 1610, 1611, 1610
  6489. , 1611, 1610, 1611, 1611, 1612, 1613, 1614, 1614, 1615, 1619
  6490. , 1620, 1619, 1620, 1621, 1622, 1622, 1623, 1623, 1624, 1624
  6491. , 1625, 1626, 1627, 1626, 1627, 1626, 1627, 1630, 1631, 1638
  6492. , 1639, 1639, 1640, 1640, 1641, 1641, 1642, 1652, 1653, 1653
  6493. , 1654, 1654, 1655, 1657, 1658, 1657, 1658, 1657, 1658, 1668
  6494. , 1669, 1668, 1669, 1668, 1669, 1669, 1670, 1669, 1670, 1670
  6495. , 1671, 1670, 1671, 1670, 1671, 1671, 1672, 1672, 1673, 1672
  6496. , 1673, 1673, 1674, 1673, 1674, 1674, 1675, 1674, 1675, 1674
  6497. , 1675, 1675, 1676, 1675, 1676, 1675, 1676, 1676, 1677, 1677
  6498. , 1678, 1700, 1701, 1701, 1702, 1701, 1702, 1702, 1703, 1703
  6499. , 1704, 1705, 1706, 1705, 1706, 1705, 1706, 1705, 1706, 1705
  6500. , 1706, 1705, 1706, 1705, 1706, 1706, 1707, 1706, 1707, 1707
  6501. , 1708, 1707, 1708, 1708, 1709, 1709, 1710, 1709, 1710, 1713
  6502. , 1714, 1713, 1714, 1714, 1715, 1719, 1720, 1719, 1720, 1720
  6503. , 1721, 1721, 1722, 1722, 1723, 1724, 1725, 1725, 1726, 1725
  6504. , 1726, 1725, 1726, 1725, 1726, 1725, 1726, 1725, 1726, 1726
  6505. , 1727, 1727, 1728, 1728, 1729, 1728, 1729, 1728, 1729, 1728
  6506. , 1729, 1728, 1729, 1729, 1730, 1729, 1730, 1730, 1731, 1731
  6507. , 1732, 1731, 1732, 1732, 1733, 1732, 1733, 1733, 1734, 1733
  6508. , 1734, 1734, 1735, 1734, 1735, 1734, 1735, 1734, 1735, 1736
  6509. , 1737, 1738, 1739, 1738, 1739, 1738, 1739, 1739, 1740, 1739
  6510. , 1740, 1740, 1741, 1741, 1742, 1741, 1742, 1742, 1743, 1742
  6511. , 1743, 1742, 1743, 1742, 1743, 1742, 1743, 1742, 1743, 1742
  6512. , 1743, 1742)  ;
  6513.      
  6514.     Action_Token_Map : constant Action_Token_Array :=
  6515.          (   43,   65,   63,   26,   27,   42,   43,   45,   54,   71
  6516. ,   80,   27,   45,   26,   42,   54,   63,    3,   35,   36
  6517. ,   37,   65,   66,   68,   71,   67,   74,   76,   65,   67
  6518. ,   65,   11,   65,   71,   80,   31,   35,   80,   35,   42
  6519. ,   45,   26,   56,   26,   45,   42,   35,   65,   65,   30
  6520. ,   49,   71,   72,   73,   74,   75,   76,   77,   78,   81
  6521. ,   82,   83,   85,   86,   89,   91,    7,   34,   36,   39
  6522. ,   47,   64,   69,   70,   84,   87,   90,   35,   36,   37
  6523. ,   65,   67,   71,   74,   76,    3,   40,   66,   68,   72
  6524. ,   30,   81,   83,   86,   89,   90,   91,   36,   82,   47
  6525. ,   71,   77,   70,   75,    7,   64,   39,    7,   39,   64
  6526. ,    7,   39,   76,   69,   74,   73,   34,   49,   78,   87
  6527. ,   35,   37,   68,   71,   65,   66,   67,    3,   36,   65
  6528. ,   67,   68,   71,   35,   37,   66,   31,   71,   51,   65
  6529. ,   31,   71,   65,   65,   10,   21,   25,   26,   27,   44
  6530. ,   55,   56,   42,   43,   45,   59,   60,   65,   25,   26
  6531. ,   27,   42,   45,   55,   56,   59,   60,   10,   65,   67
  6532. ,   65,   25,   26,   27,   42,   45,   55,   56,   59,   60
  6533. ,   21,   44,   21,   10,   65,   65,   67,   11,   11,   31
  6534. ,   65,   80,   80,   59,   65,   63,   65,   43,   60,   71
  6535. ,   77,   70,   84,   85,   85,   75,   72,   36,   39,   64
  6536. ,   81,   82,   84,   85,   86,    7,   30,   72,   75,   83
  6537. ,   89,   90,   91,   47,   70,   71,   77,   72,   75,   80
  6538. ,   30,    3,   71,   74,   76,   35,   36,   37,   65,   66
  6539. ,   67,   68,   36,   37,   74,   76,    3,   35,   65,   66
  6540. ,   67,   68,   71,   35,   71,    3,   36,   37,   65,   66
  6541. ,   67,   68,   74,   76,    3,   36,   65,   66,   67,   68
  6542. ,   71,   74,   35,   37,   76,   17,   47,   16,   65,   71
  6543. ,   74,   76,    3,   35,   36,   37,   65,   66,   67,   68
  6544. ,   71,   65,   67,   68,    6,   35,   74,   76,    3,   36
  6545. ,   37,   65,   66,   67,   68,   71,   75,    3,   35,   58
  6546. ,   65,   66,   67,   68,   71,   36,   37,   74,   76,   19
  6547. ,   74,   76,    3,   35,   36,   37,   65,   66,   67,   68
  6548. ,   71,    3,   37,   65,   66,   67,   68,   71,   76,   35
  6549. ,   36,   74,    3,   35,   36,   37,   65,   66,   68,   74
  6550. ,   76,   67,   71,   35,   36,   37,   71,   76,    3,   65
  6551. ,   66,   67,   68,   74,    3,   36,   37,   65,   67,   71
  6552. ,   74,   76,   35,   66,   68,   58,   19,   35,   71,    3
  6553. ,   36,   37,   65,   66,   67,   68,   35,   36,   37,   65
  6554. ,   67,   71,    3,   66,   68,   37,   65,   66,   67,   68
  6555. ,   71,   35,   70,   71,   77,   65,   65,   31,   65,   72
  6556. ,   77,   71,   77,   80,   65,   65,   67,   68,   11,   65
  6557. ,   65,   11,   59,   65,   65,   65,   31,   50,   80,   80
  6558. ,   71,   77,   80,   65,   59,   65,   31,   50,   80,   35
  6559. ,   65,   65,   80,   51,   71,   65,   65,   65,   26,   45
  6560. ,   79,   71,   77,   80,   75,   80,    3,   35,   36,   37
  6561. ,   66,   67,   68,   71,   74,   76,   65,   71,   65,   65
  6562. ,   36,   37,   65,    3,   35,   66,   67,   68,   71,   74
  6563. ,   76,   35,   37,   74,   76,    3,   36,   65,   66,   67
  6564. ,   68,   71,   35,   36,   37,   65,    3,   40,   66,   67
  6565. ,   68,   71,   74,   76,   35,   65,   74,   76,    3,   36
  6566. ,   37,   66,   67,   68,   71,   84,   85,    3,   35,   36
  6567. ,   37,   65,   67,   68,   71,   74,   76,   40,   66,   75
  6568. ,   86,   86,   72,   65,    3,   37,   65,   71,   74,   76
  6569. ,   35,   36,   66,   67,   68,   30,   36,   81,   82,   83
  6570. ,   89,   90,   91,    3,   36,   37,   65,   67,   68,   71
  6571. ,   74,   35,   66,   76,   35,   37,   65,   66,   67,   68
  6572. ,   74,   76,    3,   36,   71,   65,   66,   68,   71,   74
  6573. ,   76,    3,   35,   36,   37,   67,   77,   79,    3,   36
  6574. ,   66,   67,   74,   35,   37,   65,   68,   71,   76,   71
  6575. ,   80,   60,   70,   71,   77,   60,   65,   31,   50,   31
  6576. ,   65,   65,   80,   31,   31,   71,   80,   77,   43,   26
  6577. ,   42,   45,   56,   27,   60,   21,   25,   26,   27,   45
  6578. ,   55,   56,   59,   60,   10,   42,   43,   44,   65,   54
  6579. ,   68,   65,   67,   43,   21,   22,   21,    2,   10,   24
  6580. ,   29,   33,   37,   46,   51,   62,   65,   67,   68,    4
  6581. ,   12,   14,   15,   25,   28,   43,   53,   92,   23,   21
  6582. ,   65,   35,   36,   37,   66,   68,   71,   74,   76,    3
  6583. ,   65,   67,   21,   80,   31,   80,   71,   31,   31,   75
  6584. ,   30,   65,   35,   74,   76,    3,   36,   37,   65,   66
  6585. ,   67,   68,   71,   65,   43,   72,   35,   36,   67,   76
  6586. ,    3,   37,   65,   66,   68,   71,   74,   35,   36,   37
  6587. ,   65,   67,   68,   71,   74,    3,   66,   76,   36,   37
  6588. ,   40,   65,   66,   71,    3,   35,   67,   68,   74,   76
  6589. ,   36,   37,   66,    3,   35,   65,   67,   68,   71,   74
  6590. ,   76,   35,   65,   71,   76,    3,   36,   37,   66,   67
  6591. ,   68,   74,   75,   30,   41,   65,   72,   80,   72,   80
  6592. ,    7,   30,   34,   36,   39,   49,   69,   70,   71,   72
  6593. ,   73,   74,   75,   83,   64,   76,   77,   78,   81,   82
  6594. ,   85,   87,   89,   90,   91,   70,   71,   72,   77,   82
  6595. ,   83,   90,   91,    7,   30,   34,   36,   39,   49,   64
  6596. ,   69,   73,   74,   75,   76,   78,   81,   85,   87,   89
  6597. ,   85,   35,   36,   37,   65,   66,   67,   71,   74,   76
  6598. ,    3,   68,    9,   71,   16,   17,   65,   47,   35,   37
  6599. ,    3,   36,   65,   66,   67,   68,   71,   74,   76,   31
  6600. ,   65,   65,   31,   31,   80,    5,    8,   16,   17,   32
  6601. ,   35,   44,   47,   71,   65,   75,   80,   11,   65,   31
  6602. ,   80,   80,   70,   71,   77,   80,   65,   65,   25,   65
  6603. ,   65,   67,   68,   65,   35,   36,   37,   67,   68,   71
  6604. ,   74,   76,    3,   65,   66,   71,   74,   76,    3,   35
  6605. ,   36,   37,   65,   66,   67,   68,   80,   61,   65,   65
  6606. ,    3,   35,   36,   68,   74,   76,   37,   65,   66,   67
  6607. ,   71,   80,   80,   65,   37,   68,   71,   74,   76,   80
  6608. ,    3,   35,   36,   65,   66,   67,   79,   65,   70,   88
  6609. ,   71,   77,   80,   10,   12,   15,   24,   28,   33,   46
  6610. ,   62,   92,    2,    4,   14,   25,   29,   37,   51,   53
  6611. ,   65,   67,   68,   33,   62,   25,   10,   14,   79,   65
  6612. ,    8,   16,   17,   44,   47,   71,    5,   32,   65,   65
  6613. ,   67,   94,   68,   80,   65,   41,   88,   75,   86,   75
  6614. ,   88,   51,   65,   72,   75,   35,   37,   65,   67,   68
  6615. ,   71,   74,   76,    3,   36,   66,   72,    3,   35,   37
  6616. ,   65,   67,   68,   71,   76,   36,   66,   74,    3,   36
  6617. ,   37,   66,   74,   76,   35,   40,   65,   67,   68,   71
  6618. ,   48,   80,   80,   54,   77,   80,   80,   16,   17,   47
  6619. ,   71,   54,   65,   71,    3,   35,   37,   66,   67,   71
  6620. ,   76,   36,   65,   68,   74,   66,   67,   68,   71,   74
  6621. ,   76,    3,   35,   36,   37,   65,   44,   65,   80,   65
  6622. ,   68,   80,   80,   80,   80,   80,   80,   80,   47,   47
  6623. ,   48,   79,   65,   43,   80,   71,   43,   80,   70,   71
  6624. ,   77,   71,   31,   80,    3,   37,   65,   66,   67,   68
  6625. ,   71,   74,   76,   35,   36,   61,   77,   80,   77,   80
  6626. ,   58,   77,   80,   80,   10,   14,   25,   33,   62,   93
  6627. ,   65,   16,   17,   47,   71,   35,   36,   37,   65,   66
  6628. ,   67,   68,   74,    3,   71,   76,   43,    2,    4,   19
  6629. ,   24,   37,   61,   62,   65,   67,   92,   10,   12,   14
  6630. ,   15,   20,   21,   23,   25,   28,   29,   33,   46,   51
  6631. ,   53,   68,   21,   43,   61,   65,   35,   67,   71,    3
  6632. ,   36,   37,   65,   66,   68,   74,   76,   33,   65,   21
  6633. ,    4,   15,   43,   57,   61,   65,   67,   68,   21,   43
  6634. ,   61,   26,   44,   45,   55,   56,   10,   21,   25,   27
  6635. ,   42,   43,   59,   60,   65,    8,   65,   13,   23,   75
  6636. ,   72,   94,   94,   44,   94,   94,   80,   70,   71,   77
  6637. ,   35,   65,   66,   67,   68,   71,   76,    3,   36,   37
  6638. ,   74,   80,   75,   72,   65,   80,   36,   65,   66,   67
  6639. ,   68,    3,   35,   37,   71,   74,   76,   80,   80,   75
  6640. ,    9,   80,    3,   35,   36,   37,   66,   76,   65,   67
  6641. ,   68,   71,   74,   80,    3,   65,   71,   74,   76,   35
  6642. ,   36,   37,   66,   67,   68,   38,   80,   37,   65,   72
  6643. ,   80,   77,   35,   36,   37,   65,   67,   68,   71,    3
  6644. ,   66,   74,   76,   80,   43,   75,   80,   35,    3,   36
  6645. ,   37,   65,   66,   67,   68,   71,   74,   76,   18,   80
  6646. ,   80,   68,   71,   74,   76,    3,   35,   36,   37,   65
  6647. ,   66,   67,   20,   19,   80,   80,   12,   40,   71,   76
  6648. ,    3,   35,   36,   37,   65,   66,   67,   68,   74,   30
  6649. ,   21,   80,   65,   65,   80,   71,   76,    3,   35,   36
  6650. ,   37,   65,   66,   67,   68,   74,   70,   71,   77,   80
  6651. ,   19,   39,   57,    4,   15,   19,   39,   65,   40,   61
  6652. ,   71,    8,   65,   88,   50,   80,   88,   88,   16,   17
  6653. ,   47,   50,   71,   80,   72,   72,   80,   80,   34,   43
  6654. ,   21,   65,   67,   68,   72,   70,   71,   77,   47,   65
  6655. ,   72,   75,   21,   43,   88,   31,   80,   65,    7,   71
  6656. ,   72,   73,   74,   75,   82,   83,   89,   90,   91,   30
  6657. ,   34,   36,   39,   47,   49,   64,   69,   70,   76,   77
  6658. ,   78,   79,   81,   86,   87,   47,   70,   71,   77,   72
  6659. ,   68,   65,   67,   72,   80,   35,   36,   37,   74,    3
  6660. ,   65,   66,   67,   68,   71,   76,   21,   43,   80,   85
  6661. ,   61,    3,   37,   65,   66,   67,   35,   36,   52,   68
  6662. ,   71,   74,   76,   33,   21,   80,   80,   85,   10,   12
  6663. ,   15,   24,   25,   28,   29,   33,   37,   39,   46,   53
  6664. ,   62,   65,   67,   68,    2,    4,   14,   19,   21,   43
  6665. ,   51,   92,   43,   21,   77,   37,   68,   76,    3,   35
  6666. ,   36,   65,   66,   67,   71,   74,    3,   35,   36,   66
  6667. ,   68,   76,   37,   65,   67,   71,   74,   88,   88,   65
  6668. ,   80,   80,   65,   67,   68,   31,   35,   36,   37,   65
  6669. ,   67,   68,   76,    3,   66,   71,   74,   21,   48,   70
  6670. ,   71,   77,    9,   72,   75,   35,   36,   65,   66,   67
  6671. ,   68,   71,   74,   94,    3,   37,   76,   72,   75,   68
  6672. ,   65,   48,   65,   12,   43,    5,   44,    8,   16,   17
  6673. ,   32,   35,   47,   71,   71,   72,   80,   70,   71,   77
  6674. ,   71,   72,   80,   58,   29,   84,   85,    3,   35,   37
  6675. ,   65,   66,   67,   68,   36,   71,   74,   76,   65,   33
  6676. ,   21,   15,   43,   53,    4,   43,   57,   61,   15,   84
  6677. ,   85,   80,   80,   80,   77,   80,   71,   80,   70,   77
  6678. ,    5,   17,   32,   44,   47,    8,   16,   71,   80,   48
  6679. ,   80,   35,   37,   65,   68,   76,    3,   36,   66,   67
  6680. ,   71,   74,   43,   38,   67,   65,   68,   35,   36,   37
  6681. ,   65,   67,   68,    3,   66,   71,   74,   76,   79,   65
  6682. ,   44,   80,   65,   65,   80,   80,   65,   21,   24,   25
  6683. ,   39,   46,   51,   53,   62,   65,   67,   68,   92,    2
  6684. ,    4,   10,   12,   14,   15,   19,   28,   29,   33,   37
  6685. ,   53,   21,   80,   40,   65,   80,   80,   47,   65,   47
  6686. ,   70,   71,   77,   65,   43,   61,   65,   12,   21,   31
  6687. ,   43,   21,   43,   61,   80,   80,   80,   53,   80,   94
  6688. ,   88,   12,   37,   37,   80,   72,   72,   80,   80,   80
  6689. ,   80,   61)  ;
  6690.         --| Action_Token_Map is an array that
  6691.         --| maps from each state (using action  map) to a set of
  6692.         --| action tokens. An action token is a terminal symbol
  6693.         --| (except EOF_Token) for which in the given state an
  6694.         --| explicit (non-default) shift or reduce action
  6695.         --| is defined.
  6696.         --| Used to cut reduce the
  6697.         --| number of primary recovery candidates.
  6698.      
  6699.     ------------------------------------------------------------------
  6700.     -- Shift_State_Map
  6701.     ------------------------------------------------------------------
  6702.      
  6703.     type Shift_State_Index_Array is array(
  6704.         PositiveParserInteger range <>) of GC.ParserInteger;
  6705.        --| For indexing the All Action Token Array.
  6706.        --| Maps a given state into the lower and upper bounds of a slice
  6707.        --| of the All Action Index Array.
  6708.      
  6709.     Shift_State_MapIndex : constant Shift_State_Index_Array :=
  6710.          (    1,    1,    2,    2,    3,    3,    4,    4,    5,    5
  6711. ,    6,    6,    7,    9,   10,   11,   12,   14,   15,   15
  6712. ,   16,   19,   20,   23,   24,   24,   25,   25,   26,   26
  6713. ,   27,   29,   30,   32,   33,   33,   34,   36,   37,   37
  6714. ,   38,   56,   57,   57,   58,   59,   60,   60,   61,   62
  6715. ,   63,   64,   65,   65,   66,   66,   67,   68,   69,   72
  6716. ,   73,   90,   91,   93,   94,   96,   97,   98,   99,  103
  6717. ,  104,  105,  106,  107,  108,  109,  110,  113,  114,  116
  6718. ,  117,  118,  119,  124,  125,  126,  127,  133,  134,  134
  6719. ,  135,  135,  136,  140,  141,  145,  146,  146,  147,  150
  6720. ,  151,  153,  154,  154,  155,  158,  159,  162,  163,  163
  6721. ,  164,  166,  167,  167,  168,  171,  172,  174,  175,  177
  6722. ,  178,  182,  183,  183,  184,  185,  186,  187,  188,  217
  6723. ,  218,  218,  219,  223,  224,  226,  227,  227,  228,  231
  6724. ,  232,  247,  248,  263,  264,  264,  265,  266,  267,  279
  6725. ,  280,  281,  282,  283,  284,  284,  285,  290,  291,  384
  6726. ,  385,  385,  386,  386,  387,  387,  388,  390,  391,  398
  6727. ,  399,  402,  403,  403,  404,  406,  407,  407,  408,  408
  6728. ,  409,  409,  410,  410,  411,  411,  412,  417,  418,  417
  6729. ,  418,  417,  418,  417,  418,  418,  419,  423,  424,  427
  6730. ,  428,  428,  429,  429,  430,  430,  431,  433,  434,  436
  6731. ,  437,  438,  439,  441,  442,  444,  445,  445,  446,  446
  6732. ,  447,  447,  448,  448,  449,  449,  450,  450,  451,  455
  6733. ,  456,  463,  464,  471,  472,  474,  475,  490,  491,  491
  6734. ,  492,  492,  493,  493,  494,  494,  495,  496,  497,  504
  6735. ,  505,  507,  508,  509,  510,  519,  520,  520,  521,  521
  6736. ,  522,  522,  523,  524,  525,  525,  526,  527,  528,  528
  6737. ,  529,  536,  537,  537,  538,  538,  539,  545,  546,  547
  6738. ,  548,  549,  550,  567,  568,  569,  570,  570,  571,  571
  6739. ,  572,  572,  573,  574,  575,  575,  576,  576,  577,  578
  6740. ,  579,  579,  580,  580,  581,  595,  596,  600,  601,  601
  6741. ,  602,  603,  604,  605,  606,  607,  608,  610,  611,  626
  6742. ,  627,  627,  628,  628,  629,  629,  630,  630,  631,  631
  6743. ,  632,  633,  634,  634,  635,  635,  636,  636,  637,  638
  6744. ,  639,  639,  640,  642,  643,  644,  645,  646,  647,  648
  6745. ,  649,  649,  650,  650,  651,  652,  653,  655,  656,  656
  6746. ,  657,  658,  659,  659,  660,  661,  662,  663,  664,  664
  6747. ,  665,  665,  666,  666,  667,  668,  669,  669,  670,  670
  6748. ,  671,  671,  672,  676,  677,  677,  678,  681,  682,  685
  6749. ,  686,  688,  689,  691,  692,  692,  693,  695,  696,  697
  6750. ,  698,  708,  709,  709,  710,  710,  711,  711,  712,  712
  6751. ,  713,  713,  714,  714,  715,  715,  716,  716,  717,  717
  6752. ,  718,  720,  721,  723,  724,  724,  725,  726,  727,  727
  6753. ,  728,  730,  731,  731,  732,  732,  733,  733,  734,  734
  6754. ,  735,  735,  736,  736,  737,  737,  738,  751,  752,  759
  6755. ,  760,  762,  763,  764,  765,  775,  776,  777,  778,  779
  6756. ,  780,  780,  781,  781,  782,  782,  783,  783,  784,  784
  6757. ,  785,  786,  787,  787,  788,  788,  789,  789,  790,  791
  6758. ,  792,  792,  793,  793,  794,  794,  795,  795,  796,  797
  6759. ,  798,  798,  799,  800,  801,  801,  802,  802,  803,  804
  6760. ,  805,  810,  811,  811,  812,  812,  813,  814,  815,  816
  6761. ,  817,  818,  819,  819,  820,  821,  822,  833,  834,  834
  6762. ,  835,  836,  837,  840,  841,  841,  842,  842,  843,  843
  6763. ,  844,  844,  845,  845,  846,  852,  853,  862,  863,  869
  6764. ,  870,  875,  876,  877,  878,  878,  879,  880,  881,  883
  6765. ,  884,  884,  885,  886,  887,  888,  889,  890,  891,  891
  6766. ,  892,  892,  893,  893,  894,  894,  895,  896,  897,  897
  6767. ,  898,  898,  899,  899,  900,  900,  901,  901,  902,  902
  6768. ,  903,  903,  904,  904,  905,  905,  906,  906,  907,  908
  6769. ,  909,  909,  910,  910,  911,  912,  913,  913,  914,  915
  6770. ,  916,  916,  917,  919,  920,  920,  921,  921,  922,  923
  6771. ,  924,  925,  926,  926,  927,  927,  928,  928,  929,  929
  6772. ,  930,  931,  932,  932,  933,  933,  934,  934,  935,  935
  6773. ,  936,  936,  937,  937,  938,  938,  939,  939,  940,  941
  6774. ,  942,  943,  944,  944,  945,  945,  946,  946,  947,  947
  6775. ,  948,  949,  950,  950,  951,  954,  955,  957,  958,  958
  6776. ,  959,  959,  960,  960,  961,  962,  963,  963,  964,  964
  6777. ,  965,  965,  966,  966,  967,  968,  969,  969,  970,  970
  6778. ,  971,  971,  972,  973,  974,  974,  975,  975,  976,  977
  6779. ,  978,  978,  979,  979,  980,  981,  982,  982,  983,  983
  6780. ,  984,  984,  985,  985,  986,  986,  987,  987,  988,  988
  6781. ,  989,  989,  990,  990,  991,  991,  992,  992,  993,  993
  6782. ,  994,  994,  995,  995,  996,  996)  ;
  6783.      
  6784.     Shift_State_Map : constant Shift_State_Array :=
  6785.          (    1,  425,   37,  426,  523,  278,  151,  154,  157,  524
  6786. ,  730,  511,  752,  899,  216,   78,  236,  313,  316,  427
  6787. ,  795,  910,  987,  731,  593,  428,  270,  525,  605,  271
  6788. ,  526,  606,  783,  289,  296,  787,  788,  229,  232,  420
  6789. ,  424,  469,  479,  697,  709,  725,  802,  841,  852,  867
  6790. ,  877,  884,  897,  927,  962,  972,  421,  470,  732,  429
  6791. ,  185,  588,   13,   97,   14,  430,  431,  921,  132,  264
  6792. ,  488,  801,   83,  174,  179,  304,  324,  399,  402,  404
  6793. ,  481,  483,  485,  516,  520,  521,  682,  857,  895,  971
  6794. ,  527,  607,  913,  589,  876,  925,  163,  839,   38,   85
  6795. ,   92,  112,  528,   39,  133,   40,  432,  764,  943,  152
  6796. ,  155,  158,  815,  121,  796,  821,  501,  619,   15,   98
  6797. ,  107,  186,  225,  408,    2,  183,  230,  529,  608,  652
  6798. ,  739,  914,  954,   16,  433,  144,  272,  609,  846,  969
  6799. ,  634,  669,  898,  907,  940,  164,  325,  398,  830,  834
  6800. ,  175,  434,  626,  874,  435,  930,  961,  984,   17,  418
  6801. ,  638,  646,  187,   99,  188,  226,  710,  286,  295,  689
  6802. ,  920,  189,  240,  317,  190,  394,  396,  563,  685,  698
  6803. ,  711,  726,  590,   35,  241,  153,  156,    9,   41,   75
  6804. ,   79,  113,  116,  122,  219,  233,  242,  273,  279,  309
  6805. ,  310,  315,  319,  342,  355,  356,  374,  385,  436,  491
  6806. ,  555,  577,  618,  655,  703,  774,  950,   42,   43,   76
  6807. ,  220,  280,  386,   44,  281,  656,  159,  145,  249,  395
  6808. ,  578,   11,   45,   82,  146,  176,  248,  307,  334,  347
  6809. ,  392,  512,  530,  610,  641,  648,  826,  131,  254,  259
  6810. ,  306,  372,  492,  503,  628,  631,  736,  746,  836,  844
  6811. ,  850,  901,  904,  165,   46,  160,  149,  255,  260,  285
  6812. ,  349,  368,  487,  549,  629,  779,  851,  902,  905,   47
  6813. ,  161,  147,  250,  166,  345,  380,  576,  602,  671,  947
  6814. ,   12,   84,   91,  238,  239,  263,  308,  332,  335,  339
  6815. ,  348,  350,  393,  403,  405,  480,  482,  504,  522,  550
  6816. ,  552,  553,  564,  571,  572,  574,  579,  617,  636,  637
  6817. ,  639,  640,  654,  659,  660,  661,  662,  663,  664,  665
  6818. ,  674,  678,  683,  686,  687,  691,  692,  742,  745,  748
  6819. ,  750,  751,  757,  759,  765,  771,  778,  780,  784,  785
  6820. ,  792,  793,  804,  807,  831,  835,  838,  858,  865,  870
  6821. ,  878,  879,  892,  893,  933,  934,  935,  936,  937,  939
  6822. ,  941,  955,  958,  959,  963,  965,  966,  979,  982,  983
  6823. ,  985,  993,  994,  995,  134,  135,  136,  251,  363,  931
  6824. ,  252,  253,  364,  509,  871,  880,  922,  932,  137,  256
  6825. ,  370,  371,  168,  580,  620,  827,  138,  139,  140,  437
  6826. ,  693,  615,  737,  738,  740,  741,  903,    3,   48,  277
  6827. ,  352,  510,  758,  184,  438,  699,  973,  191,  192,  193
  6828. ,   18,  194,  409,   19,  195,  410,  196,  411,   20,  197
  6829. ,  412,   21,  198,  413,  199,  472,  473,  474,  475,  476
  6830. ,  243,  302,  477,  547,  908,  518,  647,  653,  733,  828
  6831. ,  849,  968,  970,  621,  625,  832,  833,  856,  889,  890
  6832. ,  986,  531,  734,  829,   49,  123,  357,  358,  359,  365
  6833. ,  387,  496,  561,  567,  575,  633,  695,  744,  781,  888
  6834. ,  344,  200,  201,  202,  532,  915,  177,  180,  406,  484
  6835. ,  675,  680,  916,  918,  548,  614,  859,  672,  743,  505
  6836. ,  507,  772,  837,  860,  863,  917,  919,  991,  992,  533
  6837. ,  534,  535,  536,  611,  537,  538,  612,  539,  117,  300
  6838. ,  489,  502,  519,  735,  747,  770,  642,  118,  148,  257
  6839. ,  540,  643,  666,  847,  967,  541,  644,  542,  645,   50
  6840. ,  124,  265,  266,  268,  269,  287,  362,  494,  499,  500
  6841. ,  515,  562,  632,  650,  651,  896,  942,  657,  906,  766
  6842. ,  658,  543,  667,  668,  544,  545,  760,  944,  845,  649
  6843. ,   51,  125,  171,  311,  419,  439,  559,  616,  712,  761
  6844. ,  775,  842,  862,  894,  945,  762,  776,  875,  923,  946
  6845. ,  848,  267,  763,  513,  546,  635,  670,  767,  988,  990
  6846. ,   86,  114,  321,  323,  326,  351,  551,  556,  601,  677
  6847. ,  754,  768,  855,  900,  948,  951,  853,  909,  949,  854
  6848. ,  911,  440,  769,  912,  952,  974,  975,  996,  976,  126
  6849. ,  495,  797,   87,   93,   88,   95,  203,  414,  322,  204
  6850. ,  205,  557,  206,  247,  415,  416,  100,  207,  208,   22
  6851. ,  101,   23,  102,  103,   52,   53,   54,  312,  282,  274
  6852. ,  127,   55,  275,  353,  514,  694,  128,  261,  369,  623
  6853. ,  624,  129,  360,  366,  498,  262,  493,  497,  130,  361
  6854. ,  367,   56,   57,  283,  375,  150,  373,   58,  288,  290
  6855. ,  291,  292,  293,  294,  376,  377,  378,  379,   59,   60
  6856. ,   61,   62,   63,  141,  142,   64,   65,   66,  173,  297
  6857. ,   67,  172,  299,  169,   68,  298,   69,   70,  276,  354
  6858. ,   71,   72,  143,  162,   73,  167,  170,  119,  181,  182
  6859. ,  224,  245,  301,  320,  517,  565,  566,  573,  673,  822
  6860. ,  891,  330,  581,  597,  794,  809,  814,  883,  885,  441
  6861. ,  696,  881,  582,  926,  331,  596,  690,  705,  798,  800
  6862. ,  803,  824,  868,  869,  882,  442,  583,  443,  584,  444
  6863. ,  445,  446,  447,  448,  449,  713,  450,  451,  452,  453
  6864. ,  714,  454,  455,  456,  457,  458,  715,  459,  460,  585
  6865. ,  568,  688,  789,  819,  569,  684,  704,  786,  808,  866
  6866. ,  461,  586,  700,  977,  701,  873,  702,  978,  462,  591
  6867. ,  706,  234,  336,  338,  341,  554,  558,  604,  707,  805
  6868. ,  806,  924,  960,  592,  217,  594,   89,   96,  237,  708
  6869. ,  218,  471,  599,  463,  595,   24,  104,  108,  209,  227
  6870. ,  343,  417,   80,   81,  178,  314,  318,  340,  397,  400
  6871. ,  401,  560,  303,  305,  627,  777,  782,  956,  957,  383
  6872. ,  384,  861,  864,  980,  981,   77,  235,  381,  346,  382
  6873. ,   25,  105,  228,  221,   26,  109,   27,  110,   94,  337
  6874. ,  231,   28,  407,  210,  327,  329,  211,  106,  676,  422
  6875. ,  681,  464,  465,  466,  467,  468,  598,  886,  724,  716
  6876. ,  717,  818,  718,  719,  928,  720,  810,  812,  813,  721
  6877. ,  722,  790,  816,  817,  820,  929,  679,    4,    5,    6
  6878. ,   10,    7,   29,   30,    8,  246,   36,   31,  727,  728
  6879. ,  825,  823,  964,   32,   33,  111,  244,  613,  938,  486
  6880. ,  388,  478,  490,  749,  508,  603,  622,   34,  389,  390
  6881. ,  391,  630,  212,  213,  214,  215,  755,  840,  753,  843
  6882. ,  953,  587,  600,  773,  989,  258,  872,   90,  222,   74
  6883. ,  284,  120,  570,  791,  799,  729,  506,  328,  423,  811
  6884. ,  115,  887,  756,  723,  223,  333)  ;
  6885.         --| Shift_State_ is an array that
  6886.         --| maps from non-terminals (using shift  map) to sets
  6887.         --| of states in which
  6888.         --| a shift to the non-terminal is defined.
  6889.         --| Used to determine the number of trials in primary
  6890.         --| error recovery.
  6891.      
  6892.     ------------------------------------------------------------------
  6893.     -- Subprogram Bodies Global to Package ErrorParseTables
  6894.     ------------------------------------------------------------------
  6895.      
  6896.     function Get_Action_Token_Map ( --| return the array of action tokens
  6897.                                     --| for the state passed in.
  6898.         In_Index : in StateRange
  6899.                                     --| the state to return action tokens
  6900.                                     --| for.
  6901.         )
  6902.         return Action_Token_Record
  6903.         is
  6904.         --| Returns
  6905.         --| This subprogram returns the action token record for the
  6906.         --| state passed in.
  6907.         Result : Action_Token_Record ;
  6908.         LowerBound, UpperBound : GC.ParserInteger ;
  6909.         --| Lower and upper bounds of the slice of Action Token Map
  6910.     begin
  6911.         LowerBound := Action_Token_MapIndex ( In_Index*2 - 1 ) ;
  6912.         UpperBound := Action_Token_MapIndex ( In_Index*2 ) ;
  6913.      
  6914.         Result.set_size := UpperBound - LowerBound + 1;
  6915.         Result.set := (others => DefaultValue) ;
  6916.         Result.set(Result.set'first .. Result.set_size) :=
  6917.         Action_Token_Map(LowerBound..UpperBound) ;
  6918.      
  6919.         return Result ;
  6920.     end Get_Action_Token_Map ;
  6921.      
  6922.     ------------------------------------------------------------------
  6923.      
  6924.     function Get_Shift_State_Map (  --| return the array of shift states
  6925.                                 --| for the grammar symbol passed in.
  6926.         In_Index : in GrammarSymbolRange
  6927.                                 --| the grammar symbol to return shifts
  6928.                                 --| for.
  6929.         )
  6930.         --| Raises: This subprogram raises no exceptions.
  6931.         return Shift_State_Record
  6932.         --| Returns
  6933.         --| This subprogram returns the array of shift states for the
  6934.         --| grammar symbol passed in.
  6935.         is
  6936.      
  6937.         Result : Shift_State_Record ;
  6938.         LowerBound, UpperBound : GC.ParserInteger ;
  6939.           --| Lower and upper bounds of the slice of Shift State Map
  6940.     begin
  6941.         LowerBound := Shift_State_MapIndex ( In_Index*2 - 1 ) ;
  6942.         UpperBound := Shift_State_MapIndex ( In_Index*2 ) ;
  6943.      
  6944.         Result.set_size := UpperBound - LowerBound + 1;
  6945.         Result.set := (others => DefaultValue) ;
  6946.         Result.set(Result.set'first .. Result.set_size) :=
  6947.             Shift_State_Map(LowerBound..UpperBound) ;
  6948.      
  6949.         return Result ;
  6950.     end Get_Shift_State_Map ;
  6951.      
  6952.     function Get_Grammar_Symbol (   --| return the string representation
  6953.                                     --| of the grammar symbol
  6954.         In_Index : in GrammarSymbolRange
  6955.         )
  6956.         return string
  6957.         is
  6958.         LowerBound, UpperBound : GC.ParserInteger ;
  6959.       --| Lower and upper bounds of the slice of Shift State Map
  6960.     begin
  6961.         LowerBound := GrammarSymbolTableIndex ( In_Index*2 - 1 ) ;
  6962.         UpperBound := GrammarSymbolTableIndex ( In_Index*2 ) ;
  6963.      
  6964.         return GrammarSymbolTable(
  6965.             Integer(LowerBound) .. Integer(UpperBound)) ;
  6966.     end Get_Grammar_Symbol ;
  6967.      
  6968.     ------------------------------------------------------------------
  6969.      
  6970.     function Get_Follow_Map (       --| return the array of follow symbols
  6971.                                 --| of the grammar symbol passed in
  6972.         In_Index : in FollowMapRange
  6973.         )
  6974.         -- |
  6975.         -- |Raises: This subprogram raises no exceptions.
  6976.         -- |
  6977.      
  6978.       return FollowSymbolRecord
  6979.       is
  6980.         Result : FollowSymbolRecord ;
  6981.         LowerBound, UpperBound : GC.ParserInteger ;
  6982.         Adjusted_Index : GC.ParserInteger :=
  6983.           (In_Index - FollowMapRange'first) + 1;
  6984.     begin
  6985.         LowerBound := FollowSymbolMapIndex ( Adjusted_Index*2 - 1 ) ;
  6986.         UpperBound := FollowSymbolMapIndex ( Adjusted_Index*2 ) ;
  6987.      
  6988.         Result.follow_symbol_count := UpperBound - LowerBound + 1;
  6989.         Result.follow_symbol := (others => DefaultValue) ;
  6990.         Result.follow_symbol(
  6991.           Result.follow_symbol'first ..
  6992.           Result.follow_symbol_count) :=
  6993.             FollowSymbolMap(LowerBound..UpperBound) ;
  6994.      
  6995.         return Result ;
  6996.     end Get_Follow_Map ;
  6997.      
  6998.     ------------------------------------------------------------------
  6999.      
  7000.     function GetAction (            -- see subprogram declaration
  7001.       InStateValue  : in StateRange;
  7002.       InSymbolValue : in GrammarSymbolRange
  7003.       )
  7004.       return ActionRange
  7005.       is
  7006.      
  7007.         Unique : GC.ParserInteger;
  7008.             --| unique value to hash for Index.
  7009.         Index  : GC.ParserInteger;
  7010.             --|  into Action Tables.
  7011.         Action : GC.ParserInteger;
  7012.             --| value from Action Tables.
  7013.         CollisionCount : Natural := 0 ; --| Number of collisions.
  7014.     begin -- GetAction function
  7015.     --| Algorithm
  7016.     --|-
  7017.     --| Definitions of key objects from package ParseTables:
  7018.     --|
  7019.     --| ActionCount: the number of actions in the action tables.
  7020.     --|
  7021.     --| ActionTableOne: table of action values for all combinations of
  7022.     --|     states and input actions.
  7023.     --|
  7024.     --| ActionTableTwo: hash values to check against to verify that action
  7025.     --|     value at same  in ActionTableOne is correct one.
  7026.     --|
  7027.     --| ActionTableSize: last  in ActionTableOne and ActionTableTwo
  7028.     --|     before the hash collision chains.
  7029.     --|
  7030.     --| DefaultMap: default action for each state.
  7031.     --|+
  7032.     --| The action to be returned is computed from parameters InStateValue
  7033.     --| and InSymbolValue. First, determine the unique single value:
  7034.     --|
  7035.     --|     Unique := (InStateValue * GrammarSymbolCountPlusOne) +
  7036.     --|                InSymbolValue;
  7037.     --|
  7038.     --| Unique is hashed by reducing modulo ActionTableSize and adding 1:
  7039.     --|
  7040.     --|     Index := (Unique mod ActionTableSize) + 1;
  7041.     --|
  7042.     --| This hash value, Index, is used to  ActionTableOne to
  7043.     --| obtain an Action:
  7044.     --|
  7045.     --|     Action := ActionTableOne(Index);
  7046.     --|
  7047.     --| Action is then used to determine the return value:
  7048.     --|
  7049.     --| Action = 0:
  7050.     --|     return DefaultMap(InStateValue);
  7051.     --|
  7052.     --| Action < ActionCount:
  7053.     --|     if (Unique = ActionTableTwo(Index)) then
  7054.     --|         return Action;
  7055.     --|     else
  7056.     --|         return DefaultMap(InStateValue);
  7057.     --|     end if;
  7058.     --|
  7059.     --| Action >= ActionCount:
  7060.     --|     --Search the hash collision chain
  7061.     --|     Index := Action - ActionCount;
  7062.     --|     while (Action /= 0) loop
  7063.     --|         Index := Index + 1;
  7064.     --|         Action := ActionTableTwo(Index);
  7065.     --|         if (Action = Unique) then
  7066.     --|             return ActionTableOne(Index);
  7067.     --|         end if;
  7068.     --|     end loop;
  7069.     --|     return DefaultMap(InStateValue);
  7070.      
  7071.     ------------------------------------------------------------------
  7072.      
  7073.   --| The actual code used folds this algorithm into a more efficient one:
  7074.         ParserDecisionCount := Natural'succ(ParserDecisionCount) ;
  7075.      
  7076.         Unique := (InStateValue * GrammarSymbolCountPlusOne) +
  7077.                         InSymbolValue;
  7078.         Index := (Unique mod ActionTableSize) + 1;
  7079.         Action := ActionTableOne(Index);
  7080.      
  7081.         if (Action >= ActionCount) then
  7082.             Index := Action - ActionCount + 1;
  7083.             while ( (ActionTableTwo(Index) /= Unique) and then
  7084.                     (ActionTableTwo(Index) /= 0) ) loop
  7085.                 Index := Index + 1;
  7086.             CollisionCount := Natural'succ(CollisionCount) ;
  7087.             end loop;
  7088.             Action := ActionTableOne(Index);
  7089.         end if;
  7090.      
  7091.         -- Collect statistics information.
  7092.         TotalCollisions := CollisionCount + TotalCollisions ;
  7093.         if CollisionCount > MaxCollisions then
  7094.             MaxCollisions := CollisionCount ;
  7095.         end if;
  7096.      
  7097.         if (ActionTableTwo(Index) /= Unique) then
  7098.             return DefaultMap(InStateValue);
  7099.         else
  7100.             return Action;
  7101.         end if;
  7102.      
  7103.     end GetAction; -- function
  7104.      
  7105.     function Get_LeftHandSide(
  7106.       GrammarRule : LeftHandSideRange
  7107.       ) return GrammarSymbolRange is
  7108.     begin
  7109.         return LeftHandSide(GrammarRule) ;
  7110.     end Get_LeftHandSide ;
  7111.      
  7112.     function Get_RightHandSide(
  7113.       GrammarRule : RightHandSideRange
  7114.       ) return GC.ParserInteger is
  7115.     begin
  7116.         return RightHandSide(GrammarRule) ;
  7117.     end Get_RightHandSide ;
  7118.      
  7119. end ParseTables;
  7120.      
  7121. ----------------------------------------------------------------------
  7122.  
  7123.