Index: doc/aaron_comp_II/comp_II.tex
===================================================================
--- doc/aaron_comp_II/comp_II.tex	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ doc/aaron_comp_II/comp_II.tex	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -84,16 +84,22 @@
 \section{Introduction}
 
-\CFA\footnote{Pronounced ``C-for-all'', and written \CFA, CFA, or \CFL.} is an evolutionary modernization of the C programming language currently being designed and built at the University of Waterloo by a team led by Peter Buhr. 
-\CFA adds multiple features to C, including name overloading, user-defined operators, parametric-polymorphic routines, and type constructors and destructors, among others. 
-These features make \CFA significantly more powerful and expressive than C, but impose a significant compile-time cost to support, particularly in the expression resolver, which must evaluate the typing rules of a much more complex type system. 
-The primary goal of this proposed research project is to develop a sufficiently performant expression resolution algorithm, experimentally validate its performance, and integrate it into \Index*{CFA-CC}, the \CFA reference compiler.
-Secondary goals of this project include the development of various new language features for \CFA; parametric-polymorphic (``generic'') types have already been designed and implemented, and reference types and user-defined conversions are under design consideration. 
-The experimental performance-testing architecture for resolution algorithms will also be used to determine the compile-time cost of adding such new features to the \CFA type system. 
-More broadly, this research should provide valuable data for implementers of compilers for other programming languages with similarly powerful static type systems.
+\CFA\footnote{Pronounced ``C-for-all'', and written \CFA or \CFL.} is an evolutionary modernization of the C programming language currently being designed and built at the University of Waterloo by a team led by Peter Buhr. 
+\CFA both fixes existing design problems and adds multiple new features to C, including name overloading, user-defined operators, parametric-polymorphic routines, and type constructors and destructors, among others. 
+The new features make \CFA significantly more powerful and expressive than C, but impose a significant compile-time cost, particularly in the expression resolver, which must evaluate the typing rules of a much more complex type-system.
+
+The primary goal of this research project is to develop a sufficiently performant expression resolution algorithm, experimentally validate its performance, and integrate it into CFA, the \CFA reference compiler.
+Secondary goals of this project include the development of various new language features for \CFA: parametric-polymorphic (``generic'') types have already been designed and implemented, and reference types and user-defined conversions are under design consideration. 
+An experimental performance-testing architecture for resolution algorithms is under development to determine the relative performance of different expression resolution algorithms, as well as the compile-time cost of adding various new features to the \CFA type-system. 
+More broadly, this research should provide valuable data for implementers of compilers for other programming languages with similarly powerful static type-systems.
 
 \section{\CFA}
 
-To make the scope of the proposed expression resolution problem more explicit, it is necessary to define the features of both C and \CFA (both current and proposed) which affect this algorithm. 
-In some cases the interactions of multiple features make expression resolution a significantly more complex problem than any individual feature would; in others a feature which does not by itself add any complexity to expression resolution will trigger previously rare edge cases much more frequently.
+To make the scope of the proposed expression resolution problem more explicit, it is necessary to define the features of both C and \CFA (both current and proposed) that affect this algorithm. 
+In some cases the interactions of multiple features make expression resolution a significantly more complex problem than any individual feature would; in other cases a feature that does not by itself add any complexity to expression resolution triggers previously rare edge cases more frequently.
+
+It is important to note that \CFA is not an object-oriented language.
+\CFA does have a system of (possibly implicit) type conversions derived from C's type conversions; while these conversions may be thought of as something like an inheritance hierarchy the underlying semantics are significantly different and such an analogy is loose at best. 
+Particularly, \CFA has no concept of ``subclass'', and thus no need to integrate an inheritance-based form of polymorphism with its parametric and overloading-based polymorphism. 
+The graph structure of the \CFA type conversions is also markedly different than an inheritance graph; it has neither a top nor a bottom type, and does not satisfy the lattice properties typical of inheritance graphs.
 
 \subsection{Polymorphic Functions}
@@ -101,5 +107,5 @@
 Such functions are written using a ©forall© clause (which gives the language its name):
 \begin{lstlisting}
-forall(otype T)
+®forall(otype T)®
 T identity(T x) {
     return x;
@@ -110,9 +116,9 @@
 The ©identity© function above can be applied to any complete object type (or ``©otype©''). 
 The type variable ©T© is transformed into a set of additional implicit parameters to ©identity© which encode sufficient information about ©T© to create and return a variable of that type. 
-The current \CFA implementation passes the size and alignment of the type represented by an ©otype© parameter, as well as an assignment operator, constructor, copy constructor \& destructor.
+The current \CFA implementation passes the size and alignment of the type represented by an ©otype© parameter, as well as an assignment operator, constructor, copy constructor and destructor.
 
 Since bare polymorphic types do not provide a great range of available operations, \CFA also provides a \emph{type assertion} mechanism to provide further information about a type:
 \begin{lstlisting}
-forall(otype T | { T twice(T); })
+forall(otype T ®| { T twice(T); }®)
 T four_times(T x) {
     return twice( twice(x) );
@@ -137,6 +143,32 @@
 Finding appropriate functions to satisfy type assertions is essentially a recursive case of expression resolution, as it takes a name (that of the type assertion) and attempts to match it to a suitable declaration in the current scope. 
 If a polymorphic function can be used to satisfy one of its own type assertions, this recursion may not terminate, as it is possible that function will be examined as a candidate for its own type assertion unboundedly repeatedly. 
-To avoid infinite loops, the current \Index*{CFA-CC} compiler imposes a fixed limit on the possible depth of recursion, similar to that employed by most \Index*[C++]{\CC} compilers for template expansion; this restriction means that there are some semantically well-typed expressions which cannot be resolved by {CFA-CC}. 
+To avoid infinite loops, the current CFA compiler imposes a fixed limit on the possible depth of recursion, similar to that employed by most \CC compilers for template expansion; this restriction means that there are some semantically well-typed expressions which cannot be resolved by CFA. 
 One area of potential improvement this project proposes to investigate is the possibility of using the compiler's knowledge of the current set of declarations to more precicely determine when further type assertion satisfaction recursion will not produce a well-typed expression.
+
+\subsubsection{Traits}
+\CFA provides \emph{traits} as a means to name a group of type assertions, as in the example below:
+\begin{lstlisting}
+trait has_magnitude(otype T) {
+    bool ?<?(T, T);        // comparison operator for T
+    T -?(T);               // negation operator for T
+    void ?{}(T*, zero_t);  // constructor from 0 literal
+};
+
+forall(otype M | has_magnitude(M))
+M abs( M m ) {
+    M zero = 0;  // uses zero_t constructor from trait
+    return m < zero ? -m : m;
+}
+
+forall(otype M | has_magnitude(M))
+M max_magnitude( M a, M b ) {
+    M aa = abs(a), ab = abs(b);
+    return aa < ab ? b : a; 
+}
+\end{lstlisting}
+
+Semantically, a trait is merely a named list of type assertions, but they can be used in many of the same situations where an interface in Java or an abstract base class in \CC would be used.
+Unlike Java interfaces or \CC base classes, \CFA types do not explicitly state any inheritance relationship to traits they satisfy; this can be considered a form of structural inheritance, similar to interface implementation in Go, as opposed to the nominal inheritance model of Java and \CC. 
+% TODO talk about modelling of nominal inheritance with structural inheritance, possibility of investigating some resolver algorithms that require nominal
 
 \subsection{Name Overloading}
@@ -174,5 +206,5 @@
 Open research questions on this topic include whether a conversion graph can be generated that represents each allowable conversion in C with a unique minimal-length path, such that the path lengths accurately represent the relative costs of the conversions, whether such a graph representation can be usefully augmented to include user-defined types as well as built-in types, and whether the graph can be efficiently represented and included in the expression resolver.
 
-\subsection{Constructors \& Destructors}
+\subsection{Constructors and Destructors}
 Rob Shluntz, a current member of the \CFA research team, has added constructors and destructors to \CFA. 
 Each type has an overridable default-generated zero-argument constructor, copy constructor, assignment operator, and destructor; for struct types these functions each call their equivalents on each field of the struct. 
@@ -180,5 +212,5 @@
 
 \subsection{Generic Types}
-The author has added a generic type capability to \CFA, designed to efficiently and naturally integrate with \CFA's existing polymorphic functions. 
+I have already added a generic type capability to \CFA, designed to efficiently and naturally integrate with \CFA's existing polymorphic functions. 
 A generic type can be declared by placing a ©forall© specifier on a struct or union declaration, and instantiated using a parenthesized list of types after the type name:
 \begin{lstlisting}
@@ -195,7 +227,7 @@
 \end{lstlisting}
 For \emph{concrete} generic types, that is, those where none of the type parameters depend on polymorphic type variables (like ©pair(const char*, int)© above), the struct is essentially template expanded to a new struct type; for \emph{polymorphic} generic types (such as ©pair(const char*, T)© above), member access is handled by a runtime calculation of the field offset, based on the size and alignment information of the polymorphic parameter type. 
-The default-generated constructors, destructor \& assignment operator for a generic type are polymorphic functions with the same list of type parameters as the generic type definition.
-
-Aside from giving users the ability to create more parameterized types than just the built-in pointer, array \& function types, the combination of generic types with polymorphic functions and implicit conversions makes the edge case where a polymorphic function can match its own assertions much more common, as follows:
+The default-generated constructors, destructor and assignment operator for a generic type are polymorphic functions with the same list of type parameters as the generic type definition.
+
+Aside from giving users the ability to create more parameterized types than just the built-in pointer, array and function types, the combination of generic types with polymorphic functions and implicit conversions makes the edge case where a polymorphic function can match its own assertions much more common, as follows:
 \begin{itemize} 
 \item Given an expression in an untyped context, such as a top-level function call with no assignment of return values, apply a polymorphic implicit conversion to the expression that can produce multiple types (the built-in conversion from ©void*© to any other pointer type is one, but not the only).
@@ -221,5 +253,5 @@
 
 \subsection{Reference Types}
-The author, in collaboration with the rest of the \CFA research team, has been designing \emph{reference types} for \CFA. 
+I have been designing \emph{reference types} for \CFA, in collaboration with the rest of the \CFA research team. 
 Given some type ©T©, a ©T&© (``reference to ©T©'') is essentially an automatically dereferenced pointer; with these semantics most of the C standard's discussions of lvalues can be expressed in terms of references instead, with the benefit of being able to express the difference between the reference and non-reference version of a type in user code. 
 References preserve C's existing qualifier-dropping lvalue-to-rvalue conversion (\eg a ©const volatile int&© can be implicitly converted to a bare ©int©); the reference proposal also adds a rvalue-to-lvalue conversion to \CFA, implemented by storing the value in a new compiler-generated temporary and passing a reference to the temporary. 
@@ -229,5 +261,5 @@
 
 \subsection{Literal Types}
-Another proposal currently under consideration for the \CFA type system is assigning special types to the literal values ©0© and ©1©.%, say ©zero_t© and ©one_t©. 
+Another proposal currently under consideration for the \CFA type-system is assigning special types to the literal values ©0© and ©1©.%, say ©zero_t© and ©one_t©. 
 Implicit conversions from these types would allow ©0© and ©1© to be considered as values of many different types, depending on context, allowing expression desugarings like ©if ( x ) {}© $\Rightarrow$ ©if ( x != 0 ) {}© to be implemented efficiently and precicely. 
 This is a generalization of C's existing behaviour of treating ©0© as either an integer zero or a null pointer constant, and treating either of those values as boolean false. 
@@ -248,8 +280,8 @@
 Expression resolution is somewhat unavoidably exponential in $p$, the number of function parameters, and $d$, the depth of the expression tree, but these values are fixed by the user programmer, and generally bounded by reasonably small constants. 
 $k$, on the other hand, is mostly dependent on the representation of types in the system and the efficiency of type assertion checking; if a candidate argument combination can be compared to a function parameter list in linear time in the length of the list (\ie $k = 1$), then the $p^{k \cdot d}$ term is linear in the input size of the source code for the expression, otherwise the resolution algorithm will exibit sub-linear performance scaling on code containing more-deeply nested expressions.
-The number of valid interpretations of any subexpression, $i$, is bounded by the number of types in the system, which is possibly infinite, though practical resolution algorithms for \CFA must be able to place some finite bound on $i$, possibly at the expense of type system completeness. 
+The number of valid interpretations of any subexpression, $i$, is bounded by the number of types in the system, which is possibly infinite, though practical resolution algorithms for \CFA must be able to place some finite bound on $i$, possibly at the expense of type-system completeness. 
 
 The research goal of this project is to develop a performant expression resolver for \CFA; this analysis suggests two primary areas of investigation to accomplish that end. 
-The first is efficient argument-parameter matching; Bilson\cite{Bilson03} mentions significant optimization opportunities available in the current literature to improve on the existing {CFA-CC} compiler.
+The first is efficient argument-parameter matching; Bilson\cite{Bilson03} mentions significant optimization opportunities available in the current literature to improve on the existing CFA compiler.
 %TODO: look up and lit review 
 The second, and likely more fruitful, area of investigation is heuristics and algorithmic approaches to reduce the number of argument interpretations considered in the common case; given the large ($p+1$) exponent on number of interpretations considered in the runtime analysis, even small reductions here could have a significant effect on overall resolver runtime. 
@@ -299,14 +331,15 @@
 Another approach would be to generate a set of possible implicit conversions for each set of interpretations of a given argument. 
 This would have the benefit of detecting ambiguous interpretations of arguments at the level of the argument rather than its containing call, would also never find more than one interpretation of the argument with a given type, and would re-use calculation of implicit conversions between function candidates. 
-On the other hand, this approach may unncessarily generate argument interpretations that will never match a parameter, wasting work.
+On the other hand, this approach may unncessarily generate argument interpretations that will never match a parameter, wasting work. 
+Further, in the presence of tuple types this approach may lead to a combinatorial explosion of argument interpretations considered, unless the tuple can be considered as a sequence of elements rather than a unified whole.
 
 \subsection{Candidate Set Generation}
-Cormack\cite{Cormack81}, Baker\cite{Baker82} \& Bilson\cite{Bilson03} all generate the complete set of candidate argument interpretations before attempting to match the containing function call expression. 
+Cormack\cite{Cormack81}, Baker\cite{Baker82} and Bilson\cite{Bilson03} all generate the complete set of candidate argument interpretations before attempting to match the containing function call expression. 
 However, given that the top-level expression interpretation that is ultimately chosen will be the minimal-cost valid interpretation, any consideration of non-minimal-cost interpretations is in some sense wasted work.
 If we assume that user programmers will generally write function calls with relatively low-cost interpretations, a possible work-saving heuristic is to generate only the lowest-cost argument interpretations first, attempt to find a valid top-level interpretation using them, and only if that fails generate the higher-cost argument interpretations.
 
 \subsubsection{Eager}
-Within the eager approach taken by Cormack, Baker \& Bilson, there are still variants to explore. 
-Cormack \& Baker do not account for implict conversions, and thus do not account for the possibility of multiple valid interpretations with distinct costs; Bilson, on the other hand, sorts the list of interpretations to aid in finding minimal-cost interpretations. 
+Within the eager approach taken by Cormack, Baker and Bilson, there are still variants to explore. 
+Cormack and Baker do not account for implict conversions, and thus do not account for the possibility of multiple valid interpretations with distinct costs; Bilson, on the other hand, sorts the list of interpretations to aid in finding minimal-cost interpretations. 
 Sorting the lists of argument or function call interpretations by cost at some point during resolution may provide useful opportunities to short-circuit expression evaluation when a minimal-cost interpretation is found, though it is not clear if this short-circuiting behaviour would justify the cost of the sort.
 
@@ -315,5 +348,5 @@
 However, if user programmers actually use relatively few implicit conversions, then the ``on arguments'' approach to implicit conversions will generate a large number of high-cost interpretations which may never be used. 
 The essence of the lazy approach to candidate set generation is to wrap the matching algorithm into the element generator of a lazy list type, only generating as few elements at a time as possible to ensure that the next-smallest-cost interpretation has been generated. 
-Assuming that argument interpretations are provided to the parameter matching algorithm in sorted order, a sorted list of function call interpretations can be produced by generating combinations of arguments sorted by total cost\footnote{The author has developed a lazy $n$-way combination generation algorithm that can perform this task.}, then generating function call interpretations in the order suggested by this list. 
+Assuming that argument interpretations are provided to the parameter matching algorithm in sorted order, a sorted list of function call interpretations can be produced by generating combinations of arguments sorted by total cost\footnote{I have already developed a lazy $n$-way combination generation algorithm to perform this task.}, then generating function call interpretations in the order suggested by this list. 
 Note that the function call interpretation chosen may have costs of its own, for instance polymorphic type binding, so in some cases a number of argument combinations (any combination whose marginal cost does not exceed the cost of the function call interpretation itself) may need to be considered to determine the next-smallest-cost function call interpretation.
 Ideally, this candidate generation approach will lead to very few unused candidates being generated (in the expected case where the user programmer has, in fact, provided a validly-typable program), but this research project will need to determine whether or not the overheads of lazy generation exceed the benefit produced from considering fewer interpretations.
@@ -333,5 +366,5 @@
 %\subsection{Parameter-Directed}
 %\textbf{TODO: Richard's algorithm isn't Baker (Cormack?), disentangle from this section \ldots}. 
-%The expression resolution algorithm used by the existing iteration of {CFA-CC} is based on Baker's\cite{Baker82} algorithm for overload resolution in Ada. 
+%The expression resolution algorithm used by the existing iteration of CFA is based on Baker's\cite{Baker82} algorithm for overload resolution in Ada. 
 %The essential idea of this algorithm is to first find the possible interpretations of the most deeply nested subexpressions, then to use these interpretations to recursively generate valid interpretations of their superexpressions. 
 %To simplify matters, the only expressions considered in this discussion of the algorithm are function application and literal expressions; other expression types can generally be considered to be variants of one of these for the purposes of the resolver, \eg variables are essentially zero-argument functions. 
@@ -341,5 +374,5 @@
 %\textbf{TODO: Figure}
 %
-%Baker's algorithm was designed to account for name overloading; Richard Bilson\cite{Bilson03} extended this algorithm to also handle polymorphic functions, implicit conversions \& multiple return types when designing the original \CFA compiler. 
+%Baker's algorithm was designed to account for name overloading; Richard Bilson\cite{Bilson03} extended this algorithm to also handle polymorphic functions, implicit conversions and multiple return types when designing the original \CFA compiler. 
 %The core of the algorithm is a function which Baker refers to as $gen\_calls$. 
 %$gen\_calls$ takes as arguments the name of a function $f$ and a list containing the set of possible subexpression interpretations $S_j$ for each argument of the function and returns a set of possible interpretations of calling that function on those arguments. 
@@ -363,14 +396,14 @@
 \section{Proposal}
 Baker\cite{Baker82} discussed various expression resolution algorithms that could handle name overloading, but left experimental comparison of those algorithms to future work; Bilson\cite{Bilson03} described one extension of Baker's algorithm to handle implicit conversions, but did not fully explore the space of algorithmic approaches to handle both overloaded names and implicit conversions. 
-This project is intended to experimentally test a number of expression resolution algorithms which are powerful enough to handle the \CFA type system, including both name overloading and implicit conversions. 
+This project is intended to experimentally test a number of expression resolution algorithms which are powerful enough to handle the \CFA type-system, including both name overloading and implicit conversions. 
 This comparison will close Baker's open research question, as well as potentially improving on Bilson's \CFA compiler.
 
-Rather than testing all of these algorithms in-place in the \CFA compiler, a resolver prototype will be developed which acts on a simplified input language encapsulating the essential details of the \CFA type system\footnote{Note that this simplified input language is not required to be a usable programming language.}. 
+Rather than testing all of these algorithms in-place in the \CFA compiler, a resolver prototype will be developed which acts on a simplified input language encapsulating the essential details of the \CFA type-system\footnote{Note that this simplified input language is not required to be a usable programming language.}. 
 Multiple variants of this resolver prototype will be implemented, each encapsulating a different expression resolution variant, sharing as much code as feasible. 
 These variants will be instrumented to test runtime performance, and run on a variety of input files; the input files may be generated programmatically or from exisiting code in \CFA or similar languages.
-These experimental results will allow the research team to determine the algorithm likely to be most performant in practical use, and replace {CFA-CC}'s existing expression resolver with that code. 
+These experimental results will allow the research team to determine the algorithm likely to be most performant in practical use, and replace CFA's existing expression resolver with that code. 
 The experimental results will also provide some empirical sense of the compile-time cost of various language features by comparing the results of the most performant resolver variant that supports the feature with the most performant resolver variant that doesn't, a useful capability to guide language design.
 
-This proposed project should provide valuable data on how to implement a performant compiler for modern programming languages such as \CFA with powerful static type systems, specifically targeting the feature interaction between name overloading and implicit conversions.
+This proposed project should provide valuable data on how to implement a performant compiler for modern programming languages such as \CFA with powerful static type-systems, specifically targeting the feature interaction between name overloading and implicit conversions.
 
 \appendix
@@ -379,8 +412,8 @@
 \begin{center}
 \begin{tabular}{ | r @{--} l | p{4in} | }
-\hline       May 2015 & April 2016   & Project familiarization and generic types design \& implementation. \\
-\hline       May 2016 & April 2017   & Design \& implement resolver prototype and run performance experiments. \\
-\hline       May 2017 & August 2017  & Integrate new language features and best-performing resolver prototype into {CFA-CC}. \\
-\hline September 2017 & January 2018 & Thesis writing \& defense. \\
+\hline       May 2015 & April 2016   & Project familiarization and generic types design and implementation. \\
+\hline       May 2016 & April 2017   & Design and implement resolver prototype and run performance experiments. \\
+\hline       May 2017 & August 2017  & Integrate new language features and best-performing resolver prototype into CFA. \\
+\hline September 2017 & January 2018 & Thesis writing and defense. \\
 \hline
 \end{tabular}
Index: doc/working/resolver_design.md
===================================================================
--- doc/working/resolver_design.md	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ doc/working/resolver_design.md	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -37,5 +37,5 @@
 
 An alternate possibility would be to only count two-arg constructors 
-`void ?{} ( To*, From )` as unsafe conversions; under this semantics, safe and  
+`void ?{} ( To*, From )` as unsafe conversions; under this semantics, safe and 
 explicit conversions should also have a compiler-enforced restriction to 
 ensure that they are two-arg functions (this restriction may be valuable 
@@ -69,5 +69,5 @@
 two chains of conversions, one among the signed integral types, another among 
 the unsigned, and to use monomorphic conversions to allow conversions between 
-signed and unsigned integer types).   
+signed and unsigned integer types).
 
 ### Implementation Details ###
@@ -509,5 +509,5 @@
 A variant of the above scheme would be to fix a maximum depth of polymorphic 
 type variables (16 seems like a reasonable choice) at which a parameter would 
-be considered to be effectively monomorphic, and to subtract the value  
+be considered to be effectively monomorphic, and to subtract the value 
 described above from that maximum, clamping the result to a minimum of 0. 
 Under this scheme, assuming a maximum value of 4, `int` has value 0, `T` has 
@@ -577,5 +577,5 @@
 specifying the (completely arbitrary) maximum depth as part of the language or 
 allowing the compiler to refuse to accept otherwise well-typed deeply-nested 
-polymorphic types.  
+polymorphic types.
 
 For purposes of determining polymorphism, the list of return types of a 
@@ -951,7 +951,7 @@
 `sizeof`, `alignof`, and `offsetof` expressions have at most a single 
 interpretation, of type `size_t`. 
-`sizeof` and `alignof` expressions take either a type or an expression as a  
-an argument; if the argument is a type, it must be a complete type which is 
-not a function type, if an expression, the expression must have a single 
+`sizeof` and `alignof` expressions take either a type or an expression as an 
+argument; if the argument is a type, it must be a complete type which is not a 
+function type, if an expression, the expression must have a single 
 interpretation, the type of which conforms to the same rules. 
 `offsetof` takes two arguments, a type and a member name; the type must be 
@@ -1620,2 +1620,9 @@
 			= delete;
 	}
+
+## Appendix E: Features to Add in Resolver Re-write ##
+* Reference types
+* Special types for 0 and 1 literals
+* Expression type for return statement that resolves similarly to ?=?
+  - This is to get rid of the kludge in the box pass that effectively 
+    re-implements the resolver poorly.
Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/GenPoly/Box.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -62,91 +62,4 @@
 
 		FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars );
-
-		/// Abstracts type equality for a list of parameter types
-		struct TypeList {
-			TypeList() : params() {}
-			TypeList( const std::list< Type* > &_params ) : params() { cloneAll(_params, params); }
-			TypeList( std::list< Type* > &&_params ) : params( _params ) {}
-
-			TypeList( const TypeList &that ) : params() { cloneAll(that.params, params); }
-			TypeList( TypeList &&that ) : params( std::move( that.params ) ) {}
-
-			/// Extracts types from a list of TypeExpr*
-			TypeList( const std::list< TypeExpr* >& _params ) : params() {
-				for ( std::list< TypeExpr* >::const_iterator param = _params.begin(); param != _params.end(); ++param ) {
-					params.push_back( (*param)->get_type()->clone() );
-				}
-			}
-
-			TypeList& operator= ( const TypeList &that ) {
-				deleteAll( params );
-
-				params.clear();
-				cloneAll( that.params, params );
-
-				return *this;
-			}
-
-			TypeList& operator= ( TypeList &&that ) {
-				deleteAll( params );
-
-				params = std::move( that.params );
-
-				return *this;
-			}
-
-			~TypeList() { deleteAll( params ); }
-
-			bool operator== ( const TypeList& that ) const {
-				if ( params.size() != that.params.size() ) return false;
-
-				SymTab::Indexer dummy;
-				for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) {
-					if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false;
-				}
-				return true;
-			}
-
-			std::list< Type* > params;  ///< Instantiation parameters
-		};
-
-		/// Maps a key and a TypeList to the some value, accounting for scope
-		template< typename Key, typename Value >
-		class InstantiationMap {
-			/// Wraps value for a specific (Key, TypeList) combination
-			typedef std::pair< TypeList, Value* > Instantiation;
-			/// List of TypeLists paired with their appropriate values
-			typedef std::vector< Instantiation > ValueList;
-			/// Underlying map type; maps keys to a linear list of corresponding TypeLists and values
-			typedef ScopedMap< Key*, ValueList > InnerMap;
-
-			InnerMap instantiations;  ///< instantiations
-
-		public:
-			/// Starts a new scope
-			void beginScope() { instantiations.beginScope(); }
-
-			/// Ends a scope
-			void endScope() { instantiations.endScope(); }
-
-			/// Gets the value for the (key, typeList) pair, returns NULL on none such.
-			Value *lookup( Key *key, const std::list< TypeExpr* >& params ) const {
- 				TypeList typeList( params );
-
-				// scan scopes for matches to the key
-				for ( typename InnerMap::const_iterator insts = instantiations.find( key ); insts != instantiations.end(); insts = instantiations.findNext( insts, key ) ) {
-					for ( typename ValueList::const_reverse_iterator inst = insts->second.rbegin(); inst != insts->second.rend(); ++inst ) {
-						if ( inst->first == typeList ) return inst->second;
-					}
-				}
-				// no matching instantiations found
-				return 0;
-			}
-
-			/// Adds a value for a (key, typeList) pair to the current scope
-			void insert( Key *key, const std::list< TypeExpr* > &params, Value *value ) {
-				instantiations[ key ].push_back( Instantiation( TypeList( params ), value ) );
-			}
-		};
 
 		/// Adds layout-generation functions to polymorphic types
@@ -239,32 +152,4 @@
 		};
 
-		/// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately
-		class GenericInstantiator : public DeclMutator {
-			/// Map of (generic type, parameter list) pairs to concrete type instantiations
-			InstantiationMap< AggregateDecl, AggregateDecl > instantiations;
-			/// Namer for concrete types
-			UniqueName typeNamer;
-
-		public:
-			GenericInstantiator() : DeclMutator(), instantiations(), typeNamer("_conc_") {}
-
-			virtual Type* mutate( StructInstType *inst );
-			virtual Type* mutate( UnionInstType *inst );
-
-	// 		virtual Expression* mutate( MemberExpr *memberExpr );
-
-			virtual void doBeginScope();
-			virtual void doEndScope();
-		private:
-			/// Wrap instantiation lookup for structs
-			StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)instantiations.lookup( inst->get_baseStruct(), typeSubs ); }
-			/// Wrap instantiation lookup for unions
-			UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)instantiations.lookup( inst->get_baseUnion(), typeSubs ); }
-			/// Wrap instantiation insertion for structs
-			void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { instantiations.insert( inst->get_baseStruct(), typeSubs, decl ); }
-			/// Wrap instantiation insertion for unions
-			void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); }
-		};
-
 		/// Replaces member and size/align/offsetof expressions on polymorphic generic types with calculated expressions.
 		/// * Replaces member expressions for polymorphic types with calculated add-field-offset-and-dereference
@@ -354,5 +239,4 @@
 		Pass1 pass1;
 		Pass2 pass2;
-		GenericInstantiator instantiator;
 		PolyGenericCalculator polyCalculator;
 		Pass3 pass3;
@@ -361,5 +245,4 @@
 		mutateTranslationUnit/*All*/( translationUnit, pass1 );
 		mutateTranslationUnit/*All*/( translationUnit, pass2 );
-		instantiator.mutateDeclarationList( translationUnit );
 		mutateTranslationUnit/*All*/( translationUnit, polyCalculator );
 		mutateTranslationUnit/*All*/( translationUnit, pass3 );
@@ -889,5 +772,5 @@
 						arg++;
 					} else {
-						/// xxx - should this be an assertion?
+						// xxx - should this be an assertion?
 						throw SemanticError( "unbound type variable: " + tyParm->first + " in application ", appExpr );
 					} // if
@@ -902,5 +785,5 @@
 			std::list< DeclarationWithType* >::const_iterator fnParm = funcType->get_parameters().begin();
 			std::list< Expression* >::const_iterator fnArg = arg;
-			std::set< std::string > seenTypes; //< names for generic types we've seen
+			std::set< std::string > seenTypes; ///< names for generic types we've seen
 
 			// a polymorphic return type may need to be added to the argument list
@@ -1042,6 +925,6 @@
 		/// this gets rid of warnings from gcc.
 		void addCast( Expression *&actual, Type *formal, const TyVarMap &tyVars ) {
-			Type * newType = formal->clone();
-			if ( getFunctionType( newType ) ) {
+			if ( getFunctionType( formal ) ) {
+				Type * newType = formal->clone();
 				newType = ScrubTyVars::scrub( newType, tyVars );
 				actual = new CastExpr( actual, newType );
@@ -1775,193 +1658,4 @@
 		}
 
-//////////////////////////////////////// GenericInstantiator //////////////////////////////////////////////////
-
-		/// Makes substitutions of params into baseParams; returns true if all parameters substituted for a concrete type
-		bool makeSubstitutions( const std::list< TypeDecl* >& baseParams, const std::list< Expression* >& params, std::list< TypeExpr* >& out ) {
-			bool allConcrete = true;  // will finish the substitution list even if they're not all concrete
-
-			// substitute concrete types for given parameters, and incomplete types for placeholders
-			std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin();
-			std::list< Expression* >::const_iterator param = params.begin();
-			for ( ; baseParam != baseParams.end() && param != params.end(); ++baseParam, ++param ) {
-	// 			switch ( (*baseParam)->get_kind() ) {
-	// 			case TypeDecl::Any: {   // any type is a valid substitution here; complete types can be used to instantiate generics
-					TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
-					assert(paramType && "Aggregate parameters should be type expressions");
-					out.push_back( paramType->clone() );
-					// check that the substituted type isn't a type variable itself
-					if ( dynamic_cast< TypeInstType* >( paramType->get_type() ) ) {
-						allConcrete = false;
-					}
-	// 				break;
-	// 			}
-	// 			case TypeDecl::Dtype:  // dtype can be consistently replaced with void [only pointers, which become void*]
-	// 				out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
-	// 				break;
-	// 			case TypeDecl::Ftype:  // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype]
-	// 				out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
-	// 				break;
-	// 			}
-			}
-
-			// if any parameters left over, not done
-			if ( baseParam != baseParams.end() ) return false;
-	// 		// if not enough parameters given, substitute remaining incomplete types for placeholders
-	// 		for ( ; baseParam != baseParams.end(); ++baseParam ) {
-	// 			switch ( (*baseParam)->get_kind() ) {
-	// 			case TypeDecl::Any:    // no more substitutions here, fail early
-	// 				return false;
-	// 			case TypeDecl::Dtype:  // dtype can be consistently replaced with void [only pointers, which become void*]
-	// 				out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
-	// 				break;
-	// 			case TypeDecl::Ftype:  // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype]
-	// 				out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
-	// 				break;
-	// 			}
-	// 		}
-
-			return allConcrete;
-		}
-
-		/// Substitutes types of members of in according to baseParams => typeSubs, appending the result to out
-		void substituteMembers( const std::list< Declaration* >& in, const std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs,
-								std::list< Declaration* >& out ) {
-			// substitute types into new members
-			TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() );
-			for ( std::list< Declaration* >::const_iterator member = in.begin(); member != in.end(); ++member ) {
-				Declaration *newMember = (*member)->clone();
-				subs.apply(newMember);
-				out.push_back( newMember );
-			}
-		}
-
-		Type* GenericInstantiator::mutate( StructInstType *inst ) {
-			// mutate subtypes
-			Type *mutated = Mutator::mutate( inst );
-			inst = dynamic_cast< StructInstType* >( mutated );
-			if ( ! inst ) return mutated;
-
-			// exit early if no need for further mutation
-			if ( inst->get_parameters().empty() ) return inst;
-			assert( inst->get_baseParameters() && "Base struct has parameters" );
-
-			// check if type can be concretely instantiated; put substitutions into typeSubs
-			std::list< TypeExpr* > typeSubs;
-			if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) {
-				deleteAll( typeSubs );
-				return inst;
-			}
-
-			// make concrete instantiation of generic type
-			StructDecl *concDecl = lookup( inst, typeSubs );
-			if ( ! concDecl ) {
-				// set concDecl to new type, insert type declaration into statements to add
-				concDecl = new StructDecl( typeNamer.newName( inst->get_name() ) );
-				substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs, 	concDecl->get_members() );
-				DeclMutator::addDeclaration( concDecl );
-				insert( inst, typeSubs, concDecl );
-			}
-			StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() );
-			newInst->set_baseStruct( concDecl );
-
-			deleteAll( typeSubs );
-			delete inst;
-			return newInst;
-		}
-
-		Type* GenericInstantiator::mutate( UnionInstType *inst ) {
-			// mutate subtypes
-			Type *mutated = Mutator::mutate( inst );
-			inst = dynamic_cast< UnionInstType* >( mutated );
-			if ( ! inst ) return mutated;
-
-			// exit early if no need for further mutation
-			if ( inst->get_parameters().empty() ) return inst;
-			assert( inst->get_baseParameters() && "Base union has parameters" );
-
-			// check if type can be concretely instantiated; put substitutions into typeSubs
-			std::list< TypeExpr* > typeSubs;
-			if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) {
-				deleteAll( typeSubs );
-				return inst;
-			}
-
-			// make concrete instantiation of generic type
-			UnionDecl *concDecl = lookup( inst, typeSubs );
-			if ( ! concDecl ) {
-				// set concDecl to new type, insert type declaration into statements to add
-				concDecl = new UnionDecl( typeNamer.newName( inst->get_name() ) );
-				substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );
-				DeclMutator::addDeclaration( concDecl );
-				insert( inst, typeSubs, concDecl );
-			}
-			UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() );
-			newInst->set_baseUnion( concDecl );
-
-			deleteAll( typeSubs );
-			delete inst;
-			return newInst;
-		}
-
-	// 	/// Gets the base struct or union declaration for a member expression; NULL if not applicable
-	// 	AggregateDecl* getMemberBaseDecl( MemberExpr *memberExpr ) {
-	// 		// get variable for member aggregate
-	// 		VariableExpr *varExpr = dynamic_cast< VariableExpr* >( memberExpr->get_aggregate() );
-	// 		if ( ! varExpr ) return NULL;
-	//
-	// 		// get object for variable
-	// 		ObjectDecl *objectDecl = dynamic_cast< ObjectDecl* >( varExpr->get_var() );
-	// 		if ( ! objectDecl ) return NULL;
-	//
-	// 		// get base declaration from object type
-	// 		Type *objectType = objectDecl->get_type();
-	// 		StructInstType *structType = dynamic_cast< StructInstType* >( objectType );
-	// 		if ( structType ) return structType->get_baseStruct();
-	// 		UnionInstType *unionType = dynamic_cast< UnionInstType* >( objectType );
-	// 		if ( unionType ) return unionType->get_baseUnion();
-	//
-	// 		return NULL;
-	// 	}
-	//
-	// 	/// Finds the declaration with the given name, returning decls.end() if none such
-	// 	std::list< Declaration* >::const_iterator findDeclNamed( const std::list< Declaration* > &decls, const std::string &name ) {
-	// 		for( std::list< Declaration* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) {
-	// 			if ( (*decl)->get_name() == name ) return decl;
-	// 		}
-	// 		return decls.end();
-	// 	}
-	//
-	// 	Expression* Instantiate::mutate( MemberExpr *memberExpr ) {
-	// 		// mutate, exiting early if no longer MemberExpr
-	// 		Expression *expr = Mutator::mutate( memberExpr );
-	// 		memberExpr = dynamic_cast< MemberExpr* >( expr );
-	// 		if ( ! memberExpr ) return expr;
-	//
-	// 		// get declaration of member and base declaration of member, exiting early if not found
-	// 		AggregateDecl *memberBase = getMemberBaseDecl( memberExpr );
-	// 		if ( ! memberBase ) return memberExpr;
-	// 		DeclarationWithType *memberDecl = memberExpr->get_member();
-	// 		std::list< Declaration* >::const_iterator baseIt = findDeclNamed( memberBase->get_members(), memberDecl->get_name() );
-	// 		if ( baseIt == memberBase->get_members().end() ) return memberExpr;
-	// 		DeclarationWithType *baseDecl = dynamic_cast< DeclarationWithType* >( *baseIt );
-	// 		if ( ! baseDecl ) return memberExpr;
-	//
-	// 		// check if stated type of the member is not the type of the member's declaration; if so, need a cast
-	// 		// this *SHOULD* be safe, I don't think anything but the void-replacements I put in for dtypes would make it past the typechecker
-	// 		SymTab::Indexer dummy;
-	// 		if ( ResolvExpr::typesCompatible( memberDecl->get_type(), baseDecl->get_type(), dummy ) ) return memberExpr;
-	// 		else return new CastExpr( memberExpr, memberDecl->get_type() );
-	// 	}
-
-		void GenericInstantiator::doBeginScope() {
-			DeclMutator::doBeginScope();
-			instantiations.beginScope();
-		}
-
-		void GenericInstantiator::doEndScope() {
-			DeclMutator::doEndScope();
-			instantiations.endScope();
-		}
-
 ////////////////////////////////////////// PolyGenericCalculator ////////////////////////////////////////////////////
 
@@ -2107,4 +1801,5 @@
 			findGeneric( objectType ); // ensure layout for this type is available
 
+			// replace member expression with dynamically-computed layout expression
 			Expression *newMemberExpr = 0;
 			if ( StructInstType *structType = dynamic_cast< StructInstType* >( objectType ) ) {
Index: src/GenPoly/InstantiateGeneric.cc
===================================================================
--- src/GenPoly/InstantiateGeneric.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
+++ src/GenPoly/InstantiateGeneric.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -0,0 +1,326 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// InstantiateGeneric.cc --
+//
+// Author           : Aaron B. Moss
+// Created On       : Thu Aug 04 18:33:00 2016
+// Last Modified By : Aaron B. Moss
+// Last Modified On : Thu Aug 04 18:33:00 2016
+// Update Count     : 1
+//
+
+#include <cassert>
+#include <list>
+#include <utility>
+#include <vector>
+
+#include "InstantiateGeneric.h"
+
+#include "DeclMutator.h"
+#include "GenPoly.h"
+#include "ScopedMap.h"
+
+#include "ResolvExpr/typeops.h"
+
+#include "SynTree/Declaration.h"
+#include "SynTree/Expression.h"
+#include "SynTree/Type.h"
+
+#include "Common/UniqueName.h"
+#include "Common/utility.h"
+
+namespace GenPoly {
+
+	/// Abstracts type equality for a list of parameter types
+	struct TypeList {
+		TypeList() : params() {}
+		TypeList( const std::list< Type* > &_params ) : params() { cloneAll(_params, params); }
+		TypeList( std::list< Type* > &&_params ) : params( _params ) {}
+
+		TypeList( const TypeList &that ) : params() { cloneAll(that.params, params); }
+		TypeList( TypeList &&that ) : params( std::move( that.params ) ) {}
+
+		/// Extracts types from a list of TypeExpr*
+		TypeList( const std::list< TypeExpr* >& _params ) : params() {
+			for ( std::list< TypeExpr* >::const_iterator param = _params.begin(); param != _params.end(); ++param ) {
+				params.push_back( (*param)->get_type()->clone() );
+			}
+		}
+
+		TypeList& operator= ( const TypeList &that ) {
+			deleteAll( params );
+
+			params.clear();
+			cloneAll( that.params, params );
+
+			return *this;
+		}
+
+		TypeList& operator= ( TypeList &&that ) {
+			deleteAll( params );
+
+			params = std::move( that.params );
+
+			return *this;
+		}
+
+		~TypeList() { deleteAll( params ); }
+
+		bool operator== ( const TypeList& that ) const {
+			if ( params.size() != that.params.size() ) return false;
+
+			SymTab::Indexer dummy;
+			for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) {
+				if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false;
+			}
+			return true;
+		}
+
+		std::list< Type* > params;  ///< Instantiation parameters
+	};
+	
+	/// Maps a key and a TypeList to the some value, accounting for scope
+	template< typename Key, typename Value >
+	class InstantiationMap {
+		/// Wraps value for a specific (Key, TypeList) combination
+		typedef std::pair< TypeList, Value* > Instantiation;
+		/// List of TypeLists paired with their appropriate values
+		typedef std::vector< Instantiation > ValueList;
+		/// Underlying map type; maps keys to a linear list of corresponding TypeLists and values
+		typedef ScopedMap< Key*, ValueList > InnerMap;
+
+		InnerMap instantiations;  ///< instantiations
+
+	public:
+		/// Starts a new scope
+		void beginScope() { instantiations.beginScope(); }
+
+		/// Ends a scope
+		void endScope() { instantiations.endScope(); }
+
+		/// Gets the value for the (key, typeList) pair, returns NULL on none such.
+		Value *lookup( Key *key, const std::list< TypeExpr* >& params ) const {
+			TypeList typeList( params );
+
+			// scan scopes for matches to the key
+			for ( typename InnerMap::const_iterator insts = instantiations.find( key ); insts != instantiations.end(); insts = instantiations.findNext( insts, key ) ) {
+				for ( typename ValueList::const_reverse_iterator inst = insts->second.rbegin(); inst != insts->second.rend(); ++inst ) {
+					if ( inst->first == typeList ) return inst->second;
+				}
+			}
+			// no matching instantiations found
+			return 0;
+		}
+
+		/// Adds a value for a (key, typeList) pair to the current scope
+		void insert( Key *key, const std::list< TypeExpr* > &params, Value *value ) {
+			instantiations[ key ].push_back( Instantiation( TypeList( params ), value ) );
+		}
+	};
+	
+	/// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately
+	class GenericInstantiator : public DeclMutator {
+		/// Map of (generic type, parameter list) pairs to concrete type instantiations
+		InstantiationMap< AggregateDecl, AggregateDecl > instantiations;
+		/// Namer for concrete types
+		UniqueName typeNamer;
+
+	public:
+		GenericInstantiator() : DeclMutator(), instantiations(), typeNamer("_conc_") {}
+
+		virtual Type* mutate( StructInstType *inst );
+		virtual Type* mutate( UnionInstType *inst );
+
+		virtual void doBeginScope();
+		virtual void doEndScope();
+	private:
+		/// Wrap instantiation lookup for structs
+		StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)instantiations.lookup( inst->get_baseStruct(), typeSubs ); }
+		/// Wrap instantiation lookup for unions
+		UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)instantiations.lookup( inst->get_baseUnion(), typeSubs ); }
+		/// Wrap instantiation insertion for structs
+		void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { instantiations.insert( inst->get_baseStruct(), typeSubs, decl ); }
+		/// Wrap instantiation insertion for unions
+		void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); }
+	};
+
+	void instantiateGeneric( std::list< Declaration* > &translationUnit ) {
+		GenericInstantiator instantiator;
+		instantiator.mutateDeclarationList( translationUnit );
+	}
+
+	//////////////////////////////////////// GenericInstantiator //////////////////////////////////////////////////
+
+	/// Possible options for a given specialization of a generic type
+	enum class genericType {
+		dtypeStatic,  ///< Concrete instantiation based solely on {d,f}type-to-void conversions
+		concrete,     ///< Concrete instantiation requiring at least one parameter type
+		dynamic       ///< No concrete instantiation
+	};
+
+	genericType& operator |= ( genericType& gt, const genericType& ht ) {
+		switch ( gt ) {
+		case genericType::dtypeStatic:
+			gt = ht;
+			break;
+		case genericType::concrete:
+			if ( ht == genericType::dynamic ) { gt = genericType::dynamic; }
+			break;
+		case genericType::dynamic:
+			// nothing possible
+			break;
+		}
+		return gt;
+	}
+
+	/// Makes substitutions of params into baseParams; returns true if all parameters substituted for a concrete type
+	genericType makeSubstitutions( const std::list< TypeDecl* >& baseParams, const std::list< Expression* >& params, std::list< TypeExpr* >& out ) {
+		genericType gt = genericType::dtypeStatic;
+
+		// substitute concrete types for given parameters, and incomplete types for placeholders
+		std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin();
+		std::list< Expression* >::const_iterator param = params.begin();
+		for ( ; baseParam != baseParams.end() && param != params.end(); ++baseParam, ++param ) {
+			TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
+			assert(paramType && "Aggregate parameters should be type expressions");
+			
+			switch ( (*baseParam)->get_kind() ) {
+			case TypeDecl::Any: {
+				// substitute parameter for otype; makes the type concrete or dynamic depending on the parameter
+				out.push_back( paramType->clone() );
+				gt |= isPolyType( paramType->get_type() ) ? genericType::dynamic : genericType::concrete;
+				break;
+			}
+			case TypeDecl::Dtype:
+				// can pretend that any dtype is `void`
+				out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
+				break;
+			case TypeDecl::Ftype:
+				// can pretend that any ftype is `void (*)(void)`
+				out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
+				break;
+			}
+		}
+
+		assert( baseParam == baseParams.end() && param == params.end() && "Type parameters should match type variables" );
+		return gt;
+	}
+
+	/// Substitutes types of members of in according to baseParams => typeSubs, appending the result to out
+	void substituteMembers( const std::list< Declaration* >& in, const std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs,
+							std::list< Declaration* >& out ) {
+		// substitute types into new members
+		TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() );
+		for ( std::list< Declaration* >::const_iterator member = in.begin(); member != in.end(); ++member ) {
+			Declaration *newMember = (*member)->clone();
+			subs.apply(newMember);
+			out.push_back( newMember );
+		}
+	}
+
+	Type* GenericInstantiator::mutate( StructInstType *inst ) {
+		// mutate subtypes
+		Type *mutated = Mutator::mutate( inst );
+		inst = dynamic_cast< StructInstType* >( mutated );
+		if ( ! inst ) return mutated;
+
+		// exit early if no need for further mutation
+		if ( inst->get_parameters().empty() ) return inst;
+		assert( inst->get_baseParameters() && "Base struct has parameters" );
+
+		// check if type can be concretely instantiated; put substitutions into typeSubs
+		std::list< TypeExpr* > typeSubs;
+		genericType gt = makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs );
+		switch ( gt ) {
+		case genericType::dtypeStatic: // TODO strip params off original decl and reuse here
+		case genericType::concrete:
+		{
+			// make concrete instantiation of generic type
+			StructDecl *concDecl = lookup( inst, typeSubs );
+			if ( ! concDecl ) {
+				// set concDecl to new type, insert type declaration into statements to add
+				concDecl = new StructDecl( typeNamer.newName( inst->get_name() ) );
+				substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs, 	concDecl->get_members() );
+				DeclMutator::addDeclaration( concDecl );
+				insert( inst, typeSubs, concDecl );
+			}
+			StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() );
+			newInst->set_baseStruct( concDecl );
+
+			delete inst;
+			inst = newInst;
+			break;
+		}
+
+		case genericType::dynamic:
+			// do nothing
+			break;
+		}
+
+		deleteAll( typeSubs );
+		return inst;
+	}
+
+	Type* GenericInstantiator::mutate( UnionInstType *inst ) {
+		// mutate subtypes
+		Type *mutated = Mutator::mutate( inst );
+		inst = dynamic_cast< UnionInstType* >( mutated );
+		if ( ! inst ) return mutated;
+
+		// exit early if no need for further mutation
+		if ( inst->get_parameters().empty() ) return inst;
+		assert( inst->get_baseParameters() && "Base union has parameters" );
+
+		// check if type can be concretely instantiated; put substitutions into typeSubs
+		std::list< TypeExpr* > typeSubs;
+		genericType gt = makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs );
+		switch ( gt ) {
+		case genericType::dtypeStatic:  // TODO strip params off original decls and reuse here
+		case genericType::concrete:
+		{
+			// make concrete instantiation of generic type
+			UnionDecl *concDecl = lookup( inst, typeSubs );
+			if ( ! concDecl ) {
+				// set concDecl to new type, insert type declaration into statements to add
+				concDecl = new UnionDecl( typeNamer.newName( inst->get_name() ) );
+				substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );
+				DeclMutator::addDeclaration( concDecl );
+				insert( inst, typeSubs, concDecl );
+			}
+			UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() );
+			newInst->set_baseUnion( concDecl );
+
+			delete inst;
+			inst = newInst;
+			break;
+		}
+		case genericType::dynamic:
+			// do nothing
+			break;
+		}
+
+		deleteAll( typeSubs );
+		return inst;
+	}
+
+	void GenericInstantiator::doBeginScope() {
+		DeclMutator::doBeginScope();
+		instantiations.beginScope();
+	}
+
+	void GenericInstantiator::doEndScope() {
+		DeclMutator::doEndScope();
+		instantiations.endScope();
+	}
+
+} // namespace GenPoly
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End: //
Index: src/GenPoly/InstantiateGeneric.h
===================================================================
--- src/GenPoly/InstantiateGeneric.h	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
+++ src/GenPoly/InstantiateGeneric.h	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -0,0 +1,34 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// InstantiateGeneric.h --
+//
+// Author           : Aaron B. Moss
+// Created On       : Thu Aug 04 18:33:00 2016
+// Last Modified By : Aaron B. Moss
+// Last Modified On : Thu Aug 04 18:33:00 2016
+// Update Count     : 1
+//
+
+#ifndef _INSTANTIATEGENERIC_H
+#define _INSTANTIATEGENERIC_H
+
+#include "SynTree/SynTree.h"
+
+namespace GenPoly {
+	/// Replaces all generic types that have static layout with concrete instantiations.
+	/// Types with concrete values for otype parameters will be template-expanded, while
+	/// dtype and ftype parameters will be replaced by the appropriate void type.
+	void instantiateGeneric( std::list< Declaration* > &translationUnit );
+} // namespace GenPoly
+
+#endif // _INSTANTIATEGENERIC_H
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End: //
Index: src/GenPoly/module.mk
===================================================================
--- src/GenPoly/module.mk	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/GenPoly/module.mk	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -23,3 +23,4 @@
        GenPoly/CopyParams.cc \
        GenPoly/FindFunction.cc \
-       GenPoly/DeclMutator.cc
+       GenPoly/DeclMutator.cc \
+       GenPoly/InstantiateGeneric.cc
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/Makefile.in	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -121,4 +121,5 @@
 	GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) \
 	GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT) \
+	GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT) \
 	InitTweak/driver_cfa_cpp-GenInit.$(OBJEXT) \
 	InitTweak/driver_cfa_cpp-FixInit.$(OBJEXT) \
@@ -377,12 +378,12 @@
 	GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \
 	GenPoly/CopyParams.cc GenPoly/FindFunction.cc \
-	GenPoly/DeclMutator.cc InitTweak/GenInit.cc \
-	InitTweak/FixInit.cc InitTweak/FixGlobalInit.cc \
-	InitTweak/InitTweak.cc Parser/parser.yy Parser/lex.ll \
-	Parser/TypedefTable.cc Parser/ParseNode.cc \
-	Parser/DeclarationNode.cc Parser/ExpressionNode.cc \
-	Parser/StatementNode.cc Parser/InitializerNode.cc \
-	Parser/TypeData.cc Parser/LinkageSpec.cc \
-	Parser/parseutility.cc Parser/Parser.cc \
+	GenPoly/DeclMutator.cc GenPoly/InstantiateGeneric.cc \
+	InitTweak/GenInit.cc InitTweak/FixInit.cc \
+	InitTweak/FixGlobalInit.cc InitTweak/InitTweak.cc \
+	Parser/parser.yy Parser/lex.ll Parser/TypedefTable.cc \
+	Parser/ParseNode.cc Parser/DeclarationNode.cc \
+	Parser/ExpressionNode.cc Parser/StatementNode.cc \
+	Parser/InitializerNode.cc Parser/TypeData.cc \
+	Parser/LinkageSpec.cc Parser/parseutility.cc Parser/Parser.cc \
 	ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \
 	ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \
@@ -585,4 +586,6 @@
 GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT): GenPoly/$(am__dirstamp) \
 	GenPoly/$(DEPDIR)/$(am__dirstamp)
+GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT):  \
+	GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp)
 InitTweak/$(am__dirstamp):
 	@$(MKDIR_P) InitTweak
@@ -828,4 +831,5 @@
 	-rm -f GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT)
 	-rm -f GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT)
+	-rm -f GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT)
 	-rm -f GenPoly/driver_cfa_cpp-Lvalue.$(OBJEXT)
 	-rm -f GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT)
@@ -937,4 +941,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-FindFunction.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-GenPoly.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Lvalue.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Po@am__quote@
@@ -1388,4 +1393,18 @@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-DeclMutator.obj `if test -f 'GenPoly/DeclMutator.cc'; then $(CYGPATH_W) 'GenPoly/DeclMutator.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/DeclMutator.cc'; fi`
 
+GenPoly/driver_cfa_cpp-InstantiateGeneric.o: GenPoly/InstantiateGeneric.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc
+
+GenPoly/driver_cfa_cpp-InstantiateGeneric.obj: GenPoly/InstantiateGeneric.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.obj -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`
+
 InitTweak/driver_cfa_cpp-GenInit.o: InitTweak/GenInit.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT InitTweak/driver_cfa_cpp-GenInit.o -MD -MP -MF InitTweak/$(DEPDIR)/driver_cfa_cpp-GenInit.Tpo -c -o InitTweak/driver_cfa_cpp-GenInit.o `test -f 'InitTweak/GenInit.cc' || echo '$(srcdir)/'`InitTweak/GenInit.cc
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/Parser/DeclarationNode.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 20:49:31 2016
-// Update Count     : 164
+// Last Modified On : Sun Aug  7 08:01:55 2016
+// Update Count     : 165
 //
 
@@ -49,5 +49,6 @@
 	newnode->name = name;
 	newnode->storageClasses = storageClasses;
-	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
+//PAB	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
+	newnode->bitfieldWidth = bitfieldWidth;
 	newnode->hasEllipsis = hasEllipsis;
 	newnode->initializer = initializer;
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/Parser/ExpressionNode.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -10,13 +10,14 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug  5 07:56:23 2016
-// Update Count     : 375
+// Last Modified On : Sun Aug  7 09:23:12 2016
+// Update Count     : 437
 //
 
 #include <cassert>
 #include <cctype>
+#include <climits>
+#include <cstdio>
 #include <algorithm>
 #include <sstream>
-#include <cstdio>
 
 #include "ParseNode.h"
@@ -37,4 +38,5 @@
 ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {
 	if ( other.argName ) {
+		std::cout << "ExpressionNode" << std::endl;
 		argName = other.argName->clone();
 	} else {
@@ -83,60 +85,143 @@
 }
 
-// CommaExprNode *ExpressionNode::add_to_list( ExpressionNode *exp ) {
-// 	return new CommaExprNode( this, exp );
-// }
-
-//##############################################################################
-
-ConstantNode::ConstantNode( ConstantExpr *expr ) : expr( expr ) {
-} // ConstantNode::ConstantNode
-
-ConstantNode *ConstantNode::appendstr( const std::string *newValue ) {
-	assert( newValue != 0 );
-
-	string value = expr->get_constant()->get_value();
-
-	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
-	value.insert( value.length() - 1, newValue->substr( 1, newValue->length() - 2 ) );
-	expr->get_constant()->set_value( value );
-
-	delete newValue;									// allocated by lexer
-	return this;
-}
-
-void ConstantNode::printOneLine( std::ostream &os, int indent ) const {
-	// os << string( indent, ' ' );
-	// printDesignation( os );
-
-	// switch ( type ) {
-	//   case Integer:
-	//   case Float:
-	// 	os << value ;
-	// 	break;
-	//   case Character:
-	// 	os << "'" << value << "'";
-	// 	break;
-	//   case String:
-	// 	os << '"' << value << '"';
-	// 	break;
-	// } // switch
-
-	// os << ' ';
-}
-
-void ConstantNode::print( std::ostream &os, int indent ) const {
-	printOneLine( os, indent );
-	os << endl;
-}
-
-Expression *ConstantNode::build() const {
-	return expr->clone();
-}
-
-//##############################################################################
-
-VarRefNode::VarRefNode() : isLabel( false ) {}
-
-VarRefNode::VarRefNode( const string *name_, bool labelp ) : ExpressionNode( name_ ), isLabel( labelp ) {}
+//##############################################################################
+
+// Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
+//
+//		prefix action constant action suffix
+//
+// Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
+//
+//		constant BEGIN CONT ...
+//		<CONT>(...)? BEGIN 0 ... // possible empty suffix
+//
+// because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
+// type.
+
+static Type::Qualifiers emptyQualifiers;				// no qualifiers on constants
+
+static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
+static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
+static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
+static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
+static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
+static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
+
+ConstantNode *build_constantInteger( std::string & str ) {
+	static const BasicType::Kind kind[2][3] = {
+		{ BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
+		{ BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
+	};
+	bool dec = true, Unsigned = false;					// decimal, unsigned constant
+	int size;											// 0 => int, 1 => long, 2 => long long
+	unsigned long long v;								// converted integral value
+	size_t last = str.length() - 1;						// last character of constant
+
+	if ( str[0] == '0' ) {								// octal/hex constant ?
+		dec = false;
+		if ( last != 0 && checkX( str[1] ) ) {			// hex constant ?
+			sscanf( (char *)str.c_str(), "%llx", &v );
+			//printf( "%llx %llu\n", v, v );
+		} else {										// octal constant
+			sscanf( (char *)str.c_str(), "%llo", &v );
+			//printf( "%llo %llu\n", v, v );
+		} // if
+	} else {											// decimal constant ?
+		sscanf( (char *)str.c_str(), "%llu", &v );
+		//printf( "%llu %llu\n", v, v );
+	} // if
+
+	if ( v <= INT_MAX ) {								// signed int
+		size = 0;
+	} else if ( v <= UINT_MAX && ! dec ) {				// unsigned int
+		size = 0;
+		Unsigned = true;								// unsigned
+	} else if ( v <= LONG_MAX ) {						// signed long int
+		size = 1;
+	} else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
+		size = 1;
+		Unsigned = true;								// unsigned long int
+	} else if ( v <= LLONG_MAX ) {						// signed long long int
+		size = 2;
+	} else {											// unsigned long long int
+		size = 2;
+		Unsigned = true;								// unsigned long long int
+	} // if
+
+	if ( checkU( str[last] ) ) {						// suffix 'u' ?
+		Unsigned = true;
+		if ( last > 0 && checkL( str[last - 1] ) ) {	// suffix 'l' ?
+			size = 1;
+			if ( last > 1 && checkL( str[last - 2] ) ) { // suffix 'll' ?
+				size = 2;
+			} // if
+		} // if
+	} else if ( checkL( str[ last ] ) ) {				// suffix 'l' ?
+		size = 1;
+		if ( last > 0 && checkL( str[last - 1] ) ) {	// suffix 'll' ?
+			size = 2;
+			if ( last > 1 && checkU( str[last - 2] ) ) { // suffix 'u' ?
+				Unsigned = true;
+			} // if
+		} else {
+			if ( last > 0 && checkU( str[last - 1] ) ) { // suffix 'u' ?
+				Unsigned = true;
+			} // if
+		} // if
+	} // if
+
+	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) ) );
+} // build_constantInteger
+
+ConstantNode *build_constantFloat( std::string & str ) {
+	static const BasicType::Kind kind[2][3] = {
+		{ BasicType::Float, BasicType::Double, BasicType::LongDouble },
+		{ BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
+	};
+
+	bool complx = false;								// real, complex
+	int size = 1;										// 0 => float, 1 => double (default), 2 => long double
+	// floating-point constant has minimum of 2 characters: 1. or .1
+	size_t last = str.length() - 1;
+
+	if ( checkI( str[last] ) ) {						// imaginary ?
+		complx = true;
+		last -= 1;										// backup one character
+	} // if
+
+	if ( checkF( str[last] ) ) {						// float ?
+		size = 0;
+	} else if ( checkD( str[last] ) ) {					// double ?
+		size = 1;
+	} else if ( checkL( str[last] ) ) {					// long double ?
+		size = 2;
+	} // if
+	if ( ! complx && checkI( str[last - 1] ) ) {		// imaginary ?
+		complx = true;
+	} // if
+
+	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) ) );
+} // build_constantFloat
+
+ConstantNode *build_constantChar( std::string & str ) {
+	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) ) );
+} // build_constantChar
+
+ConstantNode *build_constantStr( std::string & str ) {
+	// string should probably be a primitive type
+	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
+				new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
+											toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
+								   false, false );
+	return new ConstantNode( new ConstantExpr( Constant( at, str ) ) );
+} // build_constantStr
+
+//##############################################################################
+
+//Expression *build_varref( ExpressionNode expr ) {
+//	return new NameExpr( get_name(), maybeBuild<Expression>( get_argName() ) );
+//}
+
+VarRefNode::VarRefNode( const string *name, bool labelp ) : ExpressionNode( name ), isLabel( labelp ) {}
 
 VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) {
@@ -171,6 +256,5 @@
 			double value;
 			if ( ss >> value ) {
-				// this is a floating point constant. It MUST be
-				// ".0" or ".1", otherwise the program is invalid
+				// this is a floating point constant. It MUST be ".0" or ".1", otherwise the program is invalid
 				if ( ! (var->get_name() == ".0" || var->get_name() == ".1") ) {
 					throw SemanticError( "invalid designator name: " + var->get_name() );
@@ -201,6 +285,5 @@
 
 	if ( isArrayIndex ) {
-		// need to traverse entire structure and change any instances of 0 or 1 to
-		// ConstantExpr
+		// need to traverse entire structure and change any instances of 0 or 1 to ConstantExpr
 		DesignatorFixer fixer;
 		ret = ret->acceptMutator( fixer );
@@ -238,77 +321,15 @@
 //##############################################################################
 
-static const char *opName[] = {
-	"TupleC", "Comma", "TupleFieldSel", // "TuplePFieldSel", // n-adic
-	// triadic
-	"Cond", "NCond",
+static const char *OperName[] = {
 	// diadic
-	"SizeOf", "AlignOf", "OffsetOf", "Attr", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
+	"SizeOf", "AlignOf", "OffsetOf", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
 	"?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?",
 	"?=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
-	"?[?]", "FieldSel", "PFieldSel", "...",
+	"?[?]", "...",
 	// monadic
 	"+?", "-?", "AddressOf", "*?", "!?", "~?", "++?", "?++", "--?", "?--", "&&"
 };
 
-OperatorNode::OperatorNode( Type t ) : type( t ) {}
-
-OperatorNode::OperatorNode( const OperatorNode &other ) : ExpressionNode( other ), type( other.type ) {
-}
-
-OperatorNode::~OperatorNode() {}
-
-OperatorNode::Type OperatorNode::get_type( void ) const {
-	return type;
-}
-
-void OperatorNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << opName[ type ] << ' ';
-}
-
-void OperatorNode::print( std::ostream &os, int indent ) const{
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Operator: " << opName[type] << endl;
-	return;
-}
-
-const char *OperatorNode::get_typename( void ) const{
-	return opName[ type ];
-}
-
-//##############################################################################
-
-CompositeExprNode::CompositeExprNode() : ExpressionNode(), function( 0 ), arguments( 0 ) {
-}
-
-CompositeExprNode::CompositeExprNode( const string *name_ ) : ExpressionNode( name_ ), function( 0 ), arguments( 0 ) {
-}
-
-CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *args ):
-	function( f ), arguments( args ) {
-}
-
-CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2):
-	function( f ), arguments( arg1 ) {
-	arguments->set_link( arg2 );
-}
-
-CompositeExprNode::CompositeExprNode( const CompositeExprNode &other ) : ExpressionNode( other ), function( maybeClone( other.function ) ), arguments( 0 ) {
-	ParseNode *cur = other.arguments;
-	while ( cur ) {
-		if ( arguments ) {
-			arguments->set_link( cur->clone() );
-		} else {
-			arguments = ( ExpressionNode*)cur->clone();
-		} // if
-		cur = cur->get_link();
-	}
-}
-
-CompositeExprNode::~CompositeExprNode() {
-	delete function;
-	delete arguments;
-}
-
+//##############################################################################
 
 Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node ) {
@@ -369,14 +390,25 @@
 }
 
-Expression *build_opr1( OperatorNode::Type op, ExpressionNode *expr_node ) {
+Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node ) {
+	std::list<Expression *> args;
+	args.push_back( maybeBuild<Expression>(expr_node) );
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node ) {
 	std::list<Expression *> args;
 	args.push_back( new AddressExpr( maybeBuild<Expression>(expr_node) ) );
-	return new UntypedExpr( new NameExpr( opName[ op ] ), args );
-}
-Expression *build_opr2( OperatorNode::Type op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
 	std::list<Expression *> args;
 	args.push_back( maybeBuild<Expression>(expr_node1) );
 	args.push_back( maybeBuild<Expression>(expr_node2) );
-	return new UntypedExpr( new NameExpr( opName[ op ] ), args );
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
+	std::list<Expression *> args;
+	args.push_back( new AddressExpr( maybeBuild<Expression>(expr_node1) ) );
+	args.push_back( maybeBuild<Expression>(expr_node2) );
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
 }
 
@@ -389,123 +421,29 @@
 }
 
-CompositeExprNode2::CompositeExprNode2( Expression *expr ) : expr( expr ) {}
-CompositeExprNode2::CompositeExprNode2( const CompositeExprNode2 &other ) : expr( other.expr->clone() ) {}
-CompositeExprNode2::~CompositeExprNode2() { delete expr; }
-void CompositeExprNode2::print( std::ostream &, int indent ) const { assert( false ); }
-void CompositeExprNode2::printOneLine( std::ostream &, int indent ) const { assert( false ); }
-
-
-Expression *CompositeExprNode::build() const {
-	OperatorNode *op;
+Expression *build_attr( VarRefNode *var, ExpressionNode * expr ) {
+	if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr ) ) {
+		return new AttrExpr( maybeBuild<Expression>(var), arg->get_decl()->buildType() );
+	} else {
+		return new AttrExpr( maybeBuild<Expression>(var), maybeBuild<Expression>(expr) );
+	} // if
+}
+
+Expression *build_tuple( ExpressionNode * expr ) {
+	TupleExpr *ret = new TupleExpr();
+	buildList( expr, ret->get_exprs() );
+	return ret;
+}
+
+Expression *build_func( ExpressionNode * function, ExpressionNode * expr ) {
 	std::list<Expression *> args;
 
-	buildList( get_args(), args );
-
-	if ( ! ( op = dynamic_cast<OperatorNode *>( function ) ) ) { // function as opposed to operator
-		return new UntypedExpr( maybeBuild<Expression>(function), args, maybeBuild< Expression >( get_argName() ));
-	} // if
-
-	switch ( op->get_type() ) {
-	  case OperatorNode::Assign:
-	  case OperatorNode::MulAssn:
-	  case OperatorNode::DivAssn:
-	  case OperatorNode::ModAssn:
-	  case OperatorNode::PlusAssn:
-	  case OperatorNode::MinusAssn:
-	  case OperatorNode::LSAssn:
-	  case OperatorNode::RSAssn:
-	  case OperatorNode::AndAssn:
-	  case OperatorNode::ERAssn:
-	  case OperatorNode::OrAssn:
-		assert( ! args.empty() );
-		args.front() = new AddressExpr( args.front() );
-	  case OperatorNode::UnPlus:
-	  case OperatorNode::UnMinus:
-	  case OperatorNode::PointTo:
-	  case OperatorNode::Neg:
-	  case OperatorNode::BitNeg:
-	  case OperatorNode::LabelAddress:
-		return new UntypedExpr( new NameExpr( opName[ op->get_type() ] ), args );
-
-	  case OperatorNode::Attr:
-		{
-			VarRefNode *var = dynamic_cast<VarRefNode *>( get_args() );
-			assert( var );
-			if ( ! get_args()->get_link() ) {
-				return new AttrExpr( maybeBuild<Expression>(var), ( Expression*)0);
-			} else if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()->get_link() ) ) {
-				return new AttrExpr( maybeBuild<Expression>(var), arg->get_decl()->buildType() );
-			} else {
-				return new AttrExpr( maybeBuild<Expression>(var), args.back() );
-			} // if
-		}
-	  case OperatorNode::Cond:
-		{
-			assert( args.size() == 3);
-			std::list< Expression * >::const_iterator i = args.begin();
-			Expression *arg1 = notZeroExpr( *i++ );
-			Expression *arg2 = *i++;
-			Expression *arg3 = *i++;
-			return new ConditionalExpr( arg1, arg2, arg3 );
-		}
-	  case OperatorNode::NCond:
-		throw UnimplementedError( "GNU 2-argument conditional expression" );
-		// Tuples
-	  case OperatorNode::TupleC:
-		{
-			TupleExpr *ret = new TupleExpr();
-			std::copy( args.begin(), args.end(), back_inserter( ret->get_exprs() ) );
-			return ret;
-		}
-	  default:
-		assert( ((void)"CompositeExprNode::build", false) );
-		return 0;
-	} // switch
-}
-
-void CompositeExprNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << "( ";
-	function->printOneLine( os, indent );
-	for ( ExpressionNode *cur = arguments; cur != 0; cur = dynamic_cast< ExpressionNode* >( cur->get_link() ) ) {
-		cur->printOneLine( os, indent );
-	} // for
-	os << ") ";
-}
-
-void CompositeExprNode::print( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Application of: " << endl;
-	function->print( os, indent + ParseNode::indent_by );
-
-	os << string( indent, ' ' ) ;
-	if ( arguments ) {
-		os << "... on arguments: " << endl;
-		arguments->printList( os, indent + ParseNode::indent_by );
-	} else
-		os << "... on no arguments: " << endl;
-}
-
-void CompositeExprNode::set_function( ExpressionNode *f ) {
-	function = f;
-}
-
-void CompositeExprNode::set_args( ExpressionNode *args ) {
-	arguments = args;
-}
-
-ExpressionNode *CompositeExprNode::get_function( void ) const {
-	return function;
-}
-
-ExpressionNode *CompositeExprNode::get_args( void ) const {
-	return arguments;
-}
-
-void CompositeExprNode::add_arg( ExpressionNode *arg ) {
-	if ( arguments )
-		arguments->set_link( arg );
-	else
-		set_args( arg );
+	buildList( expr, args );
+	return new UntypedExpr( maybeBuild<Expression>(function), args, nullptr );
+}
+
+Expression *build_range( ExpressionNode * low, ExpressionNode *high ) {
+	Expression *low_cexpr = maybeBuild<Expression>( low );
+	Expression *high_cexpr = maybeBuild<Expression>( high );
+	return new RangeExpr( low_cexpr, high_cexpr );
 }
 
@@ -698,29 +636,4 @@
 }
 
-ExpressionNode *flattenCommas( ExpressionNode *list ) {
-	if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) {
-		OperatorNode *op;
-		if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::Comma ) ) {
-			if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )
-				composite->add_arg( next );
-			return flattenCommas( composite->get_args() );
-		} // if
-	} // if
-
-	if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )
-		list->set_next( flattenCommas( next ) );
-
-	return list;
-}
-
-ExpressionNode *tupleContents( ExpressionNode *tuple ) {
-	if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( tuple ) ) {
-		OperatorNode *op = 0;
-		if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::TupleC ) )
-			return composite->get_args();
-	} // if
-	return tuple;
-}
-
 // Local Variables: //
 // tab-width: 4 //
Index: src/Parser/ParseNode.cc
===================================================================
--- src/Parser/ParseNode.cc	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/Parser/ParseNode.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -10,143 +10,10 @@
 // Created On       : Sat May 16 13:26:29 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jul 24 02:17:01 2016
-// Update Count     : 90
+// Last Modified On : Sat Aug  6 08:26:11 2016
+// Update Count     : 93
 // 
 
-#include <climits>
 #include "ParseNode.h"
 using namespace std;
-
-// Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
-//
-//		prefix action constant action suffix
-//
-// Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
-//
-//		constant BEGIN CONT ...
-//		<CONT>(...)? BEGIN 0 ... // possible empty suffix
-//
-// because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
-// type.
-
-static Type::Qualifiers emptyQualifiers;				// no qualifiers on constants
-
-static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
-static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
-static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
-static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
-static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
-static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
-
-ConstantNode *makeConstantInteger( std::string & str ) {
-	static const BasicType::Kind kind[2][3] = {
-		{ BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
-		{ BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
-	};
-	bool dec = true, Unsigned = false;					// decimal, unsigned constant
-	int size;											// 0 => int, 1 => long, 2 => long long
-	unsigned long long v;								// converted integral value
-	size_t last = str.length() - 1;						// last character of constant
-
-	if ( str[0] == '0' ) {								// octal/hex constant ?
-		dec = false;
-		if ( last != 0 && checkX( str[1] ) ) {			// hex constant ?
-			sscanf( (char *)str.c_str(), "%llx", &v );
-			//printf( "%llx %llu\n", v, v );
-		} else {										// octal constant
-			sscanf( (char *)str.c_str(), "%llo", &v );
-			//printf( "%llo %llu\n", v, v );
-		} // if
-	} else {											// decimal constant ?
-		sscanf( (char *)str.c_str(), "%llu", &v );
-		//printf( "%llu %llu\n", v, v );
-	} // if
-
-	if ( v <= INT_MAX ) {								// signed int
-		size = 0;
-	} else if ( v <= UINT_MAX && ! dec ) {				// unsigned int
-		size = 0;
-		Unsigned = true;								// unsigned
-	} else if ( v <= LONG_MAX ) {						// signed long int
-		size = 1;
-	} else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
-		size = 1;
-		Unsigned = true;								// unsigned long int
-	} else if ( v <= LLONG_MAX ) {						// signed long long int
-		size = 2;
-	} else {											// unsigned long long int
-		size = 2;
-		Unsigned = true;								// unsigned long long int
-	} // if
-
-	if ( checkU( str[last] ) ) {						// suffix 'u' ?
-		Unsigned = true;
-		if ( last > 0 && checkL( str[last - 1] ) ) {	// suffix 'l' ?
-			size = 1;
-			if ( last > 1 && checkL( str[last - 2] ) ) { // suffix 'll' ?
-				size = 2;
-			} // if
-		} // if
-	} else if ( checkL( str[ last ] ) ) {				// suffix 'l' ?
-		size = 1;
-		if ( last > 0 && checkL( str[last - 1] ) ) { // suffix 'll' ?
-			size = 2;
-			if ( last > 1 && checkU( str[last - 2] ) ) { // suffix 'u' ?
-				Unsigned = true;
-			} // if
-		} else {
-			if ( last > 0 && checkU( str[last - 1] ) ) { // suffix 'u' ?
-				Unsigned = true;
-			} // if
-		} // if
-	} // if
-
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ), nullptr ) );
-} // makeConstantInteger
-
-ConstantNode *makeConstantFloat( std::string & str ) {
-	static const BasicType::Kind kind[2][3] = {
-		{ BasicType::Float, BasicType::Double, BasicType::LongDouble },
-		{ BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
-	};
-
-	bool complx = false;								// real, complex
-	int size = 1;										// 0 => float, 1 => double (default), 2 => long double
-	// floating-point constant has minimum of 2 characters: 1. or .1
-	size_t last = str.length() - 1;
-
-	if ( checkI( str[last] ) ) {						// imaginary ?
-		complx = true;
-		last -= 1;										// backup one character
-	} // if
-
-	if ( checkF( str[last] ) ) {						// float ?
-		size = 0;
-	} else if ( checkD( str[last] ) ) {					// double ?
-		size = 1;
-	} else if ( checkL( str[last] ) ) {					// long double ?
-		size = 2;
-	} // if
-	if ( ! complx && checkI( str[last - 1] ) ) {		// imaginary ?
-		complx = true;
-	} // if
-
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ), nullptr ) );
-} // makeConstantFloat
-
-ConstantNode *makeConstantChar( std::string & str ) {
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ), nullptr ) );
-} // makeConstantChar
-
-ConstantNode *makeConstantStr( std::string & str ) {
-	// string should probably be a primitive type
-	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
-								   new ConstantExpr(
-									   Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
-												 toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
-								   false, false );
-	return new ConstantNode( new ConstantExpr( Constant( at, str ), nullptr ) );
-} // makeConstantStr
-
 
 // Builder
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/Parser/ParseNode.h	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug  5 07:49:32 2016
-// Update Count     : 288
+// Last Modified On : Sun Aug  7 09:37:16 2016
+// Update Count     : 333
 //
 
@@ -30,7 +30,4 @@
 #include "SynTree/Label.h"
 
-class ExpressionNode;
-class CompositeExprNode;
-class CommaExprNode;
 class StatementNode;
 class CompoundStmtNode;
@@ -56,6 +53,6 @@
 	void set_name( const std::string &newValue ) { name = newValue; }
 
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printList( std::ostream &, int indent = 0 ) const;
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual void printList( std::ostream &os, int indent = 0 ) const;
 
 	ParseNode &operator,( ParseNode &);
@@ -68,4 +65,6 @@
 ParseNode *mkList( ParseNode & );
 
+//##############################################################################
+
 class ExpressionNode : public ParseNode {
   public:
@@ -73,9 +72,7 @@
 	ExpressionNode( const std::string * );
 	ExpressionNode( const ExpressionNode &other );
-	virtual ~ExpressionNode() { delete argName; } // cannot delete argName because it might be referenced elsewhere
+	virtual ~ExpressionNode() { delete argName; }
 
 	virtual ExpressionNode *clone() const = 0;
-
-	// virtual CommaExprNode *add_to_list( ExpressionNode * );
 
 	ExpressionNode *get_argName() const { return argName; }
@@ -85,10 +82,10 @@
 	ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
 
-	virtual void print( std::ostream &, int indent = 0) const = 0;
-	virtual void printOneLine( std::ostream &, int indent = 0) const = 0;
+	virtual void print( std::ostream &os, int indent = 0) const = 0;
+	virtual void printOneLine( std::ostream &os, int indent = 0) const = 0;
 
 	virtual Expression *build() const = 0;
   protected:
-	void printDesignation ( std::ostream &, int indent = 0) const;
+	void printDesignation ( std::ostream &os, int indent = 0) const;
   private:
 	ExpressionNode *argName = 0;
@@ -109,4 +106,6 @@
 };
 
+//##############################################################################
+
 // NullExprNode is used in tuples as a place-holder where a tuple component is omitted e.g., [ 2, , 3 ]
 class NullExprNode : public ExpressionNode {
@@ -116,37 +115,39 @@
 	virtual NullExprNode *clone() const;
 
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
+	virtual void print( std::ostream &os, int indent = 0) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0) const;
 
 	virtual Expression *build() const;
 };
 
+//##############################################################################
+
 class ConstantNode : public ExpressionNode {
   public:
-	enum Type { Integer, Float, Character, String };
-
-	ConstantNode( ConstantExpr * );
-	ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {};
-	~ConstantNode() { delete expr; }
-
-	virtual ConstantNode *clone() const { return new ConstantNode( *this ); }
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	ConstantNode *appendstr( const std::string *newValue );
-
-	Expression *build() const;
+	ConstantNode( ConstantExpr *expr ) : expr( expr ) {}
+	ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {}
+	virtual ~ConstantNode() {}
+
+	virtual ConstantNode *clone() const { assert( false ); return new ConstantNode( *this ); }
+
+	ConstantExpr *get_expr() const { return expr; }
+
+	virtual void print( std::ostream &os, int indent = 0 ) const {}
+	virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
+
+	Expression *build() const { return expr; }
   private:
 	ConstantExpr *expr;
 };
 
-ConstantNode *makeConstantInteger( std::string & );
-ConstantNode *makeConstantFloat( std::string & );
-ConstantNode *makeConstantChar( std::string & );
-ConstantNode *makeConstantStr( std::string & );
+ConstantNode *build_constantInteger( std::string &str );
+ConstantNode *build_constantFloat( std::string &str );
+ConstantNode *build_constantChar( std::string &str );
+ConstantNode *build_constantStr( std::string &str );
+
+//##############################################################################
 
 class VarRefNode : public ExpressionNode {
   public:
-	VarRefNode();
 	VarRefNode( const std::string *, bool isLabel = false );
 	VarRefNode( const VarRefNode &other );
@@ -156,9 +157,11 @@
 	virtual VarRefNode *clone() const { return new VarRefNode( *this ); }
 
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &, int indent = 0 ) const;
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
   private:
 	bool isLabel;
 };
+
+//##############################################################################
 
 class DesignatorNode : public ExpressionNode {
@@ -170,9 +173,11 @@
 	virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); }
 
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &, int indent = 0 ) const;
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
   private:
 	bool isArrayIndex;
 };
+
+//##############################################################################
 
 class TypeValueNode : public ExpressionNode {
@@ -187,40 +192,37 @@
 	virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); }
 
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
+	virtual void print( std::ostream &os, int indent = 0) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0) const;
   private:
 	DeclarationNode *decl;
 };
 
-class OperatorNode : public ExpressionNode {
-  public:
-	enum Type { TupleC, Comma, TupleFieldSel, // n-adic
-				// triadic
-				Cond, NCond,
-				// diadic
-				SizeOf, AlignOf, OffsetOf, Attr, Plus, Minus, Mul, Div, Mod, Or, And,
-				BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
-				Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
-				Index, FieldSel, PFieldSel, Range,
-				// monadic
-				UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
-				Ctor, Dtor,
-	};
-
-	OperatorNode( Type t );
-	OperatorNode( const OperatorNode &other );
-	virtual ~OperatorNode();
-
-	virtual OperatorNode *clone() const { return new OperatorNode( *this ); }
-
-	Type get_type() const;
-	const char *get_typename() const;
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	virtual Expression *build() const { return 0; }
-  private:
-	Type type;
+//##############################################################################
+
+class CompositeExprNode : public ExpressionNode {
+  public:
+	CompositeExprNode( Expression *expr ) : expr( expr ) {}
+	CompositeExprNode( const CompositeExprNode &other ) : expr( other.expr->clone() ) {}
+	virtual ~CompositeExprNode() {}
+
+	CompositeExprNode *clone() const { assert( false ); return new CompositeExprNode( *this ); }
+
+	Expression *build() const { return expr; }
+
+	void print( std::ostream &os, int indent = 0 ) const {}
+	void printOneLine( std::ostream &os, int indent = 0 ) const {}
+  private:
+	Expression *expr;
+};
+
+enum class OperKinds {
+	// diadic
+	SizeOf, AlignOf, OffsetOf, Plus, Minus, Mul, Div, Mod, Or, And,
+	BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
+	Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
+	Index, Range,
+	// monadic
+	UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
+	Ctor, Dtor,
 };
 
@@ -234,50 +236,16 @@
 Expression *build_and( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
 Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind );
-Expression *build_opr1( OperatorNode::Type op, ExpressionNode *expr_node );
-Expression *build_opr2( OperatorNode::Type op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
+Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node );
+Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node );
+Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
+Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
 Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 );
 Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
-
-class CompositeExprNode2 : public ExpressionNode {
-  public:
-	CompositeExprNode2( Expression *expr );
-	CompositeExprNode2( const CompositeExprNode2 &other );
-	virtual ~CompositeExprNode2();
-
-	virtual CompositeExprNode2 *clone() const { return new CompositeExprNode2( *this ); }
-	virtual Expression *build() const { return expr->clone(); }
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-  private:
-	Expression *expr;
-};
-
-class CompositeExprNode : public ExpressionNode {
-  public:
-	CompositeExprNode();
-	CompositeExprNode( const std::string * );
-	CompositeExprNode( ExpressionNode *f, ExpressionNode *args = 0 );
-	CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2 );
-	CompositeExprNode( const CompositeExprNode &other );
-	virtual ~CompositeExprNode();
-
-	virtual CompositeExprNode *clone() const { return new CompositeExprNode( *this ); }
-	virtual Expression *build() const;
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	void set_function( ExpressionNode * );
-	void set_args( ExpressionNode * );
-
-	void add_arg( ExpressionNode * );
-
-	ExpressionNode *get_function() const;
-	ExpressionNode *get_args() const;
-  private:
-	ExpressionNode *function;
-	ExpressionNode *arguments;
-};
+Expression *build_attr( VarRefNode *var, ExpressionNode * expr = 0 );
+Expression *build_tuple( ExpressionNode * expr = 0 );
+Expression *build_func( ExpressionNode * function, ExpressionNode * expr );
+Expression *build_range( ExpressionNode * low, ExpressionNode *high );
+
+//##############################################################################
 
 class AsmExprNode : public ExpressionNode {
@@ -290,6 +258,6 @@
 	virtual Expression *build() const;
 
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
+	virtual void print( std::ostream &os, int indent = 0) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0) const;
 
 	ExpressionNode *get_inout() const { return inout; };
@@ -307,4 +275,6 @@
 };
 
+//##############################################################################
+
 class LabelNode : public ExpressionNode {
   public:
@@ -312,6 +282,6 @@
 	virtual LabelNode *clone() const { return new LabelNode( *this ); }
 
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
+	virtual void print( std::ostream &os, int indent = 0) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0) const;
 
 	const std::list< Label > &get_labels() const { return labels; };
@@ -320,4 +290,6 @@
 	std::list< Label > labels;
 };
+
+//##############################################################################
 
 class ForCtlExprNode : public ExpressionNode {
@@ -334,6 +306,6 @@
 	virtual Expression *build() const;
 
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &, int indent = 0 ) const;
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
   private:
 	StatementNode *init;
@@ -341,4 +313,6 @@
 	ExpressionNode *change;
 };
+
+//##############################################################################
 
 class ValofExprNode : public ExpressionNode {
@@ -352,6 +326,6 @@
 
 	StatementNode *get_body() const { return body; }
-	void print( std::ostream &, int indent = 0 ) const;
-	void printOneLine( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
+	void printOneLine( std::ostream &os, int indent = 0 ) const;
 	Expression *build() const;
 
@@ -359,4 +333,6 @@
 	StatementNode *body;
 };
+
+//##############################################################################
 
 class TypeData;
@@ -433,6 +409,6 @@
 
 	DeclarationNode *clone() const;
-	void print( std::ostream &, int indent = 0 ) const;
-	void printList( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
+	void printList( std::ostream &os, int indent = 0 ) const;
 
 	Declaration *build() const;
@@ -468,4 +444,6 @@
 }; // DeclarationNode
 
+//##############################################################################
+
 class StatementNode : public ParseNode {
   public:
@@ -507,5 +485,5 @@
 	StatementNode *append_last_case( StatementNode * );
 
-	void print( std::ostream &, int indent = 0) const;
+	void print( std::ostream &os, int indent = 0) const;
 	virtual StatementNode *clone() const;
 	virtual Statement *build() const;
@@ -521,4 +499,6 @@
 }; // StatementNode
 
+//##############################################################################
+
 class CompoundStmtNode : public StatementNode {
   public:
@@ -530,9 +510,11 @@
 	void add_statement( StatementNode * );
 
-	void print( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
 	virtual Statement *build() const;
   private:
 	StatementNode *first, *last;
 };
+
+//##############################################################################
 
 class AsmStmtNode : public StatementNode {
@@ -541,5 +523,5 @@
 	~AsmStmtNode();
 
-	void print( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
 	Statement *build() const;
   private:
@@ -551,4 +533,6 @@
 };
 
+//##############################################################################
+
 class InitializerNode : public ParseNode {
   public:
@@ -567,5 +551,5 @@
 	InitializerNode *next_init() const { return kids; }
 
-	void print( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
 	void printOneLine( std::ostream & ) const;
 
@@ -579,4 +563,6 @@
 };
 
+//##############################################################################
+
 class CompoundLiteralNode : public ExpressionNode {
   public:
@@ -593,6 +579,6 @@
 	CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
 
-	void print( std::ostream &, int indent = 0 ) const;
-	void printOneLine( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
+	void printOneLine( std::ostream &os, int indent = 0 ) const;
 
 	virtual Expression *build() const;
@@ -631,8 +617,4 @@
 void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList );
 
-// in ExpressionNode.cc
-ExpressionNode *flattenCommas( ExpressionNode *list );
-ExpressionNode *tupleContents( ExpressionNode *tuple );
-
 #endif // PARSENODE_H
 
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/Parser/StatementNode.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:21:02 2016
-// Update Count     : 133
+// Last Modified On : Sun Aug  7 06:42:38 2016
+// Update Count     : 135
 //
 
@@ -106,10 +106,4 @@
 	return this;
 }
-
-// StatementNode *StatementNode::add_controlexp( ExpressionNode *e ) {
-// 	if ( control && e )
-// 		control->add_to_list( e ); // xxx - check this
-// 	return this;
-// }
 
 StatementNode *StatementNode::append_block( StatementNode *stmt ) {
@@ -176,5 +170,5 @@
 		} // if
 		if ( block ) {
-			os << string( indent + ParseNode::indent_by, ' ' ) << "Branches of execution: " << endl;
+			os << string( indent + ParseNode::indent_by, ' ' ) << "Cases: " << endl;
 			block->printList( os, indent + 2 * ParseNode::indent_by );
 		} // if
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/Parser/TypeData.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jul 13 18:03:29 2016
-// Update Count     : 56
+// Last Modified On : Sun Aug  7 07:51:48 2016
+// Update Count     : 58
 //
 
@@ -182,5 +182,6 @@
 		break;
 	  case Array:
-		newtype->array->dimension = maybeClone( array->dimension );
+//PAB		newtype->array->dimension = maybeClone( array->dimension );
+		newtype->array->dimension = array->dimension;
 		newtype->array->isVarLen = array->isVarLen;
 		newtype->array->isStatic = array->isStatic;
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/Parser/parser.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -89,7 +89,12 @@
 TypedefTable typedefTable;
 
+void appendStr( std::string &to, std::string *from ) {
+	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
+	to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) );
+} // appendStr
+
 
 /* Line 268 of yacc.c  */
-#line 94 "Parser/parser.cc"
+#line 99 "Parser/parser.cc"
 
 /* Enabling traces.  */
@@ -342,5 +347,5 @@
 
 /* Line 293 of yacc.c  */
-#line 110 "parser.yy"
+#line 115 "parser.yy"
 
 	Token tok;
@@ -354,5 +359,5 @@
 	LabelNode *label;
 	InitializerNode *in;
-	OperatorNode::Type op;
+	OperKinds op;
 	bool flag;
 
@@ -360,5 +365,5 @@
 
 /* Line 293 of yacc.c  */
-#line 363 "Parser/parser.cc"
+#line 368 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -372,5 +377,5 @@
 
 /* Line 343 of yacc.c  */
-#line 375 "Parser/parser.cc"
+#line 380 "Parser/parser.cc"
 
 #ifdef short
@@ -589,7 +594,7 @@
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  252
+#define YYFINAL  251
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   12080
+#define YYLAST   10969
 
 /* YYNTOKENS -- Number of terminals.  */
@@ -598,7 +603,7 @@
 #define YYNNTS  241
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  755
+#define YYNRULES  754
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1579
+#define YYNSTATES  1577
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
@@ -663,73 +668,73 @@
      172,   175,   178,   181,   184,   187,   190,   195,   202,   204,
      209,   214,   217,   222,   224,   226,   228,   230,   232,   234,
-     236,   238,   243,   248,   250,   254,   258,   262,   264,   268,
-     272,   274,   278,   282,   284,   288,   292,   296,   300,   302,
-     306,   310,   312,   316,   318,   322,   324,   328,   330,   334,
-     336,   340,   342,   348,   353,   359,   361,   363,   367,   371,
-     374,   375,   377,   380,   386,   393,   401,   403,   407,   409,
-     411,   413,   415,   417,   419,   421,   423,   425,   427,   429,
-     433,   434,   436,   438,   440,   442,   444,   446,   448,   450,
-     452,   459,   464,   467,   475,   477,   481,   483,   486,   488,
-     491,   493,   496,   499,   505,   513,   519,   529,   535,   545,
-     547,   551,   553,   555,   559,   563,   566,   568,   571,   574,
-     575,   577,   580,   584,   585,   587,   590,   594,   598,   603,
-     604,   606,   608,   611,   617,   625,   632,   639,   644,   648,
-     653,   656,   660,   663,   667,   671,   675,   679,   685,   689,
-     693,   698,   700,   706,   713,   719,   726,   736,   747,   757,
-     768,   771,   773,   776,   779,   782,   784,   791,   800,   811,
-     824,   839,   840,   842,   843,   845,   847,   851,   856,   864,
-     865,   867,   871,   873,   877,   879,   881,   883,   887,   889,
-     891,   893,   897,   898,   900,   904,   909,   911,   915,   917,
-     919,   923,   927,   931,   935,   939,   942,   946,   953,   957,
-     961,   966,   968,   971,   974,   978,   984,   993,  1001,  1009,
-    1015,  1025,  1028,  1031,  1037,  1041,  1047,  1052,  1056,  1061,
-    1066,  1074,  1078,  1082,  1086,  1090,  1095,  1102,  1104,  1106,
-    1108,  1110,  1112,  1114,  1116,  1118,  1119,  1121,  1123,  1126,
-    1128,  1130,  1132,  1134,  1136,  1138,  1140,  1141,  1147,  1149,
-    1152,  1156,  1158,  1161,  1163,  1165,  1167,  1169,  1171,  1173,
-    1175,  1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,  1193,
-    1195,  1197,  1199,  1201,  1203,  1205,  1207,  1210,  1213,  1217,
-    1221,  1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,
-    1258,  1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,
-    1286,  1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1311,
-    1318,  1326,  1329,  1332,  1335,  1336,  1339,  1342,  1346,  1349,
-    1353,  1355,  1358,  1362,  1365,  1368,  1373,  1374,  1376,  1379,
-    1382,  1384,  1385,  1387,  1390,  1393,  1399,  1402,  1403,  1411,
-    1414,  1419,  1420,  1423,  1424,  1426,  1428,  1430,  1436,  1442,
-    1448,  1450,  1456,  1462,  1472,  1474,  1480,  1481,  1483,  1485,
-    1491,  1493,  1495,  1501,  1507,  1509,  1513,  1517,  1522,  1524,
-    1526,  1528,  1530,  1533,  1535,  1539,  1543,  1545,  1548,  1550,
-    1554,  1556,  1558,  1560,  1562,  1564,  1566,  1568,  1570,  1572,
-    1574,  1576,  1579,  1581,  1583,  1585,  1588,  1589,  1592,  1595,
-    1597,  1602,  1603,  1605,  1608,  1612,  1617,  1620,  1623,  1625,
-    1628,  1630,  1633,  1639,  1645,  1653,  1660,  1662,  1665,  1668,
-    1672,  1674,  1677,  1680,  1685,  1688,  1693,  1694,  1699,  1702,
-    1704,  1706,  1708,  1709,  1712,  1718,  1724,  1738,  1740,  1742,
-    1746,  1750,  1753,  1757,  1761,  1764,  1769,  1771,  1778,  1788,
-    1789,  1801,  1803,  1807,  1811,  1815,  1817,  1819,  1825,  1828,
-    1834,  1835,  1837,  1839,  1843,  1844,  1846,  1848,  1850,  1852,
-    1853,  1860,  1863,  1865,  1868,  1873,  1876,  1880,  1884,  1888,
-    1893,  1899,  1905,  1911,  1918,  1920,  1922,  1924,  1928,  1929,
-    1935,  1936,  1938,  1940,  1943,  1950,  1952,  1956,  1957,  1959,
-    1964,  1966,  1968,  1970,  1972,  1975,  1977,  1980,  1983,  1985,
-    1989,  1992,  1996,  2000,  2003,  2008,  2013,  2017,  2026,  2030,
-    2033,  2035,  2038,  2045,  2054,  2058,  2061,  2065,  2069,  2074,
-    2079,  2083,  2085,  2087,  2089,  2094,  2101,  2105,  2108,  2112,
-    2116,  2121,  2126,  2130,  2133,  2135,  2138,  2141,  2143,  2147,
-    2150,  2154,  2158,  2161,  2166,  2171,  2175,  2182,  2191,  2195,
-    2198,  2200,  2203,  2206,  2209,  2213,  2217,  2220,  2225,  2230,
-    2234,  2241,  2250,  2254,  2257,  2259,  2262,  2265,  2267,  2269,
-    2272,  2276,  2280,  2283,  2288,  2295,  2304,  2306,  2309,  2312,
-    2314,  2317,  2320,  2324,  2328,  2330,  2335,  2340,  2344,  2350,
-    2359,  2363,  2366,  2370,  2372,  2378,  2384,  2391,  2398,  2400,
-    2403,  2406,  2408,  2411,  2414,  2418,  2422,  2424,  2429,  2434,
-    2438,  2444,  2453,  2457,  2459,  2462,  2464,  2467,  2474,  2480,
-    2487,  2495,  2503,  2505,  2508,  2511,  2513,  2516,  2519,  2523,
-    2527,  2529,  2534,  2539,  2543,  2552,  2556,  2558,  2560,  2563,
-    2565,  2567,  2570,  2574,  2577,  2581,  2584,  2588,  2592,  2595,
-    2600,  2604,  2607,  2611,  2614,  2619,  2623,  2626,  2633,  2640,
-    2647,  2655,  2657,  2660,  2662,  2664,  2666,  2669,  2673,  2676,
-    2680,  2683,  2687,  2691,  2696,  2699,  2703,  2708,  2711,  2717,
-    2723,  2730,  2737,  2738,  2740,  2741
+     236,   241,   246,   248,   252,   256,   260,   262,   266,   270,
+     272,   276,   280,   282,   286,   290,   294,   298,   300,   304,
+     308,   310,   314,   316,   320,   322,   326,   328,   332,   334,
+     338,   340,   346,   351,   357,   359,   361,   365,   368,   369,
+     371,   373,   375,   377,   379,   381,   383,   385,   387,   389,
+     391,   393,   396,   402,   409,   417,   419,   423,   425,   429,
+     430,   432,   434,   436,   438,   440,   442,   444,   446,   448,
+     455,   460,   463,   471,   473,   477,   479,   482,   484,   487,
+     489,   492,   495,   501,   509,   515,   525,   531,   541,   543,
+     547,   549,   551,   555,   559,   562,   564,   567,   570,   571,
+     573,   576,   580,   581,   583,   586,   590,   594,   599,   600,
+     602,   604,   607,   613,   621,   628,   635,   640,   644,   649,
+     652,   656,   659,   663,   667,   671,   675,   681,   685,   689,
+     694,   696,   702,   709,   715,   722,   732,   743,   753,   764,
+     767,   769,   772,   775,   778,   780,   787,   796,   807,   820,
+     835,   836,   838,   839,   841,   843,   847,   852,   860,   861,
+     863,   867,   869,   873,   875,   877,   879,   883,   885,   887,
+     889,   893,   894,   896,   900,   905,   907,   911,   913,   915,
+     919,   923,   927,   931,   935,   938,   942,   949,   953,   957,
+     962,   964,   967,   970,   974,   980,   989,   997,  1005,  1011,
+    1021,  1024,  1027,  1033,  1037,  1043,  1048,  1052,  1057,  1062,
+    1070,  1074,  1078,  1082,  1086,  1091,  1098,  1100,  1102,  1104,
+    1106,  1108,  1110,  1112,  1114,  1115,  1117,  1119,  1122,  1124,
+    1126,  1128,  1130,  1132,  1134,  1136,  1137,  1143,  1145,  1148,
+    1152,  1154,  1157,  1159,  1161,  1163,  1165,  1167,  1169,  1171,
+    1173,  1175,  1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,
+    1193,  1195,  1197,  1199,  1201,  1203,  1206,  1209,  1213,  1217,
+    1219,  1223,  1225,  1228,  1231,  1234,  1239,  1244,  1249,  1254,
+    1256,  1259,  1262,  1266,  1268,  1271,  1274,  1276,  1279,  1282,
+    1286,  1288,  1291,  1294,  1296,  1298,  1303,  1306,  1307,  1314,
+    1322,  1325,  1328,  1331,  1332,  1335,  1338,  1342,  1345,  1349,
+    1351,  1354,  1358,  1361,  1364,  1369,  1370,  1372,  1375,  1378,
+    1380,  1381,  1383,  1386,  1389,  1395,  1398,  1399,  1407,  1410,
+    1415,  1416,  1419,  1420,  1422,  1424,  1426,  1432,  1438,  1444,
+    1446,  1452,  1458,  1468,  1470,  1476,  1477,  1479,  1481,  1487,
+    1489,  1491,  1497,  1503,  1505,  1509,  1513,  1518,  1520,  1522,
+    1524,  1526,  1529,  1531,  1535,  1539,  1541,  1544,  1546,  1550,
+    1552,  1554,  1556,  1558,  1560,  1562,  1564,  1566,  1568,  1570,
+    1572,  1575,  1577,  1579,  1581,  1584,  1585,  1588,  1591,  1593,
+    1598,  1599,  1601,  1604,  1608,  1613,  1616,  1619,  1621,  1624,
+    1626,  1629,  1635,  1641,  1649,  1656,  1658,  1661,  1664,  1668,
+    1670,  1673,  1676,  1681,  1684,  1689,  1690,  1695,  1698,  1700,
+    1702,  1704,  1705,  1708,  1714,  1720,  1734,  1736,  1738,  1742,
+    1746,  1749,  1753,  1757,  1760,  1765,  1767,  1774,  1784,  1785,
+    1797,  1799,  1803,  1807,  1811,  1813,  1815,  1821,  1824,  1830,
+    1831,  1833,  1835,  1839,  1840,  1842,  1844,  1846,  1848,  1849,
+    1856,  1859,  1861,  1864,  1869,  1872,  1876,  1880,  1884,  1889,
+    1895,  1901,  1907,  1914,  1916,  1918,  1920,  1924,  1925,  1931,
+    1932,  1934,  1936,  1939,  1946,  1948,  1952,  1953,  1955,  1960,
+    1962,  1964,  1966,  1968,  1971,  1973,  1976,  1979,  1981,  1985,
+    1988,  1992,  1996,  1999,  2004,  2009,  2013,  2022,  2026,  2029,
+    2031,  2034,  2041,  2050,  2054,  2057,  2061,  2065,  2070,  2075,
+    2079,  2081,  2083,  2085,  2090,  2097,  2101,  2104,  2108,  2112,
+    2117,  2122,  2126,  2129,  2131,  2134,  2137,  2139,  2143,  2146,
+    2150,  2154,  2157,  2162,  2167,  2171,  2178,  2187,  2191,  2194,
+    2196,  2199,  2202,  2205,  2209,  2213,  2216,  2221,  2226,  2230,
+    2237,  2246,  2250,  2253,  2255,  2258,  2261,  2263,  2265,  2268,
+    2272,  2276,  2279,  2284,  2291,  2300,  2302,  2305,  2308,  2310,
+    2313,  2316,  2320,  2324,  2326,  2331,  2336,  2340,  2346,  2355,
+    2359,  2362,  2366,  2368,  2374,  2380,  2387,  2394,  2396,  2399,
+    2402,  2404,  2407,  2410,  2414,  2418,  2420,  2425,  2430,  2434,
+    2440,  2449,  2453,  2455,  2458,  2460,  2463,  2470,  2476,  2483,
+    2491,  2499,  2501,  2504,  2507,  2509,  2512,  2515,  2519,  2523,
+    2525,  2530,  2535,  2539,  2548,  2552,  2554,  2556,  2559,  2561,
+    2563,  2566,  2570,  2573,  2577,  2580,  2584,  2588,  2591,  2596,
+    2600,  2603,  2607,  2610,  2615,  2619,  2622,  2629,  2636,  2643,
+    2651,  2653,  2656,  2658,  2660,  2662,  2665,  2669,  2672,  2676,
+    2679,  2683,  2687,  2692,  2695,  2699,  2704,  2707,  2713,  2719,
+    2726,  2733,  2734,  2736,  2737
 };
 
@@ -749,5 +754,5 @@
      144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
      164,    -1,   139,   117,   164,    -1,   111,   134,   164,   135,
-     112,   117,   164,    -1,   111,   134,   164,   116,   167,   135,
+     112,   117,   164,    -1,   111,   134,   164,   116,   168,   135,
      112,   117,   164,    -1,   147,    -1,   146,   116,   147,    -1,
      139,    -1,   139,   113,   147,    -1,   139,   113,   111,   134,
@@ -759,257 +764,256 @@
      110,    -1,    76,    -1,    76,   109,   276,   110,    -1,    76,
      109,   145,   110,    -1,    66,   148,    -1,    66,   109,   275,
-     110,    -1,   118,    -1,   119,    -1,    94,    -1,   120,    -1,
-     121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   275,
-     110,   151,    -1,   109,   275,   110,   166,    -1,   151,    -1,
-     152,   118,   151,    -1,   152,   124,   151,    -1,   152,   125,
-     151,    -1,   152,    -1,   153,   120,   152,    -1,   153,   121,
-     152,    -1,   153,    -1,   154,    88,   153,    -1,   154,    89,
-     153,    -1,   154,    -1,   155,   126,   154,    -1,   155,   127,
-     154,    -1,   155,    90,   154,    -1,   155,    91,   154,    -1,
-     155,    -1,   156,    92,   155,    -1,   156,    93,   155,    -1,
-     156,    -1,   157,   119,   156,    -1,   157,    -1,   158,   128,
-     157,    -1,   158,    -1,   159,   129,   158,    -1,   159,    -1,
-     160,    94,   159,    -1,   160,    -1,   161,    95,   160,    -1,
-     161,    -1,   161,   130,   169,   117,   162,    -1,   161,   130,
-     117,   162,    -1,   161,   130,   169,   117,   166,    -1,   162,
-      -1,   162,    -1,   148,   131,   164,    -1,   148,   168,   164,
-      -1,   166,   373,    -1,    -1,   164,    -1,   111,   112,    -1,
-     111,   134,   164,   135,   112,    -1,   111,   134,   116,   167,
-     135,   112,    -1,   111,   134,   164,   116,   167,   135,   112,
-      -1,   165,    -1,   167,   116,   165,    -1,    97,    -1,    98,
-      -1,    99,    -1,   100,    -1,   101,    -1,   102,    -1,   103,
-      -1,   104,    -1,   105,    -1,   106,    -1,   164,    -1,   169,
-     116,   164,    -1,    -1,   169,    -1,   172,    -1,   173,    -1,
-     177,    -1,   178,    -1,   190,    -1,   192,    -1,   193,    -1,
-     198,    -1,   128,   143,   114,   144,   115,   132,    -1,    72,
-     117,   312,   171,    -1,   114,   115,    -1,   114,   134,   134,
-     209,   174,   135,   115,    -1,   175,    -1,   174,   134,   175,
-      -1,   212,    -1,    40,   212,    -1,   308,    -1,   171,   135,
-      -1,   171,    -1,   176,   171,    -1,   170,   132,    -1,    41,
-     109,   169,   110,   171,    -1,    41,   109,   169,   110,   171,
-      42,   171,    -1,    43,   109,   169,   110,   183,    -1,    43,
-     109,   169,   110,   114,   134,   205,   184,   115,    -1,    53,
-     109,   169,   110,   183,    -1,    53,   109,   169,   110,   114,
-     134,   205,   186,   115,    -1,   163,    -1,   163,    96,   163,
-      -1,   310,    -1,   179,    -1,   180,   116,   179,    -1,    44,
-     180,   117,    -1,    45,   117,    -1,   181,    -1,   182,   181,
-      -1,   182,   171,    -1,    -1,   185,    -1,   182,   176,    -1,
-     185,   182,   176,    -1,    -1,   187,    -1,   182,   189,    -1,
-     182,   176,   188,    -1,   187,   182,   189,    -1,   187,   182,
-     176,   188,    -1,    -1,   189,    -1,    56,    -1,    56,   132,
-      -1,    47,   109,   169,   110,   171,    -1,    46,   171,    47,
-     109,   169,   110,   132,    -1,    48,   109,   134,   191,   110,
-     171,    -1,   170,   135,   132,   170,   132,   170,    -1,   212,
-     170,   132,   170,    -1,    51,    72,   132,    -1,    51,   118,
-     169,   132,    -1,    50,   132,    -1,    50,    72,   132,    -1,
-      49,   132,    -1,    49,    72,   132,    -1,    52,   170,   132,
-      -1,    61,   165,   132,    -1,    62,   165,   132,    -1,    62,
-     165,    63,   164,   132,    -1,    57,   173,   194,    -1,    57,
-     173,   196,    -1,    57,   173,   194,   196,    -1,   195,    -1,
-      58,   109,    96,   110,   173,    -1,   195,    58,   109,    96,
-     110,   173,    -1,    59,   109,    96,   110,   173,    -1,   195,
-      59,   109,    96,   110,   173,    -1,    58,   109,   134,   134,
-     197,   135,   110,   173,   135,    -1,   195,    58,   109,   134,
-     134,   197,   135,   110,   173,   135,    -1,    59,   109,   134,
-     134,   197,   135,   110,   173,   135,    -1,   195,    59,   109,
-     134,   134,   197,   135,   110,   173,   135,    -1,    60,   173,
-      -1,   225,    -1,   225,   309,    -1,   225,   357,    -1,   366,
-     139,    -1,   366,    -1,    64,   199,   109,   141,   110,   132,
-      -1,    64,   199,   109,   141,   117,   200,   110,   132,    -1,
-      64,   199,   109,   141,   117,   200,   117,   200,   110,   132,
-      -1,    64,   199,   109,   141,   117,   200,   117,   200,   117,
-     203,   110,   132,    -1,    64,   199,    51,   109,   141,   117,
-     117,   200,   117,   203,   117,   204,   110,   132,    -1,    -1,
-      11,    -1,    -1,   201,    -1,   202,    -1,   201,   116,   202,
-      -1,   141,   109,   163,   110,    -1,   111,   163,   112,   141,
-     109,   163,   110,    -1,    -1,   141,    -1,   203,   116,   141,
-      -1,   139,    -1,   204,   116,   139,    -1,   135,    -1,   206,
-      -1,   212,    -1,   206,   134,   212,    -1,   135,    -1,   208,
-      -1,   222,    -1,   208,   134,   222,    -1,    -1,   210,    -1,
-      29,   211,   132,    -1,   210,    29,   211,   132,    -1,   274,
-      -1,   211,   116,   274,    -1,   213,    -1,   222,    -1,   214,
-     135,   132,    -1,   219,   135,   132,    -1,   216,   135,   132,
-      -1,   293,   135,   132,    -1,   296,   135,   132,    -1,   215,
-     277,    -1,   231,   215,   277,    -1,   214,   135,   116,   134,
-     272,   277,    -1,   367,   272,   311,    -1,   370,   272,   311,
-      -1,   227,   370,   272,   311,    -1,   217,    -1,   227,   217,
-      -1,   231,   217,    -1,   231,   227,   217,    -1,   216,   135,
-     116,   134,   272,    -1,   111,   112,   272,   109,   134,   260,
-     135,   110,    -1,   370,   272,   109,   134,   260,   135,   110,
-      -1,   218,   272,   109,   134,   260,   135,   110,    -1,   111,
-     134,   262,   135,   112,    -1,   111,   134,   262,   135,   116,
-     134,   263,   135,   112,    -1,     3,   215,    -1,     3,   217,
-      -1,   219,   135,   116,   134,   139,    -1,     3,   225,   309,
-      -1,   220,   135,   116,   134,   309,    -1,   227,     3,   225,
-     309,    -1,   225,     3,   309,    -1,   225,     3,   227,   309,
-      -1,     3,   139,   131,   164,    -1,   221,   135,   116,   134,
-     139,   131,   164,    -1,   223,   135,   132,    -1,   220,   135,
-     132,    -1,   221,   135,   132,    -1,   240,   135,   132,    -1,
-     224,   309,   311,   277,    -1,   223,   116,   312,   309,   311,
-     277,    -1,   236,    -1,   240,    -1,   242,    -1,   283,    -1,
-     237,    -1,   241,    -1,   243,    -1,   284,    -1,    -1,   227,
-      -1,   228,    -1,   227,   228,    -1,   229,    -1,   314,    -1,
-      10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
-      -1,    13,   109,   230,   286,   110,    -1,   232,    -1,   227,
-     232,    -1,   231,   227,   232,    -1,   233,    -1,   232,   233,
-      -1,   234,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
-      -1,     8,    -1,     9,    -1,    69,    -1,    71,    -1,    16,
-      -1,    21,    -1,    20,    -1,    18,    -1,    19,    -1,    17,
-      -1,    22,    -1,    23,    -1,    15,    -1,    25,    -1,    26,
-      -1,    27,    -1,    24,    -1,   237,    -1,   231,   237,    -1,
-     236,   233,    -1,   236,   233,   227,    -1,   236,   233,   237,
-      -1,   238,    -1,   226,   239,   226,    -1,   235,    -1,   227,
-     235,    -1,   238,   228,    -1,   238,   235,    -1,    28,   109,
-     276,   110,    -1,    28,   109,   169,   110,    -1,    78,   109,
-     276,   110,    -1,    78,   109,   169,   110,    -1,   241,    -1,
-     231,   241,    -1,   240,   233,    -1,   240,   233,   227,    -1,
-     244,    -1,   227,   244,    -1,   241,   228,    -1,   243,    -1,
-     231,   243,    -1,   242,   233,    -1,   242,   233,   227,    -1,
-      74,    -1,   227,    74,    -1,   243,   228,    -1,   245,    -1,
-     256,    -1,   247,   114,   248,   115,    -1,   247,   274,    -1,
-      -1,   247,   274,   246,   114,   248,   115,    -1,   247,   109,
-     292,   110,   114,   248,   115,    -1,   247,   285,    -1,    31,
-     312,    -1,    32,   312,    -1,    -1,   248,   249,    -1,   250,
-     132,    -1,    40,   250,   132,    -1,   251,   132,    -1,    40,
-     251,   132,    -1,   366,    -1,   366,   274,    -1,   250,   116,
-     274,    -1,   250,   116,    -1,   225,   252,    -1,   251,   116,
-     312,   252,    -1,    -1,   254,    -1,   318,   253,    -1,   331,
-     253,    -1,   357,    -1,    -1,   254,    -1,   117,   163,    -1,
-      30,   312,    -1,   255,   114,   258,   372,   115,    -1,   255,
-     274,    -1,    -1,   255,   274,   257,   114,   258,   372,   115,
-      -1,   274,   259,    -1,   258,   116,   274,   259,    -1,    -1,
-     131,   163,    -1,    -1,   261,    -1,   263,    -1,   262,    -1,
-     262,   135,   116,   134,   263,    -1,   263,   135,   116,   134,
-      96,    -1,   262,   135,   116,   134,    96,    -1,   267,    -1,
-     263,   135,   116,   134,   267,    -1,   262,   135,   116,   134,
-     267,    -1,   262,   135,   116,   134,   263,   135,   116,   134,
-     267,    -1,   268,    -1,   263,   135,   116,   134,   268,    -1,
-      -1,   265,    -1,   266,    -1,   266,   135,   116,   134,    96,
-      -1,   270,    -1,   269,    -1,   266,   135,   116,   134,   270,
-      -1,   266,   135,   116,   134,   269,    -1,   269,    -1,   362,
-     272,   373,    -1,   370,   272,   373,    -1,   227,   370,   272,
-     373,    -1,   217,    -1,   270,    -1,   362,    -1,   370,    -1,
-     227,   370,    -1,   371,    -1,   224,   336,   373,    -1,   224,
-     340,   373,    -1,   224,    -1,   224,   351,    -1,   139,    -1,
-     271,   116,   139,    -1,   137,    -1,    74,    -1,    75,    -1,
-     138,    -1,    74,    -1,    75,    -1,   139,    -1,    74,    -1,
-      75,    -1,   366,    -1,   225,    -1,   225,   357,    -1,   366,
-      -1,   371,    -1,   225,    -1,   225,   345,    -1,    -1,   131,
-     278,    -1,   107,   278,    -1,   164,    -1,   114,   279,   372,
-     115,    -1,    -1,   278,    -1,   280,   278,    -1,   279,   116,
-     278,    -1,   279,   116,   280,   278,    -1,   281,   117,    -1,
-     274,   117,    -1,   282,    -1,   281,   282,    -1,    80,    -1,
-     113,   274,    -1,   111,   134,   164,   135,   112,    -1,   111,
-     134,   310,   135,   112,    -1,   111,   134,   163,    96,   163,
-     135,   112,    -1,   113,   111,   134,   146,   135,   112,    -1,
-     284,    -1,   231,   284,    -1,   283,   233,    -1,   283,   233,
-     227,    -1,   285,    -1,   227,   285,    -1,   284,   228,    -1,
-      75,   109,   292,   110,    -1,   287,   373,    -1,   286,   116,
-     287,   373,    -1,    -1,   289,   274,   288,   290,    -1,   225,
-     336,    -1,    33,    -1,    35,    -1,    34,    -1,    -1,   290,
-     291,    -1,   129,   274,   109,   292,   110,    -1,   129,   114,
-     134,   298,   115,    -1,   129,   109,   134,   286,   135,   110,
-     114,   134,   298,   115,   109,   292,   110,    -1,   276,    -1,
-     164,    -1,   292,   116,   276,    -1,   292,   116,   164,    -1,
-      33,   294,    -1,   232,    33,   294,    -1,   293,   116,   294,
-      -1,   295,   290,    -1,   295,   290,   131,   276,    -1,   274,
-      -1,   273,   109,   134,   286,   135,   110,    -1,    36,   274,
-     109,   134,   286,   135,   110,   114,   115,    -1,    -1,    36,
-     274,   109,   134,   286,   135,   110,   114,   297,   298,   115,
-      -1,   299,    -1,   298,   134,   299,    -1,   300,   135,   132,
-      -1,   301,   135,   132,    -1,   215,    -1,   217,    -1,   300,
-     135,   116,   134,   272,    -1,   225,   309,    -1,   301,   135,
-     116,   134,   309,    -1,    -1,   303,    -1,   305,    -1,   303,
-     134,   305,    -1,    -1,   303,    -1,   212,    -1,   307,    -1,
-     198,    -1,    -1,     5,    82,   306,   114,   304,   115,    -1,
-      40,   305,    -1,   308,    -1,   323,   173,    -1,   327,   134,
-     207,   173,    -1,   216,   173,    -1,   224,   323,   173,    -1,
-     227,   323,   173,    -1,   231,   323,   173,    -1,   231,   227,
-     323,   173,    -1,   224,   327,   134,   207,   173,    -1,   227,
-     327,   134,   207,   173,    -1,   231,   327,   134,   207,   173,
-      -1,   231,   227,   327,   134,   207,   173,    -1,   318,    -1,
-     331,    -1,   323,    -1,   163,   123,   163,    -1,    -1,    64,
-     109,   141,   110,   312,    -1,    -1,   313,    -1,   314,    -1,
-     313,   314,    -1,    39,   109,   109,   315,   110,   110,    -1,
-     316,    -1,   315,   116,   316,    -1,    -1,   317,    -1,   317,
-     109,   170,   110,    -1,   272,    -1,   234,    -1,   235,    -1,
-     228,    -1,   319,   312,    -1,   320,    -1,   321,   312,    -1,
-     322,   312,    -1,   137,    -1,   109,   319,   110,    -1,   149,
-     318,    -1,   149,   227,   318,    -1,   109,   320,   110,    -1,
-     319,   349,    -1,   109,   320,   110,   349,    -1,   109,   321,
-     110,   350,    -1,   109,   321,   110,    -1,   109,   320,   110,
-     109,   134,   264,   135,   110,    -1,   109,   322,   110,    -1,
-     324,   312,    -1,   325,    -1,   326,   312,    -1,   319,   109,
-     134,   264,   135,   110,    -1,   109,   325,   110,   109,   134,
-     264,   135,   110,    -1,   109,   324,   110,    -1,   149,   323,
-      -1,   149,   227,   323,    -1,   109,   325,   110,    -1,   109,
-     325,   110,   349,    -1,   109,   326,   110,   350,    -1,   109,
-     326,   110,    -1,   328,    -1,   329,    -1,   330,    -1,   319,
-     109,   271,   110,    -1,   109,   329,   110,   109,   271,   110,
-      -1,   109,   328,   110,    -1,   149,   327,    -1,   149,   227,
-     327,    -1,   109,   329,   110,    -1,   109,   329,   110,   349,
-      -1,   109,   330,   110,   350,    -1,   109,   330,   110,    -1,
-     332,   312,    -1,   333,    -1,   334,   312,    -1,   335,   312,
-      -1,   341,    -1,   109,   332,   110,    -1,   149,   331,    -1,
-     149,   227,   331,    -1,   109,   333,   110,    -1,   332,   349,
-      -1,   109,   333,   110,   349,    -1,   109,   334,   110,   350,
-      -1,   109,   334,   110,    -1,   332,   109,   134,   264,   135,
-     110,    -1,   109,   333,   110,   109,   134,   264,   135,   110,
-      -1,   109,   335,   110,    -1,   319,   312,    -1,   337,    -1,
-     338,   312,    -1,   339,   312,    -1,   149,   336,    -1,   149,
-     227,   336,    -1,   109,   337,   110,    -1,   319,   355,    -1,
-     109,   337,   110,   349,    -1,   109,   338,   110,   350,    -1,
-     109,   338,   110,    -1,   319,   109,   134,   264,   135,   110,
-      -1,   109,   337,   110,   109,   134,   264,   135,   110,    -1,
-     109,   339,   110,    -1,   341,   312,    -1,   342,    -1,   343,
-     312,    -1,   344,   312,    -1,    74,    -1,    75,    -1,   149,
-     340,    -1,   149,   227,   340,    -1,   109,   342,   110,    -1,
-     341,   355,    -1,   109,   342,   110,   355,    -1,   341,   109,
-     134,   264,   135,   110,    -1,   109,   342,   110,   109,   134,
-     264,   135,   110,    -1,   346,    -1,   347,   312,    -1,   348,
-     312,    -1,   149,    -1,   149,   227,    -1,   149,   345,    -1,
-     149,   227,   345,    -1,   109,   346,   110,    -1,   349,    -1,
-     109,   346,   110,   349,    -1,   109,   347,   110,   350,    -1,
-     109,   347,   110,    -1,   109,   134,   264,   135,   110,    -1,
-     109,   346,   110,   109,   134,   264,   135,   110,    -1,   109,
-     348,   110,    -1,   111,   112,    -1,   111,   112,   350,    -1,
-     350,    -1,   111,   134,   164,   135,   112,    -1,   111,   134,
-     118,   135,   112,    -1,   350,   111,   134,   164,   135,   112,
-      -1,   350,   111,   134,   118,   135,   112,    -1,   352,    -1,
-     353,   312,    -1,   354,   312,    -1,   149,    -1,   149,   227,
-      -1,   149,   351,    -1,   149,   227,   351,    -1,   109,   352,
-     110,    -1,   355,    -1,   109,   352,   110,   355,    -1,   109,
-     353,   110,   350,    -1,   109,   353,   110,    -1,   109,   134,
-     264,   135,   110,    -1,   109,   352,   110,   109,   134,   264,
-     135,   110,    -1,   109,   354,   110,    -1,   356,    -1,   356,
-     350,    -1,   350,    -1,   111,   112,    -1,   111,   134,   227,
-     118,   135,   112,    -1,   111,   134,   227,   135,   112,    -1,
-     111,   134,   227,   164,   135,   112,    -1,   111,   134,     7,
-     226,   164,   135,   112,    -1,   111,   134,   227,     7,   164,
-     135,   112,    -1,   358,    -1,   359,   312,    -1,   360,   312,
-      -1,   149,    -1,   149,   227,    -1,   149,   357,    -1,   149,
-     227,   357,    -1,   109,   358,   110,    -1,   349,    -1,   109,
-     358,   110,   349,    -1,   109,   359,   110,   350,    -1,   109,
-     359,   110,    -1,   109,   358,   110,   109,   134,   264,   135,
-     110,    -1,   109,   360,   110,    -1,   362,    -1,   370,    -1,
-     227,   370,    -1,   363,    -1,   364,    -1,   149,   225,    -1,
-     227,   149,   225,    -1,   149,   371,    -1,   227,   149,   371,
-      -1,   149,   361,    -1,   227,   149,   361,    -1,   111,   112,
-     225,    -1,   365,   225,    -1,   111,   112,   350,   225,    -1,
-     365,   350,   225,    -1,   350,   225,    -1,   111,   112,   363,
-      -1,   365,   363,    -1,   111,   112,   350,   363,    -1,   365,
-     350,   363,    -1,   350,   363,    -1,   111,   134,   227,   118,
-     135,   112,    -1,   111,   134,   227,   164,   135,   112,    -1,
-     111,   134,   231,   164,   135,   112,    -1,   111,   134,   231,
-     227,   164,   135,   112,    -1,   370,    -1,   227,   370,    -1,
-     367,    -1,   368,    -1,   369,    -1,   149,   225,    -1,   227,
-     149,   225,    -1,   149,   371,    -1,   227,   149,   371,    -1,
-     149,   366,    -1,   227,   149,   366,    -1,   111,   112,   225,
-      -1,   111,   112,   350,   225,    -1,   350,   225,    -1,   111,
-     112,   368,    -1,   111,   112,   350,   368,    -1,   350,   368,
-      -1,   111,   134,   263,   135,   112,    -1,   111,   112,   109,
-     260,   110,    -1,   370,   109,   134,   260,   135,   110,    -1,
-     218,   109,   134,   260,   135,   110,    -1,    -1,   116,    -1,
-      -1,   131,   164,    -1
+     110,    -1,   118,    -1,   119,    -1,   120,    -1,   121,    -1,
+     122,    -1,   123,    -1,   148,    -1,   109,   275,   110,   151,
+      -1,   109,   275,   110,   167,    -1,   151,    -1,   152,   118,
+     151,    -1,   152,   124,   151,    -1,   152,   125,   151,    -1,
+     152,    -1,   153,   120,   152,    -1,   153,   121,   152,    -1,
+     153,    -1,   154,    88,   153,    -1,   154,    89,   153,    -1,
+     154,    -1,   155,   126,   154,    -1,   155,   127,   154,    -1,
+     155,    90,   154,    -1,   155,    91,   154,    -1,   155,    -1,
+     156,    92,   155,    -1,   156,    93,   155,    -1,   156,    -1,
+     157,   119,   156,    -1,   157,    -1,   158,   128,   157,    -1,
+     158,    -1,   159,   129,   158,    -1,   159,    -1,   160,    94,
+     159,    -1,   160,    -1,   161,    95,   160,    -1,   161,    -1,
+     161,   130,   169,   117,   162,    -1,   161,   130,   117,   162,
+      -1,   161,   130,   169,   117,   167,    -1,   162,    -1,   162,
+      -1,   148,   166,   164,    -1,   167,   373,    -1,    -1,   164,
+      -1,   131,    -1,    97,    -1,    98,    -1,    99,    -1,   100,
+      -1,   101,    -1,   102,    -1,   103,    -1,   104,    -1,   105,
+      -1,   106,    -1,   111,   112,    -1,   111,   134,   164,   135,
+     112,    -1,   111,   134,   116,   168,   135,   112,    -1,   111,
+     134,   164,   116,   168,   135,   112,    -1,   165,    -1,   168,
+     116,   165,    -1,   164,    -1,   169,   116,   164,    -1,    -1,
+     169,    -1,   172,    -1,   173,    -1,   177,    -1,   178,    -1,
+     190,    -1,   192,    -1,   193,    -1,   198,    -1,   128,   143,
+     114,   144,   115,   132,    -1,    72,   117,   312,   171,    -1,
+     114,   115,    -1,   114,   134,   134,   209,   174,   135,   115,
+      -1,   175,    -1,   174,   134,   175,    -1,   212,    -1,    40,
+     212,    -1,   308,    -1,   171,   135,    -1,   171,    -1,   176,
+     171,    -1,   170,   132,    -1,    41,   109,   169,   110,   171,
+      -1,    41,   109,   169,   110,   171,    42,   171,    -1,    43,
+     109,   169,   110,   183,    -1,    43,   109,   169,   110,   114,
+     134,   205,   184,   115,    -1,    53,   109,   169,   110,   183,
+      -1,    53,   109,   169,   110,   114,   134,   205,   186,   115,
+      -1,   163,    -1,   163,    96,   163,    -1,   310,    -1,   179,
+      -1,   180,   116,   179,    -1,    44,   180,   117,    -1,    45,
+     117,    -1,   181,    -1,   182,   181,    -1,   182,   171,    -1,
+      -1,   185,    -1,   182,   176,    -1,   185,   182,   176,    -1,
+      -1,   187,    -1,   182,   189,    -1,   182,   176,   188,    -1,
+     187,   182,   189,    -1,   187,   182,   176,   188,    -1,    -1,
+     189,    -1,    56,    -1,    56,   132,    -1,    47,   109,   169,
+     110,   171,    -1,    46,   171,    47,   109,   169,   110,   132,
+      -1,    48,   109,   134,   191,   110,   171,    -1,   170,   135,
+     132,   170,   132,   170,    -1,   212,   170,   132,   170,    -1,
+      51,    72,   132,    -1,    51,   118,   169,   132,    -1,    50,
+     132,    -1,    50,    72,   132,    -1,    49,   132,    -1,    49,
+      72,   132,    -1,    52,   170,   132,    -1,    61,   165,   132,
+      -1,    62,   165,   132,    -1,    62,   165,    63,   164,   132,
+      -1,    57,   173,   194,    -1,    57,   173,   196,    -1,    57,
+     173,   194,   196,    -1,   195,    -1,    58,   109,    96,   110,
+     173,    -1,   195,    58,   109,    96,   110,   173,    -1,    59,
+     109,    96,   110,   173,    -1,   195,    59,   109,    96,   110,
+     173,    -1,    58,   109,   134,   134,   197,   135,   110,   173,
+     135,    -1,   195,    58,   109,   134,   134,   197,   135,   110,
+     173,   135,    -1,    59,   109,   134,   134,   197,   135,   110,
+     173,   135,    -1,   195,    59,   109,   134,   134,   197,   135,
+     110,   173,   135,    -1,    60,   173,    -1,   225,    -1,   225,
+     309,    -1,   225,   357,    -1,   366,   139,    -1,   366,    -1,
+      64,   199,   109,   141,   110,   132,    -1,    64,   199,   109,
+     141,   117,   200,   110,   132,    -1,    64,   199,   109,   141,
+     117,   200,   117,   200,   110,   132,    -1,    64,   199,   109,
+     141,   117,   200,   117,   200,   117,   203,   110,   132,    -1,
+      64,   199,    51,   109,   141,   117,   117,   200,   117,   203,
+     117,   204,   110,   132,    -1,    -1,    11,    -1,    -1,   201,
+      -1,   202,    -1,   201,   116,   202,    -1,   141,   109,   163,
+     110,    -1,   111,   163,   112,   141,   109,   163,   110,    -1,
+      -1,   141,    -1,   203,   116,   141,    -1,   139,    -1,   204,
+     116,   139,    -1,   135,    -1,   206,    -1,   212,    -1,   206,
+     134,   212,    -1,   135,    -1,   208,    -1,   222,    -1,   208,
+     134,   222,    -1,    -1,   210,    -1,    29,   211,   132,    -1,
+     210,    29,   211,   132,    -1,   274,    -1,   211,   116,   274,
+      -1,   213,    -1,   222,    -1,   214,   135,   132,    -1,   219,
+     135,   132,    -1,   216,   135,   132,    -1,   293,   135,   132,
+      -1,   296,   135,   132,    -1,   215,   277,    -1,   231,   215,
+     277,    -1,   214,   135,   116,   134,   272,   277,    -1,   367,
+     272,   311,    -1,   370,   272,   311,    -1,   227,   370,   272,
+     311,    -1,   217,    -1,   227,   217,    -1,   231,   217,    -1,
+     231,   227,   217,    -1,   216,   135,   116,   134,   272,    -1,
+     111,   112,   272,   109,   134,   260,   135,   110,    -1,   370,
+     272,   109,   134,   260,   135,   110,    -1,   218,   272,   109,
+     134,   260,   135,   110,    -1,   111,   134,   262,   135,   112,
+      -1,   111,   134,   262,   135,   116,   134,   263,   135,   112,
+      -1,     3,   215,    -1,     3,   217,    -1,   219,   135,   116,
+     134,   139,    -1,     3,   225,   309,    -1,   220,   135,   116,
+     134,   309,    -1,   227,     3,   225,   309,    -1,   225,     3,
+     309,    -1,   225,     3,   227,   309,    -1,     3,   139,   131,
+     164,    -1,   221,   135,   116,   134,   139,   131,   164,    -1,
+     223,   135,   132,    -1,   220,   135,   132,    -1,   221,   135,
+     132,    -1,   240,   135,   132,    -1,   224,   309,   311,   277,
+      -1,   223,   116,   312,   309,   311,   277,    -1,   236,    -1,
+     240,    -1,   242,    -1,   283,    -1,   237,    -1,   241,    -1,
+     243,    -1,   284,    -1,    -1,   227,    -1,   228,    -1,   227,
+     228,    -1,   229,    -1,   314,    -1,    10,    -1,    12,    -1,
+      11,    -1,    14,    -1,    67,    -1,    -1,    13,   109,   230,
+     286,   110,    -1,   232,    -1,   227,   232,    -1,   231,   227,
+     232,    -1,   233,    -1,   232,   233,    -1,   234,    -1,     5,
+      -1,     7,    -1,     4,    -1,     6,    -1,     8,    -1,     9,
+      -1,    69,    -1,    71,    -1,    16,    -1,    21,    -1,    20,
+      -1,    18,    -1,    19,    -1,    17,    -1,    22,    -1,    23,
+      -1,    15,    -1,    25,    -1,    26,    -1,    27,    -1,    24,
+      -1,   237,    -1,   231,   237,    -1,   236,   233,    -1,   236,
+     233,   227,    -1,   236,   233,   237,    -1,   238,    -1,   226,
+     239,   226,    -1,   235,    -1,   227,   235,    -1,   238,   228,
+      -1,   238,   235,    -1,    28,   109,   276,   110,    -1,    28,
+     109,   169,   110,    -1,    78,   109,   276,   110,    -1,    78,
+     109,   169,   110,    -1,   241,    -1,   231,   241,    -1,   240,
+     233,    -1,   240,   233,   227,    -1,   244,    -1,   227,   244,
+      -1,   241,   228,    -1,   243,    -1,   231,   243,    -1,   242,
+     233,    -1,   242,   233,   227,    -1,    74,    -1,   227,    74,
+      -1,   243,   228,    -1,   245,    -1,   256,    -1,   247,   114,
+     248,   115,    -1,   247,   274,    -1,    -1,   247,   274,   246,
+     114,   248,   115,    -1,   247,   109,   292,   110,   114,   248,
+     115,    -1,   247,   285,    -1,    31,   312,    -1,    32,   312,
+      -1,    -1,   248,   249,    -1,   250,   132,    -1,    40,   250,
+     132,    -1,   251,   132,    -1,    40,   251,   132,    -1,   366,
+      -1,   366,   274,    -1,   250,   116,   274,    -1,   250,   116,
+      -1,   225,   252,    -1,   251,   116,   312,   252,    -1,    -1,
+     254,    -1,   318,   253,    -1,   331,   253,    -1,   357,    -1,
+      -1,   254,    -1,   117,   163,    -1,    30,   312,    -1,   255,
+     114,   258,   372,   115,    -1,   255,   274,    -1,    -1,   255,
+     274,   257,   114,   258,   372,   115,    -1,   274,   259,    -1,
+     258,   116,   274,   259,    -1,    -1,   131,   163,    -1,    -1,
+     261,    -1,   263,    -1,   262,    -1,   262,   135,   116,   134,
+     263,    -1,   263,   135,   116,   134,    96,    -1,   262,   135,
+     116,   134,    96,    -1,   267,    -1,   263,   135,   116,   134,
+     267,    -1,   262,   135,   116,   134,   267,    -1,   262,   135,
+     116,   134,   263,   135,   116,   134,   267,    -1,   268,    -1,
+     263,   135,   116,   134,   268,    -1,    -1,   265,    -1,   266,
+      -1,   266,   135,   116,   134,    96,    -1,   270,    -1,   269,
+      -1,   266,   135,   116,   134,   270,    -1,   266,   135,   116,
+     134,   269,    -1,   269,    -1,   362,   272,   373,    -1,   370,
+     272,   373,    -1,   227,   370,   272,   373,    -1,   217,    -1,
+     270,    -1,   362,    -1,   370,    -1,   227,   370,    -1,   371,
+      -1,   224,   336,   373,    -1,   224,   340,   373,    -1,   224,
+      -1,   224,   351,    -1,   139,    -1,   271,   116,   139,    -1,
+     137,    -1,    74,    -1,    75,    -1,   138,    -1,    74,    -1,
+      75,    -1,   139,    -1,    74,    -1,    75,    -1,   366,    -1,
+     225,    -1,   225,   357,    -1,   366,    -1,   371,    -1,   225,
+      -1,   225,   345,    -1,    -1,   131,   278,    -1,   107,   278,
+      -1,   164,    -1,   114,   279,   372,   115,    -1,    -1,   278,
+      -1,   280,   278,    -1,   279,   116,   278,    -1,   279,   116,
+     280,   278,    -1,   281,   117,    -1,   274,   117,    -1,   282,
+      -1,   281,   282,    -1,    80,    -1,   113,   274,    -1,   111,
+     134,   164,   135,   112,    -1,   111,   134,   310,   135,   112,
+      -1,   111,   134,   163,    96,   163,   135,   112,    -1,   113,
+     111,   134,   146,   135,   112,    -1,   284,    -1,   231,   284,
+      -1,   283,   233,    -1,   283,   233,   227,    -1,   285,    -1,
+     227,   285,    -1,   284,   228,    -1,    75,   109,   292,   110,
+      -1,   287,   373,    -1,   286,   116,   287,   373,    -1,    -1,
+     289,   274,   288,   290,    -1,   225,   336,    -1,    33,    -1,
+      35,    -1,    34,    -1,    -1,   290,   291,    -1,   129,   274,
+     109,   292,   110,    -1,   129,   114,   134,   298,   115,    -1,
+     129,   109,   134,   286,   135,   110,   114,   134,   298,   115,
+     109,   292,   110,    -1,   276,    -1,   164,    -1,   292,   116,
+     276,    -1,   292,   116,   164,    -1,    33,   294,    -1,   232,
+      33,   294,    -1,   293,   116,   294,    -1,   295,   290,    -1,
+     295,   290,   131,   276,    -1,   274,    -1,   273,   109,   134,
+     286,   135,   110,    -1,    36,   274,   109,   134,   286,   135,
+     110,   114,   115,    -1,    -1,    36,   274,   109,   134,   286,
+     135,   110,   114,   297,   298,   115,    -1,   299,    -1,   298,
+     134,   299,    -1,   300,   135,   132,    -1,   301,   135,   132,
+      -1,   215,    -1,   217,    -1,   300,   135,   116,   134,   272,
+      -1,   225,   309,    -1,   301,   135,   116,   134,   309,    -1,
+      -1,   303,    -1,   305,    -1,   303,   134,   305,    -1,    -1,
+     303,    -1,   212,    -1,   307,    -1,   198,    -1,    -1,     5,
+      82,   306,   114,   304,   115,    -1,    40,   305,    -1,   308,
+      -1,   323,   173,    -1,   327,   134,   207,   173,    -1,   216,
+     173,    -1,   224,   323,   173,    -1,   227,   323,   173,    -1,
+     231,   323,   173,    -1,   231,   227,   323,   173,    -1,   224,
+     327,   134,   207,   173,    -1,   227,   327,   134,   207,   173,
+      -1,   231,   327,   134,   207,   173,    -1,   231,   227,   327,
+     134,   207,   173,    -1,   318,    -1,   331,    -1,   323,    -1,
+     163,   123,   163,    -1,    -1,    64,   109,   141,   110,   312,
+      -1,    -1,   313,    -1,   314,    -1,   313,   314,    -1,    39,
+     109,   109,   315,   110,   110,    -1,   316,    -1,   315,   116,
+     316,    -1,    -1,   317,    -1,   317,   109,   170,   110,    -1,
+     272,    -1,   234,    -1,   235,    -1,   228,    -1,   319,   312,
+      -1,   320,    -1,   321,   312,    -1,   322,   312,    -1,   137,
+      -1,   109,   319,   110,    -1,   149,   318,    -1,   149,   227,
+     318,    -1,   109,   320,   110,    -1,   319,   349,    -1,   109,
+     320,   110,   349,    -1,   109,   321,   110,   350,    -1,   109,
+     321,   110,    -1,   109,   320,   110,   109,   134,   264,   135,
+     110,    -1,   109,   322,   110,    -1,   324,   312,    -1,   325,
+      -1,   326,   312,    -1,   319,   109,   134,   264,   135,   110,
+      -1,   109,   325,   110,   109,   134,   264,   135,   110,    -1,
+     109,   324,   110,    -1,   149,   323,    -1,   149,   227,   323,
+      -1,   109,   325,   110,    -1,   109,   325,   110,   349,    -1,
+     109,   326,   110,   350,    -1,   109,   326,   110,    -1,   328,
+      -1,   329,    -1,   330,    -1,   319,   109,   271,   110,    -1,
+     109,   329,   110,   109,   271,   110,    -1,   109,   328,   110,
+      -1,   149,   327,    -1,   149,   227,   327,    -1,   109,   329,
+     110,    -1,   109,   329,   110,   349,    -1,   109,   330,   110,
+     350,    -1,   109,   330,   110,    -1,   332,   312,    -1,   333,
+      -1,   334,   312,    -1,   335,   312,    -1,   341,    -1,   109,
+     332,   110,    -1,   149,   331,    -1,   149,   227,   331,    -1,
+     109,   333,   110,    -1,   332,   349,    -1,   109,   333,   110,
+     349,    -1,   109,   334,   110,   350,    -1,   109,   334,   110,
+      -1,   332,   109,   134,   264,   135,   110,    -1,   109,   333,
+     110,   109,   134,   264,   135,   110,    -1,   109,   335,   110,
+      -1,   319,   312,    -1,   337,    -1,   338,   312,    -1,   339,
+     312,    -1,   149,   336,    -1,   149,   227,   336,    -1,   109,
+     337,   110,    -1,   319,   355,    -1,   109,   337,   110,   349,
+      -1,   109,   338,   110,   350,    -1,   109,   338,   110,    -1,
+     319,   109,   134,   264,   135,   110,    -1,   109,   337,   110,
+     109,   134,   264,   135,   110,    -1,   109,   339,   110,    -1,
+     341,   312,    -1,   342,    -1,   343,   312,    -1,   344,   312,
+      -1,    74,    -1,    75,    -1,   149,   340,    -1,   149,   227,
+     340,    -1,   109,   342,   110,    -1,   341,   355,    -1,   109,
+     342,   110,   355,    -1,   341,   109,   134,   264,   135,   110,
+      -1,   109,   342,   110,   109,   134,   264,   135,   110,    -1,
+     346,    -1,   347,   312,    -1,   348,   312,    -1,   149,    -1,
+     149,   227,    -1,   149,   345,    -1,   149,   227,   345,    -1,
+     109,   346,   110,    -1,   349,    -1,   109,   346,   110,   349,
+      -1,   109,   347,   110,   350,    -1,   109,   347,   110,    -1,
+     109,   134,   264,   135,   110,    -1,   109,   346,   110,   109,
+     134,   264,   135,   110,    -1,   109,   348,   110,    -1,   111,
+     112,    -1,   111,   112,   350,    -1,   350,    -1,   111,   134,
+     164,   135,   112,    -1,   111,   134,   118,   135,   112,    -1,
+     350,   111,   134,   164,   135,   112,    -1,   350,   111,   134,
+     118,   135,   112,    -1,   352,    -1,   353,   312,    -1,   354,
+     312,    -1,   149,    -1,   149,   227,    -1,   149,   351,    -1,
+     149,   227,   351,    -1,   109,   352,   110,    -1,   355,    -1,
+     109,   352,   110,   355,    -1,   109,   353,   110,   350,    -1,
+     109,   353,   110,    -1,   109,   134,   264,   135,   110,    -1,
+     109,   352,   110,   109,   134,   264,   135,   110,    -1,   109,
+     354,   110,    -1,   356,    -1,   356,   350,    -1,   350,    -1,
+     111,   112,    -1,   111,   134,   227,   118,   135,   112,    -1,
+     111,   134,   227,   135,   112,    -1,   111,   134,   227,   164,
+     135,   112,    -1,   111,   134,     7,   226,   164,   135,   112,
+      -1,   111,   134,   227,     7,   164,   135,   112,    -1,   358,
+      -1,   359,   312,    -1,   360,   312,    -1,   149,    -1,   149,
+     227,    -1,   149,   357,    -1,   149,   227,   357,    -1,   109,
+     358,   110,    -1,   349,    -1,   109,   358,   110,   349,    -1,
+     109,   359,   110,   350,    -1,   109,   359,   110,    -1,   109,
+     358,   110,   109,   134,   264,   135,   110,    -1,   109,   360,
+     110,    -1,   362,    -1,   370,    -1,   227,   370,    -1,   363,
+      -1,   364,    -1,   149,   225,    -1,   227,   149,   225,    -1,
+     149,   371,    -1,   227,   149,   371,    -1,   149,   361,    -1,
+     227,   149,   361,    -1,   111,   112,   225,    -1,   365,   225,
+      -1,   111,   112,   350,   225,    -1,   365,   350,   225,    -1,
+     350,   225,    -1,   111,   112,   363,    -1,   365,   363,    -1,
+     111,   112,   350,   363,    -1,   365,   350,   363,    -1,   350,
+     363,    -1,   111,   134,   227,   118,   135,   112,    -1,   111,
+     134,   227,   164,   135,   112,    -1,   111,   134,   231,   164,
+     135,   112,    -1,   111,   134,   231,   227,   164,   135,   112,
+      -1,   370,    -1,   227,   370,    -1,   367,    -1,   368,    -1,
+     369,    -1,   149,   225,    -1,   227,   149,   225,    -1,   149,
+     371,    -1,   227,   149,   371,    -1,   149,   366,    -1,   227,
+     149,   366,    -1,   111,   112,   225,    -1,   111,   112,   350,
+     225,    -1,   350,   225,    -1,   111,   112,   368,    -1,   111,
+     112,   350,   368,    -1,   350,   368,    -1,   111,   134,   263,
+     135,   112,    -1,   111,   112,   109,   260,   110,    -1,   370,
+     109,   134,   260,   135,   110,    -1,   218,   109,   134,   260,
+     135,   110,    -1,    -1,   116,    -1,    -1,   131,   164,    -1
 };
 
@@ -1017,80 +1021,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   292,   292,   298,   307,   308,   309,   313,   314,   315,
-     319,   320,   324,   325,   329,   330,   334,   335,   341,   343,
-     345,   347,   352,   353,   359,   363,   365,   366,   368,   369,
-     371,   373,   375,   383,   384,   390,   391,   392,   397,   399,
-     404,   405,   409,   413,   415,   417,   419,   424,   427,   429,
-     431,   436,   439,   441,   443,   445,   447,   449,   451,   453,
-     455,   457,   459,   466,   467,   469,   473,   474,   475,   476,
-     480,   481,   483,   488,   489,   491,   493,   498,   499,   501,
-     506,   507,   509,   514,   515,   517,   519,   521,   526,   527,
-     529,   534,   535,   540,   541,   546,   547,   552,   553,   558,
-     559,   564,   565,   568,   570,   575,   580,   581,   583,   585,
-     591,   592,   598,   600,   602,   604,   609,   610,   615,   616,
-     617,   618,   619,   620,   621,   622,   623,   624,   628,   629,
-     636,   637,   643,   644,   645,   646,   647,   648,   649,   650,
-     651,   661,   668,   670,   680,   681,   686,   688,   694,   696,
-     700,   701,   706,   711,   714,   716,   718,   728,   730,   741,
-     742,   744,   748,   750,   754,   755,   760,   761,   765,   770,
-     771,   775,   777,   783,   784,   788,   790,   792,   794,   800,
-     801,   805,   807,   812,   814,   816,   821,   823,   828,   830,
-     834,   837,   841,   844,   848,   850,   854,   856,   863,   865,
-     867,   876,   878,   880,   882,   884,   889,   891,   893,   895,
-     900,   913,   914,   919,   921,   926,   930,   932,   934,   936,
-     938,   944,   945,   951,   952,   956,   957,   962,   964,   970,
-     971,   973,   978,   980,   987,   989,   993,   994,   999,  1001,
-    1005,  1006,  1010,  1012,  1016,  1017,  1021,  1022,  1026,  1027,
-    1042,  1043,  1044,  1045,  1046,  1050,  1055,  1062,  1072,  1077,
-    1082,  1090,  1095,  1100,  1105,  1110,  1118,  1140,  1145,  1152,
-    1154,  1161,  1166,  1171,  1182,  1187,  1192,  1197,  1202,  1211,
-    1216,  1224,  1225,  1226,  1227,  1233,  1238,  1246,  1247,  1248,
-    1249,  1253,  1254,  1255,  1256,  1261,  1262,  1271,  1272,  1277,
-    1278,  1283,  1285,  1287,  1289,  1291,  1294,  1293,  1305,  1306,
-    1308,  1318,  1319,  1324,  1328,  1330,  1332,  1334,  1336,  1338,
-    1340,  1342,  1347,  1349,  1351,  1353,  1355,  1357,  1359,  1361,
-    1363,  1365,  1367,  1369,  1371,  1377,  1378,  1380,  1382,  1384,
-    1389,  1390,  1396,  1397,  1399,  1401,  1406,  1408,  1410,  1412,
-    1417,  1418,  1420,  1422,  1427,  1428,  1430,  1435,  1436,  1438,
-    1440,  1445,  1447,  1449,  1454,  1455,  1459,  1461,  1467,  1466,
-    1470,  1472,  1477,  1479,  1485,  1486,  1491,  1492,  1494,  1495,
-    1504,  1505,  1507,  1509,  1514,  1516,  1522,  1523,  1525,  1528,
-    1531,  1536,  1537,  1542,  1547,  1551,  1553,  1559,  1558,  1565,
-    1567,  1573,  1574,  1582,  1583,  1587,  1588,  1589,  1591,  1593,
-    1600,  1601,  1603,  1605,  1610,  1611,  1617,  1618,  1622,  1623,
-    1628,  1629,  1630,  1632,  1640,  1641,  1643,  1646,  1648,  1652,
-    1653,  1654,  1656,  1658,  1662,  1667,  1675,  1676,  1685,  1687,
-    1692,  1693,  1694,  1698,  1699,  1700,  1704,  1705,  1706,  1710,
-    1711,  1712,  1717,  1718,  1719,  1720,  1726,  1727,  1729,  1734,
-    1735,  1740,  1741,  1742,  1743,  1744,  1759,  1760,  1765,  1766,
-    1774,  1776,  1778,  1781,  1783,  1785,  1808,  1809,  1811,  1813,
-    1818,  1819,  1821,  1826,  1831,  1832,  1838,  1837,  1841,  1845,
-    1847,  1849,  1855,  1856,  1861,  1866,  1868,  1873,  1875,  1876,
-    1878,  1883,  1885,  1887,  1892,  1894,  1899,  1904,  1912,  1918,
-    1917,  1931,  1932,  1937,  1938,  1942,  1947,  1952,  1960,  1965,
-    1976,  1977,  1988,  1989,  1995,  1996,  2000,  2001,  2002,  2005,
-    2004,  2015,  2024,  2030,  2036,  2045,  2051,  2057,  2063,  2069,
-    2077,  2083,  2091,  2097,  2106,  2107,  2108,  2112,  2116,  2118,
-    2123,  2124,  2128,  2129,  2134,  2140,  2141,  2144,  2146,  2147,
-    2151,  2152,  2153,  2154,  2188,  2190,  2191,  2193,  2198,  2203,
-    2208,  2210,  2212,  2217,  2219,  2221,  2223,  2228,  2230,  2239,
-    2241,  2242,  2247,  2249,  2251,  2256,  2258,  2260,  2265,  2267,
-    2269,  2278,  2279,  2280,  2284,  2286,  2288,  2293,  2295,  2297,
-    2302,  2304,  2306,  2321,  2323,  2324,  2326,  2331,  2332,  2337,
-    2339,  2341,  2346,  2348,  2350,  2352,  2357,  2359,  2361,  2371,
-    2373,  2374,  2376,  2381,  2383,  2385,  2390,  2392,  2394,  2396,
-    2401,  2403,  2405,  2436,  2438,  2439,  2441,  2446,  2451,  2459,
-    2461,  2463,  2468,  2470,  2475,  2477,  2491,  2492,  2494,  2499,
-    2501,  2503,  2505,  2507,  2512,  2513,  2515,  2517,  2522,  2524,
-    2526,  2532,  2534,  2536,  2540,  2542,  2544,  2546,  2560,  2561,
-    2563,  2568,  2570,  2572,  2574,  2576,  2581,  2582,  2584,  2586,
-    2591,  2593,  2595,  2601,  2602,  2604,  2613,  2616,  2618,  2621,
-    2623,  2625,  2638,  2639,  2641,  2646,  2648,  2650,  2652,  2654,
-    2659,  2660,  2662,  2664,  2669,  2671,  2679,  2680,  2681,  2686,
-    2687,  2691,  2693,  2695,  2697,  2699,  2701,  2708,  2710,  2712,
-    2714,  2716,  2718,  2720,  2722,  2724,  2726,  2731,  2733,  2735,
-    2740,  2766,  2767,  2769,  2773,  2774,  2778,  2780,  2782,  2784,
-    2786,  2788,  2795,  2797,  2799,  2801,  2803,  2805,  2810,  2815,
-    2817,  2819,  2837,  2839,  2844,  2845
+       0,   296,   296,   302,   311,   312,   313,   317,   318,   319,
+     323,   324,   328,   329,   333,   334,   338,   339,   350,   352,
+     354,   356,   361,   362,   368,   372,   374,   375,   377,   378,
+     380,   382,   384,   393,   394,   400,   401,   402,   407,   409,
+     414,   415,   419,   423,   425,   427,   429,   434,   437,   439,
+     441,   446,   459,   461,   463,   465,   467,   469,   471,   473,
+     475,   477,   479,   486,   487,   493,   494,   495,   496,   500,
+     501,   503,   508,   509,   511,   513,   518,   519,   521,   526,
+     527,   529,   534,   535,   537,   539,   541,   546,   547,   549,
+     554,   555,   560,   561,   566,   567,   572,   573,   578,   579,
+     584,   585,   588,   590,   595,   600,   601,   603,   609,   610,
+     614,   615,   616,   617,   618,   619,   620,   621,   622,   623,
+     624,   630,   632,   634,   636,   641,   642,   647,   648,   654,
+     655,   661,   662,   663,   664,   665,   666,   667,   668,   669,
+     679,   686,   688,   698,   699,   704,   706,   712,   714,   718,
+     719,   724,   729,   732,   734,   736,   746,   748,   759,   760,
+     762,   766,   768,   772,   773,   778,   779,   783,   788,   789,
+     793,   795,   801,   802,   806,   808,   810,   812,   818,   819,
+     823,   825,   830,   832,   834,   839,   841,   846,   848,   852,
+     855,   859,   862,   866,   868,   872,   874,   881,   883,   885,
+     894,   896,   898,   900,   902,   907,   909,   911,   913,   918,
+     931,   932,   937,   939,   944,   948,   950,   952,   954,   956,
+     962,   963,   969,   970,   974,   975,   980,   982,   988,   989,
+     991,   996,   998,  1005,  1007,  1011,  1012,  1017,  1019,  1023,
+    1024,  1028,  1030,  1034,  1035,  1039,  1040,  1044,  1045,  1060,
+    1061,  1062,  1063,  1064,  1068,  1073,  1080,  1090,  1095,  1100,
+    1108,  1113,  1118,  1123,  1128,  1136,  1158,  1163,  1170,  1172,
+    1179,  1184,  1189,  1200,  1205,  1210,  1215,  1220,  1229,  1234,
+    1242,  1243,  1244,  1245,  1251,  1256,  1264,  1265,  1266,  1267,
+    1271,  1272,  1273,  1274,  1279,  1280,  1289,  1290,  1295,  1296,
+    1301,  1303,  1305,  1307,  1309,  1312,  1311,  1323,  1324,  1326,
+    1336,  1337,  1342,  1346,  1348,  1350,  1352,  1354,  1356,  1358,
+    1360,  1365,  1367,  1369,  1371,  1373,  1375,  1377,  1379,  1381,
+    1383,  1385,  1387,  1389,  1395,  1396,  1398,  1400,  1402,  1407,
+    1408,  1414,  1415,  1417,  1419,  1424,  1426,  1428,  1430,  1435,
+    1436,  1438,  1440,  1445,  1446,  1448,  1453,  1454,  1456,  1458,
+    1463,  1465,  1467,  1472,  1473,  1477,  1479,  1485,  1484,  1488,
+    1490,  1495,  1497,  1503,  1504,  1509,  1510,  1512,  1513,  1522,
+    1523,  1525,  1527,  1532,  1534,  1540,  1541,  1543,  1546,  1549,
+    1554,  1555,  1560,  1565,  1569,  1571,  1577,  1576,  1583,  1585,
+    1591,  1592,  1600,  1601,  1605,  1606,  1607,  1609,  1611,  1618,
+    1619,  1621,  1623,  1628,  1629,  1635,  1636,  1640,  1641,  1646,
+    1647,  1648,  1650,  1658,  1659,  1661,  1664,  1666,  1670,  1671,
+    1672,  1674,  1676,  1680,  1685,  1693,  1694,  1703,  1705,  1710,
+    1711,  1712,  1716,  1717,  1718,  1722,  1723,  1724,  1728,  1729,
+    1730,  1735,  1736,  1737,  1738,  1744,  1745,  1747,  1752,  1753,
+    1758,  1759,  1760,  1761,  1762,  1777,  1778,  1783,  1784,  1792,
+    1794,  1796,  1799,  1801,  1803,  1826,  1827,  1829,  1831,  1836,
+    1837,  1839,  1844,  1849,  1850,  1856,  1855,  1859,  1863,  1865,
+    1867,  1873,  1874,  1879,  1884,  1886,  1891,  1893,  1894,  1896,
+    1901,  1903,  1905,  1910,  1912,  1917,  1922,  1930,  1936,  1935,
+    1949,  1950,  1955,  1956,  1960,  1965,  1970,  1978,  1983,  1994,
+    1995,  2006,  2007,  2013,  2014,  2018,  2019,  2020,  2023,  2022,
+    2033,  2042,  2048,  2054,  2063,  2069,  2075,  2081,  2087,  2095,
+    2101,  2109,  2115,  2124,  2125,  2126,  2130,  2134,  2136,  2141,
+    2142,  2146,  2147,  2152,  2158,  2159,  2162,  2164,  2165,  2169,
+    2170,  2171,  2172,  2206,  2208,  2209,  2211,  2216,  2221,  2226,
+    2228,  2230,  2235,  2237,  2239,  2241,  2246,  2248,  2257,  2259,
+    2260,  2265,  2267,  2269,  2274,  2276,  2278,  2283,  2285,  2287,
+    2296,  2297,  2298,  2302,  2304,  2306,  2311,  2313,  2315,  2320,
+    2322,  2324,  2339,  2341,  2342,  2344,  2349,  2350,  2355,  2357,
+    2359,  2364,  2366,  2368,  2370,  2375,  2377,  2379,  2389,  2391,
+    2392,  2394,  2399,  2401,  2403,  2408,  2410,  2412,  2414,  2419,
+    2421,  2423,  2454,  2456,  2457,  2459,  2464,  2469,  2477,  2479,
+    2481,  2486,  2488,  2493,  2495,  2509,  2510,  2512,  2517,  2519,
+    2521,  2523,  2525,  2530,  2531,  2533,  2535,  2540,  2542,  2544,
+    2550,  2552,  2554,  2558,  2560,  2562,  2564,  2578,  2579,  2581,
+    2586,  2588,  2590,  2592,  2594,  2599,  2600,  2602,  2604,  2609,
+    2611,  2613,  2619,  2620,  2622,  2631,  2634,  2636,  2639,  2641,
+    2643,  2656,  2657,  2659,  2664,  2666,  2668,  2670,  2672,  2677,
+    2678,  2680,  2682,  2687,  2689,  2697,  2698,  2699,  2704,  2705,
+    2709,  2711,  2713,  2715,  2717,  2719,  2726,  2728,  2730,  2732,
+    2734,  2736,  2738,  2740,  2742,  2744,  2749,  2751,  2753,  2758,
+    2784,  2785,  2787,  2791,  2792,  2796,  2798,  2800,  2802,  2804,
+    2806,  2813,  2815,  2817,  2819,  2821,  2823,  2828,  2833,  2835,
+    2837,  2855,  2857,  2862,  2863
 };
 #endif
@@ -1130,6 +1134,6 @@
   "logical_AND_expression", "logical_OR_expression",
   "conditional_expression", "constant_expression", "assignment_expression",
-  "assignment_expression_opt", "tuple", "tuple_expression_list",
-  "assignment_operator", "comma_expression", "comma_expression_opt",
+  "assignment_expression_opt", "assignment_operator", "tuple",
+  "tuple_expression_list", "comma_expression", "comma_expression_opt",
   "statement", "labeled_statement", "compound_statement",
   "block_item_list", "block_item", "statement_list",
@@ -1240,74 +1244,74 @@
      146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
      148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
-     148,   148,   148,   149,   149,   149,   150,   150,   150,   150,
-     151,   151,   151,   152,   152,   152,   152,   153,   153,   153,
-     154,   154,   154,   155,   155,   155,   155,   155,   156,   156,
-     156,   157,   157,   158,   158,   159,   159,   160,   160,   161,
-     161,   162,   162,   162,   162,   163,   164,   164,   164,   164,
-     165,   165,   166,   166,   166,   166,   167,   167,   168,   168,
-     168,   168,   168,   168,   168,   168,   168,   168,   169,   169,
-     170,   170,   171,   171,   171,   171,   171,   171,   171,   171,
-     171,   172,   173,   173,   174,   174,   175,   175,   175,   175,
-     176,   176,   177,   178,   178,   178,   178,   178,   178,   179,
-     179,   179,   180,   180,   181,   181,   182,   182,   183,   184,
-     184,   185,   185,   186,   186,   187,   187,   187,   187,   188,
-     188,   189,   189,   190,   190,   190,   191,   191,   192,   192,
-     192,   192,   192,   192,   192,   192,   192,   192,   193,   193,
-     193,   194,   194,   194,   194,   194,   195,   195,   195,   195,
-     196,   197,   197,   197,   197,   197,   198,   198,   198,   198,
-     198,   199,   199,   200,   200,   201,   201,   202,   202,   203,
-     203,   203,   204,   204,   205,   205,   206,   206,   207,   207,
-     208,   208,   209,   209,   210,   210,   211,   211,   212,   212,
-     213,   213,   213,   213,   213,   214,   214,   214,   215,   215,
-     215,   216,   216,   216,   216,   216,   217,   217,   217,   218,
-     218,   219,   219,   219,   220,   220,   220,   220,   220,   221,
-     221,   222,   222,   222,   222,   223,   223,   224,   224,   224,
-     224,   225,   225,   225,   225,   226,   226,   227,   227,   228,
-     228,   229,   229,   229,   229,   229,   230,   229,   231,   231,
-     231,   232,   232,   233,   234,   234,   234,   234,   234,   234,
-     234,   234,   235,   235,   235,   235,   235,   235,   235,   235,
-     235,   235,   235,   235,   235,   236,   236,   236,   236,   236,
-     237,   237,   238,   238,   238,   238,   239,   239,   239,   239,
-     240,   240,   240,   240,   241,   241,   241,   242,   242,   242,
-     242,   243,   243,   243,   244,   244,   245,   245,   246,   245,
-     245,   245,   247,   247,   248,   248,   249,   249,   249,   249,
-     250,   250,   250,   250,   251,   251,   252,   252,   252,   252,
-     252,   253,   253,   254,   255,   256,   256,   257,   256,   258,
-     258,   259,   259,   260,   260,   261,   261,   261,   261,   261,
-     262,   262,   262,   262,   263,   263,   264,   264,   265,   265,
-     266,   266,   266,   266,   267,   267,   267,   267,   267,   268,
-     268,   268,   268,   268,   269,   269,   270,   270,   271,   271,
-     272,   272,   272,   273,   273,   273,   274,   274,   274,   275,
-     275,   275,   276,   276,   276,   276,   277,   277,   277,   278,
-     278,   279,   279,   279,   279,   279,   280,   280,   281,   281,
-     282,   282,   282,   282,   282,   282,   283,   283,   283,   283,
-     284,   284,   284,   285,   286,   286,   288,   287,   287,   289,
-     289,   289,   290,   290,   291,   291,   291,   292,   292,   292,
-     292,   293,   293,   293,   294,   294,   295,   295,   296,   297,
-     296,   298,   298,   299,   299,   300,   300,   300,   301,   301,
-     302,   302,   303,   303,   304,   304,   305,   305,   305,   306,
-     305,   305,   307,   307,   307,   308,   308,   308,   308,   308,
-     308,   308,   308,   308,   309,   309,   309,   310,   311,   311,
-     312,   312,   313,   313,   314,   315,   315,   316,   316,   316,
-     317,   317,   317,   317,   318,   318,   318,   318,   319,   319,
-     320,   320,   320,   321,   321,   321,   321,   322,   322,   323,
-     323,   323,   324,   324,   324,   325,   325,   325,   326,   326,
-     326,   327,   327,   327,   328,   328,   328,   329,   329,   329,
-     330,   330,   330,   331,   331,   331,   331,   332,   332,   333,
-     333,   333,   334,   334,   334,   334,   335,   335,   335,   336,
-     336,   336,   336,   337,   337,   337,   338,   338,   338,   338,
-     339,   339,   339,   340,   340,   340,   340,   341,   341,   342,
-     342,   342,   343,   343,   344,   344,   345,   345,   345,   346,
-     346,   346,   346,   346,   347,   347,   347,   347,   348,   348,
-     348,   349,   349,   349,   350,   350,   350,   350,   351,   351,
-     351,   352,   352,   352,   352,   352,   353,   353,   353,   353,
-     354,   354,   354,   355,   355,   355,   356,   356,   356,   356,
-     356,   356,   357,   357,   357,   358,   358,   358,   358,   358,
-     359,   359,   359,   359,   360,   360,   361,   361,   361,   362,
-     362,   363,   363,   363,   363,   363,   363,   364,   364,   364,
-     364,   364,   364,   364,   364,   364,   364,   365,   365,   365,
-     365,   366,   366,   366,   367,   367,   368,   368,   368,   368,
-     368,   368,   369,   369,   369,   369,   369,   369,   370,   371,
-     371,   371,   372,   372,   373,   373
+     148,   148,   148,   149,   149,   150,   150,   150,   150,   151,
+     151,   151,   152,   152,   152,   152,   153,   153,   153,   154,
+     154,   154,   155,   155,   155,   155,   155,   156,   156,   156,
+     157,   157,   158,   158,   159,   159,   160,   160,   161,   161,
+     162,   162,   162,   162,   163,   164,   164,   164,   165,   165,
+     166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
+     166,   167,   167,   167,   167,   168,   168,   169,   169,   170,
+     170,   171,   171,   171,   171,   171,   171,   171,   171,   171,
+     172,   173,   173,   174,   174,   175,   175,   175,   175,   176,
+     176,   177,   178,   178,   178,   178,   178,   178,   179,   179,
+     179,   180,   180,   181,   181,   182,   182,   183,   184,   184,
+     185,   185,   186,   186,   187,   187,   187,   187,   188,   188,
+     189,   189,   190,   190,   190,   191,   191,   192,   192,   192,
+     192,   192,   192,   192,   192,   192,   192,   193,   193,   193,
+     194,   194,   194,   194,   194,   195,   195,   195,   195,   196,
+     197,   197,   197,   197,   197,   198,   198,   198,   198,   198,
+     199,   199,   200,   200,   201,   201,   202,   202,   203,   203,
+     203,   204,   204,   205,   205,   206,   206,   207,   207,   208,
+     208,   209,   209,   210,   210,   211,   211,   212,   212,   213,
+     213,   213,   213,   213,   214,   214,   214,   215,   215,   215,
+     216,   216,   216,   216,   216,   217,   217,   217,   218,   218,
+     219,   219,   219,   220,   220,   220,   220,   220,   221,   221,
+     222,   222,   222,   222,   223,   223,   224,   224,   224,   224,
+     225,   225,   225,   225,   226,   226,   227,   227,   228,   228,
+     229,   229,   229,   229,   229,   230,   229,   231,   231,   231,
+     232,   232,   233,   234,   234,   234,   234,   234,   234,   234,
+     234,   235,   235,   235,   235,   235,   235,   235,   235,   235,
+     235,   235,   235,   235,   236,   236,   236,   236,   236,   237,
+     237,   238,   238,   238,   238,   239,   239,   239,   239,   240,
+     240,   240,   240,   241,   241,   241,   242,   242,   242,   242,
+     243,   243,   243,   244,   244,   245,   245,   246,   245,   245,
+     245,   247,   247,   248,   248,   249,   249,   249,   249,   250,
+     250,   250,   250,   251,   251,   252,   252,   252,   252,   252,
+     253,   253,   254,   255,   256,   256,   257,   256,   258,   258,
+     259,   259,   260,   260,   261,   261,   261,   261,   261,   262,
+     262,   262,   262,   263,   263,   264,   264,   265,   265,   266,
+     266,   266,   266,   267,   267,   267,   267,   267,   268,   268,
+     268,   268,   268,   269,   269,   270,   270,   271,   271,   272,
+     272,   272,   273,   273,   273,   274,   274,   274,   275,   275,
+     275,   276,   276,   276,   276,   277,   277,   277,   278,   278,
+     279,   279,   279,   279,   279,   280,   280,   281,   281,   282,
+     282,   282,   282,   282,   282,   283,   283,   283,   283,   284,
+     284,   284,   285,   286,   286,   288,   287,   287,   289,   289,
+     289,   290,   290,   291,   291,   291,   292,   292,   292,   292,
+     293,   293,   293,   294,   294,   295,   295,   296,   297,   296,
+     298,   298,   299,   299,   300,   300,   300,   301,   301,   302,
+     302,   303,   303,   304,   304,   305,   305,   305,   306,   305,
+     305,   307,   307,   307,   308,   308,   308,   308,   308,   308,
+     308,   308,   308,   309,   309,   309,   310,   311,   311,   312,
+     312,   313,   313,   314,   315,   315,   316,   316,   316,   317,
+     317,   317,   317,   318,   318,   318,   318,   319,   319,   320,
+     320,   320,   321,   321,   321,   321,   322,   322,   323,   323,
+     323,   324,   324,   324,   325,   325,   325,   326,   326,   326,
+     327,   327,   327,   328,   328,   328,   329,   329,   329,   330,
+     330,   330,   331,   331,   331,   331,   332,   332,   333,   333,
+     333,   334,   334,   334,   334,   335,   335,   335,   336,   336,
+     336,   336,   337,   337,   337,   338,   338,   338,   338,   339,
+     339,   339,   340,   340,   340,   340,   341,   341,   342,   342,
+     342,   343,   343,   344,   344,   345,   345,   345,   346,   346,
+     346,   346,   346,   347,   347,   347,   347,   348,   348,   348,
+     349,   349,   349,   350,   350,   350,   350,   351,   351,   351,
+     352,   352,   352,   352,   352,   353,   353,   353,   353,   354,
+     354,   354,   355,   355,   355,   356,   356,   356,   356,   356,
+     356,   357,   357,   357,   358,   358,   358,   358,   358,   359,
+     359,   359,   359,   360,   360,   361,   361,   361,   362,   362,
+     363,   363,   363,   363,   363,   363,   364,   364,   364,   364,
+     364,   364,   364,   364,   364,   364,   365,   365,   365,   365,
+     366,   366,   366,   367,   367,   368,   368,   368,   368,   368,
+     368,   369,   369,   369,   369,   369,   369,   370,   371,   371,
+     371,   372,   372,   373,   373
 };
 
@@ -1322,73 +1326,73 @@
        2,     2,     2,     2,     2,     2,     4,     6,     1,     4,
        4,     2,     4,     1,     1,     1,     1,     1,     1,     1,
-       1,     4,     4,     1,     3,     3,     3,     1,     3,     3,
-       1,     3,     3,     1,     3,     3,     3,     3,     1,     3,
-       3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
-       3,     1,     5,     4,     5,     1,     1,     3,     3,     2,
-       0,     1,     2,     5,     6,     7,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-       0,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       6,     4,     2,     7,     1,     3,     1,     2,     1,     2,
-       1,     2,     2,     5,     7,     5,     9,     5,     9,     1,
-       3,     1,     1,     3,     3,     2,     1,     2,     2,     0,
-       1,     2,     3,     0,     1,     2,     3,     3,     4,     0,
-       1,     1,     2,     5,     7,     6,     6,     4,     3,     4,
-       2,     3,     2,     3,     3,     3,     3,     5,     3,     3,
-       4,     1,     5,     6,     5,     6,     9,    10,     9,    10,
-       2,     1,     2,     2,     2,     1,     6,     8,    10,    12,
-      14,     0,     1,     0,     1,     1,     3,     4,     7,     0,
-       1,     3,     1,     3,     1,     1,     1,     3,     1,     1,
-       1,     3,     0,     1,     3,     4,     1,     3,     1,     1,
-       3,     3,     3,     3,     3,     2,     3,     6,     3,     3,
-       4,     1,     2,     2,     3,     5,     8,     7,     7,     5,
-       9,     2,     2,     5,     3,     5,     4,     3,     4,     4,
-       7,     3,     3,     3,     3,     4,     6,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     1,     1,     2,     1,
-       1,     1,     1,     1,     1,     1,     0,     5,     1,     2,
-       3,     1,     2,     1,     1,     1,     1,     1,     1,     1,
+       4,     4,     1,     3,     3,     3,     1,     3,     3,     1,
+       3,     3,     1,     3,     3,     3,     3,     1,     3,     3,
+       1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
+       1,     5,     4,     5,     1,     1,     3,     2,     0,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     2,     2,     3,     3,
-       1,     3,     1,     2,     2,     2,     4,     4,     4,     4,
-       1,     2,     2,     3,     1,     2,     2,     1,     2,     2,
-       3,     1,     2,     2,     1,     1,     4,     2,     0,     6,
-       7,     2,     2,     2,     0,     2,     2,     3,     2,     3,
-       1,     2,     3,     2,     2,     4,     0,     1,     2,     2,
-       1,     0,     1,     2,     2,     5,     2,     0,     7,     2,
-       4,     0,     2,     0,     1,     1,     1,     5,     5,     5,
-       1,     5,     5,     9,     1,     5,     0,     1,     1,     5,
-       1,     1,     5,     5,     1,     3,     3,     4,     1,     1,
-       1,     1,     2,     1,     3,     3,     1,     2,     1,     3,
+       1,     2,     5,     6,     7,     1,     3,     1,     3,     0,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     6,
+       4,     2,     7,     1,     3,     1,     2,     1,     2,     1,
+       2,     2,     5,     7,     5,     9,     5,     9,     1,     3,
+       1,     1,     3,     3,     2,     1,     2,     2,     0,     1,
+       2,     3,     0,     1,     2,     3,     3,     4,     0,     1,
+       1,     2,     5,     7,     6,     6,     4,     3,     4,     2,
+       3,     2,     3,     3,     3,     3,     5,     3,     3,     4,
+       1,     5,     6,     5,     6,     9,    10,     9,    10,     2,
+       1,     2,     2,     2,     1,     6,     8,    10,    12,    14,
+       0,     1,     0,     1,     1,     3,     4,     7,     0,     1,
+       3,     1,     3,     1,     1,     1,     3,     1,     1,     1,
+       3,     0,     1,     3,     4,     1,     3,     1,     1,     3,
+       3,     3,     3,     3,     2,     3,     6,     3,     3,     4,
+       1,     2,     2,     3,     5,     8,     7,     7,     5,     9,
+       2,     2,     5,     3,     5,     4,     3,     4,     4,     7,
+       3,     3,     3,     3,     4,     6,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     1,     1,     2,     1,     1,
+       1,     1,     1,     1,     1,     0,     5,     1,     2,     3,
+       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     2,     1,     1,     1,     2,     0,     2,     2,     1,
-       4,     0,     1,     2,     3,     4,     2,     2,     1,     2,
-       1,     2,     5,     5,     7,     6,     1,     2,     2,     3,
-       1,     2,     2,     4,     2,     4,     0,     4,     2,     1,
-       1,     1,     0,     2,     5,     5,    13,     1,     1,     3,
-       3,     2,     3,     3,     2,     4,     1,     6,     9,     0,
-      11,     1,     3,     3,     3,     1,     1,     5,     2,     5,
-       0,     1,     1,     3,     0,     1,     1,     1,     1,     0,
-       6,     2,     1,     2,     4,     2,     3,     3,     3,     4,
-       5,     5,     5,     6,     1,     1,     1,     3,     0,     5,
-       0,     1,     1,     2,     6,     1,     3,     0,     1,     4,
-       1,     1,     1,     1,     2,     1,     2,     2,     1,     3,
-       2,     3,     3,     2,     4,     4,     3,     8,     3,     2,
-       1,     2,     6,     8,     3,     2,     3,     3,     4,     4,
-       3,     1,     1,     1,     4,     6,     3,     2,     3,     3,
-       4,     4,     3,     2,     1,     2,     2,     1,     3,     2,
-       3,     3,     2,     4,     4,     3,     6,     8,     3,     2,
-       1,     2,     2,     2,     3,     3,     2,     4,     4,     3,
-       6,     8,     3,     2,     1,     2,     2,     1,     1,     2,
-       3,     3,     2,     4,     6,     8,     1,     2,     2,     1,
-       2,     2,     3,     3,     1,     4,     4,     3,     5,     8,
-       3,     2,     3,     1,     5,     5,     6,     6,     1,     2,
-       2,     1,     2,     2,     3,     3,     1,     4,     4,     3,
-       5,     8,     3,     1,     2,     1,     2,     6,     5,     6,
-       7,     7,     1,     2,     2,     1,     2,     2,     3,     3,
-       1,     4,     4,     3,     8,     3,     1,     1,     2,     1,
-       1,     2,     3,     2,     3,     2,     3,     3,     2,     4,
-       3,     2,     3,     2,     4,     3,     2,     6,     6,     6,
-       7,     1,     2,     1,     1,     1,     2,     3,     2,     3,
-       2,     3,     3,     4,     2,     3,     4,     2,     5,     5,
-       6,     6,     0,     1,     0,     2
+       1,     1,     1,     1,     1,     2,     2,     3,     3,     1,
+       3,     1,     2,     2,     2,     4,     4,     4,     4,     1,
+       2,     2,     3,     1,     2,     2,     1,     2,     2,     3,
+       1,     2,     2,     1,     1,     4,     2,     0,     6,     7,
+       2,     2,     2,     0,     2,     2,     3,     2,     3,     1,
+       2,     3,     2,     2,     4,     0,     1,     2,     2,     1,
+       0,     1,     2,     2,     5,     2,     0,     7,     2,     4,
+       0,     2,     0,     1,     1,     1,     5,     5,     5,     1,
+       5,     5,     9,     1,     5,     0,     1,     1,     5,     1,
+       1,     5,     5,     1,     3,     3,     4,     1,     1,     1,
+       1,     2,     1,     3,     3,     1,     2,     1,     3,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       2,     1,     1,     1,     2,     0,     2,     2,     1,     4,
+       0,     1,     2,     3,     4,     2,     2,     1,     2,     1,
+       2,     5,     5,     7,     6,     1,     2,     2,     3,     1,
+       2,     2,     4,     2,     4,     0,     4,     2,     1,     1,
+       1,     0,     2,     5,     5,    13,     1,     1,     3,     3,
+       2,     3,     3,     2,     4,     1,     6,     9,     0,    11,
+       1,     3,     3,     3,     1,     1,     5,     2,     5,     0,
+       1,     1,     3,     0,     1,     1,     1,     1,     0,     6,
+       2,     1,     2,     4,     2,     3,     3,     3,     4,     5,
+       5,     5,     6,     1,     1,     1,     3,     0,     5,     0,
+       1,     1,     2,     6,     1,     3,     0,     1,     4,     1,
+       1,     1,     1,     2,     1,     2,     2,     1,     3,     2,
+       3,     3,     2,     4,     4,     3,     8,     3,     2,     1,
+       2,     6,     8,     3,     2,     3,     3,     4,     4,     3,
+       1,     1,     1,     4,     6,     3,     2,     3,     3,     4,
+       4,     3,     2,     1,     2,     2,     1,     3,     2,     3,
+       3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
+       2,     2,     2,     3,     3,     2,     4,     4,     3,     6,
+       8,     3,     2,     1,     2,     2,     1,     1,     2,     3,
+       3,     2,     4,     6,     8,     1,     2,     2,     1,     2,
+       2,     3,     3,     1,     4,     4,     3,     5,     8,     3,
+       2,     3,     1,     5,     5,     6,     6,     1,     2,     2,
+       1,     2,     2,     3,     3,     1,     4,     4,     3,     5,
+       8,     3,     1,     2,     1,     2,     6,     5,     6,     7,
+       7,     1,     2,     2,     1,     2,     2,     3,     3,     1,
+       4,     4,     3,     8,     3,     1,     1,     2,     1,     1,
+       2,     3,     2,     3,     2,     3,     3,     2,     4,     3,
+       2,     3,     2,     4,     3,     2,     6,     6,     6,     7,
+       1,     2,     1,     1,     1,     2,     3,     2,     3,     2,
+       3,     3,     4,     2,     3,     4,     2,     5,     5,     6,
+       6,     0,     1,     0,     2
 };
 
@@ -1398,162 +1402,162 @@
 static const yytype_uint16 yydefact[] =
 {
-     295,   295,   316,   314,   317,   315,   318,   319,   301,   303,
-     302,     0,   304,   330,   322,   327,   325,   326,   324,   323,
-     328,   329,   334,   331,   332,   333,   550,   550,   550,     0,
-       0,     0,   295,   221,   305,   320,   321,     7,   361,     0,
-       8,    14,    15,    65,     0,     2,    63,    64,   568,     9,
-     295,   528,   526,   248,     3,   456,     3,   261,     0,     3,
-       3,     3,   249,     3,     0,     0,     0,   296,   297,   299,
-     295,   308,   311,   313,   342,   287,   335,   340,   288,   350,
-     289,   357,   354,   364,     0,     0,   365,   290,   476,   480,
-       3,     3,     0,     2,   522,   527,   532,   300,     0,     0,
-     550,   580,   550,     2,   591,   592,   593,   295,     0,   734,
-     735,     0,    12,     0,    13,   295,   271,   272,     0,   296,
-     291,   292,   293,   294,   529,   306,   394,   551,   552,   372,
-     373,    12,   447,   448,    11,   443,   446,     0,   506,   501,
-     492,   447,   448,     0,     0,   531,   222,     0,   295,     0,
-       0,     0,     0,     0,     0,     0,     0,   295,   295,     2,
-       0,   736,   296,   585,   597,   740,   733,   731,   738,     0,
-       0,     0,   255,     2,     0,   535,   441,   442,   440,     0,
-       0,     0,     0,   550,     0,   637,   638,     0,     0,   548,
-     544,   550,   565,   550,   550,   546,     2,   545,   550,   604,
-     550,   550,   607,     0,     0,     0,   295,   295,   314,   362,
-       2,   295,   262,   298,   309,   343,   355,   481,     0,     2,
-       0,   456,   263,   296,   336,   351,   358,   477,     0,     2,
-       0,   312,   337,   344,   345,     0,   352,   356,   359,   363,
-     448,   295,   374,   367,   371,     0,   396,   478,   482,     0,
-       0,     0,     1,   295,     2,   533,   579,   581,   295,     2,
-     744,   296,   747,   548,   548,     0,   296,     0,     0,   274,
-     550,   546,     2,   295,     0,     0,   295,   553,     2,   504,
-       2,   557,     0,     0,     0,     0,     0,     0,    18,    58,
-       4,     5,     6,    16,     0,     0,   295,     2,    66,    67,
-      68,    69,    48,    19,    49,    22,    47,    70,   295,     0,
-      73,    77,    80,    83,    88,    91,    93,    95,    97,    99,
-     101,   106,   498,   754,   454,   497,     0,   452,   453,     0,
-     569,   584,   587,   590,   596,   599,   602,   361,     0,     2,
-     742,     0,   295,   745,     2,    63,   295,     3,   428,     0,
-     436,   296,   295,   308,   335,   288,   350,   357,     3,     3,
-     410,   414,   424,   429,   476,   295,   430,   709,   710,   295,
-     431,   433,   295,     2,   586,   598,   732,     2,     2,   250,
-       2,   461,     0,   459,   458,   457,   142,     2,     2,   252,
-       2,     2,   251,     2,   282,     2,   283,     0,   281,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   570,   609,
-       0,   456,     2,   564,   573,   663,   566,   567,   536,   295,
-       2,   603,   612,   605,   606,     0,   277,   295,   295,   341,
-     296,     0,   296,     0,   295,   737,   741,   739,   537,   295,
-     548,   256,   264,   310,     0,     2,   538,   295,   502,   338,
-     339,   284,   353,   360,     0,   295,     0,   752,   401,     0,
-     479,   503,   253,   254,   523,   295,   438,     0,   295,   238,
-       0,     2,   240,     0,   296,     0,   258,     2,   259,   279,
-       0,     0,     2,   295,   548,   295,   489,   491,   490,     0,
-       0,   754,     0,   295,     0,   295,   493,   295,   563,   561,
-     562,   560,     0,   555,   558,     0,     0,   295,    55,   295,
-      70,    50,   295,    61,   295,   295,    53,    54,     2,   128,
-       0,     0,   450,     0,   449,   731,   112,   295,    17,     0,
-      29,    30,    35,     2,     0,    35,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,     0,     0,    51,    52,
+     294,   294,   315,   313,   316,   314,   317,   318,   300,   302,
+     301,     0,   303,   329,   321,   326,   324,   325,   323,   322,
+     327,   328,   333,   330,   331,   332,   549,   549,   549,     0,
+       0,     0,   294,   220,   304,   319,   320,     7,   360,     0,
+       8,    14,    15,     0,     2,    63,    64,   567,     9,   294,
+     527,   525,   247,     3,   455,     3,   260,     0,     3,     3,
+       3,   248,     3,     0,     0,     0,   295,   296,   298,   294,
+     307,   310,   312,   341,   286,   334,   339,   287,   349,   288,
+     356,   353,   363,     0,     0,   364,   289,   475,   479,     3,
+       3,     0,     2,   521,   526,   531,   299,     0,     0,   549,
+     579,   549,     2,   590,   591,   592,   294,     0,   733,   734,
+       0,    12,     0,    13,   294,   270,   271,     0,   295,   290,
+     291,   292,   293,   528,   305,   393,   550,   551,   371,   372,
+      12,   446,   447,    11,   442,   445,     0,   505,   500,   491,
+     446,   447,     0,     0,   530,   221,     0,   294,     0,     0,
+       0,     0,     0,     0,     0,     0,   294,   294,     2,     0,
+     735,   295,   584,   596,   739,   732,   730,   737,     0,     0,
+       0,   254,     2,     0,   534,   440,   441,   439,     0,     0,
+       0,     0,   549,     0,   636,   637,     0,     0,   547,   543,
+     549,   564,   549,   549,   545,     2,   544,   549,   603,   549,
+     549,   606,     0,     0,     0,   294,   294,   313,   361,     2,
+     294,   261,   297,   308,   342,   354,   480,     0,     2,     0,
+     455,   262,   295,   335,   350,   357,   476,     0,     2,     0,
+     311,   336,   343,   344,     0,   351,   355,   358,   362,   447,
+     294,   373,   366,   370,     0,   395,   477,   481,     0,     0,
+       0,     1,   294,     2,   532,   578,   580,   294,     2,   743,
+     295,   746,   547,   547,     0,   295,     0,     0,   273,   549,
+     545,     2,   294,     0,     0,   294,   552,     2,   503,     2,
+     556,     0,     0,     0,     0,     0,     0,    18,    58,     4,
+       5,     6,    16,     0,     0,   294,     2,    65,    66,    67,
+      68,    48,    19,    49,    22,    47,    69,   294,     0,    72,
+      76,    79,    82,    87,    90,    92,    94,    96,    98,   100,
+     105,   497,   753,   453,   496,     0,   451,   452,     0,   568,
+     583,   586,   589,   595,   598,   601,   360,     0,     2,   741,
+       0,   294,   744,     2,    63,   294,     3,   427,     0,   435,
+     295,   294,   307,   334,   287,   349,   356,     3,     3,   409,
+     413,   423,   428,   475,   294,   429,   708,   709,   294,   430,
+     432,   294,     2,   585,   597,   731,     2,     2,   249,     2,
+     460,     0,   458,   457,   456,   141,     2,     2,   251,     2,
+       2,   250,     2,   281,     2,   282,     0,   280,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   569,   608,     0,
+     455,     2,   563,   572,   662,   565,   566,   535,   294,     2,
+     602,   611,   604,   605,     0,   276,   294,   294,   340,   295,
+       0,   295,     0,   294,   736,   740,   738,   536,   294,   547,
+     255,   263,   309,     0,     2,   537,   294,   501,   337,   338,
+     283,   352,   359,     0,   294,     0,   751,   400,     0,   478,
+     502,   252,   253,   522,   294,   437,     0,   294,   237,     0,
+       2,   239,     0,   295,     0,   257,     2,   258,   278,     0,
+       0,     2,   294,   547,   294,   488,   490,   489,     0,     0,
+     753,     0,   294,     0,   294,   492,   294,   562,   560,   561,
+     559,     0,   554,   557,     0,     0,   294,    55,   294,    69,
+      50,   294,    61,   294,   294,    53,    54,     2,   127,     0,
+       0,   449,     0,   448,   730,   121,   294,    17,     0,    29,
+      30,    35,     2,     0,    35,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   110,     0,    51,    52,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     109,     2,   649,   455,   646,   550,   550,   654,   483,   295,
-       2,   588,   589,     0,   600,   601,     0,     2,   743,   746,
-     112,   295,     0,     2,   711,   296,   715,   706,   707,   713,
-       0,     2,     2,   671,   550,   754,   620,   550,   550,   754,
-     550,   634,   550,   550,   685,   437,   668,   550,   550,   676,
-     683,   295,   432,   296,     0,     0,   295,   721,   296,   726,
-     754,   718,   295,   723,   754,   295,   295,   295,     0,   112,
-       0,    18,     5,     2,     0,    19,     0,   462,   752,     0,
-       0,   468,   242,     0,   295,     0,     0,     0,   548,   572,
-     576,   578,   608,   611,   615,   618,   571,   610,     0,   285,
-     661,     0,   295,   278,     0,     0,     0,     0,   276,     2,
-       0,   260,   539,   295,     0,     0,   295,     2,   366,   386,
-     375,     0,     0,   380,   374,   753,     0,     0,   399,     0,
-     296,     3,   417,     3,   421,   420,   594,     0,   534,   295,
-      63,     3,   295,   436,   296,     3,   430,   431,     2,     0,
-       0,     0,   488,   307,   295,   484,   486,     3,     2,     2,
-       0,   505,     3,     0,   557,   130,     0,     0,   223,     0,
-       0,     0,     2,     0,     0,    36,     0,     0,   112,   295,
-      20,     0,    21,     0,   695,   700,   451,   692,   550,   550,
-       0,   110,     3,     2,    27,     2,     0,    33,     0,     2,
-      25,     0,   107,   108,    74,    75,    76,    78,    79,    81,
-      82,    86,    87,    84,    85,    89,    90,    92,    94,    96,
-      98,   100,     0,     0,   755,   295,     0,     0,     0,   650,
-     651,   647,   648,   500,   499,   295,     0,   295,   717,   295,
-     722,   296,   295,   665,   295,   295,   708,   664,     2,   295,
-       0,     0,     0,     0,     0,     0,     0,     0,   686,     0,
-     672,   623,   639,   673,     2,   619,   626,   434,   621,   622,
-     435,     2,   633,   642,   635,   636,   669,   670,   684,   712,
-     716,   714,   754,   269,     2,   748,     2,   425,   720,   725,
-     426,     0,   404,     3,     3,     3,     3,   456,     3,     0,
-       2,   471,   467,   753,     0,   463,   470,     2,   466,   469,
-       0,   295,   243,   265,     3,   273,   275,     0,   456,     2,
-     574,   575,     2,   613,   614,     0,   662,   540,     3,   347,
-     346,   349,   348,   295,   541,     0,   542,   374,     0,     0,
-     295,   295,     0,     0,   695,   384,   387,   391,   550,   391,
-     390,   383,   376,   550,   378,   381,   295,   401,   395,   105,
-     402,   752,     0,     0,   439,   241,     0,     0,     3,     2,
-     671,   432,     0,   530,     0,   754,   492,     0,   295,   295,
-     295,     0,   554,   556,   131,     0,     0,   216,     0,     0,
-       0,   224,   225,    56,     0,    62,   295,     0,    60,    59,
-       0,     2,   129,     0,     0,     0,   696,   697,   693,   694,
-     461,    71,    72,   111,   116,     3,   110,     0,     0,     0,
-      24,    35,     3,     0,    32,   103,     0,     3,   653,   657,
-     660,   652,     3,   595,     3,   719,   724,     2,    63,   295,
-       3,     3,   296,     0,     3,   625,   629,   632,   641,   675,
-     679,   682,   295,     3,   624,   640,   674,   295,   295,   427,
-     295,   295,   749,     0,     0,     0,     0,   257,     0,   105,
-       0,     3,     3,     0,   464,     0,   460,     0,     0,   246,
-     295,     0,     0,   130,     0,     0,     0,     0,     0,   130,
-       0,     0,   110,   110,    18,     2,     0,     0,     3,   132,
-     133,     2,   144,   134,   135,   136,   137,   138,   139,   146,
-     148,     0,     0,     0,   286,   295,   295,   550,     0,   543,
-     295,   377,   379,     0,   393,   696,   388,   392,   389,   382,
-     386,   369,   400,     0,   582,     2,   667,   666,     0,   672,
-       2,   485,   487,   507,     3,   515,   516,     0,     2,   511,
-       3,     3,     0,     0,   559,   223,     0,     0,     0,   223,
-       0,     0,     3,    37,   112,   699,   703,   705,   698,   752,
-     110,     0,     3,   664,    42,     3,    40,     3,    34,     0,
-       3,   102,   104,     0,     2,   655,   656,     0,     0,   295,
-       0,     0,     0,     3,   641,     0,     2,   627,   628,     2,
-     643,     2,   677,   678,     0,     0,    63,     0,     3,     3,
-       3,     3,   412,   411,   415,     2,     2,   751,   750,   113,
-       0,     0,     0,     0,     3,   465,     3,     0,   244,   147,
-       3,   296,   295,     0,     0,     0,     0,     2,     0,   192,
-       0,   190,     0,     0,     0,     0,     0,     0,     0,   550,
-     112,     0,   152,   149,   295,     0,     0,   268,   280,     3,
-       3,   549,   616,   370,   385,   398,   295,   267,   295,     0,
-     518,   495,   295,     0,     0,   494,   509,     0,     0,     0,
-     217,     0,   226,    57,   110,     0,     2,   701,   702,     0,
-     117,   114,     0,     0,     0,     0,     0,     0,    23,     0,
-     658,   295,   583,   266,   727,   728,   729,     0,   680,   295,
-     295,   295,     3,     3,     0,   688,     0,     0,     0,     0,
-     295,   295,     3,   547,   472,   473,     0,     0,   247,   296,
-       0,     0,     0,     0,   295,   193,   191,   188,     0,   194,
-       0,     0,     0,     0,   198,   201,   199,   195,     0,   196,
-     130,    35,   145,   143,   245,     0,     0,   419,   423,   422,
-       0,   512,     2,   513,     2,   514,   508,   295,   229,     0,
-     227,     0,   229,     3,   664,   295,    31,   115,     2,    45,
-       2,    43,    41,    28,   113,    26,     3,   730,     3,     3,
-       3,     0,     0,   687,   689,   630,   644,   270,     2,   409,
-       3,   408,     0,   475,   472,   130,     0,     0,   130,     3,
-       0,   130,   189,     0,     2,     2,   210,   200,     0,     0,
-       0,   141,     0,   577,   617,     2,     0,     0,     2,   230,
-       0,     0,   218,     0,     0,     0,     3,     0,     0,     0,
-       0,     0,     0,   690,   691,   295,     0,   474,   153,     0,
-       0,     2,   166,   130,   155,     0,   183,     0,   130,     0,
-       2,   157,     0,     2,     0,     2,     2,     2,   197,    32,
-     295,   517,   519,   510,     0,     0,     0,     0,   115,    38,
-       0,     3,     3,   659,   631,   645,   681,   413,   130,   159,
-     162,     0,   161,   165,     3,   168,   167,     0,   130,   185,
-     130,     3,     0,   295,     0,   295,     0,     2,     0,     2,
-     140,     2,   231,   232,     0,   228,   219,     0,   704,     0,
-       0,   154,     0,     0,   164,   234,   169,     2,   236,   184,
-       0,   187,   173,   202,     3,   211,   215,   204,     3,     0,
-     295,     0,   295,     0,     0,     0,    39,    46,    44,   160,
-     163,   130,     0,   170,   295,   130,   130,     0,   174,     0,
-       0,   695,   212,   213,   214,     0,   203,     3,   205,     3,
-     295,   220,   233,   150,   171,   156,   130,   237,   186,   181,
-     179,   175,   158,   130,     0,   696,     0,     0,     0,     0,
-     151,   172,   182,   176,   180,   179,   177,     3,     3,     0,
-       0,   496,   178,   206,   208,     3,     3,   207,   209
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   107,
+       2,   648,   454,   645,   549,   549,   653,   482,   294,     2,
+     587,   588,     0,   599,   600,     0,     2,   742,   745,   121,
+     294,     0,     2,   710,   295,   714,   705,   706,   712,     0,
+       2,     2,   670,   549,   753,   619,   549,   549,   753,   549,
+     633,   549,   549,   684,   436,   667,   549,   549,   675,   682,
+     294,   431,   295,     0,     0,   294,   720,   295,   725,   753,
+     717,   294,   722,   753,   294,   294,   294,     0,   121,     0,
+      18,     5,     2,     0,    19,     0,   461,   751,     0,     0,
+     467,   241,     0,   294,     0,     0,     0,   547,   571,   575,
+     577,   607,   610,   614,   617,   570,   609,     0,   284,   660,
+       0,   294,   277,     0,     0,     0,     0,   275,     2,     0,
+     259,   538,   294,     0,     0,   294,     2,   365,   385,   374,
+       0,     0,   379,   373,   752,     0,     0,   398,     0,   295,
+       3,   416,     3,   420,   419,   593,     0,   533,   294,    63,
+       3,   294,   435,   295,     3,   429,   430,     2,     0,     0,
+       0,   487,   306,   294,   483,   485,     3,     2,     2,     0,
+     504,     3,     0,   556,   129,     0,     0,   222,     0,     0,
+       0,     2,     0,     0,    36,     0,     0,   121,   294,    20,
+       0,    21,     0,   694,   699,   450,   691,   549,   549,     0,
+     108,     3,     2,    27,     2,     0,    33,     0,     2,    25,
+       0,   106,    73,    74,    75,    77,    78,    80,    81,    85,
+      86,    83,    84,    88,    89,    91,    93,    95,    97,    99,
+       0,     0,   754,   294,     0,     0,     0,   649,   650,   646,
+     647,   499,   498,   294,     0,   294,   716,   294,   721,   295,
+     294,   664,   294,   294,   707,   663,     2,   294,     0,     0,
+       0,     0,     0,     0,     0,     0,   685,     0,   671,   622,
+     638,   672,     2,   618,   625,   433,   620,   621,   434,     2,
+     632,   641,   634,   635,   668,   669,   683,   711,   715,   713,
+     753,   268,     2,   747,     2,   424,   719,   724,   425,     0,
+     403,     3,     3,     3,     3,   455,     3,     0,     2,   470,
+     466,   752,     0,   462,   469,     2,   465,   468,     0,   294,
+     242,   264,     3,   272,   274,     0,   455,     2,   573,   574,
+       2,   612,   613,     0,   661,   539,     3,   346,   345,   348,
+     347,   294,   540,     0,   541,   373,     0,     0,   294,   294,
+       0,     0,   694,   383,   386,   390,   549,   390,   389,   382,
+     375,   549,   377,   380,   294,   400,   394,   104,   401,   751,
+       0,     0,   438,   240,     0,     0,     3,     2,   670,   431,
+       0,   529,     0,   753,   491,     0,   294,   294,   294,     0,
+     553,   555,   130,     0,     0,   215,     0,     0,     0,   223,
+     224,    56,     0,    62,   294,     0,    60,    59,     0,     2,
+     128,     0,     0,     0,   695,   696,   692,   693,   460,    70,
+      71,   109,   125,     3,   108,     0,     0,     0,    24,    35,
+       3,     0,    32,   102,     0,     3,   652,   656,   659,   651,
+       3,   594,     3,   718,   723,     2,    63,   294,     3,     3,
+     295,     0,     3,   624,   628,   631,   640,   674,   678,   681,
+     294,     3,   623,   639,   673,   294,   294,   426,   294,   294,
+     748,     0,     0,     0,     0,   256,     0,   104,     0,     3,
+       3,     0,   463,     0,   459,     0,     0,   245,   294,     0,
+       0,   129,     0,     0,     0,     0,     0,   129,     0,     0,
+     108,   108,    18,     2,     0,     0,     3,   131,   132,     2,
+     143,   133,   134,   135,   136,   137,   138,   145,   147,     0,
+       0,     0,   285,   294,   294,   549,     0,   542,   294,   376,
+     378,     0,   392,   695,   387,   391,   388,   381,   385,   368,
+     399,     0,   581,     2,   666,   665,     0,   671,     2,   484,
+     486,   506,     3,   514,   515,     0,     2,   510,     3,     3,
+       0,     0,   558,   222,     0,     0,     0,   222,     0,     0,
+       3,    37,   121,   698,   702,   704,   697,   751,   108,     0,
+       3,   663,    42,     3,    40,     3,    34,     0,     3,   101,
+     103,     0,     2,   654,   655,     0,     0,   294,     0,     0,
+       0,     3,   640,     0,     2,   626,   627,     2,   642,     2,
+     676,   677,     0,     0,    63,     0,     3,     3,     3,     3,
+     411,   410,   414,     2,     2,   750,   749,   122,     0,     0,
+       0,     0,     3,   464,     3,     0,   243,   146,     3,   295,
+     294,     0,     0,     0,     0,     2,     0,   191,     0,   189,
+       0,     0,     0,     0,     0,     0,     0,   549,   121,     0,
+     151,   148,   294,     0,     0,   267,   279,     3,     3,   548,
+     615,   369,   384,   397,   294,   266,   294,     0,   517,   494,
+     294,     0,     0,   493,   508,     0,     0,     0,   216,     0,
+     225,    57,   108,     0,     2,   700,   701,     0,   126,   123,
+       0,     0,     0,     0,     0,     0,    23,     0,   657,   294,
+     582,   265,   726,   727,   728,     0,   679,   294,   294,   294,
+       3,     3,     0,   687,     0,     0,     0,     0,   294,   294,
+       3,   546,   471,   472,     0,     0,   246,   295,     0,     0,
+       0,     0,   294,   192,   190,   187,     0,   193,     0,     0,
+       0,     0,   197,   200,   198,   194,     0,   195,   129,    35,
+     144,   142,   244,     0,     0,   418,   422,   421,     0,   511,
+       2,   512,     2,   513,   507,   294,   228,     0,   226,     0,
+     228,     3,   663,   294,    31,   124,     2,    45,     2,    43,
+      41,    28,   122,    26,     3,   729,     3,     3,     3,     0,
+       0,   686,   688,   629,   643,   269,     2,   408,     3,   407,
+       0,   474,   471,   129,     0,     0,   129,     3,     0,   129,
+     188,     0,     2,     2,   209,   199,     0,     0,     0,   140,
+       0,   576,   616,     2,     0,     0,     2,   229,     0,     0,
+     217,     0,     0,     0,     3,     0,     0,     0,     0,     0,
+       0,   689,   690,   294,     0,   473,   152,     0,     0,     2,
+     165,   129,   154,     0,   182,     0,   129,     0,     2,   156,
+       0,     2,     0,     2,     2,     2,   196,    32,   294,   516,
+     518,   509,     0,     0,     0,     0,   124,    38,     0,     3,
+       3,   658,   630,   644,   680,   412,   129,   158,   161,     0,
+     160,   164,     3,   167,   166,     0,   129,   184,   129,     3,
+       0,   294,     0,   294,     0,     2,     0,     2,   139,     2,
+     230,   231,     0,   227,   218,     0,   703,     0,     0,   153,
+       0,     0,   163,   233,   168,     2,   235,   183,     0,   186,
+     172,   201,     3,   210,   214,   203,     3,     0,   294,     0,
+     294,     0,     0,     0,    39,    46,    44,   159,   162,   129,
+       0,   169,   294,   129,   129,     0,   173,     0,     0,   694,
+     211,   212,   213,     0,   202,     3,   204,     3,   294,   219,
+     232,   149,   170,   155,   129,   236,   185,   180,   178,   174,
+     157,   129,     0,   695,     0,     0,     0,     0,   150,   171,
+     181,   175,   179,   178,   176,     3,     3,     0,     0,   495,
+     177,   205,   207,     3,     3,   206,   208
 };
 
@@ -1561,194 +1565,194 @@
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   819,   469,   302,    48,   135,   136,   303,   304,   305,
-     306,   766,   767,  1145,  1146,   307,   382,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-    1040,   519,   984,   323,   985,   547,   954,  1067,  1543,  1069,
-    1070,  1071,  1072,  1544,  1073,  1074,  1460,  1461,  1422,  1423,
-    1424,  1522,  1523,  1527,  1528,  1563,  1564,  1075,  1380,  1076,
-    1077,  1314,  1315,  1316,  1504,  1078,   147,   960,   961,   962,
-    1400,  1484,  1496,  1497,   470,   471,   881,   882,  1048,    52,
-      53,    54,    55,    56,   348,   160,    59,    60,    61,    62,
-      63,   350,    65,    66,   266,    68,    69,   276,   352,   353,
-      72,    73,    74,    75,   120,    77,   206,   355,   121,    80,
-     122,    82,    83,   456,    84,   455,   690,   691,   692,   915,
-    1096,   916,    85,    86,   459,   457,   698,   861,   862,   358,
-     359,   701,   702,   703,   360,   361,   362,   363,   467,   341,
-     137,   138,   523,   325,   172,   647,   648,   649,   650,   651,
-      87,   123,    89,   490,   491,   946,   492,   279,   496,   326,
-      90,   139,   140,    91,  1337,  1118,  1119,  1120,  1121,    92,
-      93,   719,    94,   275,    95,    96,   189,  1042,   681,   413,
-     127,    97,   502,   503,   504,   190,   270,   192,   193,   194,
-     271,   100,   101,   102,   103,   104,   105,   106,   197,   198,
-     199,   200,   201,   831,   606,   607,   608,   609,   202,   611,
-     612,   613,   573,   574,   575,   576,   755,   107,   615,   616,
-     617,   618,   619,   620,   977,   757,   758,   759,   596,   366,
-     367,   368,   369,   327,   166,   109,   110,   111,   371,   696,
-     570
+      -1,   817,   468,   301,    47,   134,   135,   302,   303,   304,
+     305,   765,   766,  1143,  1144,   306,   381,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+    1038,   518,   982,   546,   322,   983,   952,  1065,  1541,  1067,
+    1068,  1069,  1070,  1542,  1071,  1072,  1458,  1459,  1420,  1421,
+    1422,  1520,  1521,  1525,  1526,  1561,  1562,  1073,  1378,  1074,
+    1075,  1312,  1313,  1314,  1502,  1076,   146,   958,   959,   960,
+    1398,  1482,  1494,  1495,   469,   470,   879,   880,  1046,    51,
+      52,    53,    54,    55,   347,   159,    58,    59,    60,    61,
+      62,   349,    64,    65,   265,    67,    68,   275,   351,   352,
+      71,    72,    73,    74,   119,    76,   205,   354,   120,    79,
+     121,    81,    82,   455,    83,   454,   689,   690,   691,   913,
+    1094,   914,    84,    85,   458,   456,   697,   859,   860,   357,
+     358,   700,   701,   702,   359,   360,   361,   362,   466,   340,
+     136,   137,   522,   324,   171,   646,   647,   648,   649,   650,
+      86,   122,    88,   489,   490,   944,   491,   278,   495,   325,
+      89,   138,   139,    90,  1335,  1116,  1117,  1118,  1119,    91,
+      92,   718,    93,   274,    94,    95,   188,  1040,   680,   412,
+     126,    96,   501,   502,   503,   189,   269,   191,   192,   193,
+     270,    99,   100,   101,   102,   103,   104,   105,   196,   197,
+     198,   199,   200,   829,   605,   606,   607,   608,   201,   610,
+     611,   612,   572,   573,   574,   575,   754,   106,   614,   615,
+     616,   617,   618,   619,   975,   756,   757,   758,   595,   365,
+     366,   367,   368,   326,   165,   108,   109,   110,   370,   695,
+     569
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1414
+#define YYPACT_NINF -1315
 static const yytype_int16 yypact[] =
 {
-    4857,  9883, -1414,    35, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414,   142, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414,    98,    98,    98,  1334,
-     684,   153,  7496,   290, -1414, -1414, -1414, -1414, -1414,   204,
-   -1414, -1414, -1414, -1414,   901,   229, -1414, -1414, -1414, -1414,
-    9565, -1414, -1414, -1414, -1414,   -15,   301, -1414,  1624, -1414,
-   -1414, -1414, -1414,   302,  1806,   471,   143,  7613, -1414, -1414,
-    9603,  1367, -1414, -1414, -1414,  1721,   510,  3394,  1032,  1137,
-    1721,  1303, -1414, -1414,  1174,  1520, -1414,  1721,  1532, -1414,
-     385, -1414,   421,   523, -1414, -1414, -1414, -1414,   460,   301,
-      98, -1414,    98, -1414, -1414, -1414, -1414, 10414,  1624, -1414,
-   -1414,  1624, -1414,   447, -1414, 10444, -1414, -1414,  2082, 10554,
-   -1414,   399,   399,   399, -1414, -1414, -1414,    98, -1414, -1414,
-   -1414,   544,   555,   575, -1414, -1414, -1414,   617, -1414, -1414,
-   -1414, -1414, -1414,   621,   629, -1414, -1414,    11,  9069,  3253,
-     578,   492,   499,   631,   635,   642,   647,  9853,  7015,   649,
-     656, -1414,  9713, -1414, -1414, -1414, -1414,   661, -1414,   193,
-    3453,  3453, -1414,   667,   251, -1414, -1414, -1414, -1414,   692,
-     327,   346,   368,    98,   673, -1414, -1414,  1806,  3136,   748,
-   -1414,    12, -1414,    98,    98,   301, -1414, -1414,    75, -1414,
-      98,    98, -1414,  3167,   711,   722,   399,  6806, -1414, -1414,
-     726,  9565, -1414, -1414,  1721, -1414, -1414, -1414,   301, -1414,
-    1624,   -15, -1414,  7963, -1414,   399,   399,   399,   301, -1414,
-    1334, -1414,  5769, -1414, -1414,   709,   399, -1414,   399, -1414,
-     204,  9069, -1414,   763, -1414,   684,   765,   399, -1414,  1334,
-     750,   766, -1414,  7496,   705, -1414, -1414, -1414,  9532, -1414,
-   -1414, 10864, -1414,   748,    63,  6244, 10554,  2082,  3167, -1414,
-      85, -1414, -1414, 10444,  1624,   804,  7644, -1414, -1414,   319,
-   -1414, 11778,   782,   851,  4657,   828,  4994, 11639, -1414,   839,
-   -1414, -1414, -1414, -1414, 11658, 11658,  8841,   844, -1414, -1414,
-   -1414, -1414, -1414, -1414,   869, -1414,   759,  2440,  9183,  4994,
-   -1414,   593,   571,   645,   313,   861,   842,   858,   843,   911,
-     -20, -1414, -1414,   876,   326, -1414,    83, -1414, -1414,  3253,
-   -1414, -1414,   139,   900, -1414,   422,   900,   905,   204, -1414,
-   -1414,   909, 10414, -1414,   912,   917,  9297, -1414, -1414,  1382,
-    2358,  8427,  6806,  1721, -1414,  1721,   399,   399, -1414, -1414,
-   -1414, -1414, -1414, -1414,   399, 10414,  1624, -1414, -1414, 10584,
-    1776, -1414, 10304, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-     936, 11446,  4994, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414, -1414,  2082, -1414,   836,
-     947,   962,   963,   923,   965,   970,   972,  3136, -1414, -1414,
-     959,   -15,   975, -1414, -1414,   978, -1414, -1414, -1414,  9532,
-   -1414, -1414, -1414, -1414, -1414,  3167, -1414,  9069,  9069, -1414,
-     399,  2082,  6926,  1624,  8543, -1414, -1414, -1414, -1414,  9532,
-      63, -1414, -1414,  1721,   301, -1414, -1414,  9532, -1414,  6689,
-   -1414, -1414,   399,   399,   271, 10023,   907,   977,   960,   988,
-     399, -1414, -1414, -1414, -1414, 10980, -1414,   500,  6556, -1414,
-     301,   990, -1414,  2082, 11860, 11504, -1414, -1414, -1414, -1414,
-     935,  3167, -1414,  8659,   748,  6228, -1414, -1414, -1414,  1482,
-     550,   876,   684,  7644,  1180, 10444, -1414,  7644, -1414, -1414,
-   -1414, -1414,   561, -1414,   997,   851,   -13,  8841, -1414, 10694,
-   -1414, -1414,  8841, -1414,  8955,  8841, -1414, -1414,   996, -1414,
-     585,  1003,   455,  1017, -1414, -1414,  9993,  6037, -1414,   419,
-   -1414, -1414, 11562, -1414,   469, 11562, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414,  6244,  6244, -1414, -1414,
-    4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,
-    4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  3735,  6244,
-   -1414,   326,  1049, -1414, -1414,    98,    98, -1414, -1414,  9069,
-   -1414, -1414,   978,   705, -1414,   978, 11581, -1414, -1414, -1414,
-    3645,  6037,  1016,  1018, -1414, 10554, -1414, -1414,   661, -1414,
-    1020,  1157,  1025,  2611,    95,   876, -1414,    98,    98,   876,
-     134, -1414,    98,    98,   978, -1414, -1414,    98,    98, -1414,
-     900, 10724,  1624, 12005,    69,   227, 10724, -1414, 10864, -1414,
-     876, -1414, 10414, -1414,   218,  8079,  8079,  8079,  1624, -1414,
-    5555,  1012,   260,   936,   778,  1021,  1024, -1414,  1026,  3453,
-     343, -1414,  1115,  1624,  8079,   705,  2082,   705,   748,   534,
-     900, -1414, -1414,   596,   900, -1414, -1414, -1414,   851, -1414,
-     900,   301, 10980, -1414,   687,  1042,   700,  1043, -1414,  1044,
-     301, -1414, -1414,  9532,   301,  1041, 10694,  1045, -1414,  2066,
-   -1414,   408,   416,   684, -1414,   684,  1047,  4994, -1414,   684,
-   12005, -1414, -1414,  1053, -1414, -1414, -1414,   705, -1414, 11933,
-     917, -1414,  8079,   489,  8427, -1414, -1414,   661,  1055,  1056,
-    1482,  3284, -1414, -1414,  7644, -1414, -1414,  1038, -1414, -1414,
-    1064, -1414,  1038,  1070, 11778,  6244,    93,  1051,   138,  1074,
-    1058,  1075,   844,  1069,  1077, -1414,  1079,  1081, 10133,  6775,
-   -1414,  6244, -1414,   455,  1974, -1414, -1414, -1414,    98,    98,
-    6104,  6244,  1076, -1414, -1414,   936,   707, -1414,  6244, -1414,
-   -1414,   677, -1414, -1414, -1414, -1414, -1414,   593,   593,   571,
-     571,   645,   645,   645,   645,   313,   313,   861,   842,   858,
-     843,   911,  4994,   847, -1414, 10980,  1083,  1084,  1088,  1049,
-   -1414, -1414, -1414, -1414, -1414, 10980,   717,  8079, -1414, 10414,
-   -1414,  7135,  9411, -1414, 10304,  7015, -1414, -1414,  1157, 10980,
-     945,  1089,  1090,  1095,  1096,  1099,  1100,  1105, -1414,  4392,
-    2611, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,   978, -1414,
-   -1414, -1414,   876, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414,  1112, -1414,  1113,  1118, -1414, -1414,   -15,  1076,  5555,
-   -1414, -1414, -1414, 11446,  1116, -1414, -1414, -1414, -1414, -1414,
-     684,  6369,  1201, -1414, -1414, -1414, -1414,  1103,   -15, -1414,
-   -1414,   978, -1414, -1414,   978,   126,   978, -1414, -1414, -1414,
-   -1414, -1414, -1414,  9743, -1414,   301, -1414, -1414,   438,   452,
-   10584,  7255,  2372,  4994,  2870, -1414, -1414,  1127,    39,  1127,
-   -1414,   684, -1414,    98, -1414, -1414, 10163,   960, -1414, -1414,
-   -1414,   977,  1143,  1131, -1414, -1414,  1150,  1153, -1414,   489,
-    1995, -1414,   363, -1414,  3284,   876, -1414,  1160,  7644, 10834,
-    9069,  1161, -1414, -1414,  1151,  1162,  1156, -1414,  4994,   120,
-     279,  1163, -1414,  1166,   705,  1166,  6037,  6244, -1414, -1414,
-    1166,  1165, -1414,  1176,  1182,  1185,  1974, -1414, -1414, -1414,
-   11446, -1414, -1414, -1414, -1414,  1168,  6244,  1188,   705,  5555,
-   -1414, 11562, -1414,   705, -1414, -1414,  6244, -1414,   614,   900,
-   -1414, -1414, -1414, -1414, -1414, -1414, -1414,   936,   917,  9297,
-   -1414, -1414,  7375,  1187, -1414,   758,   900, -1414,   785,   797,
-     900, -1414,   399,  5912, -1414, -1414, -1414, 10980, 10980, -1414,
-    8543,  8543, -1414,  1186,  1189,  1191,  1199, -1414,  1206,   439,
-     119,  1076, -1414,   705, -1414,  3453, -1414,  6244,   480, -1414,
-    6655,  1211,  1212, 11388,  1213,  1217,    -6,    58,   117,  6244,
-    1221,   301,  6244,  6244,  1215,  1222,   610,  1203, -1414, -1414,
-   -1414,  1218, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414,   684,  1226,  6244, -1414, 10980, 10980,    98,  1228, -1414,
-   10273, -1414, -1414,   864, -1414,  2870, -1414, -1414, -1414, -1414,
-    2066, -1414, -1414,  1230, -1414, -1414, -1414, -1414,  1231,  1995,
-   -1414, -1414,  1223, -1414,  1038, -1414, -1414,  2082,  1235, -1414,
-   -1414, -1414,   744,  1237, -1414,   138,  1245,  4994,  1232,   138,
-     138,  1250,  1246, -1414,  9993,   825,   900, -1414, -1414,  1026,
-    6244,  1251,  1168,   536,   161,  1261, -1414,  1246, -1414,  1254,
-    1261, -1414, -1414,  1257, -1414, -1414,   978,  1270,  1271,  6895,
-    1272,  1275,  1280, -1414, -1414,  1283, -1414, -1414,   978, -1414,
-   -1414, -1414, -1414,   978,  6244,  6244,   917,  1282, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-    4994,  4994,  1284,  1286,  1261, -1414, -1414,   684, -1414, -1414,
-   -1414,  5291, 10834,  6244,  6244,  1335,  6244, -1414,  1263, -1414,
-    1267, -1414,  1281,  6244,  1288,  6244,  1039,  1290,    28,    98,
-    5165,   856, -1414, -1414,  6369,  1287,   488, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414, 11206, -1414,  8659,  1304,
-   -1414, -1414, 10834,   490,   498, -1414,  1301,  1306,   851,  1317,
-   -1414,   418, -1414, -1414,  6244,  1316, -1414, -1414,   978,  1314,
-   -1414, -1414,  1318,   589,   691,   705,  1320,  1322, -1414,  1329,
-   -1414, 10980, -1414, -1414, -1414, -1414, -1414,  1330, -1414, 10980,
-   10980, 10980, -1414, -1414,  1332, -1414,  1333,  1336,  1339,   517,
-    8195,  8311, -1414, -1414,   123, -1414,  1343,  1348, -1414,  8775,
-     755,   768,  1342,   770,  6525, -1414, -1414, -1414,   508, -1414,
-     777,  1352,  1353,   301,  1403,   933, -1414, -1414,  6244, -1414,
-   11388, 11562, -1414, -1414, -1414,  1359,  1364, -1414, -1414, -1414,
-    1363, -1414, -1414, -1414, -1414, -1414, -1414, 10834,   851,   273,
-   -1414,  1347,   851,  1168,   268, 10980, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414,  1365, -1414, -1414, -1414, -1414, -1414,
-   -1414,  1368,  1371, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-    1375, -1414,  1374, -1414, -1414, 11388,    91,  6244, 11388, -1414,
-    1385,  6244, -1414,   288,  1402,  1405, -1414, -1414,  1390,  1393,
-    1376, -1414,   882, -1414, -1414, -1414,  1624,  2082,  1388,   869,
-     884,  4994, -1414,   803,  1394,  6244, -1414,   705,   705,  1399,
-    1406,  1407,  1409, -1414, -1414,  8543,  1397, -1414,  1473,  4994,
-    1404, -1414, -1414, 11299, -1414,   811, -1414,  1395, 11388,  1401,
-   -1414, -1414,  1410, -1414,  1412, -1414,  1433,  1441, -1414,  1415,
-   10834, -1414, -1414, -1414,   851,   705,  1429,  1417,  1436, -1414,
-    1446,  1261,  1261, -1414, -1414, -1414, -1414, -1414, 11388,   278,
-   -1414,   910, -1414, -1414,  7730, -1414, -1414,  1435,  6244, -1414,
-    6244,  7730,   301, 10694,   301, 10694,  1462, -1414,  1463, -1414,
-   -1414,  1460,   869, -1414,   812, -1414, -1414,  6244, -1414,  1465,
-    1466, -1414,  4994,  4994, -1414, -1414,  1007,    37, -1414, -1414,
-    1447, -1414,  1007, -1414, -1414,  2485,   705, -1414, -1414,   301,
-   10694,   301, 10694,  1472,  1450,   705, -1414, -1414, -1414, -1414,
-   -1414, 11299,  1468,  1007,  7847,  6244, 11210,  1475,  1007,  1477,
-    2485,  2994, -1414, -1414, -1414,  1495, -1414, -1414, -1414, -1414,
-    9069, -1414, -1414, -1414, 11077, -1414, 11299, -1414, -1414,  1476,
-   10984, -1414, -1414, 11210,   301,  2994,   301,  1502,  1506,   813,
-   -1414, 11077, -1414, -1414, -1414, 10984, -1414, -1414, -1414,   301,
-     301, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414
+    5006,  8237, -1315,    89, -1315, -1315, -1315, -1315, -1315, -1315,
+   -1315,   194, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,
+   -1315, -1315, -1315, -1315, -1315, -1315,   314,   314,   314,   792,
+     787,   234,  7780,   219, -1315, -1315, -1315, -1315, -1315,   257,
+   -1315, -1315, -1315,   912,   264, -1315, -1315, -1315, -1315,  6920,
+   -1315, -1315, -1315, -1315,   120,   272, -1315,   823, -1315, -1315,
+   -1315, -1315,   302,  1619,   420,   112,  3706, -1315, -1315,  9405,
+    1262, -1315, -1315, -1315,   675,   440,  7333,  1133,  1444,   675,
+    1669, -1315, -1315,   482,   771, -1315,   675,  1807, -1315,   386,
+   -1315,   507,   517, -1315, -1315, -1315, -1315,   426,   272,   314,
+   -1315,   314, -1315, -1315, -1315, -1315,  8871,   823, -1315, -1315,
+     823, -1315,   415, -1315,  8985, -1315, -1315,  1777,  9099, -1315,
+     428,   428,   428, -1315, -1315, -1315,   314, -1315, -1315, -1315,
+     454,   468,   490, -1315, -1315, -1315,   500, -1315, -1315, -1315,
+   -1315, -1315,   504,   509, -1315, -1315,    76,  8833,  2235,   669,
+     439,   450,   519,   522,   537,   567,  8121,  7182,   529,   581,
+   -1315,  9443, -1315, -1315, -1315, -1315,   595, -1315,   216,  3771,
+    3771, -1315,   603,   313, -1315, -1315, -1315, -1315,   605,   316,
+     320,   345,   314,   589, -1315, -1315,  1619,  2809,   664, -1315,
+      49, -1315,   314,   314,   272, -1315, -1315,    87, -1315,   314,
+     314, -1315,  3249,   632,   636,   428,  7093, -1315, -1315,   646,
+    6920, -1315, -1315,   675, -1315, -1315, -1315,   272, -1315,   823,
+     120, -1315,  7972, -1315,   428,   428,   428,   272, -1315,   792,
+   -1315,  5155, -1315, -1315,   635,   428, -1315,   428, -1315,   257,
+    8833, -1315,   657, -1315,   787,   660,   428, -1315,   792,   679,
+     704, -1315,  7780,   574, -1315, -1315, -1315,  9296, -1315, -1315,
+    6389, -1315,   664,    74,  5169,  9099,  1777,  3249, -1315,    97,
+   -1315, -1315,  8985,   823,   708,  9849, -1315, -1315,   539, -1315,
+   10667,   680,   762, 10451,   751, 10470, 10528, -1315,   764, -1315,
+   -1315, -1315, -1315, 10547, 10547,  8605,   778, -1315, -1315, -1315,
+   -1315, -1315, -1315,   801, -1315,   969,  2181,  8947, 10470, -1315,
+     339,   731,   846,   265,   890,   795,   797,   810,   836,    33,
+   -1315, -1315,   812,   497, -1315,    59, -1315, -1315,  2235, -1315,
+   -1315,   588,   835, -1315,   622,   835,   847,   257, -1315, -1315,
+     863,  8871, -1315,   854,   878,  9061, -1315, -1315,   765,  1714,
+    8320,  7093,   675, -1315,   675,   428,   428, -1315, -1315, -1315,
+   -1315, -1315, -1315,   428,  8871,   823, -1315, -1315,  9213,   843,
+   -1315,  8757, -1315, -1315, -1315, -1315, -1315, -1315, -1315,   886,
+    3575, 10470, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,
+   -1315, -1315, -1315, -1315, -1315, -1315,  1777, -1315,   793,   865,
+     884,   894,   869,   902,   905,   909,  2809, -1315, -1315,   918,
+     120,   935, -1315, -1315,   927, -1315, -1315, -1315,  9296, -1315,
+   -1315, -1315, -1315, -1315,  3249, -1315,  8833,  8833, -1315,   428,
+    1777,  7213,   823,  8393, -1315, -1315, -1315, -1315,  9296,    74,
+   -1315, -1315,   675,   272, -1315, -1315,  9296, -1315,  6557, -1315,
+   -1315,   428,   428,   295,  9519,   937,   942,   934,   955,   428,
+   -1315, -1315, -1315, -1315,  9927, -1315,   540,  6680, -1315,   272,
+     963, -1315,  1777, 10749,  5888, -1315, -1315, -1315, -1315,   899,
+    3249, -1315,  8466,   664,  7663, -1315, -1315, -1315,  1232,   551,
+     812,   787,  9849,   591,  8985, -1315,  9849, -1315, -1315, -1315,
+   -1315,   576, -1315,   980,   762,   283,  8605, -1315,  9699, -1315,
+   -1315,  8605, -1315,  8719,  8605, -1315, -1315,   987, -1315,   599,
+     996,   706,   999, -1315, -1315,  6048,  6769, -1315,   137, -1315,
+   -1315,  6053, -1315,   286,  6053, -1315, -1315, -1315, -1315, -1315,
+   -1315, -1315, -1315, -1315, -1315, -1315,  5169, -1315, -1315, 10470,
+   10470, 10470, 10470, 10470, 10470, 10470, 10470, 10470, 10470, 10470,
+   10470, 10470, 10470, 10470, 10470, 10470, 10470,  4672,  5169, -1315,
+     497,  1307, -1315, -1315,   314,   314, -1315, -1315,  8833, -1315,
+   -1315,   927,   574, -1315,   927, 10393, -1315, -1315, -1315,  9329,
+    6769,  1002,  1007, -1315,  9099, -1315, -1315,   595, -1315,  1019,
+     941,  1024,  1647,   103,   812, -1315,   314,   314,   812,   133,
+   -1315,   314,   314,   927, -1315, -1315,   314,   314, -1315,   835,
+    9781,   823, 10894,   412,   469,  9781, -1315,  6389, -1315,   812,
+   -1315,  8871, -1315,   191,  5383,  5383,  5383,   823, -1315,  4873,
+     979,   513,   886,   151,  1028,  1030, -1315,  1036,  3771,   531,
+   -1315,  1124,   823,  5383,   574,  1777,   574,   664,   782,   835,
+   -1315, -1315,   802,   835, -1315, -1315, -1315,   762, -1315,   835,
+     272,  9927, -1315,   606,  1050,   616,  1051, -1315,  1052,   272,
+   -1315, -1315,  9296,   272,  1054,  9699,  1053, -1315,  1508, -1315,
+     360,   367,   787, -1315,   787,  1056, 10470, -1315,   787, 10894,
+   -1315, -1315,  1059, -1315, -1315, -1315,   574, -1315, 10822,   878,
+   -1315,  5383,   769,  8320, -1315, -1315,   595,  1057,  1058,  1232,
+    3288, -1315, -1315,  9849, -1315, -1315,  1065, -1315, -1315,  1066,
+   -1315,  1065,  1064, 10667,  5169,   121,  1034,   100,  1074,  1071,
+    1075,   778,  1072,  1078, -1315,  1080,  1082,  9557,  6889, -1315,
+    5169, -1315,   706,  2222, -1315, -1315, -1315,   314,   314,  5021,
+    5169,  1079, -1315, -1315,   886,   619, -1315,  5169, -1315, -1315,
+     971, -1315, -1315, -1315, -1315,   339,   339,   731,   731,   846,
+     846,   846,   846,   265,   265,   890,   795,   797,   810,   836,
+   10470,   975, -1315,  9927,  1084,  1086,  1087,  1307, -1315, -1315,
+   -1315, -1315, -1315,  9927,   639,  5383, -1315,  8871, -1315,  7302,
+    9175, -1315,  8757,  7182, -1315, -1315,   941,  9927,   923,  1093,
+    1097,  1098,  1101,  1104,  1109,  1110, -1315,  3448,  1647, -1315,
+   -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,
+   -1315, -1315, -1315, -1315, -1315, -1315,   927, -1315, -1315, -1315,
+     812, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,  1111,
+   -1315,  1115,  1116, -1315, -1315,   120,  1079,  4873, -1315, -1315,
+   -1315,  3575,  1113, -1315, -1315, -1315, -1315, -1315,   787,  6479,
+    1200, -1315, -1315, -1315, -1315,  1100,   120, -1315, -1315,   927,
+   -1315, -1315,   927,   146,   927, -1315, -1315, -1315, -1315, -1315,
+   -1315,  9481, -1315,   272, -1315, -1315,   380,   387,  9213,  7422,
+    1947, 10470,  2081, -1315, -1315,  1121,    77,  1121, -1315,   787,
+   -1315,   314, -1315, -1315,  9630,   934, -1315, -1315, -1315,   942,
+    1122,  1117, -1315, -1315,  1129,  1130, -1315,   769,  2444, -1315,
+     476, -1315,  3288,   812, -1315,  1135,  9849,  9811,  8833,  1136,
+   -1315, -1315,  1127,  1137,  1131, -1315, 10470,   134,   293,  1138,
+   -1315,  1142,   574,  1142,  6769,  5169, -1315, -1315,  1142,  1139,
+   -1315,  1150,  1152,  1153,  2222, -1315, -1315, -1315,  3575, -1315,
+   -1315, -1315, -1315,  1156,  5169,  1140,   574,  4873, -1315,  6053,
+   -1315,   574, -1315, -1315,  5169, -1315,   842,   835, -1315, -1315,
+   -1315, -1315, -1315, -1315, -1315,   886,   878,  9061, -1315, -1315,
+    7542,  1163, -1315,   882,   835, -1315,   892,   926,   835, -1315,
+     428,  4553, -1315, -1315, -1315,  9927,  9927, -1315,  8393,  8393,
+   -1315,  1161,  1164,  1169,  1172, -1315,  1171,   527,    41,  1079,
+   -1315,   574, -1315,  3771, -1315,  5169,   423, -1315,  6649,  1175,
+    1177, 10335,  1178,  1181,     9,    73,    48,  5169,  1182,   272,
+    5169,  5169,  1132,  1180,   489,  1162, -1315, -1315, -1315,  1184,
+   -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,   787,
+    1183,  5169, -1315,  9927,  9927,   314,  1186, -1315,  9668, -1315,
+   -1315,   984, -1315,  2081, -1315, -1315, -1315, -1315,  1508, -1315,
+   -1315,  1188, -1315, -1315, -1315, -1315,  1191,  2444, -1315, -1315,
+    1185, -1315,  1065, -1315, -1315,  1777,  1194, -1315, -1315, -1315,
+     640,  1198, -1315,   100,  1201, 10470,  1195,   100,   100,  1213,
+    1214, -1315,  6048,   959,   835, -1315, -1315,  1036,  5169,  1217,
+    1156,   654,    46,  1216, -1315,  1214, -1315,  1222,  1216, -1315,
+   -1315,  1226, -1315, -1315,   927,  1229,  1230,  7062,  1231,  1235,
+    1237, -1315, -1315,  1242, -1315, -1315,   927, -1315, -1315, -1315,
+   -1315,   927,  5169,  5169,   878,  1244, -1315, -1315, -1315, -1315,
+   -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315, 10470, 10470,
+    1246,  1253,  1216, -1315, -1315,   787, -1315, -1315, -1315,  4813,
+    9811,  5169,  5169,  1321,  5169, -1315,  1239, -1315,  1247, -1315,
+    1248,  5169,  1250,  5169,   986,  1252,    81,   314,  9367,  1069,
+   -1315, -1315,  6479,  1261,   436, -1315, -1315, -1315, -1315, -1315,
+   -1315, -1315, -1315, -1315, 10153, -1315,  8466,  1268, -1315, -1315,
+    9811,   437,   451, -1315,  1270,  1271,   762,  1280, -1315,   352,
+   -1315, -1315,  5169,  1281, -1315, -1315,   927,  1277, -1315, -1315,
+    1284,   301,   375,   574,  1285,  1288, -1315,  1290, -1315,  9927,
+   -1315, -1315, -1315, -1315, -1315,  1291, -1315,  9927,  9927,  9927,
+   -1315, -1315,  1293, -1315,  1295,  1298,  1299,   590,  8088,  8204,
+   -1315, -1315,   304, -1315,  1302,  1303, -1315,  8539,   652,   671,
+    1308,   690,  6255, -1315, -1315, -1315,   471, -1315,   711,  1310,
+    1311,   272,  1363,  1043, -1315, -1315,  5169, -1315, 10335,  6053,
+   -1315, -1315, -1315,  1317,  1318, -1315, -1315, -1315,  1316, -1315,
+   -1315, -1315, -1315, -1315, -1315,  9811,   762,   155, -1315,  1300,
+     762,  1156,   297,  9927, -1315, -1315, -1315, -1315, -1315, -1315,
+   -1315, -1315,  1314, -1315, -1315, -1315, -1315, -1315, -1315,  1323,
+    1324, -1315, -1315, -1315, -1315, -1315, -1315, -1315,  1329, -1315,
+    1330, -1315, -1315, 10335,   135,  5169, 10335, -1315,  1333,  5169,
+   -1315,   281,  1344,  1348, -1315, -1315,  1340,  1343,  1331, -1315,
+     988, -1315, -1315, -1315,   823,  1777,  1338,   801,   995, 10470,
+   -1315,   713,  1349,  5169, -1315,   574,   574,  1350,  1355,  1356,
+    1358, -1315, -1315,  8393,  1359, -1315,  1430, 10470,  1360, -1315,
+   -1315, 10246, -1315,   722, -1315,  1347, 10335,  1352, -1315, -1315,
+    1366, -1315,  1370, -1315,  1385,  1386, -1315,  1354,  9811, -1315,
+   -1315, -1315,   762,   574,  1382,  1364,  1381, -1315,  1389,  1216,
+    1216, -1315, -1315, -1315, -1315, -1315, 10335,   197, -1315,  1000,
+   -1315, -1315,  7897, -1315, -1315,  1368,  5169, -1315,  5169,  7897,
+     272,  9699,   272,  9699,  1391, -1315,  1392, -1315, -1315,  1390,
+     801, -1315,   776, -1315, -1315,  5169, -1315,  1394,  1395, -1315,
+   10470, 10470, -1315, -1315,  1077,    85, -1315, -1315,  1372, -1315,
+    1077, -1315, -1315,  2494,   574, -1315, -1315,   272,  9699,   272,
+    9699,  1403,  1383,   574, -1315, -1315, -1315, -1315, -1315, 10246,
+    1401,  1077,  5739,  5169, 10157,  1402,  1077,  1408,  2494,  2404,
+   -1315, -1315, -1315,  1409, -1315, -1315, -1315, -1315,  8833, -1315,
+   -1315, -1315, 10024, -1315, 10246, -1315, -1315,  1388,  9931, -1315,
+   -1315, 10157,   272,  2404,   272,  1413,  1414,   857, -1315, 10024,
+   -1315, -1315, -1315,  9931, -1315, -1315, -1315,   272,   272, -1315,
+   -1315, -1315, -1315, -1315, -1315, -1315, -1315
 };
 
@@ -1756,29 +1760,29 @@
 static const yytype_int16 yypgoto[] =
 {
-   -1414,  4377,  3077, -1414,  1645, -1414,   305,   958,   -11, -1414,
-     552,  -530,  -487,  -944,  -142,  3604,     0, -1414,  1277,   511,
-     529,   298,   549,  1057,  1060,  1054,  1062,  1065, -1414,  -211,
-    -327,  5116,  -961,  -725,  -952, -1414,  -200,  -594,   572, -1414,
-    1379, -1414,   397, -1413, -1414, -1414,   129, -1414, -1160,  -935,
-     246, -1414, -1414, -1414, -1414,    68, -1131, -1414, -1414, -1414,
-   -1414, -1414, -1414,   321, -1152,    33, -1414,  -696, -1414,   506,
-     296, -1414,   169, -1414,  -339, -1414, -1414, -1414,   558,  -728,
-   -1414, -1414,    19,  -974,   177,  2303, -1414, -1414, -1414,   -91,
-   -1414,   166,   269,  -194,  1705,  3615, -1414, -1414,    36,   224,
-     628,  -235,  1694, -1414,  1557, -1414, -1414,   200,  2163, -1414,
-    2278,   185, -1414, -1414, -1414,  -607, -1414,   956,   957,   545,
-     725,  -320, -1414, -1414, -1414,   950,   719,  -493, -1414,  -472,
-    -355,  1296, -1414, -1414,  -899,  -946,   440,   524,  1067,   168,
-   -1414,  1040,   317,  -281,  -198,  -141,   672,   781, -1414,  1005,
-   -1414,  2834,    55,  -450,   932, -1414, -1414,   712, -1414,  -228,
-   -1414,   104, -1414, -1414, -1414, -1285,   420, -1414, -1414, -1414,
-    1178, -1414,    31, -1414, -1414,  -862,   -94, -1364,  -152,  1641,
-   -1414,  3733, -1414,   927, -1414,  -170,   493,  -184,  -183,  -181,
-       7,   -42,   -36,   -33,  1610,     4,    10,    14,  -143,  -177,
-    -172,  -162,  -161,  -319,  -513,  -508,  -498,  -547,  -310,  -528,
-   -1414, -1414,  -511,  1101,  1102,  1110,  1575,  4802,  -565,  -560,
-    -559,  -541,  -551, -1414,  -506,  -744,  -736,  -732,  -593,  -267,
-    -227, -1414, -1414,   624,   294,   -85, -1414,  3753,    44,  -634,
-    -173
+   -1315,  4470,  3041, -1315,    39, -1315,  2507,   957,  -207, -1315,
+     461,  -523,  -489,  -955,  -200,  5636,     0, -1315,    72,   572,
+     580,   245,   566,   964,   967,   968,   966,   976, -1315,  1601,
+    -609,  5067,  -949, -1315,  -712,  -938,   430,  -728,   512, -1315,
+    1697, -1315,   311, -1200, -1315, -1315,    43, -1315, -1142, -1154,
+     154, -1315, -1315, -1315, -1315,   -26, -1161, -1315, -1315, -1315,
+   -1315, -1315, -1315,   231, -1202,    53, -1315,  -908, -1315,   416,
+     205, -1315,    78, -1315,  -367, -1315, -1315, -1315,   470,  -824,
+   -1315, -1315,    13,  -940,   465,  2639, -1315, -1315, -1315,  -107,
+   -1315,   102,   269,  -201,  1635,  4179, -1315, -1315,     5,   449,
+     756,  -259,  1489, -1315,  1725, -1315, -1315,    52,  2057, -1315,
+    2147,   612, -1315, -1315, -1315,  -616, -1315,   866,   867,   456,
+     631,   158, -1315, -1315, -1315,   858,   633,  -514, -1315,  -544,
+    -359,  1913, -1315, -1315,  -928,  -991,  1380,  1398,   990,   324,
+   -1315,   171,   457,  -332,  -192,  -147,   584,   695, -1315,   919,
+   -1315,  2794,  1328,  -442,   850, -1315, -1315,   625, -1315,  -238,
+   -1315,   -94, -1315, -1315, -1315, -1246,   330, -1315, -1315, -1315,
+    1091, -1315,    35, -1315, -1315,  -834,   -97, -1314,  -130,  1985,
+   -1315,  3026, -1315,   844, -1315,  -170,  1212,  -183,  -173,  -167,
+       7,   -35,   -34,   -33,   936,    18,    55,    61,  -143,  -159,
+    -156,  -153,  -151,  -323,  -535,  -528,  -526,  -542,  -318,  -520,
+   -1315, -1315,  -512,  1006,  1009,  1011,  2067,  4895,  -560,  -543,
+    -538,  -536,  -484, -1315,  -481,  -740,  -737,  -736,  -586,  -304,
+    -339, -1315, -1315,   856,   707,   -88, -1315,  3848,    29,  -599,
+    -291
 };
 
@@ -1786,816 +1790,1083 @@
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -526
+#define YYTABLE_NINF -525
 static const yytype_int16 yytable[] =
 {
-      50,   115,   151,   400,   401,   771,   402,    99,   152,   973,
-     403,   153,   429,   454,   874,   404,   756,   974,   408,  1080,
-     116,   975,   262,   441,   269,   405,   406,   744,   850,   384,
-     385,   605,    50,    51,  1142,   982,    70,   411,   833,    99,
-     610,   825,   826,   727,   149,   409,   499,   732,   154,  1150,
-      50,    31,  1398,   836,   155,  1462,   832,   163,   156,   843,
-     827,   800,   282,   145,   188,    51,  1208,   211,    70,   528,
-      50,   195,   343,   824,   218,   567,  1200,   228,    31,   597,
-     671,  -235,  -235,   400,   401,  1184,   402,   926,   821,   221,
-     403,  1318,   170,   822,   168,   404,   520,   737,   408,  1194,
-     680,  1217,  1218,   823,   738,   405,   406,   115,   684,   426,
-     568,   476,   478,  1550,    31,   115,   171,   124,   268,   273,
-     283,   254,   217,   412,    31,   409,  1209,   410,   715,  1462,
-    1210,  1182,  1183,  1561,    31,  1419,  1420,    31,   629,   244,
-    1565,   955,   633,   865,   866,   151,   675,   677,   308,   149,
-     412,   152,  -235,  1079,   153,  1481,   163,   115,   346,   168,
-    1319,   884,   211,   863,   863,   863,    64,   472,   973,   374,
-     722,   204,   477,    31,   217,   528,   974,    57,   117,  1260,
-     975,   853,   863,   920,   420,   854,   412,   188,   188,  1212,
-    1211,   154,   328,   578,   482,   163,   412,   155,    64,   579,
-      78,   156,   528,   268,   834,  1421,   602,   821,   528,    57,
-     956,    50,   822,   669,   731,  1190,   716,   217,   163,   938,
-     293,   205,   823,   211,    71,   151,   179,   674,   676,  1127,
-     444,   152,    78,   746,   153,  1213,  1087,   666,  -113,  -113,
-     863,   308,  1191,   841,   212,   602,  1263,   222,   580,   958,
-     412,   125,   216,    50,  -113,   437,    71,   589,   825,   826,
-      99,   273,   144,  1466,   667,  1026,   273,   268,   268,   836,
-     118,  1152,   506,   115,  1264,   163,   263,   827,   217,   264,
-     864,   864,   864,  1025,   464,   328,    51,   343,  1001,    70,
-    1013,   214,  1184,   610,   108,   108,   308,  1103,   804,   864,
-    1090,   146,  1343,   658,   216,   821,   113,   520,   308,   378,
-     822,   666,   520,   148,  1004,   520,   217,   437,   725,   161,
-     823,   217,  1199,  1508,   572,   379,   108,   477,   472,   149,
-    1200,   673,  1419,  1420,   448,   863,   374,   678,   667,   855,
-    -470,   157,   115,   856,   905,  1184,   346,   216,   472,   569,
-     603,   621,   168,   461,   597,   528,   472,   864,  1537,   597,
-    1539,  1466,  1080,   810,   108,   626,  1466,   388,   793,   626,
-     930,  -470,   115,  -470,  1492,   833,   260,  -470,  -113,   825,
-     826,   685,  1401,   389,   161,  1405,  1466,   579,   440,  1128,
-     599,  1182,  1183,  1466,   715,  1551,  1129,   268,   827,  -113,
-     442,  1191,  1430,   557,   558,   859,   217,   188,   216,     8,
-       9,    10,    11,    12,   374,   173,   850,   324,   183,    64,
-      43,   252,  1566,   876,   473,   268,   340,   308,   308,  1247,
-      57,   268,   837,  1251,   626,   571,   840,   412,    31,   559,
-     560,   343,   484,   391,    46,    47,   216,   443,   494,   501,
-     495,   216,   864,    78,   877,   115,   644,   857,    78,   392,
-     878,   860,   393,  1451,  1452,  1214,    34,  1170,  1172,  1184,
-    1138,   328,   328,   268,   203,   855,   431,    71,   394,  1110,
-     435,   268,   716,   626,   395,    50,   929,   217,   374,   721,
-    1200,   112,    99,    98,   736,   115,  1079,  1200,  1114,   499,
-     396,   249,    41,    42,  1148,  1259,   888,   308,   875,   115,
-     324,  1024,   308,  -291,   308,   308,  1457,   179,    51,   917,
-     610,    70,   754,  -521,   921,    98,   115,   346,  1341,   217,
-     763,   583,   923,   412,   630,  1342,   216,   150,   634,   328,
-     922,   112,   435,    98,  1026,   489,   919,   108,   924,    43,
-    1200,  -106,    41,    42,   921,  -106,   715,   191,   328,   466,
-      98,  1521,   886,    98,   753,   522,   412,  1526,   923,   254,
-    1091,   572,   572,    46,    47,   214,  1381,   161,   265,   308,
-     769,   995,  1006,    43,  1092,   473,  1094,   810,  1546,  1138,
-     626,   346,   472,  1553,   920,   621,  1197,  1097,   939,  1097,
-     602,   603,   331,   603,  1197,   473,  1332,    46,    47,   332,
-     706,   588,  1198,   473,  1334,   594,   707,   216,   935,    78,
-    1324,   626,  1333,   328,   751,  1024,   626,   812,   621,  1367,
-    1335,  1126,   626,  1368,   627,   626,   626,   626,   631,    78,
-    1382,   340,    98,   889,   716,   412,  -113,    78,  -113,   713,
-     217,    64,  -113,   -10,   626,    98,   268,   895,  1039,   216,
-     723,   112,    57,   343,  -444,   851,   724,  -113,  -113,  1037,
-     599,   733,    41,    42,   165,  1181,   810,   734,   217,  1029,
-     399,   191,   288,   217,  -445,    78,   115,   254,   330,   914,
-    1084,   553,   554,    41,    42,   750,   324,   324,   214,   231,
-    1348,   751,   929,   232,    98,   892,   236,   412,   238,    71,
-    1379,   550,   626,   940,   621,   247,    98,   551,   552,   515,
-     721,   721,  1122,  1154,   689,   412,   278,   959,   400,   401,
-     280,   402,  1044,   555,   556,   403,  1498,   118,   281,   165,
-     404,   333,   597,  1498,   408,   334,    98,   929,   115,   346,
-     405,   406,   335,   754,   754,   217,   112,   336,   141,   142,
-     480,   372,   489,   112,   324,   373,   489,    41,    42,   217,
-     377,   409,  1111,   113,    41,    42,   522,   112,   522,   108,
-     216,   522,   386,   324,   522,  1151,   973,  1429,    41,    42,
-     852,  1392,   994,   991,   974,   340,  1547,   899,   975,   572,
-    1249,   390,  1350,   751,   715,   398,   867,   626,   216,   626,
-     901,  1009,   410,   216,   626,   346,   751,   990,   603,   743,
-     427,   883,    98,   991,   739,   343,   740,  1003,  1174,   741,
-     603,   428,   747,   707,   764,   436,  1039,   743,   433,   770,
-     743,   451,   231,   604,   529,   530,   531,   443,   324,   473,
-     112,   812,   141,   142,  1245,   781,   782,   783,   784,   808,
-     579,    41,    42,  1292,  1293,  1375,   217,  1166,   532,   412,
-     533,   751,   534,   535,  1500,   473,  1501,  -368,  1376,  -397,
-    1378,   308,   462,    78,   751,   216,   751,  1383,   466,   870,
-     849,   505,   716,   751,  1169,   594,   602,   436,   463,   216,
-     191,   858,   501,   626,  1195,   704,  1171,   810,   602,    78,
-     115,   346,   914,  1447,   914,   713,   929,    70,   485,  1444,
-     524,  1467,  1514,  1571,   214,   666,   115,   751,  1515,   579,
-     917,  1548,   165,   293,  1256,  1370,   412,   509,   214,   940,
-     940,   529,   530,   531,   721,   254,   330,   412,   514,   115,
-     308,   528,   667,   561,   562,   689,   526,   919,    49,   114,
-     885,   563,   887,   751,   996,   532,   346,   533,  1115,   534,
-    1321,   716,   565,    37,   330,   412,   754,    40,    98,   929,
-     929,   231,   604,   236,    41,    42,   564,   114,   114,   705,
-      49,  1388,  1389,   489,   328,    43,   216,  1439,   991,  1533,
-    1444,  1445,    49,  1300,  1301,   566,  1303,   569,    49,   346,
-      44,   339,   934,  1308,  -441,  1310,    49,   340,   587,    46,
-      47,   694,    49,  1240,   590,    49,  1493,  1494,    49,    -3,
-     626,   626,   420,   662,   412,   214,     2,   208,     4,     5,
-       6,     7,   114,   114,   482,   330,   412,    64,   639,  1138,
-     308,  1419,  1420,   851,   834,   330,   602,   659,    57,     8,
-       9,    10,    11,    12,   777,   778,    49,   217,   668,    49,
-     143,   231,   660,   661,  1446,   663,    49,   713,  1005,   693,
-     664,    78,   665,   808,   779,   780,  1202,   670,    31,   259,
-     115,   697,  1459,   695,   820,   914,   604,  1311,  1312,  1313,
-     914,    35,   699,    36,  -239,    71,   735,    49,   748,   940,
-     785,   786,   704,   752,   959,    49,    34,   268,   959,   959,
-      49,  1349,  1351,  1352,   243,   246,  1116,   760,   813,   -12,
-     814,   524,   817,   524,   626,   343,   524,   828,   -13,   524,
-    -292,   872,   873,    43,   880,    49,    49,     8,     9,    10,
-      11,    12,   900,   902,   724,   907,   903,   910,   571,   346,
-     412,    49,   928,  -418,    -3,  1519,  1459,    46,    47,    49,
-    -525,   943,   808,   950,   964,   108,    31,  1425,    49,   340,
-     952,    49,   918,   957,   963,   965,   967,   968,   114,   969,
-     929,   970,   986,   998,   999,   689,   705,   216,  1000,  1015,
-    1016,   273,   115,   114,    34,  1017,  1018,   114,   929,  1019,
-    1020,    49,   114,   820,   604,  1021,   473,   489,  1117,   324,
-     115,   221,  1032,  -406,   308,    49,    49,    57,  -405,    37,
-    1081,  1046,    49,    40,  1083,   704,   443,  1339,   626,    49,
-      41,    42,   115,   108,   913,   704,   112,  1105,   141,   240,
-      78,    43,   112,  1104,   141,   142,   217,    41,    42,   704,
-      70,  1115,  1106,    41,    42,  1107,   818,   751,   602,  1131,
-    1113,  1123,  1124,  1125,    71,    46,    47,  1134,   849,  1130,
-     980,   929,   929,   241,  1140,   458,  1135,    49,   242,   728,
-     626,   626,  1136,  1144,   729,  1137,   743,  1164,  1144,   273,
-    1143,  1187,  1185,  1442,   308,  1186,  -293,    49,    49,  1188,
-     693,   820,  1559,     8,     9,    10,    11,    12,  1189,   705,
-    1203,  1204,  1206,   604,    49,   713,  1207,  1399,    49,   705,
-    1215,  1399,  1219,    -3,  1220,  1222,  1227,   115,  1232,   645,
-    1202,  1237,    31,   705,   108,  1235,   400,   401,  1144,   402,
-    1241,  1246,   494,   403,   217,    49,  1115,  1248,   404,   689,
-    1253,   408,  1254,  1261,  1250,    49,  1268,  1270,   405,   406,
-      34,     2,   208,     4,     5,     6,     7,  1265,   212,   222,
-    1272,  1273,  1302,    49,  1274,   666,   216,  1275,   409,    49,
-      64,    49,  1276,  1278,  1285,  1305,  1294,   268,  1295,  1306,
-     230,    57,  1323,   808,   713,  1093,   131,   918,   132,   133,
-     134,  1532,   667,  1307,  1330,   626,  1336,    41,    42,  1116,
-    1309,   646,  1317,  1338,    78,   214,   114,  1340,  1344,  1346,
-    1347,    49,  1353,  1482,  1354,   175,    35,   604,    36,    49,
-     115,  1355,  1357,    49,  1363,  1364,  1365,    49,    71,  1366,
-     114,  1377,   114,  1068,    37,  1373,   176,   177,    40,  1115,
-    1374,  1384,  1385,  1313,   115,    41,    42,   704,   704,  1393,
-     473,   115,   645,   115,  1394,   115,   442,  1395,   255,  1402,
-    1413,    57,  1405,  1414,   216,  -407,  1417,   114,   151,   340,
-     645,   373,   114,   645,   152,  1428,   108,   153,  1432,  1436,
-    1202,  1434,  1437,  1443,    78,  1531,  1448,  1202,  1438,  1453,
-     115,  1117,   115,  1368,  1116,  1458,  1454,  1455,   108,  1456,
-    1472,  1463,  1474,   443,   115,   704,   704,  1468,    71,  1476,
-    1531,  1531,   726,  1470,   730,  -294,   108,  1478,   163,  1485,
-     308,   114,     8,     9,    10,    11,    12,  1480,    49,  1486,
-     693,   705,   705,  1487,    37,  1531,  1488,    76,    40,    49,
-    1202,    49,   374,   511,  1441,    41,    42,  1499,  1144,  1144,
-    1144,    31,  1509,  1511,   418,  1513,    43,  1517,  1518,  1525,
-      49,  1540,  1541,  1545,   328,   548,   549,  1554,   918,    76,
-    1552,   720,   112,   918,   141,   142,    49,   438,   108,    34,
-      46,    47,   114,    41,    42,  1556,  1117,   446,  1562,   705,
-     705,    49,  1569,   114,    49,   114,  1570,  1116,  1221,   789,
-     787,  1322,  1520,   548,   788,  1205,   743,   224,   790,  1431,
-     473,   108,   791,  1572,   245,  1387,  1252,   473,  1403,  1226,
-    1502,    57,   908,   909,  1098,  1234,  1102,    49,    57,   931,
-     806,   114,  1139,   114,  1045,   879,   945,   114,  1112,   548,
-     164,   953,  1331,   718,    78,   114,     0,   126,   129,   130,
-       0,    78,   796,   797,   196,   521,  1328,   219,    49,    49,
-     229,   798,     0,     0,   871,     0,     0,     0,    71,     0,
-     473,     0,    49,     0,     0,    71,    37,     0,   176,   177,
-      40,    57,     0,   178,     0,    67,   119,    41,    42,  1117,
-       0,   704,  1144,  1144,   693,   354,     0,     0,     0,   704,
-     704,   704,     0,     0,    78,     2,   208,     4,     5,     6,
-       7,     0,     0,   925,   108,   927,     0,    67,     0,   458,
-       0,   256,  1505,   257,  1505,     0,     0,     0,    71,     0,
-    1483,     0,     0,   178,     0,   162,   178,     0,   108,   164,
-    1329,   215,     0,     0,     0,   108,   414,     0,     0,     0,
-       0,   234,   375,   422,     0,   223,    49,     0,     0,  1505,
-       0,  1505,     0,     0,     0,   704,     0,     0,    49,   450,
-      35,     0,    36,     0,     0,   705,  1068,     0,   164,     0,
-       0,     0,   178,   705,   705,   705,     0,     0,     0,   324,
-      76,  1534,   261,   215,     0,    76,     0,     0,   108,     0,
-    1542,   164,     0,   682,   397,     0,     0,   774,   775,   776,
-       0,   645,     0,   445,   416,   417,     0,     0,   114,   421,
-       0,   423,   424,     0,     0,   414,     0,     0,    37,   708,
-     176,   177,    40,     0,   329,     0,   215,     0,     0,    41,
-      42,    49,   261,   351,     0,   178,     0,     0,     0,   705,
-      49,     0,    49,     0,     0,     0,     0,     0,    37,   114,
-     185,   186,    40,     0,     0,   377,   521,     0,     0,    41,
-      42,   521,  1391,   407,   521,     0,     0,     0,     0,   577,
-      43,     0,    49,     0,     0,     0,     0,   581,   425,   224,
-     584,   430,   432,   646,     0,   187,   162,   215,     0,   178,
-    1049,     0,   114,     0,    46,    47,   178,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   449,   645,   375,
-       0,   452,     0,   453,     0,     0,   114,  1418,     0,   645,
-    1426,   114,   460,     0,     0,   215,     0,     0,    67,     0,
-     215,  1099,     0,   474,     0,     0,     0,     0,   898,     0,
-       0,     0,     0,   481,   414,   500,    76,     0,   422,     0,
-       0,   432,     0,     0,     8,     9,    10,    11,    12,     0,
-       0,   354,     0,     0,   178,  1465,    76,     0,     0,     0,
-    1469,   114,     0,     0,    76,     8,     9,    10,    11,    12,
-       0,   178,     0,    31,     0,   178,     0,   375,     0,     0,
-     646,     0,   354,   480,     0,     0,     0,     0,     0,     0,
-    1491,     0,     0,     0,    31,     0,     0,   981,     0,   114,
-     354,    34,    76,     0,     0,   215,     0,   261,     0,     0,
-     897,   595,     0,    49,     0,   414,     0,   623,    49,   904,
-       0,     0,    34,   906,     0,     0,     0,     0,    43,     0,
-     628,     0,     0,     0,   628,    49,     0,   261,   178,     0,
-       0,     0,     0,   753,   354,   412,     0,     0,     0,    43,
-       0,   997,    46,    47,     0,     0,     0,  1506,     0,  1506,
-       0,  1002,     0,     0,   939,     0,   602,     0,     0,     0,
-       0,     0,     0,    46,    47,  1014,  1560,     0,     0,     0,
-       0,  1049,  1560,     0,   474,     0,   215,     0,     0,     0,
-       0,     0,     0,  1560,  1506,     0,  1506,  1560,    37,   351,
-     185,   186,    40,   215,   474,     0,   577,   577,   354,    41,
-      42,     0,   474,     0,    37,   114,   185,   186,    40,     0,
-      43,     0,     0,    79,     0,    41,    42,     0,   215,     0,
-     700,     0,     0,   432,     0,   912,    43,   412,    49,     0,
-       0,     0,     0,   913,    46,    47,     0,     0,   714,     0,
-      67,   267,   354,   354,   354,    79,     0,     0,   432,     0,
-      46,    47,   432,     0,     0,     0,     0,     0,     0,     0,
-       0,   354,     0,     0,     0,     0,   801,   802,     0,     0,
-       0,   114,   114,   114,     0,     0,     0,     0,     0,   354,
-       0,   261,   351,   225,   890,   178,     0,  1298,   893,     0,
-      76,     0,     0,     0,     0,   835,     0,     0,   838,   839,
-       0,   842,     0,   844,   845,     0,     0,     0,   846,   847,
-       0,     0,     0,     0,     0,     0,    76,   178,     0,   354,
-       0,     0,     0,     0,     0,     0,     0,   799,    81,   645,
-       0,     0,     0,   178,  1089,     0,   548,     0,     0,   215,
-       0,     0,     0,     0,     0,   628,   811,     0,   178,     0,
-       0,     0,     0,    58,    58,     0,   354,     0,   830,     0,
-      81,     0,     0,     0,     0,     0,     0,   215,     0,     0,
-       0,   356,   215,  1179,  1180,     0,   595,   511,     0,     0,
-       0,   595,     0,     0,     0,    58,     0,   628,     0,     0,
-     351,   351,   351,     0,     0,     0,     0,     0,   226,     0,
-       0,     0,   354,     0,    49,    49,     0,     0,     0,   351,
-       0,     0,   354,     0,   354,   114,   114,     0,     0,   224,
-      58,     0,   354,    58,   577,     0,   354,   700,     0,   178,
-       0,  1229,  1230,     0,     0,     0,     0,     0,   474,     0,
-       0,     0,     0,     0,   215,     0,     0,     0,     0,   978,
-     979,     0,     0,   114,     0,     0,     0,     0,   215,     0,
-       0,     0,     0,     0,   474,     0,    79,   351,     0,     0,
-       0,    79,     0,     0,     0,     0,   944,     0,   500,   432,
-      37,     0,   185,   186,    40,     0,   357,     0,    76,     0,
-    1216,    41,    42,     0,    37,     0,   185,   186,    40,     0,
-       0,     0,    43,   261,   714,    41,    42,     0,     0,   976,
-       0,   349,     0,    49,   114,     0,    43,   601,   354,   602,
-       0,     0,     0,   114,     0,     0,    46,    47,     0,     0,
-       0,   912,     0,   412,     0,     0,     0,     0,    49,    49,
-      46,    47,     0,   414,     0,     0,     0,     0,     0,     0,
-     700,     0,     0,     0,     0,   215,     0,     0,     0,     0,
-     700,     0,   351,    49,   628,   225,     0,  1012,     0,   628,
-     811,     0,     0,   354,   700,     0,    58,     0,     0,     0,
-       0,    81,     0,     0,  1023,     0,    81,   536,   537,   538,
-     539,   540,   541,   542,   543,   544,   545,     0,   178,     0,
-       0,     0,     0,     0,     0,     0,    58,    37,     0,   185,
-     186,    40,     0,     0,  1100,     0,     0,  1356,    41,    42,
-       0,   546,     0,  1155,     0,  1358,  1359,  1360,     0,    43,
-       0,     0,    79,     0,   354,   354,    67,   354,   354,     0,
-    1167,     0,     0,     0,  1530,     0,   412,   356,     0,     0,
-       0,     0,    79,    46,    47,     0,     0,    76,   628,     0,
-      79,     0,     0,     0,     0,   261,   714,     0,     0,  1095,
-       0,     8,     9,    10,    11,    12,     0,     0,   356,     0,
-     226,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1406,   354,   354,     0,  1109,   356,     0,    79,     0,
-      31,     0,     0,   432,   119,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   414,     0,
-       0,   351,     0,     0,     0,     0,     0,     0,    34,     0,
-       0,     0,     0,    37,     0,   185,   186,    40,     0,     0,
-     356,     0,  1386,     0,    41,    42,     0,    81,     0,     0,
-       0,     0,     0,     0,     0,    43,   215,     0,     0,     0,
-    1257,     0,   357,     0,   595,     0,   354,    81,     0,     0,
-     601,     0,   602,     0,     0,    81,     0,   430,  1231,    46,
-      47,     0,   700,   700,     0,   351,   351,   349,     0,     0,
-       0,     0,     0,   357,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   356,  1201,     0,     0,     0,   224,
-       0,   357,     0,    81,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    76,     0,     0,     0,     0,     0,     0,    58,     0,
-     700,   700,     0,   354,     0,   354,     0,     0,   356,   356,
-     356,     0,     0,     0,     0,   357,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   356,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   354,     0,
-     349,     0,     0,     0,    88,   356,   354,   354,   354,   628,
-       0,     0,     0,     0,     0,     0,    79,   354,   354,     0,
-       0,  1503,     0,  1507,     0,     0,     0,     0,     0,     0,
-    1320,    76,     0,     0,   714,   178,    88,     0,     0,   357,
-       0,     0,    79,     0,     0,   356,     0,     0,     0,     0,
-       8,     9,    10,    11,    12,     0,     0,     0,  1536,     0,
-    1538,     0,     0,     0,   349,   215,     0,     0,     0,     0,
-       0,     0,   354,     0,   227,     0,     0,  1299,     0,    31,
-       0,     0,   356,   357,   357,   357,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   261,     0,     0,     0,    67,
-       0,     0,   357,  1567,     0,  1568,     0,    34,   349,   349,
-     349,   700,    37,   714,   185,   186,    40,   119,  1575,  1576,
-     357,     0,     0,    41,    42,     0,     0,   349,   356,     0,
-       0,    81,     0,     0,    43,     0,     0,     0,   356,     0,
-     356,     0,   354,     0,     0,   225,   700,     0,   356,   912,
-       0,   412,   356,     0,   700,   700,   700,    81,    46,    47,
-     357,     0,   364,   215,     0,   351,   351,     0,     0,     0,
-       0,     0,     0,     0,     8,     9,    10,    11,    12,  1201,
-       0,     0,     0,     0,     0,   349,     0,     0,     0,     0,
-       0,    76,     0,     0,     0,     0,     0,   357,    76,     0,
-       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-       0,   178,   119,     0,    79,     0,     0,     0,     0,     0,
-     700,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    34,     0,     0,     0,     0,    37,     0,   185,   186,
-      40,     0,     0,   357,   356,     0,     0,    41,    42,     0,
-       0,    76,     0,   357,     0,   357,     0,    88,    43,     0,
-     226,     0,    88,   357,     0,     0,     0,   357,     0,     0,
-       0,     0,     0,  1530,     0,   412,     0,     0,     0,     0,
-     349,     0,    46,    47,     0,     0,     0,     0,   349,     0,
-     351,     0,     0,     0,     0,     0,     0,     0,     0,   356,
-       0,   169,     0,   174,     0,     0,   180,   181,   182,     0,
-     184,     0,     0,     0,     0,   119,     8,     9,    10,    11,
-      12,     0,     0,     0,     0,   235,     0,     0,     0,    81,
-       0,     0,     0,     0,     0,     0,     0,   250,   251,  1201,
-       0,     0,     0,     0,     0,    31,  1201,     8,     9,    10,
-      11,    12,     0,     0,    58,     0,   227,     0,     0,   357,
-     356,   356,     0,   356,   356,     0,     0,     0,     0,     0,
-       0,     0,     0,    34,     0,     0,    31,     0,    37,     0,
-     185,   186,    40,    79,     0,     0,     0,     0,     0,    41,
-      42,     0,     0,     0,     0,     0,     0,     0,     0,  1201,
-      43,     0,     0,     0,    34,     0,  1555,     0,     0,    37,
-       0,   185,   186,    40,   357,   187,     0,     0,   356,   356,
-      41,    42,    58,    88,    46,    47,     0,     0,     0,     0,
-       0,    43,     0,     8,     9,    10,    11,    12,   364,   349,
-       0,     0,     0,    88,     0,     0,   267,     0,     0,     0,
-       0,    88,     0,     0,     0,    46,    47,     0,     0,     0,
-       0,     0,    31,     0,     8,     9,    10,    11,    12,   364,
-       0,     0,     0,     0,     0,   357,   357,     0,   357,   357,
-       0,     0,     0,     0,     0,     0,     0,   364,     0,    88,
-      34,     0,   356,    31,     0,    37,     0,     0,    81,    40,
-       0,     0,     0,   349,   349,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,    34,     0,    58,     0,     0,    37,     0,     0,     0,
-      40,   364,    44,   357,   357,   225,     0,    41,    42,     0,
-       0,    46,    47,     0,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,    79,     0,     0,
-       0,     0,     0,   720,     0,     0,     0,     0,     0,   356,
-       0,   356,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,   592,     0,   600,   364,     0,     0,     0,     0,
-       0,     0,     0,    31,   356,   624,   625,   357,     0,     0,
-       0,     0,   356,   356,   356,     0,     0,     0,     0,     0,
-       0,     0,     0,   356,   356,     0,     0,     0,     0,     0,
-       0,    34,     0,     0,     0,     0,     0,    79,     0,   364,
-     364,   364,     0,     0,     0,     0,     0,     0,     0,     0,
-     226,     0,     0,     0,     0,     0,     0,     0,   364,     0,
-     284,   285,     0,   286,     0,     0,     0,     0,     0,     0,
-       0,     0,    81,     0,    58,    58,   364,     0,   356,     0,
-       0,     0,     0,     0,   357,     0,   357,    88,     0,   287,
-       0,     0,     0,     0,     0,   288,     0,    58,     0,   289,
-       0,     0,   290,   291,   292,   293,    41,    42,     0,   294,
-     295,     0,     0,    88,     0,    58,   364,    43,     0,   357,
-       0,     0,     0,     0,     0,     0,     0,   357,   357,   357,
-       0,     0,   296,     0,   380,     0,     0,   381,   357,   357,
-       0,    46,    47,   298,   299,   300,   301,     0,   356,     0,
-       0,     0,    81,   364,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   349,   349,     0,     0,     0,     0,     0,
-       0,     0,    58,     0,     0,     0,     0,    58,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   357,     0,     0,     0,    79,     0,   364,
-       0,     0,     0,     0,    79,     0,     0,     0,     0,   364,
-      58,   364,     0,     0,     0,     0,   227,     0,     0,   364,
-       0,     0,     0,   364,     0,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,  -295,     0,    26,    27,    28,     0,     0,
-       0,     0,   213,     0,    31,     0,     0,    79,     0,     0,
-       0,     0,   233,   357,   237,     0,   239,     0,     0,     0,
-       0,     0,     0,   248,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,     0,    88,     0,    37,   349,   337,
-     338,    40,     0,  -295,     0,     0,     0,     0,    41,    42,
-       0,     0,     0,     0,   213,     0,   237,   239,   248,    43,
-       0,     0,    81,    58,     0,   364,     0,     0,     0,    81,
-       0,     0,     0,     0,   635,     0,   339,     0,     0,   128,
-     128,   128,     0,    46,    47,     0,     0,    58,     0,     0,
-       0,     0,   284,   285,    58,   286,     0,   213,   932,     0,
-     933,     0,     0,     0,     0,     0,     0,   936,   937,     0,
-       0,     0,   942,     0,     0,     0,     0,     0,     0,     0,
-     364,   287,    81,   167,   947,     0,     0,   288,     0,   951,
-       0,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-     220,   294,   295,     0,     0,     0,     0,    58,     0,    43,
-       0,     0,     0,   128,     0,   128,     0,     0,   213,   987,
-     237,   239,   248,     0,   296,     0,   380,     0,     0,     0,
-       0,     0,   792,    46,    47,   298,   299,   300,   301,     0,
-     277,   364,   364,     0,   364,   364,     0,     0,   167,     0,
-       0,     0,   274,     0,     0,     0,   213,     0,     0,     0,
-       0,   213,     0,     0,    88,     0,     0,     0,   508,     0,
-     510,   513,     0,     0,     0,     0,   498,     0,   516,   517,
-       0,   167,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   370,   510,   510,     0,   376,   128,     0,     0,   364,
-     364,     0,     0,     0,   128,     0,   128,   128,     0,     0,
-       0,   128,     0,   128,   128,     0,     0,     0,     0,     0,
-    1033,  1034,  1035,  1036,   213,  1038,     0,     0,     0,     0,
-     510,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1082,     0,     0,   167,     0,   213,     0,     0,     0,
-       0,   237,   239,     0,     0,  1088,   220,     0,     0,   248,
-       0,     0,     0,     0,     0,     0,   510,     0,     0,     0,
-       0,     0,     0,   364,   167,     0,     0,     0,     0,     0,
-       0,     0,     0,   128,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1108,     0,     0,     0,   376,
-       0,     0,   213,     0,     0,     0,   167,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   227,     0,     0,     0,
-     213,     0,     0,     0,     0,   213,     0,   213,     0,   525,
-       0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
-       0,   167,  1141,     0,   213,     0,     0,   213,   213,  1149,
-     364,     0,   364,     0,  1153,   213,     0,     0,     0,  1157,
-       0,  1158,     0,     0,     0,  1160,     0,  1161,  1162,   213,
-       0,  1165,     0,     0,     0,     0,   213,     0,     0,   598,
-    1177,     0,     0,     0,   622,   364,     0,     0,     0,     0,
-       0,     0,     0,   364,   364,   364,     0,     0,  1192,  1193,
-       0,     0,     0,     0,   364,   364,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
-       0,     0,     0,     0,     0,  1223,     0,     0,  1225,     0,
-       0,     0,     0,     0,   510,   510,   510,   510,   510,   510,
-     510,   510,   510,   510,   510,   510,   510,   510,   510,   510,
-     510,   510,     0,     0,     0,     0,     0,     0,     0,   364,
-     167,   167,     0,     0,     0,     0,     0,   370,     0,     0,
-       0,  1239,     0,     0,     0,     0,     0,  1243,  1244,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   525,  1255,
-     213,     0,     0,     0,     0,     0,     0,     0,     0,  1262,
-       0,     0,  1266,     0,  1267,     0,     0,  1269,     0,     0,
-       0,     0,     0,     0,     0,     0,   717,     0,   213,     0,
-    1277,     0,     0,   213,     0,     0,     0,     0,   167,   364,
-       0,     0,     0,  1284,     0,  1286,  1287,  1288,  1289,     0,
-     525,     0,   525,     0,     0,   525,     0,   167,   525,     0,
-       0,  1296,     0,  1297,     0,     0,     0,   174,     0,     0,
-     370,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
-       0,   510,     0,     0,     0,    88,  1325,  1326,   128,   128,
-       0,     0,     0,     0,     0,   213,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   213,
-       0,     0,   167,     0,     0,     0,     0,   128,     0,     0,
-     128,   128,     0,   128,   370,   128,   128,     0,   816,   498,
-     128,   128,     0,     0,     0,     0,     0,     0,    88,  1361,
-    1362,     0,     0,     0,   510,     0,     0,     0,     0,  1372,
-       0,     0,     0,     0,   598,     0,     0,     0,     0,   598,
-       0,     0,     0,     0,     0,     0,     0,     0,   370,   370,
-     370,     0,     0,     0,     0,     0,   510,     0,     0,  1022,
-       0,     0,     8,     9,    10,    11,    12,   370,     0,     0,
-       0,     0,     0,     0,   213,     0,     0,     0,     0,     0,
-    1404,     0,   158,     0,     0,     0,   213,     0,     0,   284,
-     285,    31,   286,  1409,     0,  1410,  1411,  1412,     0,   525,
-       0,     0,     0,     0,     0,   213,     0,  1416,     0,     0,
-       0,     0,     0,     0,     0,     0,  1427,     0,   287,    34,
-       0,     0,     0,     0,   288,   370,     0,   941,   289,     0,
-     253,   290,   291,   292,   293,    41,    42,     0,   294,   295,
-     258,     0,     0,  1450,     0,     0,    43,     0,     0,     0,
-       0,   128,   128,     0,     0,     0,     0,     0,     0,     0,
-       0,   296,   717,   380,     0,     0,     0,     0,     0,     0,
-     345,    47,   298,   299,   300,   301,     0,   510,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1489,  1490,
-       0,     0,     0,     0,     0,     0,   158,     0,     0,     0,
-       0,  1495,     0,     0,     0,     0,     0,     0,  1495,     0,
-     387,     0,     0,     0,     0,     0,     0,     0,     0,   213,
-     370,     0,   510,     0,   622,     0,     0,     0,   370,     0,
-       0,     0,     0,   419,     0,     0,     0,     0,     0,     0,
-       0,  1529,     0,     0,     0,  1535,     0,   434,     0,     0,
-       0,   213,     0,     0,     0,     0,   439,     0,     0,     0,
-     510,     0,     0,     0,     0,     0,   447,     0,     0,     0,
-       0,     0,     0,   510,  1557,     0,  1558,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   213,     0,     0,
-       0,   465,     0,     0,     0,     0,   475,     0,   213,     0,
-       0,     0,     0,     0,  1573,  1574,     0,     0,     0,   483,
-       0,   128,  1577,  1578,   510,   493,   128,   497,     0,     0,
-       0,     0,     0,     0,   717,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   527,     0,     0,     0,     0,   525,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   284,   285,     0,   286,     0,     0,
-       0,     0,     0,   167,     0,     0,     0,     0,     0,     0,
-     213,     0,     0,     0,     0,     0,   586,     0,     0,   370,
-       0,   591,     0,   287,   213,     0,     0,     0,     0,   288,
-       0,   510,     0,   289,     0,     0,   290,   291,   292,   293,
-      41,    42,     0,   294,   295,     0,     0,     0,     0,     0,
-     636,    43,     0,     0,   637,   638,     0,   640,     0,     0,
-       0,     0,   598,     0,   652,   653,   507,   654,   655,     0,
-     656,     0,   657,     0,     0,    46,    47,   298,   299,   300,
-     301,     0,     0,   370,   370,     0,     0,     0,     0,   586,
-       0,     0,     0,     0,   510,   510,     0,   672,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   213,     0,     0,     0,
-     128,     0,   683,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   525,     0,     0,     0,     0,   709,     0,
-       0,     0,     0,     0,   712,     0,     0,  -520,     0,   465,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-      29,     0,     0,    30,     0,   749,    31,    32,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     768,     0,   717,     0,   213,     0,     0,     0,     0,     0,
-       0,    33,     0,     0,    34,     0,    35,     0,    36,    37,
-       0,    38,    39,    40,     0,     0,     0,     0,     0,     0,
-      41,    42,     0,     0,     0,     0,     0,     0,   795,     0,
-       0,    43,   128,     0,   220,     0,     0,   805,     0,   342,
-     365,     0,     0,     0,   807,     0,    44,     0,    45,     0,
-     815,     0,     0,     0,     0,    46,    47,     0,     0,   829,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   717,     0,   415,     0,     0,     0,     0,     0,     0,
-     415,     0,     0,     0,     0,   510,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     869,     0,     0,   510,     0,     0,     0,     0,     0,     0,
-       0,   284,   285,     0,   286,     0,     0,     0,     0,     0,
-       0,     0,     0,   370,   370,     0,     0,     0,     0,     0,
-       0,     0,   220,     0,     0,     0,   815,     0,     0,     0,
-     287,     0,     0,     0,   911,     0,   288,     0,     0,     0,
-     289,     0,   415,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,   253,   510,   510,     0,     0,
-       0,     0,     0,   296,     0,   948,   949,     0,     0,     0,
-       0,     0,    46,    47,   298,   299,   300,   301,     0,   966,
-       0,     0,     0,     0,     0,     0,   415,     0,     0,     0,
-       0,     0,     0,     0,   415,   582,     0,   415,   585,     0,
-     988,     0,   989,     0,     0,     0,   993,     0,   365,     0,
-       0,     0,   614,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   370,     0,
-     213,   632,     0,     0,   342,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,  -295,     0,    26,    27,    28,     0,     0,
-       0,   415,     0,     0,    31,   415,     0,     0,     0,     0,
-       0,  1027,     0,     0,     0,     0,     0,     0,  1028,     0,
-       0,     0,     0,     0,     0,     0,   525,     0,   525,     0,
-       0,  1030,    34,  1031,     0,     0,   365,    37,     0,   337,
-     338,    40,     0,  -295,     0,     0,     0,  1043,    41,    42,
-       0,     0,     0,     0,  1047,     0,     0,     0,     0,    43,
-       0,     0,     0,   525,   322,   525,  1085,     0,     0,  1086,
-       0,     0,     0,     0,   347,     0,   339,     0,     0,     0,
-       0,     0,   415,    46,    47,   365,   383,   383,     0,     0,
-       0,     0,     0,   167,   207,     2,   208,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,   415,     0,     0,     0,   342,   365,
-      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   591,     0,
-       0,     0,     0,     0,     0,     0,     0,   322,    34,     0,
-      35,     0,    36,     0,     0,   209,    39,     0,     0,     0,
-       0,     0,     0,   415,   415,     0,     0,     0,     0,     0,
-       0,   479,     0,     0,  1159,    43,     0,     0,     0,     0,
-       0,     0,   809,   365,     0,     0,     0,     0,     0,     0,
-       0,     0,   210,   614,     0,   614,   614,     0,     0,    46,
-      47,     0,   614,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   848,   365,     0,     0,     0,     0,   365,     0,
-       0,     0,     0,     0,     0,     0,     0,   365,   365,   365,
-       0,     0,   527,     0,     0,     0,     0,     0,  1224,     0,
-       0,     0,     0,     0,     0,     0,   365,     0,     0,     0,
-       0,   415,   891,     0,     0,   415,   894,     0,     0,     0,
-       0,     0,   896,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1236,     0,     0,     0,     0,  1238,     0,     0,
-       0,   415,     0,     0,     0,  1242,     0,   383,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   365,   614,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1271,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1279,     0,     0,  1280,     0,  1281,     0,
-     342,   365,     0,     0,     0,   415,   415,     0,     0,     0,
-       0,     0,  1290,  1291,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1304,     0,     0,     0,     0,     0,
-       0,   711,   284,   285,     0,   286,     0,     0,     0,     0,
-       0,   415,     0,     0,     0,     0,     0,     0,     0,   365,
-       0,     0,     0,     0,     0,     0,   809,   365,     0,     0,
-     614,   287,   614,     0,     0,     0,     0,   288,     0,     0,
-     745,   289,   614,  1345,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,   762,     0,     0,     0,     0,   745,    43,
-       0,   745,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   772,   773,   296,     0,   380,     0,     0,     0,
-       0,   761,     0,    46,    47,   298,   299,   300,   301,     0,
-       0,     0,     0,     0,     0,   794,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   803,     0,     0,     0,     0,
-       0,     0,   347,     0,     0,   809,     0,   762,     0,  1396,
-       0,  1397,   342,   365,   415,     0,   415,     0,     0,     0,
-     415,     0,     0,     0,     0,  1407,     0,  1408,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   614,   614,     0,     0,  1415,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   868,     0,     0,     0,
-       0,  1433,  1435,     0,     0,   383,     0,     0,   365,     0,
-       0,     0,  1440,     0,     0,  1242,     0,     0,   415,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,  -295,  1464,     0,
-     415,  1156,     0,     0,     0,     0,     0,  1471,    31,     0,
-    1473,   365,  1475,  1477,  1479,     0,     0,   415,  1168,     0,
-     614,   614,  1173,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   365,   365,     0,     0,    34,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  -295,     0,     0,
-       0,     0,     0,     0,  1510,     0,  1512,     0,  1242,     0,
-       0,     0,     0,     0,     0,   762,     0,   972,     0,     0,
-       0,     0,     0,     0,  1524,     0,     0,   983,     0,     0,
-       0,     0,     0,     0,   992,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   415,     0,   415,     0,     0,
-       0,     0,   415,     0,     0,     0,     0,     0,     0,     0,
-       0,   614,     0,     0,     0,     0,     0,     0,     0,  1175,
-       0,     0,     8,     9,    10,    11,    12,  1010,  1011,     0,
-       0,   347,     0,     0,     0,     0,   809,   415,  1258,     0,
-       0,     0,     0,     0,     0,   347,     0,     0,     0,   284,
-     285,    31,   286,     0,     0,     0,     0,     0,     0,     0,
-       0,   365,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   287,    34,
-       0,     0,     0,     0,   288,  1041,     0,     0,   289,   383,
-       0,   290,   291,   292,   293,    41,    42,     0,   294,   295,
-       0,     0,     0,     0,     0,     0,    43,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   296,   342,   380,     0,     0,     0,   347,     0,     0,
-    1176,    47,   298,   299,   300,   301,     0,     0,     0,     0,
-     365,     2,   208,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,   322,    26,    27,    28,
-       0,     0,     0,     0,   284,   285,    31,   286,     0,     0,
-       0,     0,  1132,  1133,     0,     0,     0,     0,     0,     0,
-       0,     0,   365,   365,     0,     0,   383,     0,     0,     0,
-       0,     0,   983,   287,    34,  1147,    35,   745,    36,   288,
-       0,    38,    39,   289,     0,     0,   290,   291,   292,   293,
-      41,    42,     0,   294,   295,     0,     0,     0,  1163,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,  1178,
-       0,   284,   285,     0,   286,     0,   296,     0,   344,     0,
-       0,     0,     0,   761,     0,   345,    47,   298,   299,   300,
-     301,   383,     0,  1196,     0,     0,     0,     0,     0,     0,
-     287,     0,     0,     0,     0,     0,   288,     0,   983,   983,
-     289,     0,     0,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,     0,     0,     0,     0,     0,     0,    43,  1228,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   296,     0,   380,     0,   365,   980,     0,
-       0,     0,    46,    47,   298,   299,   300,   301,     0,     0,
-       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,   983,     0,    26,    27,
-      28,    29,     0,     0,    30,     0,     0,    31,    32,     0,
-       0,     0,     0,     0,     0,   868,     0,     0,     0,     0,
-       0,   284,   285,     0,   286,     0,     0,     0,     0,     0,
-    1282,  1283,    33,     0,     0,    34,     0,    35,     0,    36,
-      37,     0,    38,    39,    40,     0,     0,   415,     0,     0,
-     287,    41,    42,     0,     0,     0,   288,     0,     0,     0,
-     289,     0,    43,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,   415,   415,     0,     0,     0,    44,    43,    45,
-       0,     0,     0,  -524,     0,     0,    46,    47,     0,     0,
-       0,     0,     0,   296,     0,   380,     0,   415,     0,     0,
-       0,     0,    46,    47,   298,   299,   300,   301,     0,     0,
-     983,     0,     1,     2,   208,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,    29,     0,     0,    30,   284,   285,    31,  1050,
-    1051,     0,  1052,     0,     0,  1053,  1054,  1055,  1056,  1057,
-    1058,  1059,  1060,     0,     0,     0,  1061,     0,     0,     0,
-    1062,  1063,     0,    33,  1390,   287,    34,   745,    35,     0,
-      36,  1064,     0,    38,    39,   289,     0,     0,   290,   291,
-     292,   293,    41,    42,     0,   294,   295,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   296,     0,
-    1065,     0,     0,   173,     0,     0,     0,    46,    47,   298,
-     299,   300,   301,     0,     0,     0,     0,  1066,     0,     0,
-       0,  -130,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1449,     0,     0,     0,     0,     0,     0,     1,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
-       0,    30,   284,   285,    31,   286,     8,     9,    10,    11,
+      49,   114,   453,   399,   428,    69,   953,    98,   150,   151,
+     152,   770,   971,   400,   115,   972,   973,   407,   261,   401,
+     268,   498,   383,   384,   743,   628,   604,   402,   440,   632,
+     403,   609,    49,   404,   848,   405,  1148,    69,  1182,    98,
+     755,   596,   831,   148,   408,  1078,  1140,   980,   872,    49,
+     726,   670,    77,    50,   731,  1077,   162,   823,   410,   798,
+     830,   153,   824,   187,   825,   819,   210,   144,   342,    49,
+     194,   679,   820,   217,   821,   505,   227,   924,   167,   683,
+     822,  1206,   220,   399,    77,    50,  1192,   928,    31,  1396,
+     861,   861,   861,   400,   674,   676,   177,   407,   154,   401,
+    1180,  1181,    63,  1460,   155,   425,   114,   402,  1198,   861,
+     403,  1215,  1216,   404,   114,   405,    31,   267,   272,   834,
+    1210,   863,   864,   714,   408,   841,    31,   281,   566,  -234,
+    -234,  1261,   475,   477,    63,   447,    31,  1188,   409,   882,
+     203,  1207,    31,   167,  1316,  1208,   177,   307,   148,   177,
+     471,   150,   151,   152,   460,   162,   114,   345,   253,  1262,
+     411,   210,   730,   567,  1189,   721,  1211,   861,   373,   577,
+     971,   123,    31,   972,   973,   578,   327,  1460,   715,  1417,
+    1418,   745,   292,   476,   819,   282,   187,   187,   411,  1258,
+     204,   820,  1479,   821,   162,   177,   419,   936,   411,   724,
+    -234,   142,   267,   527,   153,  1209,   481,   918,   411,   111,
+      49,   956,   832,  1317,   601,  1245,   527,   162,   668,  1249,
+      41,    42,   210,   111,  1197,   140,   141,   169,   527,   443,
+     145,   150,   151,   152,    41,    42,   665,   527,   954,   436,
+     307,   154,   839,  1125,   601,  1182,   802,   155,   762,  1419,
+     808,   170,    49,   588,   242,   245,  1085,    69,   177,    98,
+     272,   861,   868,   666,  1399,   272,   267,   267,  1024,   327,
+     117,  1506,   114,   823,   162,   862,   862,   862,   824,  1464,
+     825,   819,  1150,   342,   609,   999,  1023,   463,   820,  1088,
+     821,  1002,   857,  1490,   862,   307,  1011,   735,  1182,   657,
+     476,   436,  1092,   124,    77,    50,  1535,   307,  1537,    77,
+     665,   471,   177,   835,  1341,   903,   596,   838,   160,   177,
+    1189,   596,   568,   571,  1548,  1417,  1418,   672,   148,  1212,
+    1101,   471,   377,   677,   834,   373,   167,   666,   855,   471,
+    1519,   114,   858,   143,  1559,   345,  1524,  1124,   378,   602,
+     620,  1563,   862,    31,    63,   556,   557,   510,   111,   472,
+    1180,  1181,  1198,  1549,   625,   527,   147,  1544,   625,    41,
+      42,   114,  1551,   111,   598,   259,   156,  1464,   831,   547,
+     548,   178,  1464,   160,    41,    42,   172,   177,  1078,   714,
+    1564,   558,   559,   736,   823,  1428,   267,   768,  1077,   824,
+     737,   825,  1464,  1126,   177,   684,   187,  -122,   177,  1464,
+    1127,   578,  1346,   373,  1403,   457,   323,   547,   182,  -122,
+    -122,   848,  1182,   202,   267,   339,   307,   307,  -122,   387,
+     267,   262,   390,   625,   263,  -122,   392,   342,     8,     9,
+      10,    11,    12,  -290,   715,   388,   862,   111,   391,    70,
+    1449,  1450,   393,   547,   114,   327,   327,   549,    41,    42,
+     893,   394,  1339,   550,   551,    56,   116,    31,  1004,  1340,
+      77,   177,   267,   808,   498,   430,   919,   395,  1379,   434,
+     267,    70,   625,   921,    49,  1455,  1348,   373,   720,    69,
+      77,    98,   920,  1136,   114,    34,   919,    56,    77,   922,
+    1146,   873,   248,   921,  1112,  1022,   307,   251,   114,   323,
+     609,   307,  1089,   307,   307,   213,  1247,  -520,   915,  1090,
+     472,   753,  1198,   327,   851,   114,   345,   886,   852,  1198,
+     957,   211,  1168,  1170,   221,   253,    77,    50,  1257,  1195,
+     472,   434,   327,   439,   488,   917,   264,  1024,   472,   330,
+     714,   645,  1195,  1330,   111,  1196,   140,   239,   884,  1027,
+     331,   287,   808,   -10,   521,    41,    42,  1332,  1322,  1331,
+     571,   571,    41,    42,  1377,   471,   160,  -443,   307,  1290,
+    1291,   853,  1198,  1333,   712,   854,    63,   750,   853,   625,
+     345,   240,  1108,  -469,   620,   810,   241,   483,   514,  -444,
+     602,   933,   602,  1380,   500,   715,   570,   327,   411,   277,
+     587,   874,  1136,   279,   593,    45,    46,   918,   280,  1022,
+     625,   772,   773,   774,  -469,   625,  -469,   620,   177,   332,
+    -469,   625,   333,   626,   625,   625,   625,   630,  1496,  -105,
+     339,   371,   875,  -105,   643,  1496,   111,   334,   876,   849,
+     705,  1427,  1109,   625,   598,   267,   706,    41,    42,   342,
+     177,   722,   725,   111,   729,   140,   141,   723,   493,  1179,
+     494,   442,   178,  1035,    41,    42,   177,   335,   215,     2,
+     207,     4,     5,     6,     7,   114,   732,   441,   912,   629,
+     372,   177,   733,   633,  1082,   323,   323,   579,  1545,   411,
+     727,    70,  1365,   596,   376,   728,  1366,   107,   107,   749,
+    1120,   625,   938,   620,   389,   750,   897,    56,   385,   720,
+     720,   397,   750,   688,  1042,   519,   899,   399,   409,   988,
+     215,   582,   750,   411,    77,   989,   117,   400,  1498,   107,
+    1499,   426,   407,   401,    35,   427,    36,   114,   345,  1001,
+    1243,   402,   753,   753,   403,   706,   578,   404,   432,   405,
+      77,   488,  1373,   323,  -122,   488,  -122,   450,   750,   408,
+    -122,  -367,   177,   215,  -396,   521,   107,   521,   253,   329,
+     521,  1374,   323,   521,   472,  -122,  -122,   750,   971,   504,
+    1444,   972,   973,   808,   339,  1546,  1390,   571,   714,   213,
+    1376,   779,   780,   781,   782,   625,   750,   625,  1457,  1007,
+     472,   461,   625,   345,   869,   752,   602,   411,   810,  1172,
+     342,  1381,   484,  1445,    45,    46,   230,   750,   602,  1442,
+     231,   979,  1465,   235,   215,   237,   462,    37,   750,   175,
+     176,    40,   246,   111,   292,   140,   141,   323,    41,    42,
+     712,   552,   553,   715,    41,    42,   673,   675,   806,   111,
+     508,   140,   141,   923,   130,   925,   131,   132,   133,   457,
+      41,    42,   215,   513,   372,    41,    42,   215,   937,   307,
+     601,  1517,  1457,   527,    69,   244,  1512,    45,    46,   847,
+     525,   887,  1513,   411,   593,    37,  1193,   175,   176,    40,
+     856,   625,   253,   329,   411,   164,    41,    42,   114,   345,
+     912,   890,   912,   411,   562,    37,   957,   175,   176,    40,
+     957,   957,   213,   665,   114,   563,    41,    42,   915,  1368,
+     565,    77,   715,    70,   554,   555,   519,   938,   938,   564,
+     177,   519,   720,   568,   519,   850,   338,   114,   307,    56,
+     666,  1152,   376,   411,   688,   917,  -440,    48,   113,   107,
+    1113,   865,   215,   738,   345,   739,   589,  1569,   740,   230,
+     164,   746,   586,   578,   753,   658,   881,   327,   419,   661,
+     411,    63,   560,   561,    37,   163,   113,   113,    40,    48,
+      -3,  1164,   488,   411,   659,    41,    42,   791,   638,   195,
+      48,  1167,   218,   601,   660,   228,    48,   345,   481,   329,
+     411,   712,   662,    37,    48,   663,   339,    40,  1238,   664,
+      48,    43,  1531,    48,    41,    42,    48,   667,   625,   625,
+      45,    46,   832,   329,   601,  1169,   849,   601,   258,  1337,
+     113,   113,   645,   215,  1309,  1310,  1311,   669,   307,  1047,
+     816,   693,   601,  1200,   528,   529,   530,   500,   694,    45,
+      46,  1347,  1349,  1350,    48,   696,   435,    48,  1254,   698,
+     411,   442,  1136,  1095,    48,  1095,  1003,  -238,   531,   547,
+     532,   806,   533,   534,   163,   215,   992,   989,   114,   734,
+    1097,   750,   994,   912,   329,   411,   -12,   374,   912,   747,
+      77,  1386,  1387,  1437,   989,    48,   751,   938,   230,   759,
+     235,  1442,  1443,    48,   811,   267,  1491,  1492,    48,   812,
+     510,  1417,  1418,   163,   775,   776,   783,   784,   435,  1397,
+     342,   815,   625,  1397,   777,   778,   826,     2,   207,     4,
+       5,     6,     7,    48,    48,   -13,   163,   870,   213,   645,
+     472,   523,   871,   878,   528,   529,   530,   345,   444,    48,
+     898,   900,   213,   164,   901,   908,   955,    48,   905,  -417,
+     806,   926,  -524,   941,   950,   948,    48,   339,   531,    48,
+     532,   723,   533,  1319,   961,   963,   113,   962,   966,   965,
+     967,   107,   968,   688,   996,   984,   997,   998,   230,   272,
+     114,   113,    35,  1013,    36,   113,   215,  1014,  1015,    48,
+     113,  1016,    97,   220,  1017,   488,  1115,   323,   114,  1018,
+    1019,  1030,   307,    48,    48,  -405,  -404,    69,  1044,  1079,
+      48,  1081,  1102,  1103,   215,  1480,   625,    48,   911,   215,
+     114,  1104,  1105,   750,    97,  1111,  1121,  1122,  1123,  1217,
+    1047,  1132,  1141,  1113,  1128,   149,   978,   177,   213,   712,
+    1133,    97,  1134,  1135,   374,    -3,     2,   207,     4,     5,
+       6,     7,  1138,  1162,    77,   190,   847,  1183,    97,  1185,
+    1184,    97,  1186,  1187,  1201,    48,  1202,  1204,   625,   625,
+    1205,  1213,  1218,  1225,  1220,   229,  1230,   272,  1440,    -3,
+    1557,  1235,   307,  1233,    37,    48,    48,  1200,    40,  1239,
+     692,   215,  1244,  1246,   493,    41,    42,     8,     9,    10,
+      11,    12,    48,  1251,    63,   215,    48,  1248,    70,  1259,
+    1252,    35,  1263,    36,  1266,   114,  1268,   644,   712,  1270,
+    1271,   719,   374,  1272,    56,   399,    31,  1273,  1113,  1274,
+      45,    46,  1276,    48,    77,   400,  1283,   688,  1292,   407,
+      97,   401,   523,    48,   523,  1293,  1296,   523,  1300,   402,
+     523,  1303,   403,    97,    34,   404,  1321,   405,  1328,  1304,
+    1305,    48,  1307,   665,  1315,  1334,   408,    48,  1336,    48,
+    1338,  1066,  1344,  1342,   216,   267,  1345,  1351,   398,   190,
+    1352,   806,  1353,  1355,   472,  1361,  1530,  1362,  1363,  1364,
+     666,   243,  1114,   625,  1371,  1372,   570,  1375,   411,  1382,
+    1383,   215,    97,  1311,   113,    45,    46,  1391,  1392,    48,
+    1393,  1403,  1400,   177,    97,  1411,  1412,    48,   114,  -406,
+    1430,    48,  1415,  1426,  1432,    48,   216,  -291,   113,  1434,
+     113,  1113,  1435,  1441,     8,     9,    10,    11,    12,   442,
+    1451,  1446,   114,  1436,    97,  1452,  1453,  1200,  1454,   114,
+     644,   114,  1456,   114,  1200,  1366,  1470,  1461,   479,  1466,
+    1472,  1474,  1476,    31,  1468,   113,  1478,   339,   644,   216,
+     113,   644,  1483,   150,   151,   152,  1484,    70,  1485,  1486,
+    1497,  1507,  1509,  1529,  1523,  1511,  1515,  1516,   114,  1115,
+     114,    34,  1538,    56,    77,  1539,  1543,  1550,  1552,  1554,
+    1560,    77,   114,  1567,  1568,  1219,   785,  1200,  1529,  1529,
+     786,   788,   787,  1320,  1518,  1429,   162,  1570,   307,   113,
+      97,   692,   789,  1385,  1250,  1401,    48,  1500,  1096,  1224,
+     216,   906,   907,  1529,  1232,   214,   929,    48,  1100,    48,
+     373,   603,  1137,  1203,   472,   233,  1043,   327,   877,  1110,
+    1329,   472,   804,   943,    77,   717,   794,   951,    48,   795,
+      37,   796,   184,   185,    40,     0,   107,     0,   216,     0,
+       0,    41,    42,   216,    48,     0,     0,     0,     0,     0,
+     113,     0,     0,     0,  1115,     0,     0,   214,     0,    48,
+       0,   113,    48,   113,     0,     0,     0,   910,   190,   411,
+       0,     0,   215,     0,   472,   911,    45,    46,     0,     0,
+       0,  1298,  1299,     0,  1301,    66,   118,     0,     0,     0,
+       0,  1306,     0,  1308,     0,    48,     0,     0,   213,   113,
+     214,   113,     0,     0,   107,   113,     0,     8,     9,    10,
+      11,    12,     0,   113,   211,   221,     0,    66,     0,     0,
+       0,    70,  -292,     0,     0,     0,    48,    48,   216,     8,
+       9,    10,    11,    12,   161,     0,    31,    56,     0,     0,
+      48,    37,     0,   184,   185,    40,    97,     0,     0,     0,
+     603,     0,    41,    42,   222,  1114,     0,  1115,    31,     0,
+       0,   214,     0,     0,    34,     0,     0,     0,  1439,    37,
+       0,   184,   185,    40,     0,    75,     0,     0,   186,     0,
+      41,    42,     0,     0,  1066,     0,    34,    45,    46,     0,
+    1503,   260,  1503,     0,     0,     0,   442,     0,     0,   214,
+       0,    70,   174,     0,   214,   107,   600,    75,   601,   216,
+       0,     0,   441,     0,     0,    45,    46,    56,     0,   499,
+       0,     0,     0,    48,     0,     0,     0,  1503,     0,  1503,
+     692,     0,     0,   328,     0,    48,    37,     0,   184,   185,
+      40,   260,   350,     0,   223,   254,     0,    41,    42,     0,
+    1114,   216,     0,     0,     0,  1423,     0,   323,     0,     0,
+    -293,   215,   818,     0,   603,     0,     0,     8,     9,    10,
+      11,    12,   406,   600,     0,   601,     0,     0,   644,     0,
+    1389,     0,    45,    46,     0,   113,     0,   424,     0,   214,
+     429,   431,     0,     0,   703,   161,    31,     0,     0,    37,
+       0,   184,   185,    40,     0,     0,     0,     0,    48,     0,
+      41,    42,   704,     0,     0,     0,   448,    48,     0,    48,
+     451,     0,   452,     0,    34,     0,   113,     0,     0,     0,
+       0,   459,   353,     0,     0,  1416,   266,    66,  1424,     0,
+       0,   417,   473,     0,     0,    45,    46,     0,     0,    48,
+     916,     0,   480,  1114,     0,     0,     0,   107,     0,   215,
+     431,    70,     0,     0,   437,     0,     0,     0,    70,   113,
+     214,     0,   216,     0,   445,     0,     0,    56,     0,   107,
+       0,   818,   603,  1463,    56,   644,     0,   214,  1467,     0,
+       0,     0,     0,   113,   692,     0,   644,   107,   113,     0,
+     216,     0,     0,     0,     0,   216,   449,     0,     0,     0,
+       0,     0,   214,     0,     0,     0,     0,     0,  1489,     0,
+       0,    70,     0,     0,     0,     0,   260,    75,     0,     0,
+     594,     0,    75,     0,     0,     0,   622,    56,     0,     0,
+       0,     0,   520,     0,     0,     0,     0,     0,   113,   627,
+       0,     0,     0,   627,     0,     0,   260,     0,     0,   107,
+       0,   125,   128,   129,     0,     0,     0,     0,     0,    37,
+       0,   184,   185,    40,     0,     0,     0,   216,   818,     0,
+      41,    42,     0,     0,     0,     0,   113,     0,     0,     0,
+     603,   216,   107,     0,     0,     0,     0,     0,     0,     0,
+      48,   703,     0,   473,  1558,    48,   910,    78,   411,     0,
+    1558,     0,     0,     0,     0,    45,    46,     0,   350,   704,
+       0,  1558,    48,   473,     0,  1558,   223,     0,     0,     0,
+       0,   473,     0,   214,   255,     0,   256,     0,     0,    78,
+       0,     8,     9,    10,    11,    12,     0,     0,     0,   699,
+       0,     0,   431,     0,     0,     0,     0,     0,     0,     0,
+       0,   214,     0,     0,     0,     0,   214,   713,     0,    66,
+      31,     0,  1091,     0,   916,     0,   224,   431,     0,     0,
+       0,   431,     0,     0,     0,     0,     0,   216,     0,     0,
+     681,     0,     0,    75,     0,   107,     0,    80,    34,     0,
+       0,     0,   113,    37,   603,   184,   185,    40,   353,     0,
+     260,   350,     0,    75,    41,    42,   707,   396,     0,   107,
+       0,    75,     0,   703,     0,    48,   107,   415,   416,    80,
+       0,     0,   420,   703,   422,   423,     0,     0,   214,   353,
+     910,   704,   411,     0,     0,     0,     0,   703,     0,    45,
+      46,   704,   214,   520,     0,     0,   797,   353,   520,    75,
+       0,   520,     0,     0,   355,   704,   225,     0,   113,   113,
+     113,     0,   499,     0,   627,   809,     0,     0,     0,   107,
+       0,     0,     8,     9,    10,    11,    12,   828,     0,     0,
+       0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
+       0,   353,     0,     0,     0,   594,     0,   413,     0,     0,
+     594,    31,     0,     0,   421,     0,   627,     0,     0,   350,
+     350,   350,     0,     0,    31,     0,   644,     0,   535,   536,
+     537,   538,   539,   540,   541,   542,   543,   544,   350,    34,
+       0,     0,     0,     0,     0,     0,     0,   927,   214,     0,
+       0,     0,    34,     0,   356,   916,   699,    37,     0,    78,
+     916,    40,   545,     0,    78,   353,     0,   473,    41,    42,
+       0,     0,     0,     0,     0,     0,     0,  1504,     0,  1504,
+       0,   752,     0,   411,     0,     0,   413,     0,   216,     0,
+      45,    46,     0,   473,    43,     0,   350,     0,     0,     0,
+       0,    48,    48,    45,    46,   942,     0,     0,   431,   353,
+     353,   353,   113,   113,  1504,     0,  1504,   895,     0,     0,
+       0,     0,     0,     0,     0,     0,   902,     0,   353,     0,
+     904,     0,   260,   713,     0,     0,     0,     0,   974,     0,
+     576,   993,     0,     0,     0,     0,   353,     0,   580,    80,
+     113,   583,     0,     0,    80,   703,   703,    75,   224,     0,
+       0,     0,     0,     0,     8,     9,    10,    11,    12,     0,
+       0,     0,     0,   704,   704,     0,     0,     0,   699,     0,
+       0,     0,     0,    75,     0,     0,   353,     0,   699,     0,
+     350,     0,   627,    31,     0,  1010,     0,   627,   809,     0,
+       0,     0,   699,     0,     8,     9,    10,    11,    12,     0,
+      48,   113,  1021,   703,   703,   413,     0,     0,  1037,   421,
+     113,    34,     0,   353,     0,    78,    37,     0,   184,   185,
+      40,   704,   704,    31,     0,    48,    48,    41,    42,     0,
+     355,     0,     0,     0,     0,    78,     0,     0,   225,   214,
+       0,     0,     0,    78,     0,     0,     0,     0,   112,     0,
+      48,    34,   927,  1528,    66,   411,     0,     0,   353,     0,
+       0,   355,    45,    46,     0,     0,     0,   216,   353,     0,
+     353,     0,     0,     0,     0,   223,   627,     0,   353,   355,
+       0,    78,   353,   260,   713,     0,   413,  1093,     0,     0,
+       0,     0,     0,   937,     0,   601,     0,   927,     0,   799,
+     800,     0,    45,    46,     0,    80,    37,     0,   184,   185,
+      40,     0,     0,  1107,     0,     0,     0,    41,    42,     0,
+     356,   431,   118,   355,   896,    80,     0,     0,   833,     0,
+       0,   836,   837,    80,   840,  1149,   842,   843,     0,   350,
+    1087,   844,   845,  1528,    75,   411,     0,     0,     0,     0,
+       0,   356,    45,    46,  1326,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   216,     0,     0,     0,   356,
+       0,    80,  1327,     0,   353,     0,     0,   576,   576,    57,
+      57,     0,   594,     0,     0,     0,  1037,   355,     0,   703,
+       0,     0,     0,     0,     0,   429,     0,   703,   703,   703,
+     699,   699,     0,   350,   350,     0,     0,   704,     0,     0,
+       0,    57,     0,   356,     0,   704,   704,   704,     0,     0,
+       0,     0,     0,  1199,     0,     0,     0,     0,   214,   353,
+       0,   355,   355,   355,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    57,   995,     0,    57,     0,
+     355,     0,     0,     0,     0,     0,  1000,     0,   699,   699,
+       0,     0,     0,   703,     0,   888,   927,     0,   355,   891,
+    1012,     0,     0,     0,     0,     0,     0,   356,     0,    78,
+     479,   704,   976,   977,     0,     0,     0,     0,     0,     0,
+     353,   353,     0,   353,   353,     0,  1214,     0,     0,     0,
+     465,     0,     0,     0,     0,    78,     0,   627,   355,     0,
+       0,     0,     0,    75,     0,     0,     0,     0,     0,     0,
+       0,   356,   356,   356,     0,     0,   214,     0,     0,   927,
+     927,     0,   713,     0,    87,     0,   348,     0,     0,     0,
+     356,     0,     0,     0,     0,   355,     0,     0,   353,   353,
+       0,     0,     0,     0,     0,     0,     0,     0,   356,     8,
+       9,    10,    11,    12,     0,     0,    87,     0,     0,    80,
+       0,     0,     0,     0,     0,  1297,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
+     355,     0,     0,   260,     0,    80,     0,    66,   356,     0,
+     355,    57,   355,   226,   576,     0,     0,   224,     0,   699,
+     355,   713,     0,     0,   355,   118,    34,     0,     0,     0,
+       0,    37,   353,   184,   185,    40,     0,     0,     0,     0,
+       0,    57,    41,    42,     0,   356,     0,     0,     0,     0,
+       0,     0,     0,     0,   699,     0,  1098,     0,     0,     0,
+       0,     0,   699,   699,   699,     0,     0,     0,   186,     0,
+       0,     0,     0,   350,   350,   223,     0,    45,    46,     0,
+       0,     0,     0,     0,     0,     0,    78,  1199,  1177,  1178,
+     356,     0,     0,     0,     0,     0,     0,    75,     0,     0,
+     356,   363,   356,     0,     0,     0,     0,   225,     0,   353,
+     356,   353,     0,     0,   356,     0,   355,     0,     0,     0,
+     118,     0,     0,     0,   112,     0,     0,     0,   699,     0,
+       0,     0,     0,   413,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   353,     0,  1227,  1228,     0,     0,
+     927,     0,   353,   353,   353,     0,     0,     0,  1384,     0,
+       0,     0,     0,   353,   353,     0,     0,     0,   927,     0,
+     742,   355,     0,     0,     0,     0,    80,    75,     0,     0,
+       0,     0,     0,     0,     0,   763,     0,     0,   742,     0,
+     769,   742,     0,     0,     0,     0,    87,     0,   350,     0,
+       0,    87,   127,   127,   127,     0,   356,     0,     0,     0,
+       0,     0,     0,  1153,     0,     0,     0,     0,   353,     0,
+    1229,     0,   348,   118,     0,     0,     0,     0,     0,     0,
+    1165,     0,   355,   355,     0,   355,   355,     0,     0,   465,
+       0,   927,   927,     0,   168,     0,   173,  1199,     0,   179,
+     180,   181,     0,   183,  1199,    78,     0,     0,     0,     0,
+       0,   356,     0,     0,     0,     0,     0,     0,   234,     0,
+       0,     0,     0,    57,     0,   127,     0,   127,     0,     0,
+     249,   250,     0,     0,     0,     0,     0,     0,   353,     0,
+     355,   355,     0,     0,     0,   226,     0,     0,     0,     0,
+       0,     0,   276,     0,     0,     0,     0,  1199,   413,     0,
+       0,   883,     0,   885,  1553,   348,     0,  1501,     0,  1505,
+       0,     0,   356,   356,     0,   356,   356,     0,     0,     0,
+       0,     0,  1354,     0,     0,     0,     0,    75,     0,     0,
+    1356,  1357,  1358,     0,    75,    80,     0,     0,     0,     0,
+    1255,     0,  1318,     0,  1534,     0,  1536,     0,   127,     0,
+       0,     0,    87,   932,   355,     0,   127,     0,   127,   127,
+       0,     0,     0,   127,     0,   127,   127,   363,     0,   348,
+     356,   356,    87,     0,     0,     0,     0,     0,     0,     0,
+      87,     0,     0,     0,     0,     0,     0,    75,     0,  1565,
+       0,  1566,     0,     0,     0,     0,  1404,   224,   363,     8,
+       9,    10,    11,    12,  1573,  1574,     0,     0,     0,     0,
+       0,     0,     0,   348,   348,   348,   363,     0,    87,    78,
+       0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
+       0,   355,   348,   355,     0,   127,     0,     0,     8,     9,
+      10,    11,    12,     0,   356,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
+     363,    37,     0,   184,   185,    40,   355,    31,     0,     0,
+       0,     0,    41,    42,   355,   355,   355,     0,     0,     0,
+       0,     0,     0,     0,     0,   355,   355,   225,     0,     0,
+     348,     0,     0,     0,     0,    34,     0,     0,   266,    78,
+      37,     0,     0,     0,    40,     0,     0,    45,    46,    80,
+       0,    41,    42,     0,     0,     0,     0,     0,     0,     0,
+       0,   356,     0,   356,   363,   591,     0,   599,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   719,   623,   624,
+     355,     0,     0,     0,     0,     0,    45,    46,     0,     0,
+       0,     0,     0,     0,     0,     0,   356,     0,     0,     0,
+       0,     0,     0,     0,   356,   356,   356,     0,   363,   363,
+     363,     0,     0,     0,     0,   356,   356,     0,     0,     0,
+       0,     0,     0,     0,   348,     0,     0,   363,     0,    80,
+       0,     0,   348,     0,     0,  1020,     0,     0,     8,     9,
+      10,    11,    12,     0,     0,   363,     0,     0,     0,  1129,
+     355,     0,     0,     0,     0,     0,    87,     0,     0,     0,
+       0,     0,     0,     0,     0,   283,   284,    31,   285,     0,
+     356,     0,     0,  1142,     0,     0,   742,     0,  1142,     0,
+       0,     0,    87,     0,     0,   363,     0,     0,     0,     0,
+       0,     0,     0,     0,   286,    34,     0,     0,    57,    78,
+     287,     0,     0,     0,   288,     0,    78,   289,   290,   291,
+     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
+       0,     0,   363,     0,     0,     0,     0,     0,  1142,     0,
+       0,     0,     0,     0,     0,     0,     0,   295,     0,   379,
+     356,     0,     0,     0,     0,     0,   344,    46,   297,   298,
+     299,   300,     0,     0,     0,     0,     0,     0,     0,    78,
+       0,     0,     0,     0,     0,     0,    57,   363,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   363,     0,   363,
+     127,   127,     0,   348,   226,     0,     0,   363,     0,    80,
+       0,   363,   283,   284,     0,   285,    80,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   127,
+       0,     0,   127,   127,     0,   127,     0,   127,   127,     0,
+       0,   286,   127,   127,     0,     0,     0,   640,     0,   140,
+     141,   288,     0,     0,   289,   641,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,   348,   348,    80,
+       0,     0,     0,    87,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,   642,    57,   643,   380,
+       0,     0,     0,    45,    46,   297,   298,   299,   300,     0,
+       0,     0,     0,   363,     0,     0,     0,     0,     0,   206,
+       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,   287,    34,     0,    35,    31,    36,   288,     0,    38,
-      39,   289,     0,  1516,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,    34,     0,     0,     0,     0,   112,     0,
-      38,    39,     0,     0,   296,     0,  1065,     0,     0,    41,
-      42,     0,     0,    46,    47,   298,   299,   300,   301,     0,
-       0,     0,     0,     0,     0,     0,   322,  -130,     1,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
-       0,    30,   284,   285,    31,   286,     0,     0,     0,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,  -296,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,    31,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,    45,  -296,     0,     0,
-       0,     0,     0,    46,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,   287,    34,     0,    35,    31,    36,   288,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,    34,     0,     0,     0,     0,     0,     0,
-      38,    39,     0,     0,   296,     0,   971,     0,     0,     0,
-       0,   761,     0,   345,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,   287,    34,     0,    35,    31,    36,   288,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,    34,     0,     0,     0,     0,     0,     0,
-     209,    39,     0,     0,   296,     0,   971,     0,     0,     0,
-       0,   761,     0,    46,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
+       0,   930,     0,   931,     0,    31,     0,     0,     0,     0,
+     934,   935,     0,     0,     0,   940,     0,     0,   363,     0,
+       0,     0,     0,     0,     0,     0,     0,   945,  1142,  1142,
+    1142,     0,   949,    34,     0,    35,     0,    36,    37,     0,
+     208,    39,    40,   127,   127,     0,     0,     0,     0,    41,
+      42,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   985,     0,     0,     0,     0,     0,   283,   284,
+       0,   285,     0,     0,     0,    43,     0,   209,     0,   363,
+     363,     0,   363,   363,    45,    46,   742,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   286,    57,    57,
+       0,     0,    87,   287,     0,     0,     0,   288,     0,     0,
+     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+       0,    57,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   363,   363,    57,
+     295,     0,   379,     0,     0,   380,     0,     0,     0,    45,
+      46,   297,   298,   299,   300,     0,     0,   166,     0,     0,
+       0,     0,  1031,  1032,  1033,  1034,     0,  1036,     0,     0,
+       0,     0,  1142,  1142,   219,     0,     0,     0,     0,     0,
+       0,     0,     0,  1080,     0,     0,     0,   348,   348,     0,
+       0,     0,     0,     0,     0,     0,    57,  1086,     0,     0,
+       0,    57,   127,     0,     0,     0,     0,   127,     0,     0,
+    1481,   363,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   166,     0,     0,     0,   273,     0,     0,     0,
+       0,     0,     0,     0,    57,     0,     0,  1106,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   226,   166,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   369,     0,     0,     0,   375,
+       0,  1532,     0,     0,     0,     0,    87,     0,     0,     0,
+    1540,     0,     0,     0,  1139,     0,     0,     0,   363,     0,
+     363,  1147,     0,     0,     0,     0,  1151,     0,     0,     0,
+       0,  1155,     0,  1156,     0,     0,     0,  1158,     0,  1159,
+    1160,     0,   348,  1163,     0,     0,     0,     0,   166,     0,
+       0,     0,  1175,   363,     0,     0,     0,     0,     0,     0,
+     219,   363,   363,   363,     0,     0,     0,    57,     0,     0,
+    1190,  1191,   363,   363,     0,     0,     0,     0,   166,     0,
+       0,     0,     0,     0,     0,     0,    87,     0,     0,     0,
+       0,    57,     0,     0,     0,     0,     0,  1221,    57,     0,
+    1223,   127,     0,   375,     0,     0,     0,     0,     0,     0,
+     166,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   363,     0,     0,
+       0,     0,     0,   524,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1237,     0,   166,     0,     0,     0,  1241,
+    1242,    57,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1253,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1260,     0,     0,  1264,     0,  1265,     0,     0,  1267,
+       0,     0,     0,   597,     0,     0,     0,     0,   621,     0,
+       0,     0,  1275,     0,     0,     0,     0,   363,     0,     0,
+       0,     0,     0,     0,     0,  1282,     0,  1284,  1285,  1286,
+    1287,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1294,     0,  1295,     0,     0,     0,   173,
+       0,     0,     0,   127,     0,   212,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   232,    87,   236,     0,   238,
+       0,     0,     0,    87,     0,     0,   247,     0,  1323,  1324,
+       0,     0,     0,     0,   166,   166,     0,     0,     0,     0,
+       0,   369,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   212,     0,   236,
+     238,   247,   524,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    87,     0,     0,     0,
+       0,  1359,  1360,     0,     0,     0,     0,     0,     0,     0,
+     716,  1370,     0,     0,     0,     0,     0,     0,     0,     0,
+     212,     0,   166,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   524,     0,   524,     0,     0,   524,
+       0,   166,   524,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   369,     0,     0,     0,     0,     0,
+       0,     0,  1402,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1407,     0,  1408,  1409,  1410,
+       0,   212,     0,   236,   238,   247,     0,     0,     0,  1414,
+       0,     0,     0,     0,     0,     0,     0,     0,  1425,     0,
+       0,     0,     0,     0,     0,     0,   166,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   369,   212,
+       0,     0,   814,     0,   212,  1448,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   497,
+       0,     0,     0,     0,     0,     0,     0,     0,   597,     0,
+       0,     0,     0,   597,     0,     0,     0,     0,     0,     0,
+       0,     0,   369,   369,   369,     0,     0,     0,     0,     0,
+    1487,  1488,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   369,     0,  1493,     0,     0,     0,   212,     0,     0,
+    1493,     0,     0,     0,   157,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
+       0,     0,     0,   524,   236,   238,     0,     0,     0,     0,
+       0,     0,   247,  1527,     0,     0,     0,  1533,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   369,
+    1173,   939,   252,     8,     9,    10,    11,    12,     0,     0,
+       0,     0,   257,     0,     0,     0,  1555,     0,  1556,     0,
+       0,     0,     0,     0,     0,   212,     0,     0,     0,     0,
+     283,   284,    31,   285,     0,     0,   716,     0,     0,     0,
+       0,     0,     0,   212,     0,     0,  1571,  1572,   212,     0,
+     212,     0,     0,     0,  1575,  1576,     0,     0,     0,   286,
+      34,     0,     0,     0,     0,   287,     0,   212,   157,   288,
+     212,   212,   289,   290,   291,   292,    41,    42,   212,   293,
+     294,     0,   386,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   212,   369,     0,     0,     0,   621,     0,   212,
+       0,   369,   295,     0,   379,   418,     0,     0,     0,     0,
+       0,  1174,    46,   297,   298,   299,   300,     0,     0,   433,
+       0,     0,     0,     0,     0,     0,     0,     0,   438,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   446,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   283,
+     284,     0,   285,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   464,     0,     0,     0,     0,   474,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   286,     0,
+       0,   482,     0,     0,   287,     0,     0,   492,   288,   496,
+       0,   289,   290,   291,   292,    41,    42,   716,   293,   294,
+       0,     0,     0,     0,     0,     0,   526,     0,     0,     0,
+       0,     0,   524,   212,     0,     0,     0,     0,     0,     0,
+       0,   295,     0,   379,     0,     0,     0,     0,     0,   790,
+      45,    46,   297,   298,   299,   300,   166,     0,     0,     0,
+       0,   212,     0,     0,     0,     0,   212,     0,   585,     0,
+       0,     0,   369,   590,     0,     0,   206,     2,   207,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,   635,    26,    27,    28,   636,   637,     0,   639,
+       0,     0,    31,     0,     0,   597,   651,   652,     0,   653,
+     654,     0,   655,     0,   656,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   369,   369,   212,     0,
+      34,   585,    35,     0,    36,     0,     0,   208,    39,   671,
+       0,     0,   212,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,   344,     0,     0,     0,
-       0,     0,     0,   345,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,     0,   209,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,  1007,     0,     0,     0,
-       0,     0,     0,  1008,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,   971,     0,     0,     0,
-       0,     0,     0,   345,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,     0,   209,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,   380,     0,     0,     0,
-       0,     0,     0,    46,    47,   298,   299,   300,   301,     1,
+     283,   284,   497,   285,   682,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   209,     0,     0,     0,     0,     0,
+       0,    45,    46,     0,     0,     0,   524,     0,     0,   286,
+     708,     0,     0,     0,     0,   287,   711,     0,     0,   288,
+       0,   464,   289,   290,   291,   292,    41,    42,     0,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   212,     0,     0,     0,
+       0,     0,   295,     0,   379,     0,     0,   748,   212,   760,
+       0,    45,    46,   297,   298,   299,   300,     0,     0,     0,
+       0,     0,   767,     0,     0,   716,  -519,   212,     0,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,     0,     0,    26,    27,    28,    29,
-       0,     0,    30,     0,     0,    31,    32,     0,     0,     0,
+     793,     0,    30,     0,     0,    31,    32,   219,     0,   803,
+       0,   341,   364,     0,     0,     0,   805,     0,   283,   284,
+       0,   285,   813,     0,     0,     0,     0,     0,     0,     0,
+      33,   827,     0,    34,     0,    35,     0,    36,    37,     0,
+      38,    39,    40,     0,   716,   414,     0,   286,     0,    41,
+      42,     0,   414,   287,     0,     0,     0,   288,     0,     0,
+     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+       0,     0,   867,     0,     0,    43,     0,    44,     0,     0,
+       0,   212,     0,     0,    45,    46,     0,     0,     0,     0,
+     295,     0,   379,     0,     0,   978,   369,   369,     0,    45,
+      46,   297,   298,   299,   300,   219,     0,     0,   813,     0,
+       0,     0,     0,   212,     0,     0,   909,     0,     0,     0,
+       0,     0,     0,     0,   414,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,  -294,     0,     0,     0,   252,     0,   212,
+       0,     0,     0,     0,    31,     0,     0,   946,   947,     0,
+     212,     0,     0,     0,     0,     0,   283,   284,     0,   285,
+       0,   964,     0,     0,   321,     0,     0,     0,   414,     0,
+       0,     0,    34,     0,   346,     0,   414,   581,     0,   414,
+     584,     0,   986,  -294,   987,   286,   382,   382,   991,     0,
+     364,   287,     0,     0,   613,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
+       0,   369,     0,   631,     0,     0,   341,     0,     0,     0,
+       0,     0,   212,     0,     0,     0,     0,     0,   295,     0,
+     379,     0,     0,     0,     0,     0,   212,    45,    46,   297,
+     298,   299,   300,   414,     0,     0,     0,   414,     0,     0,
+       0,     0,  1025,     0,     0,     0,     0,   321,     0,  1026,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   524,
+       0,   524,  1028,     0,  1029,     0,     0,     0,   364,     0,
+       0,   478,     0,     0,     0,     0,     0,     0,  1041,     0,
+       0,     0,     0,     0,     0,  1045,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   524,  1083,   524,     0,
+    1084,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   414,     0,     0,   364,   212,     0,
+       0,     0,     0,     0,     0,     0,   166,     2,   207,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,   414,     0,     0,     0,
+     341,   364,    31,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   590,
+       0,     0,     0,     0,     0,     0,     0,   382,     0,     0,
+      34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
+       0,     0,     0,     0,     0,   414,   414,     0,     0,     0,
+       0,     0,     0,     0,     0,  1157,   212,     0,     0,     0,
+       0,     0,     0,     0,   807,   364,     0,     0,     0,     0,
+       0,     0,     0,  -402,   678,   613,     0,   613,   613,     0,
+       0,    45,    46,     0,   613,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   846,   364,     0,     0,     0,     0,
+     364,     0,     0,     0,     0,     0,     0,     0,     0,   364,
+     364,   364,     0,   526,     0,     0,     0,     0,     0,  1222,
+       0,   710,     0,     0,     0,     0,     0,     0,   364,     0,
+       0,     0,     0,   414,   889,     0,     0,   414,   892,     0,
+       0,     0,     0,     0,   894,     0,     0,     0,     0,     0,
+       0,     0,     0,  1234,     0,     0,     0,     0,  1236,     0,
+     744,     0,     0,   414,     0,     0,  1240,     0,     0,     0,
+       0,     0,     0,   761,     0,     0,     0,     0,   744,     0,
+       0,   744,     0,     0,     0,     0,   364,   613,     0,     0,
+       0,     0,     0,   771,     0,     0,     0,     0,     0,     0,
+       0,     0,  1269,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1277,   792,     0,  1278,     0,  1279,
+       0,     0,   341,   364,     0,   801,     0,   414,   414,     0,
+       0,     0,   346,  1288,  1289,     0,     0,   761,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1302,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   414,     0,     0,     0,     0,     0,     0,     0,
+     364,     0,     0,     0,     0,     0,   866,   807,   364,     0,
+       0,   613,     0,   613,     0,   382,     0,     0,     0,     0,
+       0,     0,     0,   613,  1343,     0,     0,     0,     0,     0,
+       0,     0,   212,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     1,     2,   207,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,    29,     0,     0,    30,     0,     0,    31,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   807,     0,     0,     0,
+    1394,     0,  1395,   341,   364,   414,    34,   414,    35,     0,
+      36,   414,     0,    38,    39,   761,  1405,   970,  1406,     0,
+       0,     0,     0,     0,     0,     0,     0,   981,     0,     0,
+       0,     0,   613,   613,   990,     0,  1413,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      44,     0,  1431,  1433,     0,     0,     0,    45,    46,   364,
+       0,     0,     0,  1438,     0,     0,  1240,     0,     0,   414,
+       0,     0,     0,     0,     0,     0,  1008,  1009,     0,     0,
+     346,     0,     0,     0,     0,     0,     0,     0,     0,  1462,
+       0,   414,  1154,     0,   346,     0,     0,     0,  1469,     0,
+       0,  1471,   364,  1473,  1475,  1477,     0,     0,   414,  1166,
+       0,   613,   613,  1171,     0,     0,     0,     0,     0,   507,
+       0,   509,   512,   364,   364,   283,   284,     0,   285,   515,
+     516,     0,     0,     0,  1039,     0,     0,     0,   382,     0,
+       0,     0,     0,   509,   509,  1508,     0,  1510,     0,  1240,
+       0,     0,     0,     0,   286,     0,     0,     0,     0,     0,
+     287,     0,     0,     0,   288,  1522,     0,   289,   290,   291,
+     292,    41,    42,     0,   293,   294,   346,     0,     0,     0,
+       0,   509,     0,     0,     0,     0,   414,     0,   414,     0,
+       0,     0,     0,   414,     0,     0,     0,   295,     0,   379,
+       0,     0,   613,     0,     0,     0,   709,    46,   297,   298,
+     299,   300,     0,     0,     0,   321,     0,   509,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   807,   414,  1256,
+       0,  1130,  1131,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   382,     0,     0,     0,     0,
+       0,   981,   364,     0,  1145,     0,   744,     0,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,  -294,  1161,    26,    27,
+      28,     0,     0,     0,     0,     0,     0,    31,  1176,     0,
+     283,   284,     0,   285,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     382,     0,  1194,   341,     0,    34,     0,     0,     0,   286,
+       0,     0,    38,    39,     0,   640,  -294,   981,   981,   288,
+       0,   364,   289,   290,   291,   292,    41,    42,     0,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,  1226,     0,
+       0,     0,     0,     0,     0,     0,     0,   634,     0,   338,
+       0,     0,   295,     0,   764,     0,    45,    46,     0,     0,
+       0,    45,    46,   297,   298,   299,   300,     0,     0,     0,
+       0,     0,     0,   364,   364,   509,   509,   509,   509,   509,
+     509,   509,   509,   509,   509,   509,   509,   509,   509,   509,
+     509,   509,   509,     0,     0,   981,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   866,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,  1280,
+    1281,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     1,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
+       0,    30,   283,   284,    31,   285,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   364,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   981,
+       0,   286,    34,     0,    35,     0,    36,   287,     0,    38,
+      39,   288,   509,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,  1063,     0,     0,     0,
+       0,     0,     0,    45,    46,   297,   298,   299,   300,     0,
+       0,     0,     0,  1388,     0,     0,   744,  -129,     0,     0,
+       0,     0,     0,     0,     0,   509,     0,     0,   414,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,   414,   414,     0,   509,     0,    31,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   414,     0,
+       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
+       0,     0,     0,   208,    39,     0,     0,     0,     0,     0,
+    1447,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     1,     2,   207,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    45,    46,    26,
+      27,    28,    29,     0,     0,    30,   283,   284,    31,  1048,
+    1049,     0,  1050,     0,     0,  1051,  1052,  1053,  1054,  1055,
+    1056,  1057,  1058,     0,     0,     0,  1059,     0,     0,     0,
+    1060,  1061,     0,    33,     0,   286,    34,   509,    35,     0,
+      36,  1062,  1514,    38,    39,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,  -295,     0,     0,   295,     0,
+    1063,     0,   509,   172,     0,     0,    31,    45,    46,   297,
+     298,   299,   300,     0,     0,   321,     0,  1064,     0,     0,
+       0,  -129,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,     0,     0,     0,     0,
+     509,     0,     0,     0,     0,  -295,     0,     0,     0,     0,
+       0,     0,     0,   509,     0,     0,     0,     0,     0,     0,
+       0,     0,     1,     2,   207,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,    29,     0,   509,    30,   283,   284,    31,   285,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,   286,    34,     0,    35,    31,
+      36,   287,     0,    38,    39,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
+       0,     0,   111,     0,    38,    39,     0,     0,   295,     0,
+      44,   509,     0,    41,    42,     0,     0,    45,    46,   297,
+     298,   299,   300,     2,   207,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   283,   284,    31,   285,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   509,   509,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   286,    34,     0,    35,     0,
+      36,   287,     0,    38,    39,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   295,     0,
+     343,     0,     0,     0,     0,   760,     0,   344,    46,   297,
+     298,   299,   300,     2,   207,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   283,   284,    31,   285,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,   286,    34,     0,    35,    31,
+      36,   287,     0,    38,    39,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
+       0,     0,    37,     0,    38,    39,    40,     0,   295,     0,
+     969,     0,     0,    41,    42,   760,     0,   344,    46,   297,
+     298,   299,   300,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
+       0,   158,     0,     0,     0,   509,     0,     0,    45,    46,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   509,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     2,   207,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,     0,     0,     0,     0,   283,
+     284,    31,   285,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,   509,   509,   286,    34,
+       0,    35,    31,    36,   287,     0,    38,    39,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
+       0,   295,     0,   969,     0,     0,     0,     0,   760,     0,
+      45,    46,   297,   298,   299,   300,     2,   207,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,     0,     0,     0,     0,   283,
+     284,    31,   285,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,   286,    34,
+       0,    35,    31,    36,   287,     0,    38,    39,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,   208,    39,     0,
+       0,   295,     0,   343,     0,     0,     0,     0,     0,     0,
+     344,    46,   297,   298,   299,   300,     2,   207,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,     0,     0,     0,     0,   283,
+     284,    31,   285,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,     0,     0,     0,     0,     0,   286,    34,
+       0,    35,    31,    36,   287,     0,   208,    39,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   295,     0,  1005,     0,     0,     0,     0,     0,     0,
+    1006,    46,   297,   298,   299,   300,     2,   207,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,     0,     0,     0,     0,   283,
+     284,    31,   285,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   286,    34,
+       0,    35,     0,    36,   287,     0,    38,    39,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      33,     0,     0,    34,     0,    35,     0,    36,    37,     0,
-      38,    39,    40,     0,     0,     0,     0,     0,     0,    41,
-      42,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      43,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    44,     0,    45,     0,     0,
-       0,     0,     0,     0,    46,    47,   207,     2,   208,     4,
+       0,   295,     0,   969,     0,     0,     0,     0,     0,     0,
+     344,    46,   297,   298,   299,   300,     2,   207,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,     0,     0,     0,     0,   283,
+     284,    31,   285,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   286,    34,
+       0,    35,     0,    36,   287,     0,   208,    39,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   295,     0,   379,     0,     0,     0,     0,     0,     0,
+      45,    46,   297,   298,   299,   300,     1,     2,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     0,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,   486,   487,   488,
-      34,     0,    35,    31,    36,    37,     0,   209,    39,    40,
+      25,     0,     0,    26,    27,    28,    29,     0,     0,    30,
+       0,     0,    31,    32,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    33,     0,     0,
+      34,     0,    35,     0,    36,    37,     0,    38,    39,    40,
        0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,    44,     0,   210,     0,     0,     0,     0,     0,
-       0,    46,    47,     1,     2,   208,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,  -295,     0,
-      26,    27,    28,    29,     0,     0,    30,     0,     0,    31,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
-       0,    36,     0,     0,    38,    39,     0,     0,  -295,     0,
+       0,     0,    43,     0,    44,     0,     0,     0,  -523,     0,
+       0,    45,    46,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,    29,     0,     0,    30,     0,     0,    31,
+      32,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    43,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    33,     0,     0,    34,     0,    35,
+       0,    36,    37,     0,    38,    39,    40,     0,     0,     0,
+       0,     0,     0,    41,    42,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    45,     0,     0,     0,     0,     0,     0,    46,    47,
-       1,     2,   208,     4,     5,     6,     7,     8,     9,    10,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
+       0,    44,     0,     0,     0,     0,     0,     0,    45,    46,
+       1,     2,   207,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+      21,    22,    23,    24,    25,  -294,     0,    26,    27,    28,
       29,     0,     0,    30,     0,     0,    31,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
-       0,    38,    39,     0,     0,     0,     0,     0,     0,     0,
+       0,    38,    39,     0,     0,  -294,     2,   207,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,     0,     0,     0,    44,     0,
+       0,    31,     0,     0,     0,    45,    46,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    45,     0,
-       0,     0,     0,     0,     0,    46,    47,     2,   208,     4,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
+       0,    35,     0,    36,    37,     0,   208,    39,    40,     0,
+       0,     0,     0,     0,     0,    41,    42,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    43,     0,   209,     0,     0,     0,     0,     0,     0,
+      45,    46,     2,   207,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,     0,     0,     0,     0,    31,     0,     0,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,     0,    34,     0,    35,     0,    36,
+      31,     0,    38,    39,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1367,     0,     0,     0,    34,     0,
+       0,     0,     0,    37,     0,   336,   337,    40,     0,   678,
+       0,     0,     0,     0,    41,    42,    45,    46,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,   338,     0,    26,    27,    28,     0,     0,    45,
+      46,     0,     0,    31,     0,     0,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,    34,     0,    35,     0,    36,    31,     0,    38,    39,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1369,     0,     0,     0,    34,     0,     0,     0,     0,   111,
+       0,    38,    39,     0,     0,   678,     0,     0,     0,     0,
+      41,    42,    45,    46,     2,   207,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    44,     0,
+      26,    27,    28,     0,     0,    45,    46,     0,     0,    31,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
+       0,    36,     0,     0,   208,    39,     0,     2,   207,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
+       0,   271,    31,     0,     0,     0,     0,     0,    45,    46,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,    35,     0,    36,    37,     0,   209,    39,    40,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
+      34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
+       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
+       0,     0,     0,     0,   678,    31,     0,     0,     0,     0,
+       0,    45,    46,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    44,     0,   210,     0,     0,     0,     0,     0,
-       0,    46,    47,     2,   208,     4,     5,     6,     7,     8,
+       0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
+      38,    39,     0,     2,   207,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,     0,   592,    31,     0,
+       0,     0,     0,     0,    45,    46,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
+      36,     0,     0,   208,    39,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+       0,     0,   283,   284,    31,   285,     0,     0,     0,     0,
+     209,     0,     0,     0,     0,     0,     0,    45,    46,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   286,    34,     0,     0,     0,     0,   287,     0,    38,
+      39,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,   517,     0,     0,   172,
+       0,     0,     0,    45,    46,   297,   298,   299,   300,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   283,   284,    31,   285,
+       0,     0,     0,     0,     0,     0,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,   286,    34,    26,    27,    28,
+       0,   640,     0,    38,    39,   288,    31,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,     0,     0,   295,   -35,
+     741,    38,    39,     0,     0,     0,     0,    45,    46,   297,
+     298,   299,   300,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,   634,     0,   338,     0,
+     283,   284,    31,   285,     0,    45,    46,     0,     0,     0,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,   286,
+      34,    26,    27,    28,     0,   287,     0,    38,    39,   288,
+      31,     0,   289,   290,   291,   292,    41,    42,     0,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+       0,     0,   295,     0,   296,    38,    39,     0,     0,     0,
+       0,    45,    46,   297,   298,   299,   300,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,     0,   258,     0,   283,   284,    31,   285,     0,    45,
+      46,     0,     0,     0,     0,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,   286,    34,    26,    27,    28,     0,   287,
+       0,    38,    39,   288,    31,     0,   289,   290,   291,   292,
+      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,     0,     0,   295,     0,   158,    38,
+      39,     0,     0,     0,     0,    45,    46,   297,   298,   299,
+     300,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,     0,     0,   158,     0,   283,   284,
+      31,   285,     0,    45,    46,     0,     0,     0,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,   286,    34,    26,
+      27,    28,     0,   287,     0,    38,    39,   288,    31,     0,
+     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
+     295,     0,   592,   208,    39,     0,     0,     0,     0,    45,
+      46,   297,   298,   299,   300,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+     271,     0,   283,   284,    31,   285,     0,    45,    46,     0,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,   286,    34,    26,    27,    28,     0,   287,     0,    38,
+      39,   288,    31,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,   295,     0,   379,    38,    39,     0,
+       0,     0,     0,    45,    46,   297,   298,   299,   300,   467,
+       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,   338,     0,    26,    27,    28,     0,
+       0,    45,    46,     0,     0,    31,     0,     0,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,  -294,     0,    26,
+      27,    28,     0,    34,     0,    35,     0,    36,    31,     0,
+      38,    39,     0,     0,     0,     0,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,  -294,    34,    26,    27,    28,
+       0,    37,     0,   336,   337,    40,    31,  -294,     0,     0,
+      -3,     0,    41,    42,     0,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,    34,    26,    27,    28,   634,    37,
+     338,   336,   337,    40,    31,  -294,     0,    45,    46,     0,
+      41,    42,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,    34,    26,    27,    28,     0,    37,   338,    38,
+      39,    40,    31,     0,     0,    45,    46,     0,    41,    42,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+      34,    26,    27,    28,    43,    37,    44,   208,    39,    40,
+      31,     0,     0,    45,    46,     0,    41,    42,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,    34,    26,
+      27,    28,    43,    37,   271,   336,   337,    40,    31,   685,
+       0,    45,    46,     0,    41,    42,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,  -294,    34,    26,    27,    28,
+     634,     0,   338,    38,    39,     0,    31,     0,     0,    45,
+      46,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,     0,     0,     0,     0,
+     686,    38,    39,     0,   687,  -294,     0,    45,    46,     0,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,     0,   338,    31,
+     685,     0,     0,     0,     0,    45,    46,     0,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,    34,    26,    27,
+      28,     0,     0,     0,    38,    39,     0,    31,   685,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,    34,     0,     0,    31,     0,
+       0,   686,    38,    39,     0,  1099,     0,     0,    45,    46,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
+       0,     0,     0,    38,    39,     0,     0,     0,     0,   686,
+       0,     0,     0,  1231,     0,     0,    45,    46,     0,     0,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+     686,    26,    27,    28,     0,     0,     0,    45,    46,     0,
+      31,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,     0,     0,     0,     0,    34,     0,
+      31,     0,     0,     0,     0,    38,    39,     0,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,    34,    26,
+      27,    28,   485,   486,   487,    38,    39,     0,    31,     0,
+       0,     0,   592,     0,     0,     0,     0,     0,     0,    45,
+      46,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
+       0,     0,    44,    38,    39,     0,     0,     0,     0,    45,
+      46,     2,   207,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,     0,     0,     0,     0,     0,    31,     0,   283,   284,
+       0,   285,  1049,     0,  1050,     0,     0,  1051,  1052,  1053,
+    1054,  1055,  1056,  1057,  1058,     0,     0,  1547,  1059,     0,
+       0,     0,  1060,  1061,    34,    33,    35,   286,    36,     0,
+       0,    38,    39,  1062,     0,     0,     0,   288,     0,     0,
+     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  -415,     0,     0,
+     295,     0,   379,     0,     0,   172,     0,     0,     0,    45,
+      46,   297,   298,   299,   300,     0,     0,     0,     0,  1064,
+       0,   283,   284,  -129,   285,  1049,     0,  1050,     0,     0,
+    1051,  1052,  1053,  1054,  1055,  1056,  1057,  1058,     0,     0,
+       0,  1059,     0,     0,     0,  1060,  1061,     0,    33,     0,
+     286,     0,     0,     0,     0,     0,  1062,     0,     0,     0,
+     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
+     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   295,     0,   379,     0,     0,   172,     0,
+       0,     0,    45,    46,   297,   298,   299,   300,     0,     0,
+       0,     0,  1064,     0,     0,     0,  -129,     2,   207,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+       0,     0,    31,     0,   283,   284,     0,   285,  1049,     0,
+    1050,  1417,  1418,  1051,  1052,  1053,  1054,  1055,  1056,  1057,
+    1058,     0,     0,  1547,  1059,     0,     0,     0,  1060,  1061,
+      34,    33,    35,   286,    36,     0,     0,    38,    39,  1062,
+       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
+      41,    42,     0,   293,   294,     0,     0,     0,     0,  1325,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   295,     0,   379,     0,
+       0,   172,     0,     0,     0,    45,    46,   297,   298,   299,
+     300,     0,     0,   283,   284,  1064,   285,  1049,     0,  1050,
+    1417,  1418,  1051,  1052,  1053,  1054,  1055,  1056,  1057,  1058,
+       0,     0,     0,  1059,     0,     0,     0,  1060,  1061,     0,
+      33,     0,   286,     0,     0,     0,     0,     0,  1062,     0,
+       0,     0,   288,     0,     0,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   295,     0,   379,     0,     0,
+     172,     0,     0,     0,    45,    46,   297,   298,   299,   300,
+       0,     0,   283,   284,  1064,   285,  1049,     0,  1050,     0,
+       0,  1051,  1052,  1053,  1054,  1055,  1056,  1057,  1058,     0,
+       0,     0,  1059,     0,     0,     0,  1060,  1061,     0,    33,
+       0,   286,     0,     0,     0,     0,     0,  1062,     0,     0,
+       0,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
+     283,   284,     0,   285,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,   379,     0,     0,   172,
+       0,     0,     0,    45,    46,   297,   298,   299,   300,   286,
+       0,     0,     0,  1064,     0,   287,     0,     0,     0,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,   283,   284,
+       0,   285,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   295,     0,   379,     0,     0,   283,   284,     0,
+     285,   344,    46,   297,   298,   299,   300,   286,     0,     0,
+       0,     0,     0,   287,     0,     0,     0,   288,     0,     0,
+     289,   290,   291,   292,    41,    42,   286,   293,   294,     0,
+       0,     0,   287,     0,     0,     0,   288,     0,     0,   289,
+     290,   291,   292,    41,    42,     0,   293,   294,     0,     0,
+     506,     0,     0,     0,     0,   283,   284,     0,   285,    45,
+      46,   297,   298,   299,   300,     0,     0,     0,     0,   295,
+       0,     0,     0,     0,   283,   284,     0,   285,    45,    46,
+     297,   298,   299,   300,   286,     0,     0,     0,     0,     0,
+     287,     0,     0,     0,   288,     0,     0,   289,   290,   291,
+     292,    41,    42,   286,   293,   294,     0,     0,     0,   287,
+       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
+      41,    42,     0,   293,   294,     0,     0,   511,     0,     0,
+       0,     0,     0,     0,     0,     0,    45,    46,   297,   298,
+     299,   300,     0,     0,     0,     0,   514,     0,     0,     0,
+       0,     0,     0,     0,     0,    45,    46,   297,   298,   299,
+     300,     2,   207,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,    35,     0,    36,    37,
+       0,   175,   176,    40,     0,     0,     0,     0,     0,     0,
+      41,    42,   206,     2,   207,     4,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
@@ -2604,1217 +2875,1105 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
-      36,     0,     0,    38,    39,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,  -403,
-     679,     0,     0,     0,     0,     0,     0,    46,    47,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,    35,     0,    36,     0,     0,    38,
-      39,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
-       0,  1369,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   679,     0,     0,     0,
-       0,     0,     0,    46,    47,     2,   208,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
-      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
-      35,     0,    36,     0,     0,    38,    39,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    43,     0,  1371,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   679,     0,     0,     0,     0,     0,     0,    46,
-      47,     2,   208,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-       0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
-       0,   209,    39,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   272,     0,
-       0,     0,     0,     0,     0,    46,    47,     2,   208,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   679,     0,     0,     0,     0,     0,
-       0,    46,    47,     2,   208,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,     0,     0,    31,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
-      36,     0,     0,    38,    39,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     593,     0,     0,     0,     0,     0,     0,    46,    47,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,    35,     0,    36,     0,     0,   209,
-      39,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    43,
-       0,    26,    27,    28,     0,     0,     0,     0,   284,   285,
-      31,   286,     0,     0,     0,     0,   210,     0,     0,     0,
-       0,     0,     0,    46,    47,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   287,    34,     0,
-       0,     0,     0,   288,     0,    38,    39,   289,     0,     0,
-     290,   291,   292,   293,    41,    42,     0,   294,   295,     0,
-       0,     0,     0,     0,     0,    43,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     296,     0,   518,     0,     0,   173,     0,     0,     0,    46,
-      47,   298,   299,   300,   301,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,     0,     0,     0,   641,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,   -35,   742,     0,     0,     0,
-       0,     0,     0,    46,    47,   298,   299,   300,   301,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,   284,   285,    31,   286,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   287,    34,     0,     0,     0,
-       0,   288,     0,    38,    39,   289,     0,     0,   290,   291,
-     292,   293,    41,    42,     0,   294,   295,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   296,     0,
-     297,     0,     0,     0,     0,     0,     0,    46,    47,   298,
-     299,   300,   301,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-     284,   285,    31,   286,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   287,
-      34,     0,     0,     0,     0,   288,     0,    38,    39,   289,
-       0,     0,   290,   291,   292,   293,    41,    42,     0,   294,
-     295,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   296,     0,   159,     0,     0,     0,     0,     0,
-       0,    46,    47,   298,   299,   300,   301,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-       0,     0,     0,     0,   284,   285,    31,   286,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   287,    34,     0,     0,     0,     0,   288,
-       0,    38,    39,   289,     0,     0,   290,   291,   292,   293,
-      41,    42,     0,   294,   295,     0,     0,     0,     0,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   296,     0,   593,     0,
-       0,     0,     0,     0,     0,    46,    47,   298,   299,   300,
-     301,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,     0,     0,     0,     0,   284,   285,
-      31,   286,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   287,    34,     0,
-       0,     0,     0,   288,     0,    38,    39,   289,     0,     0,
-     290,   291,   292,   293,    41,    42,     0,   294,   295,     0,
-       0,     0,     0,     0,     0,    43,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     296,     0,   380,     0,     0,     0,     0,     0,     0,    46,
-      47,   298,   299,   300,   301,   468,     2,   208,     4,     5,
+      36,     0,     0,   208,    39,   467,     2,   207,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
        0,     0,    26,    27,    28,     0,     0,     0,     0,     0,
-       0,    31,     0,     0,     0,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,    34,
-       0,    35,     0,    36,    31,     0,    38,    39,     0,     0,
-       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,    34,    26,    27,    28,     0,    37,     0,    38,
-      39,    40,    31,     0,     0,     0,    -3,     0,    41,    42,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
+       0,    31,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,     0,     0,    44,    37,   159,    38,    39,    40,
-       0,     0,     0,    46,    47,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    44,     0,    45,     0,     0,     0,     0,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-      34,     0,    31,     0,     0,    37,     0,   209,    39,    40,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-      34,     0,     0,     0,     0,    37,     0,   337,   338,    40,
-       0,     0,    44,     0,   272,     0,    41,    42,     0,     0,
-       0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   635,     0,   339,     0,     0,     0,     0,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-      34,     0,    31,     0,     0,    37,     0,   337,   338,    40,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-      34,     0,     0,     0,     0,   112,     0,    38,    39,     0,
-       0,     0,     0,     0,   339,     0,    41,    42,     0,     0,
-       0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    45,     0,     0,     0,     0,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,  -295,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-      34,     0,    31,   686,     0,     0,     0,    38,    39,     0,
-       0,  -295,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,     0,   635,     0,   339,     0,     0,     0,     0,     0,
-       0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   687,     0,     0,     0,   688,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,  -295,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-      34,     0,    31,   686,     0,     0,     0,    38,    39,     0,
-       0,  -295,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,     0,     0,     0,   339,     0,     0,     0,     0,     0,
-       0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   687,     0,     0,     0,  1101,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,   686,     8,     9,    10,    11,    12,    13,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
+       0,    35,     0,    36,     0,     0,    38,    39,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-      34,     0,     0,    31,     0,     0,     0,    38,    39,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,   687,     0,     0,     0,  1233,     0,
-       0,    46,    47,     0,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   635,     0,   339,     0,     0,     0,     0,
-       0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    34,     0,    31,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,   259,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   159,     0,     0,     0,     0,
-       0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    34,     0,    31,     0,     0,     0,     0,   209,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,   272,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   339,     0,     0,     0,     0,
-       0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    34,     0,    31,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,   687,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   593,     0,     0,     0,     0,
-       0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    34,     0,    31,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,   209,    39,
-       0,     0,     0,     0,     0,    45,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
+       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    46,    47,     2,   208,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
-      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
-       0,   284,   285,     0,   286,  1051,     0,  1052,     0,     0,
-    1053,  1054,  1055,  1056,  1057,  1058,  1059,  1060,     0,     0,
-    1549,  1061,     0,     0,     0,  1062,  1063,    34,    33,    35,
-     287,    36,     0,     0,    38,    39,  1064,     0,     0,     0,
-     289,     0,     0,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    -416,     0,     0,   296,     0,   380,     0,     0,   173,     0,
-       0,     0,    46,    47,   298,   299,   300,   301,     0,     0,
-       0,     0,  1066,     0,   284,   285,  -130,   286,  1051,     0,
-    1052,     0,     0,  1053,  1054,  1055,  1056,  1057,  1058,  1059,
-    1060,     0,     0,     0,  1061,     0,     0,     0,  1062,  1063,
-       0,    33,     0,   287,     0,     0,     0,     0,     0,  1064,
-       0,     0,     0,   289,     0,     0,   290,   291,   292,   293,
-      41,    42,     0,   294,   295,     0,     0,     0,     0,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   296,     0,   380,     0,
-       0,   173,     0,     0,     0,    46,    47,   298,   299,   300,
-     301,     0,     0,     0,     0,  1066,     0,     0,     0,  -130,
-       2,   208,     4,     5,     6,     7,     8,     9,    10,    11,
+       0,    34,     0,    35,     0,    36,     0,     0,   208,    39
+};
+
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-1315))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
+static const yytype_int16 yycheck[] =
+{
+       0,     1,   240,   186,   205,     0,   734,     0,    43,    43,
+      43,   534,   752,   186,     1,   752,   752,   187,   106,   186,
+     117,   280,   169,   170,   513,   364,   349,   186,   220,   368,
+     186,   349,    32,   186,   620,   186,   991,    32,  1029,    32,
+     521,   345,   602,    43,   187,   879,   984,   759,   647,    49,
+     492,   418,     0,     0,   496,   879,    49,   600,   188,   571,
+     602,    43,   600,    63,   600,   600,    66,    32,   156,    69,
+      63,   438,   600,    66,   600,   282,    69,   693,    49,   446,
+     600,    72,    69,   266,    32,    32,  1041,   696,    39,  1335,
+     634,   635,   636,   266,   426,   427,    57,   267,    43,   266,
+    1028,  1029,     0,  1417,    43,   202,   106,   266,  1048,   653,
+     266,  1060,  1061,   266,   114,   266,    39,   117,   118,   603,
+      72,   635,   636,   482,   267,   609,    39,    51,    95,    44,
+      45,    85,   262,   263,    32,   229,    39,    96,    64,   653,
+      28,   132,    39,   114,    63,    72,   107,   147,   148,   110,
+     257,   186,   186,   186,   248,   148,   156,   157,   109,   113,
+     111,   161,   494,   130,   123,   488,   118,   711,   161,   110,
+     910,    82,    39,   910,   910,   116,   147,  1491,   482,    44,
+      45,   513,    82,   109,   719,   109,   186,   187,   111,  1138,
+      78,   719,  1438,   719,   187,   156,   109,   711,   111,   490,
+     115,    30,   202,    82,   186,   132,   109,   688,   111,    72,
+     210,   111,   109,   132,   111,  1123,    82,   210,   410,  1127,
+      83,    84,   222,    72,  1048,    74,    75,   107,    82,   222,
+      11,   266,   266,   266,    83,    84,   406,    82,   117,   210,
+     240,   186,   109,   109,   111,  1236,   578,   186,   111,   114,
+     589,   131,   252,   341,    83,    84,   110,   252,   219,   252,
+     260,   805,   111,   406,   109,   265,   266,   267,   828,   240,
+       1,  1473,   272,   816,   267,   634,   635,   636,   816,  1421,
+     816,   816,   994,   371,   602,   797,   828,   252,   816,   905,
+     816,   805,   631,    96,   653,   295,   816,   504,  1289,   396,
+     109,   272,   911,   109,   252,   252,  1508,   307,  1510,   257,
+     480,   418,   273,   604,  1252,   682,   620,   608,    49,   280,
+     123,   625,   131,   323,  1524,    44,    45,   424,   328,  1057,
+     929,   438,   116,   430,   818,   328,   307,   480,   629,   446,
+    1494,   341,   633,   109,  1544,   345,  1500,   956,   132,   349,
+     350,  1551,   711,    39,   252,    90,    91,   285,    72,   257,
+    1288,  1289,  1302,  1524,   364,    82,   109,  1521,   368,    83,
+      84,   371,  1526,    72,   345,   106,   112,  1519,   938,   307,
+     308,    57,  1524,   114,    83,    84,   114,   348,  1222,   748,
+    1551,   126,   127,   110,   937,   114,   396,   111,  1222,   937,
+     117,   937,  1544,   110,   365,   110,   406,   110,   369,  1551,
+     117,   116,   111,   406,   117,   244,   147,   345,   116,   115,
+     116,  1007,  1413,     3,   424,   156,   426,   427,   131,   116,
+     430,   107,   116,   433,   110,   131,   116,   525,    10,    11,
+      12,    13,    14,     3,   748,   132,   805,    72,   132,     0,
+    1405,  1406,   132,   381,   454,   426,   427,   118,    83,    84,
+     667,   116,   110,   124,   125,     0,     1,    39,   807,   117,
+     418,   432,   472,   812,   733,   206,   116,   132,  1302,   210,
+     480,    32,   482,   116,   484,  1413,   111,   480,   488,   484,
+     438,   484,   132,   974,   494,    67,   116,    32,   446,   132,
+     989,   648,   116,   116,   946,   828,   506,     0,   508,   240,
+     828,   511,   132,   513,   514,    66,  1125,     0,   688,   132,
+     418,   521,  1462,   494,   112,   525,   526,   657,   116,  1469,
+     737,    66,  1016,  1017,    69,   109,   484,   484,  1137,   116,
+     438,   272,   513,   219,   275,   688,   131,  1107,   446,   110,
+     909,   380,   116,   116,    72,   132,    74,    75,   655,   850,
+     110,    72,   901,   109,   295,    83,    84,   116,   132,   132,
+     570,   571,    83,    84,  1302,   682,   307,   109,   578,  1188,
+    1189,   112,  1522,   132,   482,   116,   484,   116,   112,   589,
+     590,   109,   116,    80,   594,   590,   114,   273,   109,   109,
+     600,   708,   602,   132,   280,   909,   109,   578,   111,   109,
+     341,    80,  1093,   109,   345,   118,   119,  1098,   109,   942,
+     620,   549,   550,   551,   111,   625,   113,   627,   589,   110,
+     117,   631,   110,   364,   634,   635,   636,   368,  1462,   112,
+     371,   112,   111,   116,   113,  1469,    72,   110,   117,   620,
+     110,  1379,   943,   653,   625,   655,   116,    83,    84,   747,
+     621,   110,   491,    72,   493,    74,    75,   116,   129,  1028,
+     131,   222,   348,   865,    83,    84,   637,   110,    66,     4,
+       5,     6,     7,     8,     9,   685,   110,   222,   688,   365,
+     109,   652,   116,   369,   886,   426,   427,   109,  1522,   111,
+     109,   252,   112,  1007,   109,   114,   116,     0,     1,   110,
+     948,   711,   712,   713,   109,   116,   110,   252,   115,   719,
+     720,   132,   116,   454,   871,   295,   110,   910,    64,   110,
+     118,   109,   116,   111,   682,   116,   467,   910,  1466,    32,
+    1468,   109,   912,   910,    69,   109,    71,   747,   748,   110,
+     110,   910,   752,   753,   910,   116,   116,   910,   112,   910,
+     708,   492,   110,   494,   110,   496,   112,   132,   116,   912,
+     116,   114,   733,   161,   114,   506,    69,   508,   109,   110,
+     511,   110,   513,   514,   682,   131,   132,   116,  1528,   109,
+    1399,  1528,  1528,  1132,   525,  1523,  1319,   797,  1157,   350,
+     110,   556,   557,   558,   559,   805,   116,   807,  1417,   809,
+     708,   132,   812,   813,   643,   109,   816,   111,   813,  1020,
+     908,   110,   114,   110,   118,   119,    70,   116,   828,   116,
+      74,   759,   110,    77,   222,    79,   132,    72,   116,    74,
+      75,    76,    86,    72,    82,    74,    75,   578,    83,    84,
+     748,   120,   121,  1157,    83,    84,   426,   427,   589,    72,
+     109,    74,    75,   692,    72,   694,    74,    75,    76,   698,
+      83,    84,   260,   109,   109,    83,    84,   265,   109,   879,
+     111,  1490,  1491,    82,   879,   114,   110,   118,   119,   620,
+     112,   109,   116,   111,   625,    72,  1043,    74,    75,    76,
+     631,   901,   109,   110,   111,    49,    83,    84,   908,   909,
+     910,   109,   912,   111,   119,    72,  1123,    74,    75,    76,
+    1127,  1128,   473,  1093,   924,   128,    83,    84,  1098,  1288,
+      94,   879,  1236,   484,    88,    89,   506,   937,   938,   129,
+     901,   511,   942,   131,   514,   621,   111,   947,   948,   484,
+    1093,   109,   109,   111,   685,  1098,   109,     0,     1,   252,
+     947,   637,   350,   506,   964,   508,   112,   110,   511,   213,
+     114,   514,   109,   116,   974,   110,   652,   948,   109,   110,
+     111,   879,    92,    93,    72,    49,    29,    30,    76,    32,
+     112,   109,   723,   111,   110,    83,    84,   567,   112,    63,
+      43,   109,    66,   111,   110,    69,    49,  1007,   109,   110,
+     111,   909,   110,    72,    57,   110,   747,    76,  1115,   110,
+      63,   109,  1503,    66,    83,    84,    69,   109,  1028,  1029,
+     118,   119,   109,   110,   111,   109,  1007,   111,   111,  1246,
+      83,    84,   871,   431,    58,    59,    60,   112,  1048,   878,
+     109,   114,   111,  1048,    85,    86,    87,   733,   116,   118,
+     119,  1261,  1262,  1263,   107,   131,   210,   110,   109,   114,
+     111,   622,  1553,   915,   117,   917,   807,   114,   109,  1007,
+     111,   812,   113,   114,   148,   473,   115,   116,  1088,   109,
+     919,   116,   117,  1093,   110,   111,   117,   161,  1098,   112,
+    1048,    58,    59,   115,   116,   148,   110,  1107,   352,   110,
+     354,   116,   117,   156,   112,  1115,   116,   117,   161,   112,
+    1048,    44,    45,   187,   552,   553,   560,   561,   272,  1336,
+    1218,   112,  1132,  1340,   554,   555,   112,     4,     5,     6,
+       7,     8,     9,   186,   187,   117,   210,   117,   699,   978,
+    1048,   295,   116,    29,    85,    86,    87,  1157,   222,   202,
+     110,   110,   713,   307,   112,   112,   132,   210,   114,   110,
+     901,   115,   115,   115,   110,   109,   219,   908,   109,   222,
+     111,   116,   113,   114,   110,   110,   229,   116,   110,   117,
+     110,   484,   110,   924,   110,   116,   110,   110,   442,  1199,
+    1200,   244,    69,   110,    71,   248,   594,   110,   110,   252,
+     253,   110,     0,  1200,   110,   946,   947,   948,  1218,   110,
+     110,   110,  1222,   266,   267,   110,   110,  1222,   115,    29,
+     273,   131,   110,   116,   622,  1442,  1236,   280,   117,   627,
+    1240,   112,   112,   116,    32,   110,   110,   110,   117,   117,
+    1079,   112,   112,  1240,   116,    43,   114,  1218,   809,  1157,
+     110,    49,   110,   110,   328,   132,     4,     5,     6,     7,
+       8,     9,   116,   110,  1222,    63,  1007,   116,    66,   110,
+     116,    69,   110,   112,   109,   328,   109,   109,  1288,  1289,
+     109,   109,   112,   110,   132,    33,   110,  1297,  1395,   115,
+    1538,   110,  1302,   115,    72,   348,   349,  1302,    76,   115,
+     454,   699,   114,   112,   129,    83,    84,    10,    11,    12,
+      13,    14,   365,   110,  1222,   713,   369,   132,   879,   112,
+     116,    69,   116,    71,   112,  1335,   110,   380,  1236,   110,
+     110,   109,   406,   112,   879,  1528,    39,   112,  1335,   112,
+     118,   119,   110,   396,  1302,  1528,   112,  1088,   112,  1529,
+     148,  1528,   506,   406,   508,   112,  1195,   511,    47,  1528,
+     514,   132,  1528,   161,    67,  1528,   115,  1528,   110,   132,
+     132,   424,   132,  1553,   132,   115,  1529,   430,   117,   432,
+     110,   879,   115,   112,    66,  1395,   112,   112,   186,   187,
+     112,  1132,   112,   112,  1302,   112,  1503,   112,   110,   110,
+    1553,    83,   947,  1413,   112,   112,   109,   109,   111,   109,
+     109,   809,   210,    60,   467,   118,   119,   110,   110,   472,
+     114,   117,   132,  1394,   222,   112,   112,   480,  1438,   110,
+      96,   484,   112,   110,    96,   488,   118,     3,   491,   109,
+     493,  1438,   109,   115,    10,    11,    12,    13,    14,  1010,
+     110,   112,  1462,   132,   252,   110,   110,  1462,   110,  1469,
+     513,  1471,    42,  1473,  1469,   116,   110,   117,   266,   132,
+     110,    96,    96,    39,   132,   528,   132,  1218,   531,   161,
+     533,   534,   110,  1528,  1528,  1528,   132,  1048,   117,   110,
+     132,   110,   110,  1503,   132,   115,   112,   112,  1508,  1240,
+    1510,    67,   109,  1048,  1462,   132,   115,   115,   110,   110,
+     132,  1469,  1522,   110,   110,  1064,   562,  1522,  1528,  1529,
+     563,   565,   564,  1222,  1491,  1381,  1529,  1563,  1538,   582,
+     328,   685,   566,  1312,  1128,  1340,   589,  1469,   917,  1079,
+     222,   685,   685,  1553,  1098,    66,   698,   600,   925,   602,
+    1553,   349,   978,  1051,  1462,    76,   871,  1538,   649,   944,
+    1240,  1469,   582,   723,  1522,   484,   570,   733,   621,   570,
+      72,   570,    74,    75,    76,    -1,   879,    -1,   260,    -1,
+      -1,    83,    84,   265,   637,    -1,    -1,    -1,    -1,    -1,
+     643,    -1,    -1,    -1,  1335,    -1,    -1,   118,    -1,   652,
+      -1,   654,   655,   656,    -1,    -1,    -1,   109,   406,   111,
+      -1,    -1,  1010,    -1,  1522,   117,   118,   119,    -1,    -1,
+      -1,  1201,  1202,    -1,  1204,     0,     1,    -1,    -1,    -1,
+      -1,  1211,    -1,  1213,    -1,   688,    -1,    -1,  1199,   692,
+     161,   694,    -1,    -1,   947,   698,    -1,    10,    11,    12,
+      13,    14,    -1,   706,  1199,  1200,    -1,    32,    -1,    -1,
+      -1,  1222,     3,    -1,    -1,    -1,   719,   720,   350,    10,
+      11,    12,    13,    14,    49,    -1,    39,  1222,    -1,    -1,
+     733,    72,    -1,    74,    75,    76,   484,    -1,    -1,    -1,
+     488,    -1,    83,    84,    69,  1240,    -1,  1438,    39,    -1,
+      -1,   222,    -1,    -1,    67,    -1,    -1,    -1,  1394,    72,
+      -1,    74,    75,    76,    -1,     0,    -1,    -1,   109,    -1,
+      83,    84,    -1,    -1,  1222,    -1,    67,   118,   119,    -1,
+    1471,   106,  1473,    -1,    -1,    -1,  1297,    -1,    -1,   260,
+      -1,  1302,    55,    -1,   265,  1048,   109,    32,   111,   431,
+      -1,    -1,  1297,    -1,    -1,   118,   119,  1302,    -1,   280,
+      -1,    -1,    -1,   816,    -1,    -1,    -1,  1508,    -1,  1510,
+     924,    -1,    -1,   148,    -1,   828,    72,    -1,    74,    75,
+      76,   156,   157,    -1,    69,    98,    -1,    83,    84,    -1,
+    1335,   473,    -1,    -1,    -1,  1375,    -1,  1538,    -1,    -1,
+       3,  1199,   600,    -1,   602,    -1,    -1,    10,    11,    12,
+      13,    14,   187,   109,    -1,   111,    -1,    -1,   871,    -1,
+    1318,    -1,   118,   119,    -1,   878,    -1,   202,    -1,   350,
+     205,   206,    -1,    -1,   464,   210,    39,    -1,    -1,    72,
+      -1,    74,    75,    76,    -1,    -1,    -1,    -1,   901,    -1,
+      83,    84,   464,    -1,    -1,    -1,   231,   910,    -1,   912,
+     235,    -1,   237,    -1,    67,    -1,   919,    -1,    -1,    -1,
+      -1,   246,   157,    -1,    -1,  1373,   109,   252,  1376,    -1,
+      -1,   194,   257,    -1,    -1,   118,   119,    -1,    -1,   942,
+     688,    -1,   267,  1438,    -1,    -1,    -1,  1200,    -1,  1297,
+     275,  1462,    -1,    -1,   217,    -1,    -1,    -1,  1469,   962,
+     431,    -1,   594,    -1,   227,    -1,    -1,  1462,    -1,  1222,
+      -1,   719,   720,  1421,  1469,   978,    -1,   448,  1426,    -1,
+      -1,    -1,    -1,   986,  1088,    -1,   989,  1240,   991,    -1,
+     622,    -1,    -1,    -1,    -1,   627,   231,    -1,    -1,    -1,
+      -1,    -1,   473,    -1,    -1,    -1,    -1,    -1,  1456,    -1,
+      -1,  1522,    -1,    -1,    -1,    -1,   341,   252,    -1,    -1,
+     345,    -1,   257,    -1,    -1,    -1,   351,  1522,    -1,    -1,
+      -1,    -1,   295,    -1,    -1,    -1,    -1,    -1,  1041,   364,
+      -1,    -1,    -1,   368,    -1,    -1,   371,    -1,    -1,  1302,
+      -1,    26,    27,    28,    -1,    -1,    -1,    -1,    -1,    72,
+      -1,    74,    75,    76,    -1,    -1,    -1,   699,   816,    -1,
+      83,    84,    -1,    -1,    -1,    -1,  1079,    -1,    -1,    -1,
+     828,   713,  1335,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1093,   671,    -1,   418,  1542,  1098,   109,     0,   111,    -1,
+    1548,    -1,    -1,    -1,    -1,   118,   119,    -1,   433,   671,
+      -1,  1559,  1115,   438,    -1,  1563,   351,    -1,    -1,    -1,
+      -1,   446,    -1,   594,    99,    -1,   101,    -1,    -1,    32,
+      -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,   464,
+      -1,    -1,   467,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   622,    -1,    -1,    -1,    -1,   627,   482,    -1,   484,
+      39,    -1,   910,    -1,   912,    -1,    69,   492,    -1,    -1,
+      -1,   496,    -1,    -1,    -1,    -1,    -1,   809,    -1,    -1,
+     443,    -1,    -1,   418,    -1,  1438,    -1,     0,    67,    -1,
+      -1,    -1,  1195,    72,   942,    74,    75,    76,   433,    -1,
+     525,   526,    -1,   438,    83,    84,   469,   182,    -1,  1462,
+      -1,   446,    -1,   793,    -1,  1218,  1469,   192,   193,    32,
+      -1,    -1,   197,   803,   199,   200,    -1,    -1,   699,   464,
+     109,   793,   111,    -1,    -1,    -1,    -1,   817,    -1,   118,
+     119,   803,   713,   506,    -1,    -1,   571,   482,   511,   484,
+      -1,   514,    -1,    -1,   157,   817,    69,    -1,  1261,  1262,
+    1263,    -1,   733,    -1,   589,   590,    -1,    -1,    -1,  1522,
+      -1,    -1,    10,    11,    12,    13,    14,   602,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
+      -1,   526,    -1,    -1,    -1,   620,    -1,   190,    -1,    -1,
+     625,    39,    -1,    -1,   197,    -1,   631,    -1,    -1,   634,
+     635,   636,    -1,    -1,    39,    -1,  1319,    -1,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   653,    67,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   696,   809,    -1,
+      -1,    -1,    67,    -1,   157,  1093,   671,    72,    -1,   252,
+    1098,    76,   131,    -1,   257,   590,    -1,   682,    83,    84,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,  1473,
+      -1,   109,    -1,   111,    -1,    -1,   269,    -1,  1010,    -1,
+     118,   119,    -1,   708,   109,    -1,   711,    -1,    -1,    -1,
+      -1,  1394,  1395,   118,   119,   720,    -1,    -1,   723,   634,
+     635,   636,  1405,  1406,  1508,    -1,  1510,   670,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   679,    -1,   653,    -1,
+     683,    -1,   747,   748,    -1,    -1,    -1,    -1,   753,    -1,
+     323,   790,    -1,    -1,    -1,    -1,   671,    -1,   331,   252,
+    1443,   334,    -1,    -1,   257,  1025,  1026,   682,   351,    -1,
+      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    -1,
+      -1,    -1,    -1,  1025,  1026,    -1,    -1,    -1,   793,    -1,
+      -1,    -1,    -1,   708,    -1,    -1,   711,    -1,   803,    -1,
+     805,    -1,   807,    39,    -1,   810,    -1,   812,   813,    -1,
+      -1,    -1,   817,    -1,    10,    11,    12,    13,    14,    -1,
+    1503,  1504,   827,  1083,  1084,   398,    -1,    -1,   867,   402,
+    1513,    67,    -1,   748,    -1,   418,    72,    -1,    74,    75,
+      76,  1083,  1084,    39,    -1,  1528,  1529,    83,    84,    -1,
+     433,    -1,    -1,    -1,    -1,   438,    -1,    -1,   351,  1010,
+      -1,    -1,    -1,   446,    -1,    -1,    -1,    -1,     1,    -1,
+    1553,    67,   911,   109,   879,   111,    -1,    -1,   793,    -1,
+      -1,   464,   118,   119,    -1,    -1,    -1,  1199,   803,    -1,
+     805,    -1,    -1,    -1,    -1,   810,   901,    -1,   813,   482,
+      -1,   484,   817,   908,   909,    -1,   479,   912,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,    -1,   956,    -1,   574,
+     575,    -1,   118,   119,    -1,   418,    72,    -1,    74,    75,
+      76,    -1,    -1,   938,    -1,    -1,    -1,    83,    84,    -1,
+     433,   946,   947,   526,   671,   438,    -1,    -1,   603,    -1,
+      -1,   606,   607,   446,   609,   994,   611,   612,    -1,   964,
+     903,   616,   617,   109,   879,   111,    -1,    -1,    -1,    -1,
+      -1,   464,   118,   119,  1234,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1297,    -1,    -1,    -1,   482,
+      -1,   484,  1234,    -1,   909,    -1,    -1,   570,   571,     0,
+       1,    -1,  1007,    -1,    -1,    -1,  1045,   590,    -1,  1269,
+      -1,    -1,    -1,    -1,    -1,  1020,    -1,  1277,  1278,  1279,
+    1025,  1026,    -1,  1028,  1029,    -1,    -1,  1269,    -1,    -1,
+      -1,    32,    -1,   526,    -1,  1277,  1278,  1279,    -1,    -1,
+      -1,    -1,    -1,  1048,    -1,    -1,    -1,    -1,  1199,   964,
+      -1,   634,   635,   636,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    66,   793,    -1,    69,    -1,
+     653,    -1,    -1,    -1,    -1,    -1,   803,    -1,  1083,  1084,
+      -1,    -1,    -1,  1343,    -1,   658,  1125,    -1,   671,   662,
+     817,    -1,    -1,    -1,    -1,    -1,    -1,   590,    -1,   682,
+    1528,  1343,   757,   758,    -1,    -1,    -1,    -1,    -1,    -1,
+    1025,  1026,    -1,  1028,  1029,    -1,  1059,    -1,    -1,    -1,
+     253,    -1,    -1,    -1,    -1,   708,    -1,  1132,   711,    -1,
+      -1,    -1,    -1,  1048,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   634,   635,   636,    -1,    -1,  1297,    -1,    -1,  1188,
+    1189,    -1,  1157,    -1,     0,    -1,   157,    -1,    -1,    -1,
+     653,    -1,    -1,    -1,    -1,   748,    -1,    -1,  1083,  1084,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   671,    10,
+      11,    12,    13,    14,    -1,    -1,    32,    -1,    -1,   682,
+      -1,    -1,    -1,    -1,    -1,  1200,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
+     793,    -1,    -1,  1218,    -1,   708,    -1,  1222,   711,    -1,
+     803,   222,   805,    69,   797,    -1,    -1,   810,    -1,  1234,
+     813,  1236,    -1,    -1,   817,  1240,    67,    -1,    -1,    -1,
+      -1,    72,  1157,    74,    75,    76,    -1,    -1,    -1,    -1,
+      -1,   252,    83,    84,    -1,   748,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1269,    -1,   921,    -1,    -1,    -1,
+      -1,    -1,  1277,  1278,  1279,    -1,    -1,    -1,   109,    -1,
+      -1,    -1,    -1,  1288,  1289,  1200,    -1,   118,   119,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   879,  1302,  1025,  1026,
+     793,    -1,    -1,    -1,    -1,    -1,    -1,  1222,    -1,    -1,
+     803,   157,   805,    -1,    -1,    -1,    -1,   810,    -1,  1234,
+     813,  1236,    -1,    -1,   817,    -1,   909,    -1,    -1,    -1,
+    1335,    -1,    -1,    -1,   467,    -1,    -1,    -1,  1343,    -1,
+      -1,    -1,    -1,   916,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1269,    -1,  1083,  1084,    -1,    -1,
+    1399,    -1,  1277,  1278,  1279,    -1,    -1,    -1,  1311,    -1,
+      -1,    -1,    -1,  1288,  1289,    -1,    -1,    -1,  1417,    -1,
+     513,   964,    -1,    -1,    -1,    -1,   879,  1302,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   528,    -1,    -1,   531,    -1,
+     533,   534,    -1,    -1,    -1,    -1,   252,    -1,  1413,    -1,
+      -1,   257,    26,    27,    28,    -1,   909,    -1,    -1,    -1,
+      -1,    -1,    -1,   996,    -1,    -1,    -1,    -1,  1343,    -1,
+    1085,    -1,   433,  1438,    -1,    -1,    -1,    -1,    -1,    -1,
+    1013,    -1,  1025,  1026,    -1,  1028,  1029,    -1,    -1,   582,
+      -1,  1490,  1491,    -1,    53,    -1,    55,  1462,    -1,    58,
+      59,    60,    -1,    62,  1469,  1048,    -1,    -1,    -1,    -1,
+      -1,   964,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,
+      -1,    -1,    -1,   484,    -1,    99,    -1,   101,    -1,    -1,
+      89,    90,    -1,    -1,    -1,    -1,    -1,    -1,  1413,    -1,
+    1083,  1084,    -1,    -1,    -1,   351,    -1,    -1,    -1,    -1,
+      -1,    -1,   126,    -1,    -1,    -1,    -1,  1522,  1091,    -1,
+      -1,   654,    -1,   656,  1529,   526,    -1,  1470,    -1,  1472,
+      -1,    -1,  1025,  1026,    -1,  1028,  1029,    -1,    -1,    -1,
+      -1,    -1,  1269,    -1,    -1,    -1,    -1,  1462,    -1,    -1,
+    1277,  1278,  1279,    -1,  1469,  1048,    -1,    -1,    -1,    -1,
+    1133,    -1,  1217,    -1,  1507,    -1,  1509,    -1,   182,    -1,
+      -1,    -1,   418,   706,  1157,    -1,   190,    -1,   192,   193,
+      -1,    -1,    -1,   197,    -1,   199,   200,   433,    -1,   590,
+    1083,  1084,   438,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     446,    -1,    -1,    -1,    -1,    -1,    -1,  1522,    -1,  1552,
+      -1,  1554,    -1,    -1,    -1,    -1,  1343,  1200,   464,    10,
+      11,    12,    13,    14,  1567,  1568,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   634,   635,   636,   482,    -1,   484,  1222,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
+      -1,  1234,   653,  1236,    -1,   269,    -1,    -1,    10,    11,
+      12,    13,    14,    -1,  1157,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
+     526,    72,    -1,    74,    75,    76,  1269,    39,    -1,    -1,
+      -1,    -1,    83,    84,  1277,  1278,  1279,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1288,  1289,  1200,    -1,    -1,
+     711,    -1,    -1,    -1,    -1,    67,    -1,    -1,   109,  1302,
+      72,    -1,    -1,    -1,    76,    -1,    -1,   118,   119,  1222,
+      -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1234,    -1,  1236,   590,   344,    -1,   346,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,   357,   358,
+    1343,    -1,    -1,    -1,    -1,    -1,   118,   119,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1269,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1277,  1278,  1279,    -1,   634,   635,
+     636,    -1,    -1,    -1,    -1,  1288,  1289,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   805,    -1,    -1,   653,    -1,  1302,
+      -1,    -1,   813,    -1,    -1,     7,    -1,    -1,    10,    11,
+      12,    13,    14,    -1,    -1,   671,    -1,    -1,    -1,   962,
+    1413,    -1,    -1,    -1,    -1,    -1,   682,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    37,    38,    39,    40,    -1,
+    1343,    -1,    -1,   986,    -1,    -1,   989,    -1,   991,    -1,
+      -1,    -1,   708,    -1,    -1,   711,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    66,    67,    -1,    -1,   879,  1462,
+      72,    -1,    -1,    -1,    76,    -1,  1469,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
+      -1,    -1,   748,    -1,    -1,    -1,    -1,    -1,  1041,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
+    1413,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
+     122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1522,
+      -1,    -1,    -1,    -1,    -1,    -1,   947,   793,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   803,    -1,   805,
+     574,   575,    -1,   964,   810,    -1,    -1,   813,    -1,  1462,
+      -1,   817,    37,    38,    -1,    40,  1469,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   603,
+      -1,    -1,   606,   607,    -1,   609,    -1,   611,   612,    -1,
+      -1,    66,   616,   617,    -1,    -1,    -1,    72,    -1,    74,
+      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,  1028,  1029,  1522,
+      -1,    -1,    -1,   879,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,  1048,   113,   114,
+      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
+      -1,    -1,    -1,   909,    -1,    -1,    -1,    -1,    -1,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
+      -1,   700,    -1,   702,    -1,    39,    -1,    -1,    -1,    -1,
+     709,   710,    -1,    -1,    -1,   714,    -1,    -1,   964,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   726,  1261,  1262,
+    1263,    -1,   731,    67,    -1,    69,    -1,    71,    72,    -1,
+      74,    75,    76,   757,   758,    -1,    -1,    -1,    -1,    83,
+      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   761,    -1,    -1,    -1,    -1,    -1,    37,    38,
+      -1,    40,    -1,    -1,    -1,   109,    -1,   111,    -1,  1025,
+    1026,    -1,  1028,  1029,   118,   119,  1319,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,  1199,  1200,
+      -1,    -1,  1048,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,  1222,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1083,  1084,  1240,
+     109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
+     119,   120,   121,   122,   123,    -1,    -1,    49,    -1,    -1,
+      -1,    -1,   861,   862,   863,   864,    -1,   866,    -1,    -1,
+      -1,    -1,  1405,  1406,    66,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   882,    -1,    -1,    -1,  1288,  1289,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1297,   896,    -1,    -1,
+      -1,  1302,   916,    -1,    -1,    -1,    -1,   921,    -1,    -1,
+    1443,  1157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   114,    -1,    -1,    -1,   118,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1335,    -1,    -1,   936,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1200,   147,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   157,    -1,    -1,    -1,   161,
+      -1,  1504,    -1,    -1,    -1,    -1,  1222,    -1,    -1,    -1,
+    1513,    -1,    -1,    -1,   983,    -1,    -1,    -1,  1234,    -1,
+    1236,   990,    -1,    -1,    -1,    -1,   995,    -1,    -1,    -1,
+      -1,  1000,    -1,  1002,    -1,    -1,    -1,  1006,    -1,  1008,
+    1009,    -1,  1413,  1012,    -1,    -1,    -1,    -1,   210,    -1,
+      -1,    -1,  1021,  1269,    -1,    -1,    -1,    -1,    -1,    -1,
+     222,  1277,  1278,  1279,    -1,    -1,    -1,  1438,    -1,    -1,
+    1039,  1040,  1288,  1289,    -1,    -1,    -1,    -1,   240,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1302,    -1,    -1,    -1,
+      -1,  1462,    -1,    -1,    -1,    -1,    -1,  1066,  1469,    -1,
+    1069,  1085,    -1,   265,    -1,    -1,    -1,    -1,    -1,    -1,
+     272,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1343,    -1,    -1,
+      -1,    -1,    -1,   295,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1112,    -1,   307,    -1,    -1,    -1,  1118,
+    1119,  1522,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1130,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1140,    -1,    -1,  1143,    -1,  1145,    -1,    -1,  1148,
+      -1,    -1,    -1,   345,    -1,    -1,    -1,    -1,   350,    -1,
+      -1,    -1,  1161,    -1,    -1,    -1,    -1,  1413,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1174,    -1,  1176,  1177,  1178,
+    1179,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1192,    -1,  1194,    -1,    -1,    -1,  1198,
+      -1,    -1,    -1,  1217,    -1,    66,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    76,  1462,    78,    -1,    80,
+      -1,    -1,    -1,  1469,    -1,    -1,    87,    -1,  1227,  1228,
+      -1,    -1,    -1,    -1,   426,   427,    -1,    -1,    -1,    -1,
+      -1,   433,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,   120,
+     121,   122,   454,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1522,    -1,    -1,    -1,
+      -1,  1280,  1281,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     482,  1290,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     161,    -1,   494,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   506,    -1,   508,    -1,    -1,   511,
+      -1,   513,   514,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   526,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1341,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1354,    -1,  1356,  1357,  1358,
+      -1,   222,    -1,   224,   225,   226,    -1,    -1,    -1,  1368,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1377,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   578,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   590,   260,
+      -1,    -1,   594,    -1,   265,  1404,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   280,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   620,    -1,
+      -1,    -1,    -1,   625,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   634,   635,   636,    -1,    -1,    -1,    -1,    -1,
+    1449,  1450,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   653,    -1,  1462,    -1,    -1,    -1,   328,    -1,    -1,
+    1469,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   350,
+      -1,    -1,    -1,   685,   355,   356,    -1,    -1,    -1,    -1,
+      -1,    -1,   363,  1502,    -1,    -1,    -1,  1506,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   711,
+       7,   713,    92,    10,    11,    12,    13,    14,    -1,    -1,
+      -1,    -1,   102,    -1,    -1,    -1,  1535,    -1,  1537,    -1,
+      -1,    -1,    -1,    -1,    -1,   406,    -1,    -1,    -1,    -1,
+      37,    38,    39,    40,    -1,    -1,   748,    -1,    -1,    -1,
+      -1,    -1,    -1,   424,    -1,    -1,  1565,  1566,   429,    -1,
+     431,    -1,    -1,    -1,  1573,  1574,    -1,    -1,    -1,    66,
+      67,    -1,    -1,    -1,    -1,    72,    -1,   448,   158,    76,
+     451,   452,    79,    80,    81,    82,    83,    84,   459,    86,
+      87,    -1,   172,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   473,   805,    -1,    -1,    -1,   809,    -1,   480,
+      -1,   813,   109,    -1,   111,   195,    -1,    -1,    -1,    -1,
+      -1,   118,   119,   120,   121,   122,   123,    -1,    -1,   209,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   218,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   228,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,
+      38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   253,    -1,    -1,    -1,    -1,   258,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
+      -1,   271,    -1,    -1,    72,    -1,    -1,   277,    76,   279,
+      -1,    79,    80,    81,    82,    83,    84,   909,    86,    87,
+      -1,    -1,    -1,    -1,    -1,    -1,   296,    -1,    -1,    -1,
+      -1,    -1,   924,   594,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,
+     118,   119,   120,   121,   122,   123,   948,    -1,    -1,    -1,
+      -1,   622,    -1,    -1,    -1,    -1,   627,    -1,   338,    -1,
+      -1,    -1,   964,   343,    -1,    -1,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,   372,    30,    31,    32,   376,   377,    -1,   379,
+      -1,    -1,    39,    -1,    -1,  1007,   386,   387,    -1,   389,
+     390,    -1,   392,    -1,   394,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1028,  1029,   699,    -1,
+      67,   411,    69,    -1,    71,    -1,    -1,    74,    75,   419,
+      -1,    -1,   713,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      37,    38,   733,    40,   444,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
+      -1,   118,   119,    -1,    -1,    -1,  1088,    -1,    -1,    66,
+     470,    -1,    -1,    -1,    -1,    72,   476,    -1,    -1,    76,
+      -1,   481,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   797,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   111,    -1,    -1,   517,   809,   116,
+      -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
+      -1,    -1,   532,    -1,    -1,  1157,     0,   828,    -1,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    33,
+     570,    -1,    36,    -1,    -1,    39,    40,  1199,    -1,   579,
+      -1,   156,   157,    -1,    -1,    -1,   586,    -1,    37,    38,
+      -1,    40,   592,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      64,   601,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
+      74,    75,    76,    -1,  1236,   190,    -1,    66,    -1,    83,
+      84,    -1,   197,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,    -1,   642,    -1,    -1,   109,    -1,   111,    -1,    -1,
+      -1,   942,    -1,    -1,   118,   119,    -1,    -1,    -1,    -1,
+     109,    -1,   111,    -1,    -1,   114,  1288,  1289,    -1,   118,
+     119,   120,   121,   122,   123,  1297,    -1,    -1,   678,    -1,
+      -1,    -1,    -1,   974,    -1,    -1,   686,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   269,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    -1,    -1,    -1,   717,    -1,  1010,
+      -1,    -1,    -1,    -1,    39,    -1,    -1,   727,   728,    -1,
+    1021,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
+      -1,   741,    -1,    -1,   147,    -1,    -1,    -1,   323,    -1,
+      -1,    -1,    67,    -1,   157,    -1,   331,   332,    -1,   334,
+     335,    -1,   762,    78,   764,    66,   169,   170,   768,    -1,
+     345,    72,    -1,    -1,   349,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,  1413,    -1,   368,    -1,    -1,   371,    -1,    -1,    -1,
+      -1,    -1,  1093,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,  1107,   118,   119,   120,
+     121,   122,   123,   398,    -1,    -1,    -1,   402,    -1,    -1,
+      -1,    -1,   832,    -1,    -1,    -1,    -1,   240,    -1,   839,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1471,
+      -1,  1473,   852,    -1,   854,    -1,    -1,    -1,   433,    -1,
+      -1,   264,    -1,    -1,    -1,    -1,    -1,    -1,   868,    -1,
+      -1,    -1,    -1,    -1,    -1,   875,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1508,   887,  1510,    -1,
+     890,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   479,    -1,    -1,   482,  1199,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1538,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,   521,    -1,    -1,    -1,
+     525,   526,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   969,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   380,    -1,    -1,
+      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
+      -1,    -1,    -1,    -1,    -1,   570,   571,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1005,  1297,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   589,   590,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   110,   111,   600,    -1,   602,   603,    -1,
+      -1,   118,   119,    -1,   609,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   619,   620,    -1,    -1,    -1,    -1,
+     625,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   634,
+     635,   636,    -1,  1063,    -1,    -1,    -1,    -1,    -1,  1069,
+      -1,   474,    -1,    -1,    -1,    -1,    -1,    -1,   653,    -1,
+      -1,    -1,    -1,   658,   659,    -1,    -1,   662,   663,    -1,
+      -1,    -1,    -1,    -1,   669,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1103,    -1,    -1,    -1,    -1,  1108,    -1,
+     513,    -1,    -1,   688,    -1,    -1,  1116,    -1,    -1,    -1,
+      -1,    -1,    -1,   526,    -1,    -1,    -1,    -1,   531,    -1,
+      -1,   534,    -1,    -1,    -1,    -1,   711,   712,    -1,    -1,
+      -1,    -1,    -1,   546,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1152,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1164,   568,    -1,  1167,    -1,  1169,
+      -1,    -1,   747,   748,    -1,   578,    -1,   752,   753,    -1,
+      -1,    -1,   585,  1183,  1184,    -1,    -1,   590,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1205,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   797,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     805,    -1,    -1,    -1,    -1,    -1,   639,   812,   813,    -1,
+      -1,   816,    -1,   818,    -1,   648,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   828,  1254,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1553,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    33,    -1,    -1,    36,    -1,    -1,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   901,    -1,    -1,    -1,
+    1330,    -1,  1332,   908,   909,   910,    67,   912,    69,    -1,
+      71,   916,    -1,    74,    75,   748,  1346,   750,  1348,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   760,    -1,    -1,
+      -1,    -1,   937,   938,   767,    -1,  1366,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     111,    -1,  1382,  1383,    -1,    -1,    -1,   118,   119,   964,
+      -1,    -1,    -1,  1393,    -1,    -1,  1396,    -1,    -1,   974,
+      -1,    -1,    -1,    -1,    -1,    -1,   809,   810,    -1,    -1,
+     813,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1419,
+      -1,   996,   997,    -1,   827,    -1,    -1,    -1,  1428,    -1,
+      -1,  1431,  1007,  1433,  1434,  1435,    -1,    -1,  1013,  1014,
+      -1,  1016,  1017,  1018,    -1,    -1,    -1,    -1,    -1,   283,
+      -1,   285,   286,  1028,  1029,    37,    38,    -1,    40,   293,
+     294,    -1,    -1,    -1,   867,    -1,    -1,    -1,   871,    -1,
+      -1,    -1,    -1,   307,   308,  1475,    -1,  1477,    -1,  1479,
+      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
+      72,    -1,    -1,    -1,    76,  1495,    -1,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,   909,    -1,    -1,    -1,
+      -1,   345,    -1,    -1,    -1,    -1,  1091,    -1,  1093,    -1,
+      -1,    -1,    -1,  1098,    -1,    -1,    -1,   109,    -1,   111,
+      -1,    -1,  1107,    -1,    -1,    -1,   118,   119,   120,   121,
+     122,   123,    -1,    -1,    -1,   948,    -1,   381,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1132,  1133,  1134,
+      -1,   964,   965,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   978,    -1,    -1,    -1,    -1,
+      -1,   984,  1157,    -1,   987,    -1,   989,    -1,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,     0,     0,     0,     0,    31,     0,   284,   285,     0,
-     286,  1051,     0,  1052,  1419,  1420,  1053,  1054,  1055,  1056,
-    1057,  1058,  1059,  1060,     0,     0,  1549,  1061,     0,     0,
-       0,  1062,  1063,    34,    33,    35,   287,    36,     0,     0,
-      38,    39,  1064,     0,     0,     0,   289,     0,     0,   290,
-     291,   292,   293,    41,    42,     0,   294,   295,     0,     0,
-       0,     0,  1327,     0,    43,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   296,
-       0,   380,     0,     0,   173,     0,     0,     0,    46,    47,
-     298,   299,   300,   301,     0,     0,   284,   285,  1066,   286,
-    1051,     0,  1052,  1419,  1420,  1053,  1054,  1055,  1056,  1057,
-    1058,  1059,  1060,     0,     0,     0,  1061,     0,     0,     0,
-    1062,  1063,     0,    33,     0,   287,     0,     0,     0,     0,
-       0,  1064,     0,     0,     0,   289,     0,     0,   290,   291,
-     292,   293,    41,    42,     0,   294,   295,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   296,     0,
-     380,     0,     0,   173,     0,     0,     0,    46,    47,   298,
-     299,   300,   301,     0,     0,   284,   285,  1066,   286,  1051,
-       0,  1052,     0,     0,  1053,  1054,  1055,  1056,  1057,  1058,
-    1059,  1060,     0,     0,     0,  1061,     0,     0,     0,  1062,
-    1063,     0,    33,     0,   287,     0,     0,     0,     0,     0,
-    1064,     0,     0,     0,   289,     0,     0,   290,   291,   292,
-     293,    41,    42,     0,   294,   295,     0,     0,     0,     0,
-       0,     0,    43,   284,   285,     0,   286,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   296,     0,   380,
-       0,     0,   173,     0,     0,     0,    46,    47,   298,   299,
-     300,   301,   287,     0,     0,     0,  1066,     0,   641,     0,
-     141,   142,   289,     0,     0,   290,   642,   292,   293,    41,
-      42,     0,   294,   295,     0,     0,     0,     0,     0,     0,
-      43,   284,   285,     0,   286,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   296,     0,   643,     0,   644,
-     381,     0,     0,     0,    46,    47,   298,   299,   300,   301,
-     287,     0,     0,     0,     0,     0,   288,     0,     0,     0,
-     289,     0,     0,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,     0,     0,     0,     0,     0,     0,    43,   284,
-     285,     0,   286,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   296,     0,   380,     0,     0,   284,   285,
-       0,   286,   710,    47,   298,   299,   300,   301,   287,     0,
-       0,     0,     0,     0,   641,     0,     0,     0,   289,     0,
-       0,   290,   291,   292,   293,    41,    42,   287,   294,   295,
-       0,     0,     0,   288,     0,     0,    43,   289,     0,     0,
-     290,   291,   292,   293,    41,    42,     0,   294,   295,     0,
-       0,   296,     0,   765,     0,    43,   284,   285,     0,   286,
-      46,    47,   298,   299,   300,   301,     0,     0,     0,     0,
-     296,     0,   380,     0,     0,   284,   285,     0,   286,   345,
-      47,   298,   299,   300,   301,   287,     0,     0,     0,     0,
-       0,   288,     0,     0,     0,   289,     0,     0,   290,   291,
-     292,   293,    41,    42,   287,   294,   295,     0,     0,     0,
-     288,     0,     0,    43,   289,     0,     0,   290,   291,   292,
-     293,    41,    42,     0,   294,   295,     0,     0,   512,     0,
-       0,     0,    43,     0,     0,     0,     0,    46,    47,   298,
-     299,   300,   301,     0,     0,     0,     0,   515,     0,     0,
-       0,     0,     0,     0,     0,     0,    46,    47,   298,   299,
-     300,   301,     2,   208,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    31,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
-      37,     0,   176,   177,    40,     0,     0,     0,     0,     0,
-       0,    41,    42,   207,     2,   208,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
-      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
-       0,    36,     0,     0,   209,    39,   468,     2,   208,     4,
+      22,    23,    24,    25,    26,    27,    28,  1010,    30,    31,
+      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,  1021,    -1,
+      37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1043,    -1,  1045,  1218,    -1,    67,    -1,    -1,    -1,    66,
+      -1,    -1,    74,    75,    -1,    72,    78,  1060,  1061,    76,
+      -1,  1236,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1081,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
+      -1,    -1,   109,    -1,   111,    -1,   118,   119,    -1,    -1,
+      -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
+      -1,    -1,    -1,  1288,  1289,   549,   550,   551,   552,   553,
+     554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
+     564,   565,   566,    -1,    -1,  1138,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1157,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1172,
+    1173,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,    35,     0,    36,     0,     0,    38,    39,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,    35,     0,    36,     0,     0,   209,
-      39
-};
-
-#define yypact_value_is_default(yystate) \
-  ((yystate) == (-1414))
-
-#define yytable_value_is_error(yytable_value) \
-  YYID (0)
-
-static const yytype_int16 yycheck[] =
-{
-       0,     1,    44,   187,   187,   535,   187,     0,    44,   753,
-     187,    44,   206,   241,   648,   187,   522,   753,   188,   881,
-       1,   753,   107,   221,   118,   187,   187,   514,   621,   170,
-     171,   350,    32,     0,   986,   760,     0,   189,   603,    32,
-     350,   601,   601,   493,    44,   188,   281,   497,    44,   993,
-      50,    39,  1337,   604,    44,  1419,   603,    50,    44,   610,
-     601,   572,    51,    32,    64,    32,    72,    67,    32,    82,
-      70,    64,   157,   601,    67,    95,  1050,    70,    39,   346,
-     419,    44,    45,   267,   267,  1031,   267,   694,   601,    70,
-     267,    63,   107,   601,    50,   267,   296,   110,   268,  1043,
-     439,  1062,  1063,   601,   117,   267,   267,   107,   447,   203,
-     130,   263,   264,  1526,    39,   115,   131,    82,   118,   119,
-     109,   109,    67,   111,    39,   268,   132,    64,   483,  1493,
-      72,  1030,  1031,  1546,    39,    44,    45,    39,   365,    84,
-    1553,   735,   369,   636,   637,   187,   427,   428,   148,   149,
-     111,   187,   115,   881,   187,  1440,   149,   157,   158,   115,
-     132,   654,   162,   635,   636,   637,     0,   258,   912,   162,
-     489,    28,   109,    39,   119,    82,   912,     0,     1,  1140,
-     912,   112,   654,   689,   109,   116,   111,   187,   188,    72,
-     132,   187,   148,   110,   109,   188,   111,   187,    32,   116,
-       0,   187,    82,   203,   109,   114,   111,   720,    82,    32,
-     117,   211,   720,   411,   495,    96,   483,   162,   211,   712,
-      82,    78,   720,   223,     0,   267,    58,   427,   428,   109,
-     223,   267,    32,   514,   267,   118,   110,   407,   115,   116,
-     712,   241,   123,   109,    67,   111,    85,    70,   109,   111,
-     111,   109,    67,   253,   131,   211,    32,   342,   818,   818,
-     253,   261,   109,  1423,   407,   830,   266,   267,   268,   820,
-       1,   996,   283,   273,   113,   268,   108,   818,   223,   111,
-     635,   636,   637,   830,   253,   241,   253,   372,   799,   253,
-     818,    67,  1238,   603,     0,     1,   296,   931,   579,   654,
-     907,    11,  1254,   397,   119,   818,     1,   507,   308,   116,
-     818,   481,   512,   109,   807,   515,   261,   273,   491,    50,
-     818,   266,  1050,  1475,   324,   132,    32,   109,   419,   329,
-    1304,   425,    44,    45,   230,   807,   329,   431,   481,   112,
-      80,   112,   342,   116,   683,  1291,   346,   162,   439,   131,
-     350,   351,   308,   249,   621,    82,   447,   712,  1510,   626,
-    1512,  1521,  1224,   590,    70,   365,  1526,   116,   568,   369,
-     697,   111,   372,   113,    96,   940,   107,   117,   110,   939,
-     939,   110,   109,   132,   115,   117,  1546,   116,   220,   110,
-     346,  1290,  1291,  1553,   749,  1526,   117,   397,   939,   131,
-     223,   123,   114,    90,    91,   632,   351,   407,   223,    10,
-      11,    12,    13,    14,   407,   114,  1009,   148,   116,   253,
-      94,     0,  1553,    80,   258,   425,   157,   427,   428,  1125,
-     253,   431,   605,  1129,   434,   109,   609,   111,    39,   126,
-     127,   526,   274,   116,   118,   119,   261,   223,   129,   281,
-     131,   266,   807,   253,   111,   455,   113,   630,   258,   132,
-     117,   634,   116,  1407,  1408,  1059,    67,  1018,  1019,  1415,
-     976,   427,   428,   473,     3,   112,   207,   253,   132,   116,
-     211,   481,   749,   483,   116,   485,   697,   432,   481,   489,
-    1464,    72,   485,     0,   505,   495,  1224,  1471,   948,   734,
-     132,   116,    83,    84,   991,  1139,   658,   507,   649,   509,
-     241,   830,   512,     3,   514,   515,  1415,   349,   485,   689,
-     830,   485,   522,     0,   116,    32,   526,   527,   110,   474,
-     111,   109,   116,   111,   366,   117,   351,    44,   370,   495,
-     132,    72,   273,    50,  1109,   276,   689,   253,   132,    94,
-    1524,   112,    83,    84,   116,   116,   911,    64,   514,   254,
-      67,  1496,   656,    70,   109,   296,   111,  1502,   116,   109,
-     132,   571,   572,   118,   119,   351,  1304,   308,   131,   579,
-     111,   792,   809,    94,   132,   419,   913,   814,  1523,  1095,
-     590,   591,   683,  1528,  1100,   595,   116,   917,   109,   919,
-     111,   601,   110,   603,   116,   439,   116,   118,   119,   110,
-     110,   342,   132,   447,   116,   346,   116,   432,   709,   419,
-     132,   621,   132,   579,   116,   944,   626,   591,   628,   112,
-     132,   958,   632,   116,   365,   635,   636,   637,   369,   439,
-     132,   372,   149,   109,   911,   111,   110,   447,   112,   483,
-     595,   485,   116,   109,   654,   162,   656,   668,   869,   474,
-     110,    72,   485,   748,   109,   621,   116,   131,   132,   867,
-     626,   110,    83,    84,    50,  1030,   903,   116,   623,   852,
-     187,   188,    72,   628,   109,   485,   686,   109,   110,   689,
-     888,   120,   121,    83,    84,   110,   427,   428,   474,    71,
-     111,   116,   913,    75,   211,   109,    78,   111,    80,   485,
-    1304,   118,   712,   713,   714,    87,   223,   124,   125,   109,
-     720,   721,   950,   109,   455,   111,   109,   738,   912,   912,
-     109,   912,   873,    88,    89,   912,  1464,   468,   109,   115,
-     912,   110,  1009,  1471,   914,   110,   253,   958,   748,   749,
-     912,   912,   110,   753,   754,   700,    72,   110,    74,    75,
-     267,   112,   493,    72,   495,   109,   497,    83,    84,   714,
-     109,   914,   945,   468,    83,    84,   507,    72,   509,   485,
-     595,   512,   115,   514,   515,   996,  1530,  1381,    83,    84,
-     622,  1321,   115,   116,  1530,   526,  1524,   110,  1530,   799,
-    1127,   109,   111,   116,  1159,   132,   638,   807,   623,   809,
-     110,   811,    64,   628,   814,   815,   116,   110,   818,   514,
-     109,   653,   329,   116,   507,   910,   509,   110,  1022,   512,
-     830,   109,   515,   116,   529,   211,  1047,   532,   112,   534,
-     535,   132,   214,   350,    85,    86,    87,   623,   579,   683,
-      72,   815,    74,    75,   110,   557,   558,   559,   560,   590,
-     116,    83,    84,  1190,  1191,   110,   811,   109,   109,   111,
-     111,   116,   113,   114,  1468,   709,  1470,   114,   110,   114,
-     110,   881,   132,   683,   116,   700,   116,   110,   583,   111,
-     621,   109,  1159,   116,   109,   626,   111,   273,   132,   714,
-     407,   632,   734,   903,  1045,   465,   109,  1134,   111,   709,
-     910,   911,   912,   110,   914,   749,  1127,   881,   114,   116,
-     296,   110,   110,   110,   700,  1095,   926,   116,   116,   116,
-    1100,  1525,   308,    82,   109,  1290,   111,   109,   714,   939,
-     940,    85,    86,    87,   944,   109,   110,   111,   109,   949,
-     950,    82,  1095,    92,    93,   686,   112,  1100,     0,     1,
-     655,   119,   657,   116,   117,   109,   966,   111,   949,   113,
-     114,  1238,   129,    72,   110,   111,   976,    76,   485,  1190,
-    1191,   353,   489,   355,    83,    84,   128,    29,    30,   465,
-      32,    58,    59,   724,   950,    94,   811,   115,   116,  1505,
-     116,   117,    44,  1203,  1204,    94,  1206,   131,    50,  1009,
-     109,   111,   707,  1213,   109,  1215,    58,   748,   109,   118,
-     119,   114,    64,  1117,   112,    67,   116,   117,    70,   112,
-    1030,  1031,   109,   110,   111,   811,     4,     5,     6,     7,
-       8,     9,    84,    85,   109,   110,   111,   881,   112,  1555,
-    1050,    44,    45,  1009,   109,   110,   111,   110,   881,    10,
-      11,    12,    13,    14,   553,   554,   108,  1012,   109,   111,
-      30,   443,   110,   110,  1401,   110,   118,   911,   809,   455,
-     110,   881,   110,   814,   555,   556,  1050,   112,    39,   111,
-    1090,   131,  1419,   116,   601,  1095,   603,    58,    59,    60,
-    1100,    69,   114,    71,   114,   881,   109,   149,   112,  1109,
-     561,   562,   672,   110,  1125,   157,    67,  1117,  1129,  1130,
-     162,  1263,  1264,  1265,    84,    85,   949,   110,   112,   117,
-     112,   507,   112,   509,  1134,  1220,   512,   112,   117,   515,
-       3,   117,   116,    94,    29,   187,   188,    10,    11,    12,
-      13,    14,   110,   110,   116,   114,   112,   112,   109,  1159,
-     111,   203,   115,   110,   132,  1492,  1493,   118,   119,   211,
-     115,   115,   903,   109,   116,   881,    39,  1377,   220,   910,
-     110,   223,   689,   132,   110,   110,   117,   110,   230,   110,
-    1401,   110,   116,   110,   110,   926,   672,  1012,   110,   110,
-     110,  1201,  1202,   245,    67,   110,   110,   249,  1419,   110,
-     110,   253,   254,   720,   721,   110,  1050,   948,   949,   950,
-    1220,  1202,   110,   110,  1224,   267,   268,  1050,   110,    72,
-      29,   115,   274,    76,   131,   795,  1012,  1248,  1238,   281,
-      83,    84,  1242,   949,   117,   805,    72,   116,    74,    75,
-    1050,    94,    72,   110,    74,    75,  1201,    83,    84,   819,
-    1224,  1242,   112,    83,    84,   112,   109,   116,   111,   964,
-     110,   110,   110,   117,  1050,   118,   119,   112,  1009,   116,
-     114,  1492,  1493,   109,   116,   245,   110,   329,   114,   109,
-    1290,  1291,   110,   988,   114,   110,   991,   110,   993,  1299,
-     112,   110,   116,  1397,  1304,   116,     3,   349,   350,   110,
-     686,   818,  1540,    10,    11,    12,    13,    14,   112,   795,
-     109,   109,   109,   830,   366,  1159,   109,  1338,   370,   805,
-     109,  1342,   117,   115,   112,   132,   110,  1337,   110,   381,
-    1304,   110,    39,   819,  1050,   115,  1530,  1530,  1043,  1530,
-     115,   114,   129,  1530,  1299,   397,  1337,   112,  1530,  1090,
-     110,  1531,   116,   112,   132,   407,   112,   110,  1530,  1530,
-      67,     4,     5,     6,     7,     8,     9,   116,  1201,  1202,
-     110,   110,    47,   425,   112,  1555,  1201,   112,  1531,   431,
-    1224,   433,   112,   110,   112,   132,   112,  1397,   112,   132,
-      33,  1224,   115,  1134,  1238,   912,    72,   914,    74,    75,
-      76,  1505,  1555,   132,   110,  1415,   115,    83,    84,  1242,
-     132,   381,   132,   117,  1224,  1201,   468,   110,   112,   115,
-     112,   473,   112,  1444,   112,    56,    69,   944,    71,   481,
-    1440,   112,   112,   485,   112,   112,   110,   489,  1224,   110,
-     492,   109,   494,   881,    72,   112,    74,    75,    76,  1440,
-     112,   109,   109,    60,  1464,    83,    84,  1027,  1028,   110,
-    1304,  1471,   514,  1473,   110,  1475,  1299,   114,    99,   132,
-     112,  1304,   117,   112,  1299,   110,   112,   529,  1530,  1220,
-     532,   109,   534,   535,  1530,   110,  1202,  1530,    96,   109,
-    1464,    96,   109,   115,  1304,  1505,   112,  1471,   132,   110,
-    1510,  1242,  1512,   116,  1337,    42,   110,   110,  1224,   110,
-     110,   117,   110,  1299,  1524,  1085,  1086,   132,  1304,    96,
-    1530,  1531,   492,   132,   494,     3,  1242,    96,  1531,   110,
-    1540,   583,    10,    11,    12,    13,    14,   132,   590,   132,
-     926,  1027,  1028,   117,    72,  1555,   110,     0,    76,   601,
-    1524,   603,  1555,   286,  1396,    83,    84,   132,  1263,  1264,
-    1265,    39,   110,   110,   195,   115,    94,   112,   112,   132,
-     622,   109,   132,   115,  1540,   308,   309,   110,  1095,    32,
-     115,   109,    72,  1100,    74,    75,   638,   218,  1304,    67,
-     118,   119,   644,    83,    84,   110,  1337,   228,   132,  1085,
-    1086,   653,   110,   655,   656,   657,   110,  1440,  1066,   565,
-     563,  1224,  1493,   346,   564,  1053,  1321,    70,   566,  1383,
-    1464,  1337,   567,  1565,   114,  1314,  1130,  1471,  1342,  1081,
-    1471,  1464,   686,   686,   919,  1100,   927,   689,  1471,   699,
-     583,   693,   980,   695,   873,   650,   724,   699,   946,   382,
-      50,   734,  1242,   485,  1464,   707,    -1,    26,    27,    28,
-      -1,  1471,   571,   571,    64,   296,  1236,    67,   720,   721,
-      70,   571,    -1,    -1,   644,    -1,    -1,    -1,  1464,    -1,
-    1524,    -1,   734,    -1,    -1,  1471,    72,    -1,    74,    75,
-      76,  1524,    -1,    58,    -1,     0,     1,    83,    84,  1440,
-      -1,  1271,  1407,  1408,  1090,   158,    -1,    -1,    -1,  1279,
-    1280,  1281,    -1,    -1,  1524,     4,     5,     6,     7,     8,
-       9,    -1,    -1,   693,  1440,   695,    -1,    32,    -1,   699,
-      -1,   100,  1473,   102,  1475,    -1,    -1,    -1,  1524,    -1,
-    1445,    -1,    -1,   108,    -1,    50,   111,    -1,  1464,   149,
-    1236,    67,    -1,    -1,    -1,  1471,   191,    -1,    -1,    -1,
-      -1,    77,   162,   198,    -1,    70,   818,    -1,    -1,  1510,
-      -1,  1512,    -1,    -1,    -1,  1345,    -1,    -1,   830,   232,
-      69,    -1,    71,    -1,    -1,  1271,  1224,    -1,   188,    -1,
-      -1,    -1,   157,  1279,  1280,  1281,    -1,    -1,    -1,  1540,
-     253,  1506,   107,   119,    -1,   258,    -1,    -1,  1524,    -1,
-    1515,   211,    -1,   444,   183,    -1,    -1,   550,   551,   552,
-      -1,   873,    -1,   223,   193,   194,    -1,    -1,   880,   198,
-      -1,   200,   201,    -1,    -1,   270,    -1,    -1,    72,   470,
-      74,    75,    76,    -1,   149,    -1,   162,    -1,    -1,    83,
-      84,   903,   157,   158,    -1,   220,    -1,    -1,    -1,  1345,
-     912,    -1,   914,    -1,    -1,    -1,    -1,    -1,    72,   921,
-      74,    75,    76,    -1,    -1,   109,   507,    -1,    -1,    83,
-      84,   512,  1320,   188,   515,    -1,    -1,    -1,    -1,   324,
-      94,    -1,   944,    -1,    -1,    -1,    -1,   332,   203,   352,
-     335,   206,   207,   873,    -1,   109,   211,   223,    -1,   274,
-     880,    -1,   964,    -1,   118,   119,   281,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   232,   980,   329,
-      -1,   236,    -1,   238,    -1,    -1,   988,  1375,    -1,   991,
-    1378,   993,   247,    -1,    -1,   261,    -1,    -1,   253,    -1,
-     266,   921,    -1,   258,    -1,    -1,    -1,    -1,   672,    -1,
-      -1,    -1,    -1,   268,   399,   281,   419,    -1,   403,    -1,
-      -1,   276,    -1,    -1,    10,    11,    12,    13,    14,    -1,
-      -1,   434,    -1,    -1,   349,  1423,   439,    -1,    -1,    -1,
-    1428,  1043,    -1,    -1,   447,    10,    11,    12,    13,    14,
-      -1,   366,    -1,    39,    -1,   370,    -1,   407,    -1,    -1,
-     980,    -1,   465,  1530,    -1,    -1,    -1,    -1,    -1,    -1,
-    1458,    -1,    -1,    -1,    39,    -1,    -1,   760,    -1,  1081,
-     483,    67,   485,    -1,    -1,   351,    -1,   342,    -1,    -1,
-     671,   346,    -1,  1095,    -1,   480,    -1,   352,  1100,   680,
-      -1,    -1,    67,   684,    -1,    -1,    -1,    -1,    94,    -1,
-     365,    -1,    -1,    -1,   369,  1117,    -1,   372,   433,    -1,
-      -1,    -1,    -1,   109,   527,   111,    -1,    -1,    -1,    94,
-      -1,   795,   118,   119,    -1,    -1,    -1,  1473,    -1,  1475,
-      -1,   805,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   819,  1544,    -1,    -1,    -1,
-      -1,  1081,  1550,    -1,   419,    -1,   432,    -1,    -1,    -1,
-      -1,    -1,    -1,  1561,  1510,    -1,  1512,  1565,    72,   434,
-      74,    75,    76,   449,   439,    -1,   571,   572,   591,    83,
-      84,    -1,   447,    -1,    72,  1197,    74,    75,    76,    -1,
-      94,    -1,    -1,     0,    -1,    83,    84,    -1,   474,    -1,
-     465,    -1,    -1,   468,    -1,   109,    94,   111,  1220,    -1,
-      -1,    -1,    -1,   117,   118,   119,    -1,    -1,   483,    -1,
-     485,   109,   635,   636,   637,    32,    -1,    -1,   493,    -1,
-     118,   119,   497,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   654,    -1,    -1,    -1,    -1,   575,   576,    -1,    -1,
-      -1,  1263,  1264,  1265,    -1,    -1,    -1,    -1,    -1,   672,
-      -1,   526,   527,    70,   659,   590,    -1,  1197,   663,    -1,
-     683,    -1,    -1,    -1,    -1,   604,    -1,    -1,   607,   608,
-      -1,   610,    -1,   612,   613,    -1,    -1,    -1,   617,   618,
-      -1,    -1,    -1,    -1,    -1,    -1,   709,   622,    -1,   712,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   572,     0,  1321,
-      -1,    -1,    -1,   638,   905,    -1,  1009,    -1,    -1,   595,
-      -1,    -1,    -1,    -1,    -1,   590,   591,    -1,   653,    -1,
-      -1,    -1,    -1,     0,     1,    -1,   749,    -1,   603,    -1,
-      32,    -1,    -1,    -1,    -1,    -1,    -1,   623,    -1,    -1,
-      -1,   158,   628,  1027,  1028,    -1,   621,  1050,    -1,    -1,
-      -1,   626,    -1,    -1,    -1,    32,    -1,   632,    -1,    -1,
-     635,   636,   637,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-      -1,    -1,   795,    -1,  1396,  1397,    -1,    -1,    -1,   654,
-      -1,    -1,   805,    -1,   807,  1407,  1408,    -1,    -1,   812,
-      67,    -1,   815,    70,   799,    -1,   819,   672,    -1,   734,
-      -1,  1085,  1086,    -1,    -1,    -1,    -1,    -1,   683,    -1,
-      -1,    -1,    -1,    -1,   700,    -1,    -1,    -1,    -1,   758,
-     759,    -1,    -1,  1445,    -1,    -1,    -1,    -1,   714,    -1,
-      -1,    -1,    -1,    -1,   709,    -1,   253,   712,    -1,    -1,
-      -1,   258,    -1,    -1,    -1,    -1,   721,    -1,   734,   724,
-      72,    -1,    74,    75,    76,    -1,   158,    -1,   881,    -1,
-    1061,    83,    84,    -1,    72,    -1,    74,    75,    76,    -1,
-      -1,    -1,    94,   748,   749,    83,    84,    -1,    -1,   754,
-      -1,   158,    -1,  1505,  1506,    -1,    94,   109,   911,   111,
-      -1,    -1,    -1,  1515,    -1,    -1,   118,   119,    -1,    -1,
-      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,  1530,  1531,
-     118,   119,    -1,   918,    -1,    -1,    -1,    -1,    -1,    -1,
-     795,    -1,    -1,    -1,    -1,   811,    -1,    -1,    -1,    -1,
-     805,    -1,   807,  1555,   809,   352,    -1,   812,    -1,   814,
-     815,    -1,    -1,   966,   819,    -1,   223,    -1,    -1,    -1,
-      -1,   253,    -1,    -1,   829,    -1,   258,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,    -1,   903,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   253,    72,    -1,    74,
-      75,    76,    -1,    -1,   923,    -1,    -1,  1271,    83,    84,
-      -1,   131,    -1,   998,    -1,  1279,  1280,  1281,    -1,    94,
-      -1,    -1,   419,    -1,  1027,  1028,   881,  1030,  1031,    -1,
-    1015,    -1,    -1,    -1,   109,    -1,   111,   434,    -1,    -1,
-      -1,    -1,   439,   118,   119,    -1,    -1,  1050,   903,    -1,
-     447,    -1,    -1,    -1,    -1,   910,   911,    -1,    -1,   914,
-      -1,    10,    11,    12,    13,    14,    -1,    -1,   465,    -1,
-     352,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1345,  1085,  1086,    -1,   940,   483,    -1,   485,    -1,
-      39,    -1,    -1,   948,   949,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1093,    -1,
-      -1,   966,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,
-     527,    -1,  1313,    -1,    83,    84,    -1,   419,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    94,  1012,    -1,    -1,    -1,
-    1135,    -1,   434,    -1,  1009,    -1,  1159,   439,    -1,    -1,
-     109,    -1,   111,    -1,    -1,   447,    -1,  1022,  1087,   118,
-     119,    -1,  1027,  1028,    -1,  1030,  1031,   434,    -1,    -1,
-      -1,    -1,    -1,   465,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   591,  1050,    -1,    -1,    -1,  1202,
-      -1,   483,    -1,   485,    -1,    -1,    -1,    -1,    -1,    -1,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    33,    -1,
+      -1,    36,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1413,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1252,
+      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
+      75,    76,   696,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1224,    -1,    -1,    -1,    -1,    -1,    -1,   485,    -1,
-    1085,  1086,    -1,  1236,    -1,  1238,    -1,    -1,   635,   636,
-     637,    -1,    -1,    -1,    -1,   527,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1271,    -1,
-     527,    -1,    -1,    -1,     0,   672,  1279,  1280,  1281,  1134,
-      -1,    -1,    -1,    -1,    -1,    -1,   683,  1290,  1291,    -1,
-      -1,  1472,    -1,  1474,    -1,    -1,    -1,    -1,    -1,    -1,
-    1219,  1304,    -1,    -1,  1159,  1220,    32,    -1,    -1,   591,
-      -1,    -1,   709,    -1,    -1,   712,    -1,    -1,    -1,    -1,
-      10,    11,    12,    13,    14,    -1,    -1,    -1,  1509,    -1,
-    1511,    -1,    -1,    -1,   591,  1201,    -1,    -1,    -1,    -1,
-      -1,    -1,  1345,    -1,    70,    -1,    -1,  1202,    -1,    39,
-      -1,    -1,   749,   635,   636,   637,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1220,    -1,    -1,    -1,  1224,
-      -1,    -1,   654,  1554,    -1,  1556,    -1,    67,   635,   636,
-     637,  1236,    72,  1238,    74,    75,    76,  1242,  1569,  1570,
-     672,    -1,    -1,    83,    84,    -1,    -1,   654,   795,    -1,
-      -1,   683,    -1,    -1,    94,    -1,    -1,    -1,   805,    -1,
-     807,    -1,  1415,    -1,    -1,   812,  1271,    -1,   815,   109,
-      -1,   111,   819,    -1,  1279,  1280,  1281,   709,   118,   119,
-     712,    -1,   158,  1299,    -1,  1290,  1291,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,  1304,
-      -1,    -1,    -1,    -1,    -1,   712,    -1,    -1,    -1,    -1,
-      -1,  1464,    -1,    -1,    -1,    -1,    -1,   749,  1471,    -1,
-      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1396,  1337,    -1,   881,    -1,    -1,    -1,    -1,    -1,
-    1345,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,
-      76,    -1,    -1,   795,   911,    -1,    -1,    83,    84,    -1,
-      -1,  1524,    -1,   805,    -1,   807,    -1,   253,    94,    -1,
-     812,    -1,   258,   815,    -1,    -1,    -1,   819,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,
-     807,    -1,   118,   119,    -1,    -1,    -1,    -1,   815,    -1,
-    1415,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   966,
-      -1,    54,    -1,    56,    -1,    -1,    59,    60,    61,    -1,
-      63,    -1,    -1,    -1,    -1,  1440,    10,    11,    12,    13,
-      14,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,   881,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,  1464,
-      -1,    -1,    -1,    -1,    -1,    39,  1471,    10,    11,    12,
-      13,    14,    -1,    -1,   881,    -1,   352,    -1,    -1,   911,
-    1027,  1028,    -1,  1030,  1031,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    67,    -1,    -1,    39,    -1,    72,    -1,
-      74,    75,    76,  1050,    -1,    -1,    -1,    -1,    -1,    83,
-      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1524,
-      94,    -1,    -1,    -1,    67,    -1,  1531,    -1,    -1,    72,
-      -1,    74,    75,    76,   966,   109,    -1,    -1,  1085,  1086,
-      83,    84,   949,   419,   118,   119,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    10,    11,    12,    13,    14,   434,   966,
-      -1,    -1,    -1,   439,    -1,    -1,   109,    -1,    -1,    -1,
-      -1,   447,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    10,    11,    12,    13,    14,   465,
-      -1,    -1,    -1,    -1,    -1,  1027,  1028,    -1,  1030,  1031,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   483,    -1,   485,
-      67,    -1,  1159,    39,    -1,    72,    -1,    -1,  1050,    76,
-      -1,    -1,    -1,  1030,  1031,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    67,    -1,  1050,    -1,    -1,    72,    -1,    -1,    -1,
-      76,   527,   109,  1085,  1086,  1202,    -1,    83,    84,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1224,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,  1236,
-      -1,  1238,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,   345,    -1,   347,   591,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,  1271,   358,   359,  1159,    -1,    -1,
-      -1,    -1,  1279,  1280,  1281,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,  1304,    -1,   635,
-     636,   637,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1202,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,
-      37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1224,    -1,  1201,  1202,   672,    -1,  1345,    -1,
-      -1,    -1,    -1,    -1,  1236,    -1,  1238,   683,    -1,    66,
-      -1,    -1,    -1,    -1,    -1,    72,    -1,  1224,    -1,    76,
-      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
-      87,    -1,    -1,   709,    -1,  1242,   712,    94,    -1,  1271,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1279,  1280,  1281,
-      -1,    -1,   109,    -1,   111,    -1,    -1,   114,  1290,  1291,
-      -1,   118,   119,   120,   121,   122,   123,    -1,  1415,    -1,
-      -1,    -1,  1304,   749,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1299,    -1,    -1,    -1,    -1,  1304,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1345,    -1,    -1,    -1,  1464,    -1,   795,
-      -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,    -1,   805,
-    1337,   807,    -1,    -1,    -1,    -1,   812,    -1,    -1,   815,
-      -1,    -1,    -1,   819,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    67,    -1,    39,    -1,    -1,  1524,    -1,    -1,
-      -1,    -1,    77,  1415,    79,    -1,    81,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    -1,   881,    -1,    72,  1415,    74,
-      75,    76,    -1,    78,    -1,    -1,    -1,    -1,    83,    84,
-      -1,    -1,    -1,    -1,   119,    -1,   121,   122,   123,    94,
-      -1,    -1,  1464,  1440,    -1,   911,    -1,    -1,    -1,  1471,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    26,
-      27,    28,    -1,   118,   119,    -1,    -1,  1464,    -1,    -1,
-      -1,    -1,    37,    38,  1471,    40,    -1,   162,   701,    -1,
-     703,    -1,    -1,    -1,    -1,    -1,    -1,   710,   711,    -1,
-      -1,    -1,   715,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     966,    66,  1524,    50,   727,    -1,    -1,    72,    -1,   732,
-      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      67,    86,    87,    -1,    -1,    -1,    -1,  1524,    -1,    94,
-      -1,    -1,    -1,   100,    -1,   102,    -1,    -1,   223,   762,
-     225,   226,   227,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,   123,    -1,
-     127,  1027,  1028,    -1,  1030,  1031,    -1,    -1,   115,    -1,
-      -1,    -1,   119,    -1,    -1,    -1,   261,    -1,    -1,    -1,
-      -1,   266,    -1,    -1,  1050,    -1,    -1,    -1,   284,    -1,
-     286,   287,    -1,    -1,    -1,    -1,   281,    -1,   294,   295,
-      -1,   148,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   158,   308,   309,    -1,   162,   183,    -1,    -1,  1085,
-    1086,    -1,    -1,    -1,   191,    -1,   193,   194,    -1,    -1,
-      -1,   198,    -1,   200,   201,    -1,    -1,    -1,    -1,    -1,
-     863,   864,   865,   866,   329,   868,    -1,    -1,    -1,    -1,
-     346,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   884,    -1,    -1,   211,    -1,   351,    -1,    -1,    -1,
-      -1,   356,   357,    -1,    -1,   898,   223,    -1,    -1,   364,
-      -1,    -1,    -1,    -1,    -1,    -1,   382,    -1,    -1,    -1,
-      -1,    -1,    -1,  1159,   241,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   270,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   938,    -1,    -1,    -1,   266,
-      -1,    -1,   407,    -1,    -1,    -1,   273,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1202,    -1,    -1,    -1,
-     425,    -1,    -1,    -1,    -1,   430,    -1,   432,    -1,   296,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1224,    -1,
-      -1,   308,   985,    -1,   449,    -1,    -1,   452,   453,   992,
-    1236,    -1,  1238,    -1,   997,   460,    -1,    -1,    -1,  1002,
-      -1,  1004,    -1,    -1,    -1,  1008,    -1,  1010,  1011,   474,
-      -1,  1014,    -1,    -1,    -1,    -1,   481,    -1,    -1,   346,
-    1023,    -1,    -1,    -1,   351,  1271,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1279,  1280,  1281,    -1,    -1,  1041,  1042,
-      -1,    -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1304,    -1,
-      -1,    -1,    -1,    -1,    -1,  1068,    -1,    -1,  1071,    -1,
-      -1,    -1,    -1,    -1,   550,   551,   552,   553,   554,   555,
-     556,   557,   558,   559,   560,   561,   562,   563,   564,   565,
-     566,   567,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1345,
-     427,   428,    -1,    -1,    -1,    -1,    -1,   434,    -1,    -1,
-      -1,  1114,    -1,    -1,    -1,    -1,    -1,  1120,  1121,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   455,  1132,
-     595,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1142,
-      -1,    -1,  1145,    -1,  1147,    -1,    -1,  1150,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   483,    -1,   623,    -1,
-    1163,    -1,    -1,   628,    -1,    -1,    -1,    -1,   495,  1415,
-      -1,    -1,    -1,  1176,    -1,  1178,  1179,  1180,  1181,    -1,
-     507,    -1,   509,    -1,    -1,   512,    -1,   514,   515,    -1,
-      -1,  1194,    -1,  1196,    -1,    -1,    -1,  1200,    -1,    -1,
-     527,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1464,    -1,
-      -1,   697,    -1,    -1,    -1,  1471,  1229,  1230,   575,   576,
-      -1,    -1,    -1,    -1,    -1,   700,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   714,
-      -1,    -1,   579,    -1,    -1,    -1,    -1,   604,    -1,    -1,
-     607,   608,    -1,   610,   591,   612,   613,    -1,   595,   734,
-     617,   618,    -1,    -1,    -1,    -1,    -1,    -1,  1524,  1282,
-    1283,    -1,    -1,    -1,   760,    -1,    -1,    -1,    -1,  1292,
-      -1,    -1,    -1,    -1,   621,    -1,    -1,    -1,    -1,   626,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   635,   636,
-     637,    -1,    -1,    -1,    -1,    -1,   792,    -1,    -1,     7,
-      -1,    -1,    10,    11,    12,    13,    14,   654,    -1,    -1,
-      -1,    -1,    -1,    -1,   799,    -1,    -1,    -1,    -1,    -1,
-    1343,    -1,    45,    -1,    -1,    -1,   811,    -1,    -1,    37,
-      38,    39,    40,  1356,    -1,  1358,  1359,  1360,    -1,   686,
-      -1,    -1,    -1,    -1,    -1,   830,    -1,  1370,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1379,    -1,    66,    67,
-      -1,    -1,    -1,    -1,    72,   712,    -1,   714,    76,    -1,
-      93,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
-     103,    -1,    -1,  1406,    -1,    -1,    94,    -1,    -1,    -1,
-      -1,   758,   759,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,   749,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-     118,   119,   120,   121,   122,   123,    -1,   913,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1451,  1452,
-      -1,    -1,    -1,    -1,    -1,    -1,   159,    -1,    -1,    -1,
-      -1,  1464,    -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,
-     173,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   944,
-     807,    -1,   958,    -1,   811,    -1,    -1,    -1,   815,    -1,
-      -1,    -1,    -1,   196,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1504,    -1,    -1,    -1,  1508,    -1,   210,    -1,    -1,
-      -1,   976,    -1,    -1,    -1,    -1,   219,    -1,    -1,    -1,
-     996,    -1,    -1,    -1,    -1,    -1,   229,    -1,    -1,    -1,
-      -1,    -1,    -1,  1009,  1537,    -1,  1539,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1012,    -1,    -1,
-      -1,   254,    -1,    -1,    -1,    -1,   259,    -1,  1023,    -1,
-      -1,    -1,    -1,    -1,  1567,  1568,    -1,    -1,    -1,   272,
-      -1,   918,  1575,  1576,  1050,   278,   923,   280,    -1,    -1,
-      -1,    -1,    -1,    -1,   911,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   297,    -1,    -1,    -1,    -1,   926,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,
-      -1,    -1,    -1,   950,    -1,    -1,    -1,    -1,    -1,    -1,
-    1095,    -1,    -1,    -1,    -1,    -1,   339,    -1,    -1,   966,
-      -1,   344,    -1,    66,  1109,    -1,    -1,    -1,    -1,    72,
-      -1,  1127,    -1,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
-     373,    94,    -1,    -1,   377,   378,    -1,   380,    -1,    -1,
-      -1,    -1,  1009,    -1,   387,   388,   109,   390,   391,    -1,
-     393,    -1,   395,    -1,    -1,   118,   119,   120,   121,   122,
-     123,    -1,    -1,  1030,  1031,    -1,    -1,    -1,    -1,   412,
-      -1,    -1,    -1,    -1,  1190,  1191,    -1,   420,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1201,    -1,    -1,    -1,
-    1087,    -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1090,    -1,    -1,    -1,    -1,   471,    -1,
-      -1,    -1,    -1,    -1,   477,    -1,    -1,     0,    -1,   482,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      33,    -1,    -1,    36,    -1,   518,    39,    40,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     533,    -1,  1159,    -1,  1299,    -1,    -1,    -1,    -1,    -1,
-      -1,    64,    -1,    -1,    67,    -1,    69,    -1,    71,    72,
-      -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
-      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,   571,    -1,
-      -1,    94,  1219,    -1,  1201,    -1,    -1,   580,    -1,   157,
-     158,    -1,    -1,    -1,   587,    -1,   109,    -1,   111,    -1,
-     593,    -1,    -1,    -1,    -1,   118,   119,    -1,    -1,   602,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1238,    -1,   191,    -1,    -1,    -1,    -1,    -1,    -1,
-     198,    -1,    -1,    -1,    -1,  1401,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     643,    -1,    -1,  1419,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1299,    -1,    -1,    -1,   679,    -1,    -1,    -1,
-      66,    -1,    -1,    -1,   687,    -1,    72,    -1,    -1,    -1,
-      76,    -1,   270,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,   718,  1492,  1493,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   728,   729,    -1,    -1,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,   742,
-      -1,    -1,    -1,    -1,    -1,    -1,   324,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   332,   333,    -1,   335,   336,    -1,
-     763,    -1,   765,    -1,    -1,    -1,   769,    -1,   346,    -1,
-      -1,    -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1415,    -1,
-    1555,   369,    -1,    -1,   372,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    -1,    30,    31,    32,    -1,    -1,
-      -1,   399,    -1,    -1,    39,   403,    -1,    -1,    -1,    -1,
-      -1,   834,    -1,    -1,    -1,    -1,    -1,    -1,   841,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1473,    -1,  1475,    -1,
-      -1,   854,    67,   856,    -1,    -1,   434,    72,    -1,    74,
-      75,    76,    -1,    78,    -1,    -1,    -1,   870,    83,    84,
-      -1,    -1,    -1,    -1,   877,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,  1510,   148,  1512,   889,    -1,    -1,   892,
-      -1,    -1,    -1,    -1,   158,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,   480,   118,   119,   483,   170,   171,    -1,    -1,
-      -1,    -1,    -1,  1540,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    30,    31,    32,   522,    -1,    -1,    -1,   526,   527,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   971,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   241,    67,    -1,
-      69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,   571,   572,    -1,    -1,    -1,    -1,    -1,
-      -1,   265,    -1,    -1,  1007,    94,    -1,    -1,    -1,    -1,
-      -1,    -1,   590,   591,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,   601,    -1,   603,   604,    -1,    -1,   118,
-     119,    -1,   610,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   620,   621,    -1,    -1,    -1,    -1,   626,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   635,   636,   637,
-      -1,    -1,  1065,    -1,    -1,    -1,    -1,    -1,  1071,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,    -1,    -1,
-      -1,   659,   660,    -1,    -1,   663,   664,    -1,    -1,    -1,
-      -1,    -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1105,    -1,    -1,    -1,    -1,  1110,    -1,    -1,
-      -1,   689,    -1,    -1,    -1,  1118,    -1,   381,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   712,   713,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1154,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1166,    -1,    -1,  1169,    -1,  1171,    -1,
-     748,   749,    -1,    -1,    -1,   753,   754,    -1,    -1,    -1,
-      -1,    -1,  1185,  1186,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1207,    -1,    -1,    -1,    -1,    -1,
-      -1,   475,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
-      -1,   799,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   807,
-      -1,    -1,    -1,    -1,    -1,    -1,   814,   815,    -1,    -1,
-     818,    66,   820,    -1,    -1,    -1,    -1,    72,    -1,    -1,
-     514,    76,   830,  1256,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,   527,    -1,    -1,    -1,    -1,   532,    94,
-      -1,   535,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   546,   547,   109,    -1,   111,    -1,    -1,    -1,
-      -1,   116,    -1,   118,   119,   120,   121,   122,   123,    -1,
-      -1,    -1,    -1,    -1,    -1,   569,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   579,    -1,    -1,    -1,    -1,
-      -1,    -1,   586,    -1,    -1,   903,    -1,   591,    -1,  1332,
-      -1,  1334,   910,   911,   912,    -1,   914,    -1,    -1,    -1,
-     918,    -1,    -1,    -1,    -1,  1348,    -1,  1350,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   939,   940,    -1,    -1,  1368,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   640,    -1,    -1,    -1,
-      -1,  1384,  1385,    -1,    -1,   649,    -1,    -1,   966,    -1,
-      -1,    -1,  1395,    -1,    -1,  1398,    -1,    -1,   976,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,  1421,    -1,
-     998,   999,    -1,    -1,    -1,    -1,    -1,  1430,    39,    -1,
-    1433,  1009,  1435,  1436,  1437,    -1,    -1,  1015,  1016,    -1,
-    1018,  1019,  1020,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1030,  1031,    -1,    -1,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,    -1,    -1,  1477,    -1,  1479,    -1,  1481,    -1,
-      -1,    -1,    -1,    -1,    -1,   749,    -1,   751,    -1,    -1,
-      -1,    -1,    -1,    -1,  1497,    -1,    -1,   761,    -1,    -1,
-      -1,    -1,    -1,    -1,   768,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1093,    -1,  1095,    -1,    -1,
-      -1,    -1,  1100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,
-      -1,    -1,    10,    11,    12,    13,    14,   811,   812,    -1,
-      -1,   815,    -1,    -1,    -1,    -1,  1134,  1135,  1136,    -1,
-      -1,    -1,    -1,    -1,    -1,   829,    -1,    -1,    -1,    37,
-      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1159,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
-      -1,    -1,    -1,    -1,    72,   869,    -1,    -1,    76,   873,
-      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
-      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,  1220,   111,    -1,    -1,    -1,   911,    -1,    -1,
-     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
-    1238,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,   950,    30,    31,    32,
-      -1,    -1,    -1,    -1,    37,    38,    39,    40,    -1,    -1,
-      -1,    -1,   966,   967,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1290,  1291,    -1,    -1,   980,    -1,    -1,    -1,
-      -1,    -1,   986,    66,    67,   989,    69,   991,    71,    72,
-      -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,  1012,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1023,
-      -1,    37,    38,    -1,    40,    -1,   109,    -1,   111,    -1,
-      -1,    -1,    -1,   116,    -1,   118,   119,   120,   121,   122,
-     123,  1045,    -1,  1047,    -1,    -1,    -1,    -1,    -1,    -1,
-      66,    -1,    -1,    -1,    -1,    -1,    72,    -1,  1062,  1063,
-      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,  1083,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,  1415,   114,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
-      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,  1140,    -1,    30,    31,
-      32,    33,    -1,    -1,    36,    -1,    -1,    39,    40,    -1,
-      -1,    -1,    -1,    -1,    -1,  1159,    -1,    -1,    -1,    -1,
-      -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
-    1174,  1175,    64,    -1,    -1,    67,    -1,    69,    -1,    71,
-      72,    -1,    74,    75,    76,    -1,    -1,  1505,    -1,    -1,
-      66,    83,    84,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-      76,    -1,    94,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,  1530,  1531,    -1,    -1,    -1,   109,    94,   111,
-      -1,    -1,    -1,   115,    -1,    -1,   118,   119,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,  1555,    -1,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
-    1254,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
+      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
+      -1,    -1,    -1,  1316,    -1,    -1,  1319,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   759,    -1,    -1,  1503,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,  1528,  1529,    -1,   790,    -1,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1553,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
+      -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
+    1403,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,   118,   119,    30,
       31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
       41,    -1,    43,    -1,    -1,    46,    47,    48,    49,    50,
       51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
-      61,    62,    -1,    64,  1318,    66,    67,  1321,    69,    -1,
+      61,    62,    -1,    64,    -1,    66,    67,   911,    69,    -1,
+      71,    72,  1485,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    -1,    -1,   109,    -1,
+     111,    -1,   956,   114,    -1,    -1,    39,   118,   119,   120,
+     121,   122,   123,    -1,    -1,  1538,    -1,   128,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,
+     994,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1007,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    33,    -1,  1048,    36,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
       71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    -1,    -1,   109,    -1,
+     111,  1125,    -1,    83,    84,    -1,    -1,   118,   119,   120,
+     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1188,  1189,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    -1,    -1,    -1,    -1,   128,    -1,    -1,
-      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     111,    -1,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
+     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,   109,    -1,
+     111,    -1,    -1,    83,    84,   116,    -1,   118,   119,   120,
+     121,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,    -1,  1399,    -1,    -1,   118,   119,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1405,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    33,    -1,
-      -1,    36,    37,    38,    39,    40,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    66,    67,    -1,    69,    39,    71,    72,    -1,    74,
-      75,    76,    -1,  1487,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,    -1,
-      74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,    83,
-      84,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1540,   132,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    33,    -1,
-      -1,    36,    37,    38,    39,    40,    -1,    -1,    -1,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    39,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    78,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    66,    67,    -1,    69,    39,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,
-      74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,   116,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    66,    67,    -1,    69,    39,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,
-      74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,   116,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1417,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
+      38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,  1490,  1491,    66,    67,
+      -1,    69,    39,    71,    72,    -1,    74,    75,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,   116,    -1,
+     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
+      38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,    67,
+      -1,    69,    39,    71,    72,    -1,    74,    75,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
+     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
+      38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
+      -1,    69,    39,    71,    72,    -1,    74,    75,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
+     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
+      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
+      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
+     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
+      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
+      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
+     118,   119,   120,   121,   122,   123,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,
+      -1,    -1,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,    -1,
+      67,    -1,    69,    -1,    71,    72,    -1,    74,    75,    76,
+      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    33,
-      -1,    -1,    36,    -1,    -1,    39,    40,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      64,    -1,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
-      74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
-      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
-      -1,    -1,    -1,    -1,   118,   119,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    33,    34,    35,
-      67,    -1,    69,    39,    71,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,   115,    -1,
       -1,   118,   119,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
       30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,    39,
+      40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    64,    -1,    -1,    67,    -1,    69,
+      -1,    71,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
+      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
-      -1,    71,    -1,    -1,    74,    75,    -1,    -1,    78,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
       -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      23,    24,    25,    26,    27,    28,    -1,    30,    31,    32,
       33,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
-      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    74,    75,    -1,    -1,    78,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    -1,    30,    31,    32,    -1,    -1,    -1,   111,    -1,
+      -1,    39,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,   119,     4,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
+      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
+      -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
+     118,   119,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    67,    -1,    69,    -1,    71,
+      39,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    96,    -1,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,   111,
+      -1,    -1,    -1,    -1,    83,    84,   118,   119,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,   111,    -1,    30,    31,    32,    -1,    -1,   118,
+     119,    -1,    -1,    39,    -1,    -1,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    67,    -1,    69,    -1,    71,    39,    -1,    74,    75,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      96,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,
+      -1,    74,    75,    -1,    -1,   111,    -1,    -1,    -1,    -1,
+      83,    84,   118,   119,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,   111,    -1,
+      30,    31,    32,    -1,    -1,   118,   119,    -1,    -1,    39,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
+      -1,    71,    -1,    -1,    74,    75,    -1,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   111,    39,    -1,    -1,    -1,    -1,    -1,   118,   119,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    69,    -1,    71,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
+      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
+      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
+      -1,   118,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,     4,     5,     6,     7,     8,     9,    10,
+      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
+      74,    75,    -1,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,
+      -1,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
+      71,    -1,    -1,    74,    75,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
+      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
+      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    66,    67,    30,    31,    32,
+      -1,    72,    -1,    74,    75,    76,    39,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,   109,   110,
+     111,    74,    75,    -1,    -1,    -1,    -1,   118,   119,   120,
+     121,   122,   123,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,   109,    -1,   111,    -1,
+      37,    38,    39,    40,    -1,   118,   119,    -1,    -1,    -1,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    66,
+      67,    30,    31,    32,    -1,    72,    -1,    74,    75,    76,
+      39,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      -1,    -1,   109,    -1,   111,    74,    75,    -1,    -1,    -1,
+      -1,   118,   119,   120,   121,   122,   123,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    -1,   111,    -1,    37,    38,    39,    40,    -1,   118,
+     119,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    66,    67,    30,    31,    32,    -1,    72,
+      -1,    74,    75,    76,    39,    -1,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    -1,    -1,   109,    -1,   111,    74,
+      75,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
+     123,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    -1,   111,    -1,    37,    38,
+      39,    40,    -1,   118,   119,    -1,    -1,    -1,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    66,    67,    30,
+      31,    32,    -1,    72,    -1,    74,    75,    76,    39,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
+     109,    -1,   111,    74,    75,    -1,    -1,    -1,    -1,   118,
+     119,   120,   121,   122,   123,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+     111,    -1,    37,    38,    39,    40,    -1,   118,   119,    -1,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    66,    67,    30,    31,    32,    -1,    72,    -1,    74,
+      75,    76,    39,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,   109,    -1,   111,    74,    75,    -1,
+      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,   111,    -1,    30,    31,    32,    -1,
+      -1,   118,   119,    -1,    -1,    39,    -1,    -1,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    -1,    30,
+      31,    32,    -1,    67,    -1,    69,    -1,    71,    39,    -1,
+      74,    75,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    67,    30,    31,    32,
+      -1,    72,    -1,    74,    75,    76,    39,    78,    -1,    -1,
+     114,    -1,    83,    84,    -1,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    67,    30,    31,    32,   109,    72,
+     111,    74,    75,    76,    39,    78,    -1,   118,   119,    -1,
+      83,    84,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    67,    30,    31,    32,    -1,    72,   111,    74,
+      75,    76,    39,    -1,    -1,   118,   119,    -1,    83,    84,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      67,    30,    31,    32,   109,    72,   111,    74,    75,    76,
+      39,    -1,    -1,   118,   119,    -1,    83,    84,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    67,    30,
+      31,    32,   109,    72,   111,    74,    75,    76,    39,    40,
+      -1,   118,   119,    -1,    83,    84,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    67,    30,    31,    32,
+     109,    -1,   111,    74,    75,    -1,    39,    -1,    -1,   118,
+     119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,
+     111,    74,    75,    -1,   115,    78,    -1,   118,   119,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,
+      40,    -1,    -1,    -1,    -1,   118,   119,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    67,    30,    31,
+      32,    -1,    -1,    -1,    74,    75,    -1,    39,    40,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    67,    -1,    -1,    39,    -1,
+      -1,   111,    74,    75,    -1,   115,    -1,    -1,   118,   119,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
+      -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,   111,
+      -1,    -1,    -1,   115,    -1,    -1,   118,   119,    -1,    -1,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+     111,    30,    31,    32,    -1,    -1,    -1,   118,   119,    -1,
+      39,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    67,    -1,
+      39,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    67,    30,
+      31,    32,    33,    34,    35,    74,    75,    -1,    39,    -1,
+      -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,
+     119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
+      -1,    -1,   111,    74,    75,    -1,    -1,    -1,    -1,   118,
+     119,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    37,    38,
+      -1,    40,    41,    -1,    43,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    52,    53,    -1,    -1,    56,    57,    -1,
+      -1,    -1,    61,    62,    67,    64,    69,    66,    71,    -1,
+      -1,    74,    75,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,
+     109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
+     119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,   128,
+      -1,    37,    38,   132,    40,    41,    -1,    43,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
+      -1,    57,    -1,    -1,    -1,    61,    62,    -1,    64,    -1,
+      66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
+      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
+      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,
+      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
+      -1,    -1,   128,    -1,    -1,    -1,   132,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      -1,    -1,    39,    -1,    37,    38,    -1,    40,    41,    -1,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    -1,    -1,    56,    57,    -1,    -1,    -1,    61,    62,
+      67,    64,    69,    66,    71,    -1,    -1,    74,    75,    72,
+      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    96,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
+      -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,   122,
+     123,    -1,    -1,    37,    38,   128,    40,    41,    -1,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,    -1,
+      64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
+      -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
+     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
+      -1,    -1,    37,    38,   128,    40,    41,    -1,    43,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
+      -1,    -1,    57,    -1,    -1,    -1,    61,    62,    -1,    64,
+      -1,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
+      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    66,
+      -1,    -1,    -1,   128,    -1,    72,    -1,    -1,    -1,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,
+      -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   111,    -1,    -1,    37,    38,    -1,
+      40,   118,   119,   120,   121,   122,   123,    66,    -1,    -1,
+      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      79,    80,    81,    82,    83,    84,    66,    86,    87,    -1,
+      -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
+     109,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,   118,
+     119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,   109,
+      -1,    -1,    -1,    -1,    37,    38,    -1,    40,   118,   119,
+     120,   121,   122,   123,    66,    -1,    -1,    -1,    -1,    -1,
+      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    66,    86,    87,    -1,    -1,    -1,    72,
+      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
+     122,   123,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
+     123,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    72,
+      -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
+      83,    84,     3,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
@@ -3823,398 +3982,19 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
-      71,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-      69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    94,    -1,    96,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,
-     119,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
-      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,   119,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
-      71,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
-      75,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    94,
-      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,
-      39,    40,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,
-      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
-     119,   120,   121,   122,   123,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,   110,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
-      -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
-      67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,
-      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
-      87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,   120,   121,   122,   123,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    -1,    -1,    -1,    37,    38,    39,    40,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
-      -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
-     123,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,
-      39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,
-      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,
-     119,   120,   121,   122,   123,     3,     4,     5,     6,     7,
+      71,    -1,    -1,    74,    75,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
-      -1,    39,    -1,    -1,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    67,
-      -1,    69,    -1,    71,    39,    -1,    74,    75,    -1,    -1,
-      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    67,    30,    31,    32,    -1,    72,    -1,    74,
-      75,    76,    39,    -1,    -1,    -1,   114,    -1,    83,    84,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,
+      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    -1,    -1,   109,    72,   111,    74,    75,    76,
-      -1,    -1,    -1,   118,   119,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      67,    -1,    39,    -1,    -1,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,
-      -1,    -1,   109,    -1,   111,    -1,    83,    84,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      67,    -1,    39,    -1,    -1,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    83,    84,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      67,    -1,    39,    40,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      67,    -1,    39,    40,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    40,    10,    11,    12,    13,    14,    15,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
+      -1,    69,    -1,    71,    -1,    -1,    74,    75,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      67,    -1,    -1,    39,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
+      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
-      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
-      -1,    37,    38,    -1,    40,    41,    -1,    43,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
-      56,    57,    -1,    -1,    -1,    61,    62,    67,    64,    69,
-      66,    71,    -1,    -1,    74,    75,    72,    -1,    -1,    -1,
-      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     110,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
-      -1,    -1,   128,    -1,    37,    38,   132,    40,    41,    -1,
-      43,    -1,    -1,    46,    47,    48,    49,    50,    51,    52,
-      53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,
-      -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    72,
-      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
-      -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,   122,
-     123,    -1,    -1,    -1,    -1,   128,    -1,    -1,    -1,   132,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    -1,    -1,    -1,    -1,    39,    -1,    37,    38,    -1,
-      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    -1,    -1,    56,    57,    -1,    -1,
-      -1,    61,    62,    67,    64,    69,    66,    71,    -1,    -1,
-      74,    75,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
-      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
-      -1,    -1,    96,    -1,    94,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
-      -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,
-     120,   121,   122,   123,    -1,    -1,    37,    38,   128,    40,
-      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
-      61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,
-      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    -1,    -1,    37,    38,   128,    40,    41,
-      -1,    43,    -1,    -1,    46,    47,    48,    49,    50,    51,
-      52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,
-      62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,
-      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
-      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
-      -1,    -1,    94,    37,    38,    -1,    40,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
-      -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,
-     122,   123,    66,    -1,    -1,    -1,   128,    -1,    72,    -1,
-      74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
-      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
-      94,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,   113,
-     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
-      66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    37,
-      38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    37,    38,
-      -1,    40,   118,   119,   120,   121,   122,   123,    66,    -1,
-      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
-      -1,    79,    80,    81,    82,    83,    84,    66,    86,    87,
-      -1,    -1,    -1,    72,    -1,    -1,    94,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
-      -1,   109,    -1,   111,    -1,    94,    37,    38,    -1,    40,
-     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
-     109,    -1,   111,    -1,    -1,    37,    38,    -1,    40,   118,
-     119,   120,   121,   122,   123,    66,    -1,    -1,    -1,    -1,
-      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    66,    86,    87,    -1,    -1,    -1,
-      72,    -1,    -1,    94,    76,    -1,    -1,    79,    80,    81,
-      82,    83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,
-      -1,    -1,    94,    -1,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    -1,    -1,    -1,    -1,   109,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
-     122,   123,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
-      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
-      -1,    83,    84,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
-      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
-      -1,    71,    -1,    -1,    74,    75,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
-      75
+      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75
 };
 
@@ -4227,158 +4007,158 @@
       22,    23,    24,    25,    26,    27,    30,    31,    32,    33,
       36,    39,    40,    64,    67,    69,    71,    72,    74,    75,
-      76,    83,    84,    94,   109,   111,   118,   119,   137,   140,
-     149,   198,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     231,   232,   233,   234,   235,   236,   237,   238,   240,   241,
-     242,   243,   244,   245,   247,   255,   256,   283,   284,   285,
-     293,   296,   302,   303,   305,   307,   308,   314,   319,   323,
-     324,   325,   326,   327,   328,   329,   330,   350,   367,   368,
-     369,   370,    72,   139,   140,   149,   215,   217,   225,   227,
-     237,   241,   243,   284,    82,   109,   312,   313,   314,   312,
-     312,    72,    74,    75,    76,   138,   139,   273,   274,   294,
-     295,    74,    75,   274,   109,   305,    11,   199,   109,   149,
-     319,   324,   325,   326,   328,   329,   330,   112,   134,   111,
-     218,   225,   227,   323,   327,   366,   367,   370,   371,   135,
-     107,   131,   277,   114,   135,   173,    74,    75,   137,   272,
-     135,   135,   135,   116,   135,    74,    75,   109,   149,   309,
-     318,   319,   320,   321,   322,   323,   327,   331,   332,   333,
-     334,   335,   341,     3,    28,    78,   239,     3,     5,    74,
-     111,   149,   217,   228,   232,   235,   244,   285,   323,   327,
-     370,   215,   217,   227,   237,   241,   243,   284,   323,   327,
-      33,   233,   233,   228,   235,   135,   233,   228,   233,   228,
-      75,   109,   114,   274,   285,   114,   274,   233,   228,   116,
-     135,   135,     0,   134,   109,   173,   312,   312,   134,   111,
-     225,   227,   368,   272,   272,   131,   227,   109,   149,   309,
-     319,   323,   111,   149,   370,   306,   230,   314,   109,   290,
-     109,   109,    51,   109,    37,    38,    40,    66,    72,    76,
-      79,    80,    81,    82,    86,    87,   109,   111,   120,   121,
-     122,   123,   136,   140,   141,   142,   143,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   164,   166,   225,   276,   292,   366,   371,   227,
-     110,   110,   110,   110,   110,   110,   110,    74,    75,   111,
-     225,   272,   350,   368,   111,   118,   149,   164,   217,   218,
-     224,   227,   231,   232,   237,   240,   241,   243,   262,   263,
-     267,   268,   269,   270,   284,   350,   362,   363,   364,   365,
-     370,   371,   112,   109,   323,   327,   370,   109,   116,   132,
-     111,   114,   149,   164,   278,   278,   115,   134,   116,   132,
-     109,   116,   132,   116,   132,   116,   132,   312,   132,   319,
-     320,   321,   322,   332,   333,   334,   335,   227,   318,   331,
-      64,   311,   111,   312,   349,   350,   312,   312,   173,   134,
-     109,   312,   349,   312,   312,   227,   309,   109,   109,   226,
-     227,   225,   227,   112,   134,   225,   366,   371,   173,   134,
-     272,   277,   217,   232,   323,   327,   173,   134,   294,   227,
-     237,   132,   227,   227,   292,   248,   246,   258,   274,   257,
-     227,   294,   132,   132,   305,   134,   139,   271,     3,   135,
-     207,   208,   222,   224,   227,   134,   311,   109,   311,   164,
-     319,   227,   109,   134,   272,   114,    33,    34,    35,   225,
-     286,   287,   289,   134,   129,   131,   291,   134,   228,   234,
-     235,   272,   315,   316,   317,   109,   141,   109,   148,   109,
-     148,   151,   109,   148,   109,   109,   148,   148,   111,   164,
-     169,   173,   225,   275,   366,   370,   112,   134,    82,    85,
-      86,    87,   109,   111,   113,   114,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   131,   168,   151,   151,
-     118,   124,   125,   120,   121,    88,    89,    90,    91,   126,
-     127,    92,    93,   119,   128,   129,    94,    95,   130,   131,
-     373,   109,   149,   345,   346,   347,   348,   349,   110,   116,
-     109,   349,   350,   109,   349,   350,   134,   109,   225,   368,
-     112,   134,   135,   111,   225,   227,   361,   362,   370,   371,
-     135,   109,   111,   149,   319,   336,   337,   338,   339,   340,
-     341,   342,   343,   344,   350,   351,   352,   353,   354,   355,
-     356,   149,   370,   227,   135,   135,   149,   225,   227,   363,
-     272,   225,   350,   363,   272,   109,   134,   134,   134,   112,
-     134,    72,    80,   111,   113,   140,   274,   278,   279,   280,
-     281,   282,   134,   134,   134,   134,   134,   134,   309,   110,
-     110,   110,   110,   110,   110,   110,   318,   331,   109,   277,
-     112,   207,   134,   309,   169,   276,   169,   276,   309,   111,
-     207,   311,   173,   134,   207,   110,    40,   111,   115,   225,
-     249,   250,   251,   366,   114,   116,   372,   131,   259,   114,
-     227,   264,   265,   266,   269,   270,   110,   116,   173,   134,
-     118,   164,   134,   224,   227,   263,   362,   370,   303,   304,
-     109,   149,   336,   110,   116,   373,   274,   286,   109,   114,
-     274,   276,   286,   110,   116,   109,   141,   110,   117,   275,
-     275,   275,   111,   139,   145,   164,   276,   275,   112,   134,
-     110,   116,   110,   109,   149,   349,   357,   358,   359,   360,
-     110,   116,   164,   111,   139,   111,   144,   145,   134,   111,
-     139,   144,   164,   164,   151,   151,   151,   152,   152,   153,
-     153,   154,   154,   154,   154,   155,   155,   156,   157,   158,
-     159,   160,   117,   169,   164,   134,   346,   347,   348,   227,
-     345,   312,   312,   164,   276,   134,   271,   134,   225,   350,
-     363,   227,   231,   112,   112,   134,   370,   112,   109,   134,
-     319,   337,   338,   339,   342,   352,   353,   354,   112,   134,
-     227,   336,   340,   351,   109,   312,   355,   373,   312,   312,
-     373,   109,   312,   355,   312,   312,   312,   312,   350,   225,
-     361,   371,   272,   112,   116,   112,   116,   373,   225,   363,
-     373,   260,   261,   262,   263,   260,   260,   272,   164,   134,
-     111,   274,   117,   116,   372,   278,    80,   111,   117,   282,
-      29,   209,   210,   272,   260,   139,   309,   139,   311,   109,
-     349,   350,   109,   349,   350,   141,   350,   173,   264,   110,
-     110,   110,   110,   112,   173,   207,   173,   114,   250,   251,
-     112,   134,   109,   117,   149,   252,   254,   318,   319,   331,
-     357,   116,   132,   116,   132,   274,   248,   274,   115,   162,
-     163,   258,   135,   135,   139,   222,   135,   135,   260,   109,
-     149,   370,   135,   115,   227,   287,   288,   135,   134,   134,
-     109,   135,   110,   316,   169,   170,   117,   132,   111,   141,
-     200,   201,   202,   110,   116,   110,   134,   117,   110,   110,
-     110,   111,   164,   358,   359,   360,   227,   357,   312,   312,
-     114,   151,   166,   164,   165,   167,   116,   135,   134,   134,
-     110,   116,   164,   134,   115,   162,   117,   264,   110,   110,
-     110,   345,   264,   110,   260,   225,   363,   111,   118,   149,
-     164,   164,   227,   342,   264,   110,   110,   110,   110,   110,
-     110,   110,     7,   227,   336,   340,   351,   134,   134,   373,
-     134,   134,   110,   135,   135,   135,   135,   277,   135,   162,
-     163,   164,   310,   134,   278,   280,   115,   134,   211,   274,
-      40,    41,    43,    46,    47,    48,    49,    50,    51,    52,
-      53,    57,    61,    62,    72,   111,   128,   170,   171,   172,
-     173,   174,   175,   177,   178,   190,   192,   193,   198,   212,
-     308,    29,   135,   131,   277,   134,   134,   110,   135,   173,
-     248,   132,   132,   319,   163,   227,   253,   254,   253,   274,
-     312,   115,   259,   372,   110,   116,   112,   112,   135,   227,
-     116,   373,   290,   110,   286,   215,   217,   225,   298,   299,
-     300,   301,   292,   110,   110,   117,   163,   109,   110,   117,
-     116,   139,   164,   164,   112,   110,   110,   110,   357,   279,
-     116,   135,   167,   112,   139,   146,   147,   164,   145,   135,
-     146,   162,   166,   135,   109,   349,   350,   135,   135,   134,
-     135,   135,   135,   164,   110,   135,   109,   349,   350,   109,
-     355,   109,   355,   350,   226,     7,   118,   135,   164,   264,
-     264,   263,   267,   267,   268,   116,   116,   110,   110,   112,
-      96,   123,   135,   135,   146,   278,   164,   116,   132,   212,
-     216,   227,   231,   109,   109,   171,   109,   109,    72,   132,
-      72,   132,    72,   118,   170,   109,   173,   165,   165,   117,
-     112,   143,   132,   135,   134,   135,   211,   110,   164,   264,
-     264,   312,   110,   115,   252,   115,   134,   110,   134,   135,
-     309,   115,   134,   135,   135,   110,   114,   200,   112,   163,
-     132,   200,   202,   110,   116,   135,   109,   349,   350,   372,
-     165,   112,   135,    85,   113,   116,   135,   135,   112,   135,
-     110,   134,   110,   110,   112,   112,   112,   135,   110,   134,
-     134,   134,   164,   164,   135,   112,   135,   135,   135,   135,
-     134,   134,   163,   163,   112,   112,   135,   135,   274,   227,
-     169,   169,    47,   169,   134,   132,   132,   132,   169,   132,
-     169,    58,    59,    60,   194,   195,   196,   132,    63,   132,
-     312,   114,   175,   115,   132,   135,   135,    96,   269,   270,
-     110,   299,   116,   132,   116,   132,   115,   297,   117,   141,
-     110,   110,   117,   167,   112,   134,   115,   112,   111,   147,
-     111,   147,   147,   112,   112,   112,   264,   112,   264,   264,
-     264,   135,   135,   112,   112,   110,   110,   112,   116,    96,
-     263,    96,   135,   112,   112,   110,   110,   109,   110,   170,
-     191,   212,   132,   110,   109,   109,   173,   196,    58,    59,
-     164,   171,   144,   110,   110,   114,   134,   134,   298,   141,
-     203,   109,   132,   203,   135,   117,   264,   134,   134,   135,
-     135,   135,   135,   112,   112,   134,   135,   112,   171,    44,
-      45,   114,   181,   182,   183,   169,   171,   135,   110,   170,
-     114,   183,    96,   134,    96,   134,   109,   109,   132,   115,
-     134,   272,   309,   115,   116,   117,   163,   110,   112,   164,
-     135,   146,   146,   110,   110,   110,   110,   267,    42,   163,
-     179,   180,   310,   117,   134,   171,   181,   110,   132,   171,
-     132,   134,   110,   134,   110,   134,    96,   134,    96,   134,
-     132,   298,   141,   139,   204,   110,   132,   117,   110,   135,
-     135,   171,    96,   116,   117,   135,   205,   206,   212,   132,
-     170,   170,   205,   173,   197,   225,   366,   173,   197,   110,
-     134,   110,   134,   115,   110,   116,   164,   112,   112,   163,
-     179,   182,   184,   185,   134,   132,   182,   186,   187,   135,
-     109,   149,   309,   357,   139,   135,   173,   197,   173,   197,
-     109,   132,   139,   171,   176,   115,   182,   212,   170,    56,
-     176,   189,   115,   182,   110,   227,   110,   135,   135,   292,
-     171,   176,   132,   188,   189,   176,   189,   173,   173,   110,
-     110,   110,   188,   135,   135,   173,   173,   135,   135
+      76,    83,    84,   109,   111,   118,   119,   137,   140,   149,
+     198,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   231,
+     232,   233,   234,   235,   236,   237,   238,   240,   241,   242,
+     243,   244,   245,   247,   255,   256,   283,   284,   285,   293,
+     296,   302,   303,   305,   307,   308,   314,   319,   323,   324,
+     325,   326,   327,   328,   329,   330,   350,   367,   368,   369,
+     370,    72,   139,   140,   149,   215,   217,   225,   227,   237,
+     241,   243,   284,    82,   109,   312,   313,   314,   312,   312,
+      72,    74,    75,    76,   138,   139,   273,   274,   294,   295,
+      74,    75,   274,   109,   305,    11,   199,   109,   149,   319,
+     324,   325,   326,   328,   329,   330,   112,   134,   111,   218,
+     225,   227,   323,   327,   366,   367,   370,   371,   135,   107,
+     131,   277,   114,   135,   173,    74,    75,   137,   272,   135,
+     135,   135,   116,   135,    74,    75,   109,   149,   309,   318,
+     319,   320,   321,   322,   323,   327,   331,   332,   333,   334,
+     335,   341,     3,    28,    78,   239,     3,     5,    74,   111,
+     149,   217,   228,   232,   235,   244,   285,   323,   327,   370,
+     215,   217,   227,   237,   241,   243,   284,   323,   327,    33,
+     233,   233,   228,   235,   135,   233,   228,   233,   228,    75,
+     109,   114,   274,   285,   114,   274,   233,   228,   116,   135,
+     135,     0,   134,   109,   173,   312,   312,   134,   111,   225,
+     227,   368,   272,   272,   131,   227,   109,   149,   309,   319,
+     323,   111,   149,   370,   306,   230,   314,   109,   290,   109,
+     109,    51,   109,    37,    38,    40,    66,    72,    76,    79,
+      80,    81,    82,    86,    87,   109,   111,   120,   121,   122,
+     123,   136,   140,   141,   142,   143,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   164,   167,   225,   276,   292,   366,   371,   227,   110,
+     110,   110,   110,   110,   110,   110,    74,    75,   111,   225,
+     272,   350,   368,   111,   118,   149,   164,   217,   218,   224,
+     227,   231,   232,   237,   240,   241,   243,   262,   263,   267,
+     268,   269,   270,   284,   350,   362,   363,   364,   365,   370,
+     371,   112,   109,   323,   327,   370,   109,   116,   132,   111,
+     114,   149,   164,   278,   278,   115,   134,   116,   132,   109,
+     116,   132,   116,   132,   116,   132,   312,   132,   319,   320,
+     321,   322,   332,   333,   334,   335,   227,   318,   331,    64,
+     311,   111,   312,   349,   350,   312,   312,   173,   134,   109,
+     312,   349,   312,   312,   227,   309,   109,   109,   226,   227,
+     225,   227,   112,   134,   225,   366,   371,   173,   134,   272,
+     277,   217,   232,   323,   327,   173,   134,   294,   227,   237,
+     132,   227,   227,   292,   248,   246,   258,   274,   257,   227,
+     294,   132,   132,   305,   134,   139,   271,     3,   135,   207,
+     208,   222,   224,   227,   134,   311,   109,   311,   164,   319,
+     227,   109,   134,   272,   114,    33,    34,    35,   225,   286,
+     287,   289,   134,   129,   131,   291,   134,   228,   234,   235,
+     272,   315,   316,   317,   109,   141,   109,   148,   109,   148,
+     151,   109,   148,   109,   109,   148,   148,   111,   164,   169,
+     173,   225,   275,   366,   370,   112,   134,    82,    85,    86,
+      87,   109,   111,   113,   114,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   131,   166,   151,   151,   118,
+     124,   125,   120,   121,    88,    89,    90,    91,   126,   127,
+      92,    93,   119,   128,   129,    94,    95,   130,   131,   373,
+     109,   149,   345,   346,   347,   348,   349,   110,   116,   109,
+     349,   350,   109,   349,   350,   134,   109,   225,   368,   112,
+     134,   135,   111,   225,   227,   361,   362,   370,   371,   135,
+     109,   111,   149,   319,   336,   337,   338,   339,   340,   341,
+     342,   343,   344,   350,   351,   352,   353,   354,   355,   356,
+     149,   370,   227,   135,   135,   149,   225,   227,   363,   272,
+     225,   350,   363,   272,   109,   134,   134,   134,   112,   134,
+      72,    80,   111,   113,   140,   274,   278,   279,   280,   281,
+     282,   134,   134,   134,   134,   134,   134,   309,   110,   110,
+     110,   110,   110,   110,   110,   318,   331,   109,   277,   112,
+     207,   134,   309,   169,   276,   169,   276,   309,   111,   207,
+     311,   173,   134,   207,   110,    40,   111,   115,   225,   249,
+     250,   251,   366,   114,   116,   372,   131,   259,   114,   227,
+     264,   265,   266,   269,   270,   110,   116,   173,   134,   118,
+     164,   134,   224,   227,   263,   362,   370,   303,   304,   109,
+     149,   336,   110,   116,   373,   274,   286,   109,   114,   274,
+     276,   286,   110,   116,   109,   141,   110,   117,   275,   275,
+     275,   111,   139,   145,   164,   276,   275,   112,   134,   110,
+     116,   110,   109,   149,   349,   357,   358,   359,   360,   110,
+     116,   164,   111,   139,   111,   144,   145,   134,   111,   139,
+     144,   164,   151,   151,   151,   152,   152,   153,   153,   154,
+     154,   154,   154,   155,   155,   156,   157,   158,   159,   160,
+     117,   169,   164,   134,   346,   347,   348,   227,   345,   312,
+     312,   164,   276,   134,   271,   134,   225,   350,   363,   227,
+     231,   112,   112,   134,   370,   112,   109,   134,   319,   337,
+     338,   339,   342,   352,   353,   354,   112,   134,   227,   336,
+     340,   351,   109,   312,   355,   373,   312,   312,   373,   109,
+     312,   355,   312,   312,   312,   312,   350,   225,   361,   371,
+     272,   112,   116,   112,   116,   373,   225,   363,   373,   260,
+     261,   262,   263,   260,   260,   272,   164,   134,   111,   274,
+     117,   116,   372,   278,    80,   111,   117,   282,    29,   209,
+     210,   272,   260,   139,   309,   139,   311,   109,   349,   350,
+     109,   349,   350,   141,   350,   173,   264,   110,   110,   110,
+     110,   112,   173,   207,   173,   114,   250,   251,   112,   134,
+     109,   117,   149,   252,   254,   318,   319,   331,   357,   116,
+     132,   116,   132,   274,   248,   274,   115,   162,   163,   258,
+     135,   135,   139,   222,   135,   135,   260,   109,   149,   370,
+     135,   115,   227,   287,   288,   135,   134,   134,   109,   135,
+     110,   316,   169,   170,   117,   132,   111,   141,   200,   201,
+     202,   110,   116,   110,   134,   117,   110,   110,   110,   111,
+     164,   358,   359,   360,   227,   357,   312,   312,   114,   151,
+     167,   164,   165,   168,   116,   135,   134,   134,   110,   116,
+     164,   134,   115,   162,   117,   264,   110,   110,   110,   345,
+     264,   110,   260,   225,   363,   111,   118,   149,   164,   164,
+     227,   342,   264,   110,   110,   110,   110,   110,   110,   110,
+       7,   227,   336,   340,   351,   134,   134,   373,   134,   134,
+     110,   135,   135,   135,   135,   277,   135,   162,   163,   164,
+     310,   134,   278,   280,   115,   134,   211,   274,    40,    41,
+      43,    46,    47,    48,    49,    50,    51,    52,    53,    57,
+      61,    62,    72,   111,   128,   170,   171,   172,   173,   174,
+     175,   177,   178,   190,   192,   193,   198,   212,   308,    29,
+     135,   131,   277,   134,   134,   110,   135,   173,   248,   132,
+     132,   319,   163,   227,   253,   254,   253,   274,   312,   115,
+     259,   372,   110,   116,   112,   112,   135,   227,   116,   373,
+     290,   110,   286,   215,   217,   225,   298,   299,   300,   301,
+     292,   110,   110,   117,   163,   109,   110,   117,   116,   139,
+     164,   164,   112,   110,   110,   110,   357,   279,   116,   135,
+     168,   112,   139,   146,   147,   164,   145,   135,   146,   162,
+     167,   135,   109,   349,   350,   135,   135,   134,   135,   135,
+     135,   164,   110,   135,   109,   349,   350,   109,   355,   109,
+     355,   350,   226,     7,   118,   135,   164,   264,   264,   263,
+     267,   267,   268,   116,   116,   110,   110,   112,    96,   123,
+     135,   135,   146,   278,   164,   116,   132,   212,   216,   227,
+     231,   109,   109,   171,   109,   109,    72,   132,    72,   132,
+      72,   118,   170,   109,   173,   165,   165,   117,   112,   143,
+     132,   135,   134,   135,   211,   110,   164,   264,   264,   312,
+     110,   115,   252,   115,   134,   110,   134,   135,   309,   115,
+     134,   135,   135,   110,   114,   200,   112,   163,   132,   200,
+     202,   110,   116,   135,   109,   349,   350,   372,   165,   112,
+     135,    85,   113,   116,   135,   135,   112,   135,   110,   134,
+     110,   110,   112,   112,   112,   135,   110,   134,   134,   134,
+     164,   164,   135,   112,   135,   135,   135,   135,   134,   134,
+     163,   163,   112,   112,   135,   135,   274,   227,   169,   169,
+      47,   169,   134,   132,   132,   132,   169,   132,   169,    58,
+      59,    60,   194,   195,   196,   132,    63,   132,   312,   114,
+     175,   115,   132,   135,   135,    96,   269,   270,   110,   299,
+     116,   132,   116,   132,   115,   297,   117,   141,   110,   110,
+     117,   168,   112,   134,   115,   112,   111,   147,   111,   147,
+     147,   112,   112,   112,   264,   112,   264,   264,   264,   135,
+     135,   112,   112,   110,   110,   112,   116,    96,   263,    96,
+     135,   112,   112,   110,   110,   109,   110,   170,   191,   212,
+     132,   110,   109,   109,   173,   196,    58,    59,   164,   171,
+     144,   110,   110,   114,   134,   134,   298,   141,   203,   109,
+     132,   203,   135,   117,   264,   134,   134,   135,   135,   135,
+     135,   112,   112,   134,   135,   112,   171,    44,    45,   114,
+     181,   182,   183,   169,   171,   135,   110,   170,   114,   183,
+      96,   134,    96,   134,   109,   109,   132,   115,   134,   272,
+     309,   115,   116,   117,   163,   110,   112,   164,   135,   146,
+     146,   110,   110,   110,   110,   267,    42,   163,   179,   180,
+     310,   117,   134,   171,   181,   110,   132,   171,   132,   134,
+     110,   134,   110,   134,    96,   134,    96,   134,   132,   298,
+     141,   139,   204,   110,   132,   117,   110,   135,   135,   171,
+      96,   116,   117,   135,   205,   206,   212,   132,   170,   170,
+     205,   173,   197,   225,   366,   173,   197,   110,   134,   110,
+     134,   115,   110,   116,   164,   112,   112,   163,   179,   182,
+     184,   185,   134,   132,   182,   186,   187,   135,   109,   149,
+     309,   357,   139,   135,   173,   197,   173,   197,   109,   132,
+     139,   171,   176,   115,   182,   212,   170,    56,   176,   189,
+     115,   182,   110,   227,   110,   135,   135,   292,   171,   176,
+     132,   188,   189,   176,   189,   173,   173,   110,   110,   110,
+     188,   135,   135,   173,   173,   135,   135
 };
 
@@ -5217,5 +4997,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 292 "parser.yy"
+#line 296 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -5226,5 +5006,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 298 "parser.yy"
+#line 302 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -5235,6 +5015,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 307 "parser.yy"
-    { (yyval.constant) = makeConstantInteger( *(yyvsp[(1) - (1)].tok) ); }
+#line 311 "parser.yy"
+    { (yyval.constant) = build_constantInteger( *(yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -5242,6 +5022,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 308 "parser.yy"
-    { (yyval.constant) = makeConstantFloat( *(yyvsp[(1) - (1)].tok) ); }
+#line 312 "parser.yy"
+    { (yyval.constant) = build_constantFloat( *(yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -5249,6 +5029,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 309 "parser.yy"
-    { (yyval.constant) = makeConstantChar( *(yyvsp[(1) - (1)].tok) ); }
+#line 313 "parser.yy"
+    { (yyval.constant) = build_constantChar( *(yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -5256,6 +5036,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 334 "parser.yy"
-    { (yyval.constant) = makeConstantStr( *(yyvsp[(1) - (1)].tok) ); }
+#line 338 "parser.yy"
+    { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -5263,6 +5043,10 @@
 
 /* Line 1806 of yacc.c  */
-#line 335 "parser.yy"
-    { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
+#line 340 "parser.yy"
+    {
+			appendStr( (yyvsp[(1) - (2)].constant)->get_expr()->get_constant()->get_value(), (yyvsp[(2) - (2)].tok) );
+			delete (yyvsp[(2) - (2)].tok);									// allocated by lexer
+			(yyval.constant) = (yyvsp[(1) - (2)].constant);
+		}
     break;
 
@@ -5270,5 +5054,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 342 "parser.yy"
+#line 351 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5277,5 +5061,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 344 "parser.yy"
+#line 353 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5284,5 +5068,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 346 "parser.yy"
+#line 355 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5291,5 +5075,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 348 "parser.yy"
+#line 357 "parser.yy"
     { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
     break;
@@ -5298,6 +5082,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 358 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
+#line 367 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
 
@@ -5305,6 +5089,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 360 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
+#line 369 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
 
@@ -5312,6 +5096,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 364 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
+#line 373 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_fieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
@@ -5319,6 +5103,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 367 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
+#line 376 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_pfieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
@@ -5326,6 +5110,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 370 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr1( OperatorNode::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
+#line 379 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
 
@@ -5333,6 +5117,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 372 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr1( OperatorNode::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
+#line 381 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
 
@@ -5340,5 +5124,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 374 "parser.yy"
+#line 383 "parser.yy"
     { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }
     break;
@@ -5347,8 +5131,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 376 "parser.yy"
+#line 385 "parser.yy"
     {
-			Token fn; fn.str = new std::string( "?{}" ); // location undefined
-			(yyval.en) = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) );
+			Token fn;
+			fn.str = new std::string( "?{}" ); // location undefined
+			(yyval.en) = new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) ) );
 		}
     break;
@@ -5357,5 +5142,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 385 "parser.yy"
+#line 395 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5364,5 +5149,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 390 "parser.yy"
+#line 400 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5371,5 +5156,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 393 "parser.yy"
+#line 403 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
     break;
@@ -5378,5 +5163,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 398 "parser.yy"
+#line 408 "parser.yy"
     { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
     break;
@@ -5385,6 +5170,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 400 "parser.yy"
-    { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
+#line 410 "parser.yy"
+    { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( (yyvsp[(5) - (9)].en) ) ) ) ); }
     break;
 
@@ -5392,5 +5177,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 405 "parser.yy"
+#line 415 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5399,5 +5184,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 410 "parser.yy"
+#line 420 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5406,6 +5191,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 414 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
+#line 424 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_fieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
@@ -5413,6 +5198,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 416 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
+#line 426 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_fieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
 
@@ -5420,6 +5205,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 418 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
+#line 428 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_pfieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
@@ -5427,6 +5212,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 420 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
+#line 430 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_pfieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
 
@@ -5434,5 +5219,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 428 "parser.yy"
+#line 438 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -5441,5 +5226,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 430 "parser.yy"
+#line 440 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -5448,5 +5233,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 432 "parser.yy"
+#line 442 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
@@ -5455,7 +5240,17 @@
 
 /* Line 1806 of yacc.c  */
-#line 437 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (2)].op) == OperatorNode::AddressOf ? (ExpressionNode*) new CompositeExprNode2( build_addressOf( (yyvsp[(2) - (2)].en) ) )
-											: (ExpressionNode*)new CompositeExprNode( new OperatorNode ( (yyvsp[(1) - (2)].op) ), (yyvsp[(2) - (2)].en) ); }
+#line 447 "parser.yy"
+    {
+			switch ( (yyvsp[(1) - (2)].op) ) {
+			  case OperKinds::AddressOf:
+				(yyval.en) = new CompositeExprNode( build_addressOf( (yyvsp[(2) - (2)].en) ) );
+				break;
+			  case OperKinds::PointTo:
+				(yyval.en) = new CompositeExprNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) );
+				break;
+			  default:
+				assert( false );
+			}
+		}
     break;
 
@@ -5463,6 +5258,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 440 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
+#line 460 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5470,6 +5265,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 442 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr1( OperatorNode::Incr, (yyvsp[(2) - (2)].en) ) ); }
+#line 462 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5477,6 +5272,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 444 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr1( OperatorNode::Decr, (yyvsp[(2) - (2)].en) ) ); }
+#line 464 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5484,6 +5279,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 446 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_sizeOf( (yyvsp[(2) - (2)].en) ) ); }
+#line 466 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_sizeOf( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5491,6 +5286,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 448 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_sizeOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
+#line 468 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_sizeOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
     break;
 
@@ -5498,6 +5293,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 450 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_offsetOf( new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) ) ) ); }
+#line 470 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_offsetOf( new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
 
@@ -5505,6 +5300,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 452 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
+#line 472 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_attr( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ) ); }
     break;
 
@@ -5512,6 +5307,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 454 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
+#line 474 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_attr( new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
     break;
 
@@ -5519,6 +5314,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 456 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
+#line 476 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_attr( new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     break;
 
@@ -5526,6 +5321,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 458 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_alignOf( (yyvsp[(2) - (2)].en) ) ); }
+#line 478 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_alignOf( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5533,6 +5328,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 460 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_alignOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
+#line 480 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_alignOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
     break;
 
@@ -5540,6 +5335,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 466 "parser.yy"
-    { (yyval.op) = OperatorNode::PointTo; }
+#line 486 "parser.yy"
+    { (yyval.op) = OperKinds::PointTo; }
     break;
 
@@ -5547,6 +5342,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 467 "parser.yy"
-    { (yyval.op) = OperatorNode::AddressOf; }
+#line 487 "parser.yy"
+    { (yyval.op) = OperKinds::AddressOf; }
     break;
 
@@ -5554,6 +5349,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 469 "parser.yy"
-    { (yyval.op) = OperatorNode::And; }
+#line 493 "parser.yy"
+    { (yyval.op) = OperKinds::UnPlus; }
     break;
 
@@ -5561,6 +5356,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 473 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
+#line 494 "parser.yy"
+    { (yyval.op) = OperKinds::UnMinus; }
     break;
 
@@ -5568,6 +5363,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 474 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
+#line 495 "parser.yy"
+    { (yyval.op) = OperKinds::Neg; }
     break;
 
@@ -5575,13 +5370,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 475 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::Neg ); }
-    break;
-
-  case 69:
-
-/* Line 1806 of yacc.c  */
-#line 476 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
+#line 496 "parser.yy"
+    { (yyval.op) = OperKinds::BitNeg; }
+    break;
+
+  case 70:
+
+/* Line 1806 of yacc.c  */
+#line 502 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
@@ -5589,13 +5384,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 482 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
-    break;
-
-  case 72:
-
-/* Line 1806 of yacc.c  */
-#line 484 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
+#line 504 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
+  case 73:
+
+/* Line 1806 of yacc.c  */
+#line 510 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5603,6 +5398,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 490 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 512 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5610,13 +5405,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 492 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 76:
-
-/* Line 1806 of yacc.c  */
-#line 494 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 514 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 77:
+
+/* Line 1806 of yacc.c  */
+#line 520 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5624,13 +5419,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 500 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 79:
-
-/* Line 1806 of yacc.c  */
-#line 502 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 522 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 80:
+
+/* Line 1806 of yacc.c  */
+#line 528 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5638,13 +5433,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 508 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 82:
-
-/* Line 1806 of yacc.c  */
-#line 510 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 530 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 83:
+
+/* Line 1806 of yacc.c  */
+#line 536 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5652,6 +5447,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 516 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 538 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5659,6 +5454,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 518 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 540 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5666,13 +5461,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 520 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 87:
-
-/* Line 1806 of yacc.c  */
-#line 522 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 542 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 88:
+
+/* Line 1806 of yacc.c  */
+#line 548 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5680,48 +5475,48 @@
 
 /* Line 1806 of yacc.c  */
-#line 528 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 90:
-
-/* Line 1806 of yacc.c  */
-#line 530 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 92:
-
-/* Line 1806 of yacc.c  */
-#line 536 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 94:
-
-/* Line 1806 of yacc.c  */
-#line 542 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 96:
-
-/* Line 1806 of yacc.c  */
-#line 548 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 98:
-
-/* Line 1806 of yacc.c  */
-#line 554 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
-    break;
-
-  case 100:
-
-/* Line 1806 of yacc.c  */
-#line 560 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
+#line 550 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 91:
+
+/* Line 1806 of yacc.c  */
+#line 556 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 93:
+
+/* Line 1806 of yacc.c  */
+#line 562 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 95:
+
+/* Line 1806 of yacc.c  */
+#line 568 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 97:
+
+/* Line 1806 of yacc.c  */
+#line 574 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
+    break;
+
+  case 99:
+
+/* Line 1806 of yacc.c  */
+#line 580 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
+    break;
+
+  case 101:
+
+/* Line 1806 of yacc.c  */
+#line 586 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
 
@@ -5729,6 +5524,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 567 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
+#line 589 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
@@ -5736,13 +5531,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 569 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
-    break;
-
-  case 104:
-
-/* Line 1806 of yacc.c  */
-#line 571 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
+#line 591 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
+    break;
+
+  case 106:
+
+/* Line 1806 of yacc.c  */
+#line 602 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5750,6 +5545,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 582 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 604 "parser.yy"
+    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5757,13 +5552,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 584 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 109:
-
-/* Line 1806 of yacc.c  */
-#line 586 "parser.yy"
-    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
+#line 609 "parser.yy"
+    { (yyval.en) = new NullExprNode; }
     break;
 
@@ -5771,6 +5559,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 591 "parser.yy"
-    { (yyval.en) = new NullExprNode; }
+#line 614 "parser.yy"
+    { (yyval.op) = OperKinds::Assign; }
+    break;
+
+  case 111:
+
+/* Line 1806 of yacc.c  */
+#line 615 "parser.yy"
+    { (yyval.op) = OperKinds::MulAssn; }
     break;
 
@@ -5778,6 +5573,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 599 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
+#line 616 "parser.yy"
+    { (yyval.op) = OperKinds::DivAssn; }
     break;
 
@@ -5785,6 +5580,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 601 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
+#line 617 "parser.yy"
+    { (yyval.op) = OperKinds::ModAssn; }
     break;
 
@@ -5792,6 +5587,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 603 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
+#line 618 "parser.yy"
+    { (yyval.op) = OperKinds::PlusAssn; }
     break;
 
@@ -5799,6 +5594,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 605 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
+#line 619 "parser.yy"
+    { (yyval.op) = OperKinds::MinusAssn; }
+    break;
+
+  case 116:
+
+/* Line 1806 of yacc.c  */
+#line 620 "parser.yy"
+    { (yyval.op) = OperKinds::LSAssn; }
     break;
 
@@ -5806,76 +5608,69 @@
 
 /* Line 1806 of yacc.c  */
-#line 611 "parser.yy"
+#line 621 "parser.yy"
+    { (yyval.op) = OperKinds::RSAssn; }
+    break;
+
+  case 118:
+
+/* Line 1806 of yacc.c  */
+#line 622 "parser.yy"
+    { (yyval.op) = OperKinds::AndAssn; }
+    break;
+
+  case 119:
+
+/* Line 1806 of yacc.c  */
+#line 623 "parser.yy"
+    { (yyval.op) = OperKinds::ERAssn; }
+    break;
+
+  case 120:
+
+/* Line 1806 of yacc.c  */
+#line 624 "parser.yy"
+    { (yyval.op) = OperKinds::OrAssn; }
+    break;
+
+  case 121:
+
+/* Line 1806 of yacc.c  */
+#line 631 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_tuple() ); }
+    break;
+
+  case 122:
+
+/* Line 1806 of yacc.c  */
+#line 633 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
+    break;
+
+  case 123:
+
+/* Line 1806 of yacc.c  */
+#line 635 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_tuple( (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ) ); }
+    break;
+
+  case 124:
+
+/* Line 1806 of yacc.c  */
+#line 637 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( (yyvsp[(5) - (7)].en) ) ) ); }
+    break;
+
+  case 126:
+
+/* Line 1806 of yacc.c  */
+#line 643 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 118:
-
-/* Line 1806 of yacc.c  */
-#line 615 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
-    break;
-
-  case 119:
-
-/* Line 1806 of yacc.c  */
-#line 616 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
-    break;
-
-  case 120:
-
-/* Line 1806 of yacc.c  */
-#line 617 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
-    break;
-
-  case 121:
-
-/* Line 1806 of yacc.c  */
-#line 618 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
-    break;
-
-  case 122:
-
-/* Line 1806 of yacc.c  */
-#line 619 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
-    break;
-
-  case 123:
-
-/* Line 1806 of yacc.c  */
-#line 620 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
-    break;
-
-  case 124:
-
-/* Line 1806 of yacc.c  */
-#line 621 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
-    break;
-
-  case 125:
-
-/* Line 1806 of yacc.c  */
-#line 622 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
-    break;
-
-  case 126:
-
-/* Line 1806 of yacc.c  */
-#line 623 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
-    break;
-
-  case 127:
-
-/* Line 1806 of yacc.c  */
-#line 624 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
+  case 128:
+
+/* Line 1806 of yacc.c  */
+#line 649 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5883,37 +5678,30 @@
 
 /* Line 1806 of yacc.c  */
-#line 631 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 130:
-
-/* Line 1806 of yacc.c  */
-#line 636 "parser.yy"
+#line 654 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 134:
-
-/* Line 1806 of yacc.c  */
-#line 645 "parser.yy"
+  case 133:
+
+/* Line 1806 of yacc.c  */
+#line 663 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
 
+  case 139:
+
+/* Line 1806 of yacc.c  */
+#line 670 "parser.yy"
+    {
+			Token fn;
+			fn.str = new std::string( "^?{}" ); // location undefined
+			(yyval.sn) = new StatementNode( StatementNode::Exp, new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ) ), 0 );
+		}
+    break;
+
   case 140:
 
 /* Line 1806 of yacc.c  */
-#line 652 "parser.yy"
-    {
-			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
-			(yyval.sn) = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),
-				(ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ), 0 );
-		}
-    break;
-
-  case 141:
-
-/* Line 1806 of yacc.c  */
-#line 662 "parser.yy"
+#line 680 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5921,23 +5709,30 @@
     break;
 
+  case 141:
+
+/* Line 1806 of yacc.c  */
+#line 687 "parser.yy"
+    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
+    break;
+
   case 142:
 
 /* Line 1806 of yacc.c  */
-#line 669 "parser.yy"
-    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
-    break;
-
-  case 143:
-
-/* Line 1806 of yacc.c  */
-#line 676 "parser.yy"
+#line 694 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
     break;
 
+  case 144:
+
+/* Line 1806 of yacc.c  */
+#line 700 "parser.yy"
+    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
+    break;
+
   case 145:
 
 /* Line 1806 of yacc.c  */
-#line 682 "parser.yy"
-    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
+#line 705 "parser.yy"
+    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
@@ -5945,12 +5740,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 687 "parser.yy"
-    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
-    break;
-
-  case 147:
-
-/* Line 1806 of yacc.c  */
-#line 689 "parser.yy"
+#line 707 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -5960,16 +5748,23 @@
     break;
 
-  case 148:
-
-/* Line 1806 of yacc.c  */
-#line 695 "parser.yy"
+  case 147:
+
+/* Line 1806 of yacc.c  */
+#line 713 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
+  case 150:
+
+/* Line 1806 of yacc.c  */
+#line 720 "parser.yy"
+    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
+    break;
+
   case 151:
 
 /* Line 1806 of yacc.c  */
-#line 702 "parser.yy"
-    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
+#line 725 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
     break;
 
@@ -5977,6 +5772,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 707 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
+#line 731 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
 
@@ -5984,6 +5779,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 713 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
+#line 733 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
     break;
 
@@ -5991,6 +5786,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 715 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
+#line 735 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
 
@@ -5998,12 +5793,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 717 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 156:
-
-/* Line 1806 of yacc.c  */
-#line 719 "parser.yy"
+#line 737 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
@@ -6017,15 +5805,15 @@
     break;
 
+  case 156:
+
+/* Line 1806 of yacc.c  */
+#line 747 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
+    break;
+
   case 157:
 
 /* Line 1806 of yacc.c  */
-#line 729 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 158:
-
-/* Line 1806 of yacc.c  */
-#line 731 "parser.yy"
+#line 749 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
@@ -6034,16 +5822,23 @@
     break;
 
+  case 158:
+
+/* Line 1806 of yacc.c  */
+#line 759 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].en); }
+    break;
+
   case 159:
 
 /* Line 1806 of yacc.c  */
-#line 741 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].en); }
-    break;
-
-  case 160:
-
-/* Line 1806 of yacc.c  */
-#line 743 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Range, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 761 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 161:
+
+/* Line 1806 of yacc.c  */
+#line 766 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
     break;
 
@@ -6051,6 +5846,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 748 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
+#line 768 "parser.yy"
+    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
     break;
 
@@ -6058,6 +5853,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 750 "parser.yy"
-    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
+#line 772 "parser.yy"
+    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     break;
 
@@ -6065,20 +5860,20 @@
 
 /* Line 1806 of yacc.c  */
-#line 754 "parser.yy"
-    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
-    break;
-
-  case 165:
-
-/* Line 1806 of yacc.c  */
-#line 755 "parser.yy"
+#line 773 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
 
+  case 166:
+
+/* Line 1806 of yacc.c  */
+#line 779 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
+    break;
+
   case 167:
 
 /* Line 1806 of yacc.c  */
-#line 761 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
+#line 783 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
 
@@ -6086,153 +5881,153 @@
 
 /* Line 1806 of yacc.c  */
-#line 765 "parser.yy"
+#line 788 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
+  case 170:
+
+/* Line 1806 of yacc.c  */
+#line 794 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
 
-  case 169:
-
-/* Line 1806 of yacc.c  */
-#line 770 "parser.yy"
+  case 171:
+
+/* Line 1806 of yacc.c  */
+#line 796 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
+    break;
+
+  case 172:
+
+/* Line 1806 of yacc.c  */
+#line 801 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 171:
-
-/* Line 1806 of yacc.c  */
-#line 776 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
-    break;
-
-  case 172:
-
-/* Line 1806 of yacc.c  */
-#line 778 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
-    break;
-
-  case 173:
-
-/* Line 1806 of yacc.c  */
-#line 783 "parser.yy"
+  case 174:
+
+/* Line 1806 of yacc.c  */
+#line 807 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
+    break;
+
+  case 175:
+
+/* Line 1806 of yacc.c  */
+#line 809 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
+    break;
+
+  case 176:
+
+/* Line 1806 of yacc.c  */
+#line 811 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
+    break;
+
+  case 177:
+
+/* Line 1806 of yacc.c  */
+#line 813 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
+    break;
+
+  case 178:
+
+/* Line 1806 of yacc.c  */
+#line 818 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
+    break;
+
+  case 180:
+
+/* Line 1806 of yacc.c  */
+#line 824 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 175:
-
-/* Line 1806 of yacc.c  */
-#line 789 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
-    break;
-
-  case 176:
-
-/* Line 1806 of yacc.c  */
-#line 791 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
-    break;
-
-  case 177:
-
-/* Line 1806 of yacc.c  */
-#line 793 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
-    break;
-
-  case 178:
-
-/* Line 1806 of yacc.c  */
-#line 795 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
-    break;
-
-  case 179:
-
-/* Line 1806 of yacc.c  */
-#line 800 "parser.yy"
+  case 181:
+
+/* Line 1806 of yacc.c  */
+#line 826 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
+  case 182:
+
+/* Line 1806 of yacc.c  */
+#line 831 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
+    break;
+
+  case 183:
+
+/* Line 1806 of yacc.c  */
+#line 833 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
+    break;
+
+  case 184:
+
+/* Line 1806 of yacc.c  */
+#line 835 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
+    break;
+
+  case 185:
+
+/* Line 1806 of yacc.c  */
+#line 840 "parser.yy"
+    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
+    break;
+
+  case 186:
+
+/* Line 1806 of yacc.c  */
+#line 842 "parser.yy"
+    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
+    break;
+
+  case 187:
+
+/* Line 1806 of yacc.c  */
+#line 847 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
+    break;
+
+  case 188:
+
+/* Line 1806 of yacc.c  */
+#line 851 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 189:
+
+/* Line 1806 of yacc.c  */
+#line 854 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
+    break;
+
+  case 190:
+
+/* Line 1806 of yacc.c  */
+#line 858 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
+    break;
+
+  case 191:
+
+/* Line 1806 of yacc.c  */
+#line 861 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
 
-  case 181:
-
-/* Line 1806 of yacc.c  */
-#line 806 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 182:
-
-/* Line 1806 of yacc.c  */
-#line 808 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 183:
-
-/* Line 1806 of yacc.c  */
-#line 813 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 184:
-
-/* Line 1806 of yacc.c  */
-#line 815 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
-    break;
-
-  case 185:
-
-/* Line 1806 of yacc.c  */
-#line 817 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
-    break;
-
-  case 186:
-
-/* Line 1806 of yacc.c  */
-#line 822 "parser.yy"
-    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
-    break;
-
-  case 187:
-
-/* Line 1806 of yacc.c  */
-#line 824 "parser.yy"
-    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
-    break;
-
-  case 188:
-
-/* Line 1806 of yacc.c  */
-#line 829 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 189:
-
-/* Line 1806 of yacc.c  */
-#line 833 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 190:
-
-/* Line 1806 of yacc.c  */
-#line 836 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
-    break;
-
-  case 191:
-
-/* Line 1806 of yacc.c  */
-#line 840 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
-    break;
-
   case 192:
 
 /* Line 1806 of yacc.c  */
-#line 843 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
+#line 865 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     break;
 
@@ -6240,6 +6035,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 847 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
+#line 867 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     break;
 
@@ -6247,6 +6042,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 849 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
+#line 869 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
 
@@ -6254,5 +6049,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 851 "parser.yy"
+#line 873 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6261,6 +6056,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 855 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
+#line 875 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
     break;
 
@@ -6268,6 +6063,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 857 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
+#line 882 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
 
@@ -6275,5 +6070,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 864 "parser.yy"
+#line 884 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6282,12 +6077,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 866 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
-    break;
-
-  case 200:
-
-/* Line 1806 of yacc.c  */
-#line 868 "parser.yy"
+#line 886 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6296,30 +6084,37 @@
     break;
 
+  case 201:
+
+/* Line 1806 of yacc.c  */
+#line 897 "parser.yy"
+    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
+    break;
+
   case 202:
 
 /* Line 1806 of yacc.c  */
-#line 879 "parser.yy"
+#line 899 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
+    break;
+
+  case 203:
+
+/* Line 1806 of yacc.c  */
+#line 901 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
 
-  case 203:
-
-/* Line 1806 of yacc.c  */
-#line 881 "parser.yy"
+  case 204:
+
+/* Line 1806 of yacc.c  */
+#line 903 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
 
-  case 204:
-
-/* Line 1806 of yacc.c  */
-#line 883 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
-    break;
-
   case 205:
 
 /* Line 1806 of yacc.c  */
-#line 885 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
+#line 908 "parser.yy"
+    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
 
@@ -6327,33 +6122,26 @@
 
 /* Line 1806 of yacc.c  */
-#line 890 "parser.yy"
+#line 910 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
+    break;
+
+  case 207:
+
+/* Line 1806 of yacc.c  */
+#line 912 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
 
-  case 207:
-
-/* Line 1806 of yacc.c  */
-#line 892 "parser.yy"
+  case 208:
+
+/* Line 1806 of yacc.c  */
+#line 914 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
 
-  case 208:
-
-/* Line 1806 of yacc.c  */
-#line 894 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
-    break;
-
   case 209:
 
 /* Line 1806 of yacc.c  */
-#line 896 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
-    break;
-
-  case 210:
-
-/* Line 1806 of yacc.c  */
-#line 901 "parser.yy"
+#line 919 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6362,8 +6150,8 @@
     break;
 
-  case 212:
-
-/* Line 1806 of yacc.c  */
-#line 915 "parser.yy"
+  case 211:
+
+/* Line 1806 of yacc.c  */
+#line 933 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6372,15 +6160,15 @@
     break;
 
+  case 212:
+
+/* Line 1806 of yacc.c  */
+#line 938 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
   case 213:
 
 /* Line 1806 of yacc.c  */
-#line 920 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 214:
-
-/* Line 1806 of yacc.c  */
-#line 922 "parser.yy"
+#line 940 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6389,9 +6177,16 @@
     break;
 
+  case 215:
+
+/* Line 1806 of yacc.c  */
+#line 949 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
+    break;
+
   case 216:
 
 /* Line 1806 of yacc.c  */
-#line 931 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
+#line 951 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
     break;
 
@@ -6399,6 +6194,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 933 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
+#line 953 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
     break;
 
@@ -6406,6 +6201,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 935 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
+#line 955 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
     break;
 
@@ -6413,6 +6208,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 937 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
+#line 957 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
     break;
 
@@ -6420,6 +6215,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 939 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
+#line 962 "parser.yy"
+    { (yyval.flag) = false; }
     break;
 
@@ -6427,6 +6222,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 944 "parser.yy"
-    { (yyval.flag) = false; }
+#line 964 "parser.yy"
+    { (yyval.flag) = true; }
     break;
 
@@ -6434,20 +6229,20 @@
 
 /* Line 1806 of yacc.c  */
-#line 946 "parser.yy"
-    { (yyval.flag) = true; }
-    break;
-
-  case 223:
-
-/* Line 1806 of yacc.c  */
-#line 951 "parser.yy"
+#line 969 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
+  case 225:
+
+/* Line 1806 of yacc.c  */
+#line 976 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+    break;
+
   case 226:
 
 /* Line 1806 of yacc.c  */
-#line 958 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+#line 981 "parser.yy"
+    { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
     break;
 
@@ -6455,6 +6250,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 963 "parser.yy"
-    { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
+#line 983 "parser.yy"
+    { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
     break;
 
@@ -6462,6 +6257,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 965 "parser.yy"
-    { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
+#line 988 "parser.yy"
+    { (yyval.constant) = 0; }
     break;
 
@@ -6469,6 +6264,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 970 "parser.yy"
-    { (yyval.constant) = 0; }
+#line 990 "parser.yy"
+    { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
     break;
 
@@ -6476,6 +6271,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 972 "parser.yy"
-    { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
+#line 992 "parser.yy"
+    { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
     break;
 
@@ -6483,6 +6278,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 974 "parser.yy"
-    { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
+#line 997 "parser.yy"
+    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -6490,6 +6285,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 979 "parser.yy"
-    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
+#line 999 "parser.yy"
+    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
 
@@ -6497,34 +6292,34 @@
 
 /* Line 1806 of yacc.c  */
-#line 981 "parser.yy"
-    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
-    break;
-
-  case 234:
-
-/* Line 1806 of yacc.c  */
-#line 988 "parser.yy"
+#line 1006 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
+  case 236:
+
+/* Line 1806 of yacc.c  */
+#line 1013 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
   case 237:
 
 /* Line 1806 of yacc.c  */
-#line 995 "parser.yy"
+#line 1018 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 240:
+
+/* Line 1806 of yacc.c  */
+#line 1025 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 238:
-
-/* Line 1806 of yacc.c  */
-#line 1000 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 241:
-
-/* Line 1806 of yacc.c  */
-#line 1007 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
+  case 245:
+
+/* Line 1806 of yacc.c  */
+#line 1039 "parser.yy"
+    {}
     break;
 
@@ -6532,19 +6327,12 @@
 
 /* Line 1806 of yacc.c  */
-#line 1021 "parser.yy"
+#line 1040 "parser.yy"
     {}
     break;
 
-  case 247:
-
-/* Line 1806 of yacc.c  */
-#line 1022 "parser.yy"
-    {}
-    break;
-
-  case 255:
-
-/* Line 1806 of yacc.c  */
-#line 1051 "parser.yy"
+  case 254:
+
+/* Line 1806 of yacc.c  */
+#line 1069 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6553,8 +6341,8 @@
     break;
 
-  case 256:
-
-/* Line 1806 of yacc.c  */
-#line 1058 "parser.yy"
+  case 255:
+
+/* Line 1806 of yacc.c  */
+#line 1076 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6563,8 +6351,8 @@
     break;
 
-  case 257:
-
-/* Line 1806 of yacc.c  */
-#line 1063 "parser.yy"
+  case 256:
+
+/* Line 1806 of yacc.c  */
+#line 1081 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6573,8 +6361,8 @@
     break;
 
-  case 258:
-
-/* Line 1806 of yacc.c  */
-#line 1073 "parser.yy"
+  case 257:
+
+/* Line 1806 of yacc.c  */
+#line 1091 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6583,8 +6371,8 @@
     break;
 
-  case 259:
-
-/* Line 1806 of yacc.c  */
-#line 1078 "parser.yy"
+  case 258:
+
+/* Line 1806 of yacc.c  */
+#line 1096 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6593,8 +6381,8 @@
     break;
 
-  case 260:
-
-/* Line 1806 of yacc.c  */
-#line 1083 "parser.yy"
+  case 259:
+
+/* Line 1806 of yacc.c  */
+#line 1101 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6603,8 +6391,8 @@
     break;
 
-  case 261:
-
-/* Line 1806 of yacc.c  */
-#line 1091 "parser.yy"
+  case 260:
+
+/* Line 1806 of yacc.c  */
+#line 1109 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6613,8 +6401,8 @@
     break;
 
-  case 262:
-
-/* Line 1806 of yacc.c  */
-#line 1096 "parser.yy"
+  case 261:
+
+/* Line 1806 of yacc.c  */
+#line 1114 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6623,8 +6411,8 @@
     break;
 
-  case 263:
-
-/* Line 1806 of yacc.c  */
-#line 1101 "parser.yy"
+  case 262:
+
+/* Line 1806 of yacc.c  */
+#line 1119 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6633,8 +6421,8 @@
     break;
 
-  case 264:
-
-/* Line 1806 of yacc.c  */
-#line 1106 "parser.yy"
+  case 263:
+
+/* Line 1806 of yacc.c  */
+#line 1124 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6643,8 +6431,8 @@
     break;
 
-  case 265:
-
-/* Line 1806 of yacc.c  */
-#line 1111 "parser.yy"
+  case 264:
+
+/* Line 1806 of yacc.c  */
+#line 1129 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6653,8 +6441,8 @@
     break;
 
-  case 266:
-
-/* Line 1806 of yacc.c  */
-#line 1119 "parser.yy"
+  case 265:
+
+/* Line 1806 of yacc.c  */
+#line 1137 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6662,8 +6450,8 @@
     break;
 
-  case 267:
-
-/* Line 1806 of yacc.c  */
-#line 1142 "parser.yy"
+  case 266:
+
+/* Line 1806 of yacc.c  */
+#line 1160 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6671,8 +6459,8 @@
     break;
 
-  case 268:
-
-/* Line 1806 of yacc.c  */
-#line 1146 "parser.yy"
+  case 267:
+
+/* Line 1806 of yacc.c  */
+#line 1164 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6680,9 +6468,16 @@
     break;
 
+  case 268:
+
+/* Line 1806 of yacc.c  */
+#line 1171 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
+    break;
+
   case 269:
 
 /* Line 1806 of yacc.c  */
-#line 1153 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
+#line 1175 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
 
@@ -6690,12 +6485,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1157 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
-    break;
-
-  case 271:
-
-/* Line 1806 of yacc.c  */
-#line 1162 "parser.yy"
+#line 1180 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6704,8 +6492,8 @@
     break;
 
-  case 272:
-
-/* Line 1806 of yacc.c  */
-#line 1167 "parser.yy"
+  case 271:
+
+/* Line 1806 of yacc.c  */
+#line 1185 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6714,8 +6502,8 @@
     break;
 
-  case 273:
-
-/* Line 1806 of yacc.c  */
-#line 1172 "parser.yy"
+  case 272:
+
+/* Line 1806 of yacc.c  */
+#line 1190 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6724,8 +6512,8 @@
     break;
 
-  case 274:
-
-/* Line 1806 of yacc.c  */
-#line 1183 "parser.yy"
+  case 273:
+
+/* Line 1806 of yacc.c  */
+#line 1201 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6734,8 +6522,8 @@
     break;
 
-  case 275:
-
-/* Line 1806 of yacc.c  */
-#line 1188 "parser.yy"
+  case 274:
+
+/* Line 1806 of yacc.c  */
+#line 1206 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6744,8 +6532,8 @@
     break;
 
-  case 276:
-
-/* Line 1806 of yacc.c  */
-#line 1193 "parser.yy"
+  case 275:
+
+/* Line 1806 of yacc.c  */
+#line 1211 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6754,8 +6542,8 @@
     break;
 
-  case 277:
-
-/* Line 1806 of yacc.c  */
-#line 1198 "parser.yy"
+  case 276:
+
+/* Line 1806 of yacc.c  */
+#line 1216 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6764,8 +6552,8 @@
     break;
 
-  case 278:
-
-/* Line 1806 of yacc.c  */
-#line 1203 "parser.yy"
+  case 277:
+
+/* Line 1806 of yacc.c  */
+#line 1221 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6774,8 +6562,8 @@
     break;
 
-  case 279:
-
-/* Line 1806 of yacc.c  */
-#line 1212 "parser.yy"
+  case 278:
+
+/* Line 1806 of yacc.c  */
+#line 1230 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6784,8 +6572,8 @@
     break;
 
-  case 280:
-
-/* Line 1806 of yacc.c  */
-#line 1217 "parser.yy"
+  case 279:
+
+/* Line 1806 of yacc.c  */
+#line 1235 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6794,8 +6582,8 @@
     break;
 
-  case 285:
-
-/* Line 1806 of yacc.c  */
-#line 1234 "parser.yy"
+  case 284:
+
+/* Line 1806 of yacc.c  */
+#line 1252 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6804,8 +6592,8 @@
     break;
 
-  case 286:
-
-/* Line 1806 of yacc.c  */
-#line 1239 "parser.yy"
+  case 285:
+
+/* Line 1806 of yacc.c  */
+#line 1257 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6814,23 +6602,30 @@
     break;
 
-  case 295:
-
-/* Line 1806 of yacc.c  */
-#line 1261 "parser.yy"
+  case 294:
+
+/* Line 1806 of yacc.c  */
+#line 1279 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 298:
-
-/* Line 1806 of yacc.c  */
-#line 1273 "parser.yy"
+  case 297:
+
+/* Line 1806 of yacc.c  */
+#line 1291 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
+  case 300:
+
+/* Line 1806 of yacc.c  */
+#line 1302 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
+    break;
+
   case 301:
 
 /* Line 1806 of yacc.c  */
-#line 1284 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
+#line 1304 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
 
@@ -6838,6 +6633,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1286 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
+#line 1306 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
 
@@ -6845,6 +6640,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1288 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
+#line 1308 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
 
@@ -6852,6 +6647,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1290 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
+#line 1310 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
 
@@ -6859,12 +6654,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1292 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
-    break;
-
-  case 306:
-
-/* Line 1806 of yacc.c  */
-#line 1294 "parser.yy"
+#line 1312 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6872,8 +6660,8 @@
     break;
 
-  case 307:
-
-/* Line 1806 of yacc.c  */
-#line 1298 "parser.yy"
+  case 306:
+
+/* Line 1806 of yacc.c  */
+#line 1316 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6882,219 +6670,226 @@
     break;
 
+  case 308:
+
+/* Line 1806 of yacc.c  */
+#line 1325 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 309:
 
 /* Line 1806 of yacc.c  */
-#line 1307 "parser.yy"
+#line 1327 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 311:
+
+/* Line 1806 of yacc.c  */
+#line 1338 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 310:
-
-/* Line 1806 of yacc.c  */
-#line 1309 "parser.yy"
+  case 313:
+
+/* Line 1806 of yacc.c  */
+#line 1347 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
+    break;
+
+  case 314:
+
+/* Line 1806 of yacc.c  */
+#line 1349 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
+    break;
+
+  case 315:
+
+/* Line 1806 of yacc.c  */
+#line 1351 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
+    break;
+
+  case 316:
+
+/* Line 1806 of yacc.c  */
+#line 1353 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
+    break;
+
+  case 317:
+
+/* Line 1806 of yacc.c  */
+#line 1355 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
+    break;
+
+  case 318:
+
+/* Line 1806 of yacc.c  */
+#line 1357 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
+    break;
+
+  case 319:
+
+/* Line 1806 of yacc.c  */
+#line 1359 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
+    break;
+
+  case 320:
+
+/* Line 1806 of yacc.c  */
+#line 1361 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
+    break;
+
+  case 321:
+
+/* Line 1806 of yacc.c  */
+#line 1366 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
+    break;
+
+  case 322:
+
+/* Line 1806 of yacc.c  */
+#line 1368 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
+    break;
+
+  case 323:
+
+/* Line 1806 of yacc.c  */
+#line 1370 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
+    break;
+
+  case 324:
+
+/* Line 1806 of yacc.c  */
+#line 1372 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
+    break;
+
+  case 325:
+
+/* Line 1806 of yacc.c  */
+#line 1374 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
+    break;
+
+  case 326:
+
+/* Line 1806 of yacc.c  */
+#line 1376 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
+    break;
+
+  case 327:
+
+/* Line 1806 of yacc.c  */
+#line 1378 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
+    break;
+
+  case 328:
+
+/* Line 1806 of yacc.c  */
+#line 1380 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
+    break;
+
+  case 329:
+
+/* Line 1806 of yacc.c  */
+#line 1382 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
+    break;
+
+  case 330:
+
+/* Line 1806 of yacc.c  */
+#line 1384 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
+    break;
+
+  case 331:
+
+/* Line 1806 of yacc.c  */
+#line 1386 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
+    break;
+
+  case 332:
+
+/* Line 1806 of yacc.c  */
+#line 1388 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
+    break;
+
+  case 333:
+
+/* Line 1806 of yacc.c  */
+#line 1390 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
+    break;
+
+  case 335:
+
+/* Line 1806 of yacc.c  */
+#line 1397 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 336:
+
+/* Line 1806 of yacc.c  */
+#line 1399 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 337:
+
+/* Line 1806 of yacc.c  */
+#line 1401 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 312:
-
-/* Line 1806 of yacc.c  */
-#line 1320 "parser.yy"
+  case 338:
+
+/* Line 1806 of yacc.c  */
+#line 1403 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 340:
+
+/* Line 1806 of yacc.c  */
+#line 1409 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 342:
+
+/* Line 1806 of yacc.c  */
+#line 1416 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 343:
+
+/* Line 1806 of yacc.c  */
+#line 1418 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 314:
-
-/* Line 1806 of yacc.c  */
-#line 1329 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
-    break;
-
-  case 315:
-
-/* Line 1806 of yacc.c  */
-#line 1331 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
-    break;
-
-  case 316:
-
-/* Line 1806 of yacc.c  */
-#line 1333 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
-    break;
-
-  case 317:
-
-/* Line 1806 of yacc.c  */
-#line 1335 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
-    break;
-
-  case 318:
-
-/* Line 1806 of yacc.c  */
-#line 1337 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
-    break;
-
-  case 319:
-
-/* Line 1806 of yacc.c  */
-#line 1339 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
-    break;
-
-  case 320:
-
-/* Line 1806 of yacc.c  */
-#line 1341 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
-    break;
-
-  case 321:
-
-/* Line 1806 of yacc.c  */
-#line 1343 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
-    break;
-
-  case 322:
-
-/* Line 1806 of yacc.c  */
-#line 1348 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
-    break;
-
-  case 323:
-
-/* Line 1806 of yacc.c  */
-#line 1350 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
-    break;
-
-  case 324:
-
-/* Line 1806 of yacc.c  */
-#line 1352 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
-    break;
-
-  case 325:
-
-/* Line 1806 of yacc.c  */
-#line 1354 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
-    break;
-
-  case 326:
-
-/* Line 1806 of yacc.c  */
-#line 1356 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
-    break;
-
-  case 327:
-
-/* Line 1806 of yacc.c  */
-#line 1358 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
-    break;
-
-  case 328:
-
-/* Line 1806 of yacc.c  */
-#line 1360 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
-    break;
-
-  case 329:
-
-/* Line 1806 of yacc.c  */
-#line 1362 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
-    break;
-
-  case 330:
-
-/* Line 1806 of yacc.c  */
-#line 1364 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
-    break;
-
-  case 331:
-
-/* Line 1806 of yacc.c  */
-#line 1366 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
-    break;
-
-  case 332:
-
-/* Line 1806 of yacc.c  */
-#line 1368 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
-    break;
-
-  case 333:
-
-/* Line 1806 of yacc.c  */
-#line 1370 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
-    break;
-
-  case 334:
-
-/* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
-    break;
-
-  case 336:
-
-/* Line 1806 of yacc.c  */
-#line 1379 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 337:
-
-/* Line 1806 of yacc.c  */
-#line 1381 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 338:
-
-/* Line 1806 of yacc.c  */
-#line 1383 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 339:
-
-/* Line 1806 of yacc.c  */
-#line 1385 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 341:
-
-/* Line 1806 of yacc.c  */
-#line 1391 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 343:
-
-/* Line 1806 of yacc.c  */
-#line 1398 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
   case 344:
 
 /* Line 1806 of yacc.c  */
-#line 1400 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+#line 1420 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -7102,6 +6897,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1402 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
+#line 1425 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
 
@@ -7109,6 +6904,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1407 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
+#line 1427 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
 
@@ -7116,6 +6911,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1409 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
+#line 1429 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
 
@@ -7123,51 +6918,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1411 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 349:
-
-/* Line 1806 of yacc.c  */
-#line 1413 "parser.yy"
+#line 1431 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1419 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 352:
-
-/* Line 1806 of yacc.c  */
-#line 1421 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 353:
-
-/* Line 1806 of yacc.c  */
-#line 1423 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 355:
-
-/* Line 1806 of yacc.c  */
-#line 1429 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 356:
-
-/* Line 1806 of yacc.c  */
-#line 1431 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 358:
+  case 350:
 
 /* Line 1806 of yacc.c  */
@@ -7176,5 +6929,5 @@
     break;
 
-  case 359:
+  case 351:
 
 /* Line 1806 of yacc.c  */
@@ -7183,5 +6936,5 @@
     break;
 
-  case 360:
+  case 352:
 
 /* Line 1806 of yacc.c  */
@@ -7190,9 +6943,51 @@
     break;
 
+  case 354:
+
+/* Line 1806 of yacc.c  */
+#line 1447 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 355:
+
+/* Line 1806 of yacc.c  */
+#line 1449 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 357:
+
+/* Line 1806 of yacc.c  */
+#line 1455 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 358:
+
+/* Line 1806 of yacc.c  */
+#line 1457 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 359:
+
+/* Line 1806 of yacc.c  */
+#line 1459 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 360:
+
+/* Line 1806 of yacc.c  */
+#line 1464 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
+    break;
+
   case 361:
 
 /* Line 1806 of yacc.c  */
-#line 1446 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
+#line 1466 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
@@ -7200,26 +6995,19 @@
 
 /* Line 1806 of yacc.c  */
-#line 1448 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 363:
-
-/* Line 1806 of yacc.c  */
-#line 1450 "parser.yy"
+#line 1468 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
+  case 365:
+
+/* Line 1806 of yacc.c  */
+#line 1478 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
+    break;
+
   case 366:
 
 /* Line 1806 of yacc.c  */
-#line 1460 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
-    break;
-
-  case 367:
-
-/* Line 1806 of yacc.c  */
-#line 1462 "parser.yy"
+#line 1480 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7228,9 +7016,16 @@
     break;
 
+  case 367:
+
+/* Line 1806 of yacc.c  */
+#line 1485 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+    break;
+
   case 368:
 
 /* Line 1806 of yacc.c  */
-#line 1467 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+#line 1487 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
     break;
 
@@ -7238,6 +7033,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1469 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
+#line 1489 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
     break;
 
@@ -7245,6 +7040,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1471 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
+#line 1491 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7252,6 +7047,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1473 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
+#line 1496 "parser.yy"
+    { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
 
@@ -7259,6 +7054,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1478 "parser.yy"
-    { (yyval.aggKey) = DeclarationNode::Struct; }
+#line 1498 "parser.yy"
+    { (yyval.aggKey) = DeclarationNode::Union; }
     break;
 
@@ -7266,6 +7061,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1480 "parser.yy"
-    { (yyval.aggKey) = DeclarationNode::Union; }
+#line 1503 "parser.yy"
+    { (yyval.decl) = 0; }
     break;
 
@@ -7273,26 +7068,19 @@
 
 /* Line 1806 of yacc.c  */
-#line 1485 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 375:
-
-/* Line 1806 of yacc.c  */
-#line 1487 "parser.yy"
+#line 1505 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 377:
-
-/* Line 1806 of yacc.c  */
-#line 1493 "parser.yy"
+  case 376:
+
+/* Line 1806 of yacc.c  */
+#line 1511 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
 
-  case 379:
-
-/* Line 1806 of yacc.c  */
-#line 1496 "parser.yy"
+  case 378:
+
+/* Line 1806 of yacc.c  */
+#line 1514 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7302,9 +7090,16 @@
     break;
 
+  case 380:
+
+/* Line 1806 of yacc.c  */
+#line 1524 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
+    break;
+
   case 381:
 
 /* Line 1806 of yacc.c  */
-#line 1506 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
+#line 1526 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
@@ -7312,6 +7107,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1508 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
+#line 1528 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
 
@@ -7319,6 +7114,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1510 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
+#line 1533 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
@@ -7326,6 +7121,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1515 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+#line 1535 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
 
@@ -7333,6 +7128,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1517 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
+#line 1540 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
 
@@ -7340,6 +7135,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1522 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
+#line 1542 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
 
@@ -7347,6 +7142,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1524 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
+#line 1545 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
@@ -7354,13 +7149,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1527 "parser.yy"
+#line 1548 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 389:
-
-/* Line 1806 of yacc.c  */
-#line 1530 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+  case 390:
+
+/* Line 1806 of yacc.c  */
+#line 1554 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -7368,6 +7163,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1536 "parser.yy"
-    { (yyval.en) = 0; }
+#line 1556 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
@@ -7375,26 +7170,19 @@
 
 /* Line 1806 of yacc.c  */
-#line 1538 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].en); }
-    break;
-
-  case 393:
-
-/* Line 1806 of yacc.c  */
-#line 1543 "parser.yy"
+#line 1561 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
+  case 394:
+
+/* Line 1806 of yacc.c  */
+#line 1570 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
+    break;
+
   case 395:
 
 /* Line 1806 of yacc.c  */
-#line 1552 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
-    break;
-
-  case 396:
-
-/* Line 1806 of yacc.c  */
-#line 1554 "parser.yy"
+#line 1572 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7403,9 +7191,16 @@
     break;
 
+  case 396:
+
+/* Line 1806 of yacc.c  */
+#line 1577 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+    break;
+
   case 397:
 
 /* Line 1806 of yacc.c  */
-#line 1559 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+#line 1579 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     break;
 
@@ -7413,6 +7208,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1561 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
+#line 1584 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
 
@@ -7420,6 +7215,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1566 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
+#line 1586 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
@@ -7427,6 +7222,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1568 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
+#line 1591 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -7434,6 +7229,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1573 "parser.yy"
-    { (yyval.en) = 0; }
+#line 1593 "parser.yy"
+    { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
@@ -7441,90 +7236,90 @@
 
 /* Line 1806 of yacc.c  */
-#line 1575 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en); }
-    break;
-
-  case 403:
-
-/* Line 1806 of yacc.c  */
-#line 1582 "parser.yy"
+#line 1600 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
+  case 406:
+
+/* Line 1806 of yacc.c  */
+#line 1608 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
   case 407:
 
 /* Line 1806 of yacc.c  */
-#line 1590 "parser.yy"
+#line 1610 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 408:
+
+/* Line 1806 of yacc.c  */
+#line 1612 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 410:
+
+/* Line 1806 of yacc.c  */
+#line 1620 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 408:
-
-/* Line 1806 of yacc.c  */
-#line 1592 "parser.yy"
+  case 411:
+
+/* Line 1806 of yacc.c  */
+#line 1622 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 412:
+
+/* Line 1806 of yacc.c  */
+#line 1624 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
+    break;
+
+  case 414:
+
+/* Line 1806 of yacc.c  */
+#line 1630 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 415:
+
+/* Line 1806 of yacc.c  */
+#line 1635 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 418:
+
+/* Line 1806 of yacc.c  */
+#line 1642 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 409:
-
-/* Line 1806 of yacc.c  */
-#line 1594 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 411:
-
-/* Line 1806 of yacc.c  */
-#line 1602 "parser.yy"
+  case 421:
+
+/* Line 1806 of yacc.c  */
+#line 1649 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 412:
-
-/* Line 1806 of yacc.c  */
-#line 1604 "parser.yy"
+  case 422:
+
+/* Line 1806 of yacc.c  */
+#line 1651 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 413:
-
-/* Line 1806 of yacc.c  */
-#line 1606 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
-    break;
-
-  case 415:
-
-/* Line 1806 of yacc.c  */
-#line 1612 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 416:
-
-/* Line 1806 of yacc.c  */
-#line 1617 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 419:
-
-/* Line 1806 of yacc.c  */
-#line 1624 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 422:
-
-/* Line 1806 of yacc.c  */
-#line 1631 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 423:
-
-/* Line 1806 of yacc.c  */
-#line 1633 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+  case 424:
+
+/* Line 1806 of yacc.c  */
+#line 1660 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
@@ -7532,5 +7327,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1642 "parser.yy"
+#line 1663 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7539,26 +7334,19 @@
 
 /* Line 1806 of yacc.c  */
-#line 1645 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 427:
-
-/* Line 1806 of yacc.c  */
-#line 1647 "parser.yy"
+#line 1665 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
 
-  case 432:
-
-/* Line 1806 of yacc.c  */
-#line 1657 "parser.yy"
+  case 431:
+
+/* Line 1806 of yacc.c  */
+#line 1675 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 434:
-
-/* Line 1806 of yacc.c  */
-#line 1663 "parser.yy"
+  case 433:
+
+/* Line 1806 of yacc.c  */
+#line 1681 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7567,8 +7355,8 @@
     break;
 
-  case 435:
-
-/* Line 1806 of yacc.c  */
-#line 1668 "parser.yy"
+  case 434:
+
+/* Line 1806 of yacc.c  */
+#line 1686 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7577,29 +7365,36 @@
     break;
 
+  case 436:
+
+/* Line 1806 of yacc.c  */
+#line 1695 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
   case 437:
 
 /* Line 1806 of yacc.c  */
-#line 1677 "parser.yy"
+#line 1704 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
+    break;
+
+  case 438:
+
+/* Line 1806 of yacc.c  */
+#line 1706 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
+    break;
+
+  case 450:
+
+/* Line 1806 of yacc.c  */
+#line 1731 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 438:
-
-/* Line 1806 of yacc.c  */
-#line 1686 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 439:
-
-/* Line 1806 of yacc.c  */
-#line 1688 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
-    break;
-
-  case 451:
-
-/* Line 1806 of yacc.c  */
-#line 1713 "parser.yy"
+  case 454:
+
+/* Line 1806 of yacc.c  */
+#line 1739 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7608,6 +7403,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1721 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+#line 1744 "parser.yy"
+    { (yyval.in) = 0; }
     break;
 
@@ -7615,41 +7410,41 @@
 
 /* Line 1806 of yacc.c  */
-#line 1726 "parser.yy"
+#line 1746 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in); }
+    break;
+
+  case 457:
+
+/* Line 1806 of yacc.c  */
+#line 1748 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
+    break;
+
+  case 458:
+
+/* Line 1806 of yacc.c  */
+#line 1752 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
+    break;
+
+  case 459:
+
+/* Line 1806 of yacc.c  */
+#line 1753 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
+    break;
+
+  case 460:
+
+/* Line 1806 of yacc.c  */
+#line 1758 "parser.yy"
     { (yyval.in) = 0; }
     break;
 
-  case 457:
-
-/* Line 1806 of yacc.c  */
-#line 1728 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in); }
-    break;
-
-  case 458:
-
-/* Line 1806 of yacc.c  */
-#line 1730 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
-    break;
-
-  case 459:
-
-/* Line 1806 of yacc.c  */
-#line 1734 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
-    break;
-
-  case 460:
-
-/* Line 1806 of yacc.c  */
-#line 1735 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
-    break;
-
-  case 461:
-
-/* Line 1806 of yacc.c  */
-#line 1740 "parser.yy"
-    { (yyval.in) = 0; }
+  case 462:
+
+/* Line 1806 of yacc.c  */
+#line 1760 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
 
@@ -7657,6 +7452,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1742 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
+#line 1761 "parser.yy"
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     break;
 
@@ -7664,27 +7459,27 @@
 
 /* Line 1806 of yacc.c  */
-#line 1743 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
-    break;
-
-  case 465:
-
-/* Line 1806 of yacc.c  */
-#line 1745 "parser.yy"
+#line 1763 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
 
-  case 467:
-
-/* Line 1806 of yacc.c  */
-#line 1761 "parser.yy"
+  case 466:
+
+/* Line 1806 of yacc.c  */
+#line 1779 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     break;
 
+  case 468:
+
+/* Line 1806 of yacc.c  */
+#line 1785 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
+    break;
+
   case 469:
 
 /* Line 1806 of yacc.c  */
-#line 1767 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
+#line 1793 "parser.yy"
+    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -7692,6 +7487,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1775 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
+#line 1795 "parser.yy"
+    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
     break;
 
@@ -7699,6 +7494,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1777 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
+#line 1798 "parser.yy"
+    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
 
@@ -7706,5 +7501,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1780 "parser.yy"
+#line 1800 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
@@ -7713,6 +7508,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1782 "parser.yy"
-    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
+#line 1802 "parser.yy"
+    { (yyval.en) = new DesignatorNode( new CompositeExprNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ), true ); }
     break;
 
@@ -7720,62 +7515,62 @@
 
 /* Line 1806 of yacc.c  */
-#line 1784 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new CompositeExprNode2( build_opr2( OperatorNode::Range, (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ), true ); }
-    break;
-
-  case 475:
-
-/* Line 1806 of yacc.c  */
-#line 1786 "parser.yy"
+#line 1804 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
     break;
 
+  case 476:
+
+/* Line 1806 of yacc.c  */
+#line 1828 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
   case 477:
 
 /* Line 1806 of yacc.c  */
-#line 1810 "parser.yy"
+#line 1830 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 478:
+
+/* Line 1806 of yacc.c  */
+#line 1832 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 480:
+
+/* Line 1806 of yacc.c  */
+#line 1838 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 478:
-
-/* Line 1806 of yacc.c  */
-#line 1812 "parser.yy"
+  case 481:
+
+/* Line 1806 of yacc.c  */
+#line 1840 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 479:
-
-/* Line 1806 of yacc.c  */
-#line 1814 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 481:
-
-/* Line 1806 of yacc.c  */
-#line 1820 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
   case 482:
 
 /* Line 1806 of yacc.c  */
-#line 1822 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 483:
-
-/* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
+#line 1845 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
+  case 484:
+
+/* Line 1806 of yacc.c  */
+#line 1851 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
+    break;
+
   case 485:
 
 /* Line 1806 of yacc.c  */
-#line 1833 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
+#line 1856 "parser.yy"
+    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
 
@@ -7783,20 +7578,20 @@
 
 /* Line 1806 of yacc.c  */
-#line 1838 "parser.yy"
-    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
-    break;
-
-  case 487:
-
-/* Line 1806 of yacc.c  */
-#line 1840 "parser.yy"
+#line 1858 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
 
+  case 488:
+
+/* Line 1806 of yacc.c  */
+#line 1864 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Type; }
+    break;
+
   case 489:
 
 /* Line 1806 of yacc.c  */
-#line 1846 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Type; }
+#line 1866 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
 
@@ -7804,6 +7599,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1848 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Ftype; }
+#line 1868 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
 
@@ -7811,6 +7606,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1850 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Dtype; }
+#line 1873 "parser.yy"
+    { (yyval.decl) = 0; }
     break;
 
@@ -7818,6 +7613,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1855 "parser.yy"
-    { (yyval.decl) = 0; }
+#line 1875 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7825,12 +7620,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1857 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 494:
-
-/* Line 1806 of yacc.c  */
-#line 1862 "parser.yy"
+#line 1880 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7839,9 +7627,16 @@
     break;
 
+  case 494:
+
+/* Line 1806 of yacc.c  */
+#line 1885 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
+    break;
+
   case 495:
 
 /* Line 1806 of yacc.c  */
-#line 1867 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
+#line 1887 "parser.yy"
+    { (yyval.decl) = 0; }
     break;
 
@@ -7849,20 +7644,20 @@
 
 /* Line 1806 of yacc.c  */
-#line 1869 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 497:
-
-/* Line 1806 of yacc.c  */
-#line 1874 "parser.yy"
+#line 1892 "parser.yy"
     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
+  case 498:
+
+/* Line 1806 of yacc.c  */
+#line 1895 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
+    break;
+
   case 499:
 
 /* Line 1806 of yacc.c  */
-#line 1877 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
+#line 1897 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
 
@@ -7870,6 +7665,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1879 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
+#line 1902 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7877,6 +7672,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1884 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
+#line 1904 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
 
@@ -7884,6 +7679,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1886 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
+#line 1906 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
@@ -7891,6 +7686,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1888 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
+#line 1911 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -7898,6 +7693,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1893 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
+#line 1913 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -7905,12 +7700,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1895 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 506:
-
-/* Line 1806 of yacc.c  */
-#line 1900 "parser.yy"
+#line 1918 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7919,8 +7707,8 @@
     break;
 
-  case 507:
-
-/* Line 1806 of yacc.c  */
-#line 1905 "parser.yy"
+  case 506:
+
+/* Line 1806 of yacc.c  */
+#line 1923 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7929,8 +7717,8 @@
     break;
 
-  case 508:
-
-/* Line 1806 of yacc.c  */
-#line 1913 "parser.yy"
+  case 507:
+
+/* Line 1806 of yacc.c  */
+#line 1931 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7939,8 +7727,8 @@
     break;
 
-  case 509:
-
-/* Line 1806 of yacc.c  */
-#line 1918 "parser.yy"
+  case 508:
+
+/* Line 1806 of yacc.c  */
+#line 1936 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7949,8 +7737,8 @@
     break;
 
-  case 510:
-
-/* Line 1806 of yacc.c  */
-#line 1923 "parser.yy"
+  case 509:
+
+/* Line 1806 of yacc.c  */
+#line 1941 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7960,15 +7748,15 @@
     break;
 
-  case 512:
-
-/* Line 1806 of yacc.c  */
-#line 1933 "parser.yy"
+  case 511:
+
+/* Line 1806 of yacc.c  */
+#line 1951 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 515:
-
-/* Line 1806 of yacc.c  */
-#line 1943 "parser.yy"
+  case 514:
+
+/* Line 1806 of yacc.c  */
+#line 1961 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7977,8 +7765,8 @@
     break;
 
-  case 516:
-
-/* Line 1806 of yacc.c  */
-#line 1948 "parser.yy"
+  case 515:
+
+/* Line 1806 of yacc.c  */
+#line 1966 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7987,8 +7775,8 @@
     break;
 
-  case 517:
-
-/* Line 1806 of yacc.c  */
-#line 1953 "parser.yy"
+  case 516:
+
+/* Line 1806 of yacc.c  */
+#line 1971 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7997,8 +7785,8 @@
     break;
 
-  case 518:
-
-/* Line 1806 of yacc.c  */
-#line 1961 "parser.yy"
+  case 517:
+
+/* Line 1806 of yacc.c  */
+#line 1979 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -8007,8 +7795,8 @@
     break;
 
-  case 519:
-
-/* Line 1806 of yacc.c  */
-#line 1966 "parser.yy"
+  case 518:
+
+/* Line 1806 of yacc.c  */
+#line 1984 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -8017,15 +7805,15 @@
     break;
 
+  case 519:
+
+/* Line 1806 of yacc.c  */
+#line 1994 "parser.yy"
+    {}
+    break;
+
   case 520:
 
 /* Line 1806 of yacc.c  */
-#line 1976 "parser.yy"
-    {}
-    break;
-
-  case 521:
-
-/* Line 1806 of yacc.c  */
-#line 1978 "parser.yy"
+#line 1996 "parser.yy"
     {
 			if ( theTree ) {
@@ -8037,29 +7825,29 @@
     break;
 
+  case 522:
+
+/* Line 1806 of yacc.c  */
+#line 2008 "parser.yy"
+    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
+    break;
+
   case 523:
 
 /* Line 1806 of yacc.c  */
-#line 1990 "parser.yy"
-    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
-    break;
-
-  case 524:
-
-/* Line 1806 of yacc.c  */
-#line 1995 "parser.yy"
+#line 2013 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
+  case 527:
+
+/* Line 1806 of yacc.c  */
+#line 2021 "parser.yy"
+    {}
+    break;
+
   case 528:
 
 /* Line 1806 of yacc.c  */
-#line 2003 "parser.yy"
-    {}
-    break;
-
-  case 529:
-
-/* Line 1806 of yacc.c  */
-#line 2005 "parser.yy"
+#line 2023 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -8068,8 +7856,8 @@
     break;
 
-  case 530:
-
-/* Line 1806 of yacc.c  */
-#line 2010 "parser.yy"
+  case 529:
+
+/* Line 1806 of yacc.c  */
+#line 2028 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -8079,8 +7867,8 @@
     break;
 
-  case 531:
-
-/* Line 1806 of yacc.c  */
-#line 2016 "parser.yy"
+  case 530:
+
+/* Line 1806 of yacc.c  */
+#line 2034 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -8090,8 +7878,8 @@
     break;
 
-  case 533:
-
-/* Line 1806 of yacc.c  */
-#line 2031 "parser.yy"
+  case 532:
+
+/* Line 1806 of yacc.c  */
+#line 2049 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8101,8 +7889,8 @@
     break;
 
-  case 534:
-
-/* Line 1806 of yacc.c  */
-#line 2037 "parser.yy"
+  case 533:
+
+/* Line 1806 of yacc.c  */
+#line 2055 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8112,8 +7900,8 @@
     break;
 
-  case 535:
-
-/* Line 1806 of yacc.c  */
-#line 2046 "parser.yy"
+  case 534:
+
+/* Line 1806 of yacc.c  */
+#line 2064 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8123,8 +7911,8 @@
     break;
 
-  case 536:
-
-/* Line 1806 of yacc.c  */
-#line 2052 "parser.yy"
+  case 535:
+
+/* Line 1806 of yacc.c  */
+#line 2070 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8134,8 +7922,8 @@
     break;
 
-  case 537:
-
-/* Line 1806 of yacc.c  */
-#line 2058 "parser.yy"
+  case 536:
+
+/* Line 1806 of yacc.c  */
+#line 2076 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8145,8 +7933,8 @@
     break;
 
-  case 538:
-
-/* Line 1806 of yacc.c  */
-#line 2064 "parser.yy"
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2082 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8156,8 +7944,8 @@
     break;
 
-  case 539:
-
-/* Line 1806 of yacc.c  */
-#line 2070 "parser.yy"
+  case 538:
+
+/* Line 1806 of yacc.c  */
+#line 2088 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8167,8 +7955,8 @@
     break;
 
-  case 540:
-
-/* Line 1806 of yacc.c  */
-#line 2078 "parser.yy"
+  case 539:
+
+/* Line 1806 of yacc.c  */
+#line 2096 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8178,8 +7966,8 @@
     break;
 
-  case 541:
-
-/* Line 1806 of yacc.c  */
-#line 2084 "parser.yy"
+  case 540:
+
+/* Line 1806 of yacc.c  */
+#line 2102 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8189,8 +7977,8 @@
     break;
 
-  case 542:
-
-/* Line 1806 of yacc.c  */
-#line 2092 "parser.yy"
+  case 541:
+
+/* Line 1806 of yacc.c  */
+#line 2110 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8200,8 +7988,8 @@
     break;
 
-  case 543:
-
-/* Line 1806 of yacc.c  */
-#line 2098 "parser.yy"
+  case 542:
+
+/* Line 1806 of yacc.c  */
+#line 2116 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8211,36 +7999,43 @@
     break;
 
-  case 547:
-
-/* Line 1806 of yacc.c  */
-#line 2113 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Range, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 550:
-
-/* Line 1806 of yacc.c  */
-#line 2123 "parser.yy"
+  case 546:
+
+/* Line 1806 of yacc.c  */
+#line 2131 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 549:
+
+/* Line 1806 of yacc.c  */
+#line 2141 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
+  case 552:
+
+/* Line 1806 of yacc.c  */
+#line 2148 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
   case 553:
 
 /* Line 1806 of yacc.c  */
-#line 2130 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 554:
-
-/* Line 1806 of yacc.c  */
-#line 2136 "parser.yy"
+#line 2154 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
+  case 559:
+
+/* Line 1806 of yacc.c  */
+#line 2169 "parser.yy"
+    {}
+    break;
+
   case 560:
 
 /* Line 1806 of yacc.c  */
-#line 2151 "parser.yy"
+#line 2170 "parser.yy"
     {}
     break;
@@ -8249,5 +8044,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2152 "parser.yy"
+#line 2171 "parser.yy"
     {}
     break;
@@ -8256,5 +8051,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2153 "parser.yy"
+#line 2172 "parser.yy"
     {}
     break;
@@ -8263,19 +8058,19 @@
 
 /* Line 1806 of yacc.c  */
-#line 2154 "parser.yy"
-    {}
-    break;
-
-  case 564:
-
-/* Line 1806 of yacc.c  */
-#line 2189 "parser.yy"
+#line 2207 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
+  case 565:
+
+/* Line 1806 of yacc.c  */
+#line 2210 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 566:
 
 /* Line 1806 of yacc.c  */
-#line 2192 "parser.yy"
+#line 2212 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8284,12 +8079,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2194 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 568:
-
-/* Line 1806 of yacc.c  */
-#line 2199 "parser.yy"
+#line 2217 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8298,9 +8086,16 @@
     break;
 
+  case 568:
+
+/* Line 1806 of yacc.c  */
+#line 2222 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
   case 569:
 
 /* Line 1806 of yacc.c  */
-#line 2204 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+#line 2227 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
@@ -8308,58 +8103,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2209 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+#line 2229 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
   case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2211 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2213 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2218 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2220 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 575:
-
-/* Line 1806 of yacc.c  */
-#line 2222 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 576:
-
-/* Line 1806 of yacc.c  */
-#line 2224 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 577:
-
-/* Line 1806 of yacc.c  */
-#line 2229 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 578:
 
 /* Line 1806 of yacc.c  */
@@ -8368,16 +8114,65 @@
     break;
 
-  case 579:
+  case 572:
+
+/* Line 1806 of yacc.c  */
+#line 2236 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 573:
+
+/* Line 1806 of yacc.c  */
+#line 2238 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 574:
 
 /* Line 1806 of yacc.c  */
 #line 2240 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 575:
+
+/* Line 1806 of yacc.c  */
+#line 2242 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 576:
+
+/* Line 1806 of yacc.c  */
+#line 2247 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 577:
+
+/* Line 1806 of yacc.c  */
+#line 2249 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 578:
+
+/* Line 1806 of yacc.c  */
+#line 2258 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2261 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 581:
 
 /* Line 1806 of yacc.c  */
-#line 2243 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+#line 2266 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
@@ -8385,58 +8180,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2248 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+#line 2268 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
   case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2250 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2252 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2257 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 586:
-
-/* Line 1806 of yacc.c  */
-#line 2259 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 587:
-
-/* Line 1806 of yacc.c  */
-#line 2261 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 588:
-
-/* Line 1806 of yacc.c  */
-#line 2266 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 589:
-
-/* Line 1806 of yacc.c  */
-#line 2268 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 590:
 
 /* Line 1806 of yacc.c  */
@@ -8445,61 +8191,61 @@
     break;
 
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2275 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2277 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 586:
+
+/* Line 1806 of yacc.c  */
+#line 2279 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 587:
+
+/* Line 1806 of yacc.c  */
+#line 2284 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 588:
+
+/* Line 1806 of yacc.c  */
+#line 2286 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 589:
+
+/* Line 1806 of yacc.c  */
+#line 2288 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2303 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
+    break;
+
   case 594:
 
 /* Line 1806 of yacc.c  */
-#line 2285 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
+#line 2305 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
 
   case 595:
-
-/* Line 1806 of yacc.c  */
-#line 2287 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
-    break;
-
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2289 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2294 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2296 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 599:
-
-/* Line 1806 of yacc.c  */
-#line 2298 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2303 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2305 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 602:
 
 /* Line 1806 of yacc.c  */
@@ -8508,218 +8254,260 @@
     break;
 
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2322 "parser.yy"
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2312 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2314 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2316 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 599:
+
+/* Line 1806 of yacc.c  */
+#line 2321 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 600:
+
+/* Line 1806 of yacc.c  */
+#line 2323 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 601:
+
+/* Line 1806 of yacc.c  */
+#line 2325 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 602:
+
+/* Line 1806 of yacc.c  */
+#line 2340 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2343 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 605:
 
 /* Line 1806 of yacc.c  */
-#line 2325 "parser.yy"
+#line 2345 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2327 "parser.yy"
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2351 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2356 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2358 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2360 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2365 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2367 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2369 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2371 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 615:
+
+/* Line 1806 of yacc.c  */
+#line 2376 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 616:
+
+/* Line 1806 of yacc.c  */
+#line 2378 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 617:
+
+/* Line 1806 of yacc.c  */
+#line 2380 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 618:
+
+/* Line 1806 of yacc.c  */
+#line 2390 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2333 "parser.yy"
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2393 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2395 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2400 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2402 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2404 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2338 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2340 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2342 "parser.yy"
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2409 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2411 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2413 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2415 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2347 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2349 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2351 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 615:
-
-/* Line 1806 of yacc.c  */
-#line 2353 "parser.yy"
+  case 629:
+
+/* Line 1806 of yacc.c  */
+#line 2420 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 630:
+
+/* Line 1806 of yacc.c  */
+#line 2422 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 631:
+
+/* Line 1806 of yacc.c  */
+#line 2424 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 616:
-
-/* Line 1806 of yacc.c  */
-#line 2358 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 617:
-
-/* Line 1806 of yacc.c  */
-#line 2360 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2362 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 619:
-
-/* Line 1806 of yacc.c  */
-#line 2372 "parser.yy"
+  case 632:
+
+/* Line 1806 of yacc.c  */
+#line 2455 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2375 "parser.yy"
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2458 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2377 "parser.yy"
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2460 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2382 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2384 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2386 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2391 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2393 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2395 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 629:
-
-/* Line 1806 of yacc.c  */
-#line 2397 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 630:
-
-/* Line 1806 of yacc.c  */
-#line 2402 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 631:
-
-/* Line 1806 of yacc.c  */
-#line 2404 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 632:
-
-/* Line 1806 of yacc.c  */
-#line 2406 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 633:
-
-/* Line 1806 of yacc.c  */
-#line 2437 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 635:
-
-/* Line 1806 of yacc.c  */
-#line 2440 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
   case 636:
 
 /* Line 1806 of yacc.c  */
-#line 2442 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 637:
-
-/* Line 1806 of yacc.c  */
-#line 2447 "parser.yy"
+#line 2465 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8728,8 +8516,8 @@
     break;
 
-  case 638:
-
-/* Line 1806 of yacc.c  */
-#line 2452 "parser.yy"
+  case 637:
+
+/* Line 1806 of yacc.c  */
+#line 2470 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8738,646 +8526,653 @@
     break;
 
+  case 638:
+
+/* Line 1806 of yacc.c  */
+#line 2478 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
   case 639:
 
 /* Line 1806 of yacc.c  */
-#line 2460 "parser.yy"
+#line 2480 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 640:
+
+/* Line 1806 of yacc.c  */
+#line 2482 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 641:
+
+/* Line 1806 of yacc.c  */
+#line 2487 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 642:
+
+/* Line 1806 of yacc.c  */
+#line 2489 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 643:
+
+/* Line 1806 of yacc.c  */
+#line 2494 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 644:
+
+/* Line 1806 of yacc.c  */
+#line 2496 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2511 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2513 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 648:
+
+/* Line 1806 of yacc.c  */
+#line 2518 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 649:
+
+/* Line 1806 of yacc.c  */
+#line 2520 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2522 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 640:
-
-/* Line 1806 of yacc.c  */
-#line 2462 "parser.yy"
+  case 651:
+
+/* Line 1806 of yacc.c  */
+#line 2524 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 641:
-
-/* Line 1806 of yacc.c  */
-#line 2464 "parser.yy"
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2526 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 642:
-
-/* Line 1806 of yacc.c  */
-#line 2469 "parser.yy"
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2532 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2534 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2536 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2541 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
+    break;
+
+  case 658:
+
+/* Line 1806 of yacc.c  */
+#line 2543 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 659:
+
+/* Line 1806 of yacc.c  */
+#line 2545 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 660:
+
+/* Line 1806 of yacc.c  */
+#line 2551 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2553 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 663:
+
+/* Line 1806 of yacc.c  */
+#line 2559 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
+    break;
+
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2561 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
+    break;
+
+  case 665:
+
+/* Line 1806 of yacc.c  */
+#line 2563 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
+    break;
+
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2565 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
+    break;
+
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2580 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2582 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2587 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 671:
+
+/* Line 1806 of yacc.c  */
+#line 2589 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2591 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 673:
+
+/* Line 1806 of yacc.c  */
+#line 2593 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2595 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2601 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2603 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 678:
+
+/* Line 1806 of yacc.c  */
+#line 2605 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 679:
+
+/* Line 1806 of yacc.c  */
+#line 2610 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
+    break;
+
+  case 680:
+
+/* Line 1806 of yacc.c  */
+#line 2612 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2614 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2621 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 643:
-
-/* Line 1806 of yacc.c  */
-#line 2471 "parser.yy"
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2632 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2635 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 687:
+
+/* Line 1806 of yacc.c  */
+#line 2637 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
+    break;
+
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2640 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
+  case 689:
+
+/* Line 1806 of yacc.c  */
+#line 2642 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
+    break;
+
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2644 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
+    break;
+
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2658 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2660 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2665 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 695:
+
+/* Line 1806 of yacc.c  */
+#line 2667 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2669 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 697:
+
+/* Line 1806 of yacc.c  */
+#line 2671 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2673 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2679 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 644:
-
-/* Line 1806 of yacc.c  */
-#line 2476 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2478 "parser.yy"
+  case 701:
+
+/* Line 1806 of yacc.c  */
+#line 2681 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 702:
+
+/* Line 1806 of yacc.c  */
+#line 2683 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 703:
+
+/* Line 1806 of yacc.c  */
+#line 2688 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2493 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2495 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 649:
-
-/* Line 1806 of yacc.c  */
-#line 2500 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 650:
-
-/* Line 1806 of yacc.c  */
-#line 2502 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2504 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2506 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2508 "parser.yy"
+  case 704:
+
+/* Line 1806 of yacc.c  */
+#line 2690 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2514 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2516 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2518 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 658:
-
-/* Line 1806 of yacc.c  */
-#line 2523 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
-    break;
-
-  case 659:
-
-/* Line 1806 of yacc.c  */
-#line 2525 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2527 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2533 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2535 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 664:
-
-/* Line 1806 of yacc.c  */
-#line 2541 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
-    break;
-
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2543 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
-    break;
-
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2545 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
-    break;
-
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2547 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
-    break;
-
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2562 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2564 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 671:
-
-/* Line 1806 of yacc.c  */
-#line 2569 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 672:
-
-/* Line 1806 of yacc.c  */
-#line 2571 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2573 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2575 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2577 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2583 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 678:
-
-/* Line 1806 of yacc.c  */
-#line 2585 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 679:
-
-/* Line 1806 of yacc.c  */
-#line 2587 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 680:
-
-/* Line 1806 of yacc.c  */
-#line 2592 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
-    break;
-
-  case 681:
-
-/* Line 1806 of yacc.c  */
-#line 2594 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2596 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2603 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2614 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 687:
-
-/* Line 1806 of yacc.c  */
-#line 2617 "parser.yy"
+  case 707:
+
+/* Line 1806 of yacc.c  */
+#line 2700 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 710:
+
+/* Line 1806 of yacc.c  */
+#line 2710 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2712 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 712:
+
+/* Line 1806 of yacc.c  */
+#line 2714 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 713:
+
+/* Line 1806 of yacc.c  */
+#line 2716 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2718 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2720 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 716:
+
+/* Line 1806 of yacc.c  */
+#line 2727 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2729 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2731 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2733 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2735 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2737 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2739 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2741 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2743 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2745 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 726:
+
+/* Line 1806 of yacc.c  */
+#line 2750 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 688:
-
-/* Line 1806 of yacc.c  */
-#line 2619 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
-    break;
-
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2622 "parser.yy"
+  case 727:
+
+/* Line 1806 of yacc.c  */
+#line 2752 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2624 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
-    break;
-
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2626 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
-    break;
-
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2640 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2642 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 695:
-
-/* Line 1806 of yacc.c  */
-#line 2647 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 696:
-
-/* Line 1806 of yacc.c  */
-#line 2649 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2651 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2653 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2655 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 701:
-
-/* Line 1806 of yacc.c  */
-#line 2661 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 702:
-
-/* Line 1806 of yacc.c  */
-#line 2663 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 703:
-
-/* Line 1806 of yacc.c  */
-#line 2665 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 704:
-
-/* Line 1806 of yacc.c  */
-#line 2670 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 705:
-
-/* Line 1806 of yacc.c  */
-#line 2672 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 708:
-
-/* Line 1806 of yacc.c  */
-#line 2682 "parser.yy"
+  case 728:
+
+/* Line 1806 of yacc.c  */
+#line 2757 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
+    break;
+
+  case 729:
+
+/* Line 1806 of yacc.c  */
+#line 2759 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
+    break;
+
+  case 731:
+
+/* Line 1806 of yacc.c  */
+#line 2786 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 711:
-
-/* Line 1806 of yacc.c  */
-#line 2692 "parser.yy"
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2797 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 712:
-
-/* Line 1806 of yacc.c  */
-#line 2694 "parser.yy"
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2799 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 713:
-
-/* Line 1806 of yacc.c  */
-#line 2696 "parser.yy"
+  case 737:
+
+/* Line 1806 of yacc.c  */
+#line 2801 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 714:
-
-/* Line 1806 of yacc.c  */
-#line 2698 "parser.yy"
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2803 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2700 "parser.yy"
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2805 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2702 "parser.yy"
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2807 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2709 "parser.yy"
+  case 741:
+
+/* Line 1806 of yacc.c  */
+#line 2814 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 718:
-
-/* Line 1806 of yacc.c  */
-#line 2711 "parser.yy"
+  case 742:
+
+/* Line 1806 of yacc.c  */
+#line 2816 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 743:
+
+/* Line 1806 of yacc.c  */
+#line 2818 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2713 "parser.yy"
+  case 744:
+
+/* Line 1806 of yacc.c  */
+#line 2820 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 745:
+
+/* Line 1806 of yacc.c  */
+#line 2822 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2715 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2717 "parser.yy"
+  case 746:
+
+/* Line 1806 of yacc.c  */
+#line 2824 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2719 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2721 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2723 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2725 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 726:
-
-/* Line 1806 of yacc.c  */
-#line 2727 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 727:
-
-/* Line 1806 of yacc.c  */
-#line 2732 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 728:
-
-/* Line 1806 of yacc.c  */
-#line 2734 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 729:
-
-/* Line 1806 of yacc.c  */
-#line 2739 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
-    break;
-
-  case 730:
-
-/* Line 1806 of yacc.c  */
-#line 2741 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
-    break;
-
-  case 732:
-
-/* Line 1806 of yacc.c  */
-#line 2768 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 736:
-
-/* Line 1806 of yacc.c  */
-#line 2779 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 737:
-
-/* Line 1806 of yacc.c  */
-#line 2781 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 738:
-
-/* Line 1806 of yacc.c  */
-#line 2783 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 739:
-
-/* Line 1806 of yacc.c  */
-#line 2785 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2787 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2789 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 742:
-
-/* Line 1806 of yacc.c  */
-#line 2796 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 743:
-
-/* Line 1806 of yacc.c  */
-#line 2798 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 744:
-
-/* Line 1806 of yacc.c  */
-#line 2800 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 745:
-
-/* Line 1806 of yacc.c  */
-#line 2802 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 746:
-
-/* Line 1806 of yacc.c  */
-#line 2804 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
   case 747:
 
 /* Line 1806 of yacc.c  */
-#line 2806 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+#line 2829 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
@@ -9385,6 +9180,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2811 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
+#line 2834 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
 
@@ -9392,6 +9187,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2816 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
+#line 2836 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
@@ -9399,13 +9194,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 2818 "parser.yy"
+#line 2838 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
-  case 751:
-
-/* Line 1806 of yacc.c  */
-#line 2820 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
+  case 753:
+
+/* Line 1806 of yacc.c  */
+#line 2862 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -9413,12 +9208,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2844 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 755:
-
-/* Line 1806 of yacc.c  */
-#line 2846 "parser.yy"
+#line 2864 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9427,5 +9215,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9430 "Parser/parser.cc"
+#line 9218 "Parser/parser.cc"
       default: break;
     }
@@ -9658,5 +9446,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2849 "parser.yy"
+#line 2867 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/Parser/parser.h	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -262,5 +262,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 110 "parser.yy"
+#line 115 "parser.yy"
 
 	Token tok;
@@ -274,5 +274,5 @@
 	LabelNode *label;
 	InitializerNode *in;
-	OperatorNode::Type op;
+	OperKinds op;
 	bool flag;
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/Parser/parser.yy	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug  5 08:15:57 2016
-// Update Count     : 1721
+// Last Modified On : Sun Aug  7 09:37:48 2016
+// Update Count     : 1764
 //
 
@@ -60,4 +60,9 @@
 std::stack< LinkageSpec::Type > linkageStack;
 TypedefTable typedefTable;
+
+void appendStr( std::string &to, std::string *from ) {
+	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
+	to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) );
+} // appendStr
 %}
 
@@ -119,5 +124,5 @@
 	LabelNode *label;
 	InitializerNode *in;
-	OperatorNode::Type op;
+	OperKinds op;
 	bool flag;
 }
@@ -130,6 +135,5 @@
 %type<constant> constant
 %type<en> tuple							tuple_expression_list
-%type<op> ptrref_operator
-%type<en> unary_operator				assignment_operator
+%type<op> ptrref_operator				unary_operator				assignment_operator
 %type<en> primary_expression			postfix_expression			unary_expression
 %type<en> cast_expression				multiplicative_expression	additive_expression			shift_expression
@@ -305,7 +309,7 @@
 constant:
 		// ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant".
-INTEGERconstant									{ $$ = makeConstantInteger( *$1 ); }
-	| FLOATINGconstant							{ $$ = makeConstantFloat( *$1 ); }
-	| CHARACTERconstant							{ $$ = makeConstantChar( *$1 ); }
+INTEGERconstant									{ $$ = build_constantInteger( *$1 ); }
+	| FLOATINGconstant							{ $$ = build_constantFloat( *$1 ); }
+	| CHARACTERconstant							{ $$ = build_constantChar( *$1 ); }
 	;
 
@@ -332,6 +336,11 @@
 
 string_literal_list:									// juxtaposed strings are concatenated
-	STRINGliteral								{ $$ = makeConstantStr( *$1 ); }
-	| string_literal_list STRINGliteral			{ $$ = $1->appendstr( $2 ); }
+	STRINGliteral								{ $$ = build_constantStr( *$1 ); }
+	| string_literal_list STRINGliteral
+		{
+			appendStr( $1->get_expr()->get_constant()->get_value(), $2 );
+			delete $2;									// allocated by lexer
+			$$ = $1;
+		}
 	;
 
@@ -356,25 +365,26 @@
 		// little advantage to this feature and many disadvantages. It is possible to write x[(i,j)] in CFA, which is
 		// equivalent to the old x[i,j].
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Index, $1, $4 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Index, $1, $4 ) ); }
 	| postfix_expression '(' argument_expression_list ')'
-		{ $$ = new CompositeExprNode( $1, $3 ); }
+		{ $$ = new CompositeExprNode( build_func( $1, $3 ) ); }
         // ambiguity with .0 so space required after field-selection, e.g.
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| postfix_expression '.' no_attr_identifier
-		{ $$ = new CompositeExprNode2( build_fieldSel( $1, new VarRefNode( $3 ) ) ); }
+		{ $$ = new CompositeExprNode( build_fieldSel( $1, new VarRefNode( $3 ) ) ); }
 	| postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
 	| postfix_expression ARROW no_attr_identifier
-		{ $$ = new CompositeExprNode2( build_pfieldSel( $1, new VarRefNode( $3 ) ) ); }
+		{ $$ = new CompositeExprNode( build_pfieldSel( $1, new VarRefNode( $3 ) ) ); }
 	| postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
 	| postfix_expression ICR
-	  	{ $$ = new CompositeExprNode2( build_opr1( OperatorNode::IncrPost, $1 ) ); }
+	  	{ $$ = new CompositeExprNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); }
 	| postfix_expression DECR
-	  	{ $$ = new CompositeExprNode2( build_opr1( OperatorNode::DecrPost, $1 ) ); }
+	  	{ $$ = new CompositeExprNode( build_unary_ptr( OperKinds::DecrPost, $1 ) ); }
 	| '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
 		{ $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); }
 	| postfix_expression '{' argument_expression_list '}' // CFA
 		{
-			Token fn; fn.str = new std::string( "?{}" ); // location undefined
-			$$ = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( $1 )->set_link( $3 ) );
+			Token fn;
+			fn.str = new std::string( "?{}" ); // location undefined
+			$$ = new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( $1 )->set_link( $3 ) ) );
 		}
 	;
@@ -398,5 +408,5 @@
 		{ $$ = $7->set_argName( $3 ); }
 	| '[' push assignment_expression ',' tuple_expression_list pop ']' ':' assignment_expression
-		{ $$ = $9->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)$3->set_link( flattenCommas( $5 )))); }
+		{ $$ = $9->set_argName( new CompositeExprNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ) ); }
 	;
 
@@ -412,11 +422,11 @@
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| no_attr_identifier '.' field
-		{ $$ = new CompositeExprNode2( build_fieldSel( $3, new VarRefNode( $1 ) ) ); }
+		{ $$ = new CompositeExprNode( build_fieldSel( $3, new VarRefNode( $1 ) ) ); }
 	| no_attr_identifier '.' '[' push field_list pop ']'
-		{ $$ = new CompositeExprNode2( build_fieldSel( $5, new VarRefNode( $1 ) ) ); }
+		{ $$ = new CompositeExprNode( build_fieldSel( $5, new VarRefNode( $1 ) ) ); }
 	| no_attr_identifier ARROW field
-		{ $$ = new CompositeExprNode2( build_pfieldSel( $3, new VarRefNode( $1 ) ) ); }
+		{ $$ = new CompositeExprNode( build_pfieldSel( $3, new VarRefNode( $1 ) ) ); }
 	| no_attr_identifier ARROW '[' push field_list pop ']'
-		{ $$ = new CompositeExprNode2( build_pfieldSel( $5, new VarRefNode( $1 ) ) ); }
+		{ $$ = new CompositeExprNode( build_pfieldSel( $5, new VarRefNode( $1 ) ) ); }
 	;
 
@@ -435,44 +445,54 @@
 		//		{ * int X; } // CFA declaration of pointer to int
 	| ptrref_operator cast_expression					// CFA
-		{ $$ = $1 == OperatorNode::AddressOf ? (ExpressionNode*) new CompositeExprNode2( build_addressOf( $2 ) )
-											: (ExpressionNode*)new CompositeExprNode( new OperatorNode ( $1 ), $2 ); }
+		{
+			switch ( $1 ) {
+			  case OperKinds::AddressOf:
+				$$ = new CompositeExprNode( build_addressOf( $2 ) );
+				break;
+			  case OperKinds::PointTo:
+				$$ = new CompositeExprNode( build_unary_val( $1, $2 ) );
+				break;
+			  default:
+				assert( false );
+			}
+		}
 	| unary_operator cast_expression
-		{ $$ = new CompositeExprNode( $1, $2 ); }
+	  		{ $$ = new CompositeExprNode( build_unary_val( $1, $2 ) ); }
 	| ICR unary_expression
-	  	{ $$ = new CompositeExprNode2( build_opr1( OperatorNode::Incr, $2 ) ); }
+	  	{ $$ = new CompositeExprNode( build_unary_ptr( OperKinds::Incr, $2 ) ); }
 	| DECR unary_expression
-	  	{ $$ = new CompositeExprNode2( build_opr1( OperatorNode::Decr, $2 ) ); }
+	  	{ $$ = new CompositeExprNode( build_unary_ptr( OperKinds::Decr, $2 ) ); }
 	| SIZEOF unary_expression
-		{ $$ = new CompositeExprNode2( build_sizeOf( $2 ) ); }
+		{ $$ = new CompositeExprNode( build_sizeOf( $2 ) ); }
 	| SIZEOF '(' type_name_no_function ')'
-		{ $$ = new CompositeExprNode2( build_sizeOf( new TypeValueNode( $3 ) ) ); }
+		{ $$ = new CompositeExprNode( build_sizeOf( new TypeValueNode( $3 ) ) ); }
 	| OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
-		{ $$ = new CompositeExprNode2( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); }
+		{ $$ = new CompositeExprNode( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); }
 	| ATTR_IDENTIFIER
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ) ); }
+		{ $$ = new CompositeExprNode( build_attr( new VarRefNode( $1 ) ) ); }
 	| ATTR_IDENTIFIER '(' type_name ')'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), new TypeValueNode( $3 ) ); }
+		{ $$ = new CompositeExprNode( build_attr( new VarRefNode( $1 ), new TypeValueNode( $3 ) ) ); }
 	| ATTR_IDENTIFIER '(' argument_expression ')'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), $3 ); }
+		{ $$ = new CompositeExprNode( build_attr( new VarRefNode( $1 ), $3 ) ); }
 	| ALIGNOF unary_expression							// GCC, variable alignment
-		{ $$ = new CompositeExprNode2( build_alignOf( $2 ) ); }
+		{ $$ = new CompositeExprNode( build_alignOf( $2 ) ); }
 	| ALIGNOF '(' type_name_no_function ')'				// GCC, type alignment
-		{ $$ = new CompositeExprNode2( build_alignOf( new TypeValueNode( $3 ) ) ); }
+		{ $$ = new CompositeExprNode( build_alignOf( new TypeValueNode( $3 ) ) ); }
 //	| ANDAND IDENTIFIER									// GCC, address of label
-//		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true ) ); }
+//		{ $$ = new CompositeExprNode( new OperatorNode( OperKinds::LabelAddress ), new VarRefNode( $2, true ) ); }
 	;
 
 ptrref_operator:
-	'*'											{ $$ = OperatorNode::PointTo; }
-	| '&'										{ $$ = OperatorNode::AddressOf; }
+	'*'											{ $$ = OperKinds::PointTo; }
+	| '&'										{ $$ = OperKinds::AddressOf; }
 		// GCC, address of label must be handled by semantic check for ref,ref,label
-	| ANDAND									{ $$ = OperatorNode::And; }
+//	| ANDAND									{ $$ = OperKinds::And; }
 	;
 
 unary_operator:
-	'+'											{ $$ = new OperatorNode( OperatorNode::UnPlus ); }
-	| '-'										{ $$ = new OperatorNode( OperatorNode::UnMinus ); }
-	| '!'										{ $$ = new OperatorNode( OperatorNode::Neg ); }
-	| '~'										{ $$ = new OperatorNode( OperatorNode::BitNeg ); }
+	'+'											{ $$ = OperKinds::UnPlus; }
+	| '-'										{ $$ = OperKinds::UnMinus; }
+	| '!'										{ $$ = OperKinds::Neg; }
+	| '~'										{ $$ = OperKinds::BitNeg; }
 	;
 
@@ -480,7 +500,7 @@
 	unary_expression
 	| '(' type_name_no_function ')' cast_expression
-		{ $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); }
+		{ $$ = new CompositeExprNode( build_cast( new TypeValueNode( $2 ), $4 ) ); }
 	| '(' type_name_no_function ')' tuple
-		{ $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); }
+		{ $$ = new CompositeExprNode( build_cast( new TypeValueNode( $2 ), $4 ) ); }
 	;
 
@@ -488,9 +508,9 @@
 	cast_expression
 	| multiplicative_expression '*' cast_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Mul, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); }
 	| multiplicative_expression '/' cast_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Div, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Div, $1, $3 ) ); }
 	| multiplicative_expression '%' cast_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Mod, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); }
 	;
 
@@ -498,7 +518,7 @@
 	multiplicative_expression
 	| additive_expression '+' multiplicative_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Plus, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Plus, $1, $3 ) ); }
 	| additive_expression '-' multiplicative_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Minus, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Minus, $1, $3 ) ); }
 	;
 
@@ -506,7 +526,7 @@
 	additive_expression
 	| shift_expression LS additive_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::LShift, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::LShift, $1, $3 ) ); }
 	| shift_expression RS additive_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::RShift, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::RShift, $1, $3 ) ); }
 	;
 
@@ -514,11 +534,11 @@
 	shift_expression
 	| relational_expression '<' shift_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::LThan, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::LThan, $1, $3 ) ); }
 	| relational_expression '>' shift_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::GThan, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::GThan, $1, $3 ) ); }
 	| relational_expression LE shift_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::LEThan, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::LEThan, $1, $3 ) ); }
 	| relational_expression GE shift_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::GEThan, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::GEThan, $1, $3 ) ); }
 	;
 
@@ -526,7 +546,7 @@
 	relational_expression
 	| equality_expression EQ relational_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Eq, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Eq, $1, $3 ) ); }
 	| equality_expression NE relational_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Neq, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Neq, $1, $3 ) ); }
 	;
 
@@ -534,5 +554,5 @@
 	equality_expression
 	| AND_expression '&' equality_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::BitAnd, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::BitAnd, $1, $3 ) ); }
 	;
 
@@ -540,5 +560,5 @@
 	AND_expression
 	| exclusive_OR_expression '^' AND_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Xor, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Xor, $1, $3 ) ); }
 	;
 
@@ -546,5 +566,5 @@
 	exclusive_OR_expression
 	| inclusive_OR_expression '|' exclusive_OR_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::BitOr, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::BitOr, $1, $3 ) ); }
 	;
 
@@ -552,5 +572,5 @@
 	inclusive_OR_expression
 	| logical_AND_expression ANDAND inclusive_OR_expression
-		{ $$ = new CompositeExprNode2( build_and_or( $1, $3, true ) ); }
+		{ $$ = new CompositeExprNode( build_and_or( $1, $3, true ) ); }
 	;
 
@@ -558,5 +578,5 @@
 	logical_AND_expression
 	| logical_OR_expression OROR logical_AND_expression
-		{ $$ = new CompositeExprNode2( build_and_or( $1, $3, false ) ); }
+		{ $$ = new CompositeExprNode( build_and_or( $1, $3, false ) ); }
 	;
 
@@ -564,9 +584,10 @@
 	logical_OR_expression
 	| logical_OR_expression '?' comma_expression ':' conditional_expression
-		{ $$ = new CompositeExprNode2( build_cond( $1, $3, $5 ) ); }
+		{ $$ = new CompositeExprNode( build_cond( $1, $3, $5 ) ); }
+		// FIX ME: this hack computes $1 twice
 	| logical_OR_expression '?' /* empty */ ':' conditional_expression // GCC, omitted first operand
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), $1, $4 ); }
+		{ $$ = new CompositeExprNode( build_cond( $1, $1, $4 ) ); }
 	| logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression
-		{ $$ = new CompositeExprNode2( build_cond( $1, $3, $5 ) ); }
+		{ $$ = new CompositeExprNode( build_cond( $1, $3, $5 ) ); }
 	;
 
@@ -578,10 +599,8 @@
 		// CFA, assignment is separated from assignment_operator to ensure no assignment operations for tuples
 	conditional_expression
-	| unary_expression '=' assignment_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); }
 	| unary_expression assignment_operator assignment_expression
-		{ $$ = new CompositeExprNode( $2, $1, $3 ); }
+		{ $$ = new CompositeExprNode( build_binary_ptr( $2, $1, $3 ) ); }
 	| tuple assignment_opt								// CFA, tuple expression
-		{ $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $2 ); }
+		{ $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); }
 	;
 
@@ -592,15 +611,29 @@
 	;
 
+assignment_operator:
+	'='											{ $$ = OperKinds::Assign; }
+	| MULTassign								{ $$ = OperKinds::MulAssn; }
+	| DIVassign									{ $$ = OperKinds::DivAssn; }
+	| MODassign									{ $$ = OperKinds::ModAssn; }
+	| PLUSassign								{ $$ = OperKinds::PlusAssn; }
+	| MINUSassign								{ $$ = OperKinds::MinusAssn; }
+	| LSassign									{ $$ = OperKinds::LSAssn; }
+	| RSassign									{ $$ = OperKinds::RSAssn; }
+	| ANDassign									{ $$ = OperKinds::AndAssn; }
+	| ERassign									{ $$ = OperKinds::ERAssn; }
+	| ORassign									{ $$ = OperKinds::OrAssn; }
+	;
+
 tuple:													// CFA, tuple
 		// CFA, one assignment_expression is factored out of comma_expression to eliminate a shift/reduce conflict with
 		// comma_expression in new_identifier_parameter_array and new_abstract_array
 	'[' ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
+		{ $$ = new CompositeExprNode( build_tuple() ); }
 	| '[' push assignment_expression pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), $3 ); }
+		{ $$ = new CompositeExprNode( build_tuple( $3 ) ); }
 	| '[' push ',' tuple_expression_list pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( $4 ) ); }
+		{ $$ = new CompositeExprNode( build_tuple( (ExpressionNode *)(new NullExprNode)->set_link( $4 ) ) ); }
 	| '[' push assignment_expression ',' tuple_expression_list pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)$3->set_link( flattenCommas( $5 ) ) ); }
+		{ $$ = new CompositeExprNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ); }
 	;
 
@@ -611,22 +644,8 @@
 	;
 
-assignment_operator:
-	MULTassign									{ $$ = new OperatorNode( OperatorNode::MulAssn ); }
-	| DIVassign									{ $$ = new OperatorNode( OperatorNode::DivAssn ); }
-	| MODassign									{ $$ = new OperatorNode( OperatorNode::ModAssn ); }
-	| PLUSassign								{ $$ = new OperatorNode( OperatorNode::PlusAssn ); }
-	| MINUSassign								{ $$ = new OperatorNode( OperatorNode::MinusAssn ); }
-	| LSassign									{ $$ = new OperatorNode( OperatorNode::LSAssn ); }
-	| RSassign									{ $$ = new OperatorNode( OperatorNode::RSAssn ); }
-	| ANDassign									{ $$ = new OperatorNode( OperatorNode::AndAssn ); }
-	| ERassign									{ $$ = new OperatorNode( OperatorNode::ERAssn ); }
-	| ORassign									{ $$ = new OperatorNode( OperatorNode::OrAssn ); }
-	;
-
 comma_expression:
 	assignment_expression
-	| comma_expression ',' assignment_expression	// { $$ = (ExpressionNode *)$1->add_to_list( $3 ); }
-	//{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), $1, $3 ); }
-		{ $$ = new CompositeExprNode2( build_comma( $1, $3 ) ); }
+	| comma_expression ',' assignment_expression
+		{ $$ = new CompositeExprNode( build_comma( $1, $3 ) ); }
 	;
 
@@ -650,7 +669,7 @@
 	| '^' postfix_expression '{' argument_expression_list '}' ';' // CFA
 		{
-			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
-			$$ = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),
-				(ExpressionNode *)( $2 )->set_link( $4 ) ), 0 );
+			Token fn;
+			fn.str = new std::string( "^?{}" ); // location undefined
+			$$ = new StatementNode( StatementNode::Exp, new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ), 0 );
 		}
 	;
@@ -740,5 +759,5 @@
 	constant_expression							{ $$ = $1; }
 	| constant_expression ELLIPSIS constant_expression	// GCC, subrange
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Range, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_range( $1, $3 ) ); }
 	| subrange											// CFA, subrange
 	;
@@ -1781,5 +1800,5 @@
 		{ $$ = new DesignatorNode( $3, true ); }
 	| '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements
-		{ $$ = new DesignatorNode( new CompositeExprNode2( build_opr2( OperatorNode::Range, $3, $5 ) ), true ); }
+		{ $$ = new DesignatorNode( new CompositeExprNode( build_range( $3, $5 ) ), true ); }
 	| '.' '[' push field_list pop ']'					// CFA, tuple field selector
 		{ $$ = new DesignatorNode( $4 ); }
@@ -2110,5 +2129,5 @@
 subrange:
 	constant_expression '~' constant_expression			// CFA, integer subrange
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Range, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_range( $1, $3 ) ); }
 	;
 
Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/SymTab/Autogen.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -173,13 +173,7 @@
 	}
 
-	void makeStructMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, TypeSubstitution & genericSubs, bool isGeneric, bool forward = true ) {
-		if ( isGeneric ) {
-			// rewrite member type in terms of the type variables on this operator
-			field = field->clone();
-			genericSubs.apply( field );
-
-			if ( src ) {
-				genericSubs.apply( src );
-			}
+	void makeStructMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, TypeSubstitution & genericSubs, bool isDynamicLayout, bool forward = true ) {
+		if ( isDynamicLayout && src ) {
+			genericSubs.apply( src );
 		}
 
@@ -197,5 +191,5 @@
 		genImplicitCall( srcParam, dstselect, func->get_name(), back_inserter( func->get_statements()->get_kids() ), field, forward );
 
-		if ( isGeneric && returnVal ) {
+		if ( isDynamicLayout && returnVal ) {
 			UntypedExpr *derefRet = new UntypedExpr( new NameExpr( "*?" ) );
 			derefRet->get_args().push_back( new VariableExpr( returnVal ) );
@@ -206,5 +200,5 @@
 
 	template<typename Iterator>
-	void makeStructFunctionBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isGeneric, bool forward = true ) {
+	void makeStructFunctionBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isDynamicLayout, bool forward = true ) {
 		for ( ; member != end; ++member ) {
 			if ( DeclarationWithType *field = dynamic_cast< DeclarationWithType * >( *member ) ) { // otherwise some form of type declaration, e.g. Aggregate
@@ -242,5 +236,5 @@
 
 				Expression *srcselect = srcParam ? new MemberExpr( field, new VariableExpr( srcParam ) ) : NULL;
-				makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isGeneric, forward );
+				makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isDynamicLayout, forward );
 			} // if
 		} // for
@@ -250,5 +244,5 @@
 	/// void ?{}(A *, int) and void?{}(A *, int, int) for a struct A which has two int fields.
 	template<typename Iterator>
-	void makeStructFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isGeneric ) {
+	void makeStructFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isDynamicLayout ) {
 		FunctionType * ftype = func->get_functionType();
 		std::list<DeclarationWithType*> & params = ftype->get_parameters();
@@ -276,9 +270,9 @@
 					// matching parameter, initialize field with copy ctor
 					Expression *srcselect = new VariableExpr(*parameter);
-					makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isGeneric );
+					makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isDynamicLayout );
 					++parameter;
 				} else {
 					// no matching parameter, initialize field with default ctor
-					makeStructMemberOp( dstParam, NULL, field, func, genericSubs, isGeneric );
+					makeStructMemberOp( dstParam, NULL, field, func, genericSubs, isDynamicLayout );
 				}
 			}
@@ -290,10 +284,10 @@
 
 		// Make function polymorphic in same parameters as generic struct, if applicable
-		bool isGeneric = false;  // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for union)
+		bool isDynamicLayout = false;  // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for union)
 		std::list< TypeDecl* >& genericParams = aggregateDecl->get_parameters();
 		std::list< Expression* > structParams;  // List of matching parameters to put on types
 		TypeSubstitution genericSubs; // Substitutions to make to member types of struct
 		for ( std::list< TypeDecl* >::const_iterator param = genericParams.begin(); param != genericParams.end(); ++param ) {
-			isGeneric = true;
+			if ( (*param)->get_kind() == TypeDecl::Any ) isDynamicLayout = true;
 			TypeDecl *typeParam = cloneAndRename( *param, "_autoassign_" + aggregateDecl->get_name() + "_" + (*param)->get_name() );
 			assignType->get_forall().push_back( typeParam );
@@ -355,5 +349,5 @@
 			FunctionDecl * ctor = new FunctionDecl( "?{}", functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, memCtorType->clone(), new CompoundStmt( noLabels ), true, false );
 			ctor->fixUniqueId();
-			makeStructFieldCtorBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctor, genericSubs, isGeneric );
+			makeStructFieldCtorBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctor, genericSubs, isDynamicLayout );
 			memCtors.push_back( ctor );
 		}
@@ -361,11 +355,11 @@
 
 		// generate appropriate calls to member ctor, assignment
-		makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), assignDecl, genericSubs, isGeneric );
-		makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctorDecl, genericSubs, isGeneric );
-		makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), copyCtorDecl, genericSubs, isGeneric );
+		makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), assignDecl, genericSubs, isDynamicLayout );
+		makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctorDecl, genericSubs, isDynamicLayout );
+		makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), copyCtorDecl, genericSubs, isDynamicLayout );
 		// needs to do everything in reverse, so pass "forward" as false
-		makeStructFunctionBody( aggregateDecl->get_members().rbegin(), aggregateDecl->get_members().rend(), dtorDecl, genericSubs, isGeneric, false );
-
-		if ( ! isGeneric ) assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
+		makeStructFunctionBody( aggregateDecl->get_members().rbegin(), aggregateDecl->get_members().rend(), dtorDecl, genericSubs, isDynamicLayout, false );
+
+		if ( ! isDynamicLayout ) assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
 
 		declsToAdd.push_back( assignDecl );
@@ -380,9 +374,9 @@
 
 		// Make function polymorphic in same parameters as generic union, if applicable
-		bool isGeneric = false;  // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for struct)
+		bool isDynamicLayout = false; // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for struct)
 		std::list< TypeDecl* >& genericParams = aggregateDecl->get_parameters();
 		std::list< Expression* > unionParams;  // List of matching parameters to put on types
 		for ( std::list< TypeDecl* >::const_iterator param = genericParams.begin(); param != genericParams.end(); ++param ) {
-			isGeneric = true;
+			if ( (*param)->get_kind() == TypeDecl::Any ) isDynamicLayout = true;
 			TypeDecl *typeParam = cloneAndRename( *param, "_autoassign_" + aggregateDecl->get_name() + "_" + (*param)->get_name() );
 			assignType->get_forall().push_back( typeParam );
@@ -420,5 +414,5 @@
 
 		makeUnionFieldsAssignment( srcParam, dstParam, cloneWithParams( refType, unionParams ), back_inserter( assignDecl->get_statements()->get_kids() ) );
-		if ( isGeneric ) makeUnionFieldsAssignment( srcParam, returnVal, cloneWithParams( refType, unionParams ), back_inserter( assignDecl->get_statements()->get_kids() ) );
+		if ( isDynamicLayout ) makeUnionFieldsAssignment( srcParam, returnVal, cloneWithParams( refType, unionParams ), back_inserter( assignDecl->get_statements()->get_kids() ) );
 		else assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
 
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/SynTree/Expression.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug  3 17:06:51 2016
-// Update Count     : 45
+// Last Modified On : Fri Aug  5 14:23:56 2016
+// Update Count     : 49
 //
 
@@ -529,5 +529,5 @@
 }
 
-RangeExpr::RangeExpr( ConstantExpr *low, ConstantExpr *high ) : low( low ), high( high ) {}
+RangeExpr::RangeExpr( Expression *low, Expression *high ) : low( low ), high( high ) {}
 RangeExpr::RangeExpr( const RangeExpr &other ) : low( other.low->clone() ), high( other.high->clone() ) {}
 void RangeExpr::print( std::ostream &os, int indent ) const {
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/SynTree/Expression.h	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug  3 17:08:44 2016
-// Update Count     : 27
+// Last Modified On : Sat Aug  6 08:52:53 2016
+// Update Count     : 35
 //
 
@@ -28,5 +28,5 @@
 class Expression {
   public:
-	Expression(Expression *_aname = 0 );
+	Expression( Expression *_aname = nullptr );
 	Expression( const Expression &other );
 	virtual ~Expression();
@@ -70,6 +70,6 @@
 typedef std::map< UniqueId, ParamEntry > InferredParams;
 
-/// ApplicationExpr represents the application of a function to a set of parameters.  This is the
-/// result of running an UntypedExpr through the expression analyzer.
+/// ApplicationExpr represents the application of a function to a set of parameters.  This is the result of running an
+/// UntypedExpr through the expression analyzer.
 class ApplicationExpr : public Expression {
   public:
@@ -93,12 +93,12 @@
 };
 
-/// UntypedExpr represents the application of a function to a set of parameters, but where the
-/// particular overload for the function name has not yet been determined.  Most operators are
-/// converted into functional form automatically, to permit operator overloading.
+/// UntypedExpr represents the application of a function to a set of parameters, but where the particular overload for
+/// the function name has not yet been determined.  Most operators are converted into functional form automatically, to
+/// permit operator overloading.
 class UntypedExpr : public Expression {
   public:
-	UntypedExpr( Expression *function, Expression *_aname = 0 );
+	UntypedExpr( Expression *function, Expression *_aname = nullptr );
 	UntypedExpr( const UntypedExpr &other );
-	UntypedExpr( Expression *function, std::list<Expression *> &args, Expression *_aname = 0 );
+	UntypedExpr( Expression *function, std::list<Expression *> &args, Expression *_aname = nullptr );
 	virtual ~UntypedExpr();
 
@@ -124,5 +124,5 @@
 class NameExpr : public Expression {
   public:
-	NameExpr( std::string name, Expression *_aname = 0 );
+	NameExpr( std::string name, Expression *_aname = nullptr );
 	NameExpr( const NameExpr &other );
 	virtual ~NameExpr();
@@ -145,5 +145,5 @@
 class AddressExpr : public Expression {
   public:
-	AddressExpr( Expression *arg, Expression *_aname = 0 );
+	AddressExpr( Expression *arg, Expression *_aname = nullptr );
 	AddressExpr( const AddressExpr &other );
 	virtual ~AddressExpr();
@@ -181,6 +181,6 @@
 class CastExpr : public Expression {
   public:
-	CastExpr( Expression *arg, Expression *_aname = 0 );
-	CastExpr( Expression *arg, Type *toType, Expression *_aname = 0 );
+	CastExpr( Expression *arg, Expression *_aname = nullptr );
+	CastExpr( Expression *arg, Type *toType, Expression *_aname = nullptr );
 	CastExpr( const CastExpr &other );
 	virtual ~CastExpr();
@@ -200,5 +200,5 @@
 class UntypedMemberExpr : public Expression {
   public:
-	UntypedMemberExpr( std::string member, Expression *aggregate, Expression *_aname = 0 );
+	UntypedMemberExpr( std::string member, Expression *aggregate, Expression *_aname = nullptr );
 	UntypedMemberExpr( const UntypedMemberExpr &other );
 	virtual ~UntypedMemberExpr();
@@ -221,5 +221,5 @@
 class MemberExpr : public Expression {
   public:
-	MemberExpr( DeclarationWithType *member, Expression *aggregate, Expression *_aname = 0 );
+	MemberExpr( DeclarationWithType *member, Expression *aggregate, Expression *_aname = nullptr );
 	MemberExpr( const MemberExpr &other );
 	virtual ~MemberExpr();
@@ -242,5 +242,5 @@
 class VariableExpr : public Expression {
   public:
-	VariableExpr( DeclarationWithType *var, Expression *_aname = 0 );
+	VariableExpr( DeclarationWithType *var, Expression *_aname = nullptr );
 	VariableExpr( const VariableExpr &other );
 	virtual ~VariableExpr();
@@ -260,5 +260,5 @@
 class ConstantExpr : public Expression {
   public:
-	ConstantExpr( Constant constant, Expression *_aname = 0 );
+	ConstantExpr( Constant constant, Expression *_aname = nullptr );
 	ConstantExpr( const ConstantExpr &other );
 	virtual ~ConstantExpr();
@@ -278,7 +278,7 @@
 class SizeofExpr : public Expression {
   public:
-	SizeofExpr( Expression *expr, Expression *_aname = 0 );
+	SizeofExpr( Expression *expr, Expression *_aname = nullptr );
 	SizeofExpr( const SizeofExpr &other );
-	SizeofExpr( Type *type, Expression *_aname = 0 );
+	SizeofExpr( Type *type, Expression *_aname = nullptr );
 	virtual ~SizeofExpr();
 
@@ -303,7 +303,7 @@
 class AlignofExpr : public Expression {
   public:
-	AlignofExpr( Expression *expr, Expression *_aname = 0 );
+	AlignofExpr( Expression *expr, Expression *_aname = nullptr );
 	AlignofExpr( const AlignofExpr &other );
-	AlignofExpr( Type *type, Expression *_aname = 0 );
+	AlignofExpr( Type *type, Expression *_aname = nullptr );
 	virtual ~AlignofExpr();
 
@@ -328,5 +328,5 @@
 class UntypedOffsetofExpr : public Expression {
   public:
-	UntypedOffsetofExpr( Type *type, const std::string &member, Expression *_aname = 0 );
+	UntypedOffsetofExpr( Type *type, const std::string &member, Expression *_aname = nullptr );
 	UntypedOffsetofExpr( const UntypedOffsetofExpr &other );
 	virtual ~UntypedOffsetofExpr();
@@ -349,5 +349,5 @@
 class OffsetofExpr : public Expression {
   public:
-	OffsetofExpr( Type *type, DeclarationWithType *member, Expression *_aname = 0 );
+	OffsetofExpr( Type *type, DeclarationWithType *member, Expression *_aname = nullptr );
 	OffsetofExpr( const OffsetofExpr &other );
 	virtual ~OffsetofExpr();
@@ -390,7 +390,7 @@
 class AttrExpr : public Expression {
   public:
-	AttrExpr(Expression *attr, Expression *expr, Expression *_aname = 0 );
+	AttrExpr(Expression *attr, Expression *expr, Expression *_aname = nullptr );
 	AttrExpr( const AttrExpr &other );
-	AttrExpr( Expression *attr, Type *type, Expression *_aname = 0 );
+	AttrExpr( Expression *attr, Type *type, Expression *_aname = nullptr );
 	virtual ~AttrExpr();
 
@@ -418,5 +418,5 @@
 class LogicalExpr : public Expression {
   public:
-	LogicalExpr( Expression *arg1, Expression *arg2, bool andp = true, Expression *_aname = 0 );
+	LogicalExpr( Expression *arg1, Expression *arg2, bool andp = true, Expression *_aname = nullptr );
 	LogicalExpr( const LogicalExpr &other );
 	virtual ~LogicalExpr();
@@ -441,5 +441,5 @@
 class ConditionalExpr : public Expression {
   public:
-	ConditionalExpr( Expression *arg1, Expression *arg2, Expression *arg3, Expression *_aname = 0 );
+	ConditionalExpr( Expression *arg1, Expression *arg2, Expression *arg3, Expression *_aname = nullptr );
 	ConditionalExpr( const ConditionalExpr &other );
 	virtual ~ConditionalExpr();
@@ -465,5 +465,5 @@
 class CommaExpr : public Expression {
   public:
-	CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname = 0 );
+	CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname = nullptr );
 	CommaExpr( const CommaExpr &other );
 	virtual ~CommaExpr();
@@ -486,5 +486,5 @@
 class TupleExpr : public Expression {
   public:
-	TupleExpr( Expression *_aname = 0 );
+	TupleExpr( Expression *_aname = nullptr );
 	TupleExpr( const TupleExpr &other );
 	virtual ~TupleExpr();
@@ -504,6 +504,6 @@
 class SolvedTupleExpr : public Expression {
   public:
-	SolvedTupleExpr( Expression *_aname = 0 ) : Expression( _aname ) {}
-	SolvedTupleExpr( std::list<Expression *> &, Expression *_aname = 0 );
+	SolvedTupleExpr( Expression *_aname = nullptr ) : Expression( _aname ) {}
+	SolvedTupleExpr( std::list<Expression *> &, Expression *_aname = nullptr );
 	SolvedTupleExpr( const SolvedTupleExpr &other );
 	virtual ~SolvedTupleExpr() {}
@@ -598,5 +598,5 @@
 class UntypedValofExpr : public Expression {
   public:
-	UntypedValofExpr( Statement *_body, Expression *_aname = 0 ) : Expression( _aname ), body ( _body ) {}
+	UntypedValofExpr( Statement *_body, Expression *_aname = nullptr ) : Expression( _aname ), body ( _body ) {}
 	UntypedValofExpr( const UntypedValofExpr & other );
 	virtual ~UntypedValofExpr();
@@ -637,11 +637,11 @@
 class RangeExpr : public Expression {
   public:
-	RangeExpr( ConstantExpr *low, ConstantExpr *high );
+	RangeExpr( Expression *low, Expression *high );
 	RangeExpr( const RangeExpr &other );
 
-	ConstantExpr * get_low() const { return low.get(); }
-	ConstantExpr * get_high() const { return high.get(); }
-	RangeExpr * set_low( ConstantExpr *low ) { RangeExpr::low.reset( low ); return this; }
-	RangeExpr * set_high( ConstantExpr *high ) { RangeExpr::high.reset( high ); return this; }
+	Expression * get_low() const { return low; }
+	Expression * get_high() const { return high; }
+	RangeExpr * set_low( Expression *low ) { RangeExpr::low = low; return this; }
+	RangeExpr * set_high( Expression *high ) { RangeExpr::high = high; return this; }
 
 	virtual RangeExpr *clone() const { return new RangeExpr( *this ); }
@@ -650,5 +650,5 @@
 	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
-	std::unique_ptr<ConstantExpr> low, high;
+	Expression *low, *high;
 };
 
Index: src/driver/cfa.cc
===================================================================
--- src/driver/cfa.cc	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/driver/cfa.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -10,6 +10,6 @@
 // Created On       : Tue Aug 20 13:44:49 2002
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug  2 12:23:11 2016
-// Update Count     : 147
+// Last Modified On : Sat Aug  6 16:14:55 2016
+// Update Count     : 148
 //
 
@@ -87,5 +87,5 @@
 	bool cpp_flag = false;								// -E or -M flag, preprocessor only
 	bool std_flag = false;								// -std= flag
-	bool noincstd_flag = false;							// -no-include-std= flag
+	bool noincstd_flag = false;							// -no-include-stdhdr= flag
 	bool debugging __attribute(( unused )) = false;		// -g flag
 
@@ -145,6 +145,6 @@
 			} else if ( arg == "-nohelp" ) {
 				help = false;							// strip the nohelp flag
-			} else if ( arg == "-no-include-std" ) {
-				noincstd_flag = true;					// strip the no-include-std flag
+			} else if ( arg == "-no-include-stdhdr" ) {
+				noincstd_flag = true;					// strip the no-include-stdhdr flag
 			} else if ( arg == "-compiler" ) {
 				// use the user specified compiler
Index: src/libcfa/Makefile.am
===================================================================
--- src/libcfa/Makefile.am	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/libcfa/Makefile.am	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 08:54:01 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Tue Aug  2 12:17:23 2016
-## Update Count     : 196
+## Last Modified On : Sat Aug  6 16:15:15 2016
+## Update Count     : 197
 ###############################################################################
 
@@ -53,5 +53,5 @@
 	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
 
-CFLAGS = -quiet -no-include-std -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
+CFLAGS = -quiet -no-include-stdhdr -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
 CC = ${abs_top_srcdir}/src/driver/cfa
 
Index: src/libcfa/Makefile.in
===================================================================
--- src/libcfa/Makefile.in	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/libcfa/Makefile.in	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -136,5 +136,5 @@
 CFA_LIBDIR = @CFA_LIBDIR@
 CFA_PREFIX = @CFA_PREFIX@
-CFLAGS = -quiet -no-include-std -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
+CFLAGS = -quiet -no-include-stdhdr -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 085317866dccf3fec61249417727ecd2ff0407d5)
+++ src/main.cc	(revision 04273e9e7c52353f38bcd37e425ecf90e764d3e0)
@@ -10,6 +10,6 @@
 // Created On       : Fri May 15 23:12:02 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul  5 15:23:11 2016
-// Update Count     : 209
+// Last Modified On : Sat Aug  6 16:17:41 2016
+// Update Count     : 210
 //
 
@@ -28,4 +28,5 @@
 #include "GenPoly/Box.h"
 #include "GenPoly/CopyParams.h"
+#include "GenPoly/InstantiateGeneric.h"
 #include "CodeGen/Generate.h"
 #include "CodeGen/FixNames.h"
@@ -192,5 +193,5 @@
 			input = fopen( argv[ optind ], "r" );
 			if ( ! input ) {
-				std::cout << "Error: can't open " << argv[ optind ] << std::endl;
+				std::cout << "Error: cannot open " << argv[ optind ] << std::endl;
 				exit( EXIT_FAILURE );
 			} // if
@@ -218,5 +219,5 @@
 			FILE * builtins = fopen( libcfap | treep ? "builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
 			if ( builtins == NULL ) {
-				std::cerr << "Error: can't open builtins.cf" << std::endl;
+				std::cerr << "Error: cannot open builtins.cf" << std::endl;
 				exit( EXIT_FAILURE );
 			} // if
@@ -226,5 +227,5 @@
 			FILE * extras = fopen( libcfap | treep ? "extras.cf" : CFA_LIBDIR "/extras.cf", "r" );
 			if ( extras == NULL ) {
-				std::cerr << "Error: can't open extras.cf" << std::endl;
+				std::cerr << "Error: cannot open extras.cf" << std::endl;
 				exit( EXIT_FAILURE );
 			} // if
@@ -235,5 +236,5 @@
 				FILE * prelude = fopen( treep ? "prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" );
 				if ( prelude == NULL ) {
-					std::cerr << "Error: can't open prelude.cf" << std::endl;
+					std::cerr << "Error: cannot open prelude.cf" << std::endl;
 					exit( EXIT_FAILURE );
 				} // if
@@ -309,4 +310,6 @@
 		}
 
+		OPTPRINT("instantiateGenerics")
+		GenPoly::instantiateGeneric( translationUnit );
 		OPTPRINT( "copyParams" );
 		GenPoly::copyParams( translationUnit );
