Changeset 37f0da8


Ignore:
Timestamp:
Apr 14, 2016, 3:23:53 PM (6 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, ctor, deferred_resn, demangler, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, resolv-new, string, with_gc
Children:
0f9e4403, 347c42f, 70a06f6
Parents:
37218fc (diff), baba5d8 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:/u/cforall/software/cfa/cfa-cc

Files:
1 added
22 edited

Legend:

Unmodified
Added
Removed
  • doc/LaTeXmacros/common.tex

    r37218fc r37f0da8  
     1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%%
     2%%
     3%% Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
     4%%
     5%% The contents of this file are covered under the licence agreement in the
     6%% file "LICENCE" distributed with Cforall.
     7%%
     8%% common.tex --
     9%%
     10%% Author           : Peter A. Buhr
     11%% Created On       : Sat Apr  9 10:06:17 2016
     12%% Last Modified By : Peter A. Buhr
     13%% Last Modified On : Sat Apr  9 10:06:39 2016
     14%% Update Count     : 1
     15%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     16
    117%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    218
  • doc/refrat/refrat.tex

    r37218fc r37f0da8  
    1111%% Created On       : Wed Apr  6 14:52:25 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Fri Apr  8 18:32:07 2016
    14 %% Update Count     : 6
     13%% Last Modified On : Sat Apr  9 10:19:12 2016
     14%% Update Count     : 8
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    2626\usepackage{listings}
    2727\usepackage{comment}
    28 \usepackage{latexsym}                                   % \Box
    29 \usepackage{mathptmx}                                   % better math font with "times"
     28\usepackage{latexsym}                                   % \Box
     29\usepackage{mathptmx}                                   % better math font with "times"
    3030\usepackage[pagewise]{lineno}
    3131\renewcommand{\linenumberfont}{\scriptsize\sffamily}
     
    3939\input{common}
    4040
    41 \setcounter{secnumdepth}{3}     % number subsubsections
    42 \setcounter{tocdepth}{3}                % subsubsections in table of contents
     41%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     42
     43\setcounter{secnumdepth}{3}                             % number subsubsections
     44\setcounter{tocdepth}{3}                                % subsubsections in table of contents
    4345\makeindex
    4446
     
    4749\begin{document}
    4850\pagestyle{headings}
    49 \linenumbers                                    % comment out to turn off line numbering
     51\linenumbers                                            % comment out to turn off line numbering
    5052
    5153\title{\Huge
     54\vspace*{1in}
    5255\CFA (\CFL) Reference Manual and Rationale
    5356}% title
  • doc/user/user.tex

    r37218fc r37f0da8  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Fri Apr  8 11:40:53 2016
    14 %% Update Count     : 42
     13%% Last Modified On : Sun Apr 10 22:50:15 2016
     14%% Update Count     : 72
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    2121
    2222% Latex packages used in the document.
    23 \usepackage[T1]{fontenc}
     23\usepackage[T1]{fontenc}                                % allow Latin1 (extended ASCII) characters
    2424\usepackage{textcomp}
    2525\usepackage[latin1]{inputenc}
     
    3131\usepackage{footmisc}
    3232\usepackage{comment}
    33 \usepackage{latexsym}                                   % \Box
    34 \usepackage{mathptmx}                                   % better math font with "times"
     33\usepackage{latexsym}                                   % \Box
     34\usepackage{mathptmx}                                   % better math font with "times"
    3535\usepackage[pagewise]{lineno}
    3636\renewcommand{\linenumberfont}{\scriptsize\sffamily}
     
    4141%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    4242
    43 % Names used in the document.
    44 
    45 \newcommand{\CS}{C\raisebox{-0.9ex}{\large$^\sharp$}\xspace}
    46 
    47 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    48 
    4943% Bespoke macros used in the document.
    5044\input{common}
    5145
    52 \setcounter{secnumdepth}{3}     % number subsubsections
    53 \setcounter{tocdepth}{3}                % subsubsections in table of contents
     46%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     47
     48% Names used in the document.
     49
     50\newcommand{\CS}{C\raisebox{-0.9ex}{\large$^\sharp$}\xspace}
     51
     52%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     53
     54\setcounter{secnumdepth}{3}                             % number subsubsections
     55\setcounter{tocdepth}{3}                                % subsubsections in table of contents
    5456\makeindex
    5557
     
    5860\begin{document}
    5961\pagestyle{headings}
    60 \linenumbers                                    % comment out to turn off line numbering
     62\linenumbers                                            % comment out to turn off line numbering
    6163
    6264\title{\Huge
     
    7274}% author
    7375\date{
    74 DRAFT\\\today
     76DRAFT \\
     77\today
    7578}% date
    7679
     
    100103
    101104\CFA\footnote{Pronounced ``C-for-all'', and written \CFA, CFA, or \CFL.} is a modern general-purpose programming-language, designed an as evolutionary step forward from the C programming language.
    102 The syntax of the \CFA language builds from that of C, and should look immediately familiar to C programmers.
     105The syntax of the \CFA language builds from C, and should look immediately familiar to C programmers.
    103106% Any language feature that is not described here can be assumed to be using the standard C11 syntax.
    104 \CFA has added many modern programming-language features, which directly leads to increased safety and productivity, while maintaining interoperability with existing C programs, and maintaining C-like performance.
     107\CFA adds many modern programming-language features, which directly leads to increased safety and productivity, while maintaining interoperability with existing C programs and maintaining C-like performance.
    105108Like C, \CFA is a statically typed, procedural language with a low-overhead runtime, meaning there is no global garbage-collection.
    106109The primary new features include parametric-polymorphism routines and types, exceptions, concurrency, and modules.
     
    113116New programs can be written in \CFA using a combination of C and \CFA features.
    114117\CC had a similar goal 30 years ago, but has struggled over the intervening time to incorporate modern programming-language features because of early design choices.
    115 \CFA has 30 years of hindsight and a much cleaner starting point than \CC.
     118\CFA has 30 years of hindsight and clean starting point.
    116119
    117120Like \CC, there may be both an old and new ways to achieve the same effect.
     
    138141\end{quote2}
    139142Both programs output the same result.
    140 While the \CFA I/O looks similar to the \CC style of output, there are several important differences, such as automatic spacing between variables as in Python (see also~\VRef{s:IOLibrary}).
     143While the \CFA I/O looks similar to the \CC output style, there are several important differences, such as automatic spacing between variables as in Python (see also~\VRef{s:IOLibrary}).
    141144
    142145This document is a reference manual for the \CFA programming language, targeted at \CFA programmers.
    143 Implementers may also refer to the \CFA Programming Language Specification for details about the language syntax and semantics.
     146Implementers may refer to the \CFA Programming Language Specification for details about the language syntax and semantics.
    144147In its current state, this document covers the intended core features of the language.
    145148Changes to the syntax and additional features are expected to be included in later revisions.
     
    153156The original \CFA project~\cite{Ditchfield92} extended the C type system with parametric polymorphism and overloading, as opposed to the \CC approach of object-oriented extensions to the C type-system.
    154157A first implementation of the core Cforall language was created~\cite{Bilson03,Esteves04}, but at the time there was little interesting in extending C, so work did not continue.
    155 As the saying goes, ``What goes around, comes around'', and there is now renewed interest in the C programming language, so the \CFA project has been restarted.
    156 
    157 
    158 \section{Motivation: Why fix C?}
     158As the saying goes, ``What goes around, comes around'', and there is now renewed interest in the C programming language because of legacy code-bases, so the \CFA project has been restarted.
     159
     160
     161\section{Why fix C?}
    159162
    160163Even with all its problems, C is a very popular programming language because it allows writing software at virtually any level in a computer system without restriction.
     
    173176Java~\cite{Java8}, Go~\cite{Go}, Rust~\cite{Rust} and D~\cite{D} are examples of the revolutionary approach for modernizing C/\CC, resulting in a new language rather than an extension of the descendent.
    174177These languages have different syntax and semantics from C, and do not interoperate directly with C, largely because of garbage collection.
    175 As a result, there is a significant learning curve to move to these languages, and C legacy-code must be complete rewritten.
     178As a result, there is a significant learning curve to move to these languages, and C legacy-code must be rewritten.
    176179These costs can be prohibitive for many companies with a large software base in C/\CC, and many programmers that require retraining to a new programming language.
    177180
     
    190193This feature allows users of \CFA to take advantage of the existing panoply of C libraries from inside their \CFA code.
    191194In fact, one of the biggest issues for any new programming language is establishing a minimum level of library code to support a large body of activities.
    192 Programming-language developers often state that adequate library support costs many times more than designing and implementing the language itself.
     195Programming-language developers often state that adequate library support takes more work than designing and implementing the language itself.
    193196Like \CC, \CFA starts with immediate access to all exiting C libraries, and in many cases, can easily wrap library routines with simpler and safer interfaces, at very low cost.
    194197
     
    197200Whereas, \CFA wraps each of these routines into one with the common name \lstinline@abs@.
    198201\begin{lstlisting}
     202char abs( char );
    199203extern "C" {
    200 #include <stdlib.h>                     // provide C prototype for integer "abs" routine
     204int abs( int );                         // use default C routine for int
    201205} // extern "C"
    202 
    203 char abs( char );
    204 long int abs( long int );       // @{\CFA}@ overload name "abs" for other types
     206long int abs( long int );
    205207long long int abs( long long int );
    206208float abs( float );
     
    219221The name ``\lstinline@abs@'' evokes the notion of absolute value, and many mathematical types provide the notion of absolute value.
    220222Hence, knowing the name \lstinline@abs@ should be sufficient to apply it to any type where it is applicable.
    221 The time savings and safety of using one name uniformly versus @N@ unique names should not be underestimated.
     223The time savings and safety of using one name uniformly versus $N$ unique names should not be underestimated.
    222224
    223225
     
    273275the type suffixes \lstinline@U@, \lstinline@L@, etc. may start with an underscore \lstinline@1_U@, \lstinline@1_ll@ or \lstinline@1.0E10_f@.
    274276\end{enumerate}
    275 It is significantly easier to read and type long constants when they are broken up into smaller groupings (most cultures use comma or period among digits for the same purpose).
     277It is significantly easier to read and enter long constants when they are broken up into smaller groupings (most cultures use comma or period among digits for the same purpose).
    276278This extension is backwards compatible, matches with the use of underscore in variable names, and appears in Ada and Java.
    277279
     
    290292\begin{lstlisting}
    291293int (*f())[ 10 ] {...};
    292 ... (*f())[ 3 ] += 1;           // definition mimics usage
     294... (*f())[  3 ] += 1;  // definition mimics usage
    293295\end{lstlisting}
    294296Essentially, the return type is wrapped around the routine name in successive layers (like an onion).
     
    299301The only exception is bit field specification, which always appear to the right of the base type.
    300302C and the new \CFA declarations may appear together in the same program block, but cannot be mixed within a specific declaration.
    301 Unsupported are K\&R C declarations where the base type defaults to \lstinline@int@, if no type is specified\footnote{
    302 At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each structure declaration and type name~\cite[\S~6.7.2(2)]{C11}},
    303 e.g.:
    304 \begin{lstlisting}
    305 x;                                      // int x
    306 *y;                                     // int *y
    307 f( p1, p2 );            // int f( int p1, int p2 );
    308 f( p1, p2 ) {}          // int f( int p1, int p2 ) {}
    309 \end{lstlisting}
    310303
    311304In \CFA declarations, the same tokens are used as in C: the character \lstinline@*@ is used to indicate a pointer, square brackets \lstinline@[@\,\lstinline@]@ are used to represent an array, and parentheses \lstinline@()@ are used to indicate a routine parameter.
     
    333326* [ 10 ] double v;
    334327struct s {
    335 int f0:3;
     328        int f0:3;
    336329        * int f1;
    337330        [ 10 ] * int f2;
     
    363356\end{quote2}
    364357
    365 As stated above, the two styles of declaration may appear together in the same block.
    366 Therefore, a programmer has the option of either continuing to use traditional C declarations or take advantage of the new style.
    367 Clearly, both styles need to be supported for some time due to existing C-style header-files, particularly for UNIX systems.
    368 In general, mixing declaration styles in a routine or even a translation unit is not recommended, as it makes a program more difficult to read.
    369 Therefore, it is suggested that an entire translation unit be written in one declaration style or the other.
    370 
    371358All type qualifiers, i.e., \lstinline@const@ and \lstinline@volatile@, are used in the normal way with the new declarations but appear left to right, e.g.:
    372359\begin{quote2}
     
    411398\end{quote2}
    412399
     400Unsupported are K\&R C declarations where the base type defaults to \lstinline@int@, if no type is specified\footnote{
     401At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each structure declaration and type name~\cite[\S~6.7.2(2)]{C11}},
     402e.g.:
     403\begin{lstlisting}
     404x;                                              // int x
     405*y;                                             // int *y
     406f( p1, p2 );                    // int f( int p1, int p2 );
     407f( p1, p2 ) {}                  // int f( int p1, int p2 ) {}
     408\end{lstlisting}
     409
     410As stated above, the two styles of declaration may appear together in the same block.
     411Therefore, a programmer has the option of either continuing to use traditional C declarations or take advantage of the new style.
     412Clearly, both styles need to be supported for some time due to existing C-style header-files, particularly for UNIX systems.
     413
    413414
    414415\section{Type Operators}
     
    448449Declaration qualifiers can only appear at the start of a routine definition, e.g.:
    449450\begin{lstlisting}
    450 extern [ int x ] g( int y ) {}
     451extern [ int x ] g( int y ) {@\,@}
    451452\end{lstlisting}
    452453Lastly, if there are no output parameters or input parameters, the brackets and/or parentheses must still be specified;
    453454in both cases the type is assumed to be void as opposed to old style C defaults of int return type and unknown parameter types, respectively, as in:
    454455\begin{lstlisting}
    455 [ ] g();                                        // no input or output parameters
     456[@\,@] g(@\,@);                         // no input or output parameters
    456457[ void ] g( void );                     // no input or output parameters
    457458\end{lstlisting}
     
    568569\section{Named and Default Arguments}
    569570
    570 Named and default arguments~\cite{Hardgrave76}.\footnote{
     571Named and default arguments~\cite{Hardgrave76}\footnote{
    571572Francez~\cite{Francez77} proposed a further extension to the named-parameter passing style, which specifies what type of communication (by value, by reference, by name) the argument is passed to the routine.}
    572573are two mechanisms to simplify routine call.
     
    836837
    837838Currently, there are no \Index{lambda} expressions, i.e., unnamed routines because routine names are very important to properly select the correct routine.
    838 
    839 
    840 \section{Incompatible}
    841 
    842 The following incompatibles exist between C and \CFA, and are similar to Annex C for \CC~\cite{ANSI14:C++}.
    843 
    844 \begin{enumerate}
    845 \item
    846 Change type of character literal \lstinline@int@ to \lstinline@char@.
    847 This change allows overloading differentiation argument type matching, e.g.:
    848 \begin{lstlisting}
    849 int function( int i );
    850 int function( char c );
    851 function( 'x' );
    852 \end{lstlisting}
    853 It is preferable that this call match the second version of function rather than the first. \\
    854 Effect on original feature: Change to semantics of well-defined feature. ISO C programs which depend on
    855 \begin{lstlisting}
    856 sizeof('x') == sizeof(int)
    857 \end{lstlisting}
    858 will not work the same as C++ programs. \\
    859 Difficulty of converting: Simple. \\
    860 How widely used: Programs which depend upon sizeof('x') are probably rare.
    861 
    862 \item
    863 Change: String literals made \lstinline@const@ \\
    864 The type of a string literal is changed from \lstinline@array of char@ to \lstinline@array of const char@.
    865 The type of a wide string literal is changed from \lstinline@array of wchar_t@ to \lstinline@array of const wchar_t@. \\
    866 Rationale: This avoids calling an inappropriate overloaded function, which might expect to be able to modify its argument.
    867 Effect on original feature: Change to semantics of well-defined feature. \\
    868 Difficulty of converting: Simple syntactic transformation, because string literals can be converted to \lstinline@char*;@ (4.2).
    869 The most common cases are handled by a new but deprecated standard conversion:
    870 \begin{lstlisting}
    871 char* p = "abc"; // valid in C, deprecated in C++
    872 char* q = expr ? "abc" : "de"; // valid in C, invalid in C++
    873 \end{lstlisting}
    874 How widely used: Programs that have a legitimate reason to treat string literals as pointers to potentially modifiable memory are probably rare.
    875 
    876 \item
    877 Change: C++ does not have \emph{tentative definitions} as in C.
    878 E.g., at file scope,
    879 \begin{lstlisting}
    880 int i;
    881 int i;
    882 \end{lstlisting}
    883 is valid in C, invalid in C++.
    884 This makes it impossible to define mutually referential file-local static
    885 objects, if initializers are restricted to the syntactic forms of C. For example,
    886 \begin{lstlisting}
    887 struct X { int i; struct X *next; };
    888 static struct X a;
    889 static struct X b = { 0, &a };
    890 static struct X a = { 1, &b };
    891 \end{lstlisting}
    892 Rationale: This avoids having different initialization rules for builtin types and userdefined types.
    893 Effect on original feature: Deletion of semantically welldefined feature. \\
    894 Difficulty of converting: Semantic transformation.
    895 In C++, the initializer for one of a set of mutuallyreferential filelocal static objects must invoke a function call to achieve the initialization.
    896 How widely used: Seldom.
    897 
    898 \item
    899 Change: A struct is a scope in C++, not in C \\
    900 Rationale: Class scope is crucial to C++, and a struct is a class. \\
    901 Effect on original feature: Change to semantics of well-defined feature. \\
    902 Difficulty of converting: Semantic transformation. \\
    903 How widely used: C programs use struct extremely frequently, but the change is only noticeable when struct, enumeration, or enumerator names are referred to outside the struct.
    904 The latter is probably rare.
    905 
    906 \CFA is C \emph{incompatible} on this issue, and provides semantics similar to \CC.
    907 Nested types are not hoisted and can be referenced using the field selection operator ``\lstinline@.@'', unlike the \CC scope-resolution operator ``\lstinline@::@''.
    908 Given that nested types in C are equivalent to not using them, i.e., they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility.
    909 
    910 
    911 \item
    912 Change: In C++, the name of a nested class is local to its enclosing class.
    913 In C the name of the nested class belongs to the same scope as the name of the outermost enclosing class
    914 Example:
    915 \begin{lstlisting}
    916 struct X {
    917 struct Y { /* ... */ } y;
    918 };
    919 struct Y yy; // valid C, invalid C++
    920 \end{lstlisting}
    921 Rationale: C++ classes have member functions which require that classes establish scopes. The C rule
    922 would leave classes as an incomplete scope mechanism which would prevent C++ programmers from maintaining
    923 locality within a class. A coherent set of scope rules for C++ based on the C rule would be very
    924 complicated and C++ programmers would be unable to predict reliably the meanings of nontrivial examples
    925 involving nested or local functions.
    926 Effect on original feature: Change of semantics of welldefined
    927 feature.
    928 Difficulty of converting: Semantic transformation. To make the struct type name visible in the scope of
    929 the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing
    930 struct is defined. Example:
    931 \begin{lstlisting}
    932 struct Y; // struct Y and struct X are at the same scope
    933 struct X {
    934 struct Y { /* ... */ } y;
    935 };
    936 \end{lstlisting}
    937 All the definitions of C struct types enclosed in other struct definitions and accessed outside the scope of
    938 the enclosing struct could be exported to the scope of the enclosing struct. Note: this is a consequence of
    939 the difference in scope rules, which is documented in 3.3.
    940 How widely used: Seldom.
    941 \end{enumerate}
    942839
    943840
     
    40613958
    40623959
     3960\section{Incompatible}
     3961
     3962The following incompatibles exist between C and \CFA, and are similar to Annex C for \CC~\cite{ANSI14:C++}.
     3963
     3964\begin{enumerate}
     3965\item
     3966Change type of character literal \lstinline@int@ to \lstinline@char@.
     3967This change allows overloading differentiation argument type matching, e.g.:
     3968\begin{lstlisting}
     3969int function( int i );
     3970int function( char c );
     3971function( 'x' );
     3972\end{lstlisting}
     3973It is preferable that this call match the second version of function rather than the first. \\
     3974Effect on original feature: Change to semantics of well-defined feature. ISO C programs which depend on
     3975\begin{lstlisting}
     3976sizeof('x') == sizeof(int)
     3977\end{lstlisting}
     3978will not work the same as C++ programs. \\
     3979Difficulty of converting: Simple. \\
     3980How widely used: Programs which depend upon sizeof('x') are probably rare.
     3981
     3982\item
     3983Change: String literals made \lstinline@const@ \\
     3984The type of a string literal is changed from \lstinline@array of char@ to \lstinline@array of const char@.
     3985The type of a wide string literal is changed from \lstinline@array of wchar_t@ to \lstinline@array of const wchar_t@. \\
     3986Rationale: This avoids calling an inappropriate overloaded function, which might expect to be able to modify its argument.
     3987Effect on original feature: Change to semantics of well-defined feature. \\
     3988Difficulty of converting: Simple syntactic transformation, because string literals can be converted to \lstinline@char*;@ (4.2).
     3989The most common cases are handled by a new but deprecated standard conversion:
     3990\begin{lstlisting}
     3991char* p = "abc"; // valid in C, deprecated in C++
     3992char* q = expr ? "abc" : "de"; // valid in C, invalid in C++
     3993\end{lstlisting}
     3994How widely used: Programs that have a legitimate reason to treat string literals as pointers to potentially modifiable memory are probably rare.
     3995
     3996\item
     3997Change: C++ does not have \emph{tentative definitions} as in C.
     3998E.g., at file scope,
     3999\begin{lstlisting}
     4000int i;
     4001int i;
     4002\end{lstlisting}
     4003is valid in C, invalid in C++.
     4004This makes it impossible to define mutually referential file-local static
     4005objects, if initializers are restricted to the syntactic forms of C. For example,
     4006\begin{lstlisting}
     4007struct X { int i; struct X *next; };
     4008static struct X a;
     4009static struct X b = { 0, &a };
     4010static struct X a = { 1, &b };
     4011\end{lstlisting}
     4012Rationale: This avoids having different initialization rules for builtin types and userdefined types.
     4013Effect on original feature: Deletion of semantically welldefined feature. \\
     4014Difficulty of converting: Semantic transformation.
     4015In C++, the initializer for one of a set of mutuallyreferential filelocal static objects must invoke a function call to achieve the initialization.
     4016How widely used: Seldom.
     4017
     4018\item
     4019Change: A struct is a scope in C++, not in C \\
     4020Rationale: Class scope is crucial to C++, and a struct is a class. \\
     4021Effect on original feature: Change to semantics of well-defined feature. \\
     4022Difficulty of converting: Semantic transformation. \\
     4023How widely used: C programs use struct extremely frequently, but the change is only noticeable when struct, enumeration, or enumerator names are referred to outside the struct.
     4024The latter is probably rare.
     4025
     4026\CFA is C \emph{incompatible} on this issue, and provides semantics similar to \CC.
     4027Nested types are not hoisted and can be referenced using the field selection operator ``\lstinline@.@'', unlike the \CC scope-resolution operator ``\lstinline@::@''.
     4028Given that nested types in C are equivalent to not using them, i.e., they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility.
     4029
     4030
     4031\item
     4032Change: In C++, the name of a nested class is local to its enclosing class.
     4033In C the name of the nested class belongs to the same scope as the name of the outermost enclosing class
     4034Example:
     4035\begin{lstlisting}
     4036struct X {
     4037struct Y { /* ... */ } y;
     4038};
     4039struct Y yy; // valid C, invalid C++
     4040\end{lstlisting}
     4041Rationale: C++ classes have member functions which require that classes establish scopes. The C rule
     4042would leave classes as an incomplete scope mechanism which would prevent C++ programmers from maintaining
     4043locality within a class. A coherent set of scope rules for C++ based on the C rule would be very
     4044complicated and C++ programmers would be unable to predict reliably the meanings of nontrivial examples
     4045involving nested or local functions.
     4046Effect on original feature: Change of semantics of welldefined
     4047feature.
     4048Difficulty of converting: Semantic transformation. To make the struct type name visible in the scope of
     4049the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing
     4050struct is defined. Example:
     4051\begin{lstlisting}
     4052struct Y; // struct Y and struct X are at the same scope
     4053struct X {
     4054struct Y { /* ... */ } y;
     4055};
     4056\end{lstlisting}
     4057All the definitions of C struct types enclosed in other struct definitions and accessed outside the scope of
     4058the enclosing struct could be exported to the scope of the enclosing struct. Note: this is a consequence of
     4059the difference in scope rules, which is documented in 3.3.
     4060How widely used: Seldom.
     4061\end{enumerate}
     4062
     4063
    40634064\section{I/O Library}
    40644065\label{s:IOLibrary}
  • src/GenPoly/Box.cc

    r37218fc r37f0da8  
    205205                        ObjectDecl *makeTemporary( Type *type );
    206206
    207                         std::map< std::string, DeclarationWithType *> assignOps;     ///< Currently known type variable assignment operators
     207                        ScopedMap< std::string, DeclarationWithType *> assignOps;    ///< Currently known type variable assignment operators
    208208                        ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps;  ///< Currently known assignment operators
    209209                        ScopedMap< std::string, DeclarationWithType* > adapters;     ///< Set of adapter functions in the current scope
     
    292292                        /// adds type parameters to the layout call; will generate the appropriate parameters if needed
    293293                        void addOtypeParamsToLayoutCall( UntypedExpr *layoutCall, const std::list< Type* > &otypeParams );
     294
     295                        /// Enters a new scope for type-variables, adding the type variables from ty
     296                        void beginTypeScope( Type *ty );
     297                        /// Exits the type-variable scope
     298                        void endTypeScope();
    294299                       
    295300                        ScopedSet< std::string > knownLayouts;          ///< Set of generic type layouts known in the current scope, indexed by sizeofName
     
    385390                for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) {
    386391                        TypeInstType paramType( Type::Qualifiers(), (*param)->get_name(), *param );
    387                         layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( &paramType ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
    388                         layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( &paramType ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
     392                        std::string paramName = mangleType( &paramType );
     393                        layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( paramName ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
     394                        layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( paramName ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
    389395                }
    390396        }
    391397
    392398        /// Builds a layout function declaration
    393         FunctionDecl *buildLayoutFunctionDecl( const std::string &typeName, unsigned int functionNesting, FunctionType *layoutFnType ) {
     399        FunctionDecl *buildLayoutFunctionDecl( AggregateDecl *typeDecl, unsigned int functionNesting, FunctionType *layoutFnType ) {
    394400                // Routines at global scope marked "static" to prevent multiple definitions is separate translation units
    395401                // because each unit generates copies of the default routines for each aggregate.
    396402                FunctionDecl *layoutDecl = new FunctionDecl(
    397                         "__layoutof_" + typeName, functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false );
     403                        layoutofName( typeDecl ), functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false );
    398404                layoutDecl->fixUniqueId();
    399405                return layoutDecl;
     
    462468                PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType );
    463469               
    464                 ObjectDecl *sizeParam = new ObjectDecl( "__sizeof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
     470                ObjectDecl *sizeParam = new ObjectDecl( sizeofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
    465471                layoutFnType->get_parameters().push_back( sizeParam );
    466                 ObjectDecl *alignParam = new ObjectDecl( "__alignof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
     472                ObjectDecl *alignParam = new ObjectDecl( alignofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
    467473                layoutFnType->get_parameters().push_back( alignParam );
    468                 ObjectDecl *offsetParam = new ObjectDecl( "__offsetof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
     474                ObjectDecl *offsetParam = new ObjectDecl( offsetofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
    469475                layoutFnType->get_parameters().push_back( offsetParam );
    470476                addOtypeParams( layoutFnType, otypeParams );
    471477
    472478                // build function decl
    473                 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl->get_name(), functionNesting, layoutFnType );
     479                FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl, functionNesting, layoutFnType );
    474480
    475481                // calculate struct layout in function body
     
    523529                PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType );
    524530               
    525                 ObjectDecl *sizeParam = new ObjectDecl( "__sizeof_" + unionDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
     531                ObjectDecl *sizeParam = new ObjectDecl( sizeofName( unionDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
    526532                layoutFnType->get_parameters().push_back( sizeParam );
    527                 ObjectDecl *alignParam = new ObjectDecl( "__alignof_" + unionDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
     533                ObjectDecl *alignParam = new ObjectDecl( alignofName( unionDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
    528534                layoutFnType->get_parameters().push_back( alignParam );
    529535                addOtypeParams( layoutFnType, otypeParams );
    530536
    531537                // build function decl
    532                 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl->get_name(), functionNesting, layoutFnType );
     538                FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl, functionNesting, layoutFnType );
    533539
    534540                // calculate union layout in function body
     
    663669                        if ( functionDecl->get_statements() ) {         // empty routine body ?
    664670                                doBeginScope();
    665                                 TyVarMap oldtyVars = scopeTyVars;
    666                                 std::map< std::string, DeclarationWithType *> oldassignOps = assignOps;
     671                                scopeTyVars.beginScope();
     672                                assignOps.beginScope();
    667673                                DeclarationWithType *oldRetval = retval;
    668674                                bool oldUseRetval = useRetval;
     
    705711                                functionDecl->set_statements( functionDecl->get_statements()->acceptMutator( *this ) );
    706712
    707                                 scopeTyVars = oldtyVars;
    708                                 assignOps = oldassignOps;
    709                                 // std::cerr << "end FunctionDecl: ";
    710                                 // for ( TyVarMap::iterator i = scopeTyVars.begin(); i != scopeTyVars.end(); ++i ) {
    711                                 //      std::cerr << i->first << " ";
    712                                 // }
    713                                 // std::cerr << "\n";
     713                                scopeTyVars.endScope();
     714                                assignOps.endScope();
    714715                                retval = oldRetval;
    715716                                useRetval = oldUseRetval;
     
    745746
    746747                void Pass1::passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes ) {
    747                         Type *polyBase = hasPolyBase( parmType, exprTyVars );
    748                         if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) {
    749                                 std::string sizeName = sizeofName( polyBase );
    750                                 if ( seenTypes.count( sizeName ) ) return;
     748                        Type *polyType = isPolyType( parmType, exprTyVars );
     749                        if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
     750                                std::string typeName = mangleType( polyType );
     751                                if ( seenTypes.count( typeName ) ) return;
    751752
    752753                                arg = appExpr->get_args().insert( arg, new SizeofExpr( argBaseType->clone() ) );
     
    754755                                arg = appExpr->get_args().insert( arg, new AlignofExpr( argBaseType->clone() ) );
    755756                                arg++;
    756                                 if ( dynamic_cast< StructInstType* >( polyBase ) ) {
     757                                if ( dynamic_cast< StructInstType* >( polyType ) ) {
    757758                                        if ( StructInstType *argBaseStructType = dynamic_cast< StructInstType* >( argBaseType ) ) {
    758759                                                // zero-length arrays are forbidden by C, so don't pass offset for empty struct
     
    766767                                }
    767768
    768                                 seenTypes.insert( sizeName );
     769                                seenTypes.insert( typeName );
    769770                        }
    770771                }
     
    11241125                                addAssign->get_args().push_back( appExpr->get_args().front() );
    11251126                        } // if
    1126                         addAssign->get_args().push_back( new NameExpr( sizeofName( polyType ) ) );
     1127                        addAssign->get_args().push_back( new NameExpr( sizeofName( mangleType( polyType ) ) ) );
    11271128                        addAssign->get_results().front() = appExpr->get_results().front()->clone();
    11281129                        if ( appExpr->get_env() ) {
     
    11511152                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    11521153                                                        multiply->get_args().push_back( appExpr->get_args().back() );
    1153                                                         multiply->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) );
     1154                                                        multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) );
    11541155                                                        ret->get_args().push_back( appExpr->get_args().front() );
    11551156                                                        ret->get_args().push_back( multiply );
     
    11571158                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    11581159                                                        multiply->get_args().push_back( appExpr->get_args().front() );
    1159                                                         multiply->get_args().push_back( new NameExpr( sizeofName( baseType2 ) ) );
     1160                                                        multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) );
    11601161                                                        ret->get_args().push_back( multiply );
    11611162                                                        ret->get_args().push_back( appExpr->get_args().back() );
     
    12201221                                                        UntypedExpr *divide = new UntypedExpr( new NameExpr( "?/?" ) );
    12211222                                                        divide->get_args().push_back( appExpr );
    1222                                                         divide->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) );
     1223                                                        divide->get_args().push_back( new SizeofExpr( baseType1->clone() ) );
    12231224                                                        divide->get_results().push_front( appExpr->get_results().front()->clone() );
    12241225                                                        if ( appExpr->get_env() ) {
     
    12301231                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    12311232                                                        multiply->get_args().push_back( appExpr->get_args().back() );
    1232                                                         multiply->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) );
     1233                                                        multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) );
    12331234                                                        appExpr->get_args().back() = multiply;
    12341235                                                } else if ( baseType2 ) {
    12351236                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    12361237                                                        multiply->get_args().push_back( appExpr->get_args().front() );
    1237                                                         multiply->get_args().push_back( new NameExpr( sizeofName( baseType2 ) ) );
     1238                                                        multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) );
    12381239                                                        appExpr->get_args().front() = multiply;
    12391240                                                } // if
     
    12451246                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    12461247                                                        multiply->get_args().push_back( appExpr->get_args().back() );
    1247                                                         multiply->get_args().push_back( new NameExpr( sizeofName( baseType ) ) );
     1248                                                        multiply->get_args().push_back( new SizeofExpr( baseType->clone() ) );
    12481249                                                        appExpr->get_args().back() = multiply;
    12491250                                                } // if
     
    12821283                        std::list< Expression *>::iterator paramBegin = appExpr->get_args().begin();
    12831284
    1284                         TyVarMap exprTyVars;
     1285                        TyVarMap exprTyVars( (TypeDecl::Kind)-1 );
    12851286                        makeTyVarMap( function, exprTyVars );
    12861287                        ReferenceToType *polyRetType = isPolyRet( function );
     
    13051306
    13061307                        boxParams( appExpr, function, arg, exprTyVars );
    1307 
    13081308                        passAdapters( appExpr, function, exprTyVars );
    13091309
     
    13851385                                if ( TypeInstType *typeInst = dynamic_cast< TypeInstType *>( retval->get_type() ) ) {
    13861386                                        // find assignment operator for type variable
    1387                                         std::map< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() );
     1387                                        ScopedMap< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() );
    13881388                                        if ( assignIter == assignOps.end() ) {
    13891389                                                throw SemanticError( "Attempt to return dtype or ftype object in ", returnStmt->get_expr() );
     
    14191419                                                DeclarationWithType *assertAssign = 0;
    14201420                                                if ( TypeInstType *formalTypeInstType = dynamic_cast< TypeInstType* >( formalType ) ) {
    1421                                                         std::map< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() );
     1421                                                        ScopedMap< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() );
    14221422                                                        if ( assertAssignIt == assignOps.end() ) {
    14231423                                                                throw SemanticError( "No assignment operation found for ", formalTypeInstType );
     
    14601460
    14611461                Type * Pass1::mutate( PointerType *pointerType ) {
    1462                         TyVarMap oldtyVars = scopeTyVars;
     1462                        scopeTyVars.beginScope();
    14631463                        makeTyVarMap( pointerType, scopeTyVars );
    14641464
    14651465                        Type *ret = Mutator::mutate( pointerType );
    14661466
    1467                         scopeTyVars = oldtyVars;
     1467                        scopeTyVars.endScope();
    14681468                        return ret;
    14691469                }
    14701470
    14711471                Type * Pass1::mutate( FunctionType *functionType ) {
    1472                         TyVarMap oldtyVars = scopeTyVars;
     1472                        scopeTyVars.beginScope();
    14731473                        makeTyVarMap( functionType, scopeTyVars );
    14741474
    14751475                        Type *ret = Mutator::mutate( functionType );
    14761476
    1477                         scopeTyVars = oldtyVars;
     1477                        scopeTyVars.endScope();
    14781478                        return ret;
    14791479                }
     
    15401540
    15411541                Type * Pass2::mutate( PointerType *pointerType ) {
    1542                         TyVarMap oldtyVars = scopeTyVars;
     1542                        scopeTyVars.beginScope();
    15431543                        makeTyVarMap( pointerType, scopeTyVars );
    15441544
    15451545                        Type *ret = Mutator::mutate( pointerType );
    15461546
    1547                         scopeTyVars = oldtyVars;
     1547                        scopeTyVars.endScope();
    15481548                        return ret;
    15491549                }
    15501550
    15511551                Type *Pass2::mutate( FunctionType *funcType ) {
    1552                         TyVarMap oldtyVars = scopeTyVars;
     1552                        scopeTyVars.beginScope();
    15531553                        makeTyVarMap( funcType, scopeTyVars );
    15541554
     
    15721572                                if ( (*tyParm)->get_kind() == TypeDecl::Any ) {
    15731573                                        TypeInstType parmType( Type::Qualifiers(), (*tyParm)->get_name(), *tyParm );
     1574                                        std::string parmName = mangleType( &parmType );
    15741575
    15751576                                        sizeParm = newObj.clone();
    1576                                         sizeParm->set_name( sizeofName( &parmType ) );
     1577                                        sizeParm->set_name( sizeofName( parmName ) );
    15771578                                        last = funcType->get_parameters().insert( last, sizeParm );
    15781579                                        ++last;
    15791580
    15801581                                        alignParm = newObj.clone();
    1581                                         alignParm->set_name( alignofName( &parmType ) );
     1582                                        alignParm->set_name( alignofName( parmName ) );
    15821583                                        last = funcType->get_parameters().insert( last, alignParm );
    15831584                                        ++last;
     
    15941595                        std::set< std::string > seenTypes; // sizeofName for generic types we've seen
    15951596                        for ( std::list< DeclarationWithType* >::const_iterator fnParm = last; fnParm != funcType->get_parameters().end(); ++fnParm ) {
    1596                                 Type *polyBase = hasPolyBase( (*fnParm)->get_type(), scopeTyVars );
    1597                                 if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) {
    1598                                         std::string sizeName = sizeofName( polyBase );
    1599                                         if ( seenTypes.count( sizeName ) ) continue;
     1597                                Type *polyType = isPolyType( (*fnParm)->get_type(), scopeTyVars );
     1598                                if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
     1599                                        std::string typeName = mangleType( polyType );
     1600                                        if ( seenTypes.count( typeName ) ) continue;
    16001601
    16011602                                        ObjectDecl *sizeParm, *alignParm, *offsetParm;
    16021603                                        sizeParm = newObj.clone();
    1603                                         sizeParm->set_name( sizeName );
     1604                                        sizeParm->set_name( sizeofName( typeName ) );
    16041605                                        last = funcType->get_parameters().insert( last, sizeParm );
    16051606                                        ++last;
    16061607
    16071608                                        alignParm = newObj.clone();
    1608                                         alignParm->set_name( alignofName( polyBase ) );
     1609                                        alignParm->set_name( alignofName( typeName ) );
    16091610                                        last = funcType->get_parameters().insert( last, alignParm );
    16101611                                        ++last;
    16111612
    1612                                         if ( StructInstType *polyBaseStruct = dynamic_cast< StructInstType* >( polyBase ) ) {
     1613                                        if ( StructInstType *polyBaseStruct = dynamic_cast< StructInstType* >( polyType ) ) {
    16131614                                                // NOTE zero-length arrays are illegal in C, so empty structs have no offset array
    16141615                                                if ( ! polyBaseStruct->get_baseStruct()->get_members().empty() ) {
    16151616                                                        offsetParm = newPtr.clone();
    1616                                                         offsetParm->set_name( offsetofName( polyBase ) );
     1617                                                        offsetParm->set_name( offsetofName( typeName ) );
    16171618                                                        last = funcType->get_parameters().insert( last, offsetParm );
    16181619                                                        ++last;
     
    16201621                                        }
    16211622
    1622                                         seenTypes.insert( sizeName );
     1623                                        seenTypes.insert( typeName );
    16231624                                }
    16241625                        }
     
    16301631                        mutateAll( funcType->get_parameters(), *this );
    16311632
    1632                         scopeTyVars = oldtyVars;
     1633                        scopeTyVars.endScope();
    16331634                        return funcType;
    16341635                }
     
    18231824                }
    18241825
    1825 ////////////////////////////////////////// MemberExprFixer ////////////////////////////////////////////////////
     1826////////////////////////////////////////// PolyGenericCalculator ////////////////////////////////////////////////////
     1827
     1828                void PolyGenericCalculator::beginTypeScope( Type *ty ) {
     1829                        scopeTyVars.beginScope();
     1830                        makeTyVarMap( ty, scopeTyVars );
     1831                }
     1832
     1833                void PolyGenericCalculator::endTypeScope() {
     1834                        scopeTyVars.endScope();
     1835                }
    18261836
    18271837                template< typename DeclClass >
    18281838                DeclClass * PolyGenericCalculator::handleDecl( DeclClass *decl, Type *type ) {
    1829                         TyVarMap oldtyVars = scopeTyVars;
    1830                         makeTyVarMap( type, scopeTyVars );
     1839                        beginTypeScope( type );
     1840                        knownLayouts.beginScope();
     1841                        knownOffsets.beginScope();
    18311842
    18321843                        DeclClass *ret = static_cast< DeclClass *>( Mutator::mutate( decl ) );
    18331844
    1834                         scopeTyVars = oldtyVars;
     1845                        knownOffsets.endScope();
     1846                        knownLayouts.endScope();
     1847                        endTypeScope();
    18351848                        return ret;
    18361849                }
     
    18541867
    18551868                Type * PolyGenericCalculator::mutate( PointerType *pointerType ) {
    1856                         TyVarMap oldtyVars = scopeTyVars;
    1857                         makeTyVarMap( pointerType, scopeTyVars );
     1869                        beginTypeScope( pointerType );
    18581870
    18591871                        Type *ret = Mutator::mutate( pointerType );
    18601872
    1861                         scopeTyVars = oldtyVars;
     1873                        endTypeScope();
    18621874                        return ret;
    18631875                }
    18641876
    18651877                Type * PolyGenericCalculator::mutate( FunctionType *funcType ) {
    1866                         TyVarMap oldtyVars = scopeTyVars;
    1867                         makeTyVarMap( funcType, scopeTyVars );
     1878                        beginTypeScope( funcType );
    18681879
    18691880                        // make sure that any type information passed into the function is accounted for
    18701881                        for ( std::list< DeclarationWithType* >::const_iterator fnParm = funcType->get_parameters().begin(); fnParm != funcType->get_parameters().end(); ++fnParm ) {
    18711882                                // condition here duplicates that in Pass2::mutate( FunctionType* )
    1872                                 Type *polyBase = hasPolyBase( (*fnParm)->get_type(), scopeTyVars );
    1873                                 if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) {
    1874                                         knownLayouts.insert( sizeofName( polyBase ) );
     1883                                Type *polyType = isPolyType( (*fnParm)->get_type(), scopeTyVars );
     1884                                if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
     1885                                        knownLayouts.insert( mangleType( polyType ) );
    18751886                                }
    18761887                        }
     
    18781889                        Type *ret = Mutator::mutate( funcType );
    18791890
    1880                         scopeTyVars = oldtyVars;
     1891                        endTypeScope();
    18811892                        return ret;
    18821893                }
     
    18891900                                        Type *declType = objectDecl->get_type();
    18901901                                        UntypedExpr *alloc = new UntypedExpr( new NameExpr( "__builtin_alloca" ) );
    1891                                         alloc->get_args().push_back( new NameExpr( sizeofName( declType ) ) );
     1902                                        alloc->get_args().push_back( new NameExpr( sizeofName( mangleType( declType ) ) ) );
    18921903
    18931904                                        delete objectDecl->get_init();
     
    19211932                        ConstantExpr *fieldIndex = new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), offset_namer.str() ) );
    19221933                        UntypedExpr *fieldOffset = new UntypedExpr( new NameExpr( "?[?]" ) );
    1923                         fieldOffset->get_args().push_back( new NameExpr( offsetofName( objectType ) ) );
     1934                        fieldOffset->get_args().push_back( new NameExpr( offsetofName( mangleType( objectType ) ) ) );
    19241935                        fieldOffset->get_args().push_back( fieldIndex );
    19251936                        return fieldOffset;
     
    19952006                                if ( findGeneric( *param ) ) {
    19962007                                        // push size/align vars for a generic parameter back
    1997                                         layoutCall->get_args().push_back( new NameExpr( sizeofName( *param ) ) );
    1998                                         layoutCall->get_args().push_back( new NameExpr( alignofName( *param ) ) );
     2008                                        std::string paramName = mangleType( *param );
     2009                                        layoutCall->get_args().push_back( new NameExpr( sizeofName( paramName ) ) );
     2010                                        layoutCall->get_args().push_back( new NameExpr( alignofName( paramName ) ) );
    19992011                                } else {
    20002012                                        layoutCall->get_args().push_back( new SizeofExpr( (*param)->clone() ) );
     
    20402052                        } else if ( StructInstType *structTy = dynamic_cast< StructInstType* >( ty ) ) {
    20412053                                // check if this type already has a layout generated for it
    2042                                 std::string sizeName = sizeofName( ty );
    2043                                 if ( knownLayouts.find( sizeName ) != knownLayouts.end() ) return true;
     2054                                std::string typeName = mangleType( ty );
     2055                                if ( knownLayouts.find( typeName ) != knownLayouts.end() ) return true;
    20442056
    20452057                                // check if any of the type parameters have dynamic layout; if none do, this type is (or will be) monomorphized
     
    20482060
    20492061                                // insert local variables for layout and generate call to layout function
    2050                                 knownLayouts.insert( sizeName );  // done early so as not to interfere with the later addition of parameters to the layout call
     2062                                knownLayouts.insert( typeName );  // done early so as not to interfere with the later addition of parameters to the layout call
    20512063                                Type *layoutType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    20522064
     
    20542066                                if ( n_members == 0 ) {
    20552067                                        // all empty structs have the same layout - size 1, align 1
    2056                                         makeVar( sizeName, layoutType, new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) );
    2057                                         makeVar( alignofName( ty ), layoutType->clone(), new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) );
     2068                                        makeVar( sizeofName( typeName ), layoutType, new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) );
     2069                                        makeVar( alignofName( typeName ), layoutType->clone(), new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) );
    20582070                                        // NOTE zero-length arrays are forbidden in C, so empty structs have no offsetof array
    20592071                                } else {
    2060                                         ObjectDecl *sizeVar = makeVar( sizeName, layoutType );
    2061                                         ObjectDecl *alignVar = makeVar( alignofName( ty ), layoutType->clone() );
    2062                                         ObjectDecl *offsetVar = makeVar( offsetofName( ty ), new ArrayType( Type::Qualifiers(), layoutType->clone(), new ConstantExpr( Constant::from( n_members ) ), false, false ) );
     2072                                        ObjectDecl *sizeVar = makeVar( sizeofName( typeName ), layoutType );
     2073                                        ObjectDecl *alignVar = makeVar( alignofName( typeName ), layoutType->clone() );
     2074                                        ObjectDecl *offsetVar = makeVar( offsetofName( typeName ), new ArrayType( Type::Qualifiers(), layoutType->clone(), new ConstantExpr( Constant::from( n_members ) ), false, false ) );
    20632075
    20642076                                        // generate call to layout function
    2065                                         UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( "__layoutof_" + structTy->get_baseStruct()->get_name() ) );
     2077                                        UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( layoutofName( structTy->get_baseStruct() ) ) );
    20662078                                        layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( sizeVar ) ) );
    20672079                                        layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( alignVar ) ) );
     
    20752087                        } else if ( UnionInstType *unionTy = dynamic_cast< UnionInstType* >( ty ) ) {
    20762088                                // check if this type already has a layout generated for it
    2077                                 std::string sizeName = sizeofName( ty );
    2078                                 if ( knownLayouts.find( sizeName ) != knownLayouts.end() ) return true;
     2089                                std::string typeName = mangleType( ty );
     2090                                if ( knownLayouts.find( typeName ) != knownLayouts.end() ) return true;
    20792091
    20802092                                // check if any of the type parameters have dynamic layout; if none do, this type is (or will be) monomorphized
     
    20832095
    20842096                                // insert local variables for layout and generate call to layout function
    2085                                 knownLayouts.insert( sizeName );  // done early so as not to interfere with the later addition of parameters to the layout call
     2097                                knownLayouts.insert( typeName );  // done early so as not to interfere with the later addition of parameters to the layout call
    20862098                                Type *layoutType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    20872099
    2088                                 ObjectDecl *sizeVar = makeVar( sizeName, layoutType );
    2089                                 ObjectDecl *alignVar = makeVar( alignofName( ty ), layoutType->clone() );
     2100                                ObjectDecl *sizeVar = makeVar( sizeofName( typeName ), layoutType );
     2101                                ObjectDecl *alignVar = makeVar( alignofName( typeName ), layoutType->clone() );
    20902102
    20912103                                // generate call to layout function
    2092                                 UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( "__layoutof_" + unionTy->get_baseUnion()->get_name() ) );
     2104                                UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( layoutofName( unionTy->get_baseUnion() ) ) );
    20932105                                layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( sizeVar ) ) );
    20942106                                layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( alignVar ) ) );
     
    21062118                        Type *ty = sizeofExpr->get_type();
    21072119                        if ( findGeneric( ty ) ) {
    2108                                 Expression *ret = new NameExpr( sizeofName( ty ) );
     2120                                Expression *ret = new NameExpr( sizeofName( mangleType( ty ) ) );
    21092121                                delete sizeofExpr;
    21102122                                return ret;
     
    21162128                        Type *ty = alignofExpr->get_type();
    21172129                        if ( findGeneric( ty ) ) {
    2118                                 Expression *ret = new NameExpr( alignofName( ty ) );
     2130                                Expression *ret = new NameExpr( alignofName( mangleType( ty ) ) );
    21192131                                delete alignofExpr;
    21202132                                return ret;
     
    21542166                        if ( findGeneric( ty ) ) {
    21552167                                // pull offset back from generated type information
    2156                                 ret = new NameExpr( offsetofName( ty ) );
     2168                                ret = new NameExpr( offsetofName( mangleType( ty ) ) );
    21572169                        } else {
    2158                                 std::string offsetName = offsetofName( ty );
     2170                                std::string offsetName = offsetofName( mangleType( ty ) );
    21592171                                if ( knownOffsets.find( offsetName ) != knownOffsets.end() ) {
    21602172                                        // use the already-generated offsets for this type
     
    21962208                void PolyGenericCalculator::doEndScope() {
    21972209                        knownLayouts.endScope();
    2198                         knownOffsets.beginScope();
     2210                        knownOffsets.endScope();
    21992211                }
    22002212
     
    22032215                template< typename DeclClass >
    22042216                DeclClass * Pass3::handleDecl( DeclClass *decl, Type *type ) {
    2205                         TyVarMap oldtyVars = scopeTyVars;
     2217                        scopeTyVars.beginScope();
    22062218                        makeTyVarMap( type, scopeTyVars );
    22072219
     
    22092221                        ScrubTyVars::scrub( decl, scopeTyVars );
    22102222
    2211                         scopeTyVars = oldtyVars;
     2223                        scopeTyVars.endScope();
    22122224                        return ret;
    22132225                }
     
    22392251
    22402252                Type * Pass3::mutate( PointerType *pointerType ) {
    2241                         TyVarMap oldtyVars = scopeTyVars;
     2253                        scopeTyVars.beginScope();
    22422254                        makeTyVarMap( pointerType, scopeTyVars );
    22432255
    22442256                        Type *ret = Mutator::mutate( pointerType );
    22452257
    2246                         scopeTyVars = oldtyVars;
     2258                        scopeTyVars.endScope();
    22472259                        return ret;
    22482260                }
    22492261
    22502262                Type * Pass3::mutate( FunctionType *functionType ) {
    2251                         TyVarMap oldtyVars = scopeTyVars;
     2263                        scopeTyVars.beginScope();
    22522264                        makeTyVarMap( functionType, scopeTyVars );
    22532265
    22542266                        Type *ret = Mutator::mutate( functionType );
    22552267
    2256                         scopeTyVars = oldtyVars;
     2268                        scopeTyVars.endScope();
    22572269                        return ret;
    22582270                }
  • src/GenPoly/FindFunction.cc

    r37218fc r37f0da8  
    5555                        TyVarMap::iterator var = tyVars.find( (*i)->get_name() );
    5656                        if ( var != tyVars.end() ) {
    57                                 tyVars.erase( var );
     57                                tyVars.erase( var->first );
    5858                        } // if
    5959                } // for
     
    6161
    6262        Type * FindFunction::mutate( FunctionType *functionType ) {
    63                 TyVarMap oldTyVars = tyVars;
     63                tyVars.beginScope();
    6464                handleForall( functionType->get_forall() );
    6565                mutateAll( functionType->get_returnVals(), *this );
     
    7272                        } // if
    7373                } // if
    74                 tyVars = oldTyVars;
     74                tyVars.endScope();
    7575                return ret;
    7676        }
    7777
    7878        Type * FindFunction::mutate( PointerType *pointerType ) {
    79                 TyVarMap oldTyVars = tyVars;
     79                tyVars.beginScope();
    8080                handleForall( pointerType->get_forall() );
    8181                Type *ret = Mutator::mutate( pointerType );
    82                 tyVars = oldTyVars;
     82                tyVars.endScope();
    8383                return ret;
    8484        }
  • src/GenPoly/GenPoly.cc

    r37218fc r37f0da8  
    1616#include "GenPoly.h"
    1717
    18 #include "SymTab/Mangler.h"
    1918#include "SynTree/Expression.h"
    2019#include "SynTree/Type.h"
     
    3837        ReferenceToType *isPolyRet( FunctionType *function ) {
    3938                if ( ! function->get_returnVals().empty() ) {
    40                         TyVarMap forallTypes;
     39                        TyVarMap forallTypes( (TypeDecl::Kind)-1 );
    4140                        makeTyVarMap( function, forallTypes );
    4241                        return (ReferenceToType*)isPolyType( function->get_returnVals().front()->get_type(), forallTypes );
     
    218217        }
    219218
    220         std::string sizeofName( Type *ty ) {
    221                 return std::string( "_sizeof_" ) + SymTab::Mangler::mangleType( ty );
    222         }
    223 
    224         std::string alignofName( Type *ty ) {
    225                 return std::string( "_alignof_" ) + SymTab::Mangler::mangleType( ty );
    226         }
    227 
    228         std::string offsetofName( Type* ty ) {
    229                 return std::string( "_offsetof_" ) + SymTab::Mangler::mangleType( ty );
    230         }
    231 
    232219} // namespace GenPoly
    233220
  • src/GenPoly/GenPoly.h

    r37218fc r37f0da8  
    1717#define GENPOLY_H
    1818
    19 #include <map>
    2019#include <string>
    2120#include <iostream>
    2221#include <utility>
     22
     23#include "ErasableScopedMap.h"
     24
     25#include "SymTab/Mangler.h"
    2326
    2427#include "SynTree/Declaration.h"
     
    2730
    2831namespace GenPoly {
    29         typedef std::map< std::string, TypeDecl::Kind > TyVarMap;
     32        typedef ErasableScopedMap< std::string, TypeDecl::Kind > TyVarMap;
    3033
    3134        /// A function needs an adapter if it returns a polymorphic value or if any of its
     
    6972        void printTyVarMap( std::ostream &os, const TyVarMap &tyVarMap );
    7073
    71         /// Gets the name of the sizeof parameter for the type
    72         std::string sizeofName( Type *ty );
     74        /// Gets the mangled name of this type; alias for SymTab::Mangler::mangleType().
     75        inline std::string mangleType( Type *ty ) { return SymTab::Mangler::mangleType( ty ); }
     76       
     77        /// Gets the name of the sizeof parameter for the type, given its mangled name
     78        inline std::string sizeofName( const std::string &name ) { return std::string( "_sizeof_" ) + name; }
    7379
    74         /// Gets the name of the alignof parameter for the type
    75         std::string alignofName( Type *ty );
     80        /// Gets the name of the alignof parameter for the type, given its mangled name
     81        inline std::string alignofName( const std::string &name ) { return std::string( "_alignof_" ) + name; }
    7682
    77         /// Gets the name of the offsetof parameter for the type
    78         std::string offsetofName( Type *ty );
     83        /// Gets the name of the offsetof parameter for the type, given its mangled name
     84        inline std::string offsetofName( const std::string &name ) { return std::string( "_offsetof_" ) + name; }
     85
     86        /// Gets the name of the layout function for a given aggregate type, given its declaration
     87        inline std::string layoutofName( AggregateDecl *decl ) { return std::string( "_layoutof_" ) + decl->get_name(); }
     88       
    7989} // namespace GenPoly
    8090
  • src/GenPoly/Lvalue.cc

    r37218fc r37f0da8  
    1717
    1818#include "Lvalue.h"
     19
     20#include "GenPoly.h"
    1921
    2022#include "SynTree/Declaration.h"
     
    6365
    6466        namespace {
    65                 bool isLvalueRet( FunctionType *function ) {
    66                         if ( ! function->get_returnVals().empty() ) {
    67                                 return function->get_returnVals().front()->get_type()->get_isLvalue();
    68                         } else {
    69                                 return false;
    70                         } // if
     67                Type* isLvalueRet( FunctionType *function ) {
     68                        if ( function->get_returnVals().empty() ) return 0;
     69                        Type *ty = function->get_returnVals().front()->get_type();
     70                        return ty->get_isLvalue() ? ty : 0;
    7171                }
    7272
     
    107107                        assert( function );
    108108
    109                         std::string typeName;
    110                         if ( isLvalueRet( function ) && ! isIntrinsicApp( appExpr ) ) {
     109                        Type *funType = isLvalueRet( function );
     110                        if ( funType && ! isIntrinsicApp( appExpr ) ) {
     111                                Expression *expr = appExpr;
     112                                Type *appType = appExpr->get_results().front();
     113                                if ( isPolyType( funType ) && ! isPolyType( appType ) ) {
     114                                        // make sure cast for polymorphic type is inside dereference
     115                                        expr = new CastExpr( appExpr, new PointerType( Type::Qualifiers(), appType->clone() ) );
     116                                }
    111117                                UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
    112                                 deref->get_results().push_back( appExpr->get_results().front() );
    113                                 appExpr->get_results().front() = new PointerType( Type::Qualifiers(), deref->get_results().front()->clone() );
    114                                 deref->get_args().push_back( appExpr );
     118                                deref->get_results().push_back( appType->clone() );
     119                                appExpr->get_results().front() = new PointerType( Type::Qualifiers(), appType );
     120                                deref->get_args().push_back( expr );
    115121                                return deref;
    116122                        } else {
  • src/GenPoly/PolyMutator.cc

    r37218fc r37f0da8  
    2727        }
    2828
    29         PolyMutator::PolyMutator() : env( 0 ) {
    30         }
     29        PolyMutator::PolyMutator() : scopeTyVars( (TypeDecl::Kind)-1 ), env( 0 ) {}
    3130
    3231        void PolyMutator::mutateStatementList( std::list< Statement* > &statements ) {
  • src/GenPoly/ScopedMap.h

    r37218fc r37f0da8  
    5151                        typedef typename scope_list::size_type size_type;
    5252
     53                        /// Checks if this iterator points to a valid item
     54                        bool is_valid() const {
     55                                return it != (*scopes)[i].end();
     56                        }
     57
     58                        /// Increments on invalid
     59                        iterator& next_valid() {
     60                                if ( ! is_valid() ) { ++(*this); }
     61                                return *this;
     62                        }
     63
     64                        /// Decrements on invalid
     65                        iterator& prev_valid() {
     66                                if ( ! is_valid() ) { --(*this); }
     67                                return *this;
     68                        }
     69
    5370                        iterator(scope_list const &_scopes, const wrapped_iterator &_it, size_type _i)
    5471                                : scopes(&_scopes), it(_it), i(_i) {}
     
    6885                                        --i;
    6986                                        it = (*scopes)[i].begin();
    70                                         return *this;
    71                                 }
    72                                 ++it;
    73                                 return *this;
     87                                } else {
     88                                        ++it;
     89                                }
     90                                return next_valid();
    7491                        }
    7592                        iterator& operator++ (int) { iterator tmp = *this; ++(*this); return tmp; }
     
    8299                                }
    83100                                --it;
    84                                 return *this;
     101                                return prev_valid();
    85102                        }
    86103                        iterator& operator-- (int) { iterator tmp = *this; --(*this); return tmp; }
     
    105122                        typedef typename scope_list::size_type size_type;
    106123
     124                        /// Checks if this iterator points to a valid item
     125                        bool is_valid() const {
     126                                return it != (*scopes)[i].end();
     127                        }
     128
     129                        /// Increments on invalid
     130                        const_iterator& next_valid() {
     131                                if ( ! is_valid() ) { ++(*this); }
     132                                return *this;
     133                        }
     134
     135                        /// Decrements on invalid
     136                        const_iterator& prev_valid() {
     137                                if ( ! is_valid() ) { --(*this); }
     138                                return *this;
     139                        }
     140
    107141                        const_iterator(scope_list const &_scopes, const wrapped_const_iterator &_it, size_type _i)
    108142                                : scopes(&_scopes), it(_it), i(_i) {}
     
    127161                                        --i;
    128162                                        it = (*scopes)[i].begin();
    129                                         return *this;
    130                                 }
    131                                 ++it;
    132                                 return *this;
     163                                } else {
     164                                        ++it;
     165                                }
     166                                return next_valid();
    133167                        }
    134168                        const_iterator& operator++ (int) { const_iterator tmp = *this; ++(*this); return tmp; }
     
    141175                                }
    142176                                --it;
    143                                 return *this;
     177                                return prev_valid();
    144178                        }
    145179                        const_iterator& operator-- (int) { const_iterator tmp = *this; --(*this); return tmp; }
     
    171205                ScopedMap() { beginScope(); }
    172206
    173                 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1); }
    174                 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1); }
    175                 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1); }
     207                iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
     208                const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
     209                const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
    176210                iterator end() { return iterator(scopes, scopes[0].end(), 0); }
    177211                const_iterator end() const { return const_iterator(scopes, scopes[0].end(), 0); }
  • src/GenPoly/ScopedSet.h

    r37218fc r37f0da8  
    4848                        typedef typename scope_list::size_type size_type;
    4949
     50                        /// Checks if this iterator points to a valid item
     51                        bool is_valid() const {
     52                                return it != (*scopes)[i].end();
     53                        }
     54
     55                        /// Increments on invalid
     56                        iterator& next_valid() {
     57                                if ( ! is_valid() ) { ++(*this); }
     58                                return *this;
     59                        }
     60
     61                        /// Decrements on invalid
     62                        iterator& prev_valid() {
     63                                if ( ! is_valid() ) { --(*this); }
     64                                return *this;
     65                        }
     66
    5067                        iterator(scope_list const &_scopes, const wrapped_iterator &_it, size_type _i)
    5168                                : scopes(&_scopes), it(_it), i(_i) {}
     
    6582                                        --i;
    6683                                        it = (*scopes)[i].begin();
    67                                         return *this;
    68                                 }
    69                                 ++it;
    70                                 return *this;
     84                                } else {
     85                                        ++it;
     86                                }
     87                                return next_valid();
    7188                        }
    7289                        iterator& operator++ (int) { iterator tmp = *this; ++(*this); return tmp; }
     
    7996                                }
    8097                                --it;
    81                                 return *this;
     98                                return prev_valid();
    8299                        }
    83100                        iterator& operator-- (int) { iterator tmp = *this; --(*this); return tmp; }
     
    102119                        typedef typename scope_list::size_type size_type;
    103120
     121                        /// Checks if this iterator points to a valid item
     122                        bool is_valid() const {
     123                                return it != (*scopes)[i].end();
     124                        }
     125
     126                        /// Increments on invalid
     127                        const_iterator& next_valid() {
     128                                if ( ! is_valid() ) { ++(*this); }
     129                                return *this;
     130                        }
     131
     132                        /// Decrements on invalid
     133                        const_iterator& prev_valid() {
     134                                if ( ! is_valid() ) { --(*this); }
     135                                return *this;
     136                        }
     137
    104138                        const_iterator(scope_list const &_scopes, const wrapped_const_iterator &_it, size_type _i)
    105139                                : scopes(&_scopes), it(_it), i(_i) {}
     
    124158                                        --i;
    125159                                        it = (*scopes)[i].begin();
    126                                         return *this;
    127                                 }
    128                                 ++it;
    129                                 return *this;
     160                                } else {
     161                                        ++it;
     162                                }
     163                                return next_valid();
    130164                        }
    131165                        const_iterator& operator++ (int) { const_iterator tmp = *this; ++(*this); return tmp; }
     
    138172                                }
    139173                                --it;
    140                                 return *this;
     174                                return prev_valid();
    141175                        }
    142176                        const_iterator& operator-- (int) { const_iterator tmp = *this; --(*this); return tmp; }
     
    167201                ScopedSet() { beginScope(); }
    168202
    169                 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1); }
    170                 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1); }
    171                 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1); }
     203                iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
     204                const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
     205                const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
    172206                iterator end() { return iterator(scopes, scopes[0].end(), 0); }
    173207                const_iterator end() const { return const_iterator(scopes, scopes[0].end(), 0); }
  • src/GenPoly/ScrubTyVars.cc

    r37218fc r37f0da8  
    6464                // sizeof( T ) => _sizeof_T parameter, which is the size of T
    6565                if ( Type *polyType = isPolyType( szeof->get_type() ) ) {
    66                         Expression *expr = new NameExpr( sizeofName( polyType ) );
     66                        Expression *expr = new NameExpr( sizeofName( mangleType( polyType ) ) );
    6767                        return expr;
    6868                } else {
     
    7474                // alignof( T ) => _alignof_T parameter, which is the alignment of T
    7575                if ( Type *polyType = isPolyType( algnof->get_type() ) ) {
    76                         Expression *expr = new NameExpr( alignofName( polyType ) );
     76                        Expression *expr = new NameExpr( alignofName( mangleType( polyType ) ) );
    7777                        return expr;
    7878                } else {
  • src/Parser/DeclarationNode.cc

    r37218fc r37f0da8  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar 21 21:04:23 2016
    13 // Update Count     : 142
     12// Last Modified On : Wed Apr 13 16:53:17 2016
     13// Update Count     : 161
    1414//
    1515
     
    188188        newnode->type->aggregate->name = assign_strptr( name );
    189189        if ( newnode->type->aggregate->name == "" ) {           // anonymous aggregate ?
    190                 newnode->type->aggregate->name = DeclarationNode::anonymous.newName();
    191         } else if ( ! typedefTable.exists( newnode->type->aggregate->name ) ) {
    192                 // SKULLDUGGERY: Generate a typedef for the aggregate name so the aggregate does not have to be qualified by
    193                 // "struct". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed
    194                 // if the name is explicitly used.
    195                 typedefTable.addToEnclosingScope( newnode->type->aggregate->name, TypedefTable::TD );
    196                 DeclarationNode *typedf = new DeclarationNode;
    197                 typedf->name = newnode->type->aggregate->name;
    198                 newnode->appendList( typedf->addType( newnode->clone() )->addTypedef() );
     190                newnode->type->aggregate->name = anonymous.newName();
    199191        } // if
    200192        newnode->type->aggregate->actuals = actuals;
     
    210202        if ( newnode->type->enumeration->name == "" ) {         // anonymous enumeration ?
    211203                newnode->type->enumeration->name = DeclarationNode::anonymous.newName();
    212         } else if ( ! typedefTable.exists( newnode->type->enumeration->name ) ) {
    213                 // SKULLDUGGERY: Generate a typedef for the enumeration name so the enumeration does not have to be qualified by
    214                 // "enum". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed if
    215                 // the name is explicitly used.
    216                 typedefTable.addToEnclosingScope( newnode->type->enumeration->name, TypedefTable::TD );
    217                 DeclarationNode *typedf = new DeclarationNode;
    218                 typedf->name = newnode->type->enumeration->name;
    219                 newnode->appendList( typedf->addType( newnode->clone() )->addTypedef() );
    220204        } // if
    221205        newnode->type->enumeration->constants = constants;
  • src/Parser/TypedefTable.cc

    r37218fc r37f0da8  
    1010// Created On       : Sat May 16 15:20:13 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar 21 18:18:58 2016
    13 // Update Count     : 23
     12// Last Modified On : Wed Apr 13 16:57:30 2016
     13// Update Count     : 24
    1414//
    1515
     
    3333}
    3434
     35int TypedefTable::isKind( const string &identifier ) const {
     36        tableType::const_iterator id_pos = table.find( identifier );
     37        // Name lookup defaults to identifier, and then the identifier's kind is set by the parser.
     38        if ( id_pos == table.end() ) return IDENTIFIER;
     39        return id_pos->second.begin()->kind;
     40}
     41
    3542void TypedefTable::changeKind( const string &identifier, kind_t kind ) {
    3643        tableType::iterator id_pos = table.find( identifier );
     
    3946}
    4047
    41 int TypedefTable::isKind( const string &identifier ) const {
    42         tableType::const_iterator id_pos = table.find( identifier );
    43         // Name lookup defaults to identifier, and then the identifier's kind is set by the parser.
    44         if ( id_pos == table.end() ) return IDENTIFIER;
    45         return id_pos->second.begin()->kind;
     48// SKULLDUGGERY: Generate a typedef for the aggregate name so the aggregate does not have to be qualified by
     49// "struct". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed
     50// if the name is explicitly used.
     51void TypedefTable::makeTypedef( const string &name ) {
     52        if ( ! typedefTable.exists( name ) ) {
     53                typedefTable.addToEnclosingScope( name, TypedefTable::TD );
     54        } // if
    4655}
    4756
  • src/Parser/TypedefTable.h

    r37218fc r37f0da8  
    1010// Created On       : Sat May 16 15:24:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar 21 18:17:36 2016
    13 // Update Count     : 24
     12// Last Modified On : Wed Apr 13 16:59:56 2016
     13// Update Count     : 27
    1414//
    1515
     
    5959        int isKind( const std::string &identifier ) const;
    6060        void changeKind( const std::string &identifier, kind_t kind );
    61        
     61
     62        void makeTypedef( const std::string &name );
     63
    6264        // "addToCurrentScope" adds the identifier/type pair to the current scope. This does less than you think it does,
    6365        // since each declaration is within its own scope.  Mostly useful for type parameters.
  • src/Parser/parser.cc

    r37218fc r37f0da8  
    590590#define YYFINAL  249
    591591/* YYLAST -- Last index in YYTABLE.  */
    592 #define YYLAST   11290
     592#define YYLAST   11449
    593593
    594594/* YYNTOKENS -- Number of terminals.  */
    595595#define YYNTOKENS  133
    596596/* YYNNTS -- Number of nonterminals.  */
    597 #define YYNNTS  238
     597#define YYNNTS  240
    598598/* YYNRULES -- Number of rules.  */
    599 #define YYNRULES  752
     599#define YYNRULES  754
    600600/* YYNRULES -- Number of states.  */
    601 #define YYNSTATES  1579
     601#define YYNSTATES  1581
    602602
    603603/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
     
    691691    1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,  1258,
    692692    1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,  1286,
    693     1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1316,  1324,
    694     1327,  1330,  1333,  1335,  1338,  1341,  1345,  1348,  1352,  1354,
    695     1357,  1361,  1364,  1367,  1372,  1373,  1375,  1378,  1381,  1383,
    696     1384,  1386,  1389,  1392,  1398,  1405,  1408,  1411,  1416,  1417,
    697     1420,  1421,  1423,  1425,  1427,  1433,  1439,  1445,  1447,  1453,
    698     1459,  1469,  1471,  1477,  1478,  1480,  1482,  1488,  1490,  1492,
    699     1498,  1504,  1506,  1510,  1514,  1519,  1521,  1523,  1525,  1527,
    700     1530,  1532,  1536,  1540,  1542,  1545,  1547,  1551,  1553,  1555,
    701     1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1573,  1576,
    702     1578,  1580,  1582,  1585,  1586,  1589,  1592,  1594,  1599,  1600,
    703     1602,  1605,  1609,  1614,  1617,  1620,  1622,  1625,  1627,  1630,
    704     1636,  1642,  1650,  1657,  1659,  1662,  1665,  1669,  1671,  1674,
    705     1677,  1682,  1685,  1690,  1691,  1696,  1699,  1701,  1703,  1705,
    706     1706,  1709,  1715,  1721,  1735,  1737,  1739,  1743,  1747,  1750,
    707     1754,  1758,  1761,  1766,  1768,  1775,  1785,  1786,  1798,  1800,
    708     1804,  1808,  1812,  1814,  1816,  1822,  1825,  1831,  1832,  1834,
    709     1836,  1840,  1841,  1843,  1845,  1847,  1849,  1850,  1857,  1860,
    710     1862,  1865,  1870,  1873,  1877,  1881,  1885,  1890,  1896,  1902,
    711     1908,  1915,  1917,  1919,  1921,  1925,  1926,  1932,  1933,  1935,
    712     1937,  1940,  1947,  1949,  1953,  1954,  1956,  1961,  1963,  1965,
    713     1967,  1969,  1972,  1974,  1977,  1980,  1982,  1986,  1989,  1993,
    714     1997,  2000,  2005,  2010,  2014,  2023,  2027,  2030,  2032,  2035,
    715     2042,  2051,  2055,  2058,  2062,  2066,  2071,  2076,  2080,  2082,
    716     2084,  2086,  2091,  2098,  2102,  2105,  2109,  2113,  2118,  2123,
    717     2127,  2130,  2132,  2135,  2138,  2140,  2144,  2147,  2151,  2155,
    718     2158,  2163,  2168,  2172,  2179,  2188,  2192,  2195,  2197,  2200,
    719     2203,  2206,  2210,  2214,  2217,  2222,  2227,  2231,  2238,  2247,
    720     2251,  2254,  2256,  2259,  2262,  2264,  2266,  2269,  2273,  2277,
    721     2280,  2285,  2292,  2301,  2303,  2306,  2309,  2311,  2314,  2317,
    722     2321,  2325,  2327,  2332,  2337,  2341,  2347,  2356,  2360,  2363,
    723     2367,  2369,  2375,  2381,  2388,  2395,  2397,  2400,  2403,  2405,
    724     2408,  2411,  2415,  2419,  2421,  2426,  2431,  2435,  2441,  2450,
    725     2454,  2456,  2459,  2461,  2464,  2471,  2477,  2484,  2492,  2500,
    726     2502,  2505,  2508,  2510,  2513,  2516,  2520,  2524,  2526,  2531,
    727     2536,  2540,  2549,  2553,  2555,  2557,  2560,  2562,  2564,  2567,
    728     2571,  2574,  2578,  2581,  2585,  2589,  2592,  2597,  2601,  2604,
    729     2608,  2611,  2616,  2620,  2623,  2630,  2637,  2644,  2652,  2654,
    730     2657,  2659,  2661,  2663,  2666,  2670,  2673,  2677,  2680,  2684,
    731     2688,  2693,  2696,  2700,  2705,  2708,  2714,  2720,  2727,  2734,
    732     2735,  2737,  2738
     693    1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1311,  1318,
     694    1326,  1329,  1332,  1335,  1337,  1340,  1343,  1347,  1350,  1354,
     695    1356,  1359,  1363,  1366,  1369,  1374,  1375,  1377,  1380,  1383,
     696    1385,  1386,  1388,  1391,  1394,  1400,  1403,  1404,  1412,  1415,
     697    1420,  1421,  1424,  1425,  1427,  1429,  1431,  1437,  1443,  1449,
     698    1451,  1457,  1463,  1473,  1475,  1481,  1482,  1484,  1486,  1492,
     699    1494,  1496,  1502,  1508,  1510,  1514,  1518,  1523,  1525,  1527,
     700    1529,  1531,  1534,  1536,  1540,  1544,  1546,  1549,  1551,  1555,
     701    1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1573,  1575,
     702    1577,  1580,  1582,  1584,  1586,  1589,  1590,  1593,  1596,  1598,
     703    1603,  1604,  1606,  1609,  1613,  1618,  1621,  1624,  1626,  1629,
     704    1631,  1634,  1640,  1646,  1654,  1661,  1663,  1666,  1669,  1673,
     705    1675,  1678,  1681,  1686,  1689,  1694,  1695,  1700,  1703,  1705,
     706    1707,  1709,  1710,  1713,  1719,  1725,  1739,  1741,  1743,  1747,
     707    1751,  1754,  1758,  1762,  1765,  1770,  1772,  1779,  1789,  1790,
     708    1802,  1804,  1808,  1812,  1816,  1818,  1820,  1826,  1829,  1835,
     709    1836,  1838,  1840,  1844,  1845,  1847,  1849,  1851,  1853,  1854,
     710    1861,  1864,  1866,  1869,  1874,  1877,  1881,  1885,  1889,  1894,
     711    1900,  1906,  1912,  1919,  1921,  1923,  1925,  1929,  1930,  1936,
     712    1937,  1939,  1941,  1944,  1951,  1953,  1957,  1958,  1960,  1965,
     713    1967,  1969,  1971,  1973,  1976,  1978,  1981,  1984,  1986,  1990,
     714    1993,  1997,  2001,  2004,  2009,  2014,  2018,  2027,  2031,  2034,
     715    2036,  2039,  2046,  2055,  2059,  2062,  2066,  2070,  2075,  2080,
     716    2084,  2086,  2088,  2090,  2095,  2102,  2106,  2109,  2113,  2117,
     717    2122,  2127,  2131,  2134,  2136,  2139,  2142,  2144,  2148,  2151,
     718    2155,  2159,  2162,  2167,  2172,  2176,  2183,  2192,  2196,  2199,
     719    2201,  2204,  2207,  2210,  2214,  2218,  2221,  2226,  2231,  2235,
     720    2242,  2251,  2255,  2258,  2260,  2263,  2266,  2268,  2270,  2273,
     721    2277,  2281,  2284,  2289,  2296,  2305,  2307,  2310,  2313,  2315,
     722    2318,  2321,  2325,  2329,  2331,  2336,  2341,  2345,  2351,  2360,
     723    2364,  2367,  2371,  2373,  2379,  2385,  2392,  2399,  2401,  2404,
     724    2407,  2409,  2412,  2415,  2419,  2423,  2425,  2430,  2435,  2439,
     725    2445,  2454,  2458,  2460,  2463,  2465,  2468,  2475,  2481,  2488,
     726    2496,  2504,  2506,  2509,  2512,  2514,  2517,  2520,  2524,  2528,
     727    2530,  2535,  2540,  2544,  2553,  2557,  2559,  2561,  2564,  2566,
     728    2568,  2571,  2575,  2578,  2582,  2585,  2589,  2593,  2596,  2601,
     729    2605,  2608,  2612,  2615,  2620,  2624,  2627,  2634,  2641,  2648,
     730    2656,  2658,  2661,  2663,  2665,  2667,  2670,  2674,  2677,  2681,
     731    2684,  2688,  2692,  2697,  2700,  2704,  2709,  2712,  2718,  2724,
     732    2731,  2738,  2739,  2741,  2742
    733733};
    734734
     
    736736static const yytype_int16 yyrhs[] =
    737737{
    738      299,     0,    -1,    -1,    -1,    79,    -1,    80,    -1,    81,
     738     301,     0,    -1,    -1,    -1,    79,    -1,    80,    -1,    81,
    739739      -1,    72,    -1,    76,    -1,   140,    -1,    72,    -1,    76,
    740740      -1,    72,    -1,   140,    -1,    83,    -1,    84,    -1,    82,
     
    745745     112,    -1,   143,    85,   139,    -1,   143,    85,   111,   134,
    746746     146,   135,   112,    -1,   143,    86,    -1,   143,    87,    -1,
    747      109,   272,   110,   114,   276,   369,   115,    -1,   143,   114,
     747     109,   274,   110,   114,   278,   371,   115,    -1,   143,   114,
    748748     144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
    749749     163,    -1,   139,   117,   163,    -1,   111,   134,   163,   135,
     
    755755     141,    -1,    86,   148,    -1,    87,   148,    -1,    40,   150,
    756756      -1,   149,   150,    -1,   118,   150,    -1,   119,   150,    -1,
    757       37,   148,    -1,    37,   109,   272,   110,    -1,    38,   109,
    758      272,   116,   139,   110,    -1,    76,    -1,    76,   109,   273,
     757      37,   148,    -1,    37,   109,   274,   110,    -1,    38,   109,
     758     274,   116,   139,   110,    -1,    76,    -1,    76,   109,   275,
    759759     110,    -1,    76,   109,   145,   110,    -1,    66,   148,    -1,
    760       66,   109,   272,   110,    -1,    94,   139,    -1,   120,    -1,
    761      121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   272,
    762      110,   150,    -1,   109,   272,   110,   165,    -1,   150,    -1,
     760      66,   109,   274,   110,    -1,    94,   139,    -1,   120,    -1,
     761     121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   274,
     762     110,   150,    -1,   109,   274,   110,   165,    -1,   150,    -1,
    763763     151,   119,   150,    -1,   151,   124,   150,    -1,   151,   125,
    764764     150,    -1,   151,    -1,   152,   121,   151,    -1,   152,   122,
     
    773773     117,   161,    -1,   160,   130,   168,   117,   165,    -1,   161,
    774774      -1,   161,    -1,   148,   131,   163,    -1,   148,   167,   163,
    775       -1,   165,   370,    -1,    -1,   163,    -1,   111,   112,    -1,
     775      -1,   165,   372,    -1,    -1,   163,    -1,   111,   112,    -1,
    776776     111,   134,   163,   135,   112,    -1,   111,   134,   116,   166,
    777777     135,   112,    -1,   111,   134,   163,   116,   166,   135,   112,
     
    782782     176,    -1,   177,    -1,   189,    -1,   191,    -1,   192,    -1,
    783783     197,    -1,   128,   143,   114,   144,   115,   132,    -1,   139,
    784      117,   309,   170,    -1,   114,   115,    -1,   114,   134,   134,
     784     117,   311,   170,    -1,   114,   115,    -1,   114,   134,   134,
    785785     208,   173,   135,   115,    -1,   174,    -1,   173,   134,   174,
    786       -1,   211,    -1,    40,   211,    -1,   305,    -1,   170,   135,
     786      -1,   211,    -1,    40,   211,    -1,   307,    -1,   170,   135,
    787787      -1,   170,    -1,   175,   170,    -1,   169,   132,    -1,    41,
    788788     109,   168,   110,   170,    -1,    41,   109,   168,   110,   170,
     
    791791     109,   168,   110,   182,    -1,    53,   109,   168,   110,   114,
    792792     134,   204,   185,   115,    -1,   162,    -1,   162,    96,   162,
    793       -1,   307,    -1,   178,    -1,   179,   116,   178,    -1,    44,
     793      -1,   309,    -1,   178,    -1,   179,   116,   178,    -1,    44,
    794794     179,   117,    -1,    45,   117,    -1,   180,    -1,   181,   180,
    795795      -1,   181,   170,    -1,    -1,   184,    -1,   181,   175,    -1,
     
    813813     134,   196,   135,   110,   172,   135,    -1,   194,    59,   109,
    814814     134,   134,   196,   135,   110,   172,   135,    -1,    60,   172,
    815       -1,   224,    -1,   224,   306,    -1,   224,   354,    -1,   363,
    816      139,    -1,   363,    -1,    64,   198,   109,   141,   110,   132,
     815      -1,   224,    -1,   224,   308,    -1,   224,   356,    -1,   365,
     816     139,    -1,   365,    -1,    64,   198,   109,   141,   110,   132,
    817817      -1,    64,   198,   109,   141,   117,   199,   110,   132,    -1,
    818818      64,   198,   109,   141,   117,   199,   117,   199,   110,   132,
     
    826826      -1,   211,    -1,   205,   134,   211,    -1,   135,    -1,   207,
    827827      -1,   221,    -1,   207,   134,   221,    -1,    -1,   209,    -1,
    828       29,   210,   132,    -1,   209,    29,   210,   132,    -1,   271,
    829       -1,   210,   116,   271,    -1,   212,    -1,   221,    -1,   213,
     828      29,   210,   132,    -1,   209,    29,   210,   132,    -1,   273,
     829      -1,   210,   116,   273,    -1,   212,    -1,   221,    -1,   213,
    830830     135,   132,    -1,   218,   135,   132,    -1,   215,   135,   132,
    831       -1,   290,   135,   132,    -1,   293,   135,   132,    -1,   214,
    832      274,    -1,   230,   214,   274,    -1,   213,   135,   116,   134,
    833      269,   274,    -1,   364,   269,   308,    -1,   367,   269,   308,
    834       -1,   226,   367,   269,   308,    -1,   216,    -1,   226,   216,
     831      -1,   292,   135,   132,    -1,   295,   135,   132,    -1,   214,
     832     276,    -1,   230,   214,   276,    -1,   213,   135,   116,   134,
     833     271,   276,    -1,   366,   271,   310,    -1,   369,   271,   310,
     834      -1,   226,   369,   271,   310,    -1,   216,    -1,   226,   216,
    835835      -1,   230,   216,    -1,   230,   226,   216,    -1,   215,   135,
    836      116,   134,   269,    -1,   111,   112,   269,   109,   134,   257,
    837      135,   110,    -1,   367,   269,   109,   134,   257,   135,   110,
    838       -1,   217,   269,   109,   134,   257,   135,   110,    -1,   111,
    839      134,   259,   135,   112,    -1,   111,   134,   259,   135,   116,
    840      134,   260,   135,   112,    -1,     3,   214,    -1,     3,   216,
    841       -1,   218,   135,   116,   134,   139,    -1,     3,   224,   306,
    842       -1,   219,   135,   116,   134,   306,    -1,   226,     3,   224,
    843      306,    -1,   224,     3,   306,    -1,   224,     3,   226,   306,
     836     116,   134,   271,    -1,   111,   112,   271,   109,   134,   259,
     837     135,   110,    -1,   369,   271,   109,   134,   259,   135,   110,
     838      -1,   217,   271,   109,   134,   259,   135,   110,    -1,   111,
     839     134,   261,   135,   112,    -1,   111,   134,   261,   135,   116,
     840     134,   262,   135,   112,    -1,     3,   214,    -1,     3,   216,
     841      -1,   218,   135,   116,   134,   139,    -1,     3,   224,   308,
     842      -1,   219,   135,   116,   134,   308,    -1,   226,     3,   224,
     843     308,    -1,   224,     3,   308,    -1,   224,     3,   226,   308,
    844844      -1,     3,   139,   131,   163,    -1,   220,   135,   116,   134,
    845845     139,   131,   163,    -1,   222,   135,   132,    -1,   219,   135,
    846846     132,    -1,   220,   135,   132,    -1,   239,   135,   132,    -1,
    847      223,   306,   308,   274,    -1,   222,   116,   309,   306,   308,
    848      274,    -1,   235,    -1,   239,    -1,   241,    -1,   280,    -1,
    849      236,    -1,   240,    -1,   242,    -1,   281,    -1,    -1,   226,
    850       -1,   227,    -1,   226,   227,    -1,   228,    -1,   311,    -1,
     847     223,   308,   310,   276,    -1,   222,   116,   311,   308,   310,
     848     276,    -1,   235,    -1,   239,    -1,   241,    -1,   282,    -1,
     849     236,    -1,   240,    -1,   242,    -1,   283,    -1,    -1,   226,
     850      -1,   227,    -1,   226,   227,    -1,   228,    -1,   313,    -1,
    851851      10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
    852       -1,    13,   109,   229,   283,   110,    -1,   231,    -1,   226,
     852      -1,    13,   109,   229,   285,   110,    -1,   231,    -1,   226,
    853853     231,    -1,   230,   226,   231,    -1,   232,    -1,   231,   232,
    854854      -1,   233,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
     
    860860      -1,   237,    -1,   225,   238,   225,    -1,   234,    -1,   226,
    861861     234,    -1,   237,   227,    -1,   237,   234,    -1,    28,   109,
    862      273,   110,    -1,    28,   109,   168,   110,    -1,    78,   109,
    863      273,   110,    -1,    78,   109,   168,   110,    -1,   240,    -1,
     862     275,   110,    -1,    28,   109,   168,   110,    -1,    78,   109,
     863     275,   110,    -1,    78,   109,   168,   110,    -1,   240,    -1,
    864864     230,   240,    -1,   239,   232,    -1,   239,   232,   226,    -1,
    865865     243,    -1,   226,   243,    -1,   240,   227,    -1,   242,    -1,
    866866     230,   242,    -1,   241,   232,    -1,   241,   232,   226,    -1,
    867867      74,    -1,   226,    74,    -1,   242,   227,    -1,   244,    -1,
    868      254,    -1,   245,   114,   246,   115,    -1,   245,   271,    -1,
    869      245,   271,   114,   246,   115,    -1,   245,   109,   289,   110,
    870      114,   246,   115,    -1,   245,   282,    -1,    31,   309,    -1,
    871       32,   309,    -1,   247,    -1,   246,   247,    -1,   248,   132,
    872       -1,    40,   248,   132,    -1,   249,   132,    -1,    40,   249,
    873      132,    -1,   363,    -1,   363,   271,    -1,   248,   116,   271,
    874       -1,   248,   116,    -1,   224,   250,    -1,   249,   116,   309,
    875      250,    -1,    -1,   252,    -1,   315,   251,    -1,   328,   251,
    876       -1,   354,    -1,    -1,   252,    -1,   117,   162,    -1,    30,
    877      309,    -1,   253,   114,   255,   369,   115,    -1,   253,   271,
    878      114,   255,   369,   115,    -1,   253,   271,    -1,   271,   256,
    879       -1,   255,   116,   271,   256,    -1,    -1,   131,   162,    -1,
    880       -1,   258,    -1,   260,    -1,   259,    -1,   259,   135,   116,
    881      134,   260,    -1,   260,   135,   116,   134,    96,    -1,   259,
    882      135,   116,   134,    96,    -1,   264,    -1,   260,   135,   116,
    883      134,   264,    -1,   259,   135,   116,   134,   264,    -1,   259,
    884      135,   116,   134,   260,   135,   116,   134,   264,    -1,   265,
    885       -1,   260,   135,   116,   134,   265,    -1,    -1,   262,    -1,
    886      263,    -1,   263,   135,   116,   134,    96,    -1,   267,    -1,
    887      266,    -1,   263,   135,   116,   134,   267,    -1,   263,   135,
    888      116,   134,   266,    -1,   266,    -1,   359,   269,   370,    -1,
    889      367,   269,   370,    -1,   226,   367,   269,   370,    -1,   216,
    890       -1,   267,    -1,   359,    -1,   367,    -1,   226,   367,    -1,
    891      368,    -1,   223,   333,   370,    -1,   223,   337,   370,    -1,
    892      223,    -1,   223,   348,    -1,   139,    -1,   268,   116,   139,
    893       -1,   137,    -1,    74,    -1,    75,    -1,   138,    -1,    74,
    894       -1,    75,    -1,   139,    -1,    74,    -1,    75,    -1,   363,
    895       -1,   224,    -1,   224,   354,    -1,   363,    -1,   368,    -1,
    896      224,    -1,   224,   342,    -1,    -1,   131,   275,    -1,   107,
    897      275,    -1,   163,    -1,   114,   276,   369,   115,    -1,    -1,
    898      275,    -1,   277,   275,    -1,   276,   116,   275,    -1,   276,
    899      116,   277,   275,    -1,   278,   117,    -1,   271,   117,    -1,
    900      279,    -1,   278,   279,    -1,    80,    -1,   113,   271,    -1,
    901      111,   134,   163,   135,   112,    -1,   111,   134,   307,   135,
    902      112,    -1,   111,   134,   162,    96,   162,   135,   112,    -1,
    903      113,   111,   134,   146,   135,   112,    -1,   281,    -1,   230,
    904      281,    -1,   280,   232,    -1,   280,   232,   226,    -1,   282,
    905       -1,   226,   282,    -1,   281,   227,    -1,    75,   109,   289,
    906      110,    -1,   284,   370,    -1,   283,   116,   284,   370,    -1,
    907       -1,   286,   271,   285,   287,    -1,   224,   333,    -1,    33,
    908       -1,    35,    -1,    34,    -1,    -1,   287,   288,    -1,   129,
    909      271,   109,   289,   110,    -1,   129,   114,   134,   295,   115,
    910       -1,   129,   109,   134,   283,   135,   110,   114,   134,   295,
    911      115,   109,   289,   110,    -1,   273,    -1,   163,    -1,   289,
    912      116,   273,    -1,   289,   116,   163,    -1,    33,   291,    -1,
    913      231,    33,   291,    -1,   290,   116,   291,    -1,   292,   287,
    914       -1,   292,   287,   131,   273,    -1,   271,    -1,   270,   109,
    915      134,   283,   135,   110,    -1,    36,   271,   109,   134,   283,
    916      135,   110,   114,   115,    -1,    -1,    36,   271,   109,   134,
    917      283,   135,   110,   114,   294,   295,   115,    -1,   296,    -1,
    918      295,   134,   296,    -1,   297,   135,   132,    -1,   298,   135,
    919      132,    -1,   214,    -1,   216,    -1,   297,   135,   116,   134,
    920      269,    -1,   224,   306,    -1,   298,   135,   116,   134,   306,
    921       -1,    -1,   300,    -1,   302,    -1,   300,   134,   302,    -1,
    922       -1,   300,    -1,   211,    -1,   304,    -1,   197,    -1,    -1,
    923        5,    82,   303,   114,   301,   115,    -1,    40,   302,    -1,
    924      305,    -1,   320,   172,    -1,   324,   134,   206,   172,    -1,
    925      215,   172,    -1,   223,   320,   172,    -1,   226,   320,   172,
    926       -1,   230,   320,   172,    -1,   230,   226,   320,   172,    -1,
    927      223,   324,   134,   206,   172,    -1,   226,   324,   134,   206,
    928      172,    -1,   230,   324,   134,   206,   172,    -1,   230,   226,
    929      324,   134,   206,   172,    -1,   315,    -1,   320,    -1,   328,
    930       -1,   162,   123,   162,    -1,    -1,    64,   109,   141,   110,
    931      309,    -1,    -1,   310,    -1,   311,    -1,   310,   311,    -1,
    932       39,   109,   109,   312,   110,   110,    -1,   313,    -1,   312,
    933      116,   313,    -1,    -1,   314,    -1,   314,   109,   169,   110,
    934       -1,   269,    -1,   233,    -1,   234,    -1,   227,    -1,   316,
    935      309,    -1,   317,    -1,   318,   309,    -1,   319,   309,    -1,
    936      137,    -1,   109,   316,   110,    -1,   119,   315,    -1,   119,
    937      226,   315,    -1,   109,   317,   110,    -1,   316,   346,    -1,
    938      109,   317,   110,   346,    -1,   109,   318,   110,   347,    -1,
    939      109,   318,   110,    -1,   109,   317,   110,   109,   134,   261,
    940      135,   110,    -1,   109,   319,   110,    -1,   321,   309,    -1,
    941      322,    -1,   323,   309,    -1,   316,   109,   134,   261,   135,
    942      110,    -1,   109,   322,   110,   109,   134,   261,   135,   110,
    943       -1,   109,   321,   110,    -1,   119,   320,    -1,   119,   226,
    944      320,    -1,   109,   322,   110,    -1,   109,   322,   110,   346,
    945       -1,   109,   323,   110,   347,    -1,   109,   323,   110,    -1,
    946      325,    -1,   326,    -1,   327,    -1,   316,   109,   268,   110,
    947       -1,   109,   326,   110,   109,   268,   110,    -1,   109,   325,
    948      110,    -1,   119,   324,    -1,   119,   226,   324,    -1,   109,
    949      326,   110,    -1,   109,   326,   110,   346,    -1,   109,   327,
    950      110,   347,    -1,   109,   327,   110,    -1,   329,   309,    -1,
    951      330,    -1,   331,   309,    -1,   332,   309,    -1,   338,    -1,
    952      109,   329,   110,    -1,   119,   328,    -1,   119,   226,   328,
    953       -1,   109,   330,   110,    -1,   329,   346,    -1,   109,   330,
    954      110,   346,    -1,   109,   331,   110,   347,    -1,   109,   331,
    955      110,    -1,   329,   109,   134,   261,   135,   110,    -1,   109,
    956      330,   110,   109,   134,   261,   135,   110,    -1,   109,   332,
    957      110,    -1,   316,   309,    -1,   334,    -1,   335,   309,    -1,
    958      336,   309,    -1,   119,   333,    -1,   119,   226,   333,    -1,
    959      109,   334,   110,    -1,   316,   352,    -1,   109,   334,   110,
    960      346,    -1,   109,   335,   110,   347,    -1,   109,   335,   110,
    961       -1,   316,   109,   134,   261,   135,   110,    -1,   109,   334,
    962      110,   109,   134,   261,   135,   110,    -1,   109,   336,   110,
    963       -1,   338,   309,    -1,   339,    -1,   340,   309,    -1,   341,
    964      309,    -1,    74,    -1,    75,    -1,   119,   337,    -1,   119,
    965      226,   337,    -1,   109,   339,   110,    -1,   338,   352,    -1,
    966      109,   339,   110,   352,    -1,   338,   109,   134,   261,   135,
    967      110,    -1,   109,   339,   110,   109,   134,   261,   135,   110,
    968       -1,   343,    -1,   344,   309,    -1,   345,   309,    -1,   119,
    969       -1,   119,   226,    -1,   119,   342,    -1,   119,   226,   342,
    970       -1,   109,   343,   110,    -1,   346,    -1,   109,   343,   110,
    971      346,    -1,   109,   344,   110,   347,    -1,   109,   344,   110,
    972       -1,   109,   134,   261,   135,   110,    -1,   109,   343,   110,
    973      109,   134,   261,   135,   110,    -1,   109,   345,   110,    -1,
    974      111,   112,    -1,   111,   112,   347,    -1,   347,    -1,   111,
    975      134,   163,   135,   112,    -1,   111,   134,   119,   135,   112,
    976       -1,   347,   111,   134,   163,   135,   112,    -1,   347,   111,
    977      134,   119,   135,   112,    -1,   349,    -1,   350,   309,    -1,
    978      351,   309,    -1,   119,    -1,   119,   226,    -1,   119,   348,
    979       -1,   119,   226,   348,    -1,   109,   349,   110,    -1,   352,
    980       -1,   109,   349,   110,   352,    -1,   109,   350,   110,   347,
    981       -1,   109,   350,   110,    -1,   109,   134,   261,   135,   110,
    982       -1,   109,   349,   110,   109,   134,   261,   135,   110,    -1,
    983      109,   351,   110,    -1,   353,    -1,   353,   347,    -1,   347,
    984       -1,   111,   112,    -1,   111,   134,   226,   119,   135,   112,
    985       -1,   111,   134,   226,   135,   112,    -1,   111,   134,   226,
    986      163,   135,   112,    -1,   111,   134,     7,   225,   163,   135,
    987      112,    -1,   111,   134,   226,     7,   163,   135,   112,    -1,
    988      355,    -1,   356,   309,    -1,   357,   309,    -1,   119,    -1,
    989      119,   226,    -1,   119,   354,    -1,   119,   226,   354,    -1,
    990      109,   355,   110,    -1,   346,    -1,   109,   355,   110,   346,
    991       -1,   109,   356,   110,   347,    -1,   109,   356,   110,    -1,
    992      109,   355,   110,   109,   134,   261,   135,   110,    -1,   109,
    993      357,   110,    -1,   359,    -1,   367,    -1,   226,   367,    -1,
    994      360,    -1,   361,    -1,   119,   224,    -1,   226,   119,   224,
    995       -1,   119,   368,    -1,   226,   119,   368,    -1,   119,   358,
    996       -1,   226,   119,   358,    -1,   111,   112,   224,    -1,   362,
    997      224,    -1,   111,   112,   347,   224,    -1,   362,   347,   224,
    998       -1,   347,   224,    -1,   111,   112,   360,    -1,   362,   360,
    999       -1,   111,   112,   347,   360,    -1,   362,   347,   360,    -1,
    1000      347,   360,    -1,   111,   134,   226,   119,   135,   112,    -1,
    1001      111,   134,   226,   163,   135,   112,    -1,   111,   134,   230,
    1002      163,   135,   112,    -1,   111,   134,   230,   226,   163,   135,
    1003      112,    -1,   367,    -1,   226,   367,    -1,   364,    -1,   365,
    1004       -1,   366,    -1,   119,   224,    -1,   226,   119,   224,    -1,
    1005      119,   368,    -1,   226,   119,   368,    -1,   119,   363,    -1,
    1006      226,   119,   363,    -1,   111,   112,   224,    -1,   111,   112,
    1007      347,   224,    -1,   347,   224,    -1,   111,   112,   365,    -1,
    1008      111,   112,   347,   365,    -1,   347,   365,    -1,   111,   134,
    1009      260,   135,   112,    -1,   111,   112,   109,   257,   110,    -1,
    1010      367,   109,   134,   257,   135,   110,    -1,   217,   109,   134,
    1011      257,   135,   110,    -1,    -1,   116,    -1,    -1,   131,   163,
    1012       -1
     868     255,    -1,   246,   114,   247,   115,    -1,   246,   273,    -1,
     869      -1,   246,   273,   245,   114,   247,   115,    -1,   246,   109,
     870     291,   110,   114,   247,   115,    -1,   246,   284,    -1,    31,
     871     311,    -1,    32,   311,    -1,   248,    -1,   247,   248,    -1,
     872     249,   132,    -1,    40,   249,   132,    -1,   250,   132,    -1,
     873      40,   250,   132,    -1,   365,    -1,   365,   273,    -1,   249,
     874     116,   273,    -1,   249,   116,    -1,   224,   251,    -1,   250,
     875     116,   311,   251,    -1,    -1,   253,    -1,   317,   252,    -1,
     876     330,   252,    -1,   356,    -1,    -1,   253,    -1,   117,   162,
     877      -1,    30,   311,    -1,   254,   114,   257,   371,   115,    -1,
     878     254,   273,    -1,    -1,   254,   273,   256,   114,   257,   371,
     879     115,    -1,   273,   258,    -1,   257,   116,   273,   258,    -1,
     880      -1,   131,   162,    -1,    -1,   260,    -1,   262,    -1,   261,
     881      -1,   261,   135,   116,   134,   262,    -1,   262,   135,   116,
     882     134,    96,    -1,   261,   135,   116,   134,    96,    -1,   266,
     883      -1,   262,   135,   116,   134,   266,    -1,   261,   135,   116,
     884     134,   266,    -1,   261,   135,   116,   134,   262,   135,   116,
     885     134,   266,    -1,   267,    -1,   262,   135,   116,   134,   267,
     886      -1,    -1,   264,    -1,   265,    -1,   265,   135,   116,   134,
     887      96,    -1,   269,    -1,   268,    -1,   265,   135,   116,   134,
     888     269,    -1,   265,   135,   116,   134,   268,    -1,   268,    -1,
     889     361,   271,   372,    -1,   369,   271,   372,    -1,   226,   369,
     890     271,   372,    -1,   216,    -1,   269,    -1,   361,    -1,   369,
     891      -1,   226,   369,    -1,   370,    -1,   223,   335,   372,    -1,
     892     223,   339,   372,    -1,   223,    -1,   223,   350,    -1,   139,
     893      -1,   270,   116,   139,    -1,   137,    -1,    74,    -1,    75,
     894      -1,   138,    -1,    74,    -1,    75,    -1,   139,    -1,    74,
     895      -1,    75,    -1,   365,    -1,   224,    -1,   224,   356,    -1,
     896     365,    -1,   370,    -1,   224,    -1,   224,   344,    -1,    -1,
     897     131,   277,    -1,   107,   277,    -1,   163,    -1,   114,   278,
     898     371,   115,    -1,    -1,   277,    -1,   279,   277,    -1,   278,
     899     116,   277,    -1,   278,   116,   279,   277,    -1,   280,   117,
     900      -1,   273,   117,    -1,   281,    -1,   280,   281,    -1,    80,
     901      -1,   113,   273,    -1,   111,   134,   163,   135,   112,    -1,
     902     111,   134,   309,   135,   112,    -1,   111,   134,   162,    96,
     903     162,   135,   112,    -1,   113,   111,   134,   146,   135,   112,
     904      -1,   283,    -1,   230,   283,    -1,   282,   232,    -1,   282,
     905     232,   226,    -1,   284,    -1,   226,   284,    -1,   283,   227,
     906      -1,    75,   109,   291,   110,    -1,   286,   372,    -1,   285,
     907     116,   286,   372,    -1,    -1,   288,   273,   287,   289,    -1,
     908     224,   335,    -1,    33,    -1,    35,    -1,    34,    -1,    -1,
     909     289,   290,    -1,   129,   273,   109,   291,   110,    -1,   129,
     910     114,   134,   297,   115,    -1,   129,   109,   134,   285,   135,
     911     110,   114,   134,   297,   115,   109,   291,   110,    -1,   275,
     912      -1,   163,    -1,   291,   116,   275,    -1,   291,   116,   163,
     913      -1,    33,   293,    -1,   231,    33,   293,    -1,   292,   116,
     914     293,    -1,   294,   289,    -1,   294,   289,   131,   275,    -1,
     915     273,    -1,   272,   109,   134,   285,   135,   110,    -1,    36,
     916     273,   109,   134,   285,   135,   110,   114,   115,    -1,    -1,
     917      36,   273,   109,   134,   285,   135,   110,   114,   296,   297,
     918     115,    -1,   298,    -1,   297,   134,   298,    -1,   299,   135,
     919     132,    -1,   300,   135,   132,    -1,   214,    -1,   216,    -1,
     920     299,   135,   116,   134,   271,    -1,   224,   308,    -1,   300,
     921     135,   116,   134,   308,    -1,    -1,   302,    -1,   304,    -1,
     922     302,   134,   304,    -1,    -1,   302,    -1,   211,    -1,   306,
     923      -1,   197,    -1,    -1,     5,    82,   305,   114,   303,   115,
     924      -1,    40,   304,    -1,   307,    -1,   322,   172,    -1,   326,
     925     134,   206,   172,    -1,   215,   172,    -1,   223,   322,   172,
     926      -1,   226,   322,   172,    -1,   230,   322,   172,    -1,   230,
     927     226,   322,   172,    -1,   223,   326,   134,   206,   172,    -1,
     928     226,   326,   134,   206,   172,    -1,   230,   326,   134,   206,
     929     172,    -1,   230,   226,   326,   134,   206,   172,    -1,   317,
     930      -1,   322,    -1,   330,    -1,   162,   123,   162,    -1,    -1,
     931      64,   109,   141,   110,   311,    -1,    -1,   312,    -1,   313,
     932      -1,   312,   313,    -1,    39,   109,   109,   314,   110,   110,
     933      -1,   315,    -1,   314,   116,   315,    -1,    -1,   316,    -1,
     934     316,   109,   169,   110,    -1,   271,    -1,   233,    -1,   234,
     935      -1,   227,    -1,   318,   311,    -1,   319,    -1,   320,   311,
     936      -1,   321,   311,    -1,   137,    -1,   109,   318,   110,    -1,
     937     119,   317,    -1,   119,   226,   317,    -1,   109,   319,   110,
     938      -1,   318,   348,    -1,   109,   319,   110,   348,    -1,   109,
     939     320,   110,   349,    -1,   109,   320,   110,    -1,   109,   319,
     940     110,   109,   134,   263,   135,   110,    -1,   109,   321,   110,
     941      -1,   323,   311,    -1,   324,    -1,   325,   311,    -1,   318,
     942     109,   134,   263,   135,   110,    -1,   109,   324,   110,   109,
     943     134,   263,   135,   110,    -1,   109,   323,   110,    -1,   119,
     944     322,    -1,   119,   226,   322,    -1,   109,   324,   110,    -1,
     945     109,   324,   110,   348,    -1,   109,   325,   110,   349,    -1,
     946     109,   325,   110,    -1,   327,    -1,   328,    -1,   329,    -1,
     947     318,   109,   270,   110,    -1,   109,   328,   110,   109,   270,
     948     110,    -1,   109,   327,   110,    -1,   119,   326,    -1,   119,
     949     226,   326,    -1,   109,   328,   110,    -1,   109,   328,   110,
     950     348,    -1,   109,   329,   110,   349,    -1,   109,   329,   110,
     951      -1,   331,   311,    -1,   332,    -1,   333,   311,    -1,   334,
     952     311,    -1,   340,    -1,   109,   331,   110,    -1,   119,   330,
     953      -1,   119,   226,   330,    -1,   109,   332,   110,    -1,   331,
     954     348,    -1,   109,   332,   110,   348,    -1,   109,   333,   110,
     955     349,    -1,   109,   333,   110,    -1,   331,   109,   134,   263,
     956     135,   110,    -1,   109,   332,   110,   109,   134,   263,   135,
     957     110,    -1,   109,   334,   110,    -1,   318,   311,    -1,   336,
     958      -1,   337,   311,    -1,   338,   311,    -1,   119,   335,    -1,
     959     119,   226,   335,    -1,   109,   336,   110,    -1,   318,   354,
     960      -1,   109,   336,   110,   348,    -1,   109,   337,   110,   349,
     961      -1,   109,   337,   110,    -1,   318,   109,   134,   263,   135,
     962     110,    -1,   109,   336,   110,   109,   134,   263,   135,   110,
     963      -1,   109,   338,   110,    -1,   340,   311,    -1,   341,    -1,
     964     342,   311,    -1,   343,   311,    -1,    74,    -1,    75,    -1,
     965     119,   339,    -1,   119,   226,   339,    -1,   109,   341,   110,
     966      -1,   340,   354,    -1,   109,   341,   110,   354,    -1,   340,
     967     109,   134,   263,   135,   110,    -1,   109,   341,   110,   109,
     968     134,   263,   135,   110,    -1,   345,    -1,   346,   311,    -1,
     969     347,   311,    -1,   119,    -1,   119,   226,    -1,   119,   344,
     970      -1,   119,   226,   344,    -1,   109,   345,   110,    -1,   348,
     971      -1,   109,   345,   110,   348,    -1,   109,   346,   110,   349,
     972      -1,   109,   346,   110,    -1,   109,   134,   263,   135,   110,
     973      -1,   109,   345,   110,   109,   134,   263,   135,   110,    -1,
     974     109,   347,   110,    -1,   111,   112,    -1,   111,   112,   349,
     975      -1,   349,    -1,   111,   134,   163,   135,   112,    -1,   111,
     976     134,   119,   135,   112,    -1,   349,   111,   134,   163,   135,
     977     112,    -1,   349,   111,   134,   119,   135,   112,    -1,   351,
     978      -1,   352,   311,    -1,   353,   311,    -1,   119,    -1,   119,
     979     226,    -1,   119,   350,    -1,   119,   226,   350,    -1,   109,
     980     351,   110,    -1,   354,    -1,   109,   351,   110,   354,    -1,
     981     109,   352,   110,   349,    -1,   109,   352,   110,    -1,   109,
     982     134,   263,   135,   110,    -1,   109,   351,   110,   109,   134,
     983     263,   135,   110,    -1,   109,   353,   110,    -1,   355,    -1,
     984     355,   349,    -1,   349,    -1,   111,   112,    -1,   111,   134,
     985     226,   119,   135,   112,    -1,   111,   134,   226,   135,   112,
     986      -1,   111,   134,   226,   163,   135,   112,    -1,   111,   134,
     987       7,   225,   163,   135,   112,    -1,   111,   134,   226,     7,
     988     163,   135,   112,    -1,   357,    -1,   358,   311,    -1,   359,
     989     311,    -1,   119,    -1,   119,   226,    -1,   119,   356,    -1,
     990     119,   226,   356,    -1,   109,   357,   110,    -1,   348,    -1,
     991     109,   357,   110,   348,    -1,   109,   358,   110,   349,    -1,
     992     109,   358,   110,    -1,   109,   357,   110,   109,   134,   263,
     993     135,   110,    -1,   109,   359,   110,    -1,   361,    -1,   369,
     994      -1,   226,   369,    -1,   362,    -1,   363,    -1,   119,   224,
     995      -1,   226,   119,   224,    -1,   119,   370,    -1,   226,   119,
     996     370,    -1,   119,   360,    -1,   226,   119,   360,    -1,   111,
     997     112,   224,    -1,   364,   224,    -1,   111,   112,   349,   224,
     998      -1,   364,   349,   224,    -1,   349,   224,    -1,   111,   112,
     999     362,    -1,   364,   362,    -1,   111,   112,   349,   362,    -1,
     1000     364,   349,   362,    -1,   349,   362,    -1,   111,   134,   226,
     1001     119,   135,   112,    -1,   111,   134,   226,   163,   135,   112,
     1002      -1,   111,   134,   230,   163,   135,   112,    -1,   111,   134,
     1003     230,   226,   163,   135,   112,    -1,   369,    -1,   226,   369,
     1004      -1,   366,    -1,   367,    -1,   368,    -1,   119,   224,    -1,
     1005     226,   119,   224,    -1,   119,   370,    -1,   226,   119,   370,
     1006      -1,   119,   365,    -1,   226,   119,   365,    -1,   111,   112,
     1007     224,    -1,   111,   112,   349,   224,    -1,   349,   224,    -1,
     1008     111,   112,   367,    -1,   111,   112,   349,   367,    -1,   349,
     1009     367,    -1,   111,   134,   262,   135,   112,    -1,   111,   112,
     1010     109,   259,   110,    -1,   369,   109,   134,   259,   135,   110,
     1011      -1,   217,   109,   134,   259,   135,   110,    -1,    -1,   116,
     1012      -1,    -1,   131,   163,    -1
    10131013};
    10141014
     
    10521052    1368,  1374,  1375,  1377,  1379,  1384,  1386,  1388,  1390,  1395,
    10531053    1396,  1398,  1400,  1405,  1406,  1408,  1413,  1414,  1416,  1418,
    1054     1423,  1425,  1427,  1432,  1433,  1437,  1439,  1441,  1443,  1445,
    1055     1450,  1452,  1457,  1459,  1464,  1465,  1467,  1468,  1473,  1474,
    1056     1476,  1478,  1483,  1485,  1491,  1492,  1494,  1497,  1500,  1505,
    1057     1506,  1511,  1516,  1520,  1522,  1524,  1529,  1531,  1537,  1538,
    1058     1546,  1547,  1551,  1552,  1553,  1555,  1557,  1564,  1565,  1567,
    1059     1569,  1574,  1575,  1581,  1582,  1586,  1587,  1592,  1593,  1594,
    1060     1596,  1604,  1605,  1607,  1610,  1612,  1616,  1617,  1618,  1620,
    1061     1622,  1626,  1631,  1639,  1640,  1649,  1651,  1656,  1657,  1658,
    1062     1662,  1663,  1664,  1668,  1669,  1670,  1674,  1675,  1676,  1681,
    1063     1682,  1683,  1684,  1690,  1691,  1693,  1698,  1699,  1704,  1705,
    1064     1706,  1707,  1708,  1723,  1724,  1729,  1730,  1738,  1740,  1742,
    1065     1745,  1747,  1749,  1772,  1773,  1775,  1777,  1782,  1783,  1785,
    1066     1790,  1795,  1796,  1802,  1801,  1805,  1809,  1811,  1813,  1819,
    1067     1820,  1825,  1830,  1832,  1837,  1839,  1840,  1842,  1847,  1849,
    1068     1851,  1856,  1858,  1863,  1868,  1876,  1882,  1881,  1895,  1896,
    1069     1901,  1902,  1906,  1911,  1916,  1924,  1929,  1940,  1941,  1952,
    1070     1953,  1959,  1960,  1964,  1965,  1966,  1969,  1968,  1979,  1984,
    1071     1989,  1995,  2004,  2010,  2016,  2022,  2028,  2036,  2042,  2050,
    1072     2056,  2065,  2066,  2067,  2071,  2075,  2077,  2082,  2083,  2087,
    1073     2088,  2093,  2099,  2100,  2103,  2105,  2106,  2110,  2111,  2112,
    1074     2113,  2147,  2149,  2150,  2152,  2157,  2162,  2167,  2169,  2171,
    1075     2176,  2178,  2180,  2182,  2187,  2189,  2199,  2201,  2202,  2207,
    1076     2209,  2211,  2216,  2218,  2220,  2225,  2227,  2229,  2238,  2239,
    1077     2240,  2244,  2246,  2248,  2253,  2255,  2257,  2262,  2264,  2266,
    1078     2281,  2283,  2284,  2286,  2291,  2292,  2297,  2299,  2301,  2306,
    1079     2308,  2310,  2312,  2317,  2319,  2321,  2331,  2333,  2334,  2336,
    1080     2341,  2343,  2345,  2350,  2352,  2354,  2356,  2361,  2363,  2365,
    1081     2396,  2398,  2399,  2401,  2406,  2411,  2419,  2421,  2423,  2428,
    1082     2430,  2435,  2437,  2451,  2452,  2454,  2459,  2461,  2463,  2465,
    1083     2467,  2472,  2473,  2475,  2477,  2482,  2484,  2486,  2492,  2494,
    1084     2496,  2500,  2502,  2504,  2506,  2520,  2521,  2523,  2528,  2530,
    1085     2532,  2534,  2536,  2541,  2542,  2544,  2546,  2551,  2553,  2555,
    1086     2561,  2562,  2564,  2573,  2576,  2578,  2581,  2583,  2585,  2598,
    1087     2599,  2601,  2606,  2608,  2610,  2612,  2614,  2619,  2620,  2622,
    1088     2624,  2629,  2631,  2639,  2640,  2641,  2646,  2647,  2651,  2653,
    1089     2655,  2657,  2659,  2661,  2668,  2670,  2672,  2674,  2676,  2678,
    1090     2680,  2682,  2684,  2686,  2691,  2693,  2695,  2700,  2726,  2727,
    1091     2729,  2733,  2734,  2738,  2740,  2742,  2744,  2746,  2748,  2755,
    1092     2757,  2759,  2761,  2763,  2765,  2770,  2775,  2777,  2779,  2797,
    1093     2799,  2804,  2805
     1054    1423,  1425,  1427,  1432,  1433,  1437,  1439,  1445,  1444,  1448,
     1055    1450,  1455,  1457,  1462,  1464,  1469,  1470,  1472,  1473,  1478,
     1056    1479,  1481,  1483,  1488,  1490,  1496,  1497,  1499,  1502,  1505,
     1057    1510,  1511,  1516,  1521,  1525,  1527,  1533,  1532,  1539,  1541,
     1058    1547,  1548,  1556,  1557,  1561,  1562,  1563,  1565,  1567,  1574,
     1059    1575,  1577,  1579,  1584,  1585,  1591,  1592,  1596,  1597,  1602,
     1060    1603,  1604,  1606,  1614,  1615,  1617,  1620,  1622,  1626,  1627,
     1061    1628,  1630,  1632,  1636,  1641,  1649,  1650,  1659,  1661,  1666,
     1062    1667,  1668,  1672,  1673,  1674,  1678,  1679,  1680,  1684,  1685,
     1063    1686,  1691,  1692,  1693,  1694,  1700,  1701,  1703,  1708,  1709,
     1064    1714,  1715,  1716,  1717,  1718,  1733,  1734,  1739,  1740,  1748,
     1065    1750,  1752,  1755,  1757,  1759,  1782,  1783,  1785,  1787,  1792,
     1066    1793,  1795,  1800,  1805,  1806,  1812,  1811,  1815,  1819,  1821,
     1067    1823,  1829,  1830,  1835,  1840,  1842,  1847,  1849,  1850,  1852,
     1068    1857,  1859,  1861,  1866,  1868,  1873,  1878,  1886,  1892,  1891,
     1069    1905,  1906,  1911,  1912,  1916,  1921,  1926,  1934,  1939,  1950,
     1070    1951,  1962,  1963,  1969,  1970,  1974,  1975,  1976,  1979,  1978,
     1071    1989,  1994,  1999,  2005,  2014,  2020,  2026,  2032,  2038,  2046,
     1072    2052,  2060,  2066,  2075,  2076,  2077,  2081,  2085,  2087,  2092,
     1073    2093,  2097,  2098,  2103,  2109,  2110,  2113,  2115,  2116,  2120,
     1074    2121,  2122,  2123,  2157,  2159,  2160,  2162,  2167,  2172,  2177,
     1075    2179,  2181,  2186,  2188,  2190,  2192,  2197,  2199,  2209,  2211,
     1076    2212,  2217,  2219,  2221,  2226,  2228,  2230,  2235,  2237,  2239,
     1077    2248,  2249,  2250,  2254,  2256,  2258,  2263,  2265,  2267,  2272,
     1078    2274,  2276,  2291,  2293,  2294,  2296,  2301,  2302,  2307,  2309,
     1079    2311,  2316,  2318,  2320,  2322,  2327,  2329,  2331,  2341,  2343,
     1080    2344,  2346,  2351,  2353,  2355,  2360,  2362,  2364,  2366,  2371,
     1081    2373,  2375,  2406,  2408,  2409,  2411,  2416,  2421,  2429,  2431,
     1082    2433,  2438,  2440,  2445,  2447,  2461,  2462,  2464,  2469,  2471,
     1083    2473,  2475,  2477,  2482,  2483,  2485,  2487,  2492,  2494,  2496,
     1084    2502,  2504,  2506,  2510,  2512,  2514,  2516,  2530,  2531,  2533,
     1085    2538,  2540,  2542,  2544,  2546,  2551,  2552,  2554,  2556,  2561,
     1086    2563,  2565,  2571,  2572,  2574,  2583,  2586,  2588,  2591,  2593,
     1087    2595,  2608,  2609,  2611,  2616,  2618,  2620,  2622,  2624,  2629,
     1088    2630,  2632,  2634,  2639,  2641,  2649,  2650,  2651,  2656,  2657,
     1089    2661,  2663,  2665,  2667,  2669,  2671,  2678,  2680,  2682,  2684,
     1090    2686,  2688,  2690,  2692,  2694,  2696,  2701,  2703,  2705,  2710,
     1091    2736,  2737,  2739,  2743,  2744,  2748,  2750,  2752,  2754,  2756,
     1092    2758,  2765,  2767,  2769,  2771,  2773,  2775,  2780,  2785,  2787,
     1093    2789,  2807,  2809,  2814,  2815
    10941094};
    10951095#endif
     
    11561156  "sue_declaration_specifier", "sue_type_specifier",
    11571157  "typedef_declaration_specifier", "typedef_type_specifier",
    1158   "elaborated_type_name", "aggregate_name", "aggregate_key",
     1158  "elaborated_type_name", "aggregate_name", "$@2", "aggregate_key",
    11591159  "field_declaration_list", "field_declaration",
    11601160  "new_field_declaring_list", "field_declaring_list", "field_declarator",
    11611161  "bit_subrange_size_opt", "bit_subrange_size", "enum_key", "enum_name",
    1162   "enumerator_list", "enumerator_value_opt", "new_parameter_type_list_opt",
    1163   "new_parameter_type_list", "new_parameter_list",
    1164   "new_abstract_parameter_list", "parameter_type_list_opt",
    1165   "parameter_type_list", "parameter_list", "new_parameter_declaration",
    1166   "new_abstract_parameter_declaration", "parameter_declaration",
    1167   "abstract_parameter_declaration", "identifier_list",
    1168   "identifier_or_type_name", "no_01_identifier_or_type_name",
    1169   "no_attr_identifier_or_type_name", "type_name_no_function", "type_name",
    1170   "initializer_opt", "initializer", "initializer_list", "designation",
    1171   "designator_list", "designator", "typegen_declaration_specifier",
    1172   "typegen_type_specifier", "typegen_name", "type_parameter_list",
    1173   "type_parameter", "$@2", "type_class", "assertion_list_opt", "assertion",
    1174   "type_name_list", "type_declaring_list", "type_declarator",
    1175   "type_declarator_name", "trait_specifier", "$@3",
    1176   "trait_declaration_list", "trait_declaration",
     1162  "$@3", "enumerator_list", "enumerator_value_opt",
     1163  "new_parameter_type_list_opt", "new_parameter_type_list",
     1164  "new_parameter_list", "new_abstract_parameter_list",
     1165  "parameter_type_list_opt", "parameter_type_list", "parameter_list",
     1166  "new_parameter_declaration", "new_abstract_parameter_declaration",
     1167  "parameter_declaration", "abstract_parameter_declaration",
     1168  "identifier_list", "identifier_or_type_name",
     1169  "no_01_identifier_or_type_name", "no_attr_identifier_or_type_name",
     1170  "type_name_no_function", "type_name", "initializer_opt", "initializer",
     1171  "initializer_list", "designation", "designator_list", "designator",
     1172  "typegen_declaration_specifier", "typegen_type_specifier",
     1173  "typegen_name", "type_parameter_list", "type_parameter", "$@4",
     1174  "type_class", "assertion_list_opt", "assertion", "type_name_list",
     1175  "type_declaring_list", "type_declarator", "type_declarator_name",
     1176  "trait_specifier", "$@5", "trait_declaration_list", "trait_declaration",
    11771177  "new_trait_declaring_list", "trait_declaring_list", "translation_unit",
    11781178  "external_definition_list", "external_definition_list_opt",
    1179   "external_definition", "$@4", "external_function_definition",
     1179  "external_definition", "$@6", "external_function_definition",
    11801180  "function_definition", "declarator", "subrange", "asm_name_opt",
    11811181  "attribute_list_opt", "attribute_list", "attribute",
     
    12691269     236,   237,   237,   237,   237,   238,   238,   238,   238,   239,
    12701270     239,   239,   239,   240,   240,   240,   241,   241,   241,   241,
    1271      242,   242,   242,   243,   243,   244,   244,   244,   244,   244,
    1272      245,   245,   246,   246,   247,   247,   247,   247,   248,   248,
    1273      248,   248,   249,   249,   250,   250,   250,   250,   250,   251,
    1274      251,   252,   253,   254,   254,   254,   255,   255,   256,   256,
    1275      257,   257,   258,   258,   258,   258,   258,   259,   259,   259,
    1276      259,   260,   260,   261,   261,   262,   262,   263,   263,   263,
    1277      263,   264,   264,   264,   264,   264,   265,   265,   265,   265,
    1278      265,   266,   266,   267,   267,   268,   268,   269,   269,   269,
    1279      270,   270,   270,   271,   271,   271,   272,   272,   272,   273,
    1280      273,   273,   273,   274,   274,   274,   275,   275,   276,   276,
    1281      276,   276,   276,   277,   277,   278,   278,   279,   279,   279,
    1282      279,   279,   279,   280,   280,   280,   280,   281,   281,   281,
    1283      282,   283,   283,   285,   284,   284,   286,   286,   286,   287,
    1284      287,   288,   288,   288,   289,   289,   289,   289,   290,   290,
    1285      290,   291,   291,   292,   292,   293,   294,   293,   295,   295,
    1286      296,   296,   297,   297,   297,   298,   298,   299,   299,   300,
    1287      300,   301,   301,   302,   302,   302,   303,   302,   302,   304,
    1288      304,   304,   305,   305,   305,   305,   305,   305,   305,   305,
    1289      305,   306,   306,   306,   307,   308,   308,   309,   309,   310,
    1290      310,   311,   312,   312,   313,   313,   313,   314,   314,   314,
    1291      314,   315,   315,   315,   315,   316,   316,   317,   317,   317,
    1292      318,   318,   318,   318,   319,   319,   320,   320,   320,   321,
    1293      321,   321,   322,   322,   322,   323,   323,   323,   324,   324,
    1294      324,   325,   325,   325,   326,   326,   326,   327,   327,   327,
    1295      328,   328,   328,   328,   329,   329,   330,   330,   330,   331,
    1296      331,   331,   331,   332,   332,   332,   333,   333,   333,   333,
    1297      334,   334,   334,   335,   335,   335,   335,   336,   336,   336,
    1298      337,   337,   337,   337,   338,   338,   339,   339,   339,   340,
    1299      340,   341,   341,   342,   342,   342,   343,   343,   343,   343,
    1300      343,   344,   344,   344,   344,   345,   345,   345,   346,   346,
    1301      346,   347,   347,   347,   347,   348,   348,   348,   349,   349,
    1302      349,   349,   349,   350,   350,   350,   350,   351,   351,   351,
    1303      352,   352,   352,   353,   353,   353,   353,   353,   353,   354,
    1304      354,   354,   355,   355,   355,   355,   355,   356,   356,   356,
    1305      356,   357,   357,   358,   358,   358,   359,   359,   360,   360,
    1306      360,   360,   360,   360,   361,   361,   361,   361,   361,   361,
    1307      361,   361,   361,   361,   362,   362,   362,   362,   363,   363,
    1308      363,   364,   364,   365,   365,   365,   365,   365,   365,   366,
    1309      366,   366,   366,   366,   366,   367,   368,   368,   368,   369,
    1310      369,   370,   370
     1271     242,   242,   242,   243,   243,   244,   244,   245,   244,   244,
     1272     244,   246,   246,   247,   247,   248,   248,   248,   248,   249,
     1273     249,   249,   249,   250,   250,   251,   251,   251,   251,   251,
     1274     252,   252,   253,   254,   255,   255,   256,   255,   257,   257,
     1275     258,   258,   259,   259,   260,   260,   260,   260,   260,   261,
     1276     261,   261,   261,   262,   262,   263,   263,   264,   264,   265,
     1277     265,   265,   265,   266,   266,   266,   266,   266,   267,   267,
     1278     267,   267,   267,   268,   268,   269,   269,   270,   270,   271,
     1279     271,   271,   272,   272,   272,   273,   273,   273,   274,   274,
     1280     274,   275,   275,   275,   275,   276,   276,   276,   277,   277,
     1281     278,   278,   278,   278,   278,   279,   279,   280,   280,   281,
     1282     281,   281,   281,   281,   281,   282,   282,   282,   282,   283,
     1283     283,   283,   284,   285,   285,   287,   286,   286,   288,   288,
     1284     288,   289,   289,   290,   290,   290,   291,   291,   291,   291,
     1285     292,   292,   292,   293,   293,   294,   294,   295,   296,   295,
     1286     297,   297,   298,   298,   299,   299,   299,   300,   300,   301,
     1287     301,   302,   302,   303,   303,   304,   304,   304,   305,   304,
     1288     304,   306,   306,   306,   307,   307,   307,   307,   307,   307,
     1289     307,   307,   307,   308,   308,   308,   309,   310,   310,   311,
     1290     311,   312,   312,   313,   314,   314,   315,   315,   315,   316,
     1291     316,   316,   316,   317,   317,   317,   317,   318,   318,   319,
     1292     319,   319,   320,   320,   320,   320,   321,   321,   322,   322,
     1293     322,   323,   323,   323,   324,   324,   324,   325,   325,   325,
     1294     326,   326,   326,   327,   327,   327,   328,   328,   328,   329,
     1295     329,   329,   330,   330,   330,   330,   331,   331,   332,   332,
     1296     332,   333,   333,   333,   333,   334,   334,   334,   335,   335,
     1297     335,   335,   336,   336,   336,   337,   337,   337,   337,   338,
     1298     338,   338,   339,   339,   339,   339,   340,   340,   341,   341,
     1299     341,   342,   342,   343,   343,   344,   344,   344,   345,   345,
     1300     345,   345,   345,   346,   346,   346,   346,   347,   347,   347,
     1301     348,   348,   348,   349,   349,   349,   349,   350,   350,   350,
     1302     351,   351,   351,   351,   351,   352,   352,   352,   352,   353,
     1303     353,   353,   354,   354,   354,   355,   355,   355,   355,   355,
     1304     355,   356,   356,   356,   357,   357,   357,   357,   357,   358,
     1305     358,   358,   358,   359,   359,   360,   360,   360,   361,   361,
     1306     362,   362,   362,   362,   362,   362,   363,   363,   363,   363,
     1307     363,   363,   363,   363,   363,   363,   364,   364,   364,   364,
     1308     365,   365,   365,   366,   366,   367,   367,   367,   367,   367,
     1309     367,   368,   368,   368,   368,   368,   368,   369,   370,   370,
     1310     370,   371,   371,   372,   372
    13111311};
    13121312
     
    13501350       3,     1,     2,     2,     2,     4,     4,     4,     4,     1,
    13511351       2,     2,     3,     1,     2,     2,     1,     2,     2,     3,
    1352        1,     2,     2,     1,     1,     4,     2,     5,     7,     2,
    1353        2,     2,     1,     2,     2,     3,     2,     3,     1,     2,
    1354        3,     2,     2,     4,     0,     1,     2,     2,     1,     0,
    1355        1,     2,     2,     5,     6,     2,     2,     4,     0,     2,
    1356        0,     1,     1,     1,     5,     5,     5,     1,     5,     5,
    1357        9,     1,     5,     0,     1,     1,     5,     1,     1,     5,
    1358        5,     1,     3,     3,     4,     1,     1,     1,     1,     2,
    1359        1,     3,     3,     1,     2,     1,     3,     1,     1,     1,
    1360        1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
    1361        1,     1,     2,     0,     2,     2,     1,     4,     0,     1,
    1362        2,     3,     4,     2,     2,     1,     2,     1,     2,     5,
    1363        5,     7,     6,     1,     2,     2,     3,     1,     2,     2,
    1364        4,     2,     4,     0,     4,     2,     1,     1,     1,     0,
    1365        2,     5,     5,    13,     1,     1,     3,     3,     2,     3,
    1366        3,     2,     4,     1,     6,     9,     0,    11,     1,     3,
    1367        3,     3,     1,     1,     5,     2,     5,     0,     1,     1,
    1368        3,     0,     1,     1,     1,     1,     0,     6,     2,     1,
    1369        2,     4,     2,     3,     3,     3,     4,     5,     5,     5,
    1370        6,     1,     1,     1,     3,     0,     5,     0,     1,     1,
    1371        2,     6,     1,     3,     0,     1,     4,     1,     1,     1,
    1372        1,     2,     1,     2,     2,     1,     3,     2,     3,     3,
    1373        2,     4,     4,     3,     8,     3,     2,     1,     2,     6,
    1374        8,     3,     2,     3,     3,     4,     4,     3,     1,     1,
    1375        1,     4,     6,     3,     2,     3,     3,     4,     4,     3,
    1376        2,     1,     2,     2,     1,     3,     2,     3,     3,     2,
    1377        4,     4,     3,     6,     8,     3,     2,     1,     2,     2,
    1378        2,     3,     3,     2,     4,     4,     3,     6,     8,     3,
    1379        2,     1,     2,     2,     1,     1,     2,     3,     3,     2,
    1380        4,     6,     8,     1,     2,     2,     1,     2,     2,     3,
    1381        3,     1,     4,     4,     3,     5,     8,     3,     2,     3,
    1382        1,     5,     5,     6,     6,     1,     2,     2,     1,     2,
     1352       1,     2,     2,     1,     1,     4,     2,     0,     6,     7,
     1353       2,     2,     2,     1,     2,     2,     3,     2,     3,     1,
     1354       2,     3,     2,     2,     4,     0,     1,     2,     2,     1,
     1355       0,     1,     2,     2,     5,     2,     0,     7,     2,     4,
     1356       0,     2,     0,     1,     1,     1,     5,     5,     5,     1,
     1357       5,     5,     9,     1,     5,     0,     1,     1,     5,     1,
     1358       1,     5,     5,     1,     3,     3,     4,     1,     1,     1,
     1359       1,     2,     1,     3,     3,     1,     2,     1,     3,     1,
     1360       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
     1361       2,     1,     1,     1,     2,     0,     2,     2,     1,     4,
     1362       0,     1,     2,     3,     4,     2,     2,     1,     2,     1,
     1363       2,     5,     5,     7,     6,     1,     2,     2,     3,     1,
     1364       2,     2,     4,     2,     4,     0,     4,     2,     1,     1,
     1365       1,     0,     2,     5,     5,    13,     1,     1,     3,     3,
     1366       2,     3,     3,     2,     4,     1,     6,     9,     0,    11,
     1367       1,     3,     3,     3,     1,     1,     5,     2,     5,     0,
     1368       1,     1,     3,     0,     1,     1,     1,     1,     0,     6,
     1369       2,     1,     2,     4,     2,     3,     3,     3,     4,     5,
     1370       5,     5,     6,     1,     1,     1,     3,     0,     5,     0,
     1371       1,     1,     2,     6,     1,     3,     0,     1,     4,     1,
     1372       1,     1,     1,     2,     1,     2,     2,     1,     3,     2,
     1373       3,     3,     2,     4,     4,     3,     8,     3,     2,     1,
     1374       2,     6,     8,     3,     2,     3,     3,     4,     4,     3,
     1375       1,     1,     1,     4,     6,     3,     2,     3,     3,     4,
     1376       4,     3,     2,     1,     2,     2,     1,     3,     2,     3,
     1377       3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
     1378       2,     2,     2,     3,     3,     2,     4,     4,     3,     6,
     1379       8,     3,     2,     1,     2,     2,     1,     1,     2,     3,
     1380       3,     2,     4,     6,     8,     1,     2,     2,     1,     2,
    13831381       2,     3,     3,     1,     4,     4,     3,     5,     8,     3,
    1384        1,     2,     1,     2,     6,     5,     6,     7,     7,     1,
    1385        2,     2,     1,     2,     2,     3,     3,     1,     4,     4,
    1386        3,     8,     3,     1,     1,     2,     1,     1,     2,     3,
    1387        2,     3,     2,     3,     3,     2,     4,     3,     2,     3,
    1388        2,     4,     3,     2,     6,     6,     6,     7,     1,     2,
    1389        1,     1,     1,     2,     3,     2,     3,     2,     3,     3,
    1390        4,     2,     3,     4,     2,     5,     5,     6,     6,     0,
    1391        1,     0,     2
     1382       2,     3,     1,     5,     5,     6,     6,     1,     2,     2,
     1383       1,     2,     2,     3,     3,     1,     4,     4,     3,     5,
     1384       8,     3,     1,     2,     1,     2,     6,     5,     6,     7,
     1385       7,     1,     2,     2,     1,     2,     2,     3,     3,     1,
     1386       4,     4,     3,     8,     3,     1,     1,     2,     1,     1,
     1387       2,     3,     2,     3,     2,     3,     3,     2,     4,     3,
     1388       2,     3,     2,     4,     3,     2,     6,     6,     6,     7,
     1389       1,     2,     1,     1,     1,     2,     3,     2,     3,     2,
     1390       3,     3,     4,     2,     3,     4,     2,     5,     5,     6,
     1391       6,     0,     1,     0,     2
    13921392};
    13931393
     
    13991399     294,   294,   315,   313,   316,   314,   317,   318,   300,   302,
    14001400     301,     0,   303,   329,   321,   326,   324,   325,   323,   322,
    1401      327,   328,   333,   330,   331,   332,   547,   547,   547,     0,
     1401     327,   328,   333,   330,   331,   332,   549,   549,   549,     0,
    14021402       0,     0,   294,   220,   304,   319,   320,     7,   360,     0,
    1403        8,    14,    15,     0,     2,   294,   565,     9,   525,   523,
    1404      247,     3,   453,     3,   260,     0,     3,     3,     3,   248,
     1403       8,    14,    15,     0,     2,   294,   567,     9,   527,   525,
     1404     247,     3,   455,     3,   260,     0,     3,     3,     3,   248,
    14051405       3,     0,     0,     0,   295,   296,   298,   294,   307,   310,
    14061406     312,   341,   286,   334,   339,   287,   349,   288,   356,   353,
    1407      363,     0,     0,   364,   289,   473,   477,     3,     3,     0,
    1408        2,   519,   524,   529,   299,     0,     0,   547,   577,   547,
    1409        2,   588,   589,   590,   294,     0,   731,   732,     0,    12,
     1407     363,     0,     0,   364,   289,   475,   479,     3,     3,     0,
     1408       2,   521,   526,   531,   299,     0,     0,   549,   579,   549,
     1409       2,   590,   591,   592,   294,     0,   733,   734,     0,    12,
    14101410     294,     0,    13,   270,   271,     0,   295,   290,   291,   292,
    1411      293,   526,   305,   392,   548,   549,   370,   371,    12,   444,
    1412      445,    11,   440,   443,     0,   503,   498,   489,   444,   445,
    1413        0,     0,   528,   221,     0,   294,     0,     0,     0,     0,
    1414        0,     0,     0,     0,   294,   294,     2,     0,   733,   295,
    1415      582,   594,   737,   730,   728,   735,     0,     0,     0,   254,
    1416        2,     0,   532,   438,   439,   437,     0,     0,     0,     0,
    1417      547,     0,   634,   635,     0,     0,   545,   541,   547,   562,
    1418      547,   547,   542,     2,   543,   547,   601,   547,   547,   604,
     1411     293,   528,   305,   393,   550,   551,   371,   372,    12,   446,
     1412     447,    11,   442,   445,     0,   505,   500,   491,   446,   447,
     1413       0,     0,   530,   221,     0,   294,     0,     0,     0,     0,
     1414       0,     0,     0,     0,   294,   294,     2,     0,   735,   295,
     1415     584,   596,   739,   732,   730,   737,     0,     0,     0,   254,
     1416       2,     0,   534,   440,   441,   439,     0,     0,     0,     0,
     1417     549,     0,   636,   637,     0,     0,   547,   543,   549,   564,
     1418     549,   549,   544,     2,   545,   549,   603,   549,   549,   606,
    14191419       0,     0,     0,   294,   294,   313,   361,     2,   294,   261,
    1420      297,   308,   342,   354,   478,     0,     2,     0,   453,   262,
    1421      295,   335,   350,   357,   474,     0,     2,     0,   311,   336,
    1422      343,   344,     0,   351,   355,   358,   362,   445,   294,   294,
    1423      366,   369,     0,   395,   475,   479,     0,     0,     0,     1,
    1424      294,     2,   530,   576,   578,   294,     2,   741,   295,   744,
    1425      545,   545,   295,     0,     0,     0,   273,   547,   542,     2,
    1426      294,     0,     0,   294,   550,     2,   501,     2,   554,     0,
     1420     297,   308,   342,   354,   480,     0,     2,     0,   455,   262,
     1421     295,   335,   350,   357,   476,     0,     2,     0,   311,   336,
     1422     343,   344,     0,   351,   355,   358,   362,   447,   294,   294,
     1423     366,   370,     0,   395,   477,   481,     0,     0,     0,     1,
     1424     294,     2,   532,   578,   580,   294,     2,   743,   295,   746,
     1425     547,   547,   295,     0,     0,     0,   273,   549,   544,     2,
     1426     294,     0,     0,   294,   552,     2,   503,     2,   556,     0,
    14271427       0,     0,     0,     0,     0,    18,    59,     4,     5,     6,
    14281428      16,     0,     0,     0,   294,     2,     0,   294,    65,    66,
    14291429      67,    68,    48,    19,    49,    22,    47,    69,     0,    72,
    14301430      76,    79,    82,    87,    90,    92,    94,    96,    98,   100,
    1431      105,   495,   751,   451,   494,     0,   449,   450,     0,   566,
    1432      581,   584,   587,   593,   596,   599,   360,     0,     2,   739,
    1433        0,   294,   742,     2,   294,     3,   425,     0,   433,   295,
    1434      294,   307,   334,   287,   349,   356,     3,     3,   407,   411,
    1435      421,   426,   473,   294,   427,   706,   707,   294,   428,   430,
    1436      294,     2,   583,   595,   729,     2,     2,   249,     2,   458,
    1437        0,   456,   455,   454,   141,     2,     2,   251,     2,     2,
     1431     105,   497,   753,   453,   496,     0,   451,   452,     0,   568,
     1432     583,   586,   589,   595,   598,   601,   360,     0,     2,   741,
     1433       0,   294,   744,     2,   294,     3,   427,     0,   435,   295,
     1434     294,   307,   334,   287,   349,   356,     3,     3,   409,   413,
     1435     423,   428,   475,   294,   429,   708,   709,   294,   430,   432,
     1436     294,     2,   585,   597,   731,     2,     2,   249,     2,   460,
     1437       0,   458,   457,   456,   141,     2,     2,   251,     2,     2,
    14381438     250,     2,   281,     2,   282,     0,   280,     0,     0,     0,
    1439        0,     0,     0,     0,     0,     0,   567,   606,     0,   453,
    1440        2,   561,   570,   660,   563,   564,   533,   294,     2,   600,
    1441      609,   602,   603,     0,   276,   294,   294,   340,   295,     0,
    1442      295,     0,   294,   734,   738,   736,   534,   294,   545,   255,
    1443      263,   309,     0,     2,   535,   294,   499,   337,   338,   283,
    1444      352,   359,     0,   294,     2,   384,   294,   372,     0,     0,
    1445      378,   728,   294,   749,   398,     0,   476,   500,   252,   253,
    1446      520,   294,   435,     0,   294,   237,     0,     2,   239,     0,
     1439       0,     0,     0,     0,     0,     0,   569,   608,     0,   455,
     1440       2,   563,   572,   662,   565,   566,   535,   294,     2,   602,
     1441     611,   604,   605,     0,   276,   294,   294,   340,   295,     0,
     1442     295,     0,   294,   736,   740,   738,   536,   294,   547,   255,
     1443     263,   309,     0,     2,   537,   294,   501,   337,   338,   283,
     1444     352,   359,     0,   294,     2,   385,   294,   373,     0,     0,
     1445     379,   730,     0,   751,   400,     0,   478,   502,   252,   253,
     1446     522,   294,   437,     0,   294,   237,     0,     2,   239,     0,
    14471447     295,     0,   257,     2,   258,   278,     0,     0,     2,   294,
    1448      545,   294,   486,   488,   487,     0,     0,   751,     0,   294,
    1449        0,   294,   490,   294,   560,   558,   559,   557,     0,   552,
    1450      555,     0,     0,   294,    56,   294,    69,    52,   294,    62,
    1451      294,   294,    50,    51,    64,     2,   127,     0,     0,   447,
    1452        0,   446,   111,   294,    54,    55,    17,     0,    29,    30,
     1448     547,   294,   488,   490,   489,     0,     0,   753,     0,   294,
     1449       0,   294,   492,   294,   562,   560,   561,   559,     0,   554,
     1450     557,     0,     0,   294,    56,   294,    69,    52,   294,    62,
     1451     294,   294,    50,    51,    64,     2,   127,     0,     0,   449,
     1452       0,   448,   111,   294,    54,    55,    17,     0,    29,    30,
    14531453      35,     2,     0,    35,   117,   118,   119,   120,   121,   122,
    14541454     123,   124,   125,   126,     0,     0,    53,     0,     0,     0,
    14551455       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1456        0,     0,     0,     0,     0,     0,     0,   108,     2,   646,
    1457      452,   643,   547,   547,   651,   480,   294,     2,   585,   586,
    1458        0,   597,   598,     0,     2,   740,   743,   111,   294,     2,
    1459      294,     0,   708,   295,   712,   703,   704,   710,     0,     2,
    1460        2,   668,   547,   751,   617,   547,   547,   751,   547,   631,
    1461      547,   547,   682,   434,   665,   547,   547,   673,   680,   294,
    1462      429,   295,     0,     0,   294,   718,   295,   723,   751,   715,
    1463      294,   720,   751,   294,   294,   294,     0,   111,     0,    18,
    1464        5,     2,     0,    19,     0,   459,   749,     0,     0,   465,
    1465      241,     0,   294,     0,     0,     0,   545,   569,   573,   575,
    1466      605,   608,   612,   615,   568,   607,     0,   284,   658,     0,
     1456       0,     0,     0,     0,     0,     0,     0,   108,     2,   648,
     1457     454,   645,   549,   549,   653,   482,   294,     2,   587,   588,
     1458       0,   599,   600,     0,     2,   742,   745,   111,   294,     2,
     1459     294,     0,   710,   295,   714,   705,   706,   712,     0,     2,
     1460       2,   670,   549,   753,   619,   549,   549,   753,   549,   633,
     1461     549,   549,   684,   436,   667,   549,   549,   675,   682,   294,
     1462     431,   295,     0,     0,   294,   720,   295,   725,   753,   717,
     1463     294,   722,   753,   294,   294,   294,     0,   111,     0,    18,
     1464       5,     2,     0,    19,     0,   461,   751,     0,     0,   467,
     1465     241,     0,   294,     0,     0,     0,   547,   571,   575,   577,
     1466     607,   610,   614,   617,   570,   609,     0,   284,   660,     0,
    14671467     294,   277,     0,     0,     0,     0,   275,     2,     0,   259,
    1468      536,   294,     0,     0,     0,     0,   294,   294,     0,     0,
    1469      692,   382,   385,   389,   547,   389,   697,   388,   689,   547,
    1470      547,   365,   373,   381,   374,   547,   376,   379,   294,   750,
    1471        0,     0,   396,   749,   295,     3,   414,     3,   418,   417,
    1472      591,     0,   531,   294,     3,     3,   294,   433,   295,     3,
    1473      427,   428,     2,     0,     0,     0,   485,   306,   294,   481,
    1474      483,     3,     2,     2,     0,   502,     3,     0,   554,   129,
     1468     538,   294,     0,     0,     0,     0,   294,   294,     0,     0,
     1469     694,   383,   386,   390,   549,   390,   699,   389,   691,   549,
     1470     549,   365,   374,   382,   375,   549,   377,   380,   294,   752,
     1471       0,     0,   398,     0,   295,     3,   416,     3,   420,   419,
     1472     593,     0,   533,   294,     3,     3,   294,   435,   295,     3,
     1473     429,   430,     2,     0,     0,     0,   487,   306,   294,   483,
     1474     485,     3,     2,     2,     0,   504,     3,     0,   556,   129,
    14751475       0,     0,   222,     0,     0,     0,     2,     0,     0,    36,
    1476        0,     0,   111,   294,    20,     0,    21,     0,   692,   448,
     1476       0,     0,   111,   294,    20,     0,    21,     0,   694,   450,
    14771477       0,   109,     3,     2,    27,     2,     0,    33,     0,     2,
    14781478      25,     0,   106,   107,    73,    74,    75,    77,    78,    80,
    14791479      81,    85,    86,    83,    84,    88,    89,    91,    93,    95,
    1480       97,    99,     0,     0,   752,   294,     0,     0,     0,   647,
    1481      648,   644,   645,   497,   496,   294,     0,     3,   294,   714,
    1482      294,   719,   295,   294,   294,   294,   662,   705,   661,     2,
    1483      294,     0,     0,     0,     0,     0,     0,     0,     0,   683,
    1484        0,   669,   620,   636,   670,     2,   616,   623,   431,   618,
    1485      619,   432,     2,   630,   639,   632,   633,   666,   667,   681,
    1486      709,   713,   711,   751,   268,     2,   745,     2,   422,   717,
    1487      722,   423,     0,   401,     3,     3,     3,     3,   453,     3,
    1488        0,     2,   468,   464,   750,     0,   460,   467,     2,   463,
    1489      466,     0,   294,   242,   264,     3,   272,   274,     0,   453,
    1490        2,   571,   572,     2,   610,   611,     0,   659,   537,     3,
    1491      346,   345,   348,   347,   294,   538,     0,   539,   294,   375,
    1492      377,     2,     0,     0,     0,     0,   104,   391,   693,   694,
    1493      386,   390,   387,   690,   691,   380,   384,   367,   398,   393,
    1494      399,     0,     0,     0,   436,   240,     0,     0,     3,     2,
    1495      668,   429,     0,   527,     0,   751,   489,     0,   294,   294,
    1496      294,     0,   551,   553,   130,     0,     0,   215,     0,     0,
     1480      97,    99,     0,     0,   754,   294,     0,     0,     0,   649,
     1481     650,   646,   647,   499,   498,   294,     0,     3,   294,   716,
     1482     294,   721,   295,   294,   294,   294,   664,   707,   663,     2,
     1483     294,     0,     0,     0,     0,     0,     0,     0,     0,   685,
     1484       0,   671,   622,   638,   672,     2,   618,   625,   433,   620,
     1485     621,   434,     2,   632,   641,   634,   635,   668,   669,   683,
     1486     711,   715,   713,   753,   268,     2,   747,     2,   424,   719,
     1487     724,   425,     0,   403,     3,     3,     3,     3,   455,     3,
     1488       0,     2,   470,   466,   752,     0,   462,   469,     2,   465,
     1489     468,     0,   294,   242,   264,     3,   272,   274,     0,   455,
     1490       2,   573,   574,     2,   612,   613,     0,   661,   539,     3,
     1491     346,   345,   348,   347,   294,   540,     0,   541,   294,   376,
     1492     378,     2,     0,     0,     0,     0,   104,   392,   695,   696,
     1493     387,   391,   388,   692,   693,   381,   385,   294,   400,   394,
     1494     401,   751,     0,     0,   438,   240,     0,     0,     3,     2,
     1495     670,   431,     0,   529,     0,   753,   491,     0,   294,   294,
     1496     294,     0,   553,   555,   130,     0,     0,   215,     0,     0,
    14971497       0,   223,   224,    57,     0,    63,   294,     0,    61,    60,
    1498        0,   128,   693,   458,    70,    71,   110,   115,     3,   109,
     1498       0,   128,   695,   460,    70,    71,   110,   115,     3,   109,
    14991499       0,     0,     0,    24,    35,     3,     0,    32,   102,     0,
    1500        3,   650,   654,   657,   649,     3,   592,     3,   716,   721,
    1501        2,   294,     3,     3,   295,     0,     3,   622,   626,   629,
    1502      638,   672,   676,   679,   294,     3,   621,   637,   671,   294,
    1503      294,   424,   294,   294,   746,     0,     0,     0,     0,   256,
    1504        0,   104,     0,     3,     3,     0,   461,     0,   457,     0,
     1500       3,   652,   656,   659,   651,     3,   594,     3,   718,   723,
     1501       2,   294,     3,     3,   295,     0,     3,   624,   628,   631,
     1502     640,   674,   678,   681,   294,     3,   623,   639,   673,   294,
     1503     294,   426,   294,   294,   748,     0,     0,     0,     0,   256,
     1504       0,   104,     0,     3,     3,     0,   463,     0,   459,     0,
    15051505       0,   245,   294,     0,     0,   129,     0,     0,     0,     0,
    15061506       0,   129,     0,     0,   109,   109,     2,     0,     0,     0,
    15071507       3,   131,   132,     2,   143,   133,   134,   135,   136,   137,
    1508      138,   145,   147,     0,     0,     0,   285,   294,   294,   547,
    1509        0,   540,   294,   111,   696,   700,   702,   695,   383,   397,
    1510      394,   579,     2,   664,   663,     0,   669,     2,   482,   484,
    1511      504,     3,   512,   513,     0,     2,   508,     3,     3,     0,
    1512        0,   556,   222,     0,     0,     0,   222,     0,     0,     3,
    1513       37,   749,   109,     0,     3,   661,    42,     3,    40,     3,
    1514       34,     0,     3,   101,   103,     0,     2,   652,   653,     0,
    1515        0,   294,     0,     0,     0,     3,   638,     0,     2,   624,
    1516      625,     2,   640,     2,   674,   675,     0,     0,     3,     0,
    1517        3,     3,     3,     3,   409,   408,   412,     2,     2,   748,
    1518      747,   112,     0,     0,     0,     0,     3,   462,     3,     0,
    1519      243,   146,     3,   295,   294,     0,     0,     0,     0,     2,
    1520      191,     0,   189,     0,     0,     0,     0,     0,     0,     0,
    1521        0,   111,     0,   547,   151,   148,   294,     0,     0,   267,
    1522      279,     3,     3,   546,   613,   368,     2,   698,   699,   294,
    1523      266,   294,     0,   515,   492,   294,     0,     0,   491,   506,
    1524        0,     0,     0,   216,     0,   225,    58,   109,     0,     0,
    1525      116,   113,     0,     0,     0,     0,     0,     0,    23,     0,
    1526      655,   294,   580,   265,   724,   725,   726,     0,   677,   294,
    1527      294,   294,     3,     3,     0,   685,     0,     0,     0,     0,
    1528      294,   294,     3,   544,   469,   470,     0,     0,   246,   295,
    1529        0,     0,     0,     0,   294,   192,   190,     0,   187,   193,
    1530        0,     0,     0,     0,   197,   200,   198,   194,     0,   195,
    1531       35,   129,   144,   142,   244,     0,     0,   294,   416,   420,
    1532      419,     0,   509,     2,   510,     2,   511,   505,   294,   228,
    1533        0,   226,     0,   228,     3,   661,    31,   114,     2,    45,
    1534        2,    43,    41,    28,   112,    26,     3,   727,     3,     3,
    1535        3,     0,     0,   684,   686,   627,   641,   269,     2,   406,
    1536        3,   405,     0,   472,   469,   129,     0,     0,   129,     3,
    1537        0,   129,   188,     0,     2,     2,   209,   199,     0,     0,
    1538        0,     0,   140,   574,   614,     3,     2,     0,     0,     2,
    1539      229,     0,     0,   217,     0,     0,     0,     0,     0,     0,
    1540        0,     0,     0,   687,   688,   294,     0,   471,   152,     0,
    1541        0,     2,   165,   129,   154,     0,   182,     0,   129,     0,
    1542        2,   156,     0,     2,     0,     2,     2,     2,   196,    32,
    1543        0,   294,   514,   516,   507,     0,     0,     0,     0,   114,
    1544       38,     3,     3,   656,   628,   642,   678,   410,   129,   158,
    1545      161,     0,   160,   164,     3,   167,   166,     0,   129,   184,
    1546      129,     3,     0,   294,     0,   294,     0,     2,     0,     2,
    1547      139,   701,     2,   230,   231,     0,   227,   218,     0,     0,
    1548        0,   153,     0,     0,   163,   233,   168,     2,   235,   183,
    1549        0,   186,   172,   201,     3,   210,   214,   203,     3,     0,
    1550      294,     0,   294,     0,     0,     0,    39,    46,    44,   159,
    1551      162,   129,     0,   169,   294,   129,   129,     0,   173,     0,
    1552        0,   692,   211,   212,   213,     0,   202,     3,   204,     3,
    1553      294,   219,   232,   149,   170,   155,   129,   236,   185,   180,
    1554      178,   174,   157,   129,     0,   693,     0,     0,     0,     0,
    1555      150,   171,   181,   175,   179,   178,   176,     3,     3,     0,
    1556        0,   493,   177,   205,   207,     3,     3,   206,   208
     1508     138,   145,   147,     0,     0,     0,   285,   294,   294,   549,
     1509       0,   542,   294,   111,   698,   702,   704,   697,   384,   368,
     1510     399,     0,   581,     2,   666,   665,     0,   671,     2,   484,
     1511     486,   506,     3,   514,   515,     0,     2,   510,     3,     3,
     1512       0,     0,   558,   222,     0,     0,     0,   222,     0,     0,
     1513       3,    37,   751,   109,     0,     3,   663,    42,     3,    40,
     1514       3,    34,     0,     3,   101,   103,     0,     2,   654,   655,
     1515       0,     0,   294,     0,     0,     0,     3,   640,     0,     2,
     1516     626,   627,     2,   642,     2,   676,   677,     0,     0,     3,
     1517       0,     3,     3,     3,     3,   411,   410,   414,     2,     2,
     1518     750,   749,   112,     0,     0,     0,     0,     3,   464,     3,
     1519       0,   243,   146,     3,   295,   294,     0,     0,     0,     0,
     1520       2,   191,     0,   189,     0,     0,     0,     0,     0,     0,
     1521       0,     0,   111,     0,   549,   151,   148,   294,     0,     0,
     1522     267,   279,     3,     3,   548,   615,   369,     2,   700,   701,
     1523     397,   294,   266,   294,     0,   517,   494,   294,     0,     0,
     1524     493,   508,     0,     0,     0,   216,     0,   225,    58,   109,
     1525       0,     0,   116,   113,     0,     0,     0,     0,     0,     0,
     1526      23,     0,   657,   294,   582,   265,   726,   727,   728,     0,
     1527     679,   294,   294,   294,     3,     3,     0,   687,     0,     0,
     1528       0,     0,   294,   294,     3,   546,   471,   472,     0,     0,
     1529     246,   295,     0,     0,     0,     0,   294,   192,   190,     0,
     1530     187,   193,     0,     0,     0,     0,   197,   200,   198,   194,
     1531       0,   195,    35,   129,   144,   142,   244,     0,     0,   294,
     1532     418,   422,   421,     0,   511,     2,   512,     2,   513,   507,
     1533     294,   228,     0,   226,     0,   228,     3,   663,    31,   114,
     1534       2,    45,     2,    43,    41,    28,   112,    26,     3,   729,
     1535       3,     3,     3,     0,     0,   686,   688,   629,   643,   269,
     1536       2,   408,     3,   407,     0,   474,   471,   129,     0,     0,
     1537     129,     3,     0,   129,   188,     0,     2,     2,   209,   199,
     1538       0,     0,     0,     0,   140,   576,   616,     3,     2,     0,
     1539       0,     2,   229,     0,     0,   217,     0,     0,     0,     0,
     1540       0,     0,     0,     0,     0,   689,   690,   294,     0,   473,
     1541     152,     0,     0,     2,   165,   129,   154,     0,   182,     0,
     1542     129,     0,     2,   156,     0,     2,     0,     2,     2,     2,
     1543     196,    32,     0,   294,   516,   518,   509,     0,     0,     0,
     1544       0,   114,    38,     3,     3,   658,   630,   644,   680,   412,
     1545     129,   158,   161,     0,   160,   164,     3,   167,   166,     0,
     1546     129,   184,   129,     3,     0,   294,     0,   294,     0,     2,
     1547       0,     2,   139,   703,     2,   230,   231,     0,   227,   218,
     1548       0,     0,     0,   153,     0,     0,   163,   233,   168,     2,
     1549     235,   183,     0,   186,   172,   201,     3,   210,   214,   203,
     1550       3,     0,   294,     0,   294,     0,     0,     0,    39,    46,
     1551      44,   159,   162,   129,     0,   169,   294,   129,   129,     0,
     1552     173,     0,     0,   694,   211,   212,   213,     0,   202,     3,
     1553     204,     3,   294,   219,   232,   149,   170,   155,   129,   236,
     1554     185,   180,   178,   174,   157,   129,     0,   695,     0,     0,
     1555       0,     0,   150,   171,   181,   175,   179,   178,   176,     3,
     1556       3,     0,     0,   495,   177,   205,   207,     3,     3,   206,
     1557     208
    15571558};
    15581559
     
    15611562{
    15621563      -1,   840,   475,   302,    46,   132,   133,   303,   304,   305,
    1563      306,   786,   787,  1147,  1148,   307,   308,   309,   310,   311,
     1564     306,   786,   787,  1148,  1149,   307,   308,   309,   310,   311,
    15641565     312,   313,   314,   315,   316,   317,   318,   319,   320,  1052,
    1565      526,   997,   322,   998,   555,   974,  1079,  1543,  1081,  1082,
    1566     1083,  1084,  1544,  1085,  1086,  1460,  1461,  1422,  1423,  1424,
    1567     1522,  1523,  1527,  1528,  1563,  1564,  1087,  1380,  1088,  1089,
    1568     1314,  1315,  1316,  1504,  1090,   144,   980,   981,   982,  1401,
    1569     1485,  1496,  1497,   476,   477,   902,   903,  1060,    49,    50,
     1566     526,   997,   322,   998,   555,   974,  1079,  1545,  1081,  1082,
     1567    1083,  1084,  1546,  1085,  1086,  1462,  1463,  1424,  1425,  1426,
     1568    1524,  1525,  1529,  1530,  1565,  1566,  1087,  1382,  1088,  1089,
     1569    1316,  1317,  1318,  1506,  1090,   144,   980,   981,   982,  1403,
     1570    1487,  1498,  1499,   476,   477,   902,   903,  1060,    49,    50,
    15701571      51,    52,    53,   346,   157,    56,    57,    58,    59,    60,
    15711572     348,    62,    63,   262,    65,    66,   273,   350,   351,    69,
    15721573      70,    71,    72,   117,    74,   203,   353,   118,    77,   119,
    1573       79,    80,    81,   456,   457,   458,   459,   701,   940,   702,
    1574       82,    83,   463,   722,   882,   883,   356,   357,   725,   726,
    1575      727,   358,   359,   360,   361,   473,   340,   134,   135,   530,
    1576      324,   169,   655,   656,   657,   658,   659,    84,   120,    86,
    1577      496,   497,   966,   498,   276,   502,   325,    87,   136,   137,
    1578       88,  1338,  1125,  1126,  1127,  1128,    89,    90,   743,    91,
    1579      272,    92,    93,   186,  1054,   689,   411,   124,    94,   508,
    1580      509,   510,   187,   267,   189,   190,   191,   268,    97,    98,
    1581       99,   100,   101,   102,   103,   194,   195,   196,   197,   198,
    1582      852,   614,   615,   616,   617,   199,   619,   620,   621,   580,
    1583      581,   582,   583,   706,   104,   623,   624,   625,   626,   627,
    1584      628,   939,   708,   709,   710,   604,   364,   365,   366,   367,
    1585      326,   163,   106,   107,   108,   369,   720,   577
     1574      79,    80,   462,    81,   456,   457,   458,   459,   701,   940,
     1575     702,    82,    83,   465,   463,   722,   882,   883,   356,   357,
     1576     725,   726,   727,   358,   359,   360,   361,   473,   340,   134,
     1577     135,   530,   324,   169,   655,   656,   657,   658,   659,    84,
     1578     120,    86,   496,   497,   966,   498,   276,   502,   325,    87,
     1579     136,   137,    88,  1340,  1126,  1127,  1128,  1129,    89,    90,
     1580     743,    91,   272,    92,    93,   186,  1054,   689,   411,   124,
     1581      94,   508,   509,   510,   187,   267,   189,   190,   191,   268,
     1582      97,    98,    99,   100,   101,   102,   103,   194,   195,   196,
     1583     197,   198,   852,   614,   615,   616,   617,   199,   619,   620,
     1584     621,   580,   581,   582,   583,   706,   104,   623,   624,   625,
     1585     626,   627,   628,   939,   708,   709,   710,   604,   364,   365,
     1586     366,   367,   326,   163,   106,   107,   108,   369,   720,   577
    15861587};
    15871588
    15881589/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    15891590   STATE-NUM.  */
    1590 #define YYPACT_NINF -1356
     1591#define YYPACT_NINF -1332
    15911592static const yytype_int16 yypact[] =
    15921593{
    1593     5863,  4890, -1356,    65, -1356, -1356, -1356, -1356, -1356, -1356,
    1594    -1356,     9, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
    1595    -1356, -1356, -1356, -1356, -1356, -1356,   139,   139,   139,  1216,
    1596      781,    63,  4761,   238, -1356, -1356, -1356, -1356, -1356,   165,
    1597    -1356, -1356, -1356,   572,   207,  2350, -1356, -1356, -1356, -1356,
    1598    -1356, -1356,    59,   217, -1356,  1506, -1356, -1356, -1356, -1356,
    1599      220,  1734,   341,    66,  7480, -1356, -1356,  9240,  1240, -1356,
    1600    -1356, -1356,  1320,   351,  3183,  1125,   757,  1320,  1149, -1356,
    1601    -1356,  1042,   895, -1356,  1320,  1227, -1356,   243, -1356,   378,
    1602      403, -1356, -1356, -1356, -1356,   303,   217,   139, -1356,   139,
    1603    -1356, -1356, -1356, -1356,  9019,  1506, -1356, -1356,  1506, -1356,
    1604     9774,   314, -1356, -1356, -1356,  1811,  9812, -1356,   726,   726,
    1605      726, -1356, -1356, -1356,   139, -1356, -1356, -1356,   353,   381,
    1606      400, -1356, -1356, -1356,   417, -1356, -1356, -1356, -1356, -1356,
    1607      424,   436, -1356, -1356,    28,  8867,  2398,   371,   447,   459,
    1608      467,   482,   495,   557,  8670,  6999,   468,   584, -1356,  9350,
    1609    -1356, -1356, -1356, -1356,   594, -1356,   335,  4628,  4628, -1356,
    1610      575,   352, -1356, -1356, -1356, -1356,   602,   432,   434,   470,
    1611      139,   624, -1356, -1356,  1734,  1711,   656, -1356,    68, -1356,
    1612      139,   139,   217, -1356, -1356,    93, -1356,   139,   139, -1356,
    1613     2093,   670,   699,   726,  6910, -1356, -1356,   654,  2350, -1356,
    1614    -1356,  1320, -1356, -1356, -1356,   217, -1356,  1506,    59, -1356,
    1615     7819, -1356,   726,   726,   726,   217, -1356,  1216, -1356,  6673,
    1616    -1356, -1356,   659,   726, -1356,   726, -1356,   165,  8867,  8784,
    1617      714, -1356,   781,   740,   726, -1356,  1216,   737,   749, -1356,
    1618     4761,   791, -1356, -1356, -1356,  4061, -1356, -1356,  7390, -1356,
    1619      656,    62,  9812, 10718,  1811,  2093, -1356,   152, -1356, -1356,
    1620     9774,  1506,   770,  7511, -1356, -1356,   269, -1356,  3425,   779,
    1621      827,  3643,   814, 10872, 10930, -1356,   817, -1356, -1356, -1356,
    1622    -1356, 10949, 10949,   791,  8525,   818, 10872,  8981, -1356, -1356,
    1623    -1356, -1356, -1356, -1356,   855, -1356,   889,  2173, 10872, -1356,
    1624      498,   751,   809,   524,   880,   822,   831,   819,   869,     5,
    1625    -1356, -1356,   883,    64, -1356,   116, -1356, -1356,  2398, -1356,
    1626    -1356,   516,   900, -1356,   644,   900,   913,   165, -1356, -1356,
    1627      915,  9019, -1356,   916,  8639, -1356, -1356,  1004,  1539,  8240,
    1628     6910,  1320, -1356,  1320,   726,   726, -1356, -1356, -1356, -1356,
    1629    -1356, -1356,   726,  9885,  1506, -1356, -1356,  9923,  1500, -1356,
    1630     7969, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   929,  5043,
    1631    10872, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
    1632    -1356, -1356, -1356, -1356, -1356,  1811, -1356,   876,   936,   938,
    1633      944,   885,   947,   954,   957,  1711, -1356, -1356,   930,    59,
    1634      960, -1356, -1356,   970, -1356, -1356, -1356,  4061, -1356, -1356,
    1635    -1356, -1356, -1356,  2093, -1356,  8867,  8867, -1356,   726,  1811,
    1636     7030,  1506,  8313, -1356, -1356, -1356, -1356,  4061,    62, -1356,
    1637    -1356,  1320,   217, -1356, -1356,  4061, -1356,  6793, -1356, -1356,
    1638      726,   726,   472,  9953,   974,  1092,  5671, -1356,   521,   543,
    1639      781, -1356,  8784,   976,   959,   781,   726, -1356, -1356, -1356,
    1640    -1356, 10252, -1356,   560,  6550, -1356,   217,   981, -1356,  1811,
    1641    11070, 10776, -1356, -1356, -1356, -1356,   921,  2093, -1356,  8386,
    1642      656,  6061, -1356, -1356, -1356,   820,   612,   883,   781,  7511,
    1643     1338,  9774, -1356,  7511, -1356, -1356, -1356, -1356,   638, -1356,
    1644      994,   827,   255,  8525, -1356,  9953, -1356, -1356,  8525, -1356,
    1645     8753,  8525, -1356, -1356, -1356,   993, -1356,   665,   998,   161,
    1646     1002, -1356,  9490,  6639, -1356, -1356, -1356,   290, -1356, -1356,
    1647    10795, -1356,   366, 10795, -1356, -1356, -1356, -1356, -1356, -1356,
    1648    -1356, -1356, -1356, -1356, 10718, 10718, -1356, 10872, 10872, 10872,
    1649    10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872,
    1650    10872, 10872, 10872, 10872, 10872,  5362, 10718, -1356,    64,  1168,
    1651    -1356, -1356,   139,   139, -1356, -1356,  8867, -1356, -1356,   970,
    1652      791, -1356,   970, 10853, -1356, -1356, -1356,  3524,  6639,  1016,
    1653     9095,  1028, -1356, 10035, -1356, -1356,   594, -1356,  1029,   776,
    1654     1036,  1922,   164,   883, -1356,   139,   139,   883,   174, -1356,
    1655      139,   139,   970, -1356, -1356,   139,   139, -1356,   900, 10065,
    1656     1506, 11215,   233,   347, 10065, -1356, 10214, -1356,   883, -1356,
    1657     9885, -1356,   125,  7935,  7935,  7935,  1506, -1356,  6115,  1033,
    1658      414,   929,  1150,  1037,  1038, -1356,  1054,  4628,   555, -1356,
    1659     1124,  1506,  7935,   791,  1811,   791,   656,   704,   900, -1356,
    1660    -1356,   729,   900, -1356, -1356, -1356,   827, -1356,   900,   217,
    1661    10252, -1356,   666,  1061,   679,  1062, -1356,  1065,   217, -1356,
    1662    -1356,  4061,   217,  1059,   553,   573, 10103,  7119,  1590, 10872,
    1663     1954, -1356, -1356,  1066,    39,  1066, -1356, -1356, -1356,   139,
    1664      139, -1356, -1356,   781, -1356,   139, -1356, -1356,  9630,   781,
    1665     1069, 10872, -1356,   976, 11215, -1356, -1356,  1075, -1356, -1356,
    1666    -1356,   791, -1356, 11143, 10872, -1356,  7935,   588,  8240, -1356,
    1667    -1356,   594,  1072,  1077,   820,  2542, -1356, -1356,  7511, -1356,
    1668    -1356,  1074, -1356, -1356,  1088, -1356,  1074,  1090,  3425, 10718,
    1669      205,  1073,    47,  1094,  1082,  1100,   818,  1102,  1110, -1356,
    1670     1113,  1117,  9661,  6759, -1356, 10718, -1356,   161,  1861, -1356,
    1671     6396, 10718,  1120, -1356, -1356,   929,   689, -1356, 10718, -1356,
    1672    -1356,   865, -1356, -1356, -1356, -1356, -1356,   498,   498,   751,
    1673      751,   809,   809,   809,   809,   524,   524,   880,   822,   831,
    1674      819,   869, 10872,   875, -1356, 10252,  1119,  1140,  1142,  1168,
    1675    -1356, -1356, -1356, -1356, -1356, 10252,   691, 10872,  7935, -1356,
    1676     9885, -1356,  7239,  9209,  8905,  6999, -1356, -1356, -1356,   776,
    1677    10252,   927,  1145,  1152,  1158,  1159,  1162,  1166,  1172, -1356,
    1678     4275,  1922, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
    1679    -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   970,
    1680    -1356, -1356, -1356,   883, -1356, -1356, -1356, -1356, -1356, -1356,
    1681    -1356, -1356,  1176, -1356,  1183,  1185, -1356, -1356,    59,  1120,
    1682     6115, -1356, -1356, -1356,  5043,  1144, -1356, -1356, -1356, -1356,
    1683    -1356,   781,  6242,  1231, -1356, -1356, -1356, -1356,  1165,    59,
    1684    -1356, -1356,   970, -1356, -1356,   970,    29,   970, -1356, -1356,
    1685    -1356, -1356, -1356, -1356,  9380, -1356,   217, -1356,  8784, -1356,
    1686    -1356,  1190,   906,  1187,  1193,  1198, -1356, -1356,  1954, -1356,
    1687    -1356, -1356, -1356, -1356, -1356, -1356,  1092, -1356,   959, -1356,
    1688    -1356,  1195,  1202,  1201, -1356, -1356,  1206,  1210, -1356,   588,
    1689     2182, -1356,   533, -1356,  2542,   883, -1356,  1213,  7511, 10176,
    1690     8867,  1220, -1356, -1356,  1218,  1222,  1224, -1356, 10872,   230,
    1691       -1,  1219, -1356,  1225,   791,  1225,  6639, 10718, -1356, -1356,
    1692     1225, -1356,  1861,  5043, -1356, -1356, -1356, -1356,  1236, 10718,
    1693     1233,   791,  6115, -1356, 10795, -1356,   791, -1356, -1356, 10718,
    1694    -1356,   782,   900, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
    1695      929,  8639, -1356, -1356,  7359,  1237, -1356,   807,   900, -1356,
    1696      825,   836,   900, -1356,   726,  4460, -1356, -1356, -1356, 10252,
    1697    10252, -1356,  8313,  8313, -1356,  1241,  1248,  1246,  1259, -1356,
    1698     1262,   672,   244,  1120, -1356,   791, -1356,  4628, -1356, 10718,
    1699      578, -1356,  6519,  1267,  1271, 10660,  1272,  1277,   122,   304,
    1700      298, 10718,  1279,   217, 10718, 10718,  1280,   678,  1254,  1261,
    1701    -1356, -1356, -1356,  1284, -1356, -1356, -1356, -1356, -1356, -1356,
    1702    -1356, -1356, -1356,   781,  1290, 10718, -1356, 10252, 10252,   139,
    1703     1292, -1356,  9743,  9520,   847,   900, -1356, -1356, -1356, -1356,
    1704    -1356, -1356, -1356, -1356, -1356,  1293,  2182, -1356, -1356,  1275,
    1705    -1356,  1074, -1356, -1356,  1811,  1296, -1356, -1356, -1356,   706,
    1706     1291, -1356,    47,  1305, 10872,  1288,    47,    47,  1314,  1310,
    1707    -1356,  1054, 10718,  1315,  1236,   711,   214,  1317, -1356,  1310,
    1708    -1356,  1323,  1317, -1356, -1356,  1328, -1356, -1356,   970,  1329,
    1709     1330,  6879,  1331,  1339,  1341, -1356, -1356,  1340, -1356, -1356,
    1710      970, -1356, -1356, -1356, -1356,   970, 10718, 10718, 10872,  1344,
    1711    -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
    1712    -1356, -1356, 10872, 10872,  1347,  1349,  1317, -1356, -1356,   781,
    1713    -1356, -1356, -1356,  7746, 10176, 10718, 10718,  1394, 10718, -1356,
    1714    -1356,  1333, -1356,  1334, 10718,  1335,  1343, 10718,   992,  1345,
    1715       36,  8158,  1229,   139, -1356, -1356,  6242,  1348,   585, -1356,
    1716    -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   970, 10478,
    1717    -1356,  8386,  1360, -1356, -1356, 10176,   592,   598, -1356,  1356,
    1718     1355,   827,  1366, -1356,   179, -1356, -1356, 10718,  1368,  1363,
    1719    -1356, -1356,  1369,   484,   663,   791,  1376,  1378, -1356,  1380,
    1720    -1356, 10252, -1356, -1356, -1356, -1356, -1356,  1382, -1356, 10252,
    1721    10252, 10252, -1356, -1356,  1386, -1356,  1389,  1392,  1393,   682,
    1722     8008,  8124, -1356, -1356,   370, -1356,  1396,  1397, -1356,  8459,
    1723      715,   725,  1395,   760,  6377, -1356, -1356,   641, -1356, -1356,
    1724      796,  1402,  1403,   217,  1453,   961, -1356, -1356, 10718, -1356,
    1725    10795, 10660, -1356, -1356, -1356,  1406,  1407, 10252, -1356, -1356,
    1726    -1356,  1405, -1356, -1356, -1356, -1356, -1356, -1356, 10176,   827,
    1727      287, -1356,  1388,   827,  1236,   361, -1356, -1356, -1356, -1356,
    1728    -1356, -1356, -1356, -1356,  1408, -1356, -1356, -1356, -1356, -1356,
    1729    -1356,  1411,  1412, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
    1730     1418, -1356,  1417, -1356, -1356, 10660,   272, 10718, 10660, -1356,
    1731     1422, 10718, -1356,   306,  1438,  1441, -1356, -1356,  1430,  1431,
    1732     1413,   918, -1356, -1356, -1356, -1356, -1356,  1506,  1811,  1433,
    1733      855,   946, 10872, -1356,   801,  1439, 10718,   791,   791,  1442,
    1734     1448,  1449,  1450, -1356, -1356,  8313,  1452, -1356,  1535, 10872,
    1735     1462, -1356, -1356, 10571, -1356,   803, -1356,  1460, 10660,  1463,
    1736    -1356, -1356,  1489, -1356,  1493, -1356,  1511,  1512, -1356,  1480,
    1737     1508, 10176, -1356, -1356, -1356,   827,   791,  1514,  1484,  1509,
    1738    -1356,  1317,  1317, -1356, -1356, -1356, -1356, -1356, 10660,   301,
    1739    -1356,   958, -1356, -1356,  7597, -1356, -1356,  1502, 10718, -1356,
    1740    10718,  7597,   217,  9953,   217,  9953,  1515, -1356,  1522, -1356,
    1741    -1356, -1356,  1520,   855, -1356,   811, -1356, -1356, 10718,  1526,
    1742     1527, -1356, 10872, 10872, -1356, -1356,  1055,   154, -1356, -1356,
    1743     1510, -1356,  1055, -1356, -1356,  1716,   791, -1356, -1356,   217,
    1744     9953,   217,  9953,  1532,  1517,   791, -1356, -1356, -1356, -1356,
    1745    -1356, 10571,  1528,  1055,  7673, 10718, 10482,  1531,  1055,  1537,
    1746     1716,  2045, -1356, -1356, -1356,  1545, -1356, -1356, -1356, -1356,
    1747     8867, -1356, -1356, -1356, 10349, -1356, 10571, -1356, -1356,  1529,
    1748    10256, -1356, -1356, 10482,   217,  2045,   217,  1558,  1559,   815,
    1749    -1356, 10349, -1356, -1356, -1356, 10256, -1356, -1356, -1356,   217,
    1750      217, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356
     1594    3506,  8076, -1332,    12, -1332, -1332, -1332, -1332, -1332, -1332,
     1595   -1332,    61, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
     1596   -1332, -1332, -1332, -1332, -1332, -1332,   102,   102,   102,  1011,
     1597    1062,    86,  5961,   228, -1332, -1332, -1332, -1332, -1332,   138,
     1598   -1332, -1332, -1332,   684,   144,  9470, -1332, -1332, -1332, -1332,
     1599   -1332, -1332,   190,   182, -1332,  1658, -1332, -1332, -1332, -1332,
     1600     201,  1834,   303,    32,  4928, -1332, -1332,  9508,  1650, -1332,
     1601   -1332, -1332,   615,   401,  4443,   184,   589,   615,  1225, -1332,
     1602   -1332,   848,   938, -1332,   615,  1259, -1332,   301, -1332,   486,
     1603     503, -1332, -1332, -1332, -1332,   316,   182,   102, -1332,   102,
     1604   -1332, -1332, -1332, -1332,  9240,  1658, -1332, -1332,  1658, -1332,
     1605    9354,   391, -1332, -1332, -1332,  1948,  9876, -1332,   810,   810,
     1606     810, -1332, -1332, -1332,   102, -1332, -1332, -1332,   426,   447,
     1607     456, -1332, -1332, -1332,   477, -1332, -1332, -1332, -1332, -1332,
     1608     485,   495, -1332, -1332,    36,  8974,  2459,   272,   545,   579,
     1609     623,   632,   671,   733,  8777,  7372,   596,   719, -1332,  9546,
     1610   -1332, -1332, -1332, -1332,   739, -1332,   209,  3245,  3245, -1332,
     1611     760,   213, -1332, -1332, -1332, -1332,   770,   237,   353,   362,
     1612     102,   755, -1332, -1332,  1834,  1803,   846, -1332,    70, -1332,
     1613     102,   102,   182, -1332, -1332,    98, -1332,   102,   102, -1332,
     1614    2479,   820,   843,   810,  5405, -1332, -1332,   844,  9470, -1332,
     1615   -1332,   615, -1332, -1332, -1332,   182, -1332,  1658,   190, -1332,
     1616    7926, -1332,   810,   810,   810,   182, -1332,  1011, -1332,  2880,
     1617   -1332, -1332,   827,   810, -1332,   810, -1332,   138,  8974,  8891,
     1618     857, -1332,  1062,   864,   810, -1332,  1011,   870,   879, -1332,
     1619    5961,   735, -1332, -1332, -1332,  9437, -1332, -1332,  3894, -1332,
     1620     846,    69,  9876,  6310,  1948,  2479, -1332,   114, -1332, -1332,
     1621    9354,  1658,   875, 11374, -1332, -1332,   546, -1332, 11116,   886,
     1622     926, 10861,   905, 10919, 10938, -1332,   919, -1332, -1332, -1332,
     1623   -1332, 10996, 10996,   735,  8632,   928, 10919,  9088, -1332, -1332,
     1624   -1332, -1332, -1332, -1332,   949, -1332,   840,  2531, 10919, -1332,
     1625     516,   336,   425,   270,   704,   934,   936,   960,   997,    52,
     1626   -1332, -1332,   974,   356, -1332,   290, -1332, -1332,  2459, -1332,
     1627   -1332,   600,   996, -1332,   701,   996,  1007,   138, -1332, -1332,
     1628    1010,  9240, -1332,  1018,  8746, -1332, -1332,  1849,  1084,  8347,
     1629    5405,   615, -1332,   615,   810,   810, -1332, -1332, -1332, -1332,
     1630   -1332, -1332,   810,  9914,  1658, -1332, -1332,  9987,  1975, -1332,
     1631    9012, -1332, -1332, -1332, -1332, -1332, -1332, -1332,  1030,  3059,
     1632   10919, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
     1633   -1332, -1332, -1332, -1332, -1332,  1948, -1332,   773,  1012,  1034,
     1634    1040,   889,  1045,  1051,  1053,  1803, -1332, -1332,  1063,   190,
     1635    1064, -1332, -1332,  1066, -1332, -1332, -1332,  9437, -1332, -1332,
     1636   -1332, -1332, -1332,  2479, -1332,  8974,  8974, -1332,   810,  1948,
     1637    6923,  1658,  8420, -1332, -1332, -1332, -1332,  9437,    69, -1332,
     1638   -1332,   615,   182, -1332, -1332,  9437, -1332,  3625, -1332, -1332,
     1639     810,   810,   464, 10025,  1068,   907,  9695, -1332,   437,   475,
     1640    1062, -1332,  1067,  1069,  1047,  1070,   810, -1332, -1332, -1332,
     1641   -1332, 10283, -1332,   522,  6793, -1332,   182,  1074, -1332,  1948,
     1642   11198,  6368, -1332, -1332, -1332, -1332,   939,  2479, -1332,  8493,
     1643     846,  5374, -1332, -1332, -1332,   828,   610,   974,  1062, 11374,
     1644     861,  9354, -1332, 11374, -1332, -1332, -1332, -1332,   618, -1332,
     1645    1073,   926,   326,  8632, -1332, 10025, -1332, -1332,  8632, -1332,
     1646    8860,  8632, -1332, -1332, -1332,  1077, -1332,   619,  1082,   630,
     1647    1087, -1332,  5066,  7012, -1332, -1332, -1332,    47, -1332, -1332,
     1648   10784, -1332,   474, 10784, -1332, -1332, -1332, -1332, -1332, -1332,
     1649   -1332, -1332, -1332, -1332,  6310,  6310, -1332, 10919, 10919, 10919,
     1650   10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919,
     1651   10919, 10919, 10919, 10919, 10919,  4001,  6310, -1332,   356,   777,
     1652   -1332, -1332,   102,   102, -1332, -1332,  8974, -1332, -1332,  1066,
     1653     735, -1332,  1066, 10842, -1332, -1332, -1332,  6075,  7012,  1086,
     1654    9202,  1093, -1332, 10055, -1332, -1332,   739, -1332,  1094,   690,
     1655    1096,  1090,   157,   974, -1332,   102,   102,   974,   166, -1332,
     1656     102,   102,  1066, -1332, -1332,   102,   102, -1332,   996, 10137,
     1657    1658, 11343,   372,   531, 10137, -1332,  6678, -1332,   974, -1332,
     1658    9914, -1332,   285,  8042,  8042,  8042,  1658, -1332,  5183,  1085,
     1659     453,  1030,   955,  1095,  1097, -1332,  1099,  3245,   590, -1332,
     1660    1182,  1658,  8042,   735,  1948,   735,   846,   706,   996, -1332,
     1661   -1332,   806,   996, -1332, -1332, -1332,   926, -1332,   996,   182,
     1662   10283, -1332,   647,  1107,   688,  1108, -1332,  1109,   182, -1332,
     1663   -1332,  9437,   182,  1105,   497,   502, 10167,  7492,  1400, 10919,
     1664    1678, -1332, -1332,  1103,    62,  1103, -1332, -1332, -1332,   102,
     1665     102, -1332, -1332,  1062, -1332,   102, -1332, -1332,  8891,  1062,
     1666    1110, 10919, -1332,  1062, 11343, -1332, -1332,  1113, -1332, -1332,
     1667   -1332,   735, -1332, 11271, 10919, -1332,  8042,   718,  8347, -1332,
     1668   -1332,   739,  1114,  1115,   828,  2655, -1332, -1332, 11374, -1332,
     1669   -1332,  1116, -1332, -1332,  1122, -1332,  1116,  1123, 11116,  6310,
     1670     163,  1092,    54,  1131,  1128,  1135,   928,  1130,  1138, -1332,
     1671    1140,  1141,  9733,  7132, -1332,  6310, -1332,   630,  1274, -1332,
     1672    5523,  6310,  1139, -1332, -1332,  1030,   695, -1332,  6310, -1332,
     1673   -1332,   741, -1332, -1332, -1332, -1332, -1332,   516,   516,   336,
     1674     336,   425,   425,   425,   425,   270,   270,   704,   934,   936,
     1675     960,   997, 10919,   754, -1332, 10283,  1150,  1151,  1153,   777,
     1676   -1332, -1332, -1332, -1332, -1332, 10283,   748, 10919,  8042, -1332,
     1677    9914, -1332,  7612,  9316,  9126,  7372, -1332, -1332, -1332,   690,
     1678   10283,   950,  1164,  1165,  1171,  1172,  1179,  1180,  1181, -1332,
     1679    3591,  1090, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
     1680   -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,  1066,
     1681   -1332, -1332, -1332,   974, -1332, -1332, -1332, -1332, -1332, -1332,
     1682   -1332, -1332,  1183, -1332,  1184,  1187, -1332, -1332,   190,  1139,
     1683    5183, -1332, -1332, -1332,  3059,  1185, -1332, -1332, -1332, -1332,
     1684   -1332,  1062,  6532,  1270, -1332, -1332, -1332, -1332,  1173,   190,
     1685   -1332, -1332,  1066, -1332, -1332,  1066,   152,  1066, -1332, -1332,
     1686   -1332, -1332, -1332, -1332,  9584, -1332,   182, -1332,  8891, -1332,
     1687   -1332,  1193,   795,  1199,  1200,  1204, -1332, -1332,  1678, -1332,
     1688   -1332, -1332, -1332, -1332, -1332, -1332,   907,  9763,  1047, -1332,
     1689   -1332,  1069,  1205,  1201, -1332, -1332,  1206,  1207, -1332,   718,
     1690    1989, -1332,   634, -1332,  2655,   974, -1332,  1211, 11374, 10205,
     1691    8974,  1214, -1332, -1332,  1212,  1217,  1213, -1332, 10919,   229,
     1692     205,  1215, -1332,  1202,   735,  1202,  7012,  6310, -1332, -1332,
     1693    1202, -1332,  1274,  3059, -1332, -1332, -1332, -1332,  1220,  6310,
     1694    1228,   735,  5183, -1332, 10784, -1332,   735, -1332, -1332,  6310,
     1695   -1332,   863,   996, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
     1696    1030,  8746, -1332, -1332,  7732,  1219, -1332,   876,   996, -1332,
     1697     883,   896,   996, -1332,   810,  4775, -1332, -1332, -1332, 10283,
     1698   10283, -1332,  8420,  8420, -1332,  1221,  1226,  1233,  1235, -1332,
     1699    1234,   643,   137,  1139, -1332,   735, -1332,  3245, -1332,  6310,
     1700     517, -1332,  6892,  1245,  1249, 10726,  1253,  1258,   330,   380,
     1701     387,  6310,  1265,   182,  6310,  6310,  1256,   294,  1269,  1250,
     1702   -1332, -1332, -1332,  1277, -1332, -1332, -1332, -1332, -1332, -1332,
     1703   -1332, -1332, -1332,  1062,  1285,  6310, -1332, 10283, 10283,   102,
     1704    1287, -1332,  9845,  9622,   932,   996, -1332, -1332, -1332, -1332,
     1705   -1332,  1286, -1332, -1332, -1332, -1332,  1293,  1989, -1332, -1332,
     1706    1275, -1332,  1116, -1332, -1332,  1948,  1290, -1332, -1332, -1332,
     1707     749,  1292, -1332,    54,  1295, 10919,  1279,    54,    54,  1305,
     1708    1301, -1332,  1099,  6310,  1308,  1220,   605,    89,  1306, -1332,
     1709    1301, -1332,  1312,  1306, -1332, -1332,  1317, -1332, -1332,  1066,
     1710    1319,  1322,  7252,  1323,  1325,  1326, -1332, -1332,  1329, -1332,
     1711   -1332,  1066, -1332, -1332, -1332, -1332,  1066,  6310,  6310, 10919,
     1712    1330, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
     1713   -1332, -1332, -1332, 10919, 10919,  1332,  1335,  1306, -1332, -1332,
     1714    1062, -1332, -1332, -1332,  7853, 10205,  6310,  6310,  1394,  6310,
     1715   -1332, -1332,  1321, -1332,  1324,  6310,  1327,  1331,  6310,  1013,
     1716    1333,    97,  8265,  1262,   102, -1332, -1332,  6532,  1334,   537,
     1717   -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,  1066,
     1718   -1332, 10544, -1332,  8493,  1345, -1332, -1332, 10205,   562,   563,
     1719   -1332,  1343,  1344,   926,  1352, -1332,   450, -1332, -1332,  6310,
     1720    1355,  1349, -1332, -1332,  1356,   543,   613,   735,  1357,  1358,
     1721   -1332,  1361, -1332, 10283, -1332, -1332, -1332, -1332, -1332,  1365,
     1722   -1332, 10283, 10283, 10283, -1332, -1332,  1367, -1332,  1368,  1371,
     1723    1372,   668,  8115,  8231, -1332, -1332,   457, -1332,  1376,  1378,
     1724   -1332,  8566,   750,   782,  1387,   793,  6762, -1332, -1332,   598,
     1725   -1332, -1332,   803,  1388,  1393,   182,  1445,   882, -1332, -1332,
     1726    6310, -1332, 10784, 10726, -1332, -1332, -1332,  1396,  1404, 10283,
     1727   -1332, -1332, -1332,  1401, -1332, -1332, -1332, -1332, -1332, -1332,
     1728   10205,   926,   254, -1332,  1384,   926,  1220,   366, -1332, -1332,
     1729   -1332, -1332, -1332, -1332, -1332, -1332,  1405, -1332, -1332, -1332,
     1730   -1332, -1332, -1332,  1406,  1409, -1332, -1332, -1332, -1332, -1332,
     1731   -1332, -1332,  1414, -1332,  1413, -1332, -1332, 10726,    84,  6310,
     1732   10726, -1332,  1417,  6310, -1332,    99,  1433,  1434, -1332, -1332,
     1733    1422,  1425,  1408,   852, -1332, -1332, -1332, -1332, -1332,  1658,
     1734    1948,  1421,   949,   918, 10919, -1332,   832,  1426,  6310,   735,
     1735     735,  1427,  1431,  1440,  1441, -1332, -1332,  8420,  1428, -1332,
     1736    1501, 10919,  1437, -1332, -1332, 10637, -1332,   845, -1332,  1424,
     1737   10726,  1436, -1332, -1332,  1460, -1332,  1461, -1332,  1476,  1481,
     1738   -1332,  1446,  1471, 10205, -1332, -1332, -1332,   926,   735,  1472,
     1739    1452,  1468, -1332,  1306,  1306, -1332, -1332, -1332, -1332, -1332,
     1740   10726,   295, -1332,   940, -1332, -1332,  5671, -1332, -1332,  1454,
     1741    6310, -1332,  6310,  5671,   182, 10025,   182, 10025,  1478, -1332,
     1742    1482, -1332, -1332, -1332,  1480,   949, -1332,   850, -1332, -1332,
     1743    6310,  1479,  1487, -1332, 10919, 10919, -1332, -1332,  1054,   123,
     1744   -1332, -1332,  1465, -1332,  1054, -1332, -1332,  1818,   735, -1332,
     1745   -1332,   182, 10025,   182, 10025,  1492,  1474,   735, -1332, -1332,
     1746   -1332, -1332, -1332, 10637,  1488,  1054,  6242,  6310, 10548,  1495,
     1747    1054,  1502,  1818,  2347, -1332, -1332, -1332,  1505, -1332, -1332,
     1748   -1332, -1332,  8974, -1332, -1332, -1332, 10415, -1332, 10637, -1332,
     1749   -1332,  1484, 10322, -1332, -1332, 10548,   182,  2347,   182,  1509,
     1750    1510,   853, -1332, 10415, -1332, -1332, -1332, 10322, -1332, -1332,
     1751   -1332,   182,   182, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
     1752   -1332
    17511753};
    17521754
     
    17541756static const yytype_int16 yypgoto[] =
    17551757{
    1756    -1356,  4068,  1513, -1356,  1381, -1356,    41,     0,  -254, -1356,
    1757      593,  -523,  -482,  -960,  -143,  5028, -1356,  -101,   576,   581,
    1758      386,   577,  1101,  1105,  1106,  1099,  1107, -1356,  -593,  -585,
    1759     4966,  -933,  -708,  -942, -1356,  -273,  -719,   379, -1356,  1404,
    1760    -1356,   457, -1092, -1356, -1356,   195, -1356,  -844, -1059,   308,
    1761    -1356, -1356, -1356, -1356,   124, -1118, -1356, -1356, -1356, -1356,
    1762    -1356, -1356,   382, -1355,    53, -1356,  -496, -1356,   558,   349,
    1763    -1356,   226, -1356,  -307, -1356, -1356, -1356,   610,  -832, -1356,
    1764    -1356,    13,  -961,   169,  2725, -1356, -1356, -1356,   -79, -1356,
    1765      189,   845,  -184,  1482,  3902, -1356, -1356,   192,   133,   657,
    1766     -251,  1620, -1356,  1796, -1356, -1356,   156,  2416, -1356,  2575,
    1767      798, -1356, -1356,  -404,  -428,  1252,  1253,   761,  1003,   302,
    1768    -1356, -1356,  1245,   764,  -253, -1356,   -24,  -132,  -469, -1356,
    1769    -1356,  -983,  -881,     4,   862,  1128,   -43, -1356,   561,  -100,
    1770     -262,  -193,  -152,   721,   826, -1356,  1071, -1356,  2692,   907,
    1771     -449,   971, -1356, -1356,   765, -1356,  -227, -1356,   -60, -1356,
    1772    -1356, -1356, -1248,   485, -1356, -1356, -1356,  1242, -1356,    45,
    1773    -1356, -1356,  -846,  -109, -1333,  -138,  3289, -1356,  1880, -1356,
    1774      969, -1356,  -161,   268,  -181,  -177,  -175,     2,   -39,   -35,
    1775      -33,   769,    30,    31,    69,  -146,  -162,  -151,  -147,  -140,
    1776     -277,  -521,  -506,  -484,  -575,  -313,  -516, -1356, -1356,  -528,
    1777     1156,  1157,  1163,  2484,  4688,  -570,  -557,  -534,  -533,  -478,
    1778    -1356,  -432,  -693,  -685,  -681,  -580,  -201,  -236, -1356, -1356,
    1779      265,   180,   -86, -1356,  3600,   232,  -625,  -376
     1758   -1332,  4383,  1919, -1332,  1457, -1332,    41,     0,  -257, -1332,
     1759     544,  -527,  -514,  -956,  -190,  3713, -1332,  1485,   580,   585,
     1760     548,   602,  1055,  1052,  1056,  1059,  1061, -1332,  -217,  -341,
     1761    5350,  -699,  -697,  -922, -1332,   -83,  -701,  -678, -1332,   561,
     1762   -1332,   399, -1087, -1332, -1332,   141, -1332, -1329,  -838,   252,
     1763   -1332, -1332, -1332, -1332,    71, -1078, -1332, -1332, -1332, -1332,
     1764   -1332, -1332,   325, -1308,    57, -1332,  -297, -1332,   504,   305,
     1765   -1332,   173, -1332,  -305, -1332, -1332, -1332,   558,  -799, -1332,
     1766   -1332,    11, -1027,   151,   658, -1332, -1332, -1332,   -52, -1332,
     1767     117,   913,  -200,  1494,  4071, -1332, -1332,    19,   107,   365,
     1768    -232,  1565, -1332,  2150, -1332, -1332,   134,  2571, -1332,  3063,
     1769    1550, -1332, -1332, -1332,  -643,  -431,  1210,  1216,   707,   947,
     1770     188, -1332, -1332, -1332,   945,   723,  -404, -1332,  -520,  -362,
     1771     293, -1332, -1332,  -990,  -995,   965,  1194,  1083,   304, -1332,
     1772     150,   317,   -75,  -197,  -129,   679,   781, -1332,  1020, -1332,
     1773    3338,  1566,  -427,   948, -1332, -1332,   710, -1332,  -230, -1332,
     1774     -89, -1332, -1332, -1332, -1266,   433, -1332, -1332, -1332,  1195,
     1775   -1332,    22, -1332, -1332,  -865,  -105, -1331,   -98,  1750, -1332,
     1776    2253, -1332,   929, -1332,  -168,   288,  -180,  -179,  -173,     2,
     1777     -34,   -29,   -28,   687,    75,    77,    92,  -161,  -162,  -153,
     1778    -151,  -148,  -320,  -530,  -516,  -495,  -552,  -307,  -529, -1332,
     1779   -1332,  -506,  1106,  1117,  1121,  2218,  5180,  -562,  -569,  -544,
     1780    -538,  -550, -1332,  -429,  -691,  -685,  -671,  -611,  -246,  -241,
     1781   -1332, -1332,  1149,   273,   -84, -1332,  3714,    76,  -612,  -441
    17801782};
    17811783
     
    17831785   positive, shift that token.  If negative, reduce the rule which
    17841786   number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1785 #define YYTABLE_NINF -523
     1787#define YYTABLE_NINF -525
    17861788static const yytype_int16 yytable[] =
    17871789{
    1788       47,   112,    96,   398,   148,   933,   266,   399,   149,   400,
    1789      150,   452,   176,   934,   113,   382,   383,   935,   259,   427,
    1790      791,   527,   401,   707,   406,   439,   512,   505,   712,   112,
    1791      112,   895,    47,   402,    96,   618,   853,   403,   768,   407,
    1792      975,   854,   111,    47,   404,    47,  1152,   160,   409,   871,
    1793      751,   820,   846,    48,   756,    47,  1092,  1144,   718,  1184,
    1794     1185,    47,   260,   192,    47,   261,   215,    47,   342,   225,
    1795     1091,   613,   995,   151,   152,   847,   848,   142,    31,   279,
    1796      218,   112,   112,   398,   933,    48,  1462,   399,   842,   400,
    1797     1399,   424,   934,   845,   201,  1196,   935,   779,   951,  1318,
    1798      574,  1202,   401,   843,   406,    47,   936,    31,    47,  1135,
    1799      679,   536,   153,   402,   937,    47,  1136,   403,   122,   407,
    1800     1508,   749,   482,   484,   404,   844,   408,   637,   936,   290,
    1801      688,   641,    31,    68,   857,   575,   950,   280,   692,  1099,
    1802      864,  1219,  1220,   605,   202,   148,    47,   121,   160,   149,
    1803      410,   150,   682,   684,    47,  1537,    75,  1539,   978,    47,
    1804     1462,   372,  1186,   683,   685,    68,   167,   446,  1319,    54,
    1805      114,   483,   141,   578,   438,   410,   478,   251,    31,   410,
    1806      105,   105,   517,   579,    47,    47,   467,   160,    75,    61,
    1807      168,    31,    67,  1482,   109,   534,   535,   211,  -234,  -234,
    1808       47,    54,   418,    31,   410,    41,    42,   556,    47,  1260,
    1809      160,   919,   105,    31,   151,   152,   677,    47,   746,  1008,
    1810       47,    61,   442,   842,    67,   148,   585,   112,   490,   149,
    1811     1201,   150,   586,   209,   483,   507,   219,   858,   843,   755,
    1812      527,   861,   112,   535,   674,   527,   112,   105,   527,   143,
    1813       47,   112,    96,   153,  1210,   596,   576,   760,   770,   675,
    1814      844,   488,   878,   410,    47,    47,   881,   160,    95,  -234,
    1815      777,    47,   410,   855,   145,   610,  1037,   165,    47,   535,
    1816      778,  1038,   846,   862,   342,   610,   666,   536,   740,  1342,
    1817      712,  1014,   472,   112,   703,   470,  1343,  1051,   618,  1263,
    1818       95,  1154,   813,    48,   176,   847,   848,  1184,  1185,   705,
    1819      162,   147,   536,    95,   681,  1344,  1419,  1420,   842,   154,
    1820      686,   638,   976,  1025,   824,   642,   674,  1264,    47,   188,
    1821      372,   170,    95,   843,   524,    95,   180,   536,   478,  1134,
    1822     1192,   675,   165,  1202,   200,   874,  1010,    47,    47,   875,
    1823     1419,  1420,  1216,   441,  -290,   844,  1015,   739,   478,   246,
    1824     1186,   831,   109,   857,    47,   761,   478,  1193,    47,   536,
    1825      109,  1026,   762,    41,    42,   162,   109,   327,   249,   653,
    1826     1092,    41,    42,    68,   926,   936,  1421,    41,    42,   440,
    1827      854,   886,   887,  1133,  1091,    47,  1402,  1492,   500,   605,
    1828      501,   783,   846,  -518,   880,    47,    75,   372,  1551,   905,
    1829     1186,    75,   251,   763,    95,   764,  1153,  1214,   765,    54,
    1830     1430,   771,   916,    47,  1193,   847,   848,    95,   605,    47,
    1831      105,    47,  1457,   605,  1550,  1566,  1212,  1521,   109,    61,
    1832      435,   871,    67,  1526,   479,   263,   342,  1451,  1452,    41,
    1833       42,   376,   397,   188,  1561,    47,   794,   795,   796,   876,
    1834      112,  1565,   -10,   877,  1546,   112,  1051,   377,   386,  1553,
    1835      327,  -112,  1381,   434,   112,   728,    95,   789,  1406,    47,
    1836      251,   329,   211,   958,   387,  -112,  -112,    47,    95,   372,
    1837     -441,    47,  -112,    96,  -467,    47,   740,  1041,   112,   535,
    1838      112,  -112,   435,  1202,   460,   896,  1107,   505,   979,  -442,
    1839     1202,   885,   885,   885,   707,   111,  1259,   398,    95,  1121,
    1840      653,   399,  1150,   400,  1102,  -467,   275,  -467,   909,   165,
    1841      885,  -467,   486,   277,  1186,   434,   401,   112,   618,   406,
    1842      653,   936,   112,   653,    48,   278,  1038,   402,   389,  1252,
    1843      391,   403,  1172,  1174,   407,   907,   109,   330,   404,   531,
    1844     1107,   767,   162,  1202,   390,   739,   392,    41,    42,   331,
    1845     1181,  1182,   740,    75,  1036,  1017,   607,   332,   784,  1466,
    1846      370,   767,   693,   790,   767,  1379,   393,   873,   586,  1118,
    1847      112,   140,   333,    75,  1019,  1348,    95,    47,   831,   936,
    1848      936,    75,   394,   888,   885,   334,   479,  1292,  1293,    47,
    1849      342,    47,   478,   211,   564,   565,   612,   557,   904,   884,
    1850      884,   884,   558,   559,    68,   587,   479,   410,  1231,  1232,
    1851       47,   472,  1498,   535,   479,   897,  1250,   713,   884,  1498,
    1852     1254,   739,   240,   243,    37,   876,    47,    75,    40,  1117,
    1853      566,   567,   112,   714,   955,    41,    42,   327,   327,   715,
    1854       54,    47,  1429,   112,    47,   112,   898,   335,   652,   713,
    1855      730,   105,   899,   188,   712,   716,   731,  1466,   737,   994,
    1856       61,    43,  1466,    67,   728,   929,   342,  1036,   831,   715,
    1857      384,   146,  1547,   371,  1199,  1049,   885,   959,    47,   610,
    1858       47,  1199,  1466,   375,   906,   930,   908,   960,  1333,  1466,
    1859     1200,   388,   884,   112,  1335,   507,  1096,  1324,   460,   112,
    1860      408,   460,   747,   704,  1334,   228,   535,   460,   748,   229,
    1861     1336,   112,   233,   327,   235,   109,     8,     9,    10,    11,
    1862       12,   244,  1056,  1129,    47,    47,    41,    42,   757,  1500,
    1863      285,  1501,   327,   590,   758,   410,   396,   775,    47,    95,
    1864     -291,    41,    42,   612,   441,    31,   431,     8,     9,    10,
    1865       11,    12,   954,  1382,  1350,   774,   920,   674,   531,   425,
    1866      531,   775,   775,   531,  -105,   703,   531,   521,  -105,   922,
    1867      833,   449,   675,    34,  1367,   775,    31,  1391,  1368,  1003,
    1868      705,  1016,  1356,   464,   884,  1004,  1548,   731,   426,   936,
    1869     1358,  1359,  1360,   910,   161,   410,  1248,  1447,   327,   728,
    1870      605,  -112,   586,  -112,    34,  1375,   936,  -112,   462,   728,
    1871      193,   775,   607,   216,  1459,  1376,   226,   933,   913,    47,
    1872      410,   775,  -112,  -112,   728,   934,   115,    75,    37,   935,
    1873     1176,    47,    40,   109,   465,   138,   139,   211,  1395,    41,
    1874       42,   872,   213,   109,    41,    42,   607,   831,   228,   468,
    1875     1378,   211,   560,   561,    41,    42,   775,   841,   979,   612,
    1876      479,   469,   979,   979,   491,   839,   737,   610,   511,    75,
    1877      158,  1156,    37,   410,   653,   611,    40,   562,   563,   936,
    1878      936,   112,   653,    41,    42,  1197,  1383,  1519,  1459,   290,
    1879     1183,  1448,   775,  1467,   213,   161,  1168,  1445,   410,   775,
    1880      535,  1514,   479,   515,    47,  1571,   520,  1515,   373,   744,
    1881      532,   586,  1300,  1301,  1171,  1303,   610,   536,    47,   745,
    1882      654,  1307,   570,  1078,  1310,  1173,    47,   610,   572,   257,
    1883      801,   802,   803,   804,   161,   158,  1236,   213,   410,   571,
    1884      740,   517,   737,   573,    47,   211,   932,   109,   704,   138,
    1885      139,   214,   568,   569,   537,   538,   539,   161,    41,    42,
    1886     1007,  1004,  1122,   460,   112,   251,   329,   410,   241,   443,
    1887      323,   775,  1009,   653,   418,   670,   410,  1340,   540,   339,
    1888      541,   112,   542,   543,   653,   941,   112,   941,   228,   242,
    1889      233,   338,   841,   612,   576,  1243,   329,   410,   213,  1388,
    1890     1389,   717,  -438,   214,   594,  1138,   464,   833,   597,   739,
    1891      488,   329,   410,  1439,  1004,    68,   855,   329,   610,   676,
    1892      740,   647,  1146,   728,   728,   767,   667,  1146,   668,   429,
    1893     1311,  1312,  1313,   433,   669,   112,   213,   671,    75,   750,
    1894      213,   754,  1445,  1446,   672,   653,   214,   673,   112,   112,
    1895      112,    54,   678,  1533,  1493,  1494,    37,   535,   173,   174,
    1896       40,   256,   105,   323,   455,  1400,   696,    41,    42,  1400,
    1897      721,    61,   719,   112,    67,  -238,  1146,   373,   228,  1419,
    1898     1420,   728,   728,   759,  1425,   772,  1078,   841,   776,  1211,
    1899     1213,  1215,   780,   371,   109,   433,   138,   237,   495,   612,
    1900     1349,  1351,  1352,  1107,    47,    41,    42,   214,   834,     2,
    1901      205,     4,     5,     6,     7,   342,   797,   798,  1123,   529,
    1902      836,   838,   158,   799,   800,   805,   806,   213,   849,   105,
    1903      -12,   238,  -292,   901,   -13,   893,   239,   441,  1370,     8,
    1904        9,    10,    11,    12,    37,   214,   182,   183,    40,   214,
    1905      894,   921,   923,   928,   373,    41,    42,   924,     8,     9,
    1906       10,    11,    12,   699,   949,  -415,   595,  -522,    31,   602,
    1907      748,  1483,   963,   460,    35,    68,    36,   970,   984,   112,
    1908      972,   698,   327,   410,   983,   977,   704,    31,   635,   699,
    1909      985,   700,   639,   892,   704,   339,    34,   218,    75,   987,
    1910      988,    47,   109,   989,   138,   139,   653,   990,   213,  1011,
    1911     -293,    54,   612,    41,    42,    34,   999,     8,     9,    10,
    1912       11,    12,   105,  1329,     2,   205,     4,     5,     6,     7,
    1913     1012,   479,  1013,   872,  1204,  1027,   214,    -3,  1122,  1058,
    1914     1093,   891,  1028,   112,   112,   112,    31,  1078,  1029,  1030,
    1915      323,   323,  1031,   227,   945,   728,  1032,   578,   213,   410,
    1916      948,  1080,  1033,   728,   728,   728,  1044,   579,   128,  1443,
    1917      129,   130,   131,  -403,    34,  -402,  1095,  1104,   455,    41,
    1918       42,   455,  1103,  1105,  1146,  1146,  1146,   455,  1106,    35,
    1919     1110,    36,  1111,  1559,   537,   538,   539,  1112,  1113,   115,
    1920      653,   653,  1114,  1120,     2,   205,     4,     5,     6,     7,
    1921     1130,   728,  1131,   729,   775,  1137,   211,   214,   540,   993,
    1922      541,  1132,   542,  1320,   495,  1145,   323,  1166,   495,   398,
    1923      737,  1122,  1142,   399,  1442,   400,  1189,  1187,   529,    68,
    1924      529,   767,  1078,   529,  1188,   323,   529,   460,   401,  1190,
    1925      406,  1223,   209,   219,  1191,   653,  1205,   339,   653,   402,
    1926     1206,  1208,    75,   403,   105,   407,  1209,   214,  1217,    35,
    1927      404,    36,  1221,  1224,   674,    54,  1532,    47,    47,    -3,
    1928     1229,   213,  1234,  1240,   500,  1249,   105,   112,   112,   675,
    1929      109,  1244,   138,   139,  1123,    61,  1078,  1251,    67,  1078,
    1930     1253,    41,    42,   653,  1256,   105,  1257,  1261,   653,   213,
    1931      737,   323,   441,  1265,   213,  1268,   175,    68,  1270,  1272,
    1932     1273,  1302,   829,  1274,  1207,   602,   112,   752,  1146,  1146,
    1933     1278,  1275,   753,  1276,  1122,   654,  1285,   172,   653,  1294,
    1934       75,  1295,  1061,  1323,  1078,  1305,  1306,  1308,   440,  1078,
    1935     1331,  1337,  1339,    54,   870,  1309,  1341,  1317,  1346,   602,
    1936     1345,  1347,    64,   116,   105,   879,   175,  1484,  1353,   175,
    1937     1354,   148,  1355,   479,  1357,   149,  1204,   150,  1363,  1078,
    1938      252,  1364,  1365,  1366,  1377,    47,   112,  1123,  1373,  1374,
    1939      214,  1384,  1385,  1313,    64,   112,  1393,  1394,   105,  1396,
    1940     1403,   653,   213,  1413,  1414,  1406,   653,   159,  -404,  1417,
    1941       47,    47,  1428,   160,  1432,   175,   213,  1434,   214,  1436,
    1942     1437,   339,   729,   214,   653,  1438,   653,  1534,  1444,   220,
    1943      653,  1449,  1453,   653,   654,    47,  1542,   372,  1454,  1455,
    1944     1456,   653,  1078,   455,   166,   653,   171,  1078,  1368,   177,
    1945      178,   179,    37,   181,   173,   174,    40,  1458,    37,  1463,
    1946      173,   174,    40,    41,    42,  1078,   258,  1078,   232,    41,
    1947       42,  1078,  1468,   495,  1078,  1470,   416,    68,   175,  1472,
    1948      247,   248,  1078,  1474,    68,  1080,  1078,  1476,  1478,   375,
    1949     1123,    37,  1480,   182,   183,    40,  1487,   339,  1481,   436,
    1950       75,   105,    41,    42,  1486,  1509,  1488,    75,   328,   444,
    1951      213,   214,  1511,    54,  1499,  1513,   258,   349,  1517,  1518,
    1952       54,  1540,  1525,  1545,   105,   214,  1552,  1554,   609,  1541,
    1953      610,   105,   175,   479,  1061,  1556,  1204,    68,   611,   175,
    1954      479,  1562,    37,  1204,   182,   183,    40,   405,  1569,  1570,
    1955     1222,   807,   810,    41,    42,  1018,   808,   729,   809,   829,
    1956       75,   811,   423,  1322,   212,   428,   430,   729,  1520,  1572,
    1957      159,  1431,  1404,    54,   231,  1255,  1387,  1502,   528,   698,
    1958     1392,   410,   729,  1228,   105,   694,   695,  1108,   942,   700,
    1959      723,   447,  1109,   479,  1141,   450,  1204,   451,   826,   965,
    1960     1057,     8,     9,    10,    11,    12,   466,   973,   175,   900,
    1961     1332,  1119,    64,   742,   816,   817,   212,   480,  1506,   214,
    1962     1506,   818,     0,     0,     0,   175,     0,   487,     0,   175,
    1963       31,     0,     0,     0,  1418,   430,     0,  1426,     0,     0,
    1964     1298,     0,     0,     0,     0,     0,     0,     0,     0,   829,
    1965        0,     0,   327,   455,     0,  1506,     0,  1506,    34,   212,
    1966        0,     0,     0,    37,     0,   182,   183,    40,    37,     0,
    1967      182,   183,    40,     0,    41,    42,    73,     0,   486,    41,
    1968       42,     0,  1465,     0,     0,     0,    37,  1469,   182,   183,
    1969       40,     0,   175,   495,  1124,   323,     0,    41,    42,     0,
    1970      184,     0,   213,   258,     0,  1530,   603,   410,    73,     0,
    1971      185,     0,   631,     0,     0,  1531,     0,  1491,     0,     0,
    1972      212,     0,     0,   184,     0,   636,   690,     0,     0,   636,
    1973        0,     0,   258,   185,     0,     0,     0,   601,   608,     0,
    1974        0,     0,     0,   221,     0,     0,   870,     0,     0,   632,
    1975      633,     8,     9,    10,    11,    12,     0,     0,   212,     0,
    1976      732,     0,   212,    37,     0,   182,   183,    40,     0,     0,
    1977        0,     0,     0,     0,    41,    42,     0,     0,   506,   480,
    1978       31,   729,   729,     0,     0,     0,   125,   125,   125,     0,
    1979        0,     0,     0,     0,   349,     0,     0,   528,     0,   480,
    1980      264,     0,   528,  1560,     0,   528,     0,   480,    34,  1560,
    1981      265,   214,     8,     9,    10,    11,    12,     0,     0,     0,
    1982     1560,     0,     0,     0,  1560,     0,     0,   455,   829,     0,
    1983        0,   352,     0,   724,     0,     0,   430,     0,     0,   729,
    1984      729,    31,     0,     0,     8,     9,    10,    11,    12,   212,
    1985      777,   738,   410,    64,     0,     0,     0,   125,   175,   125,
    1986      778,   430,     0,     0,     0,   430,     0,     0,     0,    34,
    1987        0,     0,     0,    31,    37,     0,   182,   183,    40,     0,
    1988        0,   213,     0,     0,   274,    41,    42,     0,     0,     0,
    1989        0,   175,     0,     0,   258,   349,     0,     0,     0,     0,
    1990        0,    34,     0,     0,     0,   448,    37,   175,   182,   183,
    1991       40,   609,     0,   610,     0,     0,     0,    41,    42,     0,
    1992        0,   611,   175,     0,     0,     0,    73,     0,     0,     0,
    1993      212,    73,     0,     0,     0,     8,     9,    10,    11,    12,
    1994      125,   819,     0,   698,     0,   410,   339,   212,   125,     0,
    1995      125,   125,     0,   700,     0,   125,     0,   125,   125,   636,
    1996      832,     0,   603,   918,    31,     0,     0,     0,     0,     0,
    1997     1124,     0,   925,   851,     0,     0,   927,   213,     0,     0,
    1998      212,  1330,     0,     8,     9,    10,    11,    12,     0,     0,
    1999      214,   603,    34,     0,     0,     0,   603,    37,     0,   182,
    2000      183,    40,   636,     0,     0,   349,   349,   349,    41,    42,
    2001        0,     0,    31,   729,     0,     0,     0,     0,     0,   175,
    2002        0,   729,   729,   729,   349,     0,   221,   125,     0,     0,
    2003        0,     0,     0,     0,  1530,     0,   410,     0,     0,     0,
    2004       34,     0,   724,     0,  1531,    37,     0,   182,   183,    40,
    2005        0,     0,     0,   480,     0,     0,    41,    42,   258,   738,
    2006        0,     0,   938,  1124,     0,     0,     0,     0,     0,   729,
    2007        0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
    2008        0,     0,   264,     0,     0,     0,   214,     0,     0,     0,
    2009        0,     0,   265,    73,     0,   480,     0,     0,   349,     0,
    2010        0,    31,     0,   212,     0,     0,     0,   964,   352,     0,
    2011      430,     0,     0,    73,     0,     0,     0,     0,   952,     0,
    2012      953,    73,     0,     0,     0,     0,     0,   956,   957,    34,
    2013        0,   212,   962,     0,   258,   738,   212,     0,     0,     0,
    2014      992,     0,     0,     0,   967,     0,     0,   352,     0,   971,
    2015      544,   545,   546,   547,   548,   549,   550,   551,   552,   553,
    2016        0,     0,     0,     0,     0,   352,  1124,    73,     0,     0,
    2017        0,   959,     0,   610,     0,  1000,     0,   724,     0,     0,
    2018        0,   960,     0,     0,   554,   175,     0,   724,     0,     0,
    2019      349,     0,   636,     0,     0,  1024,   636,   832,  1505,     0,
    2020     1505,     0,   724,     0,     0,     0,     0,     0,     0,   352,
    2021     1101,     0,  1035,     0,     0,     0,     0,     0,     0,     0,
    2022      601,     0,     0,     0,   212,     0,     0,     0,     0,     0,
    2023        0,     0,     0,     0,     0,  1505,     0,  1505,   212,     0,
     1790      47,   112,    96,   427,   398,   399,   768,   933,   452,   148,
     1791     266,   400,   113,   934,   149,   150,   791,   406,   871,    67,
     1792     259,   439,   401,   512,   407,   712,   707,   935,   613,   112,
     1793     112,   402,    47,   403,    96,  1203,   404,  1092,   382,   383,
     1794     846,   618,   111,    47,   895,    47,   505,   160,  1187,   854,
     1795    1153,    67,  1185,  1186,   142,    47,   749,    48,   975,   853,
     1796     201,    47,   857,   192,    47,   847,   215,    47,   864,   225,
     1797     342,   848,   751,   820,  1401,   947,   756,  1145,   218,   842,
     1798     845,   112,   112,   995,   398,   399,   933,   279,   409,    48,
     1799    1464,   400,   934,   843,   121,   424,  1468,   406,   605,  1197,
     1800     779,    31,   401,  1091,   407,    47,   935,    68,    47,    31,
     1801     202,   402,   679,   403,   844,    47,   404,    61,   151,   109,
     1802     152,   165,   637,   884,   884,   884,   641,   739,  1421,  1422,
     1803      41,    42,   688,   408,    75,   153,   290,    31,   446,    68,
     1804     692,    31,   884,  1421,  1422,   280,    47,   574,   160,    61,
     1805     148,    54,   114,    31,    47,   149,   150,   467,   783,    47,
     1806    1320,   372,   482,   484,  1464,   978,    75,  -234,  -234,  1510,
     1807     122,   211,   858,   410,  1265,   746,   861,  1484,   483,   251,
     1808     140,   410,   575,    54,    47,    47,   165,   160,     2,   205,
     1809       4,     5,     6,     7,  1468,   141,    31,   878,  1423,  1468,
     1810      47,   881,  1266,   478,  1539,    31,  1541,   418,    47,   410,
     1811     160,   527,   677,  1432,   842,   209,   884,    47,   219,  1468,
     1812      47,   327,   442,   488,  1080,   410,  1468,   112,   843,  1321,
     1813     148,   240,   243,  1193,   536,   149,   150,   674,  -234,   143,
     1814     886,   887,   112,   740,   675,   536,   112,   145,  1187,   844,
     1815      47,   112,    96,    35,   760,    36,   154,   596,   905,   151,
     1816    1194,   152,  1099,  1202,    47,    47,   855,   160,   610,    67,
     1817     846,    47,   470,   105,   105,   862,   153,   610,    47,  1203,
     1818     976,   885,   885,   885,   435,  1102,   342,   703,    95,  1038,
     1819     666,   857,   472,   112,   705,   847,   170,   167,  1187,  1037,
     1820     885,   848,  1185,  1186,   618,   105,   200,    48,   884,   842,
     1821    1025,   536,  1155,  1014,   327,  1136,    -3,   180,   681,   674,
     1822      95,   168,  1137,   843,   686,   376,   675,   441,    47,   386,
     1823     372,   147,   958,    95,   524,   739,   536,  1346,  1135,  1111,
     1824     105,   377,   682,   684,   844,   387,   435,    47,    47,   188,
     1825     683,   685,    95,   389,   605,    95,   831,    68,   937,   176,
     1826     564,   565,  1092,  1404,    47,   478,   285,    61,    47,   390,
     1827    1217,   440,   479,   165,   885,  1220,  1221,    41,    42,   653,
     1828     950,   251,   329,   605,    75,   478,   926,  1208,   605,    75,
     1829     846,  1494,   464,   478,   483,    47,   566,   567,   854,   880,
     1830     585,    54,   109,   521,  -290,    47,   586,   372,   536,   260,
     1831     871,   739,   261,    41,    42,   847,   576,   246,  1194,   916,
     1832     607,   848,  1187,    47,  1017,   251,   755,  1459,  1091,    47,
     1833     527,    47,  1041,   228,    95,   527,   761,   229,   527,  1203,
     1834     233,  1552,   235,   762,  1262,   770,  1203,    95,   342,   244,
     1835    1553,   740,   109,  1453,  1454,    47,   211,   560,   561,   109,
     1836     112,  1563,  1211,    41,    42,   578,   885,   410,  1567,   391,
     1837      41,    42,   397,   188,   112,   579,  -112,  1568,   393,    47,
     1838    1173,  1175,   936,  1408,   874,   392,   249,    47,   875,   372,
     1839    1151,    47,   813,    96,   394,    47,    95,  -112,   112,  1203,
     1840     112,   327,   327,  -520,   936,   979,  1215,  1383,    95,  1107,
     1841      67,   824,  1213,   562,   563,   111,   712,   707,   398,   399,
     1842     653,   438,   263,   105,  1119,   400,   505,   740,   896,   654,
     1843    1261,  1036,   406,  -469,   479,   -10,   401,   112,    95,   407,
     1844     653,  1122,   112,   653,   618,   402,   109,   403,    48,  1080,
     1845     404,    75,   486,   713,   479,  1038,  -443,    41,    42,   907,
     1846    1344,   767,   479,  1107,  -469,  -444,  -469,  1345,   909,   714,
     1847    -469,    75,  -112,  -112,   693,   490,   228,   327,   784,    75,
     1848     586,   767,   507,   790,   767,   789,   275,   211,  -112,  1019,
     1849     112,   715,  -291,   831,   277,  1008,   327,    47,    68,     8,
     1850       9,    10,    11,    12,   278,  1381,   737,   716,    61,    47,
     1851     717,    47,   342,   713,   172,   109,    95,   833,   715,     2,
     1852     205,     4,     5,     6,     7,    75,    41,    42,    31,   929,
     1853      47,   472,   730,  1200,   930,   557,   612,  1134,   731,   478,
     1854     558,   559,    54,   876,  1036,  1394,    47,   877,   750,  1201,
     1855     754,   176,   112,  1200,  1350,   330,    34,   252,    55,    55,
     1856    1523,    47,   327,   112,    47,   112,  1528,  1500,   638,  1326,
     1857     897,   712,   642,  1051,  1500,   500,   607,   501,  1335,  1337,
     1858    1184,   955,  1431,   831,    35,   109,    36,  1548,   342,   331,
     1859      55,  1049,  1555,   188,  1336,  1338,    41,    42,    47,  1420,
     1860      47,   898,  1428,   652,   906,   872,   908,   899,   370,   587,
     1861     607,   410,  1096,   112,   775,  -112,   228,  -112,   233,   112,
     1862     747,  -112,    55,   112,  1352,    55,   748,  1549,   757,   774,
     1863    1384,   112,   161,   332,   758,   775,  -112,  -112,   441,   777,
     1864    1130,   410,   333,   704,    47,    47,   876,  1467,   193,   778,
     1865    1118,   216,  1471,   416,   226,  -105,    37,   920,    47,  -105,
     1866      40,   936,    37,   775,   105,  1056,    40,    41,    42,  1502,
     1867     674,  1503,   954,    41,    42,   605,   436,   675,   703,    95,
     1868    1369,   334,  1493,   612,  1370,   705,   444,     8,     9,    10,
     1869      11,    12,  1154,    43,  1254,  1393,   568,   569,   922,   839,
     1870     739,   610,   892,   146,   775,  1003,   228,   109,   479,   611,
     1871     590,  1004,   410,   347,   737,   910,    31,   410,    41,    42,
     1872       8,     9,    10,    11,    12,    75,  1550,   959,   371,   610,
     1873     763,   211,   764,   161,  1177,   765,  1252,   960,   771,    47,
     1874    1256,   933,  1051,   335,    34,   211,   373,   934,   375,    31,
     1875     479,    47,  1294,  1295,   833,   528,  1007,  1004,  1016,  1250,
     1876    1377,   935,   831,   945,   731,   586,   775,    75,  1562,   948,
     1877     775,  1009,   161,   464,  1562,   384,   979,    34,    55,   388,
     1878     979,   979,   251,   329,   410,  1562,   578,   396,   410,  1562,
     1879     737,   941,  1378,   941,   653,   161,   579,   841,   775,   612,
     1880      37,   112,   653,  1380,    40,   329,   410,   443,    55,   775,
     1881     408,    41,    42,  1385,   115,   913,   740,   410,   936,   775,
     1882     109,    67,   138,   237,    47,   537,   538,   539,  1198,   425,
     1883    1372,    41,    42,   109,   873,   138,   139,   744,    47,   211,
     1884    1390,  1391,  1450,  1078,    41,    42,    47,   745,  1447,   540,
     1885     888,   541,   426,   542,   543,  1469,   431,   238,   158,   449,
     1886    1516,   775,   239,  1573,    47,   904,  1517,  1441,  1004,   586,
     1887     752,  -367,  1157,   919,   410,   753,   936,   936,  -396,    37,
     1888    1123,   182,   183,    40,   112,  1169,   932,   410,   704,   491,
     1889      41,    42,  1172,   653,   610,   511,  1342,   740,   418,   670,
     1890     410,   112,   468,   690,   653,  1174,   112,   610,   290,    68,
     1891     109,   469,   138,   139,   515,   373,   698,   257,   410,    61,
     1892    1245,    41,    42,   158,   699,  1139,   700,   109,   520,   138,
     1893     139,   536,   841,   612,  1447,  1448,    75,   732,    41,    42,
     1894     532,  1237,  1147,   410,   654,   767,   327,  1147,   488,   329,
     1895     410,  1061,   242,    54,   570,   112,  1495,  1496,   323,   855,
     1896     329,   610,   507,  1449,   571,   653,   891,   339,   112,   112,
     1897     112,  1313,  1314,  1315,   528,  1351,  1353,  1354,  1535,   528,
     1898    1461,  1205,   528,   128,  1402,   129,   130,   131,  1402,   572,
     1899     347,   573,   373,   112,    41,    42,  1147,   872,  1421,  1422,
     1900       8,     9,    10,    11,    12,   576,  1078,   338,  1010,  1212,
     1901    1214,  1216,   801,   802,   803,   804,  -440,   429,  1015,   594,
     1902    1124,   433,   667,  1302,  1303,    47,  1305,   841,  1107,    31,
     1903     597,   441,  1309,  1026,   109,  1312,   138,   139,   342,   612,
     1904     797,   798,   647,   654,   668,    41,    42,   799,   800,    55,
     1905     669,   323,   455,  1521,  1461,   671,    37,    34,   182,   183,
     1906      40,   672,    37,   673,   182,   183,    40,    41,    42,    68,
     1907     805,   806,   676,    41,    42,   105,   678,   256,   721,   479,
     1908     696,   718,   759,   433,   723,   719,   495,   936,  -238,   772,
     1909    1485,   347,   776,   609,   162,   610,    75,   780,   834,   609,
     1910     112,   610,   -12,   611,   936,   836,   838,   529,   849,   611,
     1911     158,   901,   -13,    54,   893,   894,   218,   921,   923,   928,
     1912     699,   924,    47,  -417,   977,   949,   704,   653,  -292,  -524,
     1913     963,   970,   748,   972,   704,     8,     9,    10,    11,    12,
     1914     918,   983,   105,  1061,   984,   985,    67,   987,   988,   925,
     1915     989,   990,   612,   927,   595,   999,   347,   602,  1123,   162,
     1916    1011,  1012,  -293,  1013,    31,   112,   112,   112,  1078,     8,
     1917       9,    10,    11,    12,  1027,  1028,   635,   936,   936,   737,
     1918     639,  1029,  1030,   339,     8,     9,    10,    11,    12,  1031,
     1919    1032,  1033,    34,  1044,  -405,  1445,  1427,  -404,    31,  1093,
     1920    1058,   347,   347,   347,  1095,  1103,  1147,  1147,  1147,  1104,
     1921    1105,   211,  1561,    31,  1106,  1112,   993,  1113,  1114,  1115,
     1922     347,  1121,   653,   653,  1131,  1205,    34,  1132,   775,  1167,
     1923    1133,  1138,  1182,  1183,    68,   105,  1143,  1188,   323,   323,
     1924    1146,    34,  1189,  1190,    61,  1191,  1192,   537,   538,   539,
     1925    1300,  1123,   398,   399,  1206,   209,   219,   434,  1207,   400,
     1926     737,    75,  1209,   767,  1078,   406,   455,  1210,  1222,   455,
     1927     401,   540,   407,   541,  1218,   542,  1322,   653,    54,   402,
     1928     653,   403,  1225,   777,   404,   410,  1224,   115,   460,   674,
     1929    1232,  1233,    -3,   778,   347,  1230,   675,  1235,  1124,    47,
     1930      47,  1240,  1534,  1242,   500,  1246,  1251,  1253,   441,   112,
     1931     112,  1255,   495,    68,   323,  1258,   495,  1259,  1078,   434,
     1932    1263,  1078,  1267,   479,  1270,   653,   529,  1272,   529,  1274,
     1933     653,   529,  1275,   323,   529,  1276,   728,  1277,  1278,  1280,
     1934      75,  1304,  1287,   531,  1296,   339,   162,  1297,   112,  1325,
     1935    1147,  1147,   440,  1307,  1123,  1333,  1308,    54,  1339,  1310,
     1936     653,  1341,  1343,  1311,  1348,  1319,  1078,  1347,  1349,  1355,
     1937    1356,  1078,    37,  1357,   182,   183,    40,  1359,   105,  1365,
     1938    1366,  1367,  1368,    41,    42,  1205,   347,  1101,  1375,  1486,
     1939    1376,  1124,  1205,   347,    64,   116,  1379,  1386,   148,   323,
     1940     105,  1078,  1387,   149,   150,  1315,  1395,    47,   112,   698,
     1941     829,   410,   175,   602,  1396,  1398,  1405,   112,  1415,   700,
     1942     105,  1416,  1408,   653,  -406,  1419,    64,  1430,   653,  1434,
     1943    1436,  1438,    47,    47,  1439,   160,  1446,  1455,  1451,   159,
     1944    1440,  1456,   870,  1460,  1370,  1205,   653,   602,   653,  1536,
     1945    1457,  1458,   653,   879,  1465,   653,  1470,    47,  1544,   372,
     1946      55,   220,   175,   653,  1078,   175,  1358,   653,  1472,  1078,
     1947    1474,  1476,  1478,    68,  1360,  1361,  1362,  1480,  1482,   105,
     1948      68,  1483,  1488,   479,  1489,  1490,  1501,  1078,  1511,  1078,
     1949     479,  1519,  1513,  1078,  1124,  1515,  1078,  1527,   258,  1520,
     1950      75,  1542,   460,  1547,  1078,   460,  1543,    75,  1078,   339,
     1951    1554,   175,  1556,   105,   213,  1558,  1564,    54,   327,  1571,
     1952    1572,  1223,  1397,   808,    54,   807,  1324,    55,   809,   212,
     1953     214,   455,   810,    68,  1219,   811,  1522,  1433,  1574,   231,
     1954     328,  1389,  1257,   479,   347,   728,  1504,   241,   258,   349,
     1955    1406,  1229,   942,  1108,     2,   205,     4,     5,     6,     7,
     1956      75,   495,   531,   694,   531,   729,   213,   531,   951,   695,
     1957     531,  1110,  1142,   826,   175,  1057,  1120,    54,   900,   405,
     1958    1334,   212,   214,   227,   816,   339,   742,   973,     8,     9,
     1959      10,    11,    12,     0,   423,   817,   965,   428,   430,   818,
     1960     347,   347,   159,  1444,     0,     0,     0,     0,     0,   213,
     1961       0,     0,     0,     0,     0,     0,   105,    31,     0,    35,
     1962      55,    36,     0,   447,   212,   214,     0,   450,   175,   451,
     1963      37,     0,   173,   174,    40,   175,     0,     0,   466,   105,
     1964       0,    41,    42,  1018,    64,    34,   105,   829,     0,   480,
     1965      37,     0,   182,   183,    40,     0,     0,     0,     0,   487,
     1966       0,    41,    42,     0,     0,     0,     0,   430,   517,     0,
     1967     213,     0,     0,     0,     0,     0,   123,   126,   127,     0,
     1968     728,   534,   535,     0,     0,   212,   214,   698,     0,   410,
     1969     728,     0,     0,   556,     0,     0,     0,   700,     0,   105,
     1970       0,     0,     0,     0,   175,   728,     0,     0,   213,     0,
     1971       0,     0,   213,     8,     9,    10,    11,    12,     0,     0,
     1972     486,   175,     0,   212,   214,   175,     0,   212,   214,   535,
     1973       0,     0,     0,     0,     0,   258,     0,   829,   603,     0,
     1974       0,   455,    31,   506,   631,     0,     0,   253,     0,   254,
     1975       0,     0,     0,     0,     0,     0,     0,   636,     0,     0,
     1976     455,   636,    55,    55,   258,   535,     0,   460,     0,     0,
     1977      34,     0,     0,     0,   729,    37,  1388,   182,   183,    40,
     1978       0,   495,  1125,   323,     0,    55,    41,    42,   175,     0,
     1979      37,     0,   182,   183,    40,     0,     0,     0,     0,   213,
     1980       0,    41,    42,     0,     0,    55,    37,     0,   182,   183,
     1981      40,   480,   184,     0,   212,   214,     0,    41,    42,     0,
     1982       0,    37,   185,   173,   174,    40,   349,  1532,     0,   410,
     1983     395,   480,    41,    42,   870,     0,     0,  1533,     0,   480,
     1984     414,   415,     0,   184,     0,   419,     0,   421,   422,     0,
     1985     347,   347,     0,   185,     0,     0,     0,     0,   371,    55,
     1986       0,     0,     0,     0,    55,   724,     0,     0,   430,     0,
     1987     166,     0,   171,     0,     0,   177,   178,   179,     0,   181,
     1988     213,     0,     0,   738,     0,    64,     0,     0,     0,     0,
     1989       0,     0,     0,   430,   232,   212,   214,   430,    55,     8,
     1990       9,    10,    11,    12,   728,   728,   247,   248,     0,   729,
     1991       0,     0,   212,     0,     0,   455,   829,     0,     0,   729,
     1992      37,     0,   182,   183,    40,     0,   258,   349,    31,     0,
     1993     213,    41,    42,     0,   729,  1505,     0,  1509,     0,     0,
     1994       0,     0,   794,   795,   796,   212,   214,    37,     0,   173,
     1995     174,    40,     0,     0,   175,     0,    34,   264,    41,    42,
     1996       0,     0,   728,   728,     0,     0,     0,   265,     0,     0,
     1997       0,     0,  1538,   819,  1540,   347,     0,   460,     0,     0,
     1998       0,     0,     0,     0,   375,   535,     0,   175,     0,     0,
     1999       0,   636,   832,     0,   603,     0,   460,     0,   959,     0,
     2000     610,    55,     0,   175,     0,   851,     0,     0,   960,     0,
     2001       0,     0,     0,     0,     0,     0,     0,  1569,   175,  1570,
     2002       0,     0,     0,   603,    55,     0,     0,     0,   603,     0,
     2003       0,    55,  1577,  1578,   636,   339,     0,   349,   349,   349,
     2004       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2005      73,     0,     0,   213,     0,     0,   349,     0,     0,     0,
     2006    1125,     0,     0,     0,     0,     0,     0,     0,   212,   214,
     2007       0,     0,     0,     0,   724,     0,     0,     0,     0,     0,
     2008       0,   213,    73,     0,    55,   480,   213,     0,     0,     0,
     2009     258,   738,     0,     0,   938,     0,   212,   214,     0,     0,
     2010       0,   212,   214,     0,     0,     0,  1331,     0,     0,     0,
     2011       0,     0,     0,     0,     0,   175,     0,   221,     0,   535,
     2012       0,     0,     0,     0,     0,     0,     0,   480,     0,     0,
     2013     349,     0,     0,   729,   729,     0,     0,     0,   728,   964,
     2014       0,     0,   430,     0,     0,     0,   728,   728,   728,     0,
     2015       0,   460,     0,  1125,     0,     0,     0,     0,     0,     0,
     2016       0,     0,     0,   601,   608,   994,   258,   738,     0,     0,
     2017       0,     0,   992,     0,   213,   632,   633,     0,     0,   125,
     2018     125,   125,     0,     0,     0,     0,     0,     0,   213,   212,
     2019     214,   729,   729,     0,   728,     0,     0,     0,     0,     0,
     2020       0,     0,     0,   212,   214,   352,     0,     0,     0,   724,
     2021       0,     0,   535,     0,     0,     0,     0,     0,     0,   724,
     2022       0,     0,   349,   506,   636,     0,     0,  1024,   636,   832,
     2023       0,     0,   821,   822,   724,     0,     0,     0,     0,     0,
     2024       0,     0,     0,     0,  1035,     0,     0,     0,     0,     0,
     2025     125,     0,   125,     0,     0,     0,  1125,     8,     9,    10,
     2026      11,    12,   856,     0,     0,   859,   860,     0,   863,     0,
     2027     865,   866,     0,     0,     0,   867,   868,   274,     0,   448,
     2028       0,   175,   213,     0,     0,     0,    31,     0,  1507,     0,
     2029    1507,     0,     0,     0,     0,     0,    64,   212,   214,     0,
     2030      73,     0,     0,     0,     0,    73,   412,     0,     0,     0,
     2031       0,     0,     0,   420,    34,     0,     0,     0,   636,    37,
     2032       0,   182,   183,    40,     0,  1507,     0,  1507,     0,     0,
     2033      41,    42,     0,   125,     0,  1332,     0,     0,     0,     0,
     2034       0,   125,     0,   125,   125,     0,     0,     0,   125,     0,
     2035     125,   125,     0,     0,  1117,   323,  1532,     0,   410,   943,
     2036     944,     0,   430,   116,     0,   946,  1533,   729,     0,     8,
     2037       9,    10,    11,    12,     0,   729,   729,   729,     0,     0,
     2038     349,     0,     0,     0,     0,   412,     0,     0,     0,     8,
     2039       9,    10,    11,    12,     0,     0,     0,     0,    31,     0,
     2040     221,     0,     0,     0,     0,     0,   535,     0,     0,     0,
     2041       0,     0,     0,     0,     0,   603,     0,     0,    31,     0,
     2042     125,     0,     0,   729,     0,     0,    34,     0,   428,     0,
     2043       0,    37,     0,   724,   724,    40,   349,   349,     0,     0,
     2044       0,   584,    41,    42,     0,     0,    34,   517,     0,   588,
     2045       0,    37,   591,   182,   183,    40,  1204,     0,     0,     0,
     2046       0,     0,    41,    42,     0,     0,     0,    73,    43,     0,
     2047       0,    76,     0,     0,   213,     0,     0,     0,   146,     0,
     2048       0,     0,   352,     0,     0,     0,     0,    73,   264,   212,
     2049     214,   724,   724,     0,     0,    73,     0,   636,   265,     0,
     2050       0,     0,     0,    76,     0,     0,     0,     0,     0,     0,
     2051       0,     0,     0,     0,     0,   412,     0,     0,     0,   420,
     2052       0,   352,     0,     0,  1508,     0,  1508,     0,   544,   545,
     2053     546,   547,   548,   549,   550,   551,   552,   553,   222,   352,
     2054       0,    73,     0,     0,   952,     0,   953,     0,     0,     0,
     2055       0,     0,     0,   956,   957,     0,   738,     0,   962,     0,
     2056       0,  1508,   554,  1508,   535,     8,     9,    10,    11,    12,
     2057     967,     0,     0,     0,     0,   971,     0,     0,     0,   175,
     2058       0,     0,     0,   352,     0,     0,     0,     0,     0,     0,
     2059       0,     0,     0,     0,    31,     0,     0,     0,     0,  1301,
     2060       0,  1000,     0,     0,   412,     0,     0,     0,     0,     0,
     2061       0,     0,     0,     0,     0,     0,   258,     0,     0,     0,
     2062       0,    64,    34,     0,     0,     0,   354,    37,     0,     0,
     2063       0,    40,     0,     0,     0,   724,     0,   738,    41,    42,
     2064       0,   116,     0,     0,     0,     0,   601,     0,   352,     0,
     2065       0,     0,     0,     0,   213,     0,     0,     0,     0,     0,
     2066       0,     0,     0,     0,   744,     0,     0,   724,     0,   212,
     2067     214,     0,     0,     0,   745,   724,   724,   724,     0,     0,
     2068       0,     0,     0,     0,     0,     0,   349,   349,     0,     0,
     2069       0,     0,     0,   352,   352,   352,   584,   584,     0,     0,
     2070    1204,     0,     0,  1045,  1046,  1047,  1048,     0,  1050,     0,
     2071       0,     0,   352,     0,     0,     0,     0,     0,     0,     0,
     2072       0,    76,     0,   724,  1094,     0,    76,     0,     0,     0,
     2073     352,     0,     0,     0,   116,   125,   125,     0,  1100,     0,
     2074       0,    73,     0,     0,     0,     0,     0,   352,     0,  1234,
     2075       0,   213,     0,     0,     0,     0,   175,     0,     0,     0,
     2076       0,     0,     0,     0,     0,   125,   212,   214,   125,   125,
     2077       0,   125,     0,   125,   125,     0,     0,  1116,   125,   125,
     2078       0,     0,     0,    73,     0,   911,   352,     0,     0,   914,
    20242079       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2025       18,    19,    20,    21,    22,    23,    24,    25,   506,     0,
    2026       26,    27,    28,     0,    64,   323,     0,     0,     0,    31,
    2027        0,     0,     0,     0,   352,     0,     0,  1045,  1046,  1047,
    2028     1048,     0,  1050,     0,     0,     0,   636,     0,     8,     9,
    2029       10,    11,    12,     0,     0,     0,    76,    34,  1094,     0,
    2030        0,     0,    37,     0,    38,    39,    40,     0,     0,     0,
    2031        0,     0,  1100,    41,    42,     0,     0,    31,     0,   352,
    2032      352,   352,  1116,     0,     0,     0,     0,     0,    76,     0,
    2033      430,   116,   212,     0,     0,     0,     0,     0,   352,    43,
    2034        0,   156,   125,   125,     0,    34,     0,     0,   349,    45,
    2035       37,  1115,     0,     0,    40,     0,   352,  1218,     0,     0,
    2036        0,    41,    42,   222,     0,     0,     0,    73,     0,     0,
    2037        0,     0,   125,   352,     0,   125,   125,     0,   125,     0,
    2038      125,   125,     0,   603,     0,   125,   125,    43,     0,     0,
    2039        0,  1143,     0,     0,     0,     0,   428,   146,  1151,     0,
    2040        0,   724,   724,  1155,   349,   349,     0,     0,  1159,    73,
    2041     1160,     0,   352,     0,  1162,  1163,  1164,     0,     0,  1167,
    2042        0,     0,     0,     0,  1203,     0,     0,     0,  1179,     0,
    2043        0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
    2044        0,     0,     0,     0,     0,     0,  1194,  1195,     0,   352,
    2045        0,   354,     0,     0,     0,    78,     0,     0,     0,   724,
    2046      724,    31,     0,     0,   125,   636,     0,     0,     0,   125,
    2047      125,     0,     0,  1225,     0,   125,  1227,     0,     0,     0,
    2048        0,     0,   175,     0,     0,     0,     0,    78,     0,    34,
    2049        0,   352,     0,     0,    37,     0,     0,     0,    40,     0,
    2050        0,   352,     0,     0,   352,    41,    42,     0,     0,   221,
    2051        0,   352,     0,     0,  1242,     0,   352,     0,     0,     0,
    2052     1246,  1247,   223,   738,   212,     0,     0,     0,     0,     0,
    2053        0,   744,  1258,     0,     0,     0,     0,  1262,     0,     0,
    2054     1266,   745,  1267,     0,     0,  1269,    76,     0,     0,     0,
    2055        0,    76,   412,     0,     0,     0,     0,     0,  1277,   420,
    2056        0,     0,     0,     0,     0,     0,  1299,     0,     0,     0,
    2057        0,  1284,    85,  1286,  1287,  1288,  1289,     0,    73,     0,
    2058        0,     0,     0,   258,     0,     0,     0,     0,    64,  1296,
    2059        0,  1297,     0,     0,     0,   171,     0,  1386,     0,     0,
    2060        0,   724,     0,   738,    85,    55,    55,   116,     0,     0,
     2080      18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
     2081       0,   349,     0,     0,     0,     0,     0,  1144,     0,    31,
     2082       0,   222,   412,   352,  1152,     0,     0,     0,     0,  1156,
     2083       0,     0,     0,     0,  1160,     0,  1161,   116,     0,     0,
     2084    1163,  1164,  1165,     0,     0,  1168,     0,    34,     0,     0,
     2085       0,     0,     0,     0,  1180,     0,     0,   125,  -294,     0,
     2086    1204,     0,   125,   125,     0,   352,     0,  1204,   125,     0,
     2087       0,     0,  1195,  1196,  1323,   352,     0,     0,   352,     0,
     2088       0,     0,     0,   221,     0,   352,     0,     0,    76,     0,
     2089     352,     0,     0,     0,     0,     0,     0,     0,     0,  1226,
     2090       0,     0,  1228,   354,     0,     0,     0,     0,    76,     0,
     2091       0,     0,     0,     0,     0,     0,    76,     0,     0,     0,
     2092    1204,     0,     0,     0,     0,     0,     0,  1557,     0,     0,
     2093       0,     0,     0,     0,     0,     0,     0,   584,     0,     0,
     2094       0,  1244,   354,     0,     0,     0,     0,  1248,  1249,     0,
     2095       0,     0,    73,     0,     0,     0,     0,     0,     0,  1260,
     2096     354,     0,    76,    78,  1264,     0,     0,  1268,     0,  1269,
     2097       0,     0,  1271,     0,     0,     0,     0,     0,     0,     0,
     2098       0,     0,     0,     0,     0,  1279,     0,     0,     0,     0,
     2099       0,     0,     0,     0,     0,    78,   281,   282,  1286,   283,
     2100    1288,  1289,  1290,  1291,   354,     0,     0,     0,     0,     0,
     2101       0,     0,     0,     0,     0,     0,  1298,     0,  1299,     0,
     2102       0,     0,   171,     0,     0,   284,     0,     0,     0,     0,
     2103     223,   649,     0,   138,   139,   286,   352,     0,   287,   650,
     2104     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2105     412,  1327,  1328,   293,     0,     0,     0,     0,     0,     0,
     2106       0,     0,     0,     0,     0,     0,     0,     0,   294,   354,
     2107     651,     0,   652,   379,     0,     0,     0,   296,   380,   298,
     2108     299,   300,   301,     0,     0,     0,     0,     0,     0,   352,
     2109     352,     0,   352,   352,     0,     0,     0,     0,     0,     0,
     2110       0,     0,     0,  1363,  1364,     0,     0,     0,     0,     0,
     2111       0,     0,    73,  1374,   354,   354,   354,     0,   355,     0,
     2112       0,     0,     0,     0,     0,     0,     0,     0,     0,  1158,
     2113       0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
     2114       0,     0,     0,     0,     0,  1170,     0,   352,   352,     0,
     2115       0,   354,     0,     0,     0,     0,     0,     0,     0,     0,
     2116       0,     0,    76,     0,     0,  1407,     0,     0,   354,     0,
     2117       0,     0,     0,     0,     0,     0,     0,  1411,     0,  1412,
     2118    1413,  1414,   281,   282,     0,   283,     0,     0,     0,     0,
     2119       0,  1418,     0,     0,     0,     0,     0,     0,     0,     0,
     2120    1429,     0,     0,     0,    76,     0,     0,   354,     0,     0,
     2121       0,   284,   352,    78,     0,     0,  1442,   285,    78,     0,
     2122       0,   286,  1238,     0,   287,   288,   289,   290,    41,    42,
     2123       0,   291,   292,     0,     0,     0,     0,     0,    85,   293,
     2124       0,     0,     0,     0,   354,     0,     0,     0,     0,     0,
     2125       0,     0,   125,     0,   294,   221,   378,     0,     0,   379,
     2126       0,     0,     0,   296,   380,   298,   299,   300,   301,     0,
     2127      85,     0,  1491,  1492,     0,     0,     0,    73,     0,     0,
     2128       0,     0,     0,     0,     0,  1497,   354,     0,     0,     0,
     2129       0,   352,  1497,   352,     0,     0,   354,     0,     0,   354,
     2130       0,     0,     0,     0,   222,   224,   354,     0,     0,     0,
     2131       0,   354,     0,   223,     0,     0,     0,     0,     0,     0,
     2132       0,     0,     0,   352,     0,  1531,     0,     0,     0,  1537,
     2133       0,   352,   352,   352,     0,     0,     0,     0,     0,     0,
     2134       0,     0,   352,   352,     0,     0,     0,     0,     0,     0,
     2135       0,     0,     0,     0,     0,     0,    73,     0,  1559,     0,
     2136    1560,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2137       0,     0,     0,    76,     0,     0,     0,   125,     0,   352,
     2138      78,     0,     0,     0,     0,     0,     0,     0,  1575,  1576,
     2139       0,     0,     0,   362,     0,   355,  1579,  1580,     0,     0,
     2140      78,     0,     0,     0,     0,     0,  -519,     0,    78,     1,
     2141       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
     2142      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2143      22,    23,    24,    25,   355,     0,    26,    27,    28,    29,
     2144       0,     0,    30,     0,     0,    31,    32,     0,     0,     0,
     2145       0,     0,   355,     0,    78,     0,     0,   354,     0,     0,
     2146       0,     0,     0,     0,     0,     0,     0,   352,     0,     0,
     2147      33,     0,     0,    34,     0,    35,     0,    36,    37,     0,
     2148      38,    39,    40,     0,     0,     0,     0,     0,    85,    41,
     2149      42,     0,     0,    85,     0,     0,   355,     0,  1034,     0,
     2150       0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
     2151     354,   354,     0,   354,   354,    43,    73,    44,     0,     0,
     2152       0,     0,     0,    73,     0,    45,     0,     0,   281,   282,
     2153      31,   283,     0,    76,     0,     8,     9,    10,    11,    12,
     2154      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2155      23,    24,    25,  -295,     0,     0,     0,   284,    34,     0,
     2156       0,   355,     0,   285,    31,     0,     0,   286,   354,   354,
     2157     287,   288,   289,   290,    41,    42,    73,   291,   292,     0,
     2158       0,     0,     0,     0,     0,   293,     0,     0,   224,     0,
     2159       0,     0,    34,     0,     0,     0,     0,     0,     0,     0,
     2160     294,     0,   378,  -295,     0,     0,   355,   355,   355,   296,
     2161     827,   298,   299,   300,   301,     0,     0,     0,     0,     0,
     2162       0,     0,     0,     0,     0,   355,     0,     0,     0,     0,
     2163       0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
     2164       0,     0,     0,   355,     0,     0,     0,     0,     0,     0,
     2165       0,     0,     0,     0,    78,    85,     0,     0,     0,   164,
    20612166     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2062        0,     0,     0,     0,  1325,  1326,     0,     0,     0,     0,
    2063        0,   412,     0,   724,     0,     0,     0,    55,     0,   224,
    2064        0,   724,   724,   724,     0,     0,   222,     0,     0,     0,
    2065        0,     0,   349,   349,     0,     0,     0,     0,   175,     0,
    2066        0,     0,   352,     0,     0,     0,  1203,     0,     0,    55,
    2067        0,     0,    55,     0,     0,  1361,  1362,     0,     0,     0,
    2068        0,     0,     0,     0,     0,  1372,     0,   584,     0,   724,
    2069        0,     0,     0,     0,     0,   588,     0,     0,   591,     0,
    2070      116,     0,     0,   212,     0,    78,     0,     0,     0,     0,
    2071       78,     0,     0,    76,     0,   352,   352,     0,   352,   352,
    2072        0,     0,     0,     0,     0,     0,     0,   362,   354,     0,
    2073        0,     0,     0,    76,     0,     0,     0,  1405,    73,     0,
    2074        0,    76,     0,     0,     0,     0,     0,     0,     0,  1409,
    2075        0,  1410,  1411,  1412,     0,     0,  1503,     0,  1507,     0,
    2076      347,   412,     0,  1416,     0,   420,     0,   354,     0,     0,
    2077        0,     0,  1427,   352,   352,     0,     0,   349,     0,     0,
    2078        0,     0,     0,     0,     0,   354,     0,    76,  1440,     0,
    2079        0,     0,     0,  1536,     0,  1538,     0,     0,     0,   212,
    2080        0,     0,     0,   116,     0,   223,     0,     0,     0,     0,
     2167     362,     0,     0,     0,     0,    85,   222,     0,   217,     0,
     2168       0,     0,     0,    85,     0,     0,     0,     0,     0,     0,
     2169       0,     0,     0,     0,     0,     0,    78,     0,    76,   355,
     2170       0,     0,     0,     0,     0,     0,     0,     0,     0,   362,
     2171       0,     0,   354,     0,   354,     0,     0,     0,     0,     0,
     2172       0,     0,     0,     0,   164,     0,     0,   362,     0,    85,
     2173     271,     0,     0,     0,     0,     0,   355,     0,     0,     0,
     2174       0,     0,     0,     0,   354,     0,     0,     0,     0,     0,
     2175       0,     0,   354,   354,   354,     0,     0,     0,     0,   164,
     2176       0,     0,     0,   354,   354,     0,     0,     0,     0,   368,
     2177       0,   362,     0,   374,     0,     0,     0,    76,   355,     0,
     2178       0,     0,     0,     0,     0,     0,     0,     0,   355,     0,
     2179       0,   355,     0,     0,     0,     0,   223,     0,   355,     0,
     2180     354,     0,     0,   355,     8,     9,    10,    11,    12,    13,
     2181      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2182      24,    25,   164,     0,    26,    27,    28,     0,     0,     0,
     2183       0,     0,     0,    31,   217,     0,   362,     0,     0,     0,
    20812184       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2082        0,     0,    85,     0,     0,    55,  1203,    85,     0,   354,
    2083        0,     0,     0,  1203,     0,     0,     0,   352,  1567,     0,
    2084     1568,     0,     0,     0,  1489,  1490,     0,     0,     0,     0,
    2085      412,     0,     0,  1575,  1576,    55,     0,  1495,     0,   125,
    2086        0,     0,     0,     0,  1495,     0,     0,     0,     0,     0,
    2087        0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
    2088      221,     0,     0,     0,     0,     0,  1203,   355,     0,     0,
    2089        0,     0,    78,  1555,   354,     0,     0,  1529,     0,     0,
    2090       78,  1535,    73,     0,     0,     0,     0,     0,     0,     0,
    2091        0,     0,     0,     0,     0,   352,     0,   352,     0,     0,
    2092        0,     0,   224,     0,     0,     0,   355,     0,     0,     0,
    2093     1557,     0,  1558,     0,     0,     0,     0,     0,     0,   354,
    2094      354,   354,   584,   584,   355,     0,    78,   352,     0,     0,
    2095        0,     0,     0,     0,     0,   352,   352,   352,   354,     0,
    2096     1573,  1574,     0,     0,     0,     0,   352,   352,  1577,  1578,
    2097        0,     0,     0,     0,     0,     0,   354,     0,     0,     0,
    2098       73,     0,     0,   125,     0,     0,     0,    76,   355,    85,
    2099        0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
    2100        0,     0,     0,   352,   362,     0,     0,     0,     0,    85,
    2101        0,     0,     0,     0,     0,     0,     0,    85,     0,     0,
    2102       &nbs