Index: .gitignore
===================================================================
--- .gitignore	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ .gitignore	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -34,2 +34,7 @@
 # generated by bison and lex from cfa.yy and lex.ll, respectively
 src/Parser/parser.output
+
+# generated by xfig for user manual
+doc/user/Cdecl.tex
+doc/user/pointer1.tex
+doc/user/pointer2.tex
Index: doc/LaTeXmacros/common.tex
===================================================================
--- doc/LaTeXmacros/common.tex	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ doc/LaTeXmacros/common.tex	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -11,6 +11,6 @@
 %% Created On       : Sat Apr  9 10:06:17 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Tue Aug  2 17:02:02 2016
-%% Update Count     : 228
+%% Last Modified On : Sun Aug 14 08:27:29 2016
+%% Update Count     : 231
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -154,5 +154,5 @@
 }%
 \newcommand{\etal}{%
-	\@ifnextchar{.}{\abbrevFont{et al}}%
+	\@ifnextchar{.}{\abbrevFont{et~al}}%
 	        {\abbrevFont{et al}.\xspace}%
 }%
@@ -255,5 +255,5 @@
 literate={-}{\raisebox{-0.15ex}{\texttt{-}}}1 {^}{\raisebox{0.6ex}{$\scriptscriptstyle\land\,$}}1
 	{~}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}}1 {_}{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}1 {`}{\ttfamily\upshape\hspace*{-0.1ex}`}1
-	{<-}{$\leftarrow$}2 {=>}{$\Rightarrow$}2 {...}{$\dots$}2,
+	{<-}{$\leftarrow$}2 {=>}{$\Rightarrow$}2,
 }%
 
Index: doc/aaron_comp_II/comp_II.tex
===================================================================
--- doc/aaron_comp_II/comp_II.tex	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ doc/aaron_comp_II/comp_II.tex	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -91,5 +91,5 @@
 \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 new features make \CFA more powerful and expressive than C, but impose a compile-time cost, particularly in the expression resolver, which must evaluate the typing rules of a significantly 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.
@@ -104,5 +104,5 @@
 
 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. 
+\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.
@@ -120,10 +120,10 @@
 \end{lstlisting}
 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 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 and destructor. 
 Here, the runtime cost of polymorphism is spread over each polymorphic call, due to passing more arguments to polymorphic functions; preliminary experiments have shown this overhead to be similar to \CC virtual function calls. 
 Determining if packaging all polymorphic arguments to a function into a virtual function table would reduce the runtime overhead of polymorphic calls is an open research question. 
 
-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:
+Since bare polymorphic types do not provide a great range of available operations, \CFA provides a \emph{type assertion} mechanism to provide further information about a type:
 \begin{lstlisting}
 forall(otype T ®| { T twice(T); }®)
@@ -137,5 +137,5 @@
 \end{lstlisting}
 These type assertions may be either variable or function declarations that depend on a polymorphic type variable. 
-©four_times© can only be called with an argument for which there exists a function named ©twice© that can take that argument and return another value of the same type; a pointer to the appropriate ©twice© function is passed as an additional implicit parameter to the call to ©four_times©.
+©four_times© can only be called with an argument for which there exists a function named ©twice© that can take that argument and return another value of the same type; a pointer to the appropriate ©twice© function is passed as an additional implicit parameter to the call of ©four_times©.
 
 Monomorphic specializations of polymorphic functions can themselves be used to satisfy type assertions. 
@@ -148,5 +148,5 @@
 The compiler accomplishes this by creating a wrapper function calling ©twice // (2)© with ©S© bound to ©double©, then providing this wrapper function to ©four_times©\footnote{©twice // (2)© could also have had a type parameter named ©T©; \CFA specifies renaming of the type parameters, which would avoid the name conflict with the type variable ©T© of ©four_times©.}. 
 
-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. 
+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 \emph{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 is examined as a candidate for its own type assertion unboundedly repeatedly. 
 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 that cannot be resolved by CFA. 
@@ -170,11 +170,10 @@
 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; 
+    return abs(a) < abs(b) ? b : a; 
 }
 \end{lstlisting}
 
 Semantically, traits are simply a named lists of type assertions, but they may be used for many of the same purposes that interfaces in Java or abstract base classes in \CC are used for.
-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. 
+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 implementation of an interface in Go, as opposed to the nominal inheritance model of Java and \CC. 
 Nominal inheritance can be simulated with traits using marker variables or functions:
 \begin{lstlisting}
@@ -190,6 +189,6 @@
 \end{lstlisting}
 
-Traits, however, are significantly more powerful than nominal-inheritance interfaces; firstly, due to the scoping rules of the declarations which satisfy a trait's type assertions, a type may not satisfy a trait everywhere that the type is declared, as with ©char© and the ©nominal© trait above. 
-Secondly, traits may be used to declare a relationship between multiple types, a property which may be difficult or impossible to represent in nominal-inheritance type systems:
+Traits, however, are significantly more powerful than nominal-inheritance interfaces; firstly, due to the scoping rules of the declarations that satisfy a trait's type assertions, a type may not satisfy a trait everywhere that the type is declared, as with ©char© and the ©nominal© trait above. 
+Secondly, traits may be used to declare a relationship among multiple types, a property that may be difficult or impossible to represent in nominal-inheritance type systems:
 \begin{lstlisting}
 trait pointer_like(®otype Ptr, otype El®) {
@@ -202,5 +201,5 @@
 };
 
-typedef list* list_iterator;
+typedef list *list_iterator;
 
 lvalue int *?( list_iterator it ) {
@@ -209,14 +208,15 @@
 \end{lstlisting}
 
-In the example above, ©(list_iterator, int)© satisfies ©pointer_like© by the given function, and ©(list_iterator, list)© also satisfies ©pointer_like© by the built-in pointer dereference operator. 
+In the example above, ©(list_iterator, int)© satisfies ©pointer_like© by the user-defined dereference function, and ©(list_iterator, list)© also satisfies ©pointer_like© by the built-in dereference operator for pointers. 
+Given a declaration ©list_iterator it©, ©*it© can be either an ©int© or a ©list©, with the meaning disambiguated by context (\eg ©int x = *it;© interprets ©*it© as an ©int©, while ©(*it).value = 42;© interprets ©*it© as a ©list©).
 While a nominal-inheritance system with associated types could model one of those two relationships by making ©El© an associated type of ©Ptr© in the ©pointer_like© implementation, few such systems could model both relationships simultaneously.
 
-The flexibility of \CFA's implicit trait satisfaction mechanism provides programmers with a great deal of power, but also blocks some optimization approaches for expression resolution. 
-The ability of types to begin to or cease to satisfy traits when declarations go into or out of scope makes caching of trait satisfaction judgements difficult, and the ability of traits to take multiple type parameters could lead to a combinatorial explosion of work in any attempt to pre-compute trait satisfaction relationships. 
+The flexibility of \CFA's implicit trait-satisfaction mechanism provides programmers with a great deal of power, but also blocks some optimization approaches for expression resolution. 
+The ability of types to begin to or cease to satisfy traits when declarations go into or out of scope makes caching of trait satisfaction judgements difficult, and the ability of traits to take multiple type parameters can lead to a combinatorial explosion of work in any attempt to pre-compute trait satisfaction relationships. 
 On the other hand, the addition of a nominal inheritance mechanism to \CFA's type system or replacement of \CFA's trait satisfaction system with a more object-oriented inheritance model and investigation of possible expression resolution optimizations for such a system may be an interesting avenue of further research.
 
 \subsection{Name Overloading}
 In C, no more than one variable or function in the same scope may share the same name\footnote{Technically, C has multiple separated namespaces, one holding ©struct©, ©union©, and ©enum© tags, one holding labels, one holding typedef names, variable, function, and enumerator identifiers, and one for each ©struct© or ©union© type holding the field names.}, and variable or function declarations in inner scopes with the same name as a declaration in an outer scope hide the outer declaration. 
-This makes finding the proper declaration to match to a variable expression or function application a simple matter of symbol table lookup, which can be easily and efficiently implemented. 
+This restriction makes finding the proper declaration to match to a variable expression or function application a simple matter of symbol-table lookup, which can be easily and efficiently implemented. 
 \CFA, on the other hand, allows overloading of variable and function names, so long as the overloaded declarations do not have the same type, avoiding the multiplication of variable and function names for different types common in the C standard library, as in the following example:
 \begin{lstlisting}
@@ -229,9 +229,9 @@
 double max = DBL_MAX;  // (4)
 
-max(7, -max);   // uses (1) and (3), by matching int type of 7 
-max(max, 3.14); // uses (2) and (4), by matching double type of 3.14
+max(7, -max);   // uses (1) and (3), by matching int type of the constant 7 
+max(max, 3.14); // uses (2) and (4), by matching double type of the constant 3.14
 
 max(max, -max);  // ERROR: ambiguous
-int m = max(max, -max); // uses (1) and (3) twice, by return type
+int m = max(max, -max); // uses (1) once and (3) twice, by matching return type
 \end{lstlisting}
 
@@ -239,12 +239,12 @@
 
 \subsection{Implicit Conversions}
-In addition to the multiple interpretations of an expression produced by name overloading, \CFA also supports all of the implicit conversions present in C, producing further candidate interpretations for expressions. 
-C does not have a traditionally-defined inheritance hierarchy of types, but the C standard's rules for the ``usual arithmetic conversions'' define which of the built-in types are implicitly convertable to which other types, and the relative cost of any pair of such conversions from a single source type. 
-\CFA adds to the usual arithmetic conversions rules for determining the cost of binding a polymorphic type variable in a function call; such bindings are cheaper than any \emph{unsafe} (narrowing) conversion, \eg ©int© to ©char©, but more expensive than any \emph{safe} (widening) conversion, \eg ©int© to ©double©. 
-
-The expression resolution problem, then, is to find the unique minimal-cost interpretation of each expression in the program, where all identifiers must be matched to a declaration and implicit conversions or polymorphic bindings of the result of an expression may increase the cost of the expression. 
+In addition to the multiple interpretations of an expression produced by name overloading, \CFA must support all of the implicit conversions present in C for backward compatibility, producing further candidate interpretations for expressions. 
+C does not have a inheritance hierarchy of types, but the C standard's rules for the ``usual arithmetic conversions'' define which of the built-in types are implicitly convertable to which other types, and the relative cost of any pair of such conversions from a single source type. 
+\CFA adds to the usual arithmetic conversions rules defining the cost of binding a polymorphic type variable in a function call; such bindings are cheaper than any \emph{unsafe} (narrowing) conversion, \eg ©int© to ©char©, but more expensive than any \emph{safe} (widening) conversion, \eg ©int© to ©double©. 
+
+The expression resolution problem, then, is to find the unique minimal-cost interpretation of each expression in the program, where all identifiers must be matched to a declaration, and implicit conversions or polymorphic bindings of the result of an expression may increase the cost of the expression. 
 Note that which subexpression interpretation is minimal-cost may require contextual information to disambiguate. 
-For instance, in the example in the previous subsection, ©max(max, -max)© cannot be unambiguously resolved, but ©int m = max(max, -max);© has a single minimal-cost resolution. 
-©int m = (int)max((double)max, -(double)max)© is also be a valid interpretation, but is not minimal-cost due to the unsafe cast from the ©double© result of ©max© to ©int© (the two ©double© casts function as type ascriptions selecting ©double max© rather than casts from ©int max© to ©double©, and as such are zero-cost).
+For instance, in the example in the previous subsection, ©max(max, -max)© cannot be unambiguously resolved, but ©int m = max(max, -max)© has a single minimal-cost resolution. 
+While the interpretation ©int m = (int)max((double)max, -(double)max)© is also a valid interpretation, it is not minimal-cost due to the unsafe cast from the ©double© result of ©max© to ©int© (the two ©double© casts function as type ascriptions selecting ©double max© rather than casts from ©int max© to ©double©, and as such are zero-cost).
 
 \subsubsection{User-generated Implicit Conversions}
@@ -252,25 +252,26 @@
 Such a conversion system should be simple for programmers to utilize, and fit naturally with the existing design of implicit conversions in C; ideally it would also be sufficiently powerful to encode C's usual arithmetic conversions itself, so that \CFA only has one set of rules for conversions. 
 
-Ditchfield~\cite{Ditchfield:conversions} has laid out a framework for using polymorphic-conversion-constructor functions to create a directed acyclic graph (DAG) of conversions. 
+Ditchfield~\cite{Ditchfield:conversions} laid out a framework for using polymorphic-conversion-constructor functions to create a directed acyclic graph (DAG) of conversions. 
 A monomorphic variant of these functions can be used to mark a conversion arc in the DAG as only usable as the final step in a conversion. 
-With these two types of conversion arcs, separate DAGs can be created for the safe and the unsafe conversions, and conversion cost can be represented as path length through the DAG. 
+With these two types of conversion arcs, separate DAGs can be created for the safe and the unsafe conversions, and conversion cost can be represented the length of the shortest path through the DAG from one type to another. 
 \begin{figure}[h]
 \centering
 \includegraphics{conversion_dag}
-\caption{A portion of the implicit conversion DAG for built-in types.}
+\caption{A portion of the implicit conversion DAG for built-in types.}\label{fig:conv_dag}
 \end{figure}
-As can be seen in the example DAG above, there are either safe or unsafe paths between each of the arithmetic types listed; the ``final'' arcs are important both to avoid creating cycles in the signed-unsigned conversions, and to disambiguate potential diamond conversions (\eg, if the ©int© to ©unsigned int© conversion was not marked final there would be two length-two paths from ©int© to ©unsigned long©, and it would be impossible to choose which one; however, since the ©unsigned int© to ©unsigned long© arc can not be traversed after the final ©int© to ©unsigned int© arc, there is a single unambiguous conversion path from ©int© to ©unsigned long©).
+As can be seen in Figure~\ref{fig:conv_dag}, there are either safe or unsafe paths between each of the arithmetic types listed; the ``final'' arcs are important both to avoid creating cycles in the signed-unsigned conversions, and to disambiguate potential diamond conversions (\eg, if the ©int© to ©unsigned int© conversion was not marked final there would be two length-two paths from ©int© to ©unsigned long©, making it impossible to choose which one; however, since the ©unsigned int© to ©unsigned long© arc can not be traversed after the final ©int© to ©unsigned int© arc, there is a single unambiguous conversion path from ©int© to ©unsigned long©).
 
 Open research questions on this topic include:
 \begin{itemize}
 \item Can a conversion graph 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?
-\item Can such a graph representation can be usefully augmented to include user-defined types as well as built-in types?
-\item Can the graph can be efficiently represented and used in the expression resolver?
+\item Can such a graph representation be usefully augmented to include user-defined types as well as built-in types?
+\item Can the graph be efficiently represented and used in the expression resolver?
 \end{itemize}
 
 \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©. 
-This affects expression resolution because an ©otype© type variable ©T© implicitly adds four type assertions, one for each of these four functions, so assertion resolution is pervasive in \CFA polymorphic functions, even those without any explicit type assertions. 
+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©. 
+This feature affects expression resolution because an ©otype© type variable ©T© implicitly adds four type assertions, one for each of these four functions, so assertion resolution is pervasive in \CFA polymorphic functions, even those without any explicit type assertions. 
 The following example shows the implicitly-generated code in green:
 \begin{lstlisting}
@@ -280,20 +281,20 @@
 };
 
-¢void ?{}(kv *this) {
-    ?{}(&this->key);
-    ?{}(&this->value);
-}
-void ?{}(kv *this, kv that) {
-    ?{}(&this->key, that.key);
-    ?{}(&this->value, that.value);
-}
-kv ?=?(kv *this, kv that) {
-    ?=?(&this->key, that.key);
-    ?=?(&this->value, that.value);
+¢void ?{}(kv *this) {  // default constructor
+    ?{}(&(this->key));  // call recursively on members
+    ?{}(&(this->value));
+}
+void ?{}(kv *this, kv that) {  // copy constructor
+    ?{}(&(this->key), that.key);
+    ?{}(&(this->value), that.value);
+}
+kv ?=?(kv *this, kv that) {  // assignment operator
+    ?=?(&(this->key), that.key);
+    ?=?(&(this->value), that.value);
     return *this;
 }
-void ^?{}(kv *this) {
-    ^?{}(&this->key);
-    ^?{}(&this->value);
+void ^?{}(kv *this) {  // destructor
+    ^?{}(&(this->key));
+    ^?{}(&(this->value));
 }¢
 
@@ -335,9 +336,10 @@
 \begin{itemize} 
 \item Since there is an implicit conversion from ©void*© to any pointer type, the highlighted expression can be interpreted as either a ©void*©, matching ©f // (1)©, or a ©box(S)*© for some type ©S©, matching ©f // (2)©.
-\item To determine the cost of the ©box(S)© interpretation, a type must be found for ©S© which satisfies the ©otype© implicit type assertions (assignment operator, default and copy constructors, and destructor); one option is ©box(S2)© for some type ©S2©.
+\item To determine the cost of the ©box(S)© interpretation, a type must be found for ©S© that satisfies the ©otype© implicit type assertions (assignment operator, default and copy constructors, and destructor); one option is ©box(S2)© for some type ©S2©.
 \item The assignment operator, default and copy constructors, and destructor of ©box(T)© are also polymorphic functions, each of which require the type parameter ©T© to have an assignment operator, default and copy constructors, and destructor. When choosing an interpretation for ©S2©, one option is ©box(S3)©, for some type ©S3©.
 \item The previous step repeats until stopped, with four times as much work performed at each step.
 \end{itemize}
-This problem can occur in any resolution context where a polymorphic function that can satisfy its own type assertions is required for a possible interpretation of an expression with no constraints on its type, and is thus not limited to combinations of generic types with ©void*© conversions, though constructors for generic types often satisfy their own assertions and a polymorphic conversion such as the ©void*© conversion to a polymorphic variable can create an expression with no constraints on its type. 
+This problem can occur in any resolution context where a polymorphic function can satisfy its own type assertions is required for a possible interpretation of an expression with no constraints on its type, and is thus not limited to combinations of generic types with ©void*© conversions.
+However, constructors for generic types often satisfy their own assertions and a polymorphic conversion such as the ©void*© conversion to a polymorphic variable is a common way to create an expression with no constraints on its type. 
 As discussed above, the \CFA expression resolver must handle this possible infinite recursion somehow, and it occurs fairly naturally in code like the above that uses generic types. 
 
@@ -345,21 +347,28 @@
 \CFA adds \emph{tuple types} to C, a syntactic facility for referring to lists of values anonymously or with a single identifier. 
 An identifier may name a tuple, and a function may return one. 
-Particularly relevantly for resolution, a tuple may be implicitly \emph{destructured} into a list of values, as in the call to ©swap© below:
-\begin{lstlisting}
-[char, char] x = [ '!', '?' ];
-int x = 42;
-
-forall(otype T) [T, T] swap( T a, T b ) { return [b, a]; }
+Particularly relevantly for resolution, a tuple may be implicitly \emph{destructured} into a list of values, as in the call to ©swap©:
+\begin{lstlisting}
+[char, char] x = [ '!', '?' ];  // (1)
+int x = 42;  // (2)
+
+forall(otype T) [T, T] swap( T a, T b ) { return [b, a]; }  // (3)
 
 x = swap( x ); // destructure [char, char] x into two elements of parameter list
 // cannot use int x for parameter, not enough arguments to swap
-\end{lstlisting}
-Tuple destructuring means that the mapping from the position of a subexpression in the argument list to the position of a paramter in the function declaration is not straightforward, as some arguments may be expandable to different numbers of parameters, like ©x© above.
+
+void swap( int, char, char ); // (4)
+
+swap( x, x ); // resolved as (4) on (2) and (1)
+// (3) on (2) and (2) is close, but the polymorphic binding makes it not minimal-cost
+\end{lstlisting}
+Tuple destructuring means that the mapping from the position of a subexpression in the argument list to the position of a paramter in the function declaration is not straightforward, as some arguments may be expandable to different numbers of parameters, like ©x© above. 
+In the second example, the second ©x© argument can be resolved starting at the second or third parameter of ©swap©, depending which interpretation of ©x© was chosen for the first argument.
 
 \subsection{Reference Types}
 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. 
-These two conversions can chain, producing a qualifier-dropping conversion for references, for instance converting a reference to a ©const int© into a reference to a non-©const int© by copying the originally refered to value into a fresh temporary and taking a reference to this temporary, as below:
+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. 
+These two conversions can chain, producing a qualifier-dropping conversion for references, for instance converting a reference to a ©const int© into a reference to a non-©const int© by copying the originally refered to value into a fresh temporary and taking a reference to this temporary, as in:
 \begin{lstlisting} 
 const int magic = 42;
@@ -369,13 +378,13 @@
 print_inc( magic ); // legal; implicitly generated code in green below:
 
-¢int tmp = magic;¢ // copies to safely strip const-qualifier
+¢int tmp = magic;¢ // to safely strip const-qualifier
 ¢print_inc( tmp );¢ // tmp is incremented, magic is unchanged
 \end{lstlisting}
-These reference conversions may also chain with the other implicit type conversions. 
-The main implication of this for expression resolution is the multiplication of available implicit conversions, though in a restricted context that may be able to be treated efficiently as a special case.
+These reference conversions may also chain with the other implicit type-conversions. 
+The main implication of the reference conversions for expression resolution is the multiplication of available implicit conversions, though given the restricted context reference conversions may be able to be treated efficiently as a special case of implicit conversions.
 
 \subsection{Special Literal Types}
 Another proposal currently under consideration for the \CFA type-system is assigning special types to the literal values ©0© and ©1©. 
-Implicit conversions from these types 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. 
+Implicit conversions from these types 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 precisely. 
 This approach 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. 
 The main implication for expression resolution is that the frequently encountered expressions ©0© and ©1© may have a large number of valid interpretations.
@@ -386,6 +395,6 @@
 int somefn(char) = delete;
 \end{lstlisting}
-This feature is typically used in \CCeleven to make a type non-copyable by deleting its copy constructor and assignment operator, or forbidding some interpretations of a polymorphic function by specifically deleting the forbidden overloads. 
-To add a similar feature to \CFA would involve including the deleted function declarations in expression resolution along with the normal declarations, but producing a compiler error if the deleted function was the best resolution. 
+This feature is typically used in \CCeleven to make a type non-copyable by deleting its copy constructor and assignment operator\footnote{In previous versions of \CC a type could be made non-copyable by declaring a private copy constructor and assignment operator, but not defining either. This idiom is well-known, but depends on some rather subtle and \CC-specific rules about private members and implicitly-generated functions; the deleted-function form is both clearer and less verbose.}, or forbidding some interpretations of a polymorphic function by specifically deleting the forbidden overloads\footnote{Specific polymorphic function overloads can also be forbidden in previous \CC versions through use of template metaprogramming techniques, though this advanced usage is beyond the skills of many programmers. A similar effect can be produced on an ad-hoc basis at the appropriate call sites through use of casts to determine the function type. In both cases, the deleted-function form is clearer and more concise.}. 
+To add a similar feature to \CFA involves including the deleted function declarations in expression resolution along with the normal declarations, but producing a compiler error if the deleted function is the best resolution. 
 How conflicts should be handled between resolution of an expression to both a deleted and a non-deleted function is a small but open research question.
 
@@ -404,5 +413,5 @@
 %TODO: look up and lit review 
 The second area of investigation is minimizing dependencies between argument-parameter matches; the current CFA compiler attempts to match entire argument combinations against functions at once, potentially attempting to match the same argument against the same parameter multiple times. 
-Whether the feature set of \CFA admits an expression resolution algorithm where arguments can be matched to parameters independently of other arguments in the same function application is an area of open research; polymorphic type paramters produce enough of a cross-argument dependency that the problem is not trivial. 
+Whether the feature set of \CFA admits an expression resolution algorithm where arguments can be matched to parameters independently of other arguments in the same function application is an area of open research; polymorphic type paramters produce enough cross-argument dependencies that the problem is not trivial. 
 If cross-argument resolution dependencies cannot be completely eliminated, effective caching strategies to reduce duplicated work between equivalent argument-parameter matches in different combinations may mitigate the asymptotic defecits of the whole-combination matching approach. 
 The final area of investigation is heuristics and algorithmic approaches to reduce the number of argument interpretations considered in the common case; if argument-parameter matches cannot be made independent, even small reductions in $i$ should yield significant reductions in the $i^{p+1}$ resolver runtime factor. 
@@ -412,7 +421,7 @@
 
 \subsection{Argument-Parameter Matching}
-The first axis for consideration is argument-parameter matching direction --- whether the type matching for a candidate function to a set of candidate arguments is directed by the argument types or the parameter types. 
+The first axis for consideration is the argument-parameter matching direction --- whether the type matching for a candidate function to a set of candidate arguments is directed by the argument types or the parameter types. 
 For programming languages without implicit conversions, argument-parameter matching is essentially the entirety of the expression resolution problem, and is generally referred to as ``overload resolution'' in the literature.
-All expression resolution algorithms form a DAG of interpretations, some explicitly, some implicitly; in this DAG, arcs point from function-call interpretations to argument interpretations, as below:
+All expression-resolution algorithms form a DAG of interpretations, some explicitly, some implicitly; in this DAG, arcs point from function-call interpretations to argument interpretations, as in Figure~\ref{fig:res_dag}:
 \begin{figure}[h]
 \centering
@@ -433,5 +442,5 @@
 \end{figure}
 
-Note that some interpretations may be part of more than one super-interpretation, as with $p_i$ in the bottom row, while some valid subexpression interpretations, like $f_d$ in the middle row, are not used in any interpretation of their containing expression.
+Note that some interpretations may be part of more than one super-interpretation, as with the second $p_i$ in the bottom row, while some valid subexpression interpretations, like $f_d$ in the middle row, are not used in any interpretation of their superexpression.
 
 \subsubsection{Argument-directed (Bottom-up)}
@@ -451,5 +460,5 @@
 A reasonable hybrid approach might take a top-down approach when the expression to be matched has a fixed type, and a bottom-up approach in untyped contexts.
 This approach may involve switching from one type to another at different levels of the expression tree. 
-For instance:
+For instance, in:
 \begin{lstlisting}
 forall(otype T)
@@ -460,11 +469,12 @@
 int x = f( f( '!' ) );
 \end{lstlisting}
-The outer call to ©f© must have a return type that is (implicitly convertable to) ©int©, so a top-down approach is used to select \textit{(1)} as the proper interpretation of ©f©. \textit{(1)}'s parameter ©x©, however, is an unbound type variable, and can thus take a value of any complete type, providing no guidance for the choice of candidate for the inner call to ©f©. The leaf expression ©'!'©, however, determines a zero-cost interpretation of the inner ©f© as \textit{(2)}, providing a minimal-cost expression resolution where ©T© is bound to ©void*©.
-
-Deciding when to switch between bottom-up and top-down resolution to minimize wasted work in a hybrid algorithm is a necessarily heuristic process, and though finding good heuristics for which subexpressions to swich matching strategies on is an open question, one reasonable approach might be to set a threshold $t$ for the number of candidate functions, and to use top-down resolution for any subexpression with fewer than $t$ candidate functions, to minimize the number of unmatchable argument interpretations computed, but to use bottom-up resolution for any subexpression with at least $t$ candidate functions, to reduce duplication in argument interpretation computation between the different candidate functions. 
+the outer call to ©f© must have a return type that is (implicitly convertable to) ©int©, so a top-down approach is used to select \textit{(1)} as the proper interpretation of ©f©. \textit{(1)}'s parameter ©x©, however, is an unbound type variable, and can thus take a value of any complete type, providing no guidance for the choice of candidate for the inner call to ©f©. The leaf expression ©'!'©, however, determines a zero-cost interpretation of the inner ©f© as \textit{(2)}, providing a minimal-cost expression resolution where ©T© is bound to ©void*©.
+
+Deciding when to switch between bottom-up and top-down resolution to minimize wasted work in a hybrid algorithm is a necessarily heuristic process, and finding good heuristics for which subexpressions to swich matching strategies on is an open question.
+One reasonable approach might be to set a threshold $t$ for the number of candidate functions, and to use top-down resolution for any subexpression with fewer than $t$ candidate functions, to minimize the number of unmatchable argument interpretations computed, but to use bottom-up resolution for any subexpression with at least $t$ candidate functions, to reduce duplication in argument interpretation computation between the different candidate functions. 
 
 Ganzinger and Ripken~\cite{Ganzinger80} propose an approach (later refined by Pennello~\etal~\cite{Pennello80}) that uses a top-down filtering pass followed by a bottom-up filtering pass to reduce the number of candidate interpretations; they prove that for the Ada programming language a small number of such iterations is sufficient to converge to a solution for the expression resolution problem. 
 Persch~\etal~\cite{PW:overload} developed a similar two-pass approach where the bottom-up pass is followed by the top-down pass. 
-These algorithms differ from the hybrid approach under investigation in that they take multiple passes over the expression tree to yield a solution, and also in that they apply both filtering heuristics to all expression nodes; \CFA's polymorphic functions and implicit conversions make the approach of filtering out invalid types taken by all of these algorithms infeasible.
+These algorithms differ from the hybrid approach under investigation in that they take multiple passes over the expression tree to yield a solution, and that they also apply both filtering heuristics to all expression nodes; \CFA's polymorphic functions and implicit conversions make the approach of filtering out invalid types taken by all of these algorithms infeasible.
 
 \subsubsection{Common Subexpression Caching}
@@ -480,5 +490,5 @@
 \CC~\cite{ANSI98:C++} includes both name overloading and implicit conversions in its expression resolution specification, though unlike \CFA it does complete type-checking on a generated monomorphization of template functions, where \CFA simply checks a list of type constraints. 
 The upcoming Concepts standard~\cite{C++concepts} defines a system of type constraints similar in principle to \CFA's.
-Cormack and Wright~\cite{Cormack90} present an algorithm which integrates overload resolution with a polymorphic type inference approach very similar to \CFA's.
+Cormack and Wright~\cite{Cormack90} present an algorithm that integrates overload resolution with a polymorphic type inference approach very similar to \CFA's.
 However, their algorithm does not account for implicit conversions other than polymorphic type binding and their discussion of their overload resolution algorithm is not sufficiently detailed to classify it with the other argument-parameter matching approaches\footnote{Their overload resolution algorithm is possibly a variant of Ganzinger and Ripken~\cite{Ganzinger80} or Pennello~\etal~\cite{Pennello80}, modified to allow for polymorphic type binding.}.
 
@@ -486,18 +496,16 @@
 Bilson does account for implicit conversions in his algorithm, but it is unclear if the approach is optimal. 
 His algorithm integrates checking for valid implicit conversions into the argument-parameter-matching step, essentially trading more expensive matching for a smaller number of argument interpretations. 
-This approach may result in the same subexpression being checked for a type match with the same type multiple times, though again memoization may mitigate this cost, and this approach does not generate implicit conversions that are not useful to match the containing function. 
-Calculating implicit conversions on parameters pairs naturally with a top-down approach to expression resolution, though it can also be used in a bottom-up approach, as Bilson demonstrates.
+This approach may result in the same subexpression being checked for a type match with the same type multiple times, though again memoization may mitigate this cost; however, this approach does not generate implicit conversions that are not useful to match the containing function.
 
 \subsubsection{On Arguments}
 Another approach is to generate a set of possible implicit conversions for each set of interpretations of a given argument. 
 This approach has the benefit of detecting ambiguous interpretations of arguments at the level of the argument rather than its containing call, never finds more than one interpretation of the argument with a given type, and re-uses calculation of implicit conversions between function candidates. 
-On the other hand, this approach may unncessarily generate argument interpretations that never match any 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. 
-Calculating implicit conversions on arguments is a viable approach for bottom-up expression resolution, though it may be difficult to apply in a top-down approach due to the presence of a target type for the expression interpretation. 
+On the other hand, this approach may unnecessarily generate argument interpretations that never match any parameter, wasting work. 
+Furthermore, 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}
-All the algorithms discussed to this point 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 is the minimal-cost valid interpretation, any consideration of non-minimal-cost interpretations is in some sense wasted work.
-Under the assumption that that programmers 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 next higher-cost argument interpretations.
+All the algorithms discussed to this point 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 is the minimal-cost valid interpretation, any consideration of non-minimal-cost interpretations is wasted work.
+Under the assumption that programmers 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 next higher-cost argument interpretations.
 
 \subsubsection{Eager}
@@ -563,5 +571,5 @@
 This comparison closes Baker's open research question, as well as potentially improving Bilson's \CFA compiler.
 
-Rather than testing all of these algorithms in-place in the \CFA compiler, a resolver prototype is being developed which acts on a simplified input language encapsulating the essential details of the \CFA type-system\footnote{Note this simplified input language is not a usable programming language.}. 
+Rather than testing all of these algorithms in-place in the \CFA compiler, a resolver prototype is being developed that acts on a simplified input language encapsulating the essential details of the \CFA type-system\footnote{Note this simplified input language is not 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.
@@ -571,5 +579,5 @@
 As an example, there are currently multiple open proposals for how implicit conversions should interact with polymorphic type binding in \CFA, each with distinct levels of expressive power; if the resolver prototype is modified to support each proposal, the optimal algorithm for each proposal can be compared, providing an empirical demonstration of the trade-off between expressive power and compiler runtime. 
 
-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 programming languages such as \CFA with powerful static type-systems, specifically targeting the feature interaction between name overloading and implicit conversions. 
 This work is not limited in applicability to \CFA, but may also be useful for supporting efficient compilation of the upcoming Concepts standard~\cite{C++concepts} for \CC template constraints, for instance. 
 
Index: doc/user/user.tex
===================================================================
--- doc/user/user.tex	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ doc/user/user.tex	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -11,6 +11,6 @@
 %% Created On       : Wed Apr  6 14:53:29 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Tue Aug  2 17:39:02 2016
-%% Update Count     : 1286
+%% Last Modified On : Sun Aug 14 08:23:06 2016
+%% Update Count     : 1323
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -317,5 +317,5 @@
 
 \item
-\Indexc{-no-include-std}\index{compilation option!-no-include-std@©-no-include-std©}
+\Indexc{-no-include-stdhdr}\index{compilation option!-no-include-stdhdr@©-no-include-stdhdr©}
 Do not supply ©extern "C"© wrappers for \Celeven standard include files (see~\VRef{s:StandardHeaders}).
 \textbf{This option is \emph{not} the default.}
@@ -807,4 +807,30 @@
 
 
+\section{Backquote Identifiers}
+\label{s:BackquoteIdentifiers}
+
+\CFA accommodates keyword clashes by syntactic transformations using the \CFA backquote escape-mechanism:
+\begin{lstlisting}
+int `otype` = 3;				// make keyword an identifier
+double `choose` = 3.5;
+\end{lstlisting}
+Programs can be converted easily by enclosing keyword identifiers in backquotes, and the backquotes can be removed later when the identifier name is changed to an non-keyword name.
+Clashes in C header files (see~\VRef{s:StandardHeaders}) can be handled automatically using the preprocessor, ©#include_next© and ©-I filename©:
+\begin{lstlisting}
+// include file uses the CFA keyword "otype".
+#if ! defined( otype )			// nesting ?
+#define otype `otype`
+#define __CFA_BFD_H__
+#endif // ! otype
+
+#include_next <bfd.h>			// must have internal check for multiple expansion
+
+#if defined( otype ) && defined( __CFA_BFD_H__ )	// reset only if set
+#undef otype
+#undef __CFA_BFD_H__
+#endif // otype && __CFA_BFD_H__
+\end{lstlisting}
+
+
 \section{Type Operators}
 
@@ -1011,5 +1037,22 @@
 Alternatively, prototype definitions can be eliminated by using a two-pass compilation, and implicitly creating header files for exports.
 The former is easy to do, while the latter is more complex.
-Currently, \CFA does \emph{not} attempt to support named arguments.
+
+Furthermore, named arguments do not work well in a \CFA-style programming-languages because they potentially introduces a new criteria for type matching.
+For example, it is technically possible to disambiguate between these two overloaded definitions of ©f© based on named arguments at the call site:
+\begin{lstlisting}
+int f( int i, int j );
+int f( int x, double y );
+
+f( j : 3, i : 4 );				§\C{// 1st f}§
+f( x : 7, y : 8.1 );			§\C{// 2nd f}§
+f( 4, 5 ); 						§\C{// ambiguous call}§
+\end{lstlisting}
+However, named arguments compound routine resolution in conjunction with conversions:
+\begin{lstlisting}
+f( i : 3, 5.7 );				§\C{// ambiguous call ?}§
+\end{lstlisting}
+Depending on the cost associated with named arguments, this call could be resolvable or ambiguous.
+Adding named argument into the routine resolution algorithm does not seem worth the complexity.
+Therefore, \CFA does \emph{not} attempt to support named arguments.
 
 \item[Default Arguments]
@@ -1021,16 +1064,16 @@
 the allowable positional calls are:
 \begin{lstlisting}
-p();				§\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§
-p( 4 );				§\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§
-p( 4, 4 );			§\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§
-p( 4, 4, 4 );		§\C{// rewrite $\Rightarrow$ p( 4, 4, 4 )}§
+p();							§\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§
+p( 4 );							§\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§
+p( 4, 4 );						§\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§
+p( 4, 4, 4 );					§\C{// rewrite $\Rightarrow$ p( 4, 4, 4 )}§
 // empty arguments
-p(  , 4, 4 );		§\C{// rewrite $\Rightarrow$ p( 1, 4, 4 )}§
-p( 4,  , 4 );		§\C{// rewrite $\Rightarrow$ p( 4, 2, 4 )}§
-p( 4, 4,   );		§\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§
-p( 4,  ,   );		§\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§
-p(  , 4,   );		§\C{// rewrite $\Rightarrow$ p( 1, 4, 3 )}§
-p(  ,  , 4 );		§\C{// rewrite $\Rightarrow$ p( 1, 2, 4 )}§
-p(  ,  ,   );		§\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§
+p(  , 4, 4 );					§\C{// rewrite $\Rightarrow$ p( 1, 4, 4 )}§
+p( 4,  , 4 );					§\C{// rewrite $\Rightarrow$ p( 4, 2, 4 )}§
+p( 4, 4,   );					§\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§
+p( 4,  ,   );					§\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§
+p(  , 4,   );					§\C{// rewrite $\Rightarrow$ p( 1, 4, 3 )}§
+p(  ,  , 4 );					§\C{// rewrite $\Rightarrow$ p( 1, 2, 4 )}§
+p(  ,  ,   );					§\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§
 \end{lstlisting}
 Here the missing arguments are inserted from the default values in the parameter list.
@@ -1067,12 +1110,12 @@
 The conflict occurs because both named and ellipse arguments must appear after positional arguments, giving two possibilities:
 \begin{lstlisting}
-p( /* positional */, . . ., /* named */ );
-p( /* positional */, /* named */, . . . );
+p( /* positional */, ... , /* named */ );
+p( /* positional */, /* named */, ... );
 \end{lstlisting}
 While it is possible to implement both approaches, the first possibly is more complex than the second, \eg:
 \begin{lstlisting}
-p( int x, int y, int z, . . . );
-p( 1, 4, 5, 6, z : 3, y : 2 ); §\C{// assume p( /* positional */, . . ., /* named */ );}§
-p( 1, z : 3, y : 2, 4, 5, 6 ); §\C{// assume p( /* positional */, /* named */, . . . );}§
+p( int x, int y, int z, ... );
+p( 1, 4, 5, 6, z : 3, y : 2 ); §\C{// assume p( /* positional */, ... , /* named */ );}§
+p( 1, z : 3, y : 2, 4, 5, 6 ); §\C{// assume p( /* positional */, /* named */, ... );}§
 \end{lstlisting}
 In the first call, it is necessary for the programmer to conceptually rewrite the call, changing named arguments into positional, before knowing where the ellipse arguments begin.
@@ -1082,7 +1125,7 @@
 The problem is exacerbated with default arguments, \eg:
 \begin{lstlisting}
-void p( int x, int y = 2, int z = 3. . . );
-p( 1, 4, 5, 6, z : 3 );		§\C{// assume p( /* positional */, . . ., /* named */ );}§
-p( 1, z : 3, 4, 5, 6 );		§\C{// assume p( /* positional */, /* named */, . . . );}§
+void p( int x, int y = 2, int z = 3... );
+p( 1, 4, 5, 6, z : 3 );		§\C{// assume p( /* positional */, ... , /* named */ );}§
+p( 1, z : 3, 4, 5, 6 );		§\C{// assume p( /* positional */, /* named */, ... );}§
 \end{lstlisting}
 The first call is an error because arguments 4 and 5 are actually positional not ellipse arguments;
@@ -1129,6 +1172,7 @@
 \subsection{Type Nesting}
 
-\CFA allows \Index{type nesting}, and type qualification of the nested types (see \VRef[Figure]{f:TypeNestingQualification}), where as C hoists\index{type hoisting} (refactors) nested types into the enclosing scope and has no type qualification.
+\CFA allows \Index{type nesting}, and type qualification of the nested typres (see \VRef[Figure]{f:TypeNestingQualification}), where as C hoists\index{type hoisting} (refactors) nested types into the enclosing scope and has no type qualification.
 \begin{figure}
+\centering
 \begin{tabular}{@{}l@{\hspace{3em}}l|l@{}}
 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{C Type Nesting}}	& \multicolumn{1}{c}{\textbf{C Implicit Hoisting}}	& \multicolumn{1}{|c}{\textbf{\CFA}}	\\
@@ -1397,5 +1441,5 @@
 Mass assignment has the following form:
 \begin{lstlisting}
-[ §\emph{lvalue}§, ..., §\emph{lvalue}§ ] = §\emph{expr}§;
+[ §\emph{lvalue}§, ... , §\emph{lvalue}§ ] = §\emph{expr}§;
 \end{lstlisting}
 \index{lvalue}
@@ -1437,5 +1481,5 @@
 Multiple assignment has the following form:
 \begin{lstlisting}
-[ §\emph{lvalue}§, . . ., §\emph{lvalue}§ ] = [ §\emph{expr}§, . . ., §\emph{expr}§ ];
+[ §\emph{lvalue}§, ... , §\emph{lvalue}§ ] = [ §\emph{expr}§, ... , §\emph{expr}§ ];
 \end{lstlisting}
 \index{lvalue}
@@ -1873,7 +1917,7 @@
 \begin{lstlisting}
 switch ( i ) {
-  ®case 1, 3, 5®:
+  case ®1, 3, 5®:
 	...
-  ®case 2, 4, 6®:
+  case ®2, 4, 6®:
 	...
 }
@@ -1906,7 +1950,7 @@
 \begin{lstlisting}
 switch ( i ) {
-  ®case 1~5:®
+  case ®1~5:®
 	...
-  ®case 10~15:®
+  case ®10~15:®
 	...
 }
@@ -1915,7 +1959,7 @@
 \begin{lstlisting}
 switch ( i )
-  case 1 ... 5:
+  case ®1 ... 5®:
 	...
-  case 10 ... 15:
+  case ®10 ... 15®:
 	...
 }
@@ -4369,23 +4413,151 @@
 
 
+\section{Incompatible}
+
+The following incompatibles exist between \CFA and C, and are similar to Annex C for \CC~\cite{ANSI14:C++}.
+
+\begin{enumerate}
+\item
+\begin{description}
+\item[Change:] add new keywords \\
+New keywords are added to \CFA (see~\VRef{s:NewKeywords}).
+\item[Rationale:] keywords added to implement new semantics of \CFA.
+\item[Effect on original feature:] change to semantics of well-defined feature. \\
+Any ISO C programs using these keywords as identifiers are invalid \CFA programs.
+\item[Difficulty of converting:] keyword clashes are accommodated by syntactic transformations using the \CFA backquote escape-mechanism (see~\VRef{s:BackquoteIdentifiers}):
+\item[How widely used:] clashes among new \CFA keywords and existing identifiers are rare.
+\end{description}
+
+\item
+\begin{description}
+\item[Change:] type of character literal ©int© to ©char© to allow more intuitive overloading:
+\begin{lstlisting}
+int rtn( int i );
+int rtn( char c );
+rtn( 'x' );						§\C{// programmer expects 2nd rtn to be called}§
+\end{lstlisting}
+\item[Rationale:] it is more intuitive for the call to ©rtn© to match the second version of definition of ©rtn© rather than the first.
+In particular, output of ©char© variable now print a character rather than the decimal ASCII value of the character.
+\begin{lstlisting}
+sout | 'x' | " " | (int)'x' | endl;
+x 120
+\end{lstlisting}
+Having to cast ©'x'© to ©char© is non-intuitive.
+\item[Effect on original feature:] change to semantics of well-defined feature that depend on:
+\begin{lstlisting}
+sizeof( 'x' ) == sizeof( int )
+\end{lstlisting}
+no long work the same in \CFA programs.
+\item[Difficulty of converting:] simple
+\item[How widely used:] programs that depend upon ©sizeof( 'x' )© are rare and can be changed to ©sizeof(char)©.
+\end{description}
+
+\item
+\begin{description}
+\item[Change:] make string literals ©const©:
+\begin{lstlisting}
+char * p = "abc";				§\C{// valid in C, deprecated in \CFA}§
+char * q = expr ? "abc" : "de";	§\C{// valid in C, invalid in \CFA}§
+\end{lstlisting}
+The type of a string literal is changed from ©[] char© to ©const [] char©.
+Similarly, the type of a wide string literal is changed from ©[] wchar_t© to ©const [] wchar_t©.
+\item[Rationale:] This change is a safety issue:
+\begin{lstlisting}
+char * p = "abc";
+p[0] = 'w';						§\C{// segment fault or change constant literal}§
+\end{lstlisting}
+The same problem occurs when passing a string literal to a routine that changes its argument.
+\item[Effect on original feature:] change to semantics of well-defined feature.
+\item[Difficulty of converting:] simple syntactic transformation, because string literals can be converted to ©char *©.
+\item[How widely used:] programs that have a legitimate reason to treat string literals as pointers to potentially modifiable memory are rare.
+\end{description}
+
+\item
+\begin{description}
+\item[Change:] remove \newterm{tentative definitions}, which only occurs at file scope:
+\begin{lstlisting}
+int i;							§\C{// forward definition}§
+int *j = ®&i®;					§\C{// forward reference, valid in C, invalid in \CFA}§
+int i = 0;						§\C{// definition}§
+\end{lstlisting}
+is valid in C, and invalid in \CFA because duplicate overloaded object definitions at the same scope level are disallowed.
+This change makes it impossible to define mutually referential file-local static objects, if initializers are restricted to the syntactic forms of C. For example,
+\begin{lstlisting}
+struct X { int i; struct X *next; };
+static struct X a;				§\C{// forward definition}§
+static struct X b = { 0, ®&a® };	§\C{// forward reference, valid in C, invalid in \CFA}§
+static struct X a = { 1, &b };	§\C{// definition}§
+\end{lstlisting}
+\item[Rationale:] avoids having different initialization rules for builtin types and userdefined types.
+\item[Effect on original feature:] change to semantics of well-defined feature.
+\item[Difficulty of converting:] the initializer for one of a set of mutually-referential file-local static objects must invoke a routine call to achieve the initialization.
+\item[How widely used:] seldom
+\end{description}
+
+\item
+\begin{description}
+\item[Change:] have ©struct© introduce a scope for nested types:
+\begin{lstlisting}
+enum ®Colour® { R, G, B, Y, C, M };
+struct Person {
+	enum ®Colour® { R, G, B };	§\C{// nested type}§
+	struct Face {				§\C{// nested type}§
+		®Colour® Eyes, Hair;	§\C{// type defined outside (1 level)}§
+	};
+	ß.ß®Colour® shirt;			§\C{// type defined outside (top level)}§
+	®Colour® pants;				§\C{// type defined same level}§
+	Face looks[10];				§\C{// type defined same level}§
+};
+®Colour® c = R;					§\C{// type/enum defined same level}§
+Personß.ß®Colour® pc = Personß.ßR;	§\C{// type/enum defined inside}§
+Personß.ßFace pretty;			§\C{// type defined inside}§
+\end{lstlisting}
+In C, the name of the nested types belongs to the same scope as the name of the outermost enclosing structure, i.e., the nested types are hoisted to the scope of the outer-most type, which is not useful and confusing.
+\CFA is C \emph{incompatible} on this issue, and provides semantics similar to \Index*[C++]{\CC}.
+Nested types are not hoisted and can be referenced using the field selection operator ``©.©'', unlike the \CC scope-resolution operator ``©::©''.
+\item[Rationale:] ©struct© scope is crucial to \CFA as an information structuring and hiding mechanism.
+\item[Effect on original feature:] change to semantics of well-defined feature.
+\item[Difficulty of converting:] Semantic transformation.
+\item[How widely used:] C programs rarely have nest types because they are equivalent to the hoisted version.
+\end{description}
+
+\item
+\begin{description}
+\item[Change:] In C++, the name of a nested class is local to its enclosing class.
+\item[Rationale:] C++ classes have member functions which require that classes establish scopes.
+\item[Difficulty of converting:] Semantic transformation. To make the struct type name visible in the scope of the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing struct is defined. Example:
+\begin{lstlisting}
+struct Y;						§\C{// struct Y and struct X are at the same scope}§
+struct X {
+struct Y { /* ... */ } y;
+};
+\end{lstlisting}
+All the definitions of C struct types enclosed in other struct definitions and accessed outside the scope of the enclosing struct could be exported to the scope of the enclosing struct.
+Note: this is a consequence of the difference in scope rules, which is documented in 3.3.
+\item[How widely used:] Seldom.
+\end{description}
+
+\item
+\begin{description}
+\item[Change:] comma expression is disallowed as subscript
+\item[Rationale:] safety issue to prevent subscripting error for multidimensional arrays: ©x[i,j]© instead of ©x[i][j]©, and this syntactic form then taken by \CFA for new style arrays.
+\item[Effect on original feature:] change to semantics of well-defined feature.
+\item[Difficulty of converting:] semantic transformation of ©x[i,j]© to ©x[(i,j)]©
+\item[How widely used:] seldom.
+\end{description}
+\end{enumerate}
+
+
 \section{New Keywords}
 \label{s:NewKeywords}
 
 \begin{quote2}
-\begin{tabular}{ll}
-©catch©			& ©lvalue©		\\
-©catchResume©	&				\\
-©choose©		& ©otype©		\\
-				&				\\
-©disable©		& ©throw©		\\
-©dtype©			& ©throwResume©	\\
-				& ©trait©		\\
-©enable©		& ©try©			\\
-				&				\\
-©fallthrough©					\\
-©fallthru©						\\
-©finally©						\\
-©forall©						\\
-©ftype©							\\
+\begin{tabular}{lll}
+©catch©			& ©fallthrough©	& ©otype©		\\
+©catchResume©	& ©fallthru©	& ©throw©		\\
+©choose©		& ©finally©		& ©throwResume©	\\
+©disable©		& ©forall©		& ©trait©		\\
+©dtype©			& ©ftype©		& ©try©			\\
+©enable©		& ©lvalue©		&				\\
 \end{tabular}
 \end{quote2}
@@ -4395,5 +4567,5 @@
 \label{s:StandardHeaders}
 
-C prescribes the following standard header-files:
+C prescribes the following standard header-files~\cite[\S~7.1.2]{C11}:
 \begin{quote2}
 \begin{minipage}{\linewidth}
@@ -4412,166 +4584,7 @@
 \end{minipage}
 \end{quote2}
-For the prescribed head-files, \CFA implicit wraps their includes in an ©extern "C"©;
+For the prescribed head-files, \CFA implicitly wraps their includes in an ©extern "C"©;
 hence, names in these include files are not mangled\index{mangling!name} (see~\VRef{s:Interoperability}).
 All other C header files must be explicitly wrapped in ©extern "C"© to prevent name mangling.
-
-
-\section{Incompatible}
-
-The following incompatibles exist between \CFA and C, and are similar to Annex C for \CC~\cite{ANSI14:C++}.
-
-\begin{enumerate}
-\item
-\begin{description}
-\item[Change:] add new keywords (see~\VRef{s:NewKeywords}) \\
-New keywords are added to \CFA.
-\item[Rationale:] keywords added to implement new semantics of \CFA.
-\item[Effect on original feature:] change to semantics of well-defined feature. \\
-Any ISO C programs using these keywords as identifiers are invalid \CFA programs.
-\item[Difficulty of converting:] keyword clashes are accommodated by syntactic transformations using the \CFA backquote escape-mechanism:
-\begin{lstlisting}
-int `otype` = 3;				// make keyword an identifier
-double `choose` = 3.5;
-\end{lstlisting}
-Programs can be converted automatically by enclosing keyword identifiers in backquotes, and the backquotes can be remove later when the identifier name is changed.
-Clashes in C system libraries (include files) can be handled automatically using preprocessor, ©#include_next© and ©-Ifilename©:
-\begin{lstlisting}
-// include file uses the CFA keyword "otype".
-#if ! defined( otype )			// nesting ?
-#define otype `otype`
-#define __CFA_BFD_H__
-#endif // ! otype
-
-#include_next <bfd.h>			// must have internal check for multiple expansion
-
-#if defined( otype ) && defined( __CFA_BFD_H__ )	// reset only if set
-#undef otype
-#undef __CFA_BFD_H__
-#endif // otype && __CFA_BFD_H__
-\end{lstlisting}
-\item[How widely used:] clashes among new \CFA keywords and existing identifiers are rare.
-\end{description}
-
-\item
-\begin{description}
-\item[Change:] type of character literal ©int© to ©char© to allow more intuitive overloading:
-\begin{lstlisting}
-int rtn( int i );
-int rtn( char c );
-rtn( 'x' );						// programmer expects 2nd rtn to be called
-\end{lstlisting}
-\item[Rationale:] it is more intuitive for the call to ©rtn© to match the second version of definition of ©rtn© rather than the first.
-In particular, output of ©char© variable now print a character rather than the decimal ASCII value of the character.
-\begin{lstlisting}
-sout | 'x' | " " | (int)'x' | endl;
-x 120
-\end{lstlisting}
-Having to cast ©'x'© to ©char© is non-intuitive.
-\item[Effect on original feature:] change to semantics of well-defined feature that depend on:
-\begin{lstlisting}
-sizeof( 'x' ) == sizeof( int )
-\end{lstlisting}
-no long work the same in \CFA programs.
-\item[Difficulty of converting:] simple
-\item[How widely used:] programs that depend upon ©sizeof( 'x' )© are rare and can be changed to ©sizeof(char)©.
-\end{description}
-
-\item
-\begin{description}
-\item[Change:] make string literals ©const©:
-\begin{lstlisting}
-char * p = "abc";				// valid in C, deprecated in §\CFA§
-char * q = expr ? "abc" : "de";	// valid in C, invalid in §\CFA§
-\end{lstlisting}
-The type of a string literal is changed from ©[] char© to ©const [] char©.
-Similarly, the type of a wide string literal is changed from ©[] wchar_t© to ©const [] wchar_t©.
-\item[Rationale:] This change is a safety issue:
-\begin{lstlisting}
-char * p = "abc";
-p[0] = 'w';						// segment fault or change constant literal
-\end{lstlisting}
-The same problem occurs when passing a string literal to a routine that changes its argument.
-\item[Effect on original feature:] change to semantics of well-defined feature.
-\item[Difficulty of converting:] simple syntactic transformation, because string literals can be converted to ©char *©.
-\item[How widely used:] programs that have a legitimate reason to treat string literals as pointers to potentially modifiable memory are rare.
-\end{description}
-
-\item
-\begin{description}
-\item[Change:] remove \newterm{tentative definitions}, which only occurs at file scope:
-\begin{lstlisting}
-int i;							// forward definition
-int *j = ®&i®;					// forward reference, valid in C, invalid in §\CFA§
-int i = 0;						// definition
-\end{lstlisting}
-is valid in C, and invalid in \CFA because duplicate overloaded object definitions at the same scope level are disallowed.
-This change makes it impossible to define mutually referential file-local static objects, if initializers are restricted to the syntactic forms of C. For example,
-\begin{lstlisting}
-struct X { int i; struct X *next; };
-static struct X a;				// forward definition
-static struct X b = { 0, ®&a® };	// forward reference, valid in C, invalid in §\CFA§
-static struct X a = { 1, &b };	// definition
-\end{lstlisting}
-\item[Rationale:] avoids having different initialization rules for builtin types and userdefined types.
-\item[Effect on original feature:] change to semantics of well-defined feature.
-\item[Difficulty of converting:] the initializer for one of a set of mutually-referential file-local static objects must invoke a routine call to achieve the initialization.
-\item[How widely used:] seldom
-\end{description}
-
-\item
-\begin{description}
-\item[Change:] have ©struct© introduce a scope for nested types
-In C, the name of the nested types belongs to the same scope as the name of the outermost enclosing
-Example:
-\begin{lstlisting}
-enum ®Colour® { R, G, B, Y, C, M };
-struct Person {
-	enum ®Colour® { R, G, B };	// nested type
-	struct Face {				// nested type
-		®Colour® Eyes, Hair;		// type defined outside (1 level)
-	};
-	ß.ß®Colour® shirt;				// type defined outside (top level)
-	®Colour® pants;				// type defined same level
-	Face looks[10];				// type defined same level
-};
-®Colour® c = R;					// type/enum defined same level
-Personß.ß®Colour® pc = Personß.ßR;	// type/enum defined inside
-Personß.ßFace pretty;				// type defined inside
-\end{lstlisting}
-\item[Rationale:] ©struct© scope is crucial to \CFA as an information structuring and hiding mechanism.
-\item[Effect on original feature:] change to semantics of well-defined feature.
-\item[Difficulty of converting:] Semantic transformation.
-\item[How widely used:] C programs rarely have nest types because they are equivalent to the hoisted version.
-
-\CFA is C \emph{incompatible} on this issue, and provides semantics similar to \Index*[C++]{\CC}.
-Nested types are not hoisted and can be referenced using the field selection operator ``©.©'', unlike the \CC scope-resolution operator ``©::©''.
-Given that nested types in C are equivalent to not using them, \ie they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility.
-\end{description}
-
-\item
-\begin{description}
-\item[Change:] In C++, the name of a nested class is local to its enclosing class.
-\item[Rationale:] C++ classes have member functions which require that classes establish scopes.
-\item[Difficulty of converting:] Semantic transformation. To make the struct type name visible in the scope of the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing struct is defined. Example:
-\begin{lstlisting}
-struct Y; // struct Y and struct X are at the same scope
-struct X {
-struct Y { /* ... */ } y;
-};
-\end{lstlisting}
-All the definitions of C struct types enclosed in other struct definitions and accessed outside the scope of the enclosing struct could be exported to the scope of the enclosing struct.
-Note: this is a consequence of the difference in scope rules, which is documented in 3.3.
-\item[How widely used:] Seldom.
-\end{description}
-
-\item
-\begin{description}
-\item[Change:] comma expression is disallowed as subscript
-\item[Rationale:] safety issue to prevent subscripting error for multidimensional arrays: ©x[i,j]© instead of ©x[i][j]©, and this syntactic form then taken by \CFA for new style arrays.
-\item[Effect on original feature:] change to semantics of well-defined feature.
-\item[Difficulty of converting:] semantic transformation of ©x[i,j]© to ©x[(i,j)]©
-\item[How widely used:] seldom.
-\end{description}
-\end{enumerate}
 
 
@@ -4749,4 +4762,5 @@
 \subsection{malloc}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 forall( otype T ) T * malloc( void );§\indexc{malloc}§
@@ -4765,8 +4779,9 @@
 forall( otype T ) T * memset( T * ptr );				// remove when default value available
 \end{lstlisting}
-\ 
+
 
 \subsection{ato / strto}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 int ato( const char * ptr );§\indexc{ato}§
@@ -4796,9 +4811,9 @@
 long double _Complex strto( const char * sptr, char ** eptr );
 \end{lstlisting}
-\ 
 
 
 \subsection{bsearch / qsort}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 forall( otype T | { int ?<?( T, T ); } )
@@ -4808,9 +4823,9 @@
 void qsort( const T * arr, size_t dimension );§\indexc{qsort}§
 \end{lstlisting}
-\ 
 
 
 \subsection{abs}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 char abs( char );§\indexc{abs}§
@@ -4825,9 +4840,9 @@
 long double abs( long double _Complex );
 \end{lstlisting}
-\ 
 
 
 \subsection{random}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 void rand48seed( long int s );§\indexc{rand48seed}§
@@ -4843,9 +4858,9 @@
 long double _Complex rand48();
 \end{lstlisting}
-\ 
 
 
 \subsection{min / max / clamp / swap}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 forall( otype T | { int ?<?( T, T ); } )
@@ -4861,5 +4876,4 @@
 void swap( T * t1, T * t2 );§\indexc{swap}§
 \end{lstlisting}
-\ 
 
 
@@ -4872,4 +4886,5 @@
 \subsection{General}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 float fabs( float );§\indexc{fabs}§
@@ -4917,9 +4932,9 @@
 long double nan( const char * );
 \end{lstlisting}
-\ 
 
 
 \subsection{Exponential}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 float exp( float );§\indexc{exp}§
@@ -4974,9 +4989,9 @@
 long double logb( long double );
 \end{lstlisting}
-\ 
 
 
 \subsection{Power}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 float sqrt( float );§\indexc{sqrt}§
@@ -5002,9 +5017,9 @@
 long double _Complex pow( long double _Complex, long double _Complex );
 \end{lstlisting}
-\ 
 
 
 \subsection{Trigonometric}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 float sin( float );§\indexc{sin}§
@@ -5058,9 +5073,9 @@
 long double atan( long double, long double );
 \end{lstlisting}
-\ 
 
 
 \subsection{Hyperbolic}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 float sinh( float );§\indexc{sinh}§
@@ -5106,9 +5121,9 @@
 long double _Complex atanh( long double _Complex );
 \end{lstlisting}
-\ 
 
 
 \subsection{Error / Gamma}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 float erf( float );§\indexc{erf}§
@@ -5137,9 +5152,9 @@
 long double tgamma( long double );
 \end{lstlisting}
-\ 
 
 
 \subsection{Nearest Integer}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 float floor( float );§\indexc{floor}§
@@ -5191,9 +5206,9 @@
 long long int llround( long double );
 \end{lstlisting}
-\ 
 
 
 \subsection{Manipulation}
 
+\leavevmode
 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
 float copysign( float, float );§\indexc{copysign}§
@@ -5232,5 +5247,4 @@
 long double scalbln( long double, long int );
 \end{lstlisting}
-\ 
 
 
Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/CodeGen/CodeGenerator.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -83,5 +83,5 @@
 	}
 
-	CodeGenerator::CodeGenerator( std::ostream & os ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ) {}
+	CodeGenerator::CodeGenerator( std::ostream & os, bool mangle ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ), mangle( mangle ) {}
 
 	CodeGenerator::CodeGenerator( std::ostream & os, std::string init, int indentation, bool infunp )
@@ -95,5 +95,6 @@
 	}
 
-	string mangleName( DeclarationWithType * decl ) {
+	string CodeGenerator::mangleName( DeclarationWithType * decl ) {
+		if ( ! mangle ) return decl->get_name();
 		if ( decl->get_mangleName() != "" ) {
 			// need to incorporate scope level in order to differentiate names for destructors
@@ -311,5 +312,5 @@
 							Type * type = InitTweak::getPointerBase( (*arg)->get_results().front() );
 							assert( type );
-							newExpr->get_results().push_back( type );
+							newExpr->get_results().push_back( type->clone() );
 							*arg = newExpr;
 						} // if
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/CodeGen/CodeGenerator.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -30,5 +30,5 @@
 		static int tabsize;
 
-		CodeGenerator( std::ostream &os );
+		CodeGenerator( std::ostream &os, bool mangle = true );
 		CodeGenerator( std::ostream &os, std::string, int indent = 0, bool infun = false );
 		CodeGenerator( std::ostream &os, char *, int indent = 0, bool infun = false );
@@ -114,4 +114,5 @@
 		std::ostream &output;
 		LabelPrinter printLabels;
+		bool mangle = true;
 
 		void printDesignators( std::list< Expression * > & );
@@ -119,4 +120,5 @@
 		void handleAggregate( AggregateDecl *aggDecl );
 		void handleTypedef( NamedTypeDecl *namedType );
+		std::string mangleName( DeclarationWithType * decl );
 	}; // CodeGenerator
 
Index: src/CodeGen/GenType.cc
===================================================================
--- src/CodeGen/GenType.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/CodeGen/GenType.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// GenType.cc -- 
+// GenType.cc --
 //
 // Author           : Richard C. Bilson
@@ -28,8 +28,8 @@
 	class GenType : public Visitor {
 	  public:
-		GenType( const std::string &typeString );
+		GenType( const std::string &typeString, bool mangle = true );
 		std::string get_typeString() const { return typeString; }
 		void set_typeString( const std::string &newValue ) { typeString = newValue; }
-  
+
 		virtual void visit( FunctionType *funcType );
 		virtual void visit( VoidType *voidType );
@@ -42,19 +42,20 @@
 		virtual void visit( TypeInstType *typeInst );
 		virtual void visit( VarArgsType *varArgsType );
-  
+
 	  private:
 		void handleQualifiers( Type *type );
 		void genArray( const Type::Qualifiers &qualifiers, Type *base, Expression *dimension, bool isVarLen, bool isStatic );
-  
+
 		std::string typeString;
+		bool mangle = true;
 	};
 
-	std::string genType( Type *type, const std::string &baseString ) {
-		GenType gt( baseString );
+	std::string genType( Type *type, const std::string &baseString, bool mangle ) {
+		GenType gt( baseString, mangle );
 		type->accept( gt );
 		return gt.get_typeString();
 	}
 
-	GenType::GenType( const std::string &typeString ) : typeString( typeString ) {}
+	GenType::GenType( const std::string &typeString, bool mangle ) : typeString( typeString ), mangle( mangle ) {}
 
 	void GenType::visit( VoidType *voidType ) {
@@ -100,5 +101,5 @@
 		} // if
 		if ( dimension != 0 ) {
-			CodeGenerator cg( os );
+			CodeGenerator cg( os, mangle );
 			dimension->accept( cg );
 		} else if ( isVarLen ) {
@@ -109,5 +110,5 @@
 
 		typeString = os.str();
-  
+
 		base->accept( *this );
 	}
@@ -142,5 +143,5 @@
 			} // if
 		} // if
-  
+
 		/************* parameters ***************/
 
@@ -154,5 +155,5 @@
 			} // if
 		} else {
-			CodeGenerator cg( os );
+			CodeGenerator cg( os, mangle );
 			os << "(" ;
 
@@ -164,5 +165,5 @@
 			os << ")";
 		} // if
-  
+
 		typeString = os.str();
 
Index: src/CodeGen/GenType.h
===================================================================
--- src/CodeGen/GenType.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/CodeGen/GenType.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// GenType.h -- 
+// GenType.h --
 //
 // Author           : Richard C. Bilson
@@ -21,5 +21,5 @@
 
 namespace CodeGen {
-	std::string genType( Type *type, const std::string &baseString );
+	std::string genType( Type *type, const std::string &baseString, bool mangle = true );
 } // namespace CodeGen
 
Index: src/Common/Assert.cc
===================================================================
--- src/Common/Assert.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
+++ src/Common/Assert.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -0,0 +1,45 @@
+// 
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// Assert.cc -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Thu Aug 18 13:26:59 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Aug 19 17:07:08 2016
+// Update Count     : 10
+// 
+
+#include <assert.h>
+#include <cstdarg>										// varargs
+#include <cstdio>										// fprintf
+#include <cstdlib>										// abort
+
+extern const char * __progname;							// global name of running executable (argv[0])
+
+#define CFA_ASSERT_FMT "*CFA assertion error* from program \"%s\" in \"%s\" at line %d in file \"%s\""
+
+// called by macro assert in assert.h
+void __assert_fail( const char *assertion, const char *file, unsigned int line, const char *function ) {
+	fprintf( stderr, CFA_ASSERT_FMT ".\n", __progname, function, line, file );
+	abort();
+}
+
+// called by macro assertf
+void __assert_fail_f( const char *assertion, const char *file, unsigned int line, const char *function, const char *fmt, ... ) {
+	fprintf( stderr, CFA_ASSERT_FMT ": ", __progname, function, line, file );
+	va_list args;
+	va_start( args, fmt );
+	vfprintf( stderr, fmt, args );
+	abort();
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End:  //
+
Index: src/Common/CompilerError.h
===================================================================
--- src/Common/CompilerError.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Common/CompilerError.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue May 19 07:20:37 2015
-// Update Count     : 2
+// Last Modified On : Thu Aug 18 23:41:30 2016
+// Update Count     : 3
 //
 
@@ -18,5 +18,4 @@
 
 #include <string>
-//#include "../config.h"
 
 class CompilerError : public std::exception {
Index: src/Common/module.mk
===================================================================
--- src/Common/module.mk	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Common/module.mk	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -11,8 +11,9 @@
 ## Created On       : Mon Jun  1 17:49:17 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Mon Jun  1 17:51:23 2015
-## Update Count     : 1
+## Last Modified On : Thu Aug 18 13:29:04 2016
+## Update Count     : 2
 ###############################################################################
 
 SRC += Common/SemanticError.cc \
-       Common/UniqueName.cc
+       Common/UniqueName.cc \
+       Common/Assert.cc
Index: src/Common/utility.h
===================================================================
--- src/Common/utility.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Common/utility.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -49,4 +49,11 @@
 }
 
+template< typename T, typename U >
+static inline T * maybeMoveBuild( const U *orig ) {
+	T* ret = maybeBuild<T>(orig);
+	delete orig;
+	return ret;
+}
+
 template< typename Input_iterator >
 void printEnums( Input_iterator begin, Input_iterator end, const char * const *name_array, std::ostream &os ) {
@@ -137,7 +144,18 @@
 
 template < typename T >
-std::string toString ( T value ) {
+void toString_single ( std::ostream & os, const T & value ) {
+	os << value;
+}
+
+template < typename T, typename... Params >
+void toString_single ( std::ostream & os, const T & value, const Params & ... params ) {
+	os << value;
+	toString_single( os, params ... );
+}
+
+template < typename ... Params >
+std::string toString ( const Params & ... params ) {
 	std::ostringstream os;
-	os << value; // << std::ends;
+	toString_single( os, params... );
 	return os.str();
 }
@@ -211,4 +229,21 @@
 }
 
+template< typename T >
+void warn_single( const T & arg ) {
+	std::cerr << arg << std::endl;
+}
+
+template< typename T, typename... Params >
+void warn_single(const T & arg, const Params & ... params ) {
+	std::cerr << arg;
+	warn_single( params... );
+}
+
+template< typename... Params >
+void warn( const Params & ... params ) {
+	std::cerr << "Warning: ";
+	warn_single( params... );
+}
+
 #endif // _UTILITY_H
 
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/InitTweak/FixInit.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -33,4 +33,5 @@
 #include "GenPoly/PolyMutator.h"
 #include "SynTree/AddStmtVisitor.h"
+#include "CodeGen/GenType.h"  // for warnings
 
 bool ctordtorp = false;
@@ -174,4 +175,24 @@
 			virtual Expression * mutate( ImplicitCopyCtorExpr * impCpCtorExpr );
 		};
+
+		class WarnStructMembers : public Visitor {
+		  public:
+			typedef Visitor Parent;
+			/// warn if a user-defined constructor or destructor is missing calls for
+			/// a struct member or if a member is used before constructed
+			static void warnings( std::list< Declaration * > & translationUnit );
+
+			virtual void visit( FunctionDecl * funcDecl );
+
+			virtual void visit( MemberExpr * memberExpr );
+			virtual void visit( ApplicationExpr * appExpr );
+
+		  private:
+			void handleFirstParam( Expression * firstParam );
+
+			FunctionDecl * function = 0;
+			std::set< DeclarationWithType * > unhandled;
+			ObjectDecl * thisParam = 0;
+		};
 	} // namespace
 
@@ -187,4 +208,6 @@
 		// FixCopyCtors must happen after FixInit, so that destructors are placed correctly
 		FixCopyCtors::fixCopyCtors( translationUnit );
+
+		WarnStructMembers::warnings( translationUnit );
 	}
 
@@ -231,4 +254,11 @@
 		}
 
+		void WarnStructMembers::warnings( std::list< Declaration * > & translationUnit ) {
+			if ( true ) { // fix this condition to skip this pass if warnings aren't enabled
+				WarnStructMembers warner;
+				acceptAll( translationUnit, warner );
+			}
+		}
+
 		Expression * InsertImplicitCalls::mutate( ApplicationExpr * appExpr ) {
 			appExpr = dynamic_cast< ApplicationExpr * >( Mutator::mutate( appExpr ) );
@@ -242,5 +272,5 @@
 					FunctionType * ftype = dynamic_cast< FunctionType * >( GenPoly::getFunctionType( funcDecl->get_type() ) );
 					assert( ftype );
-					if ( (funcDecl->get_name() == "?{}" || funcDecl->get_name() == "?=?") && ftype->get_parameters().size() == 2 ) {
+					if ( (isConstructor( funcDecl->get_name() ) || funcDecl->get_name() == "?=?") && ftype->get_parameters().size() == 2 ) {
 						Type * t1 = ftype->get_parameters().front()->get_type();
 						Type * t2 = ftype->get_parameters().back()->get_type();
@@ -253,5 +283,5 @@
 							return appExpr;
 						} // if
-					} else if ( funcDecl->get_name() == "^?{}" ) {
+					} else if ( isDestructor( funcDecl->get_name() ) ) {
 						// correctness: never copy construct arguments to a destructor
 						return appExpr;
@@ -284,5 +314,5 @@
 			UntypedExpr * untyped = new UntypedExpr( new NameExpr( fname ) );
 			untyped->get_args().push_back( new AddressExpr( new VariableExpr( var ) ) );
-			if (cpArg) untyped->get_args().push_back( cpArg );
+			if (cpArg) untyped->get_args().push_back( cpArg->clone() );
 
 			// resolve copy constructor
@@ -670,4 +700,109 @@
 			} // switch
 		}
+
+		bool checkWarnings( FunctionDecl * funcDecl ) {
+			// only check for warnings if the current function is a user-defined
+			// constructor or destructor
+			if ( ! funcDecl ) return false;
+			if ( ! funcDecl->get_statements() ) return false;
+			return isCtorDtor( funcDecl->get_name() ) && ! LinkageSpec::isOverridable( funcDecl->get_linkage() );
+		}
+
+		void WarnStructMembers::visit( FunctionDecl * funcDecl ) {
+			WarnStructMembers old = *this;
+			*this = WarnStructMembers();
+
+			function = funcDecl;
+			if ( checkWarnings( funcDecl ) ) {
+				FunctionType * type = funcDecl->get_functionType();
+				assert( ! type->get_parameters().empty() );
+				thisParam = safe_dynamic_cast< ObjectDecl * >( type->get_parameters().front() );
+				PointerType * ptrType = safe_dynamic_cast< PointerType * > ( thisParam->get_type() );
+				StructInstType * structType = dynamic_cast< StructInstType * >( ptrType->get_base() );
+				if ( structType ) {
+					StructDecl * structDecl = structType->get_baseStruct();
+					for ( Declaration * member : structDecl->get_members() ) {
+						if ( ObjectDecl * field = dynamic_cast< ObjectDecl * >( member ) ) {
+							// record all of the struct type's members that need to be constructed or
+							// destructed by the end of the function
+							unhandled.insert( field );
+						}
+					}
+				}
+			}
+			Parent::visit( funcDecl );
+
+			for ( DeclarationWithType * member : unhandled ) {
+				// emit a warning for each unhandled member
+				warn( "in ", CodeGen::genType( function->get_functionType(), function->get_name(), false ), ", member ", member->get_name(), " may not have been ", isConstructor( funcDecl->get_name() ) ? "constructed" : "destructed" );
+			}
+
+			*this = old;
+		}
+
+		void WarnStructMembers::visit( ApplicationExpr * appExpr ) {
+			if ( ! checkWarnings( function ) ) return;
+
+			std::string fname = getFunctionName( appExpr );
+			if ( fname == function->get_name() ) {
+				// call to same kind of function
+				Expression * firstParam = appExpr->get_args().front();
+
+				if ( VariableExpr * varExpr = dynamic_cast< VariableExpr * >( firstParam ) ) {
+					// if calling another constructor on thisParam, assume that function handles
+					// all members - if it doesn't a warning will appear in that function.
+					if ( varExpr->get_var() == thisParam ) {
+						unhandled.clear();
+					}
+				} else {
+					// if first parameter is a member expression then
+					// remove the member from unhandled set.
+					handleFirstParam( firstParam );
+				}
+			} else if ( fname == "?=?" && isIntrinsicCallExpr( appExpr ) ) {
+				// forgive use of intrinsic assignment to construct, since instrinsic constructors
+				// codegen as assignment anyway.
+				assert( appExpr->get_args().size() == 2 );
+				handleFirstParam( appExpr->get_args().front() );
+			}
+
+			Parent::visit( appExpr );
+		}
+
+		void WarnStructMembers::handleFirstParam( Expression * firstParam ) {
+			using namespace std;
+			if ( AddressExpr * addrExpr = dynamic_cast< AddressExpr * >( firstParam ) ) {
+				if ( MemberExpr * memberExpr = dynamic_cast< MemberExpr * >( addrExpr->get_arg() ) ) {
+					if ( ApplicationExpr * deref = dynamic_cast< ApplicationExpr * >( memberExpr->get_aggregate() ) ) {
+						if ( getFunctionName( deref ) == "*?" && deref->get_args().size() == 1 ) {
+							if ( VariableExpr * varExpr = dynamic_cast< VariableExpr * >( deref->get_args().front() ) ) {
+								if ( varExpr->get_var() == thisParam ) {
+									unhandled.erase( memberExpr->get_member() );
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+
+		void WarnStructMembers::visit( MemberExpr * memberExpr ) {
+			if ( ! checkWarnings( function ) ) return;
+			if ( ! isConstructor( function->get_name() ) ) return;
+
+			if ( ApplicationExpr * deref = dynamic_cast< ApplicationExpr * >( memberExpr->get_aggregate() ) ) {
+				if ( getFunctionName( deref ) == "*?" && deref->get_args().size() == 1 ) {
+					if ( VariableExpr * varExpr = dynamic_cast< VariableExpr * >( deref->get_args().front() ) ) {
+						if ( varExpr->get_var() == thisParam ) {
+							if ( unhandled.count( memberExpr->get_member() ) ) {
+								// emit a warning because a member was used before it was constructed
+								warn( "in ", CodeGen::genType( function->get_functionType(), function->get_name(), false ), ", member ", memberExpr->get_member()->get_name(), " used before being constructed" );
+							}
+						}
+					}
+				}
+			}
+			Parent::visit( memberExpr );
+		}
 	} // namespace
 } // namespace InitTweak
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/InitTweak/InitTweak.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -291,9 +291,16 @@
 	}
 
+	namespace {
+		template <typename Predicate>
+		bool allofCtorDtor( Statement * stmt, const Predicate & pred ) {
+			std::list< Expression * > callExprs;
+			collectCtorDtorCalls( stmt, callExprs );
+			// if ( callExprs.empty() ) return false; // xxx - do I still need this check?
+			return std::all_of( callExprs.begin(), callExprs.end(), pred);
+		}
+	}
+
 	bool isIntrinsicSingleArgCallStmt( Statement * stmt ) {
-		std::list< Expression * > callExprs;
-		collectCtorDtorCalls( stmt, callExprs );
-		// if ( callExprs.empty() ) return false; // xxx - do I still need this check?
-		return std::all_of( callExprs.begin(), callExprs.end(), []( Expression * callExpr ){
+		return allofCtorDtor( stmt, []( Expression * callExpr ){
 			if ( ApplicationExpr * appExpr = isIntrinsicCallExpr( callExpr ) ) {
 				assert( ! appExpr->get_function()->get_results().empty() );
@@ -303,4 +310,10 @@
 			}
 			return false;
+		});
+	}
+
+	bool isIntrinsicCallStmt( Statement * stmt ) {
+		return allofCtorDtor( stmt, []( Expression * callExpr ) {
+			return isIntrinsicCallExpr( callExpr );
 		});
 	}
@@ -420,3 +433,6 @@
 	}
 
+	bool isConstructor( const std::string & str ) { return str == "?{}"; }
+	bool isDestructor( const std::string & str ) { return str == "^?{}"; }
+	bool isCtorDtor( const std::string & str ) { return isConstructor( str ) || isDestructor( str ); }
 }
Index: src/InitTweak/InitTweak.h
===================================================================
--- src/InitTweak/InitTweak.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/InitTweak/InitTweak.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -26,4 +26,8 @@
 // helper functions for initialization
 namespace InitTweak {
+	bool isConstructor( const std::string & );
+	bool isDestructor( const std::string & );
+	bool isCtorDtor( const std::string & );
+
 	/// transform Initializer into an argument list that can be passed to a call expression
 	std::list< Expression * > makeInitList( Initializer * init );
@@ -41,5 +45,8 @@
 	/// Intended to be used for default ctor/dtor calls, but might have use elsewhere.
 	/// Currently has assertions that make it less than fully general.
-	bool isIntrinsicSingleArgCallStmt( Statement * expr );
+	bool isIntrinsicSingleArgCallStmt( Statement * stmt );
+
+	/// True if stmt is a call statement where the function called is intrinsic.
+	bool isIntrinsicCallStmt( Statement * stmt );
 
 	/// get all Ctor/Dtor call expressions from a Statement
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Makefile.am	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 08:51:46 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Fri Jul  8 12:22:25 2016
-## Update Count     : 60
+## Last Modified On : Sat Aug 20 11:13:12 2016
+## Update Count     : 71
 ###############################################################################
 
@@ -42,9 +42,6 @@
 cfa_cpplib_PROGRAMS = driver/cfa-cpp
 driver_cfa_cpp_SOURCES = ${SRC}
-driver_cfa_cpp_LDADD = ${LEXLIB}	# yywrap
-# need files Common/utility.h
-driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL
-
-AM_CXXFLAGS = -g -std=c++11
+driver_cfa_cpp_LDADD = ${LEXLIB}			# yywrap
+driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL -rdynamic -I${abs_top_srcdir}/src/include
 
 MAINTAINERCLEANFILES += ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Makefile.in	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -105,4 +105,5 @@
 	Common/driver_cfa_cpp-SemanticError.$(OBJEXT) \
 	Common/driver_cfa_cpp-UniqueName.$(OBJEXT) \
+	Common/driver_cfa_cpp-Assert.$(OBJEXT) \
 	ControlStruct/driver_cfa_cpp-LabelGenerator.$(OBJEXT) \
 	ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT) \
@@ -137,5 +138,4 @@
 	Parser/driver_cfa_cpp-LinkageSpec.$(OBJEXT) \
 	Parser/driver_cfa_cpp-parseutility.$(OBJEXT) \
-	Parser/driver_cfa_cpp-Parser.$(OBJEXT) \
 	ResolvExpr/driver_cfa_cpp-AlternativeFinder.$(OBJEXT) \
 	ResolvExpr/driver_cfa_cpp-Alternative.$(OBJEXT) \
@@ -370,5 +370,5 @@
 	CodeGen/CodeGenerator.cc CodeGen/GenType.cc \
 	CodeGen/FixNames.cc CodeGen/OperatorTable.cc \
-	Common/SemanticError.cc Common/UniqueName.cc \
+	Common/SemanticError.cc Common/UniqueName.cc Common/Assert.cc \
 	ControlStruct/LabelGenerator.cc ControlStruct/LabelFixer.cc \
 	ControlStruct/MLEMutator.cc ControlStruct/Mutate.cc \
@@ -385,5 +385,5 @@
 	Parser/ExpressionNode.cc Parser/StatementNode.cc \
 	Parser/InitializerNode.cc Parser/TypeData.cc \
-	Parser/LinkageSpec.cc Parser/parseutility.cc Parser/Parser.cc \
+	Parser/LinkageSpec.cc Parser/parseutility.cc \
 	ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \
 	ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \
@@ -426,8 +426,6 @@
 cfa_cpplibdir = ${libdir}
 driver_cfa_cpp_SOURCES = ${SRC}
-driver_cfa_cpp_LDADD = ${LEXLIB}	# yywrap
-# need files Common/utility.h
-driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL
-AM_CXXFLAGS = -g -std=c++11
+driver_cfa_cpp_LDADD = ${LEXLIB}			# yywrap
+driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL -rdynamic -I${abs_top_srcdir}/src/include
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -528,4 +526,6 @@
 	Common/$(DEPDIR)/$(am__dirstamp)
 Common/driver_cfa_cpp-UniqueName.$(OBJEXT): Common/$(am__dirstamp) \
+	Common/$(DEPDIR)/$(am__dirstamp)
+Common/driver_cfa_cpp-Assert.$(OBJEXT): Common/$(am__dirstamp) \
 	Common/$(DEPDIR)/$(am__dirstamp)
 ControlStruct/$(am__dirstamp):
@@ -632,6 +632,4 @@
 	Parser/$(DEPDIR)/$(am__dirstamp)
 Parser/driver_cfa_cpp-parseutility.$(OBJEXT): Parser/$(am__dirstamp) \
-	Parser/$(DEPDIR)/$(am__dirstamp)
-Parser/driver_cfa_cpp-Parser.$(OBJEXT): Parser/$(am__dirstamp) \
 	Parser/$(DEPDIR)/$(am__dirstamp)
 ResolvExpr/$(am__dirstamp):
@@ -817,4 +815,5 @@
 	-rm -f CodeGen/driver_cfa_cpp-Generate.$(OBJEXT)
 	-rm -f CodeGen/driver_cfa_cpp-OperatorTable.$(OBJEXT)
+	-rm -f Common/driver_cfa_cpp-Assert.$(OBJEXT)
 	-rm -f Common/driver_cfa_cpp-SemanticError.$(OBJEXT)
 	-rm -f Common/driver_cfa_cpp-UniqueName.$(OBJEXT)
@@ -845,5 +844,4 @@
 	-rm -f Parser/driver_cfa_cpp-LinkageSpec.$(OBJEXT)
 	-rm -f Parser/driver_cfa_cpp-ParseNode.$(OBJEXT)
-	-rm -f Parser/driver_cfa_cpp-Parser.$(OBJEXT)
 	-rm -f Parser/driver_cfa_cpp-StatementNode.$(OBJEXT)
 	-rm -f Parser/driver_cfa_cpp-TypeData.$(OBJEXT)
@@ -927,4 +925,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@CodeGen/$(DEPDIR)/driver_cfa_cpp-Generate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@CodeGen/$(DEPDIR)/driver_cfa_cpp-OperatorTable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-Assert.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-SemanticError.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-UniqueName.Po@am__quote@
@@ -955,5 +954,4 @@
 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-LinkageSpec.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-ParseNode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-Parser.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-StatementNode.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-TypeData.Po@am__quote@
@@ -1169,4 +1167,18 @@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Common/driver_cfa_cpp-UniqueName.obj `if test -f 'Common/UniqueName.cc'; then $(CYGPATH_W) 'Common/UniqueName.cc'; else $(CYGPATH_W) '$(srcdir)/Common/UniqueName.cc'; fi`
 
+Common/driver_cfa_cpp-Assert.o: Common/Assert.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Common/driver_cfa_cpp-Assert.o -MD -MP -MF Common/$(DEPDIR)/driver_cfa_cpp-Assert.Tpo -c -o Common/driver_cfa_cpp-Assert.o `test -f 'Common/Assert.cc' || echo '$(srcdir)/'`Common/Assert.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) Common/$(DEPDIR)/driver_cfa_cpp-Assert.Tpo Common/$(DEPDIR)/driver_cfa_cpp-Assert.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Common/Assert.cc' object='Common/driver_cfa_cpp-Assert.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 Common/driver_cfa_cpp-Assert.o `test -f 'Common/Assert.cc' || echo '$(srcdir)/'`Common/Assert.cc
+
+Common/driver_cfa_cpp-Assert.obj: Common/Assert.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Common/driver_cfa_cpp-Assert.obj -MD -MP -MF Common/$(DEPDIR)/driver_cfa_cpp-Assert.Tpo -c -o Common/driver_cfa_cpp-Assert.obj `if test -f 'Common/Assert.cc'; then $(CYGPATH_W) 'Common/Assert.cc'; else $(CYGPATH_W) '$(srcdir)/Common/Assert.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) Common/$(DEPDIR)/driver_cfa_cpp-Assert.Tpo Common/$(DEPDIR)/driver_cfa_cpp-Assert.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Common/Assert.cc' object='Common/driver_cfa_cpp-Assert.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 Common/driver_cfa_cpp-Assert.obj `if test -f 'Common/Assert.cc'; then $(CYGPATH_W) 'Common/Assert.cc'; else $(CYGPATH_W) '$(srcdir)/Common/Assert.cc'; fi`
+
 ControlStruct/driver_cfa_cpp-LabelGenerator.o: ControlStruct/LabelGenerator.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-LabelGenerator.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-LabelGenerator.Tpo -c -o ControlStruct/driver_cfa_cpp-LabelGenerator.o `test -f 'ControlStruct/LabelGenerator.cc' || echo '$(srcdir)/'`ControlStruct/LabelGenerator.cc
@@ -1616,18 +1628,4 @@
 @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 Parser/driver_cfa_cpp-parseutility.obj `if test -f 'Parser/parseutility.cc'; then $(CYGPATH_W) 'Parser/parseutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parseutility.cc'; fi`
-
-Parser/driver_cfa_cpp-Parser.o: Parser/Parser.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-Parser.o -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-Parser.Tpo -c -o Parser/driver_cfa_cpp-Parser.o `test -f 'Parser/Parser.cc' || echo '$(srcdir)/'`Parser/Parser.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-Parser.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-Parser.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Parser/Parser.cc' object='Parser/driver_cfa_cpp-Parser.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 Parser/driver_cfa_cpp-Parser.o `test -f 'Parser/Parser.cc' || echo '$(srcdir)/'`Parser/Parser.cc
-
-Parser/driver_cfa_cpp-Parser.obj: Parser/Parser.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-Parser.obj -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-Parser.Tpo -c -o Parser/driver_cfa_cpp-Parser.obj `if test -f 'Parser/Parser.cc'; then $(CYGPATH_W) 'Parser/Parser.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/Parser.cc'; fi`
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-Parser.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-Parser.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Parser/Parser.cc' object='Parser/driver_cfa_cpp-Parser.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 Parser/driver_cfa_cpp-Parser.obj `if test -f 'Parser/Parser.cc'; then $(CYGPATH_W) 'Parser/Parser.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/Parser.cc'; fi`
 
 ResolvExpr/driver_cfa_cpp-AlternativeFinder.o: ResolvExpr/AlternativeFinder.cc
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/DeclarationNode.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug  9 08:39:20 2016
-// Update Count     : 169
+// Last Modified On : Sun Aug 28 22:12:44 2016
+// Update Count     : 278
 //
 
@@ -25,5 +25,4 @@
 #include "SynTree/Expression.h"
 
-#include "Parser.h"
 #include "TypedefTable.h"
 extern TypedefTable typedefTable;
@@ -42,5 +41,5 @@
 UniqueName DeclarationNode::anonymous( "__anonymous" );
 
-extern LinkageSpec::Type linkage;						// defined in parser.yy
+extern LinkageSpec::Spec linkage;						// defined in parser.yy
 
 DeclarationNode *DeclarationNode::clone() const {
@@ -48,15 +47,26 @@
 	newnode->type = maybeClone( type );
 	newnode->name = name;
-	newnode->storageClasses = storageClasses;
-//PAB	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
-	newnode->bitfieldWidth = bitfieldWidth;
+	newnode->storageClass = storageClass;
+	newnode->isInline = isInline;
+	newnode->isNoreturn = isNoreturn;
+	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
 	newnode->hasEllipsis = hasEllipsis;
-	newnode->initializer = initializer;
-	newnode->next = maybeClone( next );
+	newnode->initializer = maybeClone( initializer );
+	newnode->set_next( maybeClone( get_next() ) );
 	newnode->linkage = linkage;
 	return newnode;
 } // DeclarationNode::clone
 
-DeclarationNode::DeclarationNode() : type( 0 ), bitfieldWidth( 0 ), initializer( 0 ), hasEllipsis( false ), linkage( ::linkage ) {
+DeclarationNode::DeclarationNode()
+	: type( 0 )
+	, storageClass( NoStorageClass )
+	, isInline( false )
+	, isNoreturn( false )
+	, bitfieldWidth( 0 )
+	, initializer( 0 )
+	, hasEllipsis( false )
+	, linkage( ::linkage )
+	, extension( false )
+	, error() {
 }
 
@@ -83,5 +93,7 @@
 	} // if
 
-	printEnums( storageClasses.begin(), storageClasses.end(), DeclarationNode::storageName, os );
+	if ( storageClass != NoStorageClass ) os << DeclarationNode::storageName[storageClass] << ' ';
+	if ( isInline ) os << DeclarationNode::storageName[Inline] << ' ';
+	if ( isNoreturn ) os << DeclarationNode::storageName[Noreturn] << ' ';
 	if ( type ) {
 		type->print( os, indent );
@@ -135,18 +147,30 @@
 } // DeclarationNode::newFunction
 
-DeclarationNode *DeclarationNode::newQualifier( Qualifier q ) {
+DeclarationNode * DeclarationNode::newQualifier( Qualifier q ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData();
-	newnode->type->qualifiers.push_back( q );
+	newnode->type->qualifiers[ q ] = 1;
 	return newnode;
 } // DeclarationNode::newQualifier
 
-DeclarationNode *DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) {
-	DeclarationNode *newnode = new DeclarationNode;
-	newnode->storageClasses.push_back( sc );
+DeclarationNode * DeclarationNode::newForall( DeclarationNode *forall ) {
+	DeclarationNode *newnode = new DeclarationNode;
+	newnode->type = new TypeData( TypeData::Unknown );
+	newnode->type->forall = forall;
+	return newnode;
+} // DeclarationNode::newForall
+
+DeclarationNode * DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) {
+	DeclarationNode *newnode = new DeclarationNode;
+	//switch (sc) {
+	//	case Inline: newnode->isInline = true; break;
+	//	case Noreturn: newnode->isNoreturn = true; break;
+	//	default: newnode->storageClass = sc; break;
+	//}
+	newnode->storageClass = sc;
 	return newnode;
 } // DeclarationNode::newStorageClass
 
-DeclarationNode *DeclarationNode::newBasicType( BasicType bt ) {
+DeclarationNode * DeclarationNode::newBasicType( BasicType bt ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Basic );
@@ -155,5 +179,12 @@
 } // DeclarationNode::newBasicType
 
-DeclarationNode *DeclarationNode::newBuiltinType( BuiltinType bt ) {
+DeclarationNode * DeclarationNode::newModifier( Modifier mod ) {
+	DeclarationNode *newnode = new DeclarationNode;
+	newnode->type = new TypeData( TypeData::Basic );
+	newnode->type->basic->modifiers.push_back( mod );
+	return newnode;
+} // DeclarationNode::newModifier
+
+DeclarationNode * DeclarationNode::newBuiltinType( BuiltinType bt ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Builtin );
@@ -162,19 +193,5 @@
 } // DeclarationNode::newBuiltinType
 
-DeclarationNode *DeclarationNode::newModifier( Modifier mod ) {
-	DeclarationNode *newnode = new DeclarationNode;
-	newnode->type = new TypeData( TypeData::Basic );
-	newnode->type->basic->modifiers.push_back( mod );
-	return newnode;
-} // DeclarationNode::newModifier
-
-DeclarationNode *DeclarationNode::newForall( DeclarationNode *forall ) {
-	DeclarationNode *newnode = new DeclarationNode;
-	newnode->type = new TypeData( TypeData::Unknown );
-	newnode->type->forall = forall;
-	return newnode;
-} // DeclarationNode::newForall
-
-DeclarationNode *DeclarationNode::newFromTypedef( std::string *name ) {
+DeclarationNode * DeclarationNode::newFromTypedef( std::string *name ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::SymbolicInst );
@@ -185,5 +202,5 @@
 } // DeclarationNode::newFromTypedef
 
-DeclarationNode *DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields, bool body ) {
+DeclarationNode * DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields, bool body ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Aggregate );
@@ -214,5 +231,5 @@
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->name = assign_strptr( name );
-	newnode->enumeratorValue = constant;
+	newnode->enumeratorValue.reset( constant );
 	typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID );
 	return newnode;
@@ -284,5 +301,5 @@
 	newnode->type->array->dimension = size;
 	newnode->type->array->isStatic = isStatic;
-	if ( newnode->type->array->dimension == 0 || dynamic_cast<ConstantExpr *>( newnode->type->array->dimension->build() ) ) {
+	if ( newnode->type->array->dimension == 0 || newnode->type->array->dimension->isExpressionType<ConstantExpr *>() ) {
 		newnode->type->array->isVarLen = false;
 	} else {
@@ -353,15 +370,34 @@
 			src = 0;
 		} else {
-			dst->qualifiers.splice( dst->qualifiers.end(), src->qualifiers );
-		} // if
-	} // if
-}
+			dst->qualifiers |= src->qualifiers;
+		} // if
+	} // if
+}
+
+void DeclarationNode::checkQualifiers( const TypeData *src, const TypeData *dst ) {
+	TypeData::Qualifiers qsrc = src->qualifiers, qdst = dst->qualifiers;
+
+	if ( (qsrc & qdst).any() ) {						// common bits between qualifier masks ?
+		error = "duplicate qualifier ";
+		int j = 0;										// separator detector
+		for ( int i = 0; i < DeclarationNode::NoOfQualifier; i += 1 ) {
+			if ( qsrc[i] & qdst[i] ) {					// find specific qualifiers in common
+				if ( j > 0 ) error += ", ";
+				error += DeclarationNode::qualifierName[i];
+				j += 1;
+			} // if
+		} // for
+		error += " in declaration of ";
+	} // if
+} // DeclarationNode::checkQualifiers
 
 DeclarationNode *DeclarationNode::addQualifiers( DeclarationNode *q ) {
 	if ( q ) {
-		storageClasses.splice( storageClasses.end(), q->storageClasses );
+		copyStorageClasses(q);
 		if ( q->type ) {
 			if ( ! type ) {
 				type = new TypeData;
+			} else {
+				checkQualifiers( q->type, type );
 			} // if
 			addQualifiersToType( q->type, type );
@@ -387,5 +423,12 @@
 
 DeclarationNode *DeclarationNode::copyStorageClasses( DeclarationNode *q ) {
-	storageClasses = q->storageClasses;
+	isInline = isInline || q->isInline;
+	isNoreturn = isNoreturn || q->isNoreturn;
+	if ( storageClass == NoStorageClass ) {
+		storageClass = q->storageClass;
+	} else if ( q->storageClass != NoStorageClass ) {
+		q->error = "invalid combination of storage classes in declaration of ";
+	} // if
+	if ( error.empty() ) error = q->error;
 	return this;
 }
@@ -406,10 +449,10 @@
 			switch ( dst->kind ) {
 			  case TypeData::Unknown:
-				src->qualifiers.splice( src->qualifiers.end(), dst->qualifiers );
+				src->qualifiers |= dst->qualifiers;
 				dst = src;
 				src = 0;
 				break;
 			  case TypeData::Basic:
-				dst->qualifiers.splice( dst->qualifiers.end(), src->qualifiers );
+				dst->qualifiers |= src->qualifiers;
 				if ( src->kind != TypeData::Unknown ) {
 					assert( src->kind == TypeData::Basic );
@@ -427,5 +470,5 @@
 						dst->base->aggInst->params = maybeClone( src->aggregate->actuals );
 					} // if
-					dst->base->qualifiers.splice( dst->base->qualifiers.end(), src->qualifiers );
+					dst->base->qualifiers |= src->qualifiers;
 					src = 0;
 					break;
@@ -447,5 +490,5 @@
 DeclarationNode *DeclarationNode::addType( DeclarationNode *o ) {
 	if ( o ) {
-		storageClasses.splice( storageClasses.end(), o->storageClasses );
+		copyStorageClasses( o );
 		if ( o->type ) {
 			if ( ! type ) {
@@ -456,5 +499,5 @@
 						type->aggInst->params = maybeClone( o->type->aggregate->actuals );
 					} // if
-					type->qualifiers.splice( type->qualifiers.end(), o->type->qualifiers );
+					type->qualifiers |= o->type->qualifiers;
 				} else {
 					type = o->type;
@@ -470,6 +513,6 @@
 
 		// there may be typedefs chained onto the type
-		if ( o->get_link() ) {
-			set_link( o->get_link()->clone() );
+		if ( o->get_next() ) {
+			set_last( o->get_next()->clone() );
 		} // if
 	} // if
@@ -591,5 +634,5 @@
 					p->type->base->aggInst->params = maybeClone( type->aggregate->actuals );
 				} // if
-				p->type->base->qualifiers.splice( p->type->base->qualifiers.end(), type->qualifiers );
+				p->type->base->qualifiers |= type->qualifiers;
 				break;
 
@@ -628,5 +671,5 @@
 					lastArray->base->aggInst->params = maybeClone( type->aggregate->actuals );
 				} // if
-				lastArray->base->qualifiers.splice( lastArray->base->qualifiers.end(), type->qualifiers );
+				lastArray->base->qualifiers |= type->qualifiers;
 				break;
 			  default:
@@ -694,5 +737,5 @@
 	} // if
 	newnode->type->forall = maybeClone( type->forall );
-	newnode->storageClasses = storageClasses;
+	newnode->copyStorageClasses( this );
 	newnode->name = assign_strptr( newName );
 	return newnode;
@@ -701,5 +744,5 @@
 DeclarationNode *DeclarationNode::cloneBaseType( DeclarationNode *o ) {
 	if ( o ) {
-		o->storageClasses.insert( o->storageClasses.end(), storageClasses.begin(), storageClasses.end() );
+		o->copyStorageClasses( this );
 		if ( type ) {
 			TypeData *srcType = type;
@@ -734,5 +777,5 @@
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = maybeClone( type );
-	newnode->storageClasses = storageClasses;
+	newnode->copyStorageClasses( this );
 	newnode->name = assign_strptr( newName );
 	return newnode;
@@ -741,5 +784,5 @@
 DeclarationNode *DeclarationNode::cloneType( DeclarationNode *o ) {
 	if ( o ) {
-		o->storageClasses.insert( o->storageClasses.end(), storageClasses.begin(), storageClasses.end() );
+		o->copyStorageClasses( this );
 		if ( type ) {
 			TypeData *newType = type->clone();
@@ -752,17 +795,11 @@
 		} // if
 	} // if
+	delete o;
 	return o;
-}
-
-DeclarationNode *DeclarationNode::appendList( DeclarationNode *node ) {
-	if ( node != 0 ) {
-		set_link( node );
-	} // if
-	return this;
 }
 
 DeclarationNode *DeclarationNode::extractAggregate() const {
 	if ( type ) {
-		TypeData *ret = type->extractAggregate();
+		TypeData *ret = typeextractAggregate( type );
 		if ( ret ) {
 			DeclarationNode *newnode = new DeclarationNode;
@@ -776,5 +813,5 @@
 void buildList( const DeclarationNode *firstNode, std::list< Declaration * > &outputList ) {
 	SemanticError errors;
-	std::back_insert_iterator< std::list< Declaration *> > out( outputList );
+	std::back_insert_iterator< std::list< Declaration * > > out( outputList );
 	const DeclarationNode *cur = firstNode;
 	while ( cur ) {
@@ -786,4 +823,5 @@
 					*out++ = decl;
 				} // if
+				delete extr;
 			} // if
 			Declaration *decl = cur->build();
@@ -794,5 +832,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast<DeclarationNode *>( cur->get_link() );
+		cur = dynamic_cast< DeclarationNode * >( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
@@ -801,7 +839,7 @@
 }
 
-void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType *> &outputList ) {
+void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType * > &outputList ) {
 	SemanticError errors;
-	std::back_insert_iterator< std::list< DeclarationWithType *> > out( outputList );
+	std::back_insert_iterator< std::list< DeclarationWithType * > > out( outputList );
 	const DeclarationNode *cur = firstNode;
 	while ( cur ) {
@@ -817,11 +855,11 @@
 			Declaration *decl = cur->build();
 			if ( decl ) {
-				if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType *>( decl ) ) {
+				if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( decl ) ) {
 					*out++ = dwt;
-				} else if ( StructDecl *agg = dynamic_cast< StructDecl *>( decl ) ) {
+				} else if ( StructDecl *agg = dynamic_cast< StructDecl * >( decl ) ) {
 					StructInstType *inst = new StructInstType( Type::Qualifiers(), agg->get_name() );
 					*out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, 0, inst, 0 );
 					delete agg;
-				} else if ( UnionDecl *agg = dynamic_cast< UnionDecl *>( decl ) ) {
+				} else if ( UnionDecl *agg = dynamic_cast< UnionDecl * >( decl ) ) {
 					UnionInstType *inst = new UnionInstType( Type::Qualifiers(), agg->get_name() );
 					*out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, 0, inst, 0 );
@@ -831,5 +869,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
+		cur = dynamic_cast< DeclarationNode * >( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
@@ -838,7 +876,7 @@
 }
 
-void buildTypeList( const DeclarationNode *firstNode, std::list< Type *> &outputList ) {
+void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList ) {
 	SemanticError errors;
-	std::back_insert_iterator< std::list< Type *> > out( outputList );
+	std::back_insert_iterator< std::list< Type * > > out( outputList );
 	const DeclarationNode *cur = firstNode;
 	while ( cur ) {
@@ -848,5 +886,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
+		cur = dynamic_cast< DeclarationNode * >( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
@@ -856,9 +894,10 @@
 
 Declaration *DeclarationNode::build() const {
+	if ( ! error.empty() ) throw SemanticError( error, this );
 	if ( type ) {
-		return type->buildDecl( name, buildStorageClass(), maybeBuild< Expression >( bitfieldWidth ), buildFuncSpecifier( Inline ), buildFuncSpecifier( Noreturn ), linkage, maybeBuild< Initializer >(initializer) )->set_extension( extension );
-	} // if
-	if ( ! buildFuncSpecifier( Inline ) && ! buildFuncSpecifier( Noreturn ) ) {
-		return (new ObjectDecl( name, buildStorageClass(), linkage, maybeBuild< Expression >( bitfieldWidth ), 0, maybeBuild< Initializer >( initializer ) ))->set_extension( extension );
+		return buildDecl( type, name, storageClass, maybeBuild< Expression >( bitfieldWidth ), isInline, isNoreturn, linkage, maybeBuild< Initializer >(initializer) )->set_extension( extension );
+	} // if
+	if ( ! isInline && ! isNoreturn ) {
+		return (new ObjectDecl( name, storageClass, linkage, maybeBuild< Expression >( bitfieldWidth ), 0, maybeBuild< Initializer >( initializer ) ))->set_extension( extension );
 	} // if
 	throw SemanticError( "invalid function specifier in declaration of ", this );
@@ -870,16 +909,16 @@
 	switch ( type->kind ) {
 	  case TypeData::Enum:
-		return new EnumInstType( type->buildQualifiers(), type->enumeration->name );
+		return new EnumInstType( buildQualifiers( type ), type->enumeration->name );
 	  case TypeData::Aggregate: {
 		  ReferenceToType *ret;
 		  switch ( type->aggregate->kind ) {
 			case DeclarationNode::Struct:
-			  ret = new StructInstType( type->buildQualifiers(), type->aggregate->name );
+			  ret = new StructInstType( buildQualifiers( type ), type->aggregate->name );
 			  break;
 			case DeclarationNode::Union:
-			  ret = new UnionInstType( type->buildQualifiers(), type->aggregate->name );
+			  ret = new UnionInstType( buildQualifiers( type ), type->aggregate->name );
 			  break;
 			case DeclarationNode::Trait:
-			  ret = new TraitInstType( type->buildQualifiers(), type->aggregate->name );
+			  ret = new TraitInstType( buildQualifiers( type ), type->aggregate->name );
 			  break;
 			default:
@@ -890,32 +929,32 @@
 	  }
 	  case TypeData::Symbolic: {
-		  TypeInstType *ret = new TypeInstType( type->buildQualifiers(), type->symbolic->name, false );
+		  TypeInstType *ret = new TypeInstType( buildQualifiers( type ), type->symbolic->name, false );
 		  buildList( type->symbolic->actuals, ret->get_parameters() );
 		  return ret;
 	  }
 	  default:
-		return type->build();
+		return typebuild( type );
 	} // switch
 }
 
-DeclarationNode::StorageClass DeclarationNode::buildStorageClass() const {
-	DeclarationNode::StorageClass ret = DeclarationNode::NoStorageClass;
-	for ( std::list< DeclarationNode::StorageClass >::const_iterator i = storageClasses.begin(); i != storageClasses.end(); ++i ) {
-	  if ( *i == DeclarationNode::Inline || *i == DeclarationNode::Noreturn ) continue; // ignore function specifiers
-	  if ( ret != DeclarationNode::NoStorageClass ) {	// already have a valid storage class ?
-			throw SemanticError( "invalid combination of storage classes in declaration of ", this );
-		} // if
-		ret = *i;
-	} // for
-	return ret;
-}
-
-bool DeclarationNode::buildFuncSpecifier( DeclarationNode::StorageClass key ) const {
-	std::list< DeclarationNode::StorageClass >::const_iterator first = std::find( storageClasses.begin(), storageClasses.end(), key );
-  if ( first == storageClasses.end() ) return false;	// not found
-	first = std::find( ++first, storageClasses.end(), key ); // found
-  if ( first == storageClasses.end() ) return true;		// not found again
-	throw SemanticError( "duplicate function specifier in declaration of ", this );
-}
+// DeclarationNode::StorageClass DeclarationNode::buildStorageClass() const {
+// 	DeclarationNode::StorageClass ret = DeclarationNode::NoStorageClass;
+// 	for ( std::list< DeclarationNode::StorageClass >::const_iterator i = storageClasses.begin(); i != storageClasses.end(); ++i ) {
+// 	  if ( *i == DeclarationNode::Inline || *i == DeclarationNode::Noreturn ) continue; // ignore function specifiers
+// 	  if ( ret != DeclarationNode::NoStorageClass ) {	// already have a valid storage class ?
+// 			throw SemanticError( "invalid combination of storage classes in declaration of ", this );
+// 		} // if
+// 		ret = *i;
+// 	} // for
+// 	return ret;
+// }
+
+// bool DeclarationNode::buildFuncSpecifier( DeclarationNode::StorageClass key ) const {
+// 	std::list< DeclarationNode::StorageClass >::const_iterator first = std::find( storageClasses.begin(), storageClasses.end(), key );
+//   if ( first == storageClasses.end() ) return false;	// not found
+// 	first = std::find( ++first, storageClasses.end(), key ); // found
+//   if ( first == storageClasses.end() ) return true;		// not found again
+// 	throw SemanticError( "duplicate function specifier in declaration of ", this );
+// }
 
 // Local Variables: //
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/ExpressionNode.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 10 11:07:38 2016
-// Update Count     : 486
+// Last Modified On : Thu Aug 25 21:39:40 2016
+// Update Count     : 503
 //
 
@@ -32,5 +32,5 @@
 using namespace std;
 
-ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {}
+ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.get_name() ), extension( other.extension ) {}
 
 //##############################################################################
@@ -57,5 +57,5 @@
 static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
 
-Expression *build_constantInteger( std::string & str ) {
+Expression *build_constantInteger( const std::string & str ) {
 	static const BasicType::Kind kind[2][3] = {
 		{ BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
@@ -120,8 +120,10 @@
 	} // if
 
-	return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) );
+	Expression * ret = new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) );
+	delete &str;										// created by lex
+	return ret;
 } // build_constantInteger
 
-Expression *build_constantFloat( std::string & str ) {
+Expression *build_constantFloat( const std::string & str ) {
 	static const BasicType::Kind kind[2][3] = {
 		{ BasicType::Float, BasicType::Double, BasicType::LongDouble },
@@ -150,12 +152,16 @@
 	} // if
 
-	return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) );
+	Expression * ret = new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) );
+	delete &str;										// created by lex
+	return ret;
 } // build_constantFloat
 
-Expression *build_constantChar( std::string & str ) {
-	return new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) );
+Expression *build_constantChar( const std::string & str ) {
+	Expression * ret = new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) );
+	delete &str;										// created by lex
+	return ret;
 } // build_constantChar
 
-ConstantExpr *build_constantStr( std::string & str ) {
+ConstantExpr *build_constantStr( const std::string & str ) {
 	// string should probably be a primitive type
 	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
@@ -163,14 +169,14 @@
 											toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
 								   false, false );
-	return new ConstantExpr( Constant( at, str ) );
+	ConstantExpr * ret = new ConstantExpr( Constant( at, str ) );
+	delete &str;										// created by lex
+	return ret;
 } // build_constantStr
 
-//##############################################################################
-
 NameExpr * build_varref( const string *name, bool labelp ) {
-	return new NameExpr( *name, nullptr );
-}
-
-//##############################################################################
+	NameExpr *expr = new NameExpr( *name, nullptr );
+	delete name;
+	return expr;
+}
 
 static const char *OperName[] = {
@@ -178,5 +184,5 @@
 	"SizeOf", "AlignOf", "OffsetOf", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
 	"?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?",
-	"?=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
+	"?=?", "?@=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
 	"?[?]", "...",
 	// monadic
@@ -184,18 +190,16 @@
 };
 
-//##############################################################################
-
 Expression *build_cast( DeclarationNode *decl_node, ExpressionNode *expr_node ) {
-	Type *targetType = decl_node->buildType();
+	Type *targetType = maybeMoveBuildType( decl_node );
 	if ( dynamic_cast< VoidType * >( targetType ) ) {
 		delete targetType;
-		return new CastExpr( maybeBuild<Expression>(expr_node) );
+		return new CastExpr( maybeMoveBuild< Expression >(expr_node) );
 	} else {
-		return new CastExpr( maybeBuild<Expression>(expr_node), targetType );
+		return new CastExpr( maybeMoveBuild< Expression >(expr_node), targetType );
 	} // if
 }
 
 Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) {
-	UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeBuild<Expression>(expr_node) );
+	UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeMoveBuild< Expression >(expr_node) );
 	delete member;
 	return ret;
@@ -204,5 +208,5 @@
 Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) {
 	UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
-	deref->get_args().push_back( maybeBuild<Expression>(expr_node) );
+	deref->get_args().push_back( maybeMoveBuild< Expression >(expr_node) );
 	UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
 	delete member;
@@ -211,173 +215,104 @@
 
 Expression *build_addressOf( ExpressionNode *expr_node ) {
-		return new AddressExpr( maybeBuild<Expression>(expr_node) );
+		return new AddressExpr( maybeMoveBuild< Expression >(expr_node) );
 }
 Expression *build_sizeOfexpr( ExpressionNode *expr_node ) {
-	return new SizeofExpr( maybeBuild<Expression>(expr_node) );
+	return new SizeofExpr( maybeMoveBuild< Expression >(expr_node) );
 }
 Expression *build_sizeOftype( DeclarationNode *decl_node ) {
-	return new SizeofExpr( decl_node->buildType() );
+	return new SizeofExpr( maybeMoveBuildType( decl_node ) );
 }
 Expression *build_alignOfexpr( ExpressionNode *expr_node ) {
-	return new AlignofExpr( maybeBuild<Expression>(expr_node) );
+	return new AlignofExpr( maybeMoveBuild< Expression >(expr_node) );
 }
 Expression *build_alignOftype( DeclarationNode *decl_node ) {
-	return new AlignofExpr( decl_node->buildType() );
+	return new AlignofExpr( maybeMoveBuildType( decl_node) );
 }
 Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member ) {
-	return new UntypedOffsetofExpr( decl_node->buildType(), member->get_name() );
+	Expression* ret = new UntypedOffsetofExpr( maybeMoveBuildType( decl_node ), member->get_name() );
+	delete member;
+	return ret;
 }
 
 Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind ) {
-	return new LogicalExpr( notZeroExpr( maybeBuild<Expression>(expr_node1) ), notZeroExpr( maybeBuild<Expression>(expr_node2) ), kind );
+	return new LogicalExpr( notZeroExpr( maybeMoveBuild< Expression >(expr_node1) ), notZeroExpr( maybeMoveBuild< Expression >(expr_node2) ), kind );
 }
 
 Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node ) {
-	std::list<Expression *> args;
-	args.push_back( maybeBuild<Expression>(expr_node) );
+	std::list< Expression * > args;
+	args.push_back( maybeMoveBuild< 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) ) );
+	std::list< Expression * > args;
+	args.push_back( new AddressExpr( maybeMoveBuild< Expression >(expr_node) ) );
 	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) );
+	std::list< Expression * > args;
+	args.push_back( maybeMoveBuild< Expression >(expr_node1) );
+	args.push_back( maybeMoveBuild< Expression >(expr_node2) );
 	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) );
+	std::list< Expression * > args;
+	args.push_back( new AddressExpr( maybeMoveBuild< Expression >(expr_node1) ) );
+	args.push_back( maybeMoveBuild< Expression >(expr_node2) );
 	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
 }
 
 Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 ) {
-	return new ConditionalExpr( notZeroExpr( maybeBuild<Expression>(expr_node1) ), maybeBuild<Expression>(expr_node2), maybeBuild<Expression>(expr_node3) );
+	return new ConditionalExpr( notZeroExpr( maybeMoveBuild< Expression >(expr_node1) ), maybeMoveBuild< Expression >(expr_node2), maybeMoveBuild< Expression >(expr_node3) );
 }
 
 Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
-	return new CommaExpr( maybeBuild<Expression>(expr_node1), maybeBuild<Expression>(expr_node2) );
+	return new CommaExpr( maybeMoveBuild< Expression >(expr_node1), maybeMoveBuild< Expression >(expr_node2) );
 }
 
 Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node ) {
-	return new AttrExpr( var, maybeBuild<Expression>(expr_node) );
+	return new AttrExpr( var, maybeMoveBuild< Expression >(expr_node) );
 }
 Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node ) {
-	return new AttrExpr( var, decl_node->buildType() );
+	return new AttrExpr( var, maybeMoveBuildType( decl_node ) );
 }
 
 Expression *build_tuple( ExpressionNode * expr_node ) {
 	TupleExpr *ret = new TupleExpr();
-	buildList( expr_node, ret->get_exprs() );
+	buildMoveList( expr_node, ret->get_exprs() );
 	return ret;
 }
 
 Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node ) {
-	std::list<Expression *> args;
-
-	buildList( expr_node, args );
-	return new UntypedExpr( maybeBuild<Expression>(function), args, nullptr );
+	std::list< Expression * > args;
+	buildMoveList( expr_node, args );
+	return new UntypedExpr( maybeMoveBuild< 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 );
-}
-
-//##############################################################################
-
-Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) {
-	return new AsmExpr( maybeBuild< Expression >( inout ), constraint, maybeBuild<Expression>(operand) );
-}
-
-//##############################################################################
-
-void LabelNode::print( std::ostream &os, int indent ) const {}
-
-void LabelNode::printOneLine( std::ostream &os, int indent ) const {}
-
-//##############################################################################
+	return new RangeExpr( maybeMoveBuild< Expression >( low ), maybeMoveBuild< Expression >( high ) );
+}
+
+Expression *build_asmexpr( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) {
+	return new AsmExpr( maybeMoveBuild< Expression >( inout ), constraint, maybeMoveBuild< Expression >(operand) );
+}
 
 Expression *build_valexpr( StatementNode *s ) {
-	return new UntypedValofExpr( maybeBuild<Statement>(s), nullptr );
-}
-
-//##############################################################################
- 
-// ForCtlExprNode::ForCtlExprNode( ParseNode *init_, ExpressionNode *cond, ExpressionNode *incr ) throw ( SemanticError ) : condition( cond ), change( incr ) {
-// 	if ( init_ == 0 )
-// 		init = 0;
-// 	else {
-// 		DeclarationNode *decl;
-// 		ExpressionNode *exp;
-
-// 		if (( decl = dynamic_cast<DeclarationNode *>(init_) ) != 0)
-// 			init = new StatementNode( decl );
-// 		else if (( exp = dynamic_cast<ExpressionNode *>( init_)) != 0)
-// 			init = new StatementNode( StatementNode::Exp, exp );
-// 		else
-// 			throw SemanticError("Error in for control expression");
-// 	}
-// }
-
-// ForCtlExprNode::ForCtlExprNode( const ForCtlExprNode &other )
-// 	: ExpressionNode( other ), init( maybeClone( other.init ) ), condition( maybeClone( other.condition ) ), change( maybeClone( other.change ) ) {
-// }
-
-// ForCtlExprNode::~ForCtlExprNode() {
-// 	delete init;
-// 	delete condition;
-// 	delete change;
-// }
-
-// Expression *ForCtlExprNode::build() const {
-// 	// this shouldn't be used!
-// 	assert( false );
-// 	return 0;
-// }
-
-// void ForCtlExprNode::print( std::ostream &os, int indent ) const{
-// 	os << string( indent,' ' ) << "For Control Expression -- :" << endl;
-
-// 	os << string( indent + 2, ' ' ) << "initialization:" << endl;
-// 	if ( init != 0 )
-// 		init->printList( os, indent + 4 );
-
-// 	os << string( indent + 2, ' ' ) << "condition: " << endl;
-// 	if ( condition != 0 )
-// 		condition->print( os, indent + 4 );
-// 	os << string( indent + 2, ' ' ) << "increment: " << endl;
-// 	if ( change != 0 )
-// 		change->print( os, indent + 4 );
-// }
-
-// void ForCtlExprNode::printOneLine( std::ostream &, int indent ) const {
-// 	assert( false );
-// }
-
-//##############################################################################
-
+	return new UntypedValofExpr( maybeMoveBuild< Statement >(s), nullptr );
+}
 Expression *build_typevalue( DeclarationNode *decl ) {
-	return new TypeExpr( decl->buildType() );
-}
-
-//##############################################################################
+	return new TypeExpr( maybeMoveBuildType( decl ) );
+}
 
 Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids ) {
-	Declaration * newDecl = maybeBuild<Declaration>(decl_node); // compound literal type
+	Declaration * newDecl = maybeBuild< Declaration >(decl_node); // compound literal type
 	if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
-		return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild<Initializer>(kids) );
+		return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeMoveBuild< Initializer >(kids) );
 	// these types do not have associated type information
 	} else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl )  ) {
-		return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild<Initializer>(kids) );
+		return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeMoveBuild< Initializer >(kids) );
 	} else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl )  ) {
-		return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild<Initializer>(kids) );
+		return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeMoveBuild< Initializer >(kids) );
 	} else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl )  ) {
-		return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild<Initializer>(kids) );
+		return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeMoveBuild< Initializer >(kids) );
 	} else {
 		assert( false );
Index: src/Parser/InitializerNode.cc
===================================================================
--- src/Parser/InitializerNode.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/InitializerNode.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:20:24 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jul  4 15:37:15 2016
-// Update Count     : 15
+// Last Modified On : Mon Aug 15 18:27:02 2016
+// Update Count     : 20
 //
 
@@ -25,8 +25,8 @@
 	: expr( _expr ), aggregate( aggrp ), designator( des ), kids( 0 ), maybeConstructed( true ) {
 	if ( aggrp )
-		kids = dynamic_cast< InitializerNode *>( get_link() );
+		kids = dynamic_cast< InitializerNode * >( get_next() );
 
 	if ( kids != 0 )
-		set_link( 0 );
+		set_last( 0 );
 }
 
@@ -34,8 +34,8 @@
 	: expr( 0 ), aggregate( aggrp ), designator( des ), kids( 0 ), maybeConstructed( true ) {
 	if ( init != 0 )
-		set_link(init);
+		set_last( init );
 
 	if ( aggrp )
-		kids = dynamic_cast< InitializerNode *>( get_link() );
+		kids = dynamic_cast< InitializerNode * >( get_next() );
 
 	if ( kids != 0 )
@@ -45,4 +45,6 @@
 InitializerNode::~InitializerNode() {
 	delete expr;
+	delete designator;
+	delete kids;
 }
 
@@ -58,5 +60,5 @@
 			while ( curdes != 0) {
 				curdes->printOneLine(os);
-				curdes = (ExpressionNode *)(curdes->get_link());
+				curdes = (ExpressionNode *)(curdes->get_next());
 				if ( curdes ) os << ", ";
 			} // while
@@ -72,5 +74,5 @@
 
 	InitializerNode *moreInit;
-	if  ( get_link() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_link() ) ) != 0) )
+	if  ( get_next() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_next() ) ) != 0) )
 		moreInit->printOneLine( os );
 }
@@ -82,22 +84,22 @@
 		//assert( next_init() != 0 );
 
-		std::list< Initializer *> initlist;
-		buildList<Initializer, InitializerNode>( next_init(), initlist );
+		std::list< Initializer * > initlist;
+		buildList< Initializer, InitializerNode >( next_init(), initlist );
 
-		std::list< Expression *> designlist;
+		std::list< Expression * > designlist;
 
 		if ( designator != 0 ) {
-			buildList<Expression, ExpressionNode>( designator, designlist );
+			buildList< Expression, ExpressionNode >( designator, designlist );
 		} // if
 
 		return new ListInit( initlist, designlist, maybeConstructed );
 	} else {
-		std::list< Expression *> designators;
+		std::list< Expression * > designators;
 
 		if ( designator != 0 )
-			buildList<Expression, ExpressionNode>( designator, designators );
+			buildList< Expression, ExpressionNode >( designator, designators );
 
 		if ( get_expression() != 0)
-			return new SingleInit( maybeBuild<Expression>( get_expression() ), designators, maybeConstructed );
+			return new SingleInit( maybeBuild< Expression >( get_expression() ), designators, maybeConstructed );
 	} // if
 
Index: src/Parser/LinkageSpec.cc
===================================================================
--- src/Parser/LinkageSpec.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/LinkageSpec.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -5,12 +5,12 @@
 // file "LICENCE" distributed with Cforall.
 //
-// LinkageSpec.cc -- 
-// 
+// LinkageSpec.cc --
+//
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:22:09 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Aug 19 15:53:05 2015
-// Update Count     : 5
-// 
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sun Aug 21 12:32:53 2016
+// Update Count     : 17
+//
 
 #include <string>
@@ -20,90 +20,57 @@
 #include "Common/SemanticError.h"
 
-LinkageSpec::Type LinkageSpec::fromString( const std::string &stringSpec ) {
-	if ( stringSpec == "\"Cforall\"" ) {
+LinkageSpec::Spec LinkageSpec::fromString( const std::string &spec ) {
+	if ( spec == "\"Cforall\"" ) {
 		return Cforall;
-	} else if ( stringSpec == "\"C\"" ) {
+	} else if ( spec == "\"C\"" ) {
 		return C;
 	} else {
-		throw SemanticError( "Invalid linkage specifier " + stringSpec );
-	}
+		throw SemanticError( "Invalid linkage specifier " + spec );
+	} // if
+	delete &spec;										// allocated by lexer
 }
 
-std::string LinkageSpec::toString( LinkageSpec::Type linkage ) {
-	switch ( linkage ) {
-	  case Intrinsic:
-		return "intrinsic";
-	  case Cforall:
-		return "Cforall";
-	  case C:
-		return "C";
-	  case AutoGen:
-		return "automatically generated";
-	  case Compiler:
-		return "compiler built-in";
-	}
-	assert( false );
-	return "";
+std::string LinkageSpec::toString( LinkageSpec::Spec linkage ) {
+	assert( linkage >= 0 && linkage < LinkageSpec::NoOfSpecs );
+	static const char *linkageKinds[LinkageSpec::NoOfSpecs] = {
+		"intrinsic", "Cforall", "C", "automatically generated", "compiler built-in",
+	};
+	return linkageKinds[linkage];
 }
 
-bool LinkageSpec::isDecoratable( Type t ) {
-	switch ( t ) {
-	  case Intrinsic:
-	  case Cforall:
-	  case AutoGen:
-		return true;
-	  case C:
-	  case Compiler:
-		return false;
-	}
-	assert( false );
-	return false;
+bool LinkageSpec::isDecoratable( Spec spec ) {
+	assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
+	static bool decoratable[LinkageSpec::NoOfSpecs] = {
+		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler
+			true,		true,		false,	true,		false,
+	};
+	return decoratable[spec];
 }
 
-bool LinkageSpec::isGeneratable( Type t ) {
-	switch ( t ) {
-	  case Intrinsic:
-	  case Cforall:
-	  case AutoGen:
-	  case C:
-		return true;
-	  case Compiler:
-		return false;
-	}
-	assert( false );
-	return false;
+bool LinkageSpec::isGeneratable( Spec spec ) {
+	assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
+	static bool generatable[LinkageSpec::NoOfSpecs] = {
+		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler
+			true,		true,		true,	true,		false,
+	};
+	return generatable[spec];
 }
 
-bool LinkageSpec::isOverloadable( Type t ) {
-	return isDecoratable( t );
+bool LinkageSpec::isOverridable( Spec spec ) {
+	assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
+	static bool overridable[LinkageSpec::NoOfSpecs] = {
+		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler
+			true,		false,		false,	true,		false,
+	};
+	return overridable[spec];
 }
 
-
-bool LinkageSpec::isOverridable( Type t ) {
-	switch ( t ) {
-	  case Intrinsic:
-	  case AutoGen:
-		return true;
-	  case Cforall:
-	  case C:
-	  case Compiler:
-		return false;
-	}
-	assert( false );
-	return false;
-}
-
-bool LinkageSpec::isBuiltin( Type t ) {
-	switch ( t ) {
-	  case Cforall:
-	  case AutoGen:
-	  case C:
-		return false;
-	  case Intrinsic:
-	  case Compiler:
-		return true;
-	}
-	assert( false );
-	return false;
+bool LinkageSpec::isBuiltin( Spec spec ) {
+	assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
+	static bool builtin[LinkageSpec::NoOfSpecs] = {
+		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler
+			true,		false,		false,	false,		true,
+	};
+	return builtin[spec];
 }
 
Index: src/Parser/LinkageSpec.h
===================================================================
--- src/Parser/LinkageSpec.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/LinkageSpec.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:24:28 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Tue Aug 18 14:11:55 2015
-// Update Count     : 5
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sat Aug 20 19:22:23 2016
+// Update Count     : 8
 //
 
@@ -20,20 +20,20 @@
 
 struct LinkageSpec {
-	enum Type {
+	enum Spec {
 		Intrinsic,										// C built-in defined in prelude
 		Cforall,										// ordinary
 		C,												// not overloadable, not mangled
 		AutoGen,										// built by translator (struct assignment)
-		Compiler										// gcc internal
+		Compiler,										// gcc internal
+		NoOfSpecs
 	};
   
-	static Type fromString( const std::string & );
-	static std::string toString( Type );
+	static Spec fromString( const std::string & );
+	static std::string toString( Spec );
   
-	static bool isDecoratable( Type );
-	static bool isGeneratable( Type );
-	static bool isOverloadable( Type );
-	static bool isOverridable( Type );
-	static bool isBuiltin( Type );
+	static bool isDecoratable( Spec );
+	static bool isGeneratable( Spec );
+	static bool isOverridable( Spec );
+	static bool isBuiltin( Spec );
 };
 
Index: src/Parser/ParseNode.cc
===================================================================
--- src/Parser/ParseNode.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/ParseNode.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:26:29 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug  7 23:32:47 2016
-// Update Count     : 94
+// Last Modified On : Wed Aug 17 23:14:16 2016
+// Update Count     : 126
 // 
 
@@ -17,52 +17,5 @@
 using namespace std;
 
-// Builder
 int ParseNode::indent_by = 4;
-
-ParseNode::ParseNode() : next( 0 ) {};
-ParseNode::ParseNode( const string *name ) : name( *name ), next( 0 ) { delete name; }
-ParseNode::ParseNode( const string &name ) : name( name ), next( 0 ) { }
-
-ParseNode::~ParseNode() {
-	delete next;
-};
-
-ParseNode *ParseNode::get_last() {
-	ParseNode *current = this;
-
-	while ( current->get_link() != 0 )
-	current = current->get_link();
-
-	return current;
-}
-
-ParseNode *ParseNode::set_link( ParseNode *next_ ) {
-	if ( next_ != 0 ) get_last()->next = next_;
-	return this;
-}
-
-void ParseNode::print( std::ostream &os, int indent ) const {}
-
-
-void ParseNode::printList( std::ostream &os, int indent ) const {
-	print( os, indent );
-
-	if ( next ) {
-		next->printList( os, indent );
-	} // if
-}
-
-ParseNode &ParseNode::operator,( ParseNode &p ) {
-	set_link( &p );
-
-	return *this;
-}
-
-ParseNode *mkList( ParseNode &pn ) {
-	// it just relies on `operator,' to take care of the "arguments" and provides a nice interface to an awful-looking
-	// address-of, rendering, for example (StatementNode *)(&(*$5 + *$7)) into (StatementNode *)mkList(($5, $7))
-	// (although "nice" is probably not the word)
-	return &pn;
-}
 
 // Local Variables: //
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/ParseNode.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 11 12:24:11 2016
-// Update Count     : 443
+// Last Modified On : Sun Aug 28 21:14:51 2016
+// Update Count     : 575
 //
 
@@ -22,12 +22,11 @@
 #include <memory>
 
-#include "Common/utility.h"
 #include "Parser/LinkageSpec.h"
 #include "SynTree/Type.h"
 #include "SynTree/Expression.h"
 #include "SynTree/Statement.h"
-//#include "SynTree/Declaration.h"
+#include "SynTree/Label.h"
+#include "Common/utility.h"
 #include "Common/UniqueName.h"
-#include "SynTree/Label.h"
 
 class StatementNode;
@@ -37,33 +36,37 @@
 class InitializerNode;
 
-// Builder
+//##############################################################################
+
 class ParseNode {
   public:
-	ParseNode();
-	ParseNode( const std::string * );
-	ParseNode( const std::string & );					// for copy constructing subclasses
-	virtual ~ParseNode();
-
-	ParseNode *get_link() const { return next; }
-	ParseNode *get_last();
-	ParseNode *set_link( ParseNode * );
-	void set_next( ParseNode *newlink ) { next = newlink; }
-
-	virtual ParseNode *clone() const { return 0; };
+	ParseNode() {};
+	ParseNode( const std::string *name ) : name( *name ) { assert( false ); delete name; }
+	ParseNode( const std::string &name ) : name( name ) { assert( false ); }
+	virtual ~ParseNode() { delete next; };
+	virtual ParseNode *clone() const = 0;
+
+	ParseNode *get_next() const { return next; }
+	ParseNode *set_next( ParseNode *newlink ) { next = newlink; return this; }
+	ParseNode *get_last() {
+		ParseNode *current;
+		for ( current = this; current->get_next() != 0; current = current->get_next() );
+		return current;
+	}
+	ParseNode *set_last( ParseNode *newlast ) {
+		if ( newlast != 0 ) get_last()->set_next( newlast );
+		return this;
+	}
 
 	const std::string &get_name() const { return name; }
 	void set_name( const std::string &newValue ) { name = newValue; }
 
-	virtual void print( std::ostream &os, int indent = 0 ) const;
-	virtual void printList( std::ostream &os, int indent = 0 ) const;
-
-	ParseNode &operator,( ParseNode & );
-  protected:
+	virtual void print( std::ostream &os, int indent = 0 ) const {}
+	virtual void printList( std::ostream &os, int indent = 0 ) const {}
+  private:
+	static int indent_by;
+
+	ParseNode *next = nullptr;
 	std::string name;
-	static int indent_by;
-	ParseNode *next;
-};
-
-ParseNode *mkList( ParseNode & );
+}; // ParseNode
 
 //##############################################################################
@@ -74,4 +77,5 @@
 	InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
 	~InitializerNode();
+	virtual InitializerNode *clone() const { assert( false ); return nullptr; }
 
 	ExpressionNode *get_expression() const { return expr; }
@@ -92,12 +96,12 @@
 	ExpressionNode *expr;
 	bool aggregate;
-	ExpressionNode *designator; // may be list
+	ExpressionNode *designator;							// may be list
 	InitializerNode *kids;
 	bool maybeConstructed;
-};
-
-//##############################################################################
-
-class ExpressionNode : public ParseNode {
+}; // InitializerNode
+
+//##############################################################################
+
+class ExpressionNode final : public ParseNode {
   public:
 	ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {}
@@ -105,21 +109,25 @@
 	ExpressionNode( const ExpressionNode &other );
 	virtual ~ExpressionNode() {}
-
-	virtual ExpressionNode *clone() const { return 0; }
+	virtual ExpressionNode *clone() const { return expr ? new ExpressionNode( expr->clone() ) : nullptr; }
 
 	bool get_extension() const { return extension; }
 	ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
 
-	virtual void print( std::ostream &os, int indent = 0 ) const {}
-	virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
-
-	virtual Expression *build() const { return expr; }
+	void print( std::ostream &os, int indent = 0 ) const {}
+	void printOneLine( std::ostream &os, int indent = 0 ) const {}
+
+	template<typename T>
+	bool isExpressionType() const {
+		return nullptr != dynamic_cast<T>(expr.get());
+	}
+
+	Expression *build() const { return const_cast<ExpressionNode*>(this)->expr.release(); }
   private:
 	bool extension = false;
-	Expression *expr;
-};
+	std::unique_ptr<Expression> expr;
+}; // ExpressionNode
 
 template< typename T >
-struct maybeBuild_t<Expression, T> {
+struct maybeBuild_t< Expression, T > {
 	static inline Expression * doit( const T *orig ) {
 		if ( orig ) {
@@ -128,25 +136,8 @@
 			return p;
 		} else {
-			return 0;
+			return nullptr;
 		} // if
 	}
 };
-
-//##############################################################################
-
-Expression *build_constantInteger( std::string &str );
-Expression *build_constantFloat( std::string &str );
-Expression *build_constantChar( std::string &str );
-ConstantExpr *build_constantStr( std::string &str );
-
-//##############################################################################
-
-NameExpr *build_varref( const std::string *name, bool labelp = false );
-
-//##############################################################################
-
-Expression *build_typevalue( DeclarationNode *decl );
-
-//##############################################################################
 
 enum class OperKinds {
@@ -154,10 +145,22 @@
 	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,
+	Assign, AtAssn, 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,
+}; // OperKinds
+
+struct LabelNode {
+	std::list< Label > labels;
 };
+
+Expression *build_constantInteger( const std::string &str );
+Expression *build_constantFloat( const std::string &str );
+Expression *build_constantChar( const std::string &str );
+ConstantExpr *build_constantStr( const std::string &str );
+
+NameExpr *build_varref( const std::string *name, bool labelp = false );
+Expression *build_typevalue( DeclarationNode *decl );
 
 Expression *build_cast( DeclarationNode * decl_node, ExpressionNode *expr_node );
@@ -183,31 +186,6 @@
 Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node );
 Expression *build_range( ExpressionNode * low, ExpressionNode *high );
-
-//##############################################################################
-
-Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand );
-
-//##############################################################################
-
-class LabelNode : public ExpressionNode {
-  public:
-	virtual Expression *build() const { return NULL; }
-	virtual LabelNode *clone() const { assert( false ); return new LabelNode( *this ); }
-
-	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; };
-	void append_label( std::string * label ) { labels.push_back( *label ); delete label; }
-  private:
-	std::list< Label > labels;
-};
-
-//##############################################################################
-
+Expression *build_asmexpr( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand );
 Expression *build_valexpr( StatementNode *s );
-
-//##############################################################################
-
 Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids );
 
@@ -218,5 +196,5 @@
 class DeclarationNode : public ParseNode {
   public:
-	enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic };
+	enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic, NoOfQualifier };
 	enum StorageClass { Extern, Static, Auto, Register, Inline, Fortran, Noreturn, Threadlocal, NoStorageClass, };
 	enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary };
@@ -226,6 +204,6 @@
 	enum BuiltinType { Valist };
 
+	static const char *qualifierName[];
 	static const char *storageName[];
-	static const char *qualifierName[];
 	static const char *basicTypeName[];
 	static const char *modifierName[];
@@ -236,8 +214,9 @@
 	static DeclarationNode *newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle = false );
 	static DeclarationNode *newQualifier( Qualifier );
+	static DeclarationNode *newForall( DeclarationNode *);
 	static DeclarationNode *newStorageClass( StorageClass );
 	static DeclarationNode *newBasicType( BasicType );
 	static DeclarationNode *newModifier( Modifier );
-	static DeclarationNode *newForall( DeclarationNode *);
+	static DeclarationNode *newBuiltinType( BuiltinType );
 	static DeclarationNode *newFromTypedef( std::string *);
 	static DeclarationNode *newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields, bool body );
@@ -258,7 +237,11 @@
 	static DeclarationNode *newAttr( std::string *, ExpressionNode *expr );
 	static DeclarationNode *newAttr( std::string *, DeclarationNode *type );
-	static DeclarationNode *newBuiltinType( BuiltinType );
+
+	DeclarationNode();
+	~DeclarationNode();
+	DeclarationNode *clone() const;
 
 	DeclarationNode *addQualifiers( DeclarationNode *);
+	void checkQualifiers( const TypeData *, const TypeData * );
 	DeclarationNode *copyStorageClasses( DeclarationNode *);
 	DeclarationNode *addType( DeclarationNode *);
@@ -275,5 +258,5 @@
 	DeclarationNode *addNewArray( DeclarationNode *array );
 	DeclarationNode *addParamList( DeclarationNode *list );
-	DeclarationNode *addIdList( DeclarationNode *list );       // old-style functions
+	DeclarationNode *addIdList( DeclarationNode *list ); // old-style functions
 	DeclarationNode *addInitializer( InitializerNode *init );
 
@@ -284,7 +267,8 @@
 	DeclarationNode *cloneBaseType( DeclarationNode *newdecl );
 
-	DeclarationNode *appendList( DeclarationNode * );
-
-	DeclarationNode *clone() const;
+	DeclarationNode *appendList( DeclarationNode *node ) {
+		return (DeclarationNode *)set_last( node );
+	}
+
 	void print( std::ostream &os, int indent = 0 ) const;
 	void printList( std::ostream &os, int indent = 0 ) const;
@@ -295,27 +279,28 @@
 	bool get_hasEllipsis() const;
 	const std::string &get_name() const { return name; }
-	LinkageSpec::Type get_linkage() const { return linkage; }
+	LinkageSpec::Spec get_linkage() const { return linkage; }
 	DeclarationNode *extractAggregate() const;
-	ExpressionNode *get_enumeratorValue() const { return enumeratorValue; }
+	bool has_enumeratorValue() const { return (bool)enumeratorValue; }
+	ExpressionNode *consume_enumeratorValue() const { return const_cast<DeclarationNode*>(this)->enumeratorValue.release(); }
 
 	bool get_extension() const { return extension; }
 	DeclarationNode *set_extension( bool exten ) { extension = exten; return this; }
-
-	DeclarationNode();
-	~DeclarationNode();
-  private:
-	StorageClass buildStorageClass() const;
-	bool buildFuncSpecifier( StorageClass key ) const;
+  public:
+	// StorageClass buildStorageClass() const;
+	// bool buildFuncSpecifier( StorageClass key ) const;
 
 	TypeData *type;
 	std::string name;
-	std::list< StorageClass > storageClasses;
+	// std::list< StorageClass > storageClasses;
+	StorageClass storageClass;
+	bool isInline, isNoreturn;
 	std::list< std::string > attributes;
 	ExpressionNode *bitfieldWidth;
-	ExpressionNode *enumeratorValue;
+	std::unique_ptr<ExpressionNode> enumeratorValue;
 	InitializerNode *initializer;
 	bool hasEllipsis;
-	LinkageSpec::Type linkage;
+	LinkageSpec::Spec linkage;
 	bool extension = false;
+	std::string error;
 
 	static UniqueName anonymous;
@@ -323,85 +308,43 @@
 
 Type *buildType( TypeData *type );
-
-//##############################################################################
-
-class StatementNode : public ParseNode {
-  public:
-	enum Type { Exp,   If,        Switch,  Case,    Default,  Choose,   Fallthru,
-				While, Do,        For,
-				Goto,  Continue,  Break,   Return,  Throw,
-				Try,   Catch,     Finally, Asm,
-				Decl
-	};
-
-	StatementNode();
-	StatementNode( const std::string *name );
-	StatementNode( Type t, ExpressionNode *control = 0, StatementNode *block = 0 );
-	StatementNode( Type t, std::string *target );
+//Type::Qualifiers buildQualifiers( const TypeData::Qualifiers & qualifiers );
+
+static inline Type * maybeMoveBuildType( const DeclarationNode *orig ) {
+	Type* ret = orig ? orig->buildType() : nullptr;
+	delete orig;
+	return ret;
+}
+
+//##############################################################################
+
+class StatementNode final : public ParseNode {
+  public:
+	StatementNode() { stmt = nullptr; }
+	StatementNode( Statement *stmt ) : stmt( stmt ) {}
 	StatementNode( DeclarationNode *decl );
-
-	~StatementNode();
-
-	static StatementNode *newCatchStmt( DeclarationNode *d = 0, StatementNode *s = 0, bool catchRestP = false );
-
-	StatementNode *set_block( StatementNode *b ) { block = b; return this; }
-	StatementNode *get_block() const { return block; }
-
-	void set_control( ExpressionNode *c ) { control = c; }
-	ExpressionNode *get_control() const { return control; }
-
-	StatementNode::Type get_type() const { return type; }
-
-	virtual StatementNode *add_label( const std::string * );
-	virtual std::list<std::string> get_labels() const { return labels; }
-
-	void addDeclaration( DeclarationNode *newDecl ) { decl = newDecl; }
-	void setCatchRest( bool newVal ) { isCatchRest = newVal; }
-
-	std::string get_target() const;
-
-	// StatementNode *add_controlexp( ExpressionNode * );
-	StatementNode *append_block( StatementNode * );
+	virtual ~StatementNode() {}
+
+	virtual StatementNode *clone() const final { assert( false ); return nullptr; }
+	Statement *build() const { return const_cast<StatementNode*>(this)->stmt.release(); }
+
+	virtual StatementNode *add_label( const std::string * name ) {
+		stmt->get_labels().emplace_back( *name );
+		delete name;
+		return this;
+	}
+
 	virtual StatementNode *append_last_case( StatementNode * );
-
-	void print( std::ostream &os, int indent = 0) const;
-	virtual StatementNode *clone() const;
-	virtual Statement *build() const;
-  private:
-	static const char *StType[];
-	Type type;
-	ExpressionNode *control;
-	StatementNode *block;
-	std::list<std::string> labels;
-	std::string *target;				// target label for jump statements
-	DeclarationNode *decl;
-	bool isCatchRest;
-}; // StatementNode
-
-class StatementNode2 : public StatementNode {
-  public:
-	StatementNode2() {}
-	StatementNode2( Statement *stmt ) : stmt( stmt ) {}
-	virtual ~StatementNode2() {}
-
-	virtual StatementNode2 *clone() const { assert( false ); return nullptr; }
-	virtual Statement *build() const { return stmt; }
-
-	virtual StatementNode2 *add_label( const std::string * name ) {
-		stmt->get_labels().emplace_back( *name );
-		return this;
-	}
-	virtual StatementNode *append_last_case( StatementNode * );
-	virtual std::list<std::string> get_labels() const { assert( false ); return StatementNode::get_labels(); }
 
 	virtual void print( std::ostream &os, int indent = 0 ) {}
 	virtual void printList( std::ostream &os, int indent = 0 ) {}
   private:
-	Statement *stmt;
+	std::unique_ptr<Statement> stmt;
 }; // StatementNode
+
+Statement *build_expr( ExpressionNode *ctl );
 
 struct ForCtl {
 	ForCtl( ExpressionNode *expr, ExpressionNode *condition, ExpressionNode *change ) :
-		init( new StatementNode( StatementNode::Exp, expr ) ), condition( condition ), change( change ) {}
+		init( new StatementNode( build_expr( expr ) ) ), condition( condition ), change( change ) {}
 	ForCtl( DeclarationNode *decl, ExpressionNode *condition, ExpressionNode *change ) :
 		init( new StatementNode( decl ) ), condition( condition ), change( change ) {}
@@ -412,5 +355,4 @@
 };
 
-Statement *build_expr( ExpressionNode *ctl );
 Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt );
 Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt );
@@ -419,42 +361,14 @@
 Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind = false );
 Statement *build_for( ForCtl *forctl, StatementNode *stmt );
-Statement *build_branch( std::string identifier, BranchStmt::Type kind );
+Statement *build_branch( BranchStmt::Type kind );
+Statement *build_branch( std::string *identifier, BranchStmt::Type kind );
 Statement *build_computedgoto( ExpressionNode *ctl );
 Statement *build_return( ExpressionNode *ctl );
 Statement *build_throw( ExpressionNode *ctl );
-
-//##############################################################################
-
-class CompoundStmtNode : public StatementNode {
-  public:
-	CompoundStmtNode();
-	CompoundStmtNode( const std::string * );
-	CompoundStmtNode( StatementNode * );
-	~CompoundStmtNode();
-
-	void add_statement( StatementNode * );
-
-	void print( std::ostream &os, int indent = 0 ) const;
-	virtual Statement *build() const;
-  private:
-	StatementNode *first, *last;
-};
-
-//##############################################################################
-
-class AsmStmtNode : public StatementNode {
-  public:
-	AsmStmtNode( Type, bool voltile, ConstantExpr *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ExpressionNode *clobber = 0, LabelNode *gotolabels = 0 );
-	~AsmStmtNode();
-
-	void print( std::ostream &os, int indent = 0 ) const;
-	Statement *build() const;
-  private:
-	bool voltile;
-	ConstantExpr *instruction;
-	ExpressionNode *output, *input;
-	ExpressionNode *clobber;
-	std::list< Label > gotolabels;
-};
+Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt );
+Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny = false );
+Statement *build_finally( StatementNode *stmt );
+Statement *build_compound( StatementNode *first );
+Statement *build_asmstmt( bool voltile, ConstantExpr *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ExpressionNode *clobber = 0, LabelNode *gotolabels = 0 );
 
 //##############################################################################
@@ -463,11 +377,11 @@
 void buildList( const NodeType *firstNode, std::list< SynTreeType * > &outputList ) {
 	SemanticError errors;
-	std::back_insert_iterator< std::list< SynTreeType *> > out( outputList );
+	std::back_insert_iterator< std::list< SynTreeType * > > out( outputList );
 	const NodeType *cur = firstNode;
 
 	while ( cur ) {
 		try {
-//			SynTreeType *result = dynamic_cast< SynTreeType *>( maybeBuild<typename std::result_of<decltype(&NodeType::build)(NodeType)>::type>( cur ) );
-			SynTreeType *result = dynamic_cast< SynTreeType *>( maybeBuild<typename std::pointer_traits<decltype(cur->build())>::element_type>( cur ) );
+//			SynTreeType *result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::result_of< decltype(&NodeType::build)(NodeType)>::type >( cur ) );
+			SynTreeType *result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::pointer_traits< decltype(cur->build())>::element_type >( cur ) );
 			if ( result ) {
 				*out++ = result;
@@ -477,5 +391,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< NodeType *>( cur->get_link() );
+		cur = dynamic_cast< NodeType * >( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
@@ -486,6 +400,13 @@
 // in DeclarationNode.cc
 void buildList( const DeclarationNode *firstNode, std::list< Declaration * > &outputList );
-void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType *> &outputList );
+void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType * > &outputList );
 void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList );
+
+template< typename SynTreeType, typename NodeType >
+void buildMoveList( const NodeType *firstNode, std::list< SynTreeType * > &outputList ) {
+	buildList(firstNode, outputList);
+	delete firstNode;
+}
+
 
 #endif // PARSENODE_H
Index: c/Parser/Parser.cc
===================================================================
--- src/Parser/Parser.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ 	(revision )
@@ -1,70 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// Parser.cc -- 
-//
-// Author           : Rodolfo G. Esteves
-// Created On       : Sat May 16 14:54:28 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Mar 21 18:04:47 2016
-// Update Count     : 5
-// 
-
-#include "Parser.h"
-#include "lex.h"
-#include "parser.h"
-#include "TypedefTable.h"
-
-// global variables in cfa.y
-extern int yyparse(void);
-extern int yydebug;
-extern LinkageSpec::Type linkage;
-extern TypedefTable typedefTable;
-extern DeclarationNode *theTree;
-
-Parser *Parser::theParser = 0;
-
-Parser::Parser(): parseTree( 0 ), parseStatus( 1 ) {}
-
-Parser::~Parser() {
-	delete parseTree;
-}
-
-Parser &Parser::get_parser() {
-	if ( theParser == 0 ) {
-		theParser = new Parser;
-	} // if
-	return *theParser;
-}
-
-void Parser::parse( FILE *input ) {
-	extern FILE *yyin;
-	yyin = input;
-	extern int yylineno;
-	yylineno = 1;
-	typedefTable.enterScope();
-	parseStatus = yyparse();
-	parseTree = theTree;
-}
-
-void Parser::set_debug( bool debug ) {
-	yydebug = debug;
-}
-
-void Parser::set_linkage( LinkageSpec::Type linkage ) {
-	::linkage = linkage;
-}
-
-void Parser::freeTree() {
-	delete parseTree;
-	parseTree = 0;
-}
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: c/Parser/Parser.h
===================================================================
--- src/Parser/Parser.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ 	(revision )
@@ -1,56 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// Parser.h -- 
-//
-// Author           : Rodolfo G. Esteves
-// Created On       : Sat May 16 14:56:50 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat May 16 14:58:56 2015
-// Update Count     : 2
-//
-
-#ifndef PARSER_H
-#define PARSER_H
-
-#include <cstdio>
-
-#include "Parser/ParseNode.h"
-#include "LinkageSpec.h"
-
-class Parser {
-  public:
-	static Parser &get_parser();
-
-	// do the actual parse
-	void parse( FILE *input );
-
-	// accessors to return the result of the parse
-	DeclarationNode *get_parseTree() const { return parseTree; }
-	int get_parseStatus() const { return parseStatus; }
-
-	// mutators to control parse options
-	void set_debug( bool debug );
-	void set_linkage( LinkageSpec::Type linkage );
-
-	// free the parse tree without actually destroying the parser
-	void freeTree();
-
-	~Parser();
-  private:
-	Parser();
-	static Parser *theParser;
-	DeclarationNode *parseTree;
-	int parseStatus;
-};
-
-#endif // PARSER_H
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/StatementNode.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 11 16:19:45 2016
-// Update Count     : 210
+// Last Modified On : Sun Aug 21 11:59:37 2016
+// Update Count     : 325
 //
 
@@ -26,315 +26,48 @@
 using namespace std;
 
-const char *StatementNode::StType[] = {
-	"Exp",   "If",       "Switch", "Case",    "Default",  "Choose",   "Fallthru",
-	"While", "Do",       "For",
-	"Goto",  "Continue", "Break",  "Return",  "Throw",
-	"Try",   "Catch",    "Finally", "Asm",
-	"Decl"
-};
-
-StatementNode::StatementNode() : ParseNode(), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {}
-
-StatementNode::StatementNode( const string *name ) : ParseNode( name ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {}
-
-StatementNode::StatementNode( DeclarationNode *decl ) : type( Decl ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), isCatchRest ( false ) {
+
+StatementNode::StatementNode( DeclarationNode *decl ) {
 	if ( decl ) {
-		if ( DeclarationNode *agg = decl->extractAggregate() ) {
-			this->decl = agg;
-			StatementNode *nextStmt = new StatementNode;
-			nextStmt->type = Decl;
-			nextStmt->decl = decl;
-			next = nextStmt;
-			if ( decl->get_link() ) {
-				next->set_next( new StatementNode( dynamic_cast< DeclarationNode* >( decl->get_link() ) ) );
+		DeclarationNode *agg = decl->extractAggregate();
+		if ( agg ) {
+			StatementNode *nextStmt = new StatementNode( new DeclStmt( noLabels, maybeBuild< Declaration >( decl ) ) );
+			set_next( nextStmt );
+			if ( decl->get_next() ) {
+				get_next()->set_next( new StatementNode( dynamic_cast< DeclarationNode * >(decl->get_next()) ) );
 				decl->set_next( 0 );
 			} // if
 		} else {
-			if ( decl->get_link() ) {
-				next = new StatementNode( dynamic_cast< DeclarationNode* >( decl->get_link() ) );
+			if ( decl->get_next() ) {
+				set_next(new StatementNode( dynamic_cast< DeclarationNode * >( decl->get_next() ) ) );
 				decl->set_next( 0 );
 			} // if
-			this->decl = decl;
+			agg = decl;
 		} // if
+		stmt.reset( new DeclStmt( noLabels, maybeMoveBuild< Declaration >(agg) ) );
+	} else {
+		assert( false );
 	} // if
 }
 
-StatementNode::StatementNode( Type t, ExpressionNode *ctrl_label, StatementNode *block ) : type( t ), control( ctrl_label ), block( block ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {
-	this->control = ( t == Default ) ? 0 : control;
-}
-
-StatementNode::StatementNode( Type t, string *target ) : type( t ), control( 0 ), block( 0 ), labels( 0 ), target( target ), decl( 0 ), isCatchRest ( false ) {}
-
-StatementNode::~StatementNode() {
-	delete control;
-	delete block;
-	delete target;
-	delete decl;
-}
-
-StatementNode * StatementNode::newCatchStmt( DeclarationNode *d, StatementNode *s, bool catchRestP ) {
-	StatementNode *ret = new StatementNode( StatementNode::Catch, 0, s );
-	ret->addDeclaration( d );
-	ret->setCatchRest( catchRestP );
-
-	return ret;
-}
-
-std::string StatementNode::get_target() const{
-	if ( target )
-		return *target;
-
-	return string("");
-}
-
-StatementNode * StatementNode::clone() const {
-	StatementNode *newnode = new StatementNode( type, maybeClone( control ), maybeClone( block ) );
-	if ( target ) {
-		newnode->target = new string( *target );
-	} else {
-		newnode->target = 0;
-	} // if
-	newnode->decl = maybeClone( decl );
-	return newnode;
-}
-
-StatementNode *StatementNode::add_label( const std::string *l ) {
-	if ( l != 0 ) {
-		labels.push_front( *l );
-		delete l;
-	} // if
-	return this;
-}
-
-StatementNode *StatementNode::append_block( StatementNode *stmt ) {
-	if ( stmt != 0 ) {
-		if ( block == 0 )
-			block = stmt;
-		else
-			block->set_link( stmt );
-	} // if
-	return this;
-}
-
 StatementNode *StatementNode::append_last_case( StatementNode *stmt ) {
-	assert( false );
-	if ( stmt != 0 ) {
-		StatementNode *next = ( StatementNode *)get_link();
-		if ( next && ( next->get_type() == StatementNode::Case || next->get_type() == StatementNode::Default ) )
-			next->append_last_case( stmt );
-		else
-			if ( block == 0 )
-				block = stmt;
-			else
-				block->set_link( stmt );
-	} // if
-	return this;
-}
-
-StatementNode *StatementNode2::append_last_case( StatementNode *stmt ) {
 	StatementNode *prev = this;
-	for ( StatementNode * curr = prev; curr != nullptr; curr = (StatementNode *)curr->get_link() ) {
-		StatementNode2 *node = dynamic_cast<StatementNode2 *>(curr);
-		assert( node );
-		assert( dynamic_cast<CaseStmt *>(node->stmt) );
+	// find end of list and maintain previous pointer
+	for ( StatementNode * curr = prev; curr != nullptr; curr = (StatementNode *)curr->get_next() ) {
+		StatementNode *node = safe_dynamic_cast< StatementNode * >(curr);
+		assert( dynamic_cast< CaseStmt * >(node->stmt.get()) );
 		prev = curr;
 	} // for
-	StatementNode2 *node = dynamic_cast<StatementNode2 *>(prev);
-	std::list<Statement *> stmts;
-	buildList( stmt, stmts );
-	CaseStmt * caseStmt;
-	caseStmt = dynamic_cast<CaseStmt *>(node->stmt);
+	// convert from StatementNode list to Statement list
+	StatementNode *node = dynamic_cast< StatementNode * >(prev);
+	std::list< Statement * > stmts;
+	buildMoveList( stmt, stmts );
+	// splice any new Statements to end of current Statements
+	CaseStmt * caseStmt = dynamic_cast< CaseStmt * >(node->stmt.get());
 	caseStmt->get_statements().splice( caseStmt->get_statements().end(), stmts );
 	return this;
 }
 
-void StatementNode::print( std::ostream &os, int indent ) const {
-	if ( ! labels.empty() ) {
-		std::list<std::string>::const_iterator i;
-
-		os << string( indent, ' ' );
-		for ( i = labels.begin(); i != labels.end(); i++ )
-			os << *i << ":";
-		os << endl;
-	} // if
-
-	switch ( type ) {
-	  case Decl:
-		decl->print( os, indent );
-		break;
-	  case Exp:
-		if ( control ) {
-			os << string( indent, ' ' );
-			control->print( os, indent );
-			os << endl;
-		} else
-			os << string( indent, ' ' ) << "Null Statement" << endl;
-		break;
-	  default:
-		os << string( indent, ' ' ) << StatementNode::StType[type] << endl;
-		if ( type == Catch ) {
-			if ( decl ) {
-				os << string( indent + ParseNode::indent_by, ' ' ) << "Declaration: " << endl;
-				decl->print( os, indent + 2 * ParseNode::indent_by );
-			} else if ( isCatchRest ) {
-				os << string( indent + ParseNode::indent_by, ' ' ) << "Catches the rest " << endl;
-			} else {
-				; // should never reach here
-			} // if
-		} // if
-		if ( control ) {
-			os << string( indent + ParseNode::indent_by, ' ' ) << "Control: " << endl;
-			control->printList( os, indent + 2 * ParseNode::indent_by );
-		} // if
-		if ( block ) {
-			os << string( indent + ParseNode::indent_by, ' ' ) << "Cases: " << endl;
-			block->printList( os, indent + 2 * ParseNode::indent_by );
-		} // if
-		if ( target ) {
-			os << string( indent + ParseNode::indent_by, ' ' ) << "Target: " << get_target() << endl;
-		} // if
-		break;
-	} // switch
-}
-
-Statement *StatementNode::build() const {
-	std::list<Statement *> branches;
-	std::list<Expression *> exps;
-	std::list<Label> labs;
-
-	if ( ! labels.empty() ) {
-		std::back_insert_iterator< std::list<Label> > lab_it( labs );
-		copy( labels.begin(), labels.end(), lab_it );
-	} // if
-
-	// try {
-	buildList<Statement, StatementNode>( get_block(), branches );
-
-	switch ( type ) {
-	  case Decl:
-		return new DeclStmt( labs, maybeBuild< Declaration >( decl ) );
-	  case Exp:
-		{
-			Expression *e = maybeBuild< Expression >( get_control() );
-
-			if ( e )
-				return new ExprStmt( labs, e );
-			else
-				return new NullStmt( labs );
-		}
-		assert( false );
-	  case If:
-		// {
-		// 	Statement *thenb = 0, *elseb = 0;
-		// 	assert( branches.size() >= 1 );
-
-		// 	thenb = branches.front();
-		// 	branches.pop_front();
-		// 	if ( ! branches.empty() ) {
-		// 		elseb = branches.front();
-		// 		branches.pop_front();
-		// 	} // if
-		// 	return new IfStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), thenb, elseb );
-		// }
-		assert( false );
-	  case Switch:
-		// return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
-		assert( false );
-	  case Case:
-		//return new CaseStmt( labs, maybeBuild<Expression>(get_control() ), branches );
-		assert( false );
-	  case Default:
-		//return new CaseStmt( labs, 0, branches, true );
-		assert( false );
-	  case While:
-		// assert( branches.size() == 1 );
-		// return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front() );
-		assert( false );
-	  case Do:
-		// assert( branches.size() == 1 );
-		// return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front(), true );
-		assert( false );
-	  case For:
-	  	// {
-	  	// 	assert( branches.size() == 1 );
-
-	  	// 	ForCtlExprNode *ctl = dynamic_cast<ForCtlExprNode *>( get_control() );
-	  	// 	assert( ctl != 0 );
-
-	  	// 	std::list<Statement *> init;
-	  	// 	if ( ctl->get_init() != 0 ) {
-	  	// 		buildList( ctl->get_init(), init );
-	  	// 	} // if
-
-	  	// 	Expression *cond = 0;
-	  	// 	if ( ctl->get_condition() != 0 )
-	  	// 		cond = notZeroExpr( maybeBuild<Expression>(ctl->get_condition()) );
-
-	  	// 	Expression *incr = 0;
-	  	// 	if ( ctl->get_change() != 0 )
-	  	// 		incr = maybeBuild<Expression>(ctl->get_change());
-
-	  	// 	return new ForStmt( labs, init, cond, incr, branches.front() );
-	  	// }
-		assert( false );
-	  case Goto:
-		// {
-		// 	if ( get_target() == "" ) {					// computed goto
-		// 		assert( get_control() != 0 );
-		// 		return new BranchStmt( labs, maybeBuild<Expression>(get_control()), BranchStmt::Goto );
-		// 	} // if
-
-		// 	return new BranchStmt( labs, get_target(), BranchStmt::Goto );
-		// }
-		assert( false );
-	  case Break:
-		// return new BranchStmt( labs, get_target(), BranchStmt::Break );
-		assert( false );
-	  case Continue:
-		// return new BranchStmt( labs, get_target(), BranchStmt::Continue );
-		assert( false );
-	  case Return:
-	  case Throw :
-		// buildList( get_control(), exps );
-		// if ( exps.size() ==0 )
-		// 	return new ReturnStmt( labs, 0, type == Throw );
-		// if ( exps.size() > 0 )
-		// 	return new ReturnStmt( labs, exps.back(), type == Throw );
-		assert( false );
-	  case Try:
-		{
-			assert( branches.size() >= 0 );
-			CompoundStmt *tryBlock = dynamic_cast<CompoundStmt *>( branches.front());
-			branches.pop_front();
-			FinallyStmt *finallyBlock = 0;
-			if ( ( finallyBlock = dynamic_cast<FinallyStmt *>( branches.back())) ) {
-				branches.pop_back();
-			} // if
-			return new TryStmt( labs, tryBlock, branches, finallyBlock );
-		}
-	  case Catch:
-		{
-			assert( branches.size() == 1 );
-
-			return new CatchStmt( labs, maybeBuild< Declaration >( decl ), branches.front(), isCatchRest );
-		}
-	  case Finally:
-		{
-			assert( branches.size() == 1 );
-			CompoundStmt *block = dynamic_cast<CompoundStmt *>( branches.front() );
-			assert( block != 0 );
-
-			return new FinallyStmt( labs, block );
-		}
-	  case Asm:
-		assert( false );
-	  default:
-		// shouldn't be here
-		return 0;
-	} // switch
-}
-
 Statement *build_expr( ExpressionNode *ctl ) {
-	Expression *e = maybeBuild< Expression >( ctl );
+	Expression *e = maybeMoveBuild< Expression >( ctl );
 
 	if ( e )
@@ -346,57 +79,57 @@
 Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt ) {
 	Statement *thenb, *elseb = 0;
-	std::list<Statement *> branches;
-	buildList<Statement, StatementNode>( then_stmt, branches );
+	std::list< Statement * > branches;
+	buildMoveList< Statement, StatementNode >( then_stmt, branches );
 	assert( branches.size() == 1 );
 	thenb = branches.front();
 
 	if ( else_stmt ) {
-		std::list<Statement *> branches;
-		buildList<Statement, StatementNode>( else_stmt, branches );
+		std::list< Statement * > branches;
+		buildMoveList< Statement, StatementNode >( else_stmt, branches );
 		assert( branches.size() == 1 );
 		elseb = branches.front();
 	} // if
-	return new IfStmt( noLabels, notZeroExpr( maybeBuild<Expression>(ctl) ), thenb, elseb );
+	return new IfStmt( noLabels, notZeroExpr( maybeMoveBuild< Expression >(ctl) ), thenb, elseb );
 }
 
 Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt ) {
-	std::list<Statement *> branches;
-	buildList<Statement, StatementNode>( stmt, branches );
+	std::list< Statement * > branches;
+	buildMoveList< Statement, StatementNode >( stmt, branches );
 	assert( branches.size() >= 0 );						// size == 0 for switch (...) {}, i.e., no declaration or statements
-	return new SwitchStmt( noLabels, maybeBuild<Expression>(ctl), branches );
+	return new SwitchStmt( noLabels, maybeMoveBuild< Expression >(ctl), branches );
 }
 Statement *build_case( ExpressionNode *ctl ) {
-	std::list<Statement *> branches;
-	return new CaseStmt( noLabels, maybeBuild<Expression>(ctl), branches );
+	std::list< Statement * > branches;
+	return new CaseStmt( noLabels, maybeMoveBuild< Expression >(ctl), branches );
 }
 Statement *build_default() {
-	std::list<Statement *> branches;
+	std::list< Statement * > branches;
 	return new CaseStmt( noLabels, nullptr, branches, true );
 }
 
 Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind ) {
-	std::list<Statement *> branches;
-	buildList<Statement, StatementNode>( stmt, branches );
-	assert( branches.size() == 1 );
-	return new WhileStmt( noLabels, notZeroExpr( maybeBuild<Expression>(ctl) ), branches.front(), kind );
+	std::list< Statement * > branches;
+	buildMoveList< Statement, StatementNode >( stmt, branches );
+	assert( branches.size() == 1 );
+	return new WhileStmt( noLabels, notZeroExpr( maybeMoveBuild< Expression >(ctl) ), branches.front(), kind );
 }
 
 Statement *build_for( ForCtl *forctl, StatementNode *stmt ) {
-	std::list<Statement *> branches;
-	buildList<Statement, StatementNode>( stmt, branches );
-	assert( branches.size() == 1 );
-
-	std::list<Statement *> init;
+	std::list< Statement * > branches;
+	buildMoveList< Statement, StatementNode >( stmt, branches );
+	assert( branches.size() == 1 );
+
+	std::list< Statement * > init;
 	if ( forctl->init != 0 ) {
-		buildList( forctl->init, init );
+		buildMoveList( forctl->init, init );
 	} // if
 
 	Expression *cond = 0;
 	if ( forctl->condition != 0 )
-		cond = notZeroExpr( maybeBuild<Expression>(forctl->condition) );
+		cond = notZeroExpr( maybeMoveBuild< Expression >(forctl->condition) );
 
 	Expression *incr = 0;
 	if ( forctl->change != 0 )
-		incr = maybeBuild<Expression>(forctl->change);
+		incr = maybeMoveBuild< Expression >(forctl->change);
 
 	delete forctl;
@@ -404,126 +137,63 @@
 }
 
-Statement *build_branch( std::string identifier, BranchStmt::Type kind ) {
-	return new BranchStmt( noLabels, identifier, kind );
+Statement *build_branch( BranchStmt::Type kind ) {
+	Statement * ret = new BranchStmt( noLabels, "", kind );
+	return ret;
+}
+Statement *build_branch( std::string *identifier, BranchStmt::Type kind ) {
+	Statement * ret = new BranchStmt( noLabels, *identifier, kind );
+	delete identifier; 									// allocated by lexer
+	return ret;
 }
 Statement *build_computedgoto( ExpressionNode *ctl ) {
-	return new BranchStmt( noLabels, maybeBuild<Expression>(ctl), BranchStmt::Goto );
+	return new BranchStmt( noLabels, maybeMoveBuild< Expression >(ctl), BranchStmt::Goto );
 }
 
 Statement *build_return( ExpressionNode *ctl ) {
-	std::list<Expression *> exps;
-	buildList( ctl, exps );
+	std::list< Expression * > exps;
+	buildMoveList( ctl, exps );
 	return new ReturnStmt( noLabels, exps.size() > 0 ? exps.back() : nullptr );
 }
 Statement *build_throw( ExpressionNode *ctl ) {
-	std::list<Expression *> exps;
-	buildList( ctl, exps );
-	return new ReturnStmt( noLabels, exps.size() > 0 ? exps.back() : nullptr, true );
-}
-
-
-CompoundStmtNode::CompoundStmtNode() : first( 0 ), last( 0 ) {}
-
-CompoundStmtNode::CompoundStmtNode( const string *name_ ) : StatementNode( name_ ), first( 0 ), last( 0 ) {}
-
-CompoundStmtNode::CompoundStmtNode( StatementNode *stmt ) : first( stmt ) {
-	if ( first ) {
-		last = ( StatementNode *)( stmt->get_last());
-	} else {
-		last = 0;
-	} // if
-}
-
-CompoundStmtNode::~CompoundStmtNode() {
-	delete first;
-}
-
-void CompoundStmtNode::add_statement( StatementNode *stmt ) {
-	if ( stmt != 0 ) {
-		last->set_link( stmt );
-		last = ( StatementNode *)( stmt->get_link());
-	} // if
-}
-
-void CompoundStmtNode::print( ostream &os, int indent ) const {
-	if ( first ) {
-		first->printList( os, indent+2 );
-	} // if
-}
-
-Statement *CompoundStmtNode::build() const {
-	std::list<Label> labs;
-	const std::list<std::string> &labels = get_labels();
-
-	if ( ! labels.empty() ) {
-		std::back_insert_iterator< std::list<Label> > lab_it( labs );
-		copy( labels.begin(), labels.end(), lab_it );
-	} // if
-
-	CompoundStmt *cs = new CompoundStmt( labs );
-	buildList( first, cs->get_kids() );
+	std::list< Expression * > exps;
+	buildMoveList( ctl, exps );
+	assertf( exps.size() < 2, "This means we are leaking memory");
+	return new ReturnStmt( noLabels, !exps.empty() ? exps.back() : nullptr, true );
+}
+
+Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt ) {
+	std::list< Statement * > branches;
+	buildMoveList< Statement, StatementNode >( catch_stmt, branches );
+	CompoundStmt *tryBlock = safe_dynamic_cast< CompoundStmt * >(maybeMoveBuild< Statement >(try_stmt));
+	FinallyStmt *finallyBlock = dynamic_cast< FinallyStmt * >(maybeMoveBuild< Statement >(finally_stmt) );
+	return new TryStmt( noLabels, tryBlock, branches, finallyBlock );
+}
+Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny ) {
+	std::list< Statement * > branches;
+	buildMoveList< Statement, StatementNode >( stmt, branches );
+	assert( branches.size() == 1 );
+	return new CatchStmt( noLabels, maybeMoveBuild< Declaration >(decl), branches.front(), catchAny );
+}
+Statement *build_finally( StatementNode *stmt ) {
+	std::list< Statement * > branches;
+	buildMoveList< Statement, StatementNode >( stmt, branches );
+	assert( branches.size() == 1 );
+	return new FinallyStmt( noLabels, dynamic_cast< CompoundStmt * >( branches.front() ) );
+}
+
+Statement *build_compound( StatementNode *first ) {
+	CompoundStmt *cs = new CompoundStmt( noLabels );
+	buildMoveList( first, cs->get_kids() );
 	return cs;
 }
 
-
-AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantExpr *instruction, ExpressionNode *output, ExpressionNode *input, ExpressionNode *clobber, LabelNode *gotolabels ) :
-	StatementNode( t ), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ) {
-	if ( gotolabels ) {
-		this->gotolabels = gotolabels->get_labels();
-		delete gotolabels;
-	} // if
-}
-
-AsmStmtNode::~AsmStmtNode() {
-	delete output; delete input; delete clobber;
-}
-
-void AsmStmtNode::print( std::ostream &os, int indent ) const {
-	StatementNode::print( os, indent );					// print statement labels
-	os << string( indent + ParseNode::indent_by, ' ' ) << "volatile:" << voltile << endl;
-	if ( instruction ) {
-		os << string( indent + ParseNode::indent_by, ' ' ) << "Instruction:" << endl;
-//		instruction->printList( os, indent + 2 * ParseNode::indent_by );
-	} // if
-	if ( output ) {
-		os << string( indent + ParseNode::indent_by, ' ' ) << "Output:" << endl;
-		output->printList( os, indent + 2 * ParseNode::indent_by );
-	} // if
-	if ( input ) {
-		os << string( indent + ParseNode::indent_by, ' ' ) << "Input:" << endl;
-		input->printList( os, indent + 2 * ParseNode::indent_by );
-	} // if
-	if ( clobber ) {
-		os << string( indent + ParseNode::indent_by, ' ' ) << "Clobber:" << endl;
-//		clobber->printList( os, indent + 2 * ParseNode::indent_by );
-	} // if
-	if ( ! gotolabels.empty() ) {
-		os << string( indent + ParseNode::indent_by, ' ' ) << "Goto Labels:" << endl;
-		os << string( indent + 2 * ParseNode::indent_by, ' ' );
-		for ( std::list<Label>::const_iterator i = gotolabels.begin();; ) {
-			os << *i;
-			i++;
-		  if ( i == gotolabels.end() ) break;
-			os << ", ";
-		}
-		os << endl;
-	} // if
-}
-
-Statement *AsmStmtNode::build() const {
-	std::list<Label> labs;
-
-	if ( ! get_labels().empty() ) {
-		std::back_insert_iterator< std::list<Label> > lab_it( labs );
-		copy( get_labels().begin(), get_labels().end(), lab_it );
-	} // if
-
+Statement *build_asmstmt( bool voltile, ConstantExpr *instruction, ExpressionNode *output, ExpressionNode *input, ExpressionNode *clobber, LabelNode *gotolabels ) {
 	std::list< Expression * > out, in;
 	std::list< ConstantExpr * > clob;
-	buildList( output, out );
-	buildList( input, in );
-	buildList( clobber, clob );
-	std::list< Label > gotolabs = gotolabels;
-	return new AsmStmt( labs, voltile, instruction, out, in, clob, gotolabs );
+
+	buildMoveList( output, out );
+	buildMoveList( input, in );
+	buildMoveList( clobber, clob );
+	return new AsmStmt( noLabels, voltile, instruction, out, in, clob, gotolabels ? gotolabels->labels : noLabels );
 }
 
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/TypeData.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug  7 07:51:48 2016
-// Update Count     : 58
+// Last Modified On : Sun Aug 28 18:28:58 2016
+// Update Count     : 223
 //
 
@@ -94,5 +94,5 @@
 		break;
 	} // switch
-}
+} // TypeData::TypeData
 
 TypeData::~TypeData() {
@@ -163,8 +163,8 @@
 		break;
 	} // switch
-}
-
-TypeData *TypeData::clone() const {
-	TypeData *newtype = new TypeData( kind );
+} // TypeData::~TypeData
+
+TypeData * TypeData::clone() const {
+	TypeData * newtype = new TypeData( kind );
 	newtype->qualifiers = qualifiers;
 	newtype->base = maybeClone( base );
@@ -182,6 +182,5 @@
 		break;
 	  case Array:
-//PAB		newtype->array->dimension = maybeClone( array->dimension );
-		newtype->array->dimension = array->dimension;
+		newtype->array->dimension = maybeClone( array->dimension );
 		newtype->array->isVarLen = array->isVarLen;
 		newtype->array->isStatic = array->isStatic;
@@ -239,5 +238,5 @@
 	} // switch
 	return newtype;
-}
+} // TypeData::clone
 
 void TypeData::print( std::ostream &os, int indent ) const {
@@ -245,5 +244,7 @@
 	using std::string;
 
-	printEnums( qualifiers.begin(), qualifiers.end(), DeclarationNode::qualifierName, os );
+	for ( int i = 0; i < DeclarationNode::NoOfQualifier; i += 1 ) {
+		if ( qualifiers[i] ) os << DeclarationNode::qualifierName[ i ] << ' ';
+	} // for
 
 	if ( forall ) {
@@ -417,36 +418,7 @@
 		assert( false );
 	} // switch
-}
-
-TypeData *TypeData::extractAggregate( bool toplevel ) const {
-	TypeData *ret = 0;
-
-	switch ( kind ) {
-	  case Aggregate:
-		if ( ! toplevel && aggregate->fields ) {
-			ret = clone();
-			ret->qualifiers.clear();
-		} // if
-		break;
-	  case Enum:
-		if ( ! toplevel && enumeration->constants ) {
-			ret = clone();
-			ret->qualifiers.clear();
-		} // if
-		break;
-	  case AggregateInst:
-		if ( aggInst->aggregate ) {
-			ret = aggInst->aggregate->extractAggregate( false );
-		} // if
-		break;
-	  default:
-		if ( base ) {
-			ret = base->extractAggregate( false );
-		} // if
-	} // switch
-	return ret;
-}
-
-void buildForall( const DeclarationNode *firstNode, std::list< TypeDecl* > &outputList ) {
+} // TypeData::print
+
+void buildForall( const DeclarationNode * firstNode, std::list< TypeDecl* > &outputList ) {
 	buildList( firstNode, outputList );
 	for ( std::list< TypeDecl* >::iterator i = outputList.begin(); i != outputList.end(); ++i ) {
@@ -454,10 +426,10 @@
 			// add assertion parameters to `type' tyvars in reverse order
 			// add dtor:  void ^?{}(T *)
-			FunctionType *dtorType = new FunctionType( Type::Qualifiers(), false );
+			FunctionType * dtorType = new FunctionType( Type::Qualifiers(), false );
 			dtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ) ), 0 ) );
 			(*i)->get_assertions().push_front( new FunctionDecl( "^?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, dtorType, 0, false, false ) );
 
 			// add copy ctor:  void ?{}(T *, T)
-			FunctionType *copyCtorType = new FunctionType( Type::Qualifiers(), false );
+			FunctionType * copyCtorType = new FunctionType( Type::Qualifiers(), false );
 			copyCtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ) ), 0 ) );
 			copyCtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ), 0 ) );
@@ -465,10 +437,10 @@
 
 			// add default ctor:  void ?{}(T *)
-			FunctionType *ctorType = new FunctionType( Type::Qualifiers(), false );
+			FunctionType * ctorType = new FunctionType( Type::Qualifiers(), false );
 			ctorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ) ), 0 ) );
 			(*i)->get_assertions().push_front( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, ctorType, 0, false, false ) );
 
 			// add assignment operator:  T * ?=?(T *, T)
-			FunctionType *assignType = new FunctionType( Type::Qualifiers(), false );
+			FunctionType * assignType = new FunctionType( Type::Qualifiers(), false );
 			assignType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ) ), 0 ) );
 			assignType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ), 0 ) );
@@ -479,103 +451,80 @@
 }
 
-Declaration *TypeData::buildDecl( std::string name, DeclarationNode::StorageClass sc, Expression *bitfieldWidth, bool isInline, bool isNoreturn, LinkageSpec::Type linkage, Initializer *init ) const {
-	if ( kind == TypeData::Function ) {
-		FunctionDecl *decl;
-		if ( function->hasBody ) {
-			if ( function->body ) {
-				Statement *stmt = function->body->build();
-				CompoundStmt *body = dynamic_cast< CompoundStmt* >( stmt );
-				assert( body );
-				decl = new FunctionDecl( name, sc, linkage, buildFunction(), body, isInline, isNoreturn );
-			} else {
-				// std::list<Label> ls;
-				decl = new FunctionDecl( name, sc, linkage, buildFunction(), new CompoundStmt( std::list<Label>() ), isInline, isNoreturn );
-			} // if
-		} else {
-			decl = new FunctionDecl( name, sc, linkage, buildFunction(), 0, isInline, isNoreturn );
-		} // if
-		for ( DeclarationNode *cur = function->idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_link() ) ) {
-			if ( cur->get_name() != "" ) {
-				decl->get_oldIdents().insert( decl->get_oldIdents().end(), cur->get_name() );
-			} // if
-		} // for
-		buildList( function->oldDeclList, decl->get_oldDecls() );
-		return decl;
-	} else if ( kind == TypeData::Aggregate ) {
-		return buildAggregate();
-	} else if ( kind == TypeData::Enum ) {
-		return buildEnum();
-	} else if ( kind == TypeData::Symbolic ) {
-		return buildSymbolic( name, sc );
-	} else if ( kind == TypeData::Variable ) {
-		return buildVariable();
-	} else {
-		return new ObjectDecl( name, sc, linkage, bitfieldWidth, build(), init, std::list< Attribute * >(),  isInline, isNoreturn );
-	} // if
-	return 0;
-}
-
-Type *TypeData::build() const {
-	switch ( kind ) {
-	  case Unknown:
+Type * typebuild( const TypeData * td ) {
+	assert( td );
+	switch ( td->kind ) {
+	  case TypeData::Unknown:
 		// fill in implicit int
-		return new BasicType( buildQualifiers(), BasicType::SignedInt );
-	  case Basic:
-		return buildBasicType();
-	  case Pointer:
-		return buildPointer();
-	  case Array:
-		return buildArray();
-	  case Function:
-		return buildFunction();
-	  case AggregateInst:
-		return buildAggInst();
-	  case EnumConstant:
+		return new BasicType( buildQualifiers( td ), BasicType::SignedInt );
+	  case TypeData::Basic:
+		return buildBasicType( td );
+	  case TypeData::Pointer:
+		return buildPointer( td );
+	  case TypeData::Array:
+		return buildArray( td );
+	  case TypeData::Function:
+		return buildFunction( td );
+	  case TypeData::AggregateInst:
+		return buildAggInst( td );
+	  case TypeData::EnumConstant:
 		// the name gets filled in later -- by SymTab::Validate
-		return new EnumInstType( buildQualifiers(), "" );
-	  case SymbolicInst:
-		return buildSymbolicInst();;
-	  case Tuple:
-		return buildTuple();
-	  case Typeof:
-		return buildTypeof();
-	  case Builtin:
-		return new VarArgsType( buildQualifiers() );
-	  case Attr:
-		return buildAttr();
-	  case Symbolic:
-	  case Enum:
-	  case Aggregate:
-	  case Variable:
+		return new EnumInstType( buildQualifiers( td ), "" );
+	  case TypeData::SymbolicInst:
+		return buildSymbolicInst( td );;
+	  case TypeData::Tuple:
+		return buildTuple( td );
+	  case TypeData::Typeof:
+		return buildTypeof( td );
+	  case TypeData::Builtin:
+		return new VarArgsType( buildQualifiers( td ) );
+	  case TypeData::Attr:
+		return buildAttr( td );
+	  case TypeData::Symbolic:
+	  case TypeData::Enum:
+	  case TypeData::Aggregate:
+	  case TypeData::Variable:
 		assert( false );
 	} // switch
 	return 0;
-}
-
-Type::Qualifiers TypeData::buildQualifiers() const {
+} // typebuild
+
+TypeData * typeextractAggregate( const TypeData * td, bool toplevel ) {
+	TypeData * ret = 0;
+
+	switch ( td->kind ) {
+	  case TypeData::Aggregate:
+		if ( ! toplevel && td->aggregate->fields ) {
+			ret = td->clone();
+		} // if
+		break;
+	  case TypeData::Enum:
+		if ( ! toplevel && td->enumeration->constants ) {
+			ret = td->clone();
+		} // if
+		break;
+	  case TypeData::AggregateInst:
+		if ( td->aggInst->aggregate ) {
+			ret = typeextractAggregate( td->aggInst->aggregate, false );
+		} // if
+		break;
+	  default:
+		if ( td->base ) {
+			ret = typeextractAggregate( td->base, false );
+		} // if
+	} // switch
+	return ret;
+} // typeextractAggregate
+
+Type::Qualifiers buildQualifiers( const TypeData * td ) {
 	Type::Qualifiers q;
-	for ( std::list< DeclarationNode::Qualifier >::const_iterator i = qualifiers.begin(); i != qualifiers.end(); ++i ) {
-		switch ( *i ) {
-		  case DeclarationNode::Const:
-			q.isConst = true;
-			break;
-		  case DeclarationNode::Volatile:
-			q.isVolatile = true;
-			break;
-		  case DeclarationNode::Restrict:
-			q.isRestrict = true;
-			break;
-		  case DeclarationNode::Lvalue:
-			q.isLvalue = true;
-			break;
-		  case DeclarationNode::Atomic:
-			q.isAtomic = true;
-			break;
-		} // switch
-	} // for
+	q.isConst = td->qualifiers[ DeclarationNode::Const ];
+	q.isVolatile = td->qualifiers[ DeclarationNode::Volatile ];
+	q.isRestrict = td->qualifiers[ DeclarationNode::Restrict ];
+	q.isLvalue = td->qualifiers[ DeclarationNode::Lvalue ];
+	q.isAtomic = td->qualifiers[ DeclarationNode::Atomic ];;
 	return q;
-}
-
-Type *TypeData::buildBasicType() const {
+} // buildQualifiers
+
+Type * buildBasicType( const TypeData * td ) {
 	static const BasicType::Kind kindMap[] = { BasicType::Char, BasicType::SignedInt, BasicType::Float, BasicType::Double,
 											   BasicType::Char /* void */, BasicType::Bool, BasicType::DoubleComplex,
@@ -586,12 +535,12 @@
 	BasicType::Kind ret;
 
-	for ( std::list< DeclarationNode::BasicType >::const_iterator i = basic->typeSpec.begin(); i != basic->typeSpec.end(); ++i ) {
+	for ( std::list< DeclarationNode::BasicType >::const_iterator i = td->basic->typeSpec.begin(); i != td->basic->typeSpec.end(); ++i ) {
 		if ( ! init ) {
 			init = true;
 			if ( *i == DeclarationNode::Void ) {
-				if ( basic->typeSpec.size() != 1 || ! basic->modifiers.empty() ) {
-					throw SemanticError( "invalid type specifier \"void\" in type: ", this );
+				if ( td->basic->typeSpec.size() != 1 || ! td->basic->modifiers.empty() ) {
+					throw SemanticError( "invalid type specifier \"void\" in type: ", td );
 				} else {
-					return new VoidType( buildQualifiers() );
+					return new VoidType( buildQualifiers( td ) );
 				} // if
 			} else {
@@ -602,5 +551,5 @@
 			  case DeclarationNode::Float:
 				if ( sawDouble ) {
-					throw SemanticError( "invalid type specifier \"float\" in type: ", this );
+					throw SemanticError( "invalid type specifier \"float\" in type: ", td );
 				} else {
 					switch ( ret ) {
@@ -612,5 +561,5 @@
 						break;
 					  default:
-						throw SemanticError( "invalid type specifier \"float\" in type: ", this );
+						throw SemanticError( "invalid type specifier \"float\" in type: ", td );
 					} // switch
 				} // if
@@ -618,5 +567,5 @@
 			  case DeclarationNode::Double:
 				if ( sawDouble ) {
-					throw SemanticError( "duplicate type specifier \"double\" in type: ", this );
+					throw SemanticError( "duplicate type specifier \"double\" in type: ", td );
 				} else {
 					switch ( ret ) {
@@ -625,5 +574,5 @@
 						break;
 					  default:
-						throw SemanticError( "invalid type specifier \"double\" in type: ", this );
+						throw SemanticError( "invalid type specifier \"double\" in type: ", td );
 					} // switch
 				} // if
@@ -638,5 +587,5 @@
 					break;
 				  default:
-					throw SemanticError( "invalid type specifier \"_Complex\" in type: ", this );
+					throw SemanticError( "invalid type specifier \"_Complex\" in type: ", td );
 				} // switch
 				break;
@@ -650,9 +599,9 @@
 					break;
 				  default:
-					throw SemanticError( "invalid type specifier \"_Imaginary\" in type: ", this );
+					throw SemanticError( "invalid type specifier \"_Imaginary\" in type: ", td );
 				} // switch
 				break;
 			  default:
-				throw SemanticError( std::string( "invalid type specifier \"" ) + DeclarationNode::basicTypeName[ *i ] + "\" in type: ", this );
+				throw SemanticError( std::string( "invalid type specifier \"" ) + DeclarationNode::basicTypeName[ *i ] + "\" in type: ", td );
 			} // switch
 		} // if
@@ -662,5 +611,5 @@
 	} // for
 
-	for ( std::list< DeclarationNode::Modifier >::const_iterator i = basic->modifiers.begin(); i != basic->modifiers.end(); ++i ) {
+	for ( std::list< DeclarationNode::Modifier >::const_iterator i = td->basic->modifiers.begin(); i != td->basic->modifiers.end(); ++i ) {
 		switch ( *i ) {
 		  case DeclarationNode::Long:
@@ -692,5 +641,5 @@
 					break;
 				  default:
-					throw SemanticError( "invalid type modifier \"long\" in type: ", this );
+					throw SemanticError( "invalid type modifier \"long\" in type: ", td );
 				} // switch
 			} // if
@@ -709,5 +658,5 @@
 					break;
 				  default:
-					throw SemanticError( "invalid type modifier \"short\" in type: ", this );
+					throw SemanticError( "invalid type modifier \"short\" in type: ", td );
 				} // switch
 			} // if
@@ -718,5 +667,5 @@
 				ret = BasicType::SignedInt;
 			} else if ( sawSigned ) {
-				throw SemanticError( "duplicate type modifer \"signed\" in type: ", this );
+				throw SemanticError( "duplicate type modifer \"signed\" in type: ", td );
 			} else {
 				switch ( ret ) {
@@ -734,5 +683,5 @@
 					break;
 				  default:
-					throw SemanticError( "invalid type modifer \"signed\" in type: ", this );
+					throw SemanticError( "invalid type modifer \"signed\" in type: ", td );
 				} // switch
 			} // if
@@ -743,5 +692,5 @@
 				ret = BasicType::UnsignedInt;
 			} else if ( sawSigned ) {
-				throw SemanticError( "invalid type modifer \"unsigned\" in type: ", this );
+				throw SemanticError( "invalid type modifer \"unsigned\" in type: ", td );
 			} else {
 				switch ( ret ) {
@@ -762,5 +711,5 @@
 					break;
 				  default:
-					throw SemanticError( "invalid type modifer \"unsigned\" in type: ", this );
+					throw SemanticError( "invalid type modifer \"unsigned\" in type: ", td );
 				} // switch
 			} // if
@@ -773,53 +722,215 @@
 	} // for
 
-	BasicType *bt;
+	BasicType * bt;
 	if ( ! init ) {
-		bt = new BasicType( buildQualifiers(), BasicType::SignedInt );
+		bt = new BasicType( buildQualifiers( td ), BasicType::SignedInt );
 	} else {
-		bt = new BasicType( buildQualifiers(), ret );
+		bt = new BasicType( buildQualifiers( td ), ret );
 	} // if
-	buildForall( forall, bt->get_forall() );
+	buildForall( td->forall, bt->get_forall() );
 	return bt;
-}
-
-
-PointerType *TypeData::buildPointer() const {
-	PointerType *pt;
-	if ( base ) {
-		pt = new PointerType( buildQualifiers(), base->build() );
+} // buildBasicType
+
+PointerType * buildPointer( const TypeData * td ) {
+	PointerType * pt;
+	if ( td->base ) {
+		pt = new PointerType( buildQualifiers( td ), typebuild( td->base ) );
 	} else {
-		pt = new PointerType( buildQualifiers(), new BasicType( Type::Qualifiers(), BasicType::SignedInt ) );
+		pt = new PointerType( buildQualifiers( td ), new BasicType( Type::Qualifiers(), BasicType::SignedInt ) );
 	} // if
-	buildForall( forall, pt->get_forall() );
+	buildForall( td->forall, pt->get_forall() );
 	return pt;
-}
-
-ArrayType *TypeData::buildArray() const {
-	ArrayType *at;
-	if ( base ) {
-		at = new ArrayType( buildQualifiers(), base->build(), maybeBuild< Expression >( array->dimension ),
-							array->isVarLen, array->isStatic );
+} // buildPointer
+
+ArrayType * buildArray( const TypeData * td ) {
+	ArrayType * at;
+	if ( td->base ) {
+		at = new ArrayType( buildQualifiers( td ), typebuild( td->base ), maybeBuild< Expression >( td->array->dimension ),
+							td->array->isVarLen, td->array->isStatic );
 	} else {
-		at = new ArrayType( buildQualifiers(), new BasicType( Type::Qualifiers(), BasicType::SignedInt ),
-							maybeBuild< Expression >( array->dimension ), array->isVarLen, array->isStatic );
+		at = new ArrayType( buildQualifiers( td ), new BasicType( Type::Qualifiers(), BasicType::SignedInt ),
+							maybeBuild< Expression >( td->array->dimension ), td->array->isVarLen, td->array->isStatic );
 	} // if
-	buildForall( forall, at->get_forall() );
+	buildForall( td->forall, at->get_forall() );
 	return at;
-}
-
-FunctionType *TypeData::buildFunction() const {
-	assert( kind == Function );
-	bool hasEllipsis = function->params ? function->params->get_hasEllipsis() : true;
-	if ( ! function->params ) hasEllipsis = ! function->newStyle;
-	FunctionType *ft = new FunctionType( buildQualifiers(), hasEllipsis );
-	buildList( function->params, ft->get_parameters() );
-	buildForall( forall, ft->get_forall() );
-	if ( base ) {
-		switch ( base->kind ) {
-		  case Tuple:
-			buildList( base->tuple->members, ft->get_returnVals() );
+} // buildPointer
+
+AggregateDecl * buildAggregate( const TypeData * td ) {
+	assert( td->kind == TypeData::Aggregate );
+	AggregateDecl * at;
+	switch ( td->aggregate->kind ) {
+	  case DeclarationNode::Struct:
+		at = new StructDecl( td->aggregate->name );
+		buildForall( td->aggregate->params, at->get_parameters() );
+		break;
+	  case DeclarationNode::Union:
+		at = new UnionDecl( td->aggregate->name );
+		buildForall( td->aggregate->params, at->get_parameters() );
+		break;
+	  case DeclarationNode::Trait:
+		at = new TraitDecl( td->aggregate->name );
+		buildList( td->aggregate->params, at->get_parameters() );
+		break;
+	  default:
+		assert( false );
+	} // switch
+
+	buildList( td->aggregate->fields, at->get_members() );
+	at->set_body( td->aggregate->body );
+
+	return at;
+} // buildAggregate
+
+ReferenceToType * buildAggInst( const TypeData * td ) {
+	assert( td->kind == TypeData::AggregateInst );
+
+	ReferenceToType * ret;
+	if ( td->aggInst->aggregate->kind == TypeData::Enum ) {
+		ret = new EnumInstType( buildQualifiers( td ), td->aggInst->aggregate->enumeration->name );
+	} else {
+		assert( td->aggInst->aggregate->kind == TypeData::Aggregate );
+		switch ( td->aggInst->aggregate->aggregate->kind ) {
+		  case DeclarationNode::Struct:
+			ret = new StructInstType( buildQualifiers( td ), td->aggInst->aggregate->aggregate->name );
+			break;
+		  case DeclarationNode::Union:
+			ret = new UnionInstType( buildQualifiers( td ), td->aggInst->aggregate->aggregate->name );
+			break;
+		  case DeclarationNode::Trait:
+			ret = new TraitInstType( buildQualifiers( td ), td->aggInst->aggregate->aggregate->name );
 			break;
 		  default:
-			ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType* >( base->buildDecl( "", DeclarationNode::NoStorageClass, 0, false, false, LinkageSpec::Cforall ) ) );
+			assert( false );
+		} // switch
+	} // if
+	buildList( td->aggInst->params, ret->get_parameters() );
+	buildForall( td->forall, ret->get_forall() );
+	return ret;
+} // buildAggInst
+
+NamedTypeDecl * buildSymbolic( const TypeData * td, const std::string & name, DeclarationNode::StorageClass sc ) {
+	assert( td->kind == TypeData::Symbolic );
+	NamedTypeDecl * ret;
+	assert( td->base );
+	if ( td->symbolic->isTypedef ) {
+		ret = new TypedefDecl( name, sc, typebuild( td->base ) );
+	} else {
+		ret = new TypeDecl( name, sc, typebuild( td->base ), TypeDecl::Any );
+	} // if
+	buildList( td->symbolic->params, ret->get_parameters() );
+	buildList( td->symbolic->assertions, ret->get_assertions() );
+	return ret;
+} // buildSymbolic
+
+TypeDecl * buildVariable( const TypeData * td ) {
+	assert( td->kind == TypeData::Variable );
+	static const TypeDecl::Kind kindMap[] = { TypeDecl::Any, TypeDecl::Ftype, TypeDecl::Dtype };
+
+	TypeDecl * ret = new TypeDecl( td->variable->name, DeclarationNode::NoStorageClass, 0, kindMap[ td->variable->tyClass ] );
+	buildList( td->variable->assertions, ret->get_assertions() );
+	return ret;
+} // buildSymbolic
+
+EnumDecl * buildEnum( const TypeData * td ) {
+	assert( td->kind == TypeData::Enum );
+	EnumDecl * ret = new EnumDecl( td->enumeration->name );
+	buildList( td->enumeration->constants, ret->get_members() );
+	std::list< Declaration * >::iterator members = ret->get_members().begin();
+	for ( const DeclarationNode * cur = td->enumeration-> constants; cur != nullptr; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ), ++members ) {
+		if ( cur->has_enumeratorValue() ) {
+			ObjectDecl * member = dynamic_cast< ObjectDecl * >(* members);
+			member->set_init( new SingleInit( maybeMoveBuild< Expression >( cur->consume_enumeratorValue() ), std::list< Expression * >() ) );
+		} // if
+	} // for
+	return ret;
+} // buildEnum
+
+TypeInstType * buildSymbolicInst( const TypeData * td ) {
+	assert( td->kind == TypeData::SymbolicInst );
+	TypeInstType * ret = new TypeInstType( buildQualifiers( td ), td->symbolic->name, false );
+	buildList( td->symbolic->actuals, ret->get_parameters() );
+	buildForall( td->forall, ret->get_forall() );
+	return ret;
+} // buildSymbolicInst
+
+TupleType * buildTuple( const TypeData * td ) {
+	assert( td->kind == TypeData::Tuple );
+	TupleType * ret = new TupleType( buildQualifiers( td ) );
+	buildTypeList( td->tuple->members, ret->get_types() );
+	buildForall( td->forall, ret->get_forall() );
+	return ret;
+} // buildTuple
+
+TypeofType * buildTypeof( const TypeData * td ) {
+	assert( td->kind == TypeData::Typeof );
+	assert( td->typeexpr );
+	assert( td->typeexpr->expr );
+	return new TypeofType( buildQualifiers( td ), td->typeexpr->expr->build() );
+} // buildTypeof
+
+AttrType * buildAttr( const TypeData * td ) {
+	assert( td->kind == TypeData::Attr );
+	assert( td->attr );
+	AttrType * ret;
+	if ( td->attr->expr ) {
+		ret = new AttrType( buildQualifiers( td ), td->attr->name, td->attr->expr->build() );
+	} else {
+		assert( td->attr->type );
+		ret = new AttrType( buildQualifiers( td ), td->attr->name, td->attr->type->buildType() );
+	} // if
+	return ret;
+} // buildAttr
+
+Declaration * buildDecl( const TypeData * td, std::string name, DeclarationNode::StorageClass sc, Expression * bitfieldWidth, bool isInline, bool isNoreturn, LinkageSpec::Spec linkage, Initializer * init ) {
+	if ( td->kind == TypeData::Function ) {
+		FunctionDecl * decl;
+		if ( td->function->hasBody ) {
+			if ( td->function->body ) {
+				Statement * stmt = td->function->body->build();
+				CompoundStmt * body = dynamic_cast< CompoundStmt* >( stmt );
+				assert( body );
+				decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), body, isInline, isNoreturn );
+			} else {
+				// std::list< Label > ls;
+				decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), new CompoundStmt( std::list< Label >() ), isInline, isNoreturn );
+			} // if
+		} else {
+			decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), 0, isInline, isNoreturn );
+		} // if
+		for ( DeclarationNode * cur = td->function->idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_next() ) ) {
+			if ( cur->get_name() != "" ) {
+				decl->get_oldIdents().insert( decl->get_oldIdents().end(), cur->get_name() );
+			} // if
+		} // for
+		buildList( td->function->oldDeclList, decl->get_oldDecls() );
+		return decl;
+	} else if ( td->kind == TypeData::Aggregate ) {
+		return buildAggregate( td );
+	} else if ( td->kind == TypeData::Enum ) {
+		return buildEnum( td );
+	} else if ( td->kind == TypeData::Symbolic ) {
+		return buildSymbolic( td, name, sc );
+	} else if ( td->kind == TypeData::Variable ) {
+		return buildVariable( td );
+	} else {
+		return new ObjectDecl( name, sc, linkage, bitfieldWidth, typebuild( td ), init, std::list< Attribute * >(), isInline, isNoreturn );
+	} // if
+	return 0;
+} // buildDecl
+
+FunctionType * buildFunction( const TypeData * td ) {
+	assert( td->kind == TypeData::Function );
+	bool hasEllipsis = td->function->params ? td->function->params->get_hasEllipsis() : true;
+	if ( ! td->function->params ) hasEllipsis = ! td->function->newStyle;
+	FunctionType * ft = new FunctionType( buildQualifiers( td ), hasEllipsis );
+	buildList( td->function->params, ft->get_parameters() );
+	buildForall( td->forall, ft->get_forall() );
+	if ( td->base ) {
+		switch ( td->base->kind ) {
+		  case TypeData::Tuple:
+			buildList( td->base->tuple->members, ft->get_returnVals() );
+			break;
+		  default:
+			ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType* >( buildDecl( td->base,  "", DeclarationNode::NoStorageClass, 0, false, false, LinkageSpec::Cforall ) ) );
 		} // switch
 	} else {
@@ -827,131 +938,5 @@
 	} // if
 	return ft;
-}
-
-AggregateDecl *TypeData::buildAggregate() const {
-	assert( kind == Aggregate );
-	AggregateDecl *at;
-	switch ( aggregate->kind ) {
-	  case DeclarationNode::Struct:
-		at = new StructDecl( aggregate->name );
-		buildForall( aggregate->params, at->get_parameters() );
-		break;
-	  case DeclarationNode::Union:
-		at = new UnionDecl( aggregate->name );
-		buildForall( aggregate->params, at->get_parameters() );
-		break;
-	  case DeclarationNode::Trait:
-		at = new TraitDecl( aggregate->name );
-		buildList( aggregate->params, at->get_parameters() );
-		break;
-	  default:
-		assert( false );
-	} // switch
-
-	buildList( aggregate->fields, at->get_members() );
-	at->set_body( aggregate->body );
-
-	return at;
-}
-
-ReferenceToType *TypeData::buildAggInst() const {
-	assert( kind == AggregateInst );
-
-	ReferenceToType *ret;
-	if ( aggInst->aggregate->kind == Enum ) {
-		ret = new EnumInstType( buildQualifiers(), aggInst->aggregate->enumeration->name );
-	} else {
-		assert( aggInst->aggregate->kind == Aggregate );
-		switch ( aggInst->aggregate->aggregate->kind ) {
-		  case DeclarationNode::Struct:
-			ret = new StructInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
-			break;
-		  case DeclarationNode::Union:
-			ret = new UnionInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
-			break;
-		  case DeclarationNode::Trait:
-			ret = new TraitInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
-			break;
-		  default:
-			assert( false );
-		} // switch
-	} // if
-	buildList( aggInst->params, ret->get_parameters() );
-	buildForall( forall, ret->get_forall() );
-	return ret;
-}
-
-NamedTypeDecl *TypeData::buildSymbolic( const std::string &name, DeclarationNode::StorageClass sc ) const {
-	assert( kind == Symbolic );
-	NamedTypeDecl *ret;
-	if ( symbolic->isTypedef ) {
-		ret = new TypedefDecl( name, sc, maybeBuild< Type >( base ) );
-	} else {
-		ret = new TypeDecl( name, sc, maybeBuild< Type >( base ), TypeDecl::Any );
-	} // if
-	buildList( symbolic->params, ret->get_parameters() );
-	buildList( symbolic->assertions, ret->get_assertions() );
-	return ret;
-}
-
-TypeDecl *TypeData::buildVariable() const {
-	assert( kind == Variable );
-	static const TypeDecl::Kind kindMap[] = { TypeDecl::Any, TypeDecl::Ftype, TypeDecl::Dtype };
-
-	TypeDecl *ret = new TypeDecl( variable->name, DeclarationNode::NoStorageClass, 0, kindMap[ variable->tyClass ] );
-	buildList( variable->assertions, ret->get_assertions() );
-	return ret;
-}
-
-EnumDecl *TypeData::buildEnum() const {
-	assert( kind == Enum );
-	EnumDecl *ret = new EnumDecl( enumeration->name );
-	buildList( enumeration->constants, ret->get_members() );
-	std::list< Declaration * >::iterator members = ret->get_members().begin();
-	for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast<DeclarationNode *>( cur->get_link() ), ++members ) {
-		if ( cur->get_enumeratorValue() != NULL ) {
-			ObjectDecl *member = dynamic_cast<ObjectDecl *>(*members);
-			member->set_init( new SingleInit( maybeBuild< Expression >( cur->get_enumeratorValue() ), std::list< Expression * >() ) );
-		} // if
-	} // for
-	return ret;
-}
-
-TypeInstType *TypeData::buildSymbolicInst() const {
-	assert( kind == SymbolicInst );
-	TypeInstType *ret = new TypeInstType( buildQualifiers(), symbolic->name, false );
-	buildList( symbolic->actuals, ret->get_parameters() );
-	buildForall( forall, ret->get_forall() );
-	return ret;
-}
-
-TupleType *TypeData::buildTuple() const {
-	assert( kind == Tuple );
-	TupleType *ret = new TupleType( buildQualifiers() );
-	buildTypeList( tuple->members, ret->get_types() );
-	buildForall( forall, ret->get_forall() );
-	return ret;
-}
-
-TypeofType *TypeData::buildTypeof() const {
-	assert( kind == Typeof );
-	assert( typeexpr );
-	assert( typeexpr->expr );
-	TypeofType *ret = new TypeofType( buildQualifiers(), typeexpr->expr->build() );
-	return ret;
-}
-
-AttrType *TypeData::buildAttr() const {
-	assert( kind == Attr );
-	assert( attr );
-	AttrType *ret;
-	if ( attr->expr ) {
-		ret = new AttrType( buildQualifiers(), attr->name, attr->expr->build() );
-	} else {
-		assert( attr->type );
-		ret = new AttrType( buildQualifiers(), attr->name, attr->type->buildType() );
-	} // if
-	return ret;
-}
+} // buildFunction
 
 // Local Variables: //
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/TypeData.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 20:52:02 2016
-// Update Count     : 20
+// Last Modified On : Sun Aug 28 22:39:00 2016
+// Update Count     : 85
 //
 
@@ -17,5 +17,5 @@
 #define TYPEDATA_H
 
-#include <list>
+#include <bitset>
 
 #include "ParseNode.h"
@@ -25,16 +25,4 @@
 	enum Kind { Unknown, Basic, Pointer, Array, Function, Aggregate, AggregateInst,
 				Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Builtin, Attr } kind;
-
-	TypeData( Kind k = Unknown );
-	~TypeData();
-	void print( std::ostream &, int indent = 0 ) const;
-	TypeData * clone() const;
-
-	Type * build() const;
-	FunctionType * buildFunction() const;
-
-	TypeData * base;
-	std::list< DeclarationNode::Qualifier > qualifiers;
-	DeclarationNode * forall;
 
 	struct Basic_t {
@@ -109,4 +97,9 @@
 	};
 
+	TypeData * base;
+	typedef std::bitset< DeclarationNode::NoOfQualifier > Qualifiers;
+	Qualifiers qualifiers;
+	DeclarationNode * forall;
+
 	union {
 		Basic_t * basic;
@@ -124,22 +117,27 @@
 	};
 
-	TypeData * extractAggregate( bool toplevel = true ) const;
-	// helper function for DeclNodeImpl::build
-	Declaration * buildDecl( std::string name, DeclarationNode::StorageClass sc, Expression * bitfieldWidth, bool isInline, bool isNoreturn, LinkageSpec::Type linkage, Initializer * init = 0 ) const;
-	// helper functions for build()
-	Type::Qualifiers buildQualifiers() const;
-	Type * buildBasicType() const;
-	PointerType * buildPointer() const;
-	ArrayType * buildArray() const;
-	AggregateDecl * buildAggregate() const;
-	ReferenceToType * buildAggInst() const;
-	NamedTypeDecl * buildSymbolic( const std::string &name, DeclarationNode::StorageClass sc ) const;
-	TypeDecl* buildVariable() const;
-	EnumDecl* buildEnum() const;
-	TypeInstType * buildSymbolicInst() const;
-	TupleType * buildTuple() const;
-	TypeofType * buildTypeof() const;
-	AttrType * buildAttr() const;
+	TypeData( Kind k = Unknown );
+	~TypeData();
+	void print( std::ostream &, int indent = 0 ) const;
+	TypeData * clone() const;
 };
+
+Type * typebuild( const TypeData * );
+TypeData * typeextractAggregate( const TypeData * td, bool toplevel = true );
+Type::Qualifiers buildQualifiers( const TypeData * td );
+Type * buildBasicType( const TypeData * );
+PointerType * buildPointer( const TypeData * );
+ArrayType * buildArray( const TypeData * );
+AggregateDecl * buildAggregate( const TypeData * );
+ReferenceToType * buildAggInst( const TypeData * );
+NamedTypeDecl * buildSymbolic( const TypeData *, const std::string &name, DeclarationNode::StorageClass sc );
+TypeDecl * buildVariable( const TypeData * );
+EnumDecl * buildEnum( const TypeData * );
+TypeInstType * buildSymbolicInst( const TypeData * );
+TupleType * buildTuple( const TypeData * );
+TypeofType * buildTypeof( const TypeData * );
+AttrType * buildAttr( const TypeData * );
+Declaration * buildDecl( const TypeData *, std::string, DeclarationNode::StorageClass, Expression *, bool isInline, bool isNoreturn, LinkageSpec::Spec, Initializer * init = 0 );
+FunctionType * buildFunction( const TypeData * );
 
 #endif // TYPEDATA_H
Index: src/Parser/TypedefTable.cc
===================================================================
--- src/Parser/TypedefTable.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/TypedefTable.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:20:13 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Apr 13 16:57:30 2016
-// Update Count     : 24
+// Last Modified On : Mon Aug 15 18:24:42 2016
+// Update Count     : 25
 //
 
@@ -64,9 +64,9 @@
 		tableType::iterator curPos = table.find( identifier );
 		if ( curPos == table.end()) {
-			list<Entry> newList;
+			list< Entry > newList;
 			newList.push_front( newEntry );
 			table[identifier] = newList;
 		} else {
-			list<Entry>::iterator listPos = (*curPos ).second.begin();
+			list< Entry >::iterator listPos = (*curPos ).second.begin();
 			while ( listPos != (*curPos ).second.end() && listPos->scope > scope ) {
 				listPos++;
@@ -127,5 +127,5 @@
 	debugPrint( "Leaving scope " << currentScope << endl );
 	for ( tableType::iterator i = table.begin(); i != table.end(); ) {
-		list<Entry> &declList = (*i).second;
+		list< Entry > &declList = (*i).second;
 		while ( ! declList.empty() && declList.front().scope == currentScope ) {
 			declList.pop_front();
@@ -157,6 +157,6 @@
 	for ( tableType::const_iterator i = table.begin(); i != table.end(); i++) {
 		debugPrint( (*i ).first << ": " );
-		list<Entry> declList = (*i).second;
-		for ( list<Entry>::const_iterator j = declList.begin(); j != declList.end(); j++ ) {
+		list< Entry > declList = (*i).second;
+		for ( list< Entry >::const_iterator j = declList.begin(); j != declList.end(); j++ ) {
 			debugPrint( "(" << (*j).scope << " " << (*j).kind << ") " );
 		}
Index: src/Parser/TypedefTable.h
===================================================================
--- src/Parser/TypedefTable.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/TypedefTable.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:24:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Apr 13 16:59:56 2016
-// Update Count     : 27
+// Last Modified On : Mon Aug 15 18:25:04 2016
+// Update Count     : 28
 //
 
@@ -39,5 +39,5 @@
 	};
 
-	typedef std::map<std::string, std::list<Entry> > tableType;
+	typedef std::map< std::string, std::list< Entry > > tableType;
 	tableType table;
 
Index: src/Parser/lex.cc
===================================================================
--- src/Parser/lex.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/lex.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -1468,7 +1468,7 @@
  * Author           : Peter A. Buhr
  * Created On       : Sat Sep 22 08:58:10 2001
- * Last Modified By : 
- * Last Modified On : Sun Jul 31 07:19:36 2016
- * Update Count     : 459
+ * Last Modified By : Peter A. Buhr
+ * Last Modified On : Wed Aug 24 13:27:04 2016
+ * Update Count     : 487
  */
 #line 20 "lex.ll"
@@ -1480,4 +1480,5 @@
 
 #include <string>
+#include <cstdio>										// FILENAME_MAX
 
 #include "lex.h"
@@ -1491,11 +1492,11 @@
 #define RETURN_LOCN(x)		yylval.tok.loc.file = yyfilename; yylval.tok.loc.line = yylineno; return( x )
 #define RETURN_VAL(x)		yylval.tok.str = new std::string( yytext ); RETURN_LOCN( x )
-#define RETURN_CHAR(x)		yylval.tok.str = NULL; RETURN_LOCN( x )
+#define RETURN_CHAR(x)		yylval.tok.str = nullptr; RETURN_LOCN( x )
 #define RETURN_STR(x)		yylval.tok.str = strtext; RETURN_LOCN( x )
 
-#define WHITE_RETURN(x)									// do nothing
+#define WHITE_RETURN(x)		// do nothing
 #define NEWLINE_RETURN()	WHITE_RETURN( '\n' )
 #define ASCIIOP_RETURN()	RETURN_CHAR( (int)yytext[0] ) // single character operator
-#define NAMEDOP_RETURN(x)	RETURN_VAL( x )				// multichar operator, with a name
+#define NAMEDOP_RETURN(x)	RETURN_CHAR( x )			// multichar operator, with a name
 #define NUMERIC_RETURN(x)	rm_underscore(); RETURN_VAL( x ) // numeric constant
 #define KEYWORD_RETURN(x)	RETURN_CHAR( x )			// keyword
@@ -1531,5 +1532,5 @@
 
 
-#line 1534 "Parser/lex.cc"
+#line 1535 "Parser/lex.cc"
 
 #define INITIAL 0
@@ -1723,8 +1724,8 @@
 	register int yy_act;
     
-#line 138 "lex.ll"
+#line 139 "lex.ll"
 
 				   /* line directives */
-#line 1729 "Parser/lex.cc"
+#line 1730 "Parser/lex.cc"
 
 	if ( !(yy_init) )
@@ -1823,24 +1824,23 @@
 /* rule 1 can match eol */
 YY_RULE_SETUP
-#line 140 "lex.ll"
+#line 141 "lex.ll"
 {
 	/* " stop highlighting */
+	static char filename[FILENAME_MAX];					// temporarily store current source-file name
 	char *end_num;
 	char *begin_string, *end_string;
-	char *filename;
 	long lineno, length;
 	lineno = strtol( yytext + 1, &end_num, 0 );
 	begin_string = strchr( end_num, '"' );
-	if ( begin_string ) {
-		end_string = strchr( begin_string + 1, '"' );
-		if ( end_string ) {
-			length = end_string - begin_string - 1;
-			filename = new char[ length + 1 ];
-			memcpy( filename, begin_string + 1, length );
-			filename[ length ] = '\0';
-			//std::cout << "file " << filename << " line " << lineno << std::endl;
-			yylineno = lineno;
-			yyfilename = filename;
-		} // if
+	if ( begin_string ) {								// file name ?
+		end_string = strchr( begin_string + 1, '"' );	// look for ending delimiter
+		assert( end_string );							// closing quote ?
+		length = end_string - begin_string - 1;			// file-name length without quotes or sentinel
+		assert( length < FILENAME_MAX );				// room for sentinel ?
+		memcpy( &filename, begin_string + 1, length );	// copy file name from yytext
+		filename[ length ] = '\0';						// terminate string with sentinel
+		//std::cout << "file " << filename << " line " << lineno << std::endl;
+		yylineno = lineno;
+		yyfilename = filename;
 	} // if
 }
@@ -2426,10 +2426,10 @@
 YY_RULE_SETUP
 #line 290 "lex.ll"
-{ BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
+{ BEGIN QUOTE; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
 #line 291 "lex.ll"
-{ *strtext += std::string( yytext ); }
+{ strtext->append( yytext, yyleng ); }
 	YY_BREAK
 case 117:
@@ -2437,5 +2437,5 @@
 YY_RULE_SETUP
 #line 292 "lex.ll"
-{ BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
+{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(CHARACTERconstant); }
 	YY_BREAK
 /* ' stop highlighting */
@@ -2444,10 +2444,10 @@
 YY_RULE_SETUP
 #line 296 "lex.ll"
-{ BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
+{ BEGIN STRING; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
 #line 297 "lex.ll"
-{ *strtext += std::string( yytext ); }
+{ strtext->append( yytext, yyleng ); }
 	YY_BREAK
 case 120:
@@ -2455,5 +2455,5 @@
 YY_RULE_SETUP
 #line 298 "lex.ll"
-{ BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
+{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(STRINGliteral); }
 	YY_BREAK
 /* " stop highlighting */
@@ -2462,5 +2462,5 @@
 YY_RULE_SETUP
 #line 302 "lex.ll"
-{ rm_underscore(); *strtext += std::string( yytext ); }
+{ rm_underscore(); strtext->append( yytext, yyleng ); }
 	YY_BREAK
 case 122:
@@ -2473,5 +2473,5 @@
 YY_RULE_SETUP
 #line 304 "lex.ll"
-{ *strtext += std::string( yytext ); } // unknown escape character
+{ strtext->append( yytext, yyleng ); } // unknown escape character
 	YY_BREAK
 /* punctuation */
Index: src/Parser/lex.h
===================================================================
--- src/Parser/lex.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/lex.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep 22 08:58:10 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Mar 21 18:18:06 2016
-// Update Count     : 346
+// Last Modified On : Sun Aug 21 11:28:47 2016
+// Update Count     : 347
 //
 
@@ -33,13 +33,12 @@
     char *file;
     int line;
-};
+}; // Location
 
-class Token {
-  public:
+struct Token {
     std::string *str;									// must be pointer as used in union
     Location loc;
 
     operator std::string *() { return str; }
-};
+}; // Token
 
 #endif // PARSER_LEX_H
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/lex.ll	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -9,7 +9,7 @@
  * Author           : Peter A. Buhr
  * Created On       : Sat Sep 22 08:58:10 2001
- * Last Modified By : 
- * Last Modified On : Sun Jul 31 07:19:36 2016
- * Update Count     : 459
+ * Last Modified By : Peter A. Buhr
+ * Last Modified On : Wed Aug 24 13:27:04 2016
+ * Update Count     : 487
  */
 
@@ -25,4 +25,5 @@
 
 #include <string>
+#include <cstdio>										// FILENAME_MAX
 
 #include "lex.h"
@@ -36,11 +37,11 @@
 #define RETURN_LOCN(x)		yylval.tok.loc.file = yyfilename; yylval.tok.loc.line = yylineno; return( x )
 #define RETURN_VAL(x)		yylval.tok.str = new std::string( yytext ); RETURN_LOCN( x )
-#define RETURN_CHAR(x)		yylval.tok.str = NULL; RETURN_LOCN( x )
+#define RETURN_CHAR(x)		yylval.tok.str = nullptr; RETURN_LOCN( x )
 #define RETURN_STR(x)		yylval.tok.str = strtext; RETURN_LOCN( x )
 
-#define WHITE_RETURN(x)									// do nothing
+#define WHITE_RETURN(x)		// do nothing
 #define NEWLINE_RETURN()	WHITE_RETURN( '\n' )
 #define ASCIIOP_RETURN()	RETURN_CHAR( (int)yytext[0] ) // single character operator
-#define NAMEDOP_RETURN(x)	RETURN_VAL( x )				// multichar operator, with a name
+#define NAMEDOP_RETURN(x)	RETURN_CHAR( x )			// multichar operator, with a name
 #define NUMERIC_RETURN(x)	rm_underscore(); RETURN_VAL( x ) // numeric constant
 #define KEYWORD_RETURN(x)	RETURN_CHAR( x )			// keyword
@@ -140,21 +141,20 @@
 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" {
 	/* " stop highlighting */
+	static char filename[FILENAME_MAX];					// temporarily store current source-file name
 	char *end_num;
 	char *begin_string, *end_string;
-	char *filename;
 	long lineno, length;
 	lineno = strtol( yytext + 1, &end_num, 0 );
 	begin_string = strchr( end_num, '"' );
-	if ( begin_string ) {
-		end_string = strchr( begin_string + 1, '"' );
-		if ( end_string ) {
-			length = end_string - begin_string - 1;
-			filename = new char[ length + 1 ];
-			memcpy( filename, begin_string + 1, length );
-			filename[ length ] = '\0';
-			//std::cout << "file " << filename << " line " << lineno << std::endl;
-			yylineno = lineno;
-			yyfilename = filename;
-		} // if
+	if ( begin_string ) {								// file name ?
+		end_string = strchr( begin_string + 1, '"' );	// look for ending delimiter
+		assert( end_string );							// closing quote ?
+		length = end_string - begin_string - 1;			// file-name length without quotes or sentinel
+		assert( length < FILENAME_MAX );				// room for sentinel ?
+		memcpy( &filename, begin_string + 1, length );	// copy file name from yytext
+		filename[ length ] = '\0';						// terminate string with sentinel
+		//std::cout << "file " << filename << " line " << lineno << std::endl;
+		yylineno = lineno;
+		yyfilename = filename;
 	} // if
 }
@@ -288,19 +288,19 @@
 
 				/* character constant, allows empty value */
-({cwide_prefix}[_]?)?['] { BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
-<QUOTE>[^'\\\n]* { *strtext += std::string( yytext ); }
-<QUOTE>['\n]	{ BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
+({cwide_prefix}[_]?)?['] { BEGIN QUOTE; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
+<QUOTE>[^'\\\n]* { strtext->append( yytext, yyleng ); }
+<QUOTE>['\n]	{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(CHARACTERconstant); }
 				/* ' stop highlighting */
 
 				/* string constant */
-({swide_prefix}[_]?)?["] { BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
-<STRING>[^"\\\n]* { *strtext += std::string( yytext ); }
-<STRING>["\n]	{ BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
+({swide_prefix}[_]?)?["] { BEGIN STRING; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
+<STRING>[^"\\\n]* { strtext->append( yytext, yyleng ); }
+<STRING>["\n]	{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(STRINGliteral); }
 				/* " stop highlighting */
 
 				/* common character/string constant */
-<QUOTE,STRING>{escape_seq} { rm_underscore(); *strtext += std::string( yytext ); }
+<QUOTE,STRING>{escape_seq} { rm_underscore(); strtext->append( yytext, yyleng ); }
 <QUOTE,STRING>"\\"{h_white}*"\n" {}						// continuation (ALSO HANDLED BY CPP)
-<QUOTE,STRING>"\\" { *strtext += std::string( yytext ); } // unknown escape character
+<QUOTE,STRING>"\\" { strtext->append( yytext, yyleng ); } // unknown escape character
 
 				/* punctuation */
Index: src/Parser/module.mk
===================================================================
--- src/Parser/module.mk	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/module.mk	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -11,6 +11,6 @@
 ## Created On       : Sat May 16 15:29:09 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Thu Jan 28 11:57:23 2016
-## Update Count     : 100
+## Last Modified On : Tue Aug 16 17:28:34 2016
+## Update Count     : 101
 ###############################################################################
 
@@ -29,6 +29,5 @@
        Parser/TypeData.cc \
        Parser/LinkageSpec.cc \
-       Parser/parseutility.cc \
-       Parser/Parser.cc
+       Parser/parseutility.cc
 
 MAINTAINERCLEANFILES += Parser/parser.output
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/parser.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -71,5 +71,4 @@
 #define YYDEBUG_LEXER_TEXT (yylval)						// lexer loads this up each time
 #define YYDEBUG 1										// get the pretty debugging code to compile
-extern char *yytext;
 
 #undef __GNUC_MINOR__
@@ -84,12 +83,13 @@
 #include "LinkageSpec.h"
 
-DeclarationNode *theTree = 0;							// the resulting parse tree
-LinkageSpec::Type linkage = LinkageSpec::Cforall;
-std::stack< LinkageSpec::Type > linkageStack;
-TypedefTable typedefTable;
-
-void appendStr( std::string &to, std::string *from ) {
+extern DeclarationNode * parseTree;
+extern LinkageSpec::Spec linkage;
+extern TypedefTable typedefTable;
+
+std::stack< LinkageSpec::Spec > linkageStack;
+
+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 ) );
+	to->insert( to->length() - 1, from->substr( 1, from->length() - 2 ) );
 } // appendStr
 
@@ -361,4 +361,5 @@
 	InitializerNode *in;
 	OperKinds op;
+	std::string *str;
 	bool flag;
 
@@ -366,5 +367,5 @@
 
 /* Line 293 of yacc.c  */
-#line 369 "Parser/parser.cc"
+#line 370 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -378,5 +379,5 @@
 
 /* Line 343 of yacc.c  */
-#line 381 "Parser/parser.cc"
+#line 382 "Parser/parser.cc"
 
 #ifdef short
@@ -595,7 +596,7 @@
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  251
+#define YYFINAL  250
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   10816
+#define YYLAST   10863
 
 /* YYNTOKENS -- Number of terminals.  */
@@ -604,7 +605,7 @@
 #define YYNNTS  241
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  750
+#define YYNRULES  751
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1554
+#define YYNSTATES  1555
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
@@ -663,79 +664,79 @@
 {
        0,     0,     3,     4,     5,     7,     9,    11,    13,    15,
-      17,    19,    21,    23,    25,    27,    29,    31,    34,    36,
-      38,    42,    46,    48,    55,    60,    64,    72,    76,    84,
-      87,    90,    98,   103,   105,   109,   110,   112,   114,   118,
-     120,   124,   132,   136,   144,   146,   148,   150,   153,   156,
-     159,   162,   165,   168,   173,   176,   181,   188,   190,   195,
-     200,   202,   204,   206,   208,   210,   212,   214,   219,   224,
-     226,   230,   234,   238,   240,   244,   248,   250,   254,   258,
-     260,   264,   268,   272,   276,   278,   282,   286,   288,   292,
-     294,   298,   300,   304,   306,   310,   312,   316,   318,   324,
-     329,   335,   337,   339,   343,   346,   347,   349,   351,   353,
-     355,   357,   359,   361,   363,   365,   367,   369,   371,   374,
-     380,   387,   395,   397,   401,   403,   407,   408,   410,   412,
-     414,   416,   418,   420,   422,   424,   426,   433,   438,   441,
-     449,   451,   455,   457,   460,   462,   465,   467,   470,   473,
-     479,   487,   493,   503,   509,   519,   521,   525,   527,   529,
-     533,   537,   540,   542,   545,   548,   549,   551,   554,   558,
-     559,   561,   564,   568,   572,   577,   578,   580,   582,   585,
-     591,   599,   606,   613,   618,   622,   627,   630,   634,   637,
-     641,   645,   649,   653,   659,   663,   667,   672,   674,   680,
-     687,   693,   700,   710,   721,   731,   742,   745,   747,   750,
-     753,   756,   758,   765,   774,   785,   798,   813,   814,   816,
-     817,   819,   821,   825,   830,   838,   839,   841,   845,   847,
-     851,   853,   855,   857,   861,   863,   865,   867,   871,   872,
-     874,   878,   883,   885,   889,   891,   893,   897,   901,   905,
-     909,   913,   916,   920,   927,   931,   935,   940,   942,   945,
-     948,   952,   958,   967,   975,   983,   989,   999,  1002,  1005,
-    1011,  1015,  1021,  1026,  1030,  1035,  1040,  1048,  1052,  1056,
-    1060,  1064,  1069,  1076,  1078,  1080,  1082,  1084,  1086,  1088,
-    1090,  1092,  1093,  1095,  1097,  1100,  1102,  1104,  1106,  1108,
-    1110,  1112,  1114,  1115,  1121,  1123,  1126,  1130,  1132,  1135,
-    1137,  1139,  1141,  1143,  1145,  1147,  1149,  1151,  1153,  1155,
+      17,    19,    21,    23,    25,    27,    29,    31,    33,    36,
+      38,    40,    44,    48,    50,    57,    62,    66,    74,    78,
+      86,    89,    92,   100,   105,   107,   111,   112,   114,   116,
+     120,   122,   126,   134,   138,   146,   148,   150,   152,   155,
+     158,   161,   164,   167,   170,   175,   178,   183,   190,   192,
+     197,   202,   204,   206,   208,   210,   212,   214,   216,   221,
+     226,   228,   232,   236,   240,   242,   246,   250,   252,   256,
+     260,   262,   266,   270,   274,   278,   280,   284,   288,   290,
+     294,   296,   300,   302,   306,   308,   312,   314,   318,   320,
+     326,   331,   337,   339,   341,   345,   348,   349,   351,   353,
+     355,   357,   359,   361,   363,   365,   367,   369,   371,   373,
+     375,   378,   384,   391,   399,   401,   405,   407,   411,   412,
+     414,   416,   418,   420,   422,   424,   426,   428,   430,   437,
+     442,   445,   453,   455,   459,   461,   464,   466,   469,   471,
+     474,   477,   483,   491,   497,   507,   513,   523,   525,   529,
+     531,   533,   537,   541,   544,   546,   549,   552,   553,   555,
+     558,   562,   563,   565,   568,   572,   576,   581,   582,   584,
+     586,   589,   595,   603,   610,   617,   622,   626,   631,   634,
+     638,   641,   645,   649,   653,   657,   663,   667,   671,   676,
+     678,   684,   691,   697,   704,   714,   725,   735,   746,   749,
+     751,   754,   757,   760,   762,   769,   778,   789,   802,   817,
+     818,   820,   821,   823,   825,   829,   834,   842,   843,   845,
+     849,   851,   855,   857,   859,   861,   865,   867,   869,   871,
+     875,   876,   878,   882,   887,   889,   893,   895,   897,   901,
+     905,   909,   913,   917,   920,   924,   931,   935,   939,   944,
+     946,   949,   952,   956,   962,   971,   979,   987,   993,  1003,
+    1006,  1009,  1015,  1019,  1025,  1030,  1034,  1039,  1044,  1052,
+    1056,  1060,  1064,  1068,  1073,  1080,  1082,  1084,  1086,  1088,
+    1090,  1092,  1094,  1096,  1097,  1099,  1101,  1104,  1106,  1108,
+    1110,  1112,  1114,  1116,  1118,  1119,  1125,  1127,  1130,  1134,
+    1136,  1139,  1141,  1143,  1145,  1147,  1149,  1151,  1153,  1155,
     1157,  1159,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
-    1177,  1179,  1181,  1184,  1187,  1191,  1195,  1197,  1201,  1203,
-    1206,  1209,  1212,  1217,  1222,  1227,  1232,  1234,  1237,  1240,
-    1244,  1246,  1249,  1252,  1254,  1257,  1260,  1264,  1266,  1269,
-    1272,  1274,  1276,  1281,  1284,  1285,  1292,  1300,  1303,  1306,
-    1309,  1310,  1313,  1316,  1320,  1323,  1327,  1329,  1332,  1336,
-    1339,  1342,  1347,  1348,  1350,  1353,  1356,  1358,  1359,  1361,
-    1364,  1367,  1373,  1376,  1377,  1385,  1388,  1393,  1394,  1397,
-    1398,  1400,  1402,  1404,  1410,  1416,  1422,  1424,  1430,  1436,
-    1446,  1448,  1454,  1455,  1457,  1459,  1465,  1467,  1469,  1475,
-    1481,  1483,  1487,  1491,  1496,  1498,  1500,  1502,  1504,  1507,
-    1509,  1513,  1517,  1519,  1522,  1524,  1528,  1530,  1532,  1534,
-    1536,  1538,  1540,  1542,  1544,  1546,  1548,  1550,  1553,  1555,
-    1557,  1559,  1562,  1563,  1566,  1569,  1571,  1576,  1577,  1579,
-    1582,  1586,  1591,  1594,  1597,  1599,  1602,  1605,  1611,  1617,
-    1625,  1632,  1634,  1637,  1640,  1644,  1646,  1649,  1652,  1657,
-    1660,  1665,  1666,  1671,  1674,  1676,  1678,  1680,  1681,  1684,
-    1690,  1696,  1710,  1712,  1714,  1718,  1722,  1725,  1729,  1733,
-    1736,  1741,  1743,  1750,  1760,  1761,  1773,  1775,  1779,  1783,
-    1787,  1789,  1791,  1797,  1800,  1806,  1807,  1809,  1811,  1815,
-    1816,  1818,  1820,  1822,  1824,  1825,  1832,  1835,  1837,  1840,
-    1845,  1848,  1852,  1856,  1860,  1865,  1871,  1877,  1883,  1890,
-    1892,  1894,  1896,  1900,  1901,  1907,  1908,  1910,  1912,  1915,
-    1922,  1924,  1928,  1929,  1931,  1936,  1938,  1940,  1942,  1944,
-    1947,  1949,  1952,  1955,  1957,  1961,  1964,  1968,  1972,  1975,
-    1980,  1985,  1989,  1998,  2002,  2005,  2007,  2010,  2017,  2026,
-    2030,  2033,  2037,  2041,  2046,  2051,  2055,  2057,  2059,  2061,
-    2066,  2073,  2077,  2080,  2084,  2088,  2093,  2098,  2102,  2105,
-    2107,  2110,  2113,  2115,  2119,  2122,  2126,  2130,  2133,  2138,
-    2143,  2147,  2154,  2163,  2167,  2170,  2172,  2175,  2178,  2181,
-    2185,  2189,  2192,  2197,  2202,  2206,  2213,  2222,  2226,  2229,
-    2231,  2234,  2237,  2239,  2241,  2244,  2248,  2252,  2255,  2260,
-    2267,  2276,  2278,  2281,  2284,  2286,  2289,  2292,  2296,  2300,
-    2302,  2307,  2312,  2316,  2322,  2331,  2335,  2338,  2342,  2344,
-    2350,  2356,  2363,  2370,  2372,  2375,  2378,  2380,  2383,  2386,
-    2390,  2394,  2396,  2401,  2406,  2410,  2416,  2425,  2429,  2431,
-    2434,  2436,  2439,  2446,  2452,  2459,  2467,  2475,  2477,  2480,
-    2483,  2485,  2488,  2491,  2495,  2499,  2501,  2506,  2511,  2515,
-    2524,  2528,  2530,  2532,  2535,  2537,  2539,  2542,  2546,  2549,
-    2553,  2556,  2560,  2564,  2567,  2572,  2576,  2579,  2583,  2586,
-    2591,  2595,  2598,  2605,  2612,  2619,  2627,  2629,  2632,  2634,
-    2636,  2638,  2641,  2645,  2648,  2652,  2655,  2659,  2663,  2668,
-    2671,  2675,  2680,  2683,  2689,  2695,  2702,  2709,  2710,  2712,
-    2713
+    1177,  1179,  1181,  1183,  1186,  1189,  1193,  1197,  1199,  1203,
+    1205,  1208,  1211,  1214,  1219,  1224,  1229,  1234,  1236,  1239,
+    1242,  1246,  1248,  1251,  1254,  1256,  1259,  1262,  1266,  1268,
+    1271,  1274,  1276,  1278,  1283,  1286,  1287,  1294,  1302,  1305,
+    1308,  1311,  1312,  1315,  1318,  1322,  1325,  1329,  1331,  1334,
+    1338,  1341,  1344,  1349,  1350,  1352,  1355,  1358,  1360,  1361,
+    1363,  1366,  1369,  1375,  1378,  1379,  1387,  1390,  1395,  1396,
+    1399,  1400,  1402,  1404,  1406,  1412,  1418,  1424,  1426,  1432,
+    1438,  1448,  1450,  1456,  1457,  1459,  1461,  1467,  1469,  1471,
+    1477,  1483,  1485,  1489,  1493,  1498,  1500,  1502,  1504,  1506,
+    1509,  1511,  1515,  1519,  1521,  1524,  1526,  1530,  1532,  1534,
+    1536,  1538,  1540,  1542,  1544,  1546,  1548,  1550,  1552,  1555,
+    1557,  1559,  1561,  1564,  1565,  1568,  1571,  1573,  1578,  1579,
+    1581,  1584,  1588,  1593,  1596,  1599,  1601,  1604,  1607,  1613,
+    1619,  1627,  1634,  1636,  1639,  1642,  1646,  1648,  1651,  1654,
+    1659,  1662,  1667,  1668,  1673,  1676,  1678,  1680,  1682,  1683,
+    1686,  1692,  1698,  1712,  1714,  1716,  1720,  1724,  1727,  1731,
+    1735,  1738,  1743,  1745,  1752,  1762,  1763,  1775,  1777,  1781,
+    1785,  1789,  1791,  1793,  1799,  1802,  1808,  1809,  1811,  1813,
+    1817,  1818,  1820,  1822,  1824,  1826,  1827,  1834,  1837,  1839,
+    1842,  1847,  1850,  1854,  1858,  1862,  1867,  1873,  1879,  1885,
+    1892,  1894,  1896,  1898,  1902,  1903,  1909,  1910,  1912,  1914,
+    1917,  1924,  1926,  1930,  1931,  1933,  1938,  1940,  1942,  1944,
+    1946,  1949,  1951,  1954,  1957,  1959,  1963,  1966,  1970,  1974,
+    1977,  1982,  1987,  1991,  2000,  2004,  2007,  2009,  2012,  2019,
+    2028,  2032,  2035,  2039,  2043,  2048,  2053,  2057,  2059,  2061,
+    2063,  2068,  2075,  2079,  2082,  2086,  2090,  2095,  2100,  2104,
+    2107,  2109,  2112,  2115,  2117,  2121,  2124,  2128,  2132,  2135,
+    2140,  2145,  2149,  2156,  2165,  2169,  2172,  2174,  2177,  2180,
+    2183,  2187,  2191,  2194,  2199,  2204,  2208,  2215,  2224,  2228,
+    2231,  2233,  2236,  2239,  2241,  2243,  2246,  2250,  2254,  2257,
+    2262,  2269,  2278,  2280,  2283,  2286,  2288,  2291,  2294,  2298,
+    2302,  2304,  2309,  2314,  2318,  2324,  2333,  2337,  2340,  2344,
+    2346,  2352,  2358,  2365,  2372,  2374,  2377,  2380,  2382,  2385,
+    2388,  2392,  2396,  2398,  2403,  2408,  2412,  2418,  2427,  2431,
+    2433,  2436,  2438,  2441,  2448,  2454,  2461,  2469,  2477,  2479,
+    2482,  2485,  2487,  2490,  2493,  2497,  2501,  2503,  2508,  2513,
+    2517,  2526,  2530,  2532,  2534,  2537,  2539,  2541,  2544,  2548,
+    2551,  2555,  2558,  2562,  2566,  2569,  2574,  2578,  2581,  2585,
+    2588,  2593,  2597,  2600,  2607,  2614,  2621,  2629,  2631,  2634,
+    2636,  2638,  2640,  2643,  2647,  2650,  2654,  2657,  2661,  2665,
+    2670,  2673,  2677,  2682,  2685,  2691,  2697,  2704,  2711,  2712,
+    2714,  2715
 };
 
@@ -745,274 +746,274 @@
      302,     0,    -1,    -1,    -1,    79,    -1,    80,    -1,    81,
       -1,    72,    -1,    76,    -1,   140,    -1,    72,    -1,    76,
-      -1,    72,    -1,   140,    -1,    83,    -1,    84,    -1,    82,
-      -1,   141,    82,    -1,    72,    -1,   140,    -1,   109,   169,
-     110,    -1,   109,   173,   110,    -1,   142,    -1,   143,   111,
-     134,   164,   135,   112,    -1,   143,   109,   144,   110,    -1,
-     143,   113,   139,    -1,   143,   113,   111,   134,   146,   135,
-     112,    -1,   143,    85,   139,    -1,   143,    85,   111,   134,
-     146,   135,   112,    -1,   143,    86,    -1,   143,    87,    -1,
-     109,   275,   110,   114,   279,   372,   115,    -1,   143,   114,
-     144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
-     164,    -1,   147,    -1,   146,   116,   147,    -1,   139,    -1,
-     139,   113,   147,    -1,   139,   113,   111,   134,   146,   135,
-     112,    -1,   139,    85,   147,    -1,   139,    85,   111,   134,
-     146,   135,   112,    -1,   143,    -1,   136,    -1,   141,    -1,
-      40,   151,    -1,   149,   151,    -1,   150,   151,    -1,    86,
-     148,    -1,    87,   148,    -1,    37,   148,    -1,    37,   109,
-     275,   110,    -1,    66,   148,    -1,    66,   109,   275,   110,
-      -1,    38,   109,   275,   116,   139,   110,    -1,    76,    -1,
-      76,   109,   145,   110,    -1,    76,   109,   276,   110,    -1,
-     117,    -1,   118,    -1,   119,    -1,   120,    -1,   121,    -1,
-     122,    -1,   148,    -1,   109,   275,   110,   151,    -1,   109,
-     275,   110,   167,    -1,   151,    -1,   152,   117,   151,    -1,
-     152,   123,   151,    -1,   152,   124,   151,    -1,   152,    -1,
-     153,   119,   152,    -1,   153,   120,   152,    -1,   153,    -1,
-     154,    88,   153,    -1,   154,    89,   153,    -1,   154,    -1,
-     155,   125,   154,    -1,   155,   126,   154,    -1,   155,    90,
-     154,    -1,   155,    91,   154,    -1,   155,    -1,   156,    92,
-     155,    -1,   156,    93,   155,    -1,   156,    -1,   157,   118,
-     156,    -1,   157,    -1,   158,   127,   157,    -1,   158,    -1,
-     159,   128,   158,    -1,   159,    -1,   160,    94,   159,    -1,
-     160,    -1,   161,    95,   160,    -1,   161,    -1,   161,   129,
-     169,   130,   162,    -1,   161,   129,   130,   162,    -1,   161,
-     129,   169,   130,   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,   127,   143,   114,   144,
-     115,   132,    -1,    72,   130,   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,   130,    -1,    45,   130,    -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,   117,   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,   130,
-     200,   110,   132,    -1,    64,   199,   109,   141,   130,   200,
-     130,   200,   110,   132,    -1,    64,   199,   109,   141,   130,
-     200,   130,   200,   130,   203,   110,   132,    -1,    64,   199,
-      51,   109,   141,   130,   130,   200,   130,   203,   130,   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,   130,   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,   130,    -1,   274,   130,    -1,   282,    -1,   281,
-     282,    -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,   128,   274,   109,   292,   110,    -1,
-     128,   114,   134,   298,   115,    -1,   128,   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,   122,   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,   117,   135,   112,    -1,   350,   111,   134,   164,
-     135,   112,    -1,   350,   111,   134,   117,   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,   117,   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,   117,   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
+      -1,    72,    -1,   140,    -1,    83,    -1,    84,    -1,   142,
+      -1,    82,    -1,   142,    82,    -1,    72,    -1,   140,    -1,
+     109,   170,   110,    -1,   109,   174,   110,    -1,   143,    -1,
+     144,   111,   134,   165,   135,   112,    -1,   144,   109,   145,
+     110,    -1,   144,   113,   139,    -1,   144,   113,   111,   134,
+     147,   135,   112,    -1,   144,    85,   139,    -1,   144,    85,
+     111,   134,   147,   135,   112,    -1,   144,    86,    -1,   144,
+      87,    -1,   109,   275,   110,   114,   279,   372,   115,    -1,
+     144,   114,   145,   115,    -1,   146,    -1,   145,   116,   146,
+      -1,    -1,   165,    -1,   148,    -1,   147,   116,   148,    -1,
+     139,    -1,   139,   113,   148,    -1,   139,   113,   111,   134,
+     147,   135,   112,    -1,   139,    85,   148,    -1,   139,    85,
+     111,   134,   147,   135,   112,    -1,   144,    -1,   136,    -1,
+     141,    -1,    40,   152,    -1,   150,   152,    -1,   151,   152,
+      -1,    86,   149,    -1,    87,   149,    -1,    37,   149,    -1,
+      37,   109,   275,   110,    -1,    66,   149,    -1,    66,   109,
+     275,   110,    -1,    38,   109,   275,   116,   139,   110,    -1,
+      76,    -1,    76,   109,   146,   110,    -1,    76,   109,   276,
+     110,    -1,   117,    -1,   118,    -1,   119,    -1,   120,    -1,
+     121,    -1,   122,    -1,   149,    -1,   109,   275,   110,   152,
+      -1,   109,   275,   110,   168,    -1,   152,    -1,   153,   117,
+     152,    -1,   153,   123,   152,    -1,   153,   124,   152,    -1,
+     153,    -1,   154,   119,   153,    -1,   154,   120,   153,    -1,
+     154,    -1,   155,    88,   154,    -1,   155,    89,   154,    -1,
+     155,    -1,   156,   125,   155,    -1,   156,   126,   155,    -1,
+     156,    90,   155,    -1,   156,    91,   155,    -1,   156,    -1,
+     157,    92,   156,    -1,   157,    93,   156,    -1,   157,    -1,
+     158,   118,   157,    -1,   158,    -1,   159,   127,   158,    -1,
+     159,    -1,   160,   128,   159,    -1,   160,    -1,   161,    94,
+     160,    -1,   161,    -1,   162,    95,   161,    -1,   162,    -1,
+     162,   129,   170,   130,   163,    -1,   162,   129,   130,   163,
+      -1,   162,   129,   170,   130,   168,    -1,   163,    -1,   163,
+      -1,   149,   167,   165,    -1,   168,   373,    -1,    -1,   165,
+      -1,   131,    -1,   107,    -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,
+     165,   135,   112,    -1,   111,   134,   116,   169,   135,   112,
+      -1,   111,   134,   165,   116,   169,   135,   112,    -1,   166,
+      -1,   169,   116,   166,    -1,   165,    -1,   170,   116,   165,
+      -1,    -1,   170,    -1,   173,    -1,   174,    -1,   178,    -1,
+     179,    -1,   191,    -1,   193,    -1,   194,    -1,   199,    -1,
+     127,   144,   114,   145,   115,   132,    -1,    72,   130,   312,
+     172,    -1,   114,   115,    -1,   114,   134,   134,   210,   175,
+     135,   115,    -1,   176,    -1,   175,   134,   176,    -1,   213,
+      -1,    40,   213,    -1,   308,    -1,   172,   135,    -1,   172,
+      -1,   177,   172,    -1,   171,   132,    -1,    41,   109,   170,
+     110,   172,    -1,    41,   109,   170,   110,   172,    42,   172,
+      -1,    43,   109,   170,   110,   184,    -1,    43,   109,   170,
+     110,   114,   134,   206,   185,   115,    -1,    53,   109,   170,
+     110,   184,    -1,    53,   109,   170,   110,   114,   134,   206,
+     187,   115,    -1,   164,    -1,   164,    96,   164,    -1,   310,
+      -1,   180,    -1,   181,   116,   180,    -1,    44,   181,   130,
+      -1,    45,   130,    -1,   182,    -1,   183,   182,    -1,   183,
+     172,    -1,    -1,   186,    -1,   183,   177,    -1,   186,   183,
+     177,    -1,    -1,   188,    -1,   183,   190,    -1,   183,   177,
+     189,    -1,   188,   183,   190,    -1,   188,   183,   177,   189,
+      -1,    -1,   190,    -1,    56,    -1,    56,   132,    -1,    47,
+     109,   170,   110,   172,    -1,    46,   172,    47,   109,   170,
+     110,   132,    -1,    48,   109,   134,   192,   110,   172,    -1,
+     171,   135,   132,   171,   132,   171,    -1,   213,   171,   132,
+     171,    -1,    51,    72,   132,    -1,    51,   117,   170,   132,
+      -1,    50,   132,    -1,    50,    72,   132,    -1,    49,   132,
+      -1,    49,    72,   132,    -1,    52,   171,   132,    -1,    61,
+     166,   132,    -1,    62,   166,   132,    -1,    62,   166,    63,
+     165,   132,    -1,    57,   174,   195,    -1,    57,   174,   197,
+      -1,    57,   174,   195,   197,    -1,   196,    -1,    58,   109,
+      96,   110,   174,    -1,   196,    58,   109,    96,   110,   174,
+      -1,    59,   109,    96,   110,   174,    -1,   196,    59,   109,
+      96,   110,   174,    -1,    58,   109,   134,   134,   198,   135,
+     110,   174,   135,    -1,   196,    58,   109,   134,   134,   198,
+     135,   110,   174,   135,    -1,    59,   109,   134,   134,   198,
+     135,   110,   174,   135,    -1,   196,    59,   109,   134,   134,
+     198,   135,   110,   174,   135,    -1,    60,   174,    -1,   226,
+      -1,   226,   309,    -1,   226,   357,    -1,   366,   139,    -1,
+     366,    -1,    64,   200,   109,   141,   110,   132,    -1,    64,
+     200,   109,   141,   130,   201,   110,   132,    -1,    64,   200,
+     109,   141,   130,   201,   130,   201,   110,   132,    -1,    64,
+     200,   109,   141,   130,   201,   130,   201,   130,   204,   110,
+     132,    -1,    64,   200,    51,   109,   141,   130,   130,   201,
+     130,   204,   130,   205,   110,   132,    -1,    -1,    11,    -1,
+      -1,   202,    -1,   203,    -1,   202,   116,   203,    -1,   141,
+     109,   164,   110,    -1,   111,   164,   112,   141,   109,   164,
+     110,    -1,    -1,   141,    -1,   204,   116,   141,    -1,   139,
+      -1,   205,   116,   139,    -1,   135,    -1,   207,    -1,   213,
+      -1,   207,   134,   213,    -1,   135,    -1,   209,    -1,   223,
+      -1,   209,   134,   223,    -1,    -1,   211,    -1,    29,   212,
+     132,    -1,   211,    29,   212,   132,    -1,   274,    -1,   212,
+     116,   274,    -1,   214,    -1,   223,    -1,   215,   135,   132,
+      -1,   220,   135,   132,    -1,   217,   135,   132,    -1,   293,
+     135,   132,    -1,   296,   135,   132,    -1,   216,   277,    -1,
+     232,   216,   277,    -1,   215,   135,   116,   134,   272,   277,
+      -1,   367,   272,   311,    -1,   370,   272,   311,    -1,   228,
+     370,   272,   311,    -1,   218,    -1,   228,   218,    -1,   232,
+     218,    -1,   232,   228,   218,    -1,   217,   135,   116,   134,
+     272,    -1,   111,   112,   272,   109,   134,   260,   135,   110,
+      -1,   370,   272,   109,   134,   260,   135,   110,    -1,   219,
+     272,   109,   134,   260,   135,   110,    -1,   111,   134,   262,
+     135,   112,    -1,   111,   134,   262,   135,   116,   134,   263,
+     135,   112,    -1,     3,   216,    -1,     3,   218,    -1,   220,
+     135,   116,   134,   139,    -1,     3,   226,   309,    -1,   221,
+     135,   116,   134,   309,    -1,   228,     3,   226,   309,    -1,
+     226,     3,   309,    -1,   226,     3,   228,   309,    -1,     3,
+     139,   131,   165,    -1,   222,   135,   116,   134,   139,   131,
+     165,    -1,   224,   135,   132,    -1,   221,   135,   132,    -1,
+     222,   135,   132,    -1,   240,   135,   132,    -1,   225,   309,
+     311,   277,    -1,   224,   116,   312,   309,   311,   277,    -1,
+     236,    -1,   240,    -1,   242,    -1,   283,    -1,   237,    -1,
+     241,    -1,   243,    -1,   284,    -1,    -1,   228,    -1,   229,
+      -1,   228,   229,    -1,   230,    -1,   314,    -1,    10,    -1,
+      12,    -1,    11,    -1,    14,    -1,    67,    -1,    -1,    13,
+     109,   231,   286,   110,    -1,   233,    -1,   228,   233,    -1,
+     232,   228,   233,    -1,   234,    -1,   233,   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,   232,   237,    -1,   236,   234,    -1,   236,
+     234,   228,    -1,   236,   234,   237,    -1,   238,    -1,   227,
+     239,   227,    -1,   235,    -1,   228,   235,    -1,   238,   229,
+      -1,   238,   235,    -1,    28,   109,   276,   110,    -1,    28,
+     109,   170,   110,    -1,    78,   109,   276,   110,    -1,    78,
+     109,   170,   110,    -1,   241,    -1,   232,   241,    -1,   240,
+     234,    -1,   240,   234,   228,    -1,   244,    -1,   228,   244,
+      -1,   241,   229,    -1,   243,    -1,   232,   243,    -1,   242,
+     234,    -1,   242,   234,   228,    -1,    74,    -1,   228,    74,
+      -1,   243,   229,    -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,   226,   252,    -1,   251,   116,   312,   252,    -1,    -1,
+     254,    -1,   318,   253,    -1,   331,   253,    -1,   357,    -1,
+      -1,   254,    -1,   130,   164,    -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,   164,    -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,   228,   370,   272,   373,    -1,   218,    -1,
+     270,    -1,   362,    -1,   370,    -1,   228,   370,    -1,   371,
+      -1,   225,   336,   373,    -1,   225,   340,   373,    -1,   225,
+      -1,   225,   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,
+     226,    -1,   226,   357,    -1,   366,    -1,   371,    -1,   226,
+      -1,   226,   345,    -1,    -1,   131,   278,    -1,   107,   278,
+      -1,   165,    -1,   114,   279,   372,   115,    -1,    -1,   278,
+      -1,   280,   278,    -1,   279,   116,   278,    -1,   279,   116,
+     280,   278,    -1,   281,   130,    -1,   274,   130,    -1,   282,
+      -1,   281,   282,    -1,   113,   274,    -1,   111,   134,   165,
+     135,   112,    -1,   111,   134,   310,   135,   112,    -1,   111,
+     134,   164,    96,   164,   135,   112,    -1,   113,   111,   134,
+     147,   135,   112,    -1,   284,    -1,   232,   284,    -1,   283,
+     234,    -1,   283,   234,   228,    -1,   285,    -1,   228,   285,
+      -1,   284,   229,    -1,    75,   109,   292,   110,    -1,   287,
+     373,    -1,   286,   116,   287,   373,    -1,    -1,   289,   274,
+     288,   290,    -1,   226,   336,    -1,    33,    -1,    35,    -1,
+      34,    -1,    -1,   290,   291,    -1,   128,   274,   109,   292,
+     110,    -1,   128,   114,   134,   298,   115,    -1,   128,   109,
+     134,   286,   135,   110,   114,   134,   298,   115,   109,   292,
+     110,    -1,   276,    -1,   165,    -1,   292,   116,   276,    -1,
+     292,   116,   165,    -1,    33,   294,    -1,   233,    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,   216,
+      -1,   218,    -1,   300,   135,   116,   134,   272,    -1,   226,
+     309,    -1,   301,   135,   116,   134,   309,    -1,    -1,   303,
+      -1,   305,    -1,   303,   134,   305,    -1,    -1,   303,    -1,
+     213,    -1,   307,    -1,   199,    -1,    -1,     5,    82,   306,
+     114,   304,   115,    -1,    40,   305,    -1,   308,    -1,   323,
+     174,    -1,   327,   134,   208,   174,    -1,   217,   174,    -1,
+     225,   323,   174,    -1,   228,   323,   174,    -1,   232,   323,
+     174,    -1,   232,   228,   323,   174,    -1,   225,   327,   134,
+     208,   174,    -1,   228,   327,   134,   208,   174,    -1,   232,
+     327,   134,   208,   174,    -1,   232,   228,   327,   134,   208,
+     174,    -1,   318,    -1,   331,    -1,   323,    -1,   164,   122,
+     164,    -1,    -1,    64,   109,   142,   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,   171,   110,    -1,   272,    -1,
+     234,    -1,   235,    -1,   229,    -1,   319,   312,    -1,   320,
+      -1,   321,   312,    -1,   322,   312,    -1,   137,    -1,   109,
+     319,   110,    -1,   150,   318,    -1,   150,   228,   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,   150,   323,    -1,   150,   228,   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,   150,
+     327,    -1,   150,   228,   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,   150,   331,    -1,   150,   228,   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,
+     150,   336,    -1,   150,   228,   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,   150,   340,    -1,   150,   228,   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,   150,    -1,   150,   228,
+      -1,   150,   345,    -1,   150,   228,   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,   165,   135,
+     112,    -1,   111,   134,   117,   135,   112,    -1,   350,   111,
+     134,   165,   135,   112,    -1,   350,   111,   134,   117,   135,
+     112,    -1,   352,    -1,   353,   312,    -1,   354,   312,    -1,
+     150,    -1,   150,   228,    -1,   150,   351,    -1,   150,   228,
+     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,   228,   117,   135,   112,    -1,   111,   134,
+     228,   135,   112,    -1,   111,   134,   228,   165,   135,   112,
+      -1,   111,   134,     7,   227,   165,   135,   112,    -1,   111,
+     134,   228,     7,   165,   135,   112,    -1,   358,    -1,   359,
+     312,    -1,   360,   312,    -1,   150,    -1,   150,   228,    -1,
+     150,   357,    -1,   150,   228,   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,   228,   370,    -1,   363,    -1,   364,
+      -1,   150,   226,    -1,   228,   150,   226,    -1,   150,   371,
+      -1,   228,   150,   371,    -1,   150,   361,    -1,   228,   150,
+     361,    -1,   111,   112,   226,    -1,   365,   226,    -1,   111,
+     112,   350,   226,    -1,   365,   350,   226,    -1,   350,   226,
+      -1,   111,   112,   363,    -1,   365,   363,    -1,   111,   112,
+     350,   363,    -1,   365,   350,   363,    -1,   350,   363,    -1,
+     111,   134,   228,   117,   135,   112,    -1,   111,   134,   228,
+     165,   135,   112,    -1,   111,   134,   232,   165,   135,   112,
+      -1,   111,   134,   232,   228,   165,   135,   112,    -1,   370,
+      -1,   228,   370,    -1,   367,    -1,   368,    -1,   369,    -1,
+     150,   226,    -1,   228,   150,   226,    -1,   150,   371,    -1,
+     228,   150,   371,    -1,   150,   366,    -1,   228,   150,   366,
+      -1,   111,   112,   226,    -1,   111,   112,   350,   226,    -1,
+     350,   226,    -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,   219,   109,   134,   260,   135,   110,
+      -1,    -1,   116,    -1,    -1,   131,   165,    -1
 };
 
@@ -1020,80 +1021,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   299,   299,   305,   314,   315,   316,   320,   321,   322,
-     326,   327,   331,   332,   336,   337,   341,   342,   353,   355,
-     357,   359,   364,   365,   371,   375,   377,   378,   380,   381,
-     383,   385,   387,   396,   397,   403,   404,   408,   409,   413,
-     417,   419,   421,   423,   428,   431,   433,   435,   440,   453,
-     455,   457,   459,   461,   463,   465,   467,   469,   471,   473,
-     480,   481,   487,   488,   489,   490,   494,   495,   497,   502,
-     503,   505,   507,   512,   513,   515,   520,   521,   523,   528,
-     529,   531,   533,   535,   540,   541,   543,   548,   549,   554,
-     555,   560,   561,   566,   567,   572,   573,   578,   579,   582,
-     584,   589,   594,   595,   597,   603,   604,   608,   609,   610,
-     611,   612,   613,   614,   615,   616,   617,   618,   624,   626,
-     628,   630,   635,   636,   641,   642,   648,   649,   655,   656,
-     657,   658,   659,   660,   661,   662,   663,   673,   680,   682,
-     692,   693,   698,   700,   706,   708,   712,   713,   718,   723,
-     726,   728,   730,   740,   742,   753,   754,   756,   761,   763,
-     767,   768,   773,   774,   778,   783,   784,   788,   790,   796,
-     797,   801,   803,   805,   807,   813,   814,   818,   820,   825,
-     827,   829,   834,   836,   841,   843,   847,   850,   854,   857,
-     861,   863,   865,   867,   872,   874,   876,   885,   887,   889,
-     891,   893,   898,   900,   902,   904,   909,   922,   923,   928,
-     930,   935,   939,   941,   943,   945,   947,   953,   954,   960,
-     961,   965,   966,   971,   973,   979,   980,   982,   987,   989,
-     996,   998,  1002,  1003,  1008,  1010,  1014,  1015,  1019,  1021,
-    1025,  1026,  1030,  1031,  1035,  1036,  1051,  1052,  1053,  1054,
-    1055,  1059,  1064,  1071,  1081,  1086,  1091,  1099,  1104,  1109,
-    1114,  1119,  1127,  1149,  1154,  1161,  1163,  1170,  1175,  1180,
-    1191,  1196,  1201,  1206,  1211,  1220,  1225,  1233,  1234,  1235,
-    1236,  1242,  1247,  1255,  1256,  1257,  1258,  1262,  1263,  1264,
-    1265,  1270,  1271,  1280,  1281,  1286,  1287,  1292,  1294,  1296,
-    1298,  1300,  1303,  1302,  1314,  1315,  1317,  1327,  1328,  1333,
-    1337,  1339,  1341,  1343,  1345,  1347,  1349,  1351,  1356,  1358,
-    1360,  1362,  1364,  1366,  1368,  1370,  1372,  1374,  1376,  1378,
-    1380,  1386,  1387,  1389,  1391,  1393,  1398,  1399,  1405,  1406,
-    1408,  1410,  1415,  1417,  1419,  1421,  1426,  1427,  1429,  1431,
-    1436,  1437,  1439,  1444,  1445,  1447,  1449,  1454,  1456,  1458,
-    1463,  1464,  1468,  1470,  1476,  1475,  1479,  1481,  1486,  1488,
-    1494,  1495,  1500,  1501,  1503,  1504,  1513,  1514,  1516,  1518,
-    1523,  1525,  1531,  1532,  1534,  1537,  1540,  1545,  1546,  1551,
-    1556,  1560,  1562,  1568,  1567,  1574,  1576,  1582,  1583,  1591,
-    1592,  1596,  1597,  1598,  1600,  1602,  1609,  1610,  1612,  1614,
-    1619,  1620,  1626,  1627,  1631,  1632,  1637,  1638,  1639,  1641,
-    1649,  1650,  1652,  1655,  1657,  1661,  1662,  1663,  1665,  1667,
-    1671,  1676,  1684,  1685,  1694,  1696,  1701,  1702,  1703,  1707,
-    1708,  1709,  1713,  1714,  1715,  1719,  1720,  1721,  1726,  1727,
-    1728,  1729,  1735,  1736,  1738,  1743,  1744,  1749,  1750,  1751,
-    1752,  1753,  1768,  1769,  1774,  1775,  1781,  1783,  1786,  1788,
-    1790,  1813,  1814,  1816,  1818,  1823,  1824,  1826,  1831,  1836,
-    1837,  1843,  1842,  1846,  1850,  1852,  1854,  1860,  1861,  1866,
-    1871,  1873,  1878,  1880,  1881,  1883,  1888,  1890,  1892,  1897,
-    1899,  1904,  1909,  1917,  1923,  1922,  1936,  1937,  1942,  1943,
-    1947,  1952,  1957,  1965,  1970,  1981,  1982,  1993,  1994,  2000,
-    2001,  2005,  2006,  2007,  2010,  2009,  2020,  2029,  2035,  2041,
-    2050,  2056,  2062,  2068,  2074,  2082,  2088,  2096,  2102,  2111,
-    2112,  2113,  2117,  2121,  2123,  2128,  2129,  2133,  2134,  2139,
-    2145,  2146,  2149,  2151,  2152,  2156,  2157,  2158,  2159,  2193,
-    2195,  2196,  2198,  2203,  2208,  2213,  2215,  2217,  2222,  2224,
-    2226,  2228,  2233,  2235,  2244,  2246,  2247,  2252,  2254,  2256,
-    2261,  2263,  2265,  2270,  2272,  2274,  2283,  2284,  2285,  2289,
-    2291,  2293,  2298,  2300,  2302,  2307,  2309,  2311,  2326,  2328,
-    2329,  2331,  2336,  2337,  2342,  2344,  2346,  2351,  2353,  2355,
-    2357,  2362,  2364,  2366,  2376,  2378,  2379,  2381,  2386,  2388,
-    2390,  2395,  2397,  2399,  2401,  2406,  2408,  2410,  2441,  2443,
-    2444,  2446,  2451,  2456,  2464,  2466,  2468,  2473,  2475,  2480,
-    2482,  2496,  2497,  2499,  2504,  2506,  2508,  2510,  2512,  2517,
-    2518,  2520,  2522,  2527,  2529,  2531,  2537,  2539,  2541,  2545,
-    2547,  2549,  2551,  2565,  2566,  2568,  2573,  2575,  2577,  2579,
-    2581,  2586,  2587,  2589,  2591,  2596,  2598,  2600,  2606,  2607,
-    2609,  2618,  2621,  2623,  2626,  2628,  2630,  2643,  2644,  2646,
-    2651,  2653,  2655,  2657,  2659,  2664,  2665,  2667,  2669,  2674,
-    2676,  2684,  2685,  2686,  2691,  2692,  2696,  2698,  2700,  2702,
-    2704,  2706,  2713,  2715,  2717,  2719,  2721,  2723,  2725,  2727,
-    2729,  2731,  2736,  2738,  2740,  2745,  2771,  2772,  2774,  2778,
-    2779,  2783,  2785,  2787,  2789,  2791,  2793,  2800,  2802,  2804,
-    2806,  2808,  2810,  2815,  2820,  2822,  2824,  2842,  2844,  2849,
-    2850
+       0,   300,   300,   304,   311,   312,   313,   317,   318,   319,
+     323,   324,   328,   329,   333,   334,   338,   342,   343,   354,
+     356,   358,   360,   365,   366,   372,   376,   378,   379,   381,
+     382,   384,   386,   388,   397,   398,   404,   405,   409,   410,
+     414,   418,   420,   422,   424,   429,   432,   434,   436,   441,
+     454,   456,   458,   460,   462,   464,   466,   468,   470,   472,
+     474,   481,   482,   488,   489,   490,   491,   495,   496,   498,
+     503,   504,   506,   508,   513,   514,   516,   521,   522,   524,
+     529,   530,   532,   534,   536,   541,   542,   544,   549,   550,
+     555,   556,   561,   562,   567,   568,   573,   574,   579,   580,
+     583,   585,   590,   595,   596,   598,   604,   605,   609,   610,
+     611,   612,   613,   614,   615,   616,   617,   618,   619,   620,
+     626,   628,   630,   632,   637,   638,   643,   644,   650,   651,
+     657,   658,   659,   660,   661,   662,   663,   664,   665,   675,
+     682,   684,   694,   695,   700,   702,   708,   710,   714,   715,
+     720,   725,   728,   730,   732,   742,   744,   755,   756,   758,
+     762,   764,   768,   769,   774,   775,   779,   784,   785,   789,
+     791,   797,   798,   802,   804,   806,   808,   814,   815,   819,
+     821,   826,   828,   830,   835,   837,   842,   844,   848,   851,
+     855,   858,   862,   864,   866,   868,   873,   875,   877,   882,
+     884,   886,   888,   890,   895,   897,   899,   901,   906,   918,
+     919,   924,   926,   931,   935,   937,   939,   941,   943,   949,
+     950,   956,   957,   961,   962,   967,   969,   975,   976,   978,
+     983,   988,   998,  1000,  1004,  1005,  1010,  1012,  1016,  1017,
+    1021,  1023,  1027,  1028,  1032,  1033,  1037,  1038,  1053,  1054,
+    1055,  1056,  1057,  1061,  1066,  1073,  1083,  1088,  1093,  1101,
+    1106,  1111,  1116,  1121,  1129,  1151,  1156,  1163,  1165,  1172,
+    1177,  1182,  1193,  1198,  1203,  1208,  1213,  1222,  1227,  1235,
+    1236,  1237,  1238,  1244,  1249,  1257,  1258,  1259,  1260,  1264,
+    1265,  1266,  1267,  1272,  1273,  1282,  1283,  1288,  1289,  1294,
+    1296,  1298,  1300,  1302,  1305,  1304,  1316,  1317,  1319,  1329,
+    1330,  1335,  1337,  1339,  1341,  1343,  1346,  1348,  1351,  1356,
+    1358,  1360,  1362,  1364,  1366,  1368,  1370,  1372,  1374,  1376,
+    1378,  1380,  1386,  1387,  1389,  1391,  1393,  1398,  1399,  1405,
+    1406,  1408,  1410,  1415,  1417,  1419,  1421,  1426,  1427,  1429,
+    1431,  1436,  1437,  1439,  1444,  1445,  1447,  1449,  1454,  1456,
+    1458,  1463,  1464,  1468,  1470,  1476,  1475,  1479,  1481,  1486,
+    1488,  1494,  1495,  1500,  1501,  1503,  1504,  1513,  1514,  1516,
+    1518,  1523,  1525,  1531,  1532,  1534,  1537,  1540,  1545,  1546,
+    1551,  1556,  1560,  1562,  1568,  1567,  1574,  1576,  1582,  1583,
+    1591,  1592,  1596,  1597,  1598,  1600,  1602,  1609,  1610,  1612,
+    1614,  1619,  1620,  1626,  1627,  1631,  1632,  1637,  1638,  1639,
+    1641,  1649,  1650,  1652,  1655,  1657,  1661,  1662,  1663,  1665,
+    1667,  1671,  1676,  1684,  1685,  1694,  1696,  1701,  1702,  1703,
+    1707,  1708,  1709,  1713,  1714,  1715,  1719,  1720,  1721,  1726,
+    1727,  1728,  1729,  1735,  1736,  1738,  1743,  1744,  1749,  1750,
+    1751,  1752,  1753,  1768,  1769,  1774,  1775,  1781,  1783,  1786,
+    1788,  1790,  1813,  1814,  1816,  1818,  1823,  1824,  1826,  1831,
+    1836,  1837,  1843,  1842,  1846,  1850,  1852,  1854,  1860,  1861,
+    1866,  1871,  1873,  1878,  1880,  1881,  1883,  1888,  1890,  1892,
+    1897,  1899,  1904,  1909,  1917,  1923,  1922,  1936,  1937,  1942,
+    1943,  1947,  1952,  1957,  1965,  1970,  1981,  1982,  1987,  1988,
+    1994,  1995,  1999,  2000,  2001,  2004,  2003,  2014,  2023,  2029,
+    2035,  2044,  2050,  2056,  2062,  2068,  2076,  2082,  2090,  2096,
+    2105,  2106,  2107,  2111,  2115,  2117,  2122,  2123,  2127,  2128,
+    2133,  2139,  2140,  2143,  2145,  2146,  2150,  2151,  2152,  2153,
+    2187,  2189,  2190,  2192,  2197,  2202,  2207,  2209,  2211,  2216,
+    2218,  2220,  2222,  2227,  2229,  2238,  2240,  2241,  2246,  2248,
+    2250,  2255,  2257,  2259,  2264,  2266,  2268,  2277,  2278,  2279,
+    2283,  2285,  2287,  2292,  2294,  2296,  2301,  2303,  2305,  2320,
+    2322,  2323,  2325,  2330,  2331,  2336,  2338,  2340,  2345,  2347,
+    2349,  2351,  2356,  2358,  2360,  2370,  2372,  2373,  2375,  2380,
+    2382,  2384,  2389,  2391,  2393,  2395,  2400,  2402,  2404,  2435,
+    2437,  2438,  2440,  2445,  2450,  2458,  2460,  2462,  2467,  2469,
+    2474,  2476,  2490,  2491,  2493,  2498,  2500,  2502,  2504,  2506,
+    2511,  2512,  2514,  2516,  2521,  2523,  2525,  2531,  2533,  2535,
+    2539,  2541,  2543,  2545,  2559,  2560,  2562,  2567,  2569,  2571,
+    2573,  2575,  2580,  2581,  2583,  2585,  2590,  2592,  2594,  2600,
+    2601,  2603,  2612,  2615,  2617,  2620,  2622,  2624,  2637,  2638,
+    2640,  2645,  2647,  2649,  2651,  2653,  2658,  2659,  2661,  2663,
+    2668,  2670,  2678,  2679,  2680,  2685,  2686,  2690,  2692,  2694,
+    2696,  2698,  2700,  2707,  2709,  2711,  2713,  2715,  2717,  2719,
+    2721,  2723,  2725,  2730,  2732,  2734,  2739,  2765,  2766,  2768,
+    2772,  2773,  2777,  2779,  2781,  2783,  2785,  2787,  2794,  2796,
+    2798,  2800,  2802,  2804,  2809,  2814,  2816,  2818,  2836,  2838,
+    2843,  2844
 };
 #endif
@@ -1125,29 +1126,30 @@
   "'?'", "':'", "'='", "';'", "$accept", "push", "pop", "constant",
   "identifier", "no_01_identifier", "no_attr_identifier", "zero_one",
-  "string_literal_list", "primary_expression", "postfix_expression",
-  "argument_expression_list", "argument_expression", "field_list", "field",
-  "unary_expression", "ptrref_operator", "unary_operator",
-  "cast_expression", "multiplicative_expression", "additive_expression",
-  "shift_expression", "relational_expression", "equality_expression",
-  "AND_expression", "exclusive_OR_expression", "inclusive_OR_expression",
-  "logical_AND_expression", "logical_OR_expression",
-  "conditional_expression", "constant_expression", "assignment_expression",
-  "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",
-  "expression_statement", "selection_statement", "case_value",
-  "case_value_list", "case_label", "case_label_list", "case_clause",
-  "switch_clause_list_opt", "switch_clause_list", "choose_clause_list_opt",
-  "choose_clause_list", "fall_through_opt", "fall_through",
-  "iteration_statement", "for_control_expression", "jump_statement",
-  "exception_statement", "handler_list", "handler_clause",
-  "finally_clause", "exception_declaration", "asm_statement",
-  "asm_volatile_opt", "asm_operands_opt", "asm_operands_list",
-  "asm_operand", "asm_clobbers_list_opt", "label_list",
-  "declaration_list_opt", "declaration_list", "old_declaration_list_opt",
-  "old_declaration_list", "local_label_declaration_opt",
-  "local_label_declaration_list", "local_label_list", "declaration",
-  "new_declaration", "new_variable_declaration", "new_variable_specifier",
+  "string_literal", "string_literal_list", "primary_expression",
+  "postfix_expression", "argument_expression_list", "argument_expression",
+  "field_list", "field", "unary_expression", "ptrref_operator",
+  "unary_operator", "cast_expression", "multiplicative_expression",
+  "additive_expression", "shift_expression", "relational_expression",
+  "equality_expression", "AND_expression", "exclusive_OR_expression",
+  "inclusive_OR_expression", "logical_AND_expression",
+  "logical_OR_expression", "conditional_expression", "constant_expression",
+  "assignment_expression", "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", "expression_statement",
+  "selection_statement", "case_value", "case_value_list", "case_label",
+  "case_label_list", "case_clause", "switch_clause_list_opt",
+  "switch_clause_list", "choose_clause_list_opt", "choose_clause_list",
+  "fall_through_opt", "fall_through", "iteration_statement",
+  "for_control_expression", "jump_statement", "exception_statement",
+  "handler_list", "handler_clause", "finally_clause",
+  "exception_declaration", "asm_statement", "asm_volatile_opt",
+  "asm_operands_opt", "asm_operands_list", "asm_operand",
+  "asm_clobbers_list_opt", "label_list", "declaration_list_opt",
+  "declaration_list", "old_declaration_list_opt", "old_declaration_list",
+  "local_label_declaration_opt", "local_label_declaration_list",
+  "local_label_list", "declaration", "new_declaration",
+  "new_variable_declaration", "new_variable_specifier",
   "new_function_declaration", "new_function_specifier",
   "new_function_return", "new_typedef_declaration", "typedef_declaration",
@@ -1156,10 +1158,9 @@
   "type_qualifier_list", "type_qualifier", "type_qualifier_name", "$@1",
   "declaration_qualifier_list", "storage_class_list", "storage_class",
-  "storage_class_name", "basic_type_name", "basic_declaration_specifier",
-  "basic_type_specifier", "direct_type_name", "indirect_type_name",
-  "sue_declaration_specifier", "sue_type_specifier",
-  "typedef_declaration_specifier", "typedef_type_specifier",
-  "elaborated_type_name", "aggregate_name", "$@2", "aggregate_key",
-  "field_declaration_list", "field_declaration",
+  "basic_type_name", "basic_declaration_specifier", "basic_type_specifier",
+  "direct_type_name", "indirect_type_name", "sue_declaration_specifier",
+  "sue_type_specifier", "typedef_declaration_specifier",
+  "typedef_type_specifier", "elaborated_type_name", "aggregate_name",
+  "$@2", "aggregate_key", "field_declaration_list", "field_declaration",
   "new_field_declaring_list", "field_declaring_list", "field_declarator",
   "bit_subrange_size_opt", "bit_subrange_size", "enum_key", "enum_name",
@@ -1238,79 +1239,79 @@
 {
        0,   133,   134,   135,   136,   136,   136,   137,   137,   137,
-     138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
-     142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
-     143,   143,   143,   144,   144,   145,   145,   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,   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,
+     138,   138,   139,   139,   140,   140,   141,   142,   142,   143,
+     143,   143,   143,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   145,   145,   146,   146,   147,   147,
+     148,   148,   148,   148,   148,   149,   149,   149,   149,   149,
+     149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
+     149,   150,   150,   151,   151,   151,   151,   152,   152,   152,
+     153,   153,   153,   153,   154,   154,   154,   155,   155,   155,
+     156,   156,   156,   156,   156,   157,   157,   157,   158,   158,
+     159,   159,   160,   160,   161,   161,   162,   162,   163,   163,
+     163,   163,   164,   165,   165,   165,   166,   166,   167,   167,
+     167,   167,   167,   167,   167,   167,   167,   167,   167,   167,
+     168,   168,   168,   168,   169,   169,   170,   170,   171,   171,
+     172,   172,   172,   172,   172,   172,   172,   172,   172,   173,
+     174,   174,   175,   175,   176,   176,   176,   176,   177,   177,
+     178,   179,   179,   179,   179,   179,   179,   180,   180,   180,
+     181,   181,   182,   182,   183,   183,   184,   185,   185,   186,
+     186,   187,   187,   188,   188,   188,   188,   189,   189,   190,
+     190,   191,   191,   191,   192,   192,   193,   193,   193,   193,
+     193,   193,   193,   193,   193,   193,   194,   194,   194,   195,
+     195,   195,   195,   195,   196,   196,   196,   196,   197,   198,
+     198,   198,   198,   198,   199,   199,   199,   199,   199,   200,
+     200,   201,   201,   202,   202,   203,   203,   204,   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,
+     210,   210,   211,   211,   212,   212,   213,   213,   214,   214,
+     214,   214,   214,   215,   215,   215,   216,   216,   216,   217,
+     217,   217,   217,   217,   218,   218,   218,   219,   219,   220,
+     220,   220,   221,   221,   221,   221,   221,   222,   222,   223,
+     223,   223,   223,   224,   224,   225,   225,   225,   225,   226,
+     226,   226,   226,   227,   227,   228,   228,   229,   229,   230,
+     230,   230,   230,   230,   231,   230,   232,   232,   232,   233,
+     233,   234,   234,   234,   234,   234,   234,   234,   234,   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,   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
+     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,   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
 };
 
@@ -1319,79 +1320,79 @@
 {
        0,     2,     0,     0,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
-       3,     3,     1,     6,     4,     3,     7,     3,     7,     2,
-       2,     7,     4,     1,     3,     0,     1,     1,     3,     1,
-       3,     7,     3,     7,     1,     1,     1,     2,     2,     2,
-       2,     2,     2,     4,     2,     4,     6,     1,     4,     4,
-       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,     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,     2,     1,
+       1,     3,     3,     1,     6,     4,     3,     7,     3,     7,
+       2,     2,     7,     4,     1,     3,     0,     1,     1,     3,
+       1,     3,     7,     3,     7,     1,     1,     1,     2,     2,
+       2,     2,     2,     2,     4,     2,     4,     6,     1,     4,
+       4,     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,
+       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,
-       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,     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,     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,     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,     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
+       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
 };
 
@@ -1401,160 +1402,160 @@
 static const yytype_uint16 yydefact[] =
 {
-     291,   291,   312,   310,   313,   311,   314,   315,   297,   299,
-     298,     0,   300,   326,   318,   323,   321,   322,   320,   319,
-     324,   325,   330,   327,   328,   329,   545,   545,   545,     0,
-       0,     0,   291,   217,   301,   316,   317,     7,   357,     0,
-       8,    14,    15,     0,     2,    60,    61,   563,     9,   291,
-     523,   521,   244,     3,   452,     3,   257,     0,     3,     3,
-       3,   245,     3,     0,     0,     0,   292,   293,   295,   291,
-     304,   307,   309,   338,   283,   331,   336,   284,   346,   285,
-     353,   350,   360,     0,     0,   361,   286,   471,   475,     3,
-       3,     0,     2,   517,   522,   527,   296,     0,     0,   545,
-     575,   545,     2,   586,   587,   588,   291,     0,   729,   730,
-       0,    12,     0,    13,   291,   267,   268,     0,   292,   287,
-     288,   289,   290,   524,   302,   390,   546,   547,   368,   369,
-      12,   443,   444,    11,   439,   442,     0,   501,   496,   487,
-     443,   444,     0,     0,   526,   218,     0,   291,     0,     0,
-       0,     0,     0,     0,     0,     0,   291,   291,     2,     0,
-     731,   292,   580,   592,   735,   728,   726,   733,     0,     0,
-       0,   251,     2,     0,   530,   437,   438,   436,     0,     0,
-       0,     0,   545,     0,   632,   633,     0,     0,   543,   539,
-     545,   560,   545,   545,   541,     2,   540,   545,   599,   545,
-     545,   602,     0,     0,     0,   291,   291,   310,   358,     2,
-     291,   258,   294,   305,   339,   351,   476,     0,     2,     0,
-     452,   259,   292,   332,   347,   354,   472,     0,     2,     0,
-     308,   333,   340,   341,     0,   348,   352,   355,   359,   444,
-     291,   370,   363,   367,     0,   392,   473,   477,     0,     0,
-       0,     1,   291,     2,   528,   574,   576,   291,     2,   739,
-     292,   742,   543,   543,     0,   292,     0,     0,   270,   545,
-     541,     2,   291,     0,     0,   291,   548,     2,   499,     2,
-     552,     0,     0,     0,     0,     0,     0,    18,    57,     4,
-       5,     6,    16,     0,     0,   291,     2,    62,    63,    64,
-      65,    45,    19,    46,    22,    44,    66,   291,     0,    69,
-      73,    76,    79,    84,    87,    89,    91,    93,    95,    97,
-     102,   493,   749,   450,   492,     0,   448,   449,     0,   564,
-     579,   582,   585,   591,   594,   597,   357,     0,     2,   737,
-       0,   291,   740,     2,    60,   291,     3,   424,     0,   432,
-     292,   291,   304,   331,   284,   346,   353,     3,     3,   406,
-     410,   420,   425,   471,   291,   426,   704,   705,   291,   427,
-     429,   291,     2,   581,   593,   727,     2,     2,   246,     2,
-     457,     0,   455,   454,   453,   138,     2,     2,   248,     2,
-       2,   247,     2,   278,     2,   279,     0,   277,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   565,   604,     0,
-     452,     2,   559,   568,   658,   561,   562,   531,   291,     2,
-     598,   607,   600,   601,     0,   273,   291,   291,   337,   292,
-       0,   292,     0,   291,   732,   736,   734,   532,   291,   543,
-     252,   260,   306,     0,     2,   533,   291,   497,   334,   335,
-     280,   349,   356,     0,   291,     0,   747,   397,     0,   474,
-     498,   249,   250,   518,   291,   434,     0,   291,   234,     0,
-       2,   236,     0,   292,     0,   254,     2,   255,   275,     0,
-       0,     2,   291,   543,   291,   484,   486,   485,     0,     0,
-     749,     0,   291,     0,   291,   488,   291,   558,   556,   557,
-     555,     0,   550,   553,     0,     0,   291,    52,   291,    66,
-      47,   291,    54,   291,   291,    50,    51,     2,   124,     0,
-       0,   446,     0,   445,   726,   118,   291,    17,     0,    29,
-      30,    35,     2,     0,    35,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   107,     0,    48,    49,     0,
+     293,   293,   313,   311,   314,   312,   315,   316,   299,   301,
+     300,     0,   302,   327,   319,   324,   322,   323,   321,   320,
+     325,   326,   331,   328,   329,   330,   546,   546,   546,     0,
+       0,     0,   293,   219,   303,   317,   318,     7,   358,     0,
+       8,    14,    15,     0,     2,    61,    62,   564,     9,   293,
+     524,   522,   246,     3,   453,     3,   259,     0,     3,     3,
+       3,   247,     3,     0,     0,     0,   294,   295,   297,   293,
+     306,   309,   339,   285,   332,   337,   286,   347,   287,   354,
+     351,   361,     0,     0,   362,   288,   472,   476,     3,     3,
+       0,     2,   518,   523,   528,   298,     0,     0,   546,   576,
+     546,     2,   587,   588,   589,   293,     0,   730,   731,     0,
+      12,     0,    13,   293,   269,   270,     0,   294,   289,   290,
+     291,   292,   525,   304,   391,   547,   548,   369,   370,    12,
+     444,   445,    11,   440,   443,     0,   502,   497,   488,   444,
+     445,     0,     0,   527,   220,     0,   293,     0,     0,     0,
+       0,     0,     0,     0,     0,   293,   293,     2,     0,   732,
+     294,   581,   593,   736,   729,   727,   734,     0,     0,     0,
+     253,     2,     0,   531,   438,   439,   437,     0,     0,     0,
+       0,   546,     0,   633,   634,     0,     0,   544,   540,   546,
+     561,   546,   546,   542,     2,   541,   546,   600,   546,   546,
+     603,     0,     0,     0,   293,   293,   311,   359,     2,   293,
+     260,   296,   307,   340,   352,   477,     0,     2,     0,   453,
+     261,   294,   333,   348,   355,   473,     0,     2,     0,   310,
+     334,   341,   342,     0,   349,   353,   356,   360,   445,   293,
+     371,   364,   368,     0,   393,   474,   478,     0,     0,     0,
+       1,   293,     2,   529,   575,   577,   293,     2,   740,   294,
+     743,   544,   544,     0,   294,     0,     0,   272,   546,   542,
+       2,   293,     0,     0,   293,   549,     2,   500,     2,   553,
+       0,     0,     0,     0,     0,     0,    19,    58,     4,     5,
+       6,    17,     0,     0,   293,     2,    63,    64,    65,    66,
+      46,    20,    47,    16,    23,    45,    67,   293,     0,    70,
+      74,    77,    80,    85,    88,    90,    92,    94,    96,    98,
+     103,   494,   750,   451,   493,     0,   449,   450,     0,   565,
+     580,   583,   586,   592,   595,   598,   358,     0,     2,   738,
+       0,   293,   741,     2,    61,   293,     3,   425,     0,   433,
+     294,   293,   306,   332,   286,   347,   354,     3,     3,   407,
+     411,   421,   426,   472,   293,   427,   705,   706,   293,   428,
+     430,   293,     2,   582,   594,   728,     2,     2,   248,     2,
+     458,     0,   456,   455,   454,   140,     2,     2,   250,     2,
+       2,   249,     2,   280,     2,   281,     0,   279,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   566,   605,     0,
+     453,     2,   560,   569,   659,   562,   563,   532,   293,     2,
+     599,   608,   601,   602,     0,   275,   293,   293,   338,   294,
+       0,   294,     0,   293,   733,   737,   735,   533,   293,   544,
+     254,   262,   308,     0,     2,   534,   293,   498,   335,   336,
+     282,   350,   357,     0,   293,     0,   748,   398,     0,   475,
+     499,   251,   252,   519,   293,   435,     0,   293,   236,     0,
+       2,   238,     0,   294,     0,   256,     2,   257,   277,     0,
+       0,     2,   293,   544,   293,   485,   487,   486,     0,     0,
+     750,     0,   293,     0,   293,   489,   293,   559,   557,   558,
+     556,     0,   551,   554,     0,     0,   293,    53,   293,    67,
+      48,   293,    55,   293,   293,    51,    52,     2,   126,     0,
+       0,   447,     0,   446,   727,   120,   293,    18,     0,    30,
+      31,    36,     2,     0,    36,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   109,   108,     0,    49,    50,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   104,
-       2,   644,   451,   641,   545,   545,   649,   478,   291,     2,
-     583,   584,     0,   595,   596,     0,     2,   738,   741,   118,
-     291,     0,     2,   706,   292,   710,   701,   702,   708,     0,
-       2,     2,   666,   545,   749,   615,   545,   545,   749,   545,
-     629,   545,   545,   680,   433,   663,   545,   545,   671,   678,
-     291,   428,   292,     0,     0,   291,   716,   292,   721,   749,
-     713,   291,   718,   749,   291,   291,   291,     0,   118,     0,
-      18,     2,     0,    19,     0,   458,   747,     0,     0,   464,
-     238,     0,   291,     0,     0,     0,   543,   567,   571,   573,
-     603,   606,   610,   613,   566,   605,     0,   281,   656,     0,
-     291,   274,     0,     0,     0,     0,   272,     2,     0,   256,
-     534,   291,     0,     0,   291,     2,   362,   382,   371,     0,
-       0,   376,   370,   748,     0,     0,   395,     0,   292,     3,
-     413,     3,   417,   416,   589,     0,   529,   291,    60,     3,
-     291,   432,   292,     3,   426,   427,     2,     0,     0,     0,
-     483,   303,   291,   479,   481,     3,     2,     2,     0,   500,
-       3,     0,   552,   126,     0,     0,   219,     0,     0,     0,
-       0,    36,     0,     0,   118,   291,    20,     0,    21,     0,
-     690,   695,   447,   687,   545,   545,     0,   105,     3,     2,
-      27,     0,    33,     0,     2,    25,     0,   103,    70,    71,
-      72,    74,    75,    77,    78,    82,    83,    80,    81,    85,
-      86,    88,    90,    92,    94,    96,     0,     0,   750,   291,
-       0,     0,     0,   645,   646,   642,   643,   495,   494,   291,
-       0,   291,   712,   291,   717,   292,   291,   660,   291,   291,
-     703,   659,     2,   291,     0,     0,     0,     0,     0,     0,
-       0,     0,   681,     0,   667,   618,   634,   668,     2,   614,
-     621,   430,   616,   617,   431,     2,   628,   637,   630,   631,
-     664,   665,   679,   707,   711,   709,   749,   265,     2,   743,
-       2,   421,   715,   720,   422,     0,   400,     3,     3,     3,
-       3,   452,     3,     0,     2,   466,   463,   748,     0,   459,
-       2,   462,   465,     0,   291,   239,   261,     3,   269,   271,
-       0,   452,     2,   569,   570,     2,   608,   609,     0,   657,
-     535,     3,   343,   342,   345,   344,   291,   536,     0,   537,
-     370,     0,     0,   291,   291,     0,     0,   690,   380,   383,
-     387,   545,   387,   386,   379,   372,   545,   374,   377,   291,
-     397,   391,   101,   398,   747,     0,     0,   435,   237,     0,
-       0,     3,     2,   666,   428,     0,   525,     0,   749,   487,
-       0,   291,   291,   291,     0,   549,   551,   127,     0,     0,
-     212,     0,     0,     0,   220,   221,    53,     0,    55,    58,
-      59,     0,     2,   125,     0,     0,     0,   691,   692,   688,
-     689,   457,    67,    68,   106,   122,     3,   105,     0,     0,
-      24,    35,     3,     0,    32,    99,     0,     3,   648,   652,
-     655,   647,     3,   590,     3,   714,   719,     2,    60,   291,
-       3,     3,   292,     0,     3,   620,   624,   627,   636,   670,
-     674,   677,   291,     3,   619,   635,   669,   291,   291,   423,
-     291,   291,   744,     0,     0,     0,     0,   253,     0,   101,
-       0,     3,     3,     0,   460,     0,   456,     0,     0,   242,
-     291,     0,     0,   126,     0,     0,     0,     0,     0,   126,
-       0,     0,   105,   105,    18,     2,     0,     0,     3,   128,
-     129,     2,   140,   130,   131,   132,   133,   134,   135,   142,
-     144,     0,     0,     0,   282,   291,   291,   545,     0,   538,
-     291,   373,   375,     0,   389,   691,   384,   388,   385,   378,
-     382,   365,   396,     0,   577,     2,   662,   661,     0,   667,
-       2,   480,   482,   502,     3,   510,   511,     0,     2,   506,
-       3,     3,     0,     0,   554,   219,     0,     0,     0,   219,
-       0,     0,   118,   694,   698,   700,   693,   747,   105,     0,
-       3,   659,    39,     3,    37,    34,     0,     3,    98,   100,
-       0,     2,   650,   651,     0,     0,   291,     0,     0,     0,
-       3,   636,     0,     2,   622,   623,     2,   638,     2,   672,
-     673,     0,     0,    60,     0,     3,     3,     3,     3,   408,
-     407,   411,     2,     2,   746,   745,   119,     0,     0,     0,
-       0,     3,   461,     3,     0,   240,   143,     3,   292,   291,
-       0,     0,     0,     0,     2,     0,   188,     0,   186,     0,
-       0,     0,     0,     0,     0,     0,   545,   118,     0,   148,
-     145,   291,     0,     0,   264,   276,     3,     3,   544,   611,
-     366,   381,   394,   291,   263,   291,     0,   513,   490,   291,
-       0,     0,   489,   504,     0,     0,     0,   213,     0,   222,
-      56,     2,   696,   697,     0,   123,   120,     0,     0,     0,
-       0,     0,    23,     0,   653,   291,   578,   262,   722,   723,
-     724,     0,   675,   291,   291,   291,     3,     3,     0,   683,
-       0,     0,     0,     0,   291,   291,     3,   542,   119,   468,
-       0,     0,   243,   292,     0,     0,     0,     0,   291,   189,
-     187,   184,     0,   190,     0,     0,     0,     0,   194,   197,
-     195,   191,     0,   192,   126,    35,   141,   139,   241,     0,
-       0,   415,   419,   418,     0,   507,     2,   508,     2,   509,
-     503,   291,   225,     0,   223,     0,   225,   291,    31,   121,
-       2,    42,     2,    40,    38,    28,    26,     3,   725,     3,
-       3,     3,     0,     0,   682,   684,   625,   639,   266,     2,
-     405,     3,   404,     0,   470,   467,   126,     0,     0,   126,
-       3,     0,   126,   185,     0,     2,     2,   206,   196,     0,
-       0,     0,   137,     0,   572,   612,     2,     0,     0,     2,
-     226,     0,     0,   214,     0,     3,     0,     0,     0,     0,
-       0,     0,   685,   686,   291,     0,   469,   149,     0,     0,
-       2,   162,   126,   151,     0,   179,     0,   126,     0,     2,
-     153,     0,     2,     0,     2,     2,     2,   193,    32,   291,
-     512,   514,   505,     0,     0,     0,     0,     0,     3,     3,
-     654,   626,   640,   676,   409,   126,   155,   158,     0,   157,
-     161,     3,   164,   163,     0,   126,   181,   126,     3,     0,
-     291,     0,   291,     0,     2,     0,     2,   136,     2,   227,
-     228,     0,   224,   215,   699,     0,     0,   150,     0,     0,
-     160,   230,   165,     2,   232,   180,     0,   183,   169,   198,
-       3,   207,   211,   200,     3,     0,   291,     0,   291,     0,
-       0,     0,    43,    41,   156,   159,   126,     0,   166,   291,
-     126,   126,     0,   170,     0,     0,   690,   208,   209,   210,
-       0,   199,     3,   201,     3,   291,   216,   229,   146,   167,
-     152,   126,   233,   182,   177,   175,   171,   154,   126,     0,
-     691,     0,     0,     0,     0,   147,   168,   178,   172,   176,
-     175,   173,     3,     3,     0,     0,   491,   174,   202,   204,
-       3,     3,   203,   205
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     105,     2,   645,   452,   642,   546,   546,   650,   479,   293,
+       2,   584,   585,     0,   596,   597,     0,     2,   739,   742,
+     120,   293,     0,     2,   707,   294,   711,   702,   703,   709,
+       0,     2,     2,   667,   546,   750,   616,   546,   546,   750,
+     546,   630,   546,   546,   681,   434,   664,   546,   546,   672,
+     679,   293,   429,   294,     0,     0,   293,   717,   294,   722,
+     750,   714,   293,   719,   750,   293,   293,   293,     0,   120,
+       0,    19,     2,     0,    20,     0,   459,   748,     0,     0,
+     465,   240,     0,   293,     0,     0,     0,   544,   568,   572,
+     574,   604,   607,   611,   614,   567,   606,     0,   283,   657,
+       0,   293,   276,     0,     0,     0,     0,   274,     2,     0,
+     258,   535,   293,     0,     0,   293,     2,   363,   383,   372,
+       0,     0,   377,   371,   749,     0,     0,   396,     0,   294,
+       3,   414,     3,   418,   417,   590,     0,   530,   293,    61,
+       3,   293,   433,   294,     3,   427,   428,     2,     0,     0,
+       0,   484,   305,   293,   480,   482,     3,     2,     2,     0,
+     501,     3,     0,   553,   128,     0,     0,   221,     0,     0,
+       0,     0,    37,     0,     0,   120,   293,    21,     0,    22,
+       0,   691,   696,   448,   688,   546,   546,     0,   106,     3,
+       2,    28,     0,    34,     0,     2,    26,     0,   104,    71,
+      72,    73,    75,    76,    78,    79,    83,    84,    81,    82,
+      86,    87,    89,    91,    93,    95,    97,     0,     0,   751,
+     293,     0,     0,     0,   646,   647,   643,   644,   496,   495,
+     293,     0,   293,   713,   293,   718,   294,   293,   661,   293,
+     293,   704,   660,     2,   293,     0,     0,     0,     0,     0,
+       0,     0,     0,   682,     0,   668,   619,   635,   669,     2,
+     615,   622,   431,   617,   618,   432,     2,   629,   638,   631,
+     632,   665,   666,   680,   708,   712,   710,   750,   267,     2,
+     744,     2,   422,   716,   721,   423,     0,   401,     3,     3,
+       3,     3,   453,     3,     0,     2,   467,   464,   749,     0,
+     460,     2,   463,   466,     0,   293,   241,   263,     3,   271,
+     273,     0,   453,     2,   570,   571,     2,   609,   610,     0,
+     658,   536,     3,   344,   343,   346,   345,   293,   537,     0,
+     538,   371,     0,     0,   293,   293,     0,     0,   691,   381,
+     384,   388,   546,   388,   387,   380,   373,   546,   375,   378,
+     293,   398,   392,   102,   399,   748,     0,     0,   436,   239,
+       0,     0,     3,     2,   667,   429,     0,   526,     0,   750,
+     488,     0,   293,   293,   293,     0,   550,   552,   129,     0,
+       0,   214,     0,     0,     0,   222,   223,    54,     0,    56,
+      59,    60,     0,     2,   127,     0,     0,     0,   692,   693,
+     689,   690,   458,    68,    69,   107,   124,     3,   106,     0,
+       0,    25,    36,     3,     0,    33,   100,     0,     3,   649,
+     653,   656,   648,     3,   591,     3,   715,   720,     2,    61,
+     293,     3,     3,   294,     0,     3,   621,   625,   628,   637,
+     671,   675,   678,   293,     3,   620,   636,   670,   293,   293,
+     424,   293,   293,   745,     0,     0,     0,     0,   255,     0,
+     102,     0,     3,     3,     0,   461,     0,   457,     0,     0,
+     244,   293,     0,     0,   128,     0,     0,     0,     0,     0,
+     128,     0,     0,   106,   106,    19,     2,     0,     0,     3,
+     130,   131,     2,   142,   132,   133,   134,   135,   136,   137,
+     144,   146,     0,     0,     0,   284,   293,   293,   546,     0,
+     539,   293,   374,   376,     0,   390,   692,   385,   389,   386,
+     379,   383,   366,   397,     0,   578,     2,   663,   662,     0,
+     668,     2,   481,   483,   503,     3,   511,   512,     0,     2,
+     507,     3,     3,     0,     0,   555,   221,     0,     0,     0,
+     221,     0,     0,   120,   695,   699,   701,   694,   748,   106,
+       0,     3,   660,    40,     3,    38,    35,     0,     3,    99,
+     101,     0,     2,   651,   652,     0,     0,   293,     0,     0,
+       0,     3,   637,     0,     2,   623,   624,     2,   639,     2,
+     673,   674,     0,     0,    61,     0,     3,     3,     3,     3,
+     409,   408,   412,     2,     2,   747,   746,   121,     0,     0,
+       0,     0,     3,   462,     3,     0,   242,   145,     3,   294,
+     293,     0,     0,     0,     0,     2,     0,   190,     0,   188,
+       0,     0,     0,     0,     0,     0,     0,   546,   120,     0,
+     150,   147,   293,     0,     0,   266,   278,     3,     3,   545,
+     612,   367,   382,   395,   293,   265,   293,     0,   514,   491,
+     293,     0,     0,   490,   505,     0,     0,     0,   215,     0,
+     224,    57,     2,   697,   698,     0,   125,   122,     0,     0,
+       0,     0,     0,    24,     0,   654,   293,   579,   264,   723,
+     724,   725,     0,   676,   293,   293,   293,     3,     3,     0,
+     684,     0,     0,     0,     0,   293,   293,     3,   543,   121,
+     469,     0,     0,   245,   294,     0,     0,     0,     0,   293,
+     191,   189,   186,     0,   192,     0,     0,     0,     0,   196,
+     199,   197,   193,     0,   194,   128,    36,   143,   141,   243,
+       0,     0,   416,   420,   419,     0,   508,     2,   509,     2,
+     510,   504,   293,   227,     0,   225,     0,   227,   293,    32,
+     123,     2,    43,     2,    41,    39,    29,    27,     3,   726,
+       3,     3,     3,     0,     0,   683,   685,   626,   640,   268,
+       2,   406,     3,   405,     0,   471,   468,   128,     0,     0,
+     128,     3,     0,   128,   187,     0,     2,     2,   208,   198,
+       0,     0,     0,   139,     0,   573,   613,     2,     0,     0,
+       2,   228,     0,     0,   216,     0,     3,     0,     0,     0,
+       0,     0,     0,   686,   687,   293,     0,   470,   151,     0,
+       0,     2,   164,   128,   153,     0,   181,     0,   128,     0,
+       2,   155,     0,     2,     0,     2,     2,     2,   195,    33,
+     293,   513,   515,   506,     0,     0,     0,     0,     0,     3,
+       3,   655,   627,   641,   677,   410,   128,   157,   160,     0,
+     159,   163,     3,   166,   165,     0,   128,   183,   128,     3,
+       0,   293,     0,   293,     0,     2,     0,     2,   138,     2,
+     229,   230,     0,   226,   217,   700,     0,     0,   152,     0,
+       0,   162,   232,   167,     2,   234,   182,     0,   185,   171,
+     200,     3,   209,   213,   202,     3,     0,   293,     0,   293,
+       0,     0,     0,    44,    42,   158,   161,   128,     0,   168,
+     293,   128,   128,     0,   172,     0,     0,   691,   210,   211,
+     212,     0,   201,     3,   203,     3,   293,   218,   231,   148,
+     169,   154,   128,   235,   184,   179,   177,   173,   156,   128,
+       0,   692,     0,     0,     0,     0,   149,   170,   180,   174,
+     178,   177,   175,     3,     3,     0,     0,   492,   176,   204,
+     206,     3,     3,   205,   207
 };
 
@@ -1562,192 +1563,192 @@
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   813,   468,   301,    47,   134,   135,   302,   303,   304,
-     305,   761,   762,  1133,  1134,   306,   381,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-    1030,   518,   975,   546,   322,   976,   947,  1057,  1518,  1059,
-    1060,  1061,  1062,  1519,  1063,  1064,  1437,  1438,  1401,  1402,
-    1403,  1497,  1498,  1502,  1503,  1538,  1539,  1065,  1361,  1066,
-    1067,  1298,  1299,  1300,  1480,  1068,   146,   953,   954,   955,
-    1381,  1461,  1472,  1473,   469,   470,   874,   875,  1038,    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,   688,   689,   690,   908,
-    1086,   909,    84,    85,   458,   456,   696,   855,   856,   857,
-     858,   699,   700,   701,   359,   360,   361,   362,   466,   340,
-     136,   137,   522,   324,   171,   645,   646,   647,   648,   649,
-      86,   122,    88,   489,   490,   939,   491,   278,   495,   325,
-      89,   138,   139,    90,  1321,  1108,  1109,  1110,  1111,    91,
-      92,   717,    93,   274,    94,    95,   188,  1032,   679,   412,
-     126,    96,   501,   502,   503,   189,   269,   191,   192,   193,
-     270,    99,   100,   101,   102,   103,   104,   105,   196,   197,
-     198,   199,   200,   825,   605,   606,   607,   608,   201,   610,
-     611,   612,   572,   573,   574,   575,   751,   106,   614,   615,
-     616,   617,   618,   619,   968,   753,   754,   755,   595,   365,
-     366,   367,   368,   326,   165,   108,   109,   110,   370,   694,
-     569
+      -1,   814,   468,   300,    47,   133,   134,   301,   302,   303,
+     304,   305,   762,   763,  1134,  1135,   306,   381,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,  1031,   518,   976,   547,   322,   977,   948,  1058,  1519,
+    1060,  1061,  1062,  1063,  1520,  1064,  1065,  1438,  1439,  1402,
+    1403,  1404,  1498,  1499,  1503,  1504,  1539,  1540,  1066,  1362,
+    1067,  1068,  1299,  1300,  1301,  1481,  1069,   145,   954,   955,
+     956,  1382,  1462,  1473,  1474,   469,   470,   875,   876,  1039,
+      51,    52,    53,    54,    55,   347,   158,    58,    59,    60,
+      61,    62,   349,    64,    65,   264,    67,    68,   274,   351,
+     352,    71,    72,    73,   118,    75,   204,   354,   119,    78,
+     120,    80,    81,   455,    82,   454,   689,   690,   691,   909,
+    1087,   910,    83,    84,   458,   456,   697,   856,   857,   858,
+     859,   700,   701,   702,   359,   360,   361,   362,   466,   340,
+     135,   136,   522,   324,   170,   646,   647,   648,   649,   650,
+      85,   121,    87,   489,   490,   940,   491,   277,   495,   325,
+      88,   137,   138,    89,  1322,  1109,  1110,  1111,  1112,    90,
+      91,   718,    92,   273,    93,    94,   187,  1033,   680,   412,
+     125,    95,   501,   502,   503,   188,   268,   190,   191,   192,
+     269,    98,    99,   100,   101,   102,   103,   104,   195,   196,
+     197,   198,   199,   826,   606,   607,   608,   609,   200,   611,
+     612,   613,   573,   574,   575,   576,   752,   105,   615,   616,
+     617,   618,   619,   620,   969,   754,   755,   756,   596,   365,
+     366,   367,   368,   326,   164,   107,   108,   109,   370,   695,
+     570
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1310
+#define YYPACT_NINF -1323
 static const yytype_int16 yypact[] =
 {
-    7316,  8697, -1310,    16, -1310, -1310, -1310, -1310, -1310, -1310,
-   -1310,    22, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
-   -1310, -1310, -1310, -1310, -1310, -1310,   101,   101,   101,  1152,
-     941,    64,  7548,   141, -1310, -1310, -1310, -1310, -1310,    87,
-   -1310, -1310, -1310,   868,   134, -1310, -1310, -1310, -1310,  9158,
-   -1310, -1310, -1310, -1310,   149,   144, -1310,  1337, -1310, -1310,
-   -1310, -1310,   139,   935,   260,   102,  2892, -1310, -1310,  9196,
-     790, -1310, -1310, -1310,   904,   293,  5512,   547,   778,   904,
-    1166, -1310, -1310,   554,   624, -1310,   904,  1343, -1310,   187,
-   -1310,   308,   336, -1310, -1310, -1310, -1310,   251,   144,   101,
-   -1310,   101, -1310, -1310, -1310, -1310,  8923,  1337, -1310, -1310,
-    1337, -1310,   337, -1310,  9043, -1310, -1310,  1053,  9381, -1310,
-    1729,  1729,  1729, -1310, -1310, -1310,   101, -1310, -1310, -1310,
-     410,   413,   418, -1310, -1310, -1310,   433, -1310, -1310, -1310,
-   -1310, -1310,   468,   477, -1310, -1310,    37,  8666,  2607,   742,
-     369,   496,   509,   523,   530,   535,  8584,  6836,   536,   546,
-   -1310,  9234, -1310, -1310, -1310, -1310,   561, -1310,   245,  4633,
-    4633, -1310,   562,   361, -1310, -1310, -1310, -1310,   574,   383,
-     408,   429,   101,   577, -1310, -1310,   935,  3015,   664, -1310,
-      86, -1310,   101,   101,   144, -1310, -1310,    89, -1310,   101,
-     101, -1310,  3541,   634,   653,  1729,  6748, -1310, -1310,   623,
-    9158, -1310, -1310,   904, -1310, -1310, -1310,   144, -1310,  1337,
-     149, -1310,  7737, -1310,  1729,  1729,  1729,   144, -1310,  1152,
-   -1310,  5996, -1310, -1310,   642,  1729, -1310,  1729, -1310,    87,
-    8666, -1310,   672, -1310,   941,   697,  1729, -1310,  1152,   699,
-     702, -1310,  7548,   567, -1310, -1310, -1310,  9125, -1310, -1310,
-    4167, -1310,   664,    10,  5116,  9381,  1053,  3541, -1310,    94,
-   -1310, -1310,  9043,  1337,   715, 10741, -1310, -1310,    11, -1310,
-   10483,   740,   772, 10231,   759, 10288, 10307, -1310,   763, -1310,
-   -1310, -1310, -1310, 10364, 10364,  8440,   765, -1310, -1310, -1310,
-   -1310, -1310, -1310,   799, -1310,   616,  2256,  8779, 10288, -1310,
-     475,   860,   810,   276,   913,   766,   767,   793,   832,    41,
-   -1310, -1310,   807,   704, -1310,   331, -1310, -1310,  2607, -1310,
-   -1310,   242,   835, -1310,   421,   835,   841,    87, -1310, -1310,
-     846,  8923, -1310,   847,   857,  8892, -1310, -1310,  1352,  2069,
-    8155,  6748,   904, -1310,   904,  1729,  1729, -1310, -1310, -1310,
-   -1310, -1310, -1310,  1729,  8923,  1337, -1310, -1310,  9419,  1457,
-   -1310,  7886, -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,
-   10098, 10288, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
-   -1310, -1310, -1310, -1310, -1310, -1310,  1053, -1310,   928,   862,
-     891,   893,  1023,   916,   937,   951,  3015, -1310, -1310,   942,
-     149,   958, -1310, -1310,   970, -1310, -1310, -1310,  9125, -1310,
-   -1310, -1310, -1310, -1310,  3541, -1310,  8666,  8666, -1310,  1729,
-    1053,  6867,  1337,  8228, -1310, -1310, -1310, -1310,  9125,    10,
-   -1310, -1310,   904,   144, -1310, -1310,  9125, -1310,  6513, -1310,
-   -1310,  1729,  1729,   382,  5342,   969,   972,   960,  1031,  1729,
-   -1310, -1310, -1310, -1310,  9605, -1310,   450,  6629, -1310,   144,
-    1033, -1310,  1053, 10565, 10155, -1310, -1310, -1310, -1310,  1039,
-    3541, -1310,  8301,   664,  7432, -1310, -1310, -1310,   984,   626,
-     807,   941, 10741,   606,  9043, -1310, 10741, -1310, -1310, -1310,
-   -1310,   690, -1310,  1044,   772,   255,  8440, -1310,  9457, -1310,
-   -1310,  8440, -1310,  8553,  8440, -1310, -1310,  1042, -1310,   722,
-    1047,   818,  1048, -1310, -1310,  9310,  6479, -1310,   321, -1310,
-   -1310,  5116, -1310,   602,  5116, -1310, -1310, -1310, -1310, -1310,
-   -1310, -1310, -1310, -1310, -1310, -1310,  5116, -1310, -1310, 10288,
-   10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288,
-   10288, 10288, 10288, 10288, 10288, 10288, 10288,  2426,  5116, -1310,
-     704,   830, -1310, -1310,   101,   101, -1310, -1310,  8666, -1310,
-   -1310,   970,   567, -1310,   970, 10212, -1310, -1310, -1310,  4524,
-    6479,  1049,  1054, -1310,  9381, -1310, -1310,   561, -1310,  1056,
-     774,  1073,  2515,    95,   807, -1310,   101,   101,   807,    98,
-   -1310,   101,   101,   970, -1310, -1310,   101,   101, -1310,   835,
-    9490,  1337, 10710,   283,   326,  9490, -1310,  4167, -1310,   807,
-   -1310,  8923, -1310,    80,  7852,  7852,  7852,  1337, -1310,  4787,
-    1065,   875,   744,  1066,  1067, -1310,  1070,  4633,   333, -1310,
-    1134,  1337,  7852,   567,  1053,   567,   664,   494,   835, -1310,
-   -1310,   584,   835, -1310, -1310, -1310,   772, -1310,   835,   144,
-    9605, -1310,   737,  1083,   750,  1090, -1310,  1089,   144, -1310,
-   -1310,  9125,   144,  1088,  9457,  1092, -1310,  1677, -1310,   441,
-     448,   941, -1310,   941,  1091, 10288, -1310,   941, 10710, -1310,
-   -1310,  1098, -1310, -1310, -1310,   567, -1310, 10638,   857, -1310,
-    7852,   853,  8155, -1310, -1310,   561,  1095,  1097,   984,  3316,
-   -1310, -1310, 10741, -1310, -1310,  1099, -1310, -1310,  1105, -1310,
-    1099,  1111, 10483,  5116,    62,  1102,   167,  1113,  1121,  1129,
-    1130, -1310,  1131,  1132,  9348,  6598, -1310,  5116, -1310,   818,
-     978, -1310, -1310, -1310,   101,   101,  5540,  5116,  1135, -1310,
-   -1310,   757, -1310,  5116, -1310, -1310,   914, -1310, -1310, -1310,
-   -1310,   475,   475,   860,   860,   810,   810,   810,   810,   276,
-     276,   913,   766,   767,   793,   832, 10288,   282, -1310,  9605,
-    1136,  1137,  1140,   830, -1310, -1310, -1310, -1310, -1310,  9605,
-     779,  7852, -1310,  8923, -1310,  6955,  9005, -1310,  7886,  6836,
-   -1310, -1310,   774,  9605,  1063,  1142,  1143,  1145,  1146,  1147,
-    1148,  1154, -1310,  3759,  2515, -1310, -1310, -1310, -1310, -1310,
-   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
-   -1310, -1310,   970, -1310, -1310, -1310,   807, -1310, -1310, -1310,
-   -1310, -1310, -1310, -1310, -1310,  1156, -1310,  1159,  1160, -1310,
-   -1310,   149,  1135,  4787, -1310, -1310, -1310, 10098,  1157, -1310,
-   -1310, -1310, -1310,   941,  6225,  1247, -1310, -1310, -1310, -1310,
-    1150,   149, -1310, -1310,   970, -1310, -1310,   970,   137,   970,
-   -1310, -1310, -1310, -1310, -1310, -1310,  9272, -1310,   144, -1310,
-   -1310,   451,   452,  9419,  7074,  2178, 10288,  3429, -1310, -1310,
-    1149,    39,  1149, -1310,   941, -1310,   101, -1310, -1310,  8073,
-     960, -1310, -1310, -1310,   972,  1168,  1169, -1310, -1310,  1170,
-    1172, -1310,   853,  1305, -1310,   359, -1310,  3316,   807, -1310,
-    1177, 10741,  9528,  8666,  1180, -1310, -1310,  1175,  1182,  1164,
-   -1310, 10288,    56,   233,  1179, -1310,  1183,   567,  1183, -1310,
-   -1310,  1183,  1184, -1310,  1189,  1190,  1192,   978, -1310, -1310,
-   -1310, 10098, -1310, -1310, -1310, -1310,  1188,  5116,  1193,   567,
-   -1310,  5116, -1310,   567, -1310, -1310,  5116, -1310,   595,   835,
-   -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,   857,  8892,
-   -1310, -1310,  7193,  1196, -1310,   622,   835, -1310,   644,   649,
-     835, -1310,  1729,  4053, -1310, -1310, -1310,  9605,  9605, -1310,
-    8228,  8228, -1310,  1194,  1195,  1198,  1199, -1310,  1200,   531,
-      27,  1135, -1310,   567, -1310,  4633, -1310,  5116,   453, -1310,
-    6359,  1213,  1217, 10041,  1222,  1223,    43,    49,   106,  5116,
-    1228,   144,  5116,  5116,  1208,  1237,   142,  1218, -1310, -1310,
-   -1310,  1236, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
-   -1310,   941,  1249,  5116, -1310,  9605,  9605,   101,  1252, -1310,
-    8810, -1310, -1310,   987, -1310,  3429, -1310, -1310, -1310, -1310,
-    1677, -1310, -1310,  1253, -1310, -1310, -1310, -1310,  1254,  1305,
-   -1310, -1310,  1239, -1310,  1099, -1310, -1310,  1053,  1258, -1310,
-   -1310, -1310,   806,  1262, -1310,   167,  1267, 10288,  1248,   167,
-     167,  1273,  9310,   693,   835, -1310, -1310,  1070,  5116,  1274,
-    1188,   208,   157,  1269, -1310, -1310,  1278,  1269, -1310, -1310,
-    1282, -1310, -1310,   970,  1286,  1288,  6717,  1287,  1289,  1291,
-   -1310, -1310,  1290, -1310, -1310,   970, -1310, -1310, -1310, -1310,
-     970,  5116,  5116,   857,  1292, -1310, -1310, -1310, -1310, -1310,
-   -1310, -1310, -1310, -1310, -1310, -1310, -1310, 10288, 10288,  1294,
-    1295,  1269, -1310, -1310,   941, -1310, -1310, -1310,  5073,  9528,
-    5116,  5116,  1370,  5116, -1310,  1298, -1310,  1299, -1310,  1302,
-    5116,  1306,  5116,  1123,  1307,    30,   101,  5821,  1435, -1310,
-   -1310,  6225,  1303,   456, -1310, -1310, -1310, -1310, -1310, -1310,
-   -1310, -1310, -1310,  9861, -1310,  8301,  1330, -1310, -1310,  9528,
-     463,   481, -1310,  1328,  1314,   772,  1341, -1310,   306, -1310,
-   -1310, -1310, -1310,   970,  1332, -1310, -1310,  1342,   753,   834,
-     567,  1345, -1310,  1350, -1310,  9605, -1310, -1310, -1310, -1310,
-   -1310,  1351, -1310,  9605,  9605,  9605, -1310, -1310,  1359, -1310,
-    1362,  1365,  1366,   557,  7925,  8040, -1310, -1310,   420, -1310,
-    1368,  1371, -1310,  8374,   815,   844,  1346,   866,  6094, -1310,
-   -1310, -1310,   485, -1310,   888,  1369,  1375,   144,  1417,  1051,
-   -1310, -1310,  5116, -1310, 10041,  5116, -1310, -1310, -1310,  1377,
-    1379, -1310, -1310, -1310,  1376, -1310, -1310, -1310, -1310, -1310,
-   -1310,  9528,   772,   195, -1310,  1353,   772,  9605, -1310, -1310,
-   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
-   -1310, -1310,  1384,  1388, -1310, -1310, -1310, -1310, -1310, -1310,
-   -1310,  1394, -1310,  1397, -1310, -1310, 10041,   217,  5116, 10041,
-   -1310,  1400,  5116, -1310,   289,  1421,  1423, -1310, -1310,  1403,
-    1415,  1393, -1310,  1001, -1310, -1310, -1310,  1337,  1053,  1412,
-     799,   323, 10288, -1310,   953, -1310,   567,   567,  1418,  1425,
-    1426,  1428, -1310, -1310,  8228,  1427, -1310,  1497, 10288,  1420,
-   -1310, -1310,  9953, -1310,   955, -1310,  1419, 10041,  1424, -1310,
-   -1310,  1442, -1310,  1445, -1310,  1461,  1462, -1310,  1430,  9528,
-   -1310, -1310, -1310,   772,   567,  1453,  1436,  1459,  1269,  1269,
-   -1310, -1310, -1310, -1310, -1310, 10041,   204, -1310,   370, -1310,
-   -1310,  3684, -1310, -1310,  1439,  5116, -1310,  5116,  3684,   144,
-    9457,   144,  9457,  1463, -1310,  1465, -1310, -1310,  1464,   799,
-   -1310,   968, -1310, -1310, -1310,  1460,  1466, -1310, 10288, 10288,
-   -1310, -1310,  1075,   122, -1310, -1310,  1444, -1310,  1075, -1310,
-   -1310,  2191,   567, -1310, -1310,   144,  9457,   144,  9457,  1472,
-    1450,   567, -1310, -1310, -1310, -1310,  9953,  1469,  1075,  7664,
-    5116,  9865,  1470,  1075,  1479,  2191,  3509, -1310, -1310, -1310,
-    1482, -1310, -1310, -1310, -1310,  8666, -1310, -1310, -1310,  9732,
-   -1310,  9953, -1310, -1310,  1468,  9644, -1310, -1310,  9865,   144,
-    3509,   144,  1484,  1486,   976, -1310,  9732, -1310, -1310, -1310,
-    9644, -1310, -1310, -1310,   144,   144, -1310, -1310, -1310, -1310,
-   -1310, -1310, -1310, -1310
+    7329,  8828, -1323,    37, -1323, -1323, -1323, -1323, -1323, -1323,
+   -1323,   109, -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323,
+   -1323, -1323, -1323, -1323, -1323, -1323,    85,    85,    85,   873,
+     733,   178,  7561,   370, -1323, -1323, -1323, -1323, -1323,   191,
+   -1323, -1323, -1323,   614,   225, -1323, -1323, -1323, -1323,  4615,
+   -1323, -1323, -1323, -1323,   229,   285, -1323,   934, -1323, -1323,
+   -1323, -1323,   435,  1196,   579,   110,  7677, -1323, -1323,  4858,
+    1038, -1323, -1323,   580,   596,  6761,  1021,   875,   580,  1103,
+   -1323, -1323,  1317,   308, -1323,   580,  1224, -1323,   495, -1323,
+     616,   623, -1323, -1323, -1323, -1323,   547,   285,    85, -1323,
+      85, -1323, -1323, -1323, -1323,  9174,   934, -1323, -1323,   934,
+   -1323,   551, -1323,  9403, -1323, -1323,  1899,  9436, -1323,   844,
+     844,   844, -1323, -1323, -1323,    85, -1323, -1323, -1323,   584,
+     608,   632, -1323, -1323, -1323,   646, -1323, -1323, -1323, -1323,
+   -1323,   664,   687, -1323, -1323,   -28,  8797,  2908,   117,   701,
+     717,   726,   771,   786,   799,  8715,  6849,   731,   757, -1323,
+    5600, -1323, -1323, -1323, -1323,   804, -1323,   223,  5225,  5225,
+   -1323,   802,   365, -1323, -1323, -1323, -1323,   816,   443,   480,
+     534,    85,   827, -1323, -1323,  1196,  4341,   868, -1323,    50,
+   -1323,    85,    85,   285, -1323, -1323,    61, -1323,    85,    85,
+   -1323,  4647,   857,   864,   844,  6523, -1323, -1323,   869,  4615,
+   -1323, -1323,   580, -1323, -1323, -1323,   285, -1323,   934,   229,
+   -1323,  7868, -1323,   844,   844,   844,   285, -1323,   873, -1323,
+    5676, -1323, -1323,   852,   844, -1323,   844, -1323,   191,  8797,
+   -1323,   884, -1323,   733,   890,   844, -1323,   873,   888,   892,
+   -1323,  7561,   631, -1323, -1323, -1323,  9256, -1323, -1323,  9621,
+   -1323,   868,   151, 10214,  9436,  1899,  4647, -1323,    88, -1323,
+   -1323,  9403,   934,   891,  7708, -1323, -1323,   347, -1323, 10561,
+     922,   956, 10347,   945, 10366, 10423, -1323,   954, -1323, -1323,
+   -1323, -1323, 10442, 10442,  8571,   952, -1323, -1323, -1323, -1323,
+   -1323, -1323, -1323,   988, -1323,   966,  1946,  8910, 10366, -1323,
+     756,   338,   485,   411,   635,   955,   947,   957,   984,   237,
+   -1323, -1323,   962,   647, -1323,   302, -1323, -1323,  2908, -1323,
+   -1323,   235,   985, -1323,   312,   985,   989,   191, -1323, -1323,
+     990,  9174, -1323,   999,  1006,  9023, -1323, -1323,  1335,  2030,
+    8286,  6523,   580, -1323,   580,   844,   844, -1323, -1323, -1323,
+   -1323, -1323, -1323,   844,  9174,   934, -1323, -1323,  9474,  1575,
+   -1323,  8017, -1323, -1323, -1323, -1323, -1323, -1323, -1323,  1008,
+    5958, 10366, -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323,
+   -1323, -1323, -1323, -1323, -1323, -1323,  1899, -1323,   973,   991,
+     992,  1012,   978,  1017,  1018,  1020,  4341, -1323, -1323,  1029,
+     229,  1031, -1323, -1323,  1033, -1323, -1323, -1323,  9256, -1323,
+   -1323, -1323, -1323, -1323,  4647, -1323,  8797,  8797, -1323,   844,
+    1899,  6642,   934,  8359, -1323, -1323, -1323, -1323,  9256,   151,
+   -1323, -1323,   580,   285, -1323, -1323,  9256, -1323,  5770, -1323,
+   -1323,   844,   844,   337,  8204,  1032,  1036,  1023,  1042,   844,
+   -1323, -1323, -1323, -1323,  9660, -1323,   367,  6404, -1323,   285,
+    1044, -1323,  1899, 10643, 10271, -1323, -1323, -1323, -1323,  1015,
+    4647, -1323,  8432,   868,  7445, -1323, -1323, -1323,   843,   436,
+     962,   733,  7708,  1341,  9403, -1323,  7708, -1323, -1323, -1323,
+   -1323,   508, -1323,  1051,   956,   248,  8571, -1323,  9512, -1323,
+   -1323,  8571, -1323,  8684,  8571, -1323, -1323,  1049, -1323,   606,
+    1057,   682,  1059, -1323, -1323,  3527,  6492, -1323,   362, -1323,
+   -1323, 10214, -1323,   368, 10214, -1323, -1323, -1323, -1323, -1323,
+   -1323, -1323, -1323, -1323, -1323, -1323, -1323, 10214, -1323, -1323,
+   10366, 10366, 10366, 10366, 10366, 10366, 10366, 10366, 10366, 10366,
+   10366, 10366, 10366, 10366, 10366, 10366, 10366, 10366,  3593, 10214,
+   -1323,   647,  1677, -1323, -1323,    85,    85, -1323, -1323,  8797,
+   -1323, -1323,  1033,   631, -1323,  1033, 10290, -1323, -1323, -1323,
+    5046,  6492,  1060,  1063, -1323,  9436, -1323, -1323,   804, -1323,
+    1067,   750,  1068,  2627,   125,   962, -1323,    85,    85,   962,
+     132, -1323,    85,    85,  1033, -1323, -1323,    85,    85, -1323,
+     985,  9545,   934, 10788,   532,   656,  9545, -1323,  9621, -1323,
+     962, -1323,  9174, -1323,   238,  7983,  7983,  7983,   934, -1323,
+    5791,  1047,  1008,   493,  1058,  1061, -1323,  1076,  5225,   528,
+   -1323,  1165,   934,  7983,   631,  1899,   631,   868,   430,   985,
+   -1323, -1323,   536,   985, -1323, -1323, -1323,   956, -1323,   985,
+     285,  9660, -1323,   619,  1086,   633,  1088, -1323,  1087,   285,
+   -1323, -1323,  9256,   285,  1089,  9512,  1092, -1323,  1065, -1323,
+     538,   552,   733, -1323,   733,  1085, 10366, -1323,   733, 10788,
+   -1323, -1323,  1096, -1323, -1323, -1323,   631, -1323, 10716,  1006,
+   -1323,  7983,   703,  8286, -1323, -1323,   804,  1095,  1098,   843,
+    5016, -1323, -1323,  7708, -1323, -1323,  1091, -1323, -1323,  1102,
+   -1323,  1091,  1104, 10561, 10214,  1090,  1093,    94,  1109,  1107,
+    1111,  1114, -1323,  1118,  1129,  9365,  6611, -1323, 10214, -1323,
+     682,  1717, -1323, -1323, -1323,    85,    85, 10157, 10214,  1125,
+   -1323, -1323,   653, -1323, 10214, -1323, -1323,   736, -1323, -1323,
+   -1323, -1323,   756,   756,   338,   338,   485,   485,   485,   485,
+     411,   411,   635,   955,   947,   957,   984, 10366,   260, -1323,
+    9660,  1132,  1136,  1137,  1677, -1323, -1323, -1323, -1323, -1323,
+    9660,   708,  7983, -1323,  9174, -1323,  6968,  9136, -1323,  8017,
+    6849, -1323, -1323,   750,  9660,  1022,  1140,  1141,  1142,  1143,
+    1146,  1149,  1154, -1323,  3715,  2627, -1323, -1323, -1323, -1323,
+   -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323,
+   -1323, -1323, -1323,  1033, -1323, -1323, -1323,   962, -1323, -1323,
+   -1323, -1323, -1323, -1323, -1323, -1323,  1155, -1323,  1157,  1159,
+   -1323, -1323,   229,  1125,  5791, -1323, -1323, -1323,  5958,  1158,
+   -1323, -1323, -1323, -1323,   733,  6174,  1248, -1323, -1323, -1323,
+   -1323,  1151,   229, -1323, -1323,  1033, -1323, -1323,  1033,    84,
+    1033, -1323, -1323, -1323, -1323, -1323, -1323,  9327, -1323,   285,
+   -1323, -1323,   559,   562,  9474,  7087,  2137, 10366,  3114, -1323,
+   -1323,  1156,    51,  1156, -1323,   733, -1323,    85, -1323, -1323,
+    8941,  1023, -1323, -1323, -1323,  1036,  1175,  1171, -1323, -1323,
+    1178,  1181, -1323,   703,  1901, -1323,   672, -1323,  5016,   962,
+   -1323,  1184,  7708,  9583,  8797,  1185, -1323, -1323,  1180,  1187,
+    1170, -1323, 10366,  1197,   326,  1194, -1323,  1202,   631,  1202,
+   -1323, -1323,  1202,  1199, -1323,  1208,  1210,  1211,  1717, -1323,
+   -1323, -1323,  5958, -1323, -1323, -1323, -1323,  1209, 10214,  1212,
+     631, -1323, 10214, -1323,   631, -1323, -1323, 10214, -1323,   558,
+     985, -1323, -1323, -1323, -1323, -1323, -1323, -1323,  1008,  1006,
+    9023, -1323, -1323,  7206,  1218, -1323,   674,   985, -1323,   813,
+     861,   985, -1323,   844,  4029, -1323, -1323, -1323,  9660,  9660,
+   -1323,  8359,  8359, -1323,  1215,  1216,  1225,  1230, -1323,  1232,
+     685,    82,  1125, -1323,   631, -1323,  5225, -1323, 10214,   564,
+   -1323,  6373,  1236,  1240, 10100,  1242,  1243,    70,    79,    96,
+   10214,  1244,   285, 10214, 10214,  1227,  1249,   522,  1222, -1323,
+   -1323, -1323,  1250, -1323, -1323, -1323, -1323, -1323, -1323, -1323,
+   -1323, -1323,   733,  1254, 10214, -1323,  9660,  9660,    85,  1257,
+   -1323,  9054, -1323, -1323,   752, -1323,  3114, -1323, -1323, -1323,
+   -1323,  1065, -1323, -1323,  1255, -1323, -1323, -1323, -1323,  1258,
+    1901, -1323, -1323,  1245, -1323,  1091, -1323, -1323,  1899,  1260,
+   -1323, -1323, -1323,   713,  1264, -1323,    94,  1269, 10366,  1252,
+      94,    94,  1262,  3527,   879,   985, -1323, -1323,  1076, 10214,
+    1273,  1209,   358,   204,  1270, -1323, -1323,  1275,  1270, -1323,
+   -1323,  1278, -1323, -1323,  1033,  1280,  1284,  6730,  1285,  1290,
+    1291, -1323, -1323,  1286, -1323, -1323,  1033, -1323, -1323, -1323,
+   -1323,  1033, 10214, 10214,  1006,  1294, -1323, -1323, -1323, -1323,
+   -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323, 10366, 10366,
+    1300,  1302,  1270, -1323, -1323,   733, -1323, -1323, -1323,  5213,
+    9583, 10214, 10214,  1374, 10214, -1323,  1295, -1323,  1296, -1323,
+    1297, 10214,  1301, 10214,  1105,  1304,    12,    85,  9289,  1625,
+   -1323, -1323,  6174,  1322,   573, -1323, -1323, -1323, -1323, -1323,
+   -1323, -1323, -1323, -1323,  9920, -1323,  8432,  1330, -1323, -1323,
+    9583,   576,   602, -1323,  1331,  1315,   956,  1337, -1323,   329,
+   -1323, -1323, -1323, -1323,  1033,  1339, -1323, -1323,  1320,   486,
+     509,   631,  1340, -1323,  1344, -1323,  9660, -1323, -1323, -1323,
+   -1323, -1323,  1347, -1323,  9660,  9660,  9660, -1323, -1323,  1348,
+   -1323,  1351,  1354,  1355,   716,  8056,  8171, -1323, -1323,   529,
+   -1323,  1357,  1362, -1323,  8505,   721,   730,  1358,   761,  3837,
+   -1323, -1323, -1323,   605, -1323,   766,  1366,  1367,   285,  1419,
+     834, -1323, -1323, 10214, -1323, 10100, 10214, -1323, -1323, -1323,
+    1370,  1375, -1323, -1323, -1323,  1372, -1323, -1323, -1323, -1323,
+   -1323, -1323,  9583,   956,  1379, -1323,  1352,   956,  9660, -1323,
+   -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323,
+   -1323, -1323, -1323,  1378,  1382, -1323, -1323, -1323, -1323, -1323,
+   -1323, -1323,  1387, -1323,  1386, -1323, -1323, 10100,   289, 10214,
+   10100, -1323,  1389, 10214, -1323,   318,  1405,  1406, -1323, -1323,
+    1399,  1400,  1380, -1323,   821, -1323, -1323, -1323,   934,  1899,
+    1396, -1323,   402, 10366, -1323,   785, -1323,   631,   631,  1407,
+    1408,  1413,  1415, -1323, -1323,  8359,  1414, -1323,  1490, 10366,
+    1385, -1323, -1323, 10012, -1323,   800, -1323,  1402, 10100,  1403,
+   -1323, -1323,  1426, -1323,  1427, -1323,  1445,  1446, -1323,  1411,
+    9583, -1323, -1323, -1323,   956,   631,  1434,  1417,  1435,  1270,
+    1270, -1323, -1323, -1323, -1323, -1323, 10100,   107, -1323,   433,
+   -1323, -1323,  7793, -1323, -1323,  1418, 10214, -1323, 10214,  7793,
+     285,  9512,   285,  9512,  1436, -1323,  1442, -1323, -1323,  1440,
+   -1323, -1323,   825, -1323, -1323, -1323,  1444,  1449, -1323, 10366,
+   10366, -1323, -1323,   909,   211, -1323, -1323,  1425, -1323,   909,
+   -1323, -1323,  2166,   631, -1323, -1323,   285,  9512,   285,  9512,
+    1453,  1431,   631, -1323, -1323, -1323, -1323, 10012,  1443,   909,
+    6091, 10214,  9924,  1452,   909,  1454,  2166,  3344, -1323, -1323,
+   -1323,  1458, -1323, -1323, -1323, -1323,  8797, -1323, -1323, -1323,
+    9791, -1323, 10012, -1323, -1323,  1438,  9703, -1323, -1323,  9924,
+     285,  3344,   285,  1464,  1466,   853, -1323,  9791, -1323, -1323,
+   -1323,  9703, -1323, -1323, -1323,   285,   285, -1323, -1323, -1323,
+   -1323, -1323, -1323, -1323, -1323
 };
 
@@ -1755,29 +1756,29 @@
 static const yytype_int16 yypgoto[] =
 {
-   -1310,  4585,  3220, -1310,  1680, -1310,    79,   965,  -162, -1310,
-     542,  -525,  -472,  -928,   -58,  5006,     0, -1310,   115,   571,
-     588,   220,   578,  1041,  1045,  1037,  1040,  1043, -1310,   682,
-    -568,  4467,  -949, -1310,  -743,   627,  -136,  -680,   399, -1310,
-     364, -1310,   400, -1052, -1310, -1310,   143, -1310, -1280, -1058,
-     249, -1310, -1310, -1310, -1310,    74, -1199, -1310, -1310, -1310,
-   -1310, -1310, -1310,   317, -1213,    36, -1310,  -398, -1310,   501,
-     296, -1310,   175, -1310,  -322, -1310, -1310, -1310,   558,  -827,
-   -1310, -1310,    14,  -963,    60,  1949, -1310, -1310, -1310,   -66,
-   -1310,    19,  1219,  -202,  1852,  4238, -1310, -1310,    54,    75,
-     689,  -242,  1416, -1310,  1975, -1310, -1310,   158,  2131, -1310,
-    2701,  1038, -1310, -1310, -1310,  -621, -1310,   944,   946,   541,
-     713,  -254, -1310, -1310, -1310,   938,   714,  -169, -1310,  -117,
-    -134,  1167, -1310, -1310,  -857,  -878,   837,   910,  1055,    25,
-   -1310,   900,   597,   -39,  -190,  -145,   668,   773, -1310,   993,
-   -1310,  2728,  1561,  -434,   920, -1310, -1310,   708, -1310,  -238,
-   -1310,   241, -1310, -1310, -1310, -1226,   414, -1310, -1310, -1310,
-    1165, -1310,    35, -1310, -1310,  -830,  -111, -1309,  -151,  3288,
-   -1310,  3069, -1310,   921, -1310,  -170,   169,  -182,  -181,  -166,
-       7,   -35,   -33,   -32,   813,     2,    29,    44,  -122,  -165,
-    -164,  -158,  -153,  -314,  -519,  -491,  -490,  -538,  -301,  -501,
-   -1310, -1310,  -512,  1078,  1084,  1085,  2540,  5063,  -571,  -588,
-    -558,  -543,  -557, -1310,  -503,  -733,  -723,  -722,  -570,  -311,
-    -274, -1310, -1310,   240,   176,   -77, -1310,  3991,   136,  -632,
-    -222
+   -1323,  4572,  3263, -1323,   197, -1323,   601,   950,  -251,   910,
+   -1323,   521,  -520,  -467,  -853,   -64,  3183,     0, -1323,  -150,
+     423,   446,   477,   450,  1016,  1025,  1019,  1026,  1028, -1323,
+    -622,  -408,  5012,  -745, -1323,  -735,   604,   472,  -656,   413,
+   -1323,  1279, -1323,   374, -1058, -1323, -1323,   126, -1323,  -823,
+   -1106,   222, -1323, -1323, -1323, -1323,    58, -1209, -1323, -1323,
+   -1323, -1323, -1323, -1323,   301, -1149,    35, -1323,  -933, -1323,
+     482,   274, -1323,   159, -1323,  -303, -1323, -1323, -1323,   535,
+    -827, -1323, -1323,    15, -1007,    71,    28, -1323, -1323, -1323,
+     -21, -1323,   357,  1253,  -198,  1636,  4113, -1323, -1323,    80,
+      54,   422,  1473, -1323,  1886, -1323, -1323,   192,  2183, -1323,
+    2495,   898, -1323, -1323, -1323,  -638, -1323,   924,   925,   524,
+     699,    83, -1323, -1323, -1323,   915,   695,  -339, -1323,  -106,
+      34,  1281, -1323, -1323,  -847,  -986,  1046,  1127,  1039,     5,
+   -1323,  1536,   481,  -165,  -210,  -124,   651,   758, -1323,   979,
+   -1323,  2789,  1548,  -413,   904, -1323, -1323,   689, -1323,  -235,
+   -1323,   158, -1323, -1323, -1323, -1257,   401, -1323, -1323, -1323,
+    1148, -1323,    21, -1323, -1323,  -858,  -105, -1322,  -129,  2267,
+   -1323,  2391, -1323,   906, -1323,  -184,    59,  -180,  -173,  -170,
+       7,   -40,   -35,   -33,    60,    -6,    25,    93,  -168,  -164,
+    -158,  -147,  -144,  -292,  -471,  -462,  -452,  -551,  -302,  -537,
+   -1323, -1323,  -511,  1069,  1072,  1074,  2608,  4844,  -578,  -514,
+    -502,  -495,  -500, -1323,  -508,  -724,  -717,  -708,  -590,  -305,
+    -195, -1323, -1323,   246,    19,    36, -1323,  3865,   104,  -623,
+    -397
 };
 
@@ -1785,1072 +1786,1087 @@
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -521
+#define YYTABLE_NINF -522
 static const yytype_int16 yytable[] =
 {
-      49,   114,   453,   428,   399,   400,   268,    98,   150,   766,
-     151,   152,   819,   973,   868,   115,   964,   407,   752,    63,
-     401,   402,   403,   358,   383,   384,   965,   966,   404,   261,
-     440,   827,    49,   405,   596,   604,    50,   410,   498,    98,
-     357,   740,   820,   148,  1070,   153,   830,  1069,   609,    49,
-     844,    63,   837,   948,    69,  1137,   162,   821,   725,   794,
-      56,   116,   730,   187,   826,   408,   210,   144,    50,    49,
-     194,   919,   154,   217,   409,    70,   227,  1187,    31,   342,
-     112,   815,   178,   220,   399,   400,    69,   155,   281,  1439,
-     628,   425,    56,  1302,   632,  1379,   669,   407,   123,   818,
-     401,   402,   403,  1204,  1205,  1181,   114,    70,   404,   816,
-     817,   475,   477,   405,   114,  1195,   678,   267,   272,   476,
-     505,  1197,  1443,  1177,   682,    31,   211,   923,    31,   221,
-     203,   124,   262,    31,    31,   263,   566,    31,   527,   493,
-      31,   213,   494,  1171,   527,   408,   282,   307,   148,  1178,
-     411,   150,   145,   151,   152,   162,   114,   345,    77,   519,
-    1439,   210,  1303,  1169,  1170,  1117,  -231,  -231,   373,    97,
-     567,   714,   964,   143,   720,  1196,   107,   107,  1199,  1245,
-     204,  1198,   965,   966,   913,   167,   187,   187,   153,   476,
-      77,   471,   949,  1458,   162,   253,   147,   411,   419,   815,
-     411,    97,   267,   481,   828,   411,   601,   835,   107,   601,
-      49,   568,   149,  1186,   287,   154,  1443,   162,    97,   527,
-     667,  1443,   210,  1200,   819,    41,    42,   816,   817,   443,
-     155,   150,   190,   151,   152,    97,   664,  -231,    97,  1484,
-     307,  1443,  1248,  1139,   439,   107,   156,  1077,  1443,   292,
-     167,   514,    49,  1016,   820,   182,   169,   830,   172,    98,
-     272,  1398,  1399,   202,   588,   272,   267,   267,   723,   821,
-    1249,    63,   114,  1512,   162,  1514,   472,   527,   951,  1080,
-     170,   991,   441,   327,   665,   656,  1015,   463,    50,   164,
-     672,   674,  1093,   815,   342,   307,  -287,   442,   483,   358,
-    1468,   609,  1526,   248,  1382,   500,    69,   307,   251,   596,
-     664,  1003,    56,   671,   596,   804,   357,    97,  -119,   676,
-    -119,   816,   817,   571,  -119,  1187,  1178,    70,   148,  1541,
-      97,  1400,   465,  1398,  1399,   373,  -516,   527,  1084,  -119,
-    -119,   114,   734,  1118,   819,   345,   436,  1171,   713,   602,
-     620,   579,   471,   411,   164,   398,   190,   853,   665,   898,
-     253,   377,   827,  1119,   625,   735,   556,   557,   625,  1201,
-     519,   114,   471,   178,   820,   519,   327,   378,   519,    97,
-     471,  1070,   831,  1116,  1069,   736,   834,   673,   675,   821,
-     629,    97,   358,   111,   633,   847,   267,  1171,   747,   848,
-     510,   558,   559,  1409,    41,    42,   187,   851,   436,   357,
-      77,   854,   986,   373,  1496,    77,  1325,  1169,  1170,   174,
-    1501,    97,   547,   548,   267,   213,   307,   307,   107,   844,
-     267,   787,   759,   625,   714,   479,  1326,   472,   849,  1423,
-    1521,   577,   850,   167,   870,  1528,   642,   578,   342,  1525,
-     435,  1157,  1159,  1424,   114,   729,   358,   472,  1428,  1429,
-     547,  1362,   254,   871,  1126,   472,   859,   860,   264,  1536,
-     447,   849,   267,   357,   742,  1100,  1540,   387,  1187,   330,
-     267,   598,   625,   877,    49,  1187,  1469,   373,   719,   460,
-     498,    98,   683,   388,   114,  1244,   547,    97,   578,   390,
-    1470,   711,   869,    63,   888,   881,   307,  1104,   114,  1135,
-    1014,   307,   435,   307,   307,   391,  1171,   910,   603,   -10,
-      50,   750,  -440,   609,   392,   114,   345,  -441,  1016,   996,
-     582,  -467,   411,  -467,   804,   523,  1187,  1434,    69,   798,
-     393,   931,   277,   879,    56,   394,   112,   164,   213,  1236,
-    -467,     2,   207,     4,     5,     6,     7,   914,   417,    70,
-     704,   395,   327,   327,   916,   912,   705,   914,   916,  1184,
-     571,   571,  1184,   915,   952,   190,    77,   279,   307,  1316,
-     917,   437,  1126,  1081,  1082,  1185,   280,   913,  1308,   625,
-     345,   445,   549,   714,   620,  1317,    77,  1318,   550,   551,
-     602,   747,   602,   882,    77,   411,   331,   760,  1360,  1276,
-    1277,   713,   765,  1319,  1474,   471,    35,  1363,    36,   332,
-     625,  1474,   804,  1014,  1019,   625,   111,   620,   140,   239,
-     327,   625,   994,   333,   625,   625,   625,    41,    42,   111,
-     334,   928,    77,  -102,   806,   335,   846,  -102,   371,   327,
-      41,    42,   625,    97,   267,   372,  1087,   603,  1087,   520,
-     107,   465,   861,   240,   768,   769,   770,   342,   241,  1348,
-     376,  1027,  1522,  1349,   111,   358,   876,   385,   111,    -3,
-     140,   141,  1408,   389,   114,    41,    42,   907,   596,    41,
-      42,  1074,   357,   885,   691,   411,   111,   442,   140,   141,
-     472,   528,   529,   530,  1141,  1112,   411,    41,    42,   397,
-     625,   933,   620,   764,   327,   726,  1101,  1234,   719,   719,
-     727,  1238,  1034,   399,   400,   531,   472,   532,   409,   533,
-     534,  1153,   878,   411,   880,   432,   721,   407,   244,   401,
-     402,   403,   722,   426,   114,   345,   523,   404,   523,   750,
-     750,   523,   405,  1156,   523,   601,   845,   500,  1158,   230,
-     601,   598,   427,   231,   711,  1476,   235,  1477,   237,   814,
-     713,   603,   964,   213,   450,   246,   775,   776,   777,   778,
-    1373,  -288,   965,   966,   927,   408,  -364,   213,     8,     9,
-      10,    11,    12,   571,     2,   207,     4,     5,     6,     7,
-     731,   625,  1241,   625,   411,   999,   732,   680,   625,   345,
-    1161,  -393,   602,   570,  1425,   411,   111,    31,   140,   141,
-    1523,    45,    46,   229,   602,   111,   342,    41,    42,   484,
-    1436,   461,   746,   706,   462,   714,    41,    42,   747,    77,
-       8,     9,    10,    11,    12,    34,    37,   892,   804,   504,
-      40,   253,   329,   747,   292,   864,   911,    41,    42,    35,
-     894,    36,   163,   806,  1330,    77,   747,   980,   508,    31,
-     520,   972,   513,   981,   307,   520,   195,   525,   520,   218,
-     213,   527,   228,   812,   562,   601,  1168,   814,   603,   993,
-    1182,    45,    46,    63,   563,   705,   625,    34,   554,   555,
-    1494,  1436,   230,   114,   345,   907,   111,   907,     2,   207,
-       4,     5,     6,     7,   714,   664,  1232,    41,    42,   114,
-     910,   564,   578,   711,   691,  1356,   565,   749,    69,   411,
-     142,   747,   933,   933,    56,    45,    46,   719,   568,   570,
-      37,   411,   114,   307,    40,  1332,   338,    45,    46,    70,
-    -437,    41,    42,   952,  1357,   586,  1105,   952,   952,   589,
-     747,   163,   932,   665,   601,    48,   113,   750,   912,    -3,
-      45,    46,   657,    35,   374,    36,  1359,    43,  1508,   552,
-     553,   814,   747,   242,   245,    45,    46,   638,     8,     9,
-      10,    11,    12,   603,   113,   113,  1227,    48,  1364,   345,
-     163,   658,  1106,   659,   747,   560,   561,    37,    48,   184,
-     185,    40,   713,   111,    48,   140,   141,    31,    41,    42,
-     625,   625,    48,   163,    41,    42,   661,  1126,    48,   984,
-     981,    48,    77,   890,    48,   444,  1121,   253,   329,   411,
-     307,   230,   897,   235,   186,    34,   899,   662,   113,   113,
-     107,   666,    45,    46,  1284,  1285,    37,  1287,  1132,   472,
-      40,   663,  1132,  1426,  1292,  1444,  1294,    41,    42,  1423,
-     668,   747,    48,  1323,  1083,    48,   911,   442,  1490,   327,
-     114,   258,    48,   692,  1491,   907,  1546,   749,   693,   411,
-     907,   695,   578,   718,  1189,    45,    46,   329,   411,   933,
-      56,    45,    46,   737,   215,   738,   603,   267,   739,  1369,
-    1370,   743,  1132,    48,   547,    70,  1418,   981,   107,  1398,
-    1399,    48,   625,   771,   772,    37,    48,   184,   185,    40,
-     342,   230,   419,   660,   411,   845,    41,    42,   779,   780,
-    1351,   374,   773,   774,   457,   697,   345,  -235,   481,   329,
-     411,    48,    48,   733,   744,   510,   215,   748,   756,   691,
-    1380,   807,   266,   873,  1380,   711,   808,    48,   811,  -289,
-      45,    46,   828,   329,   601,    48,     8,     9,    10,    11,
-      12,  1295,  1296,  1297,    48,   822,   867,    48,   272,   114,
-    1331,  1333,  1334,   893,   113,   -12,   -13,   866,    77,   215,
-     895,   896,   900,   220,   903,    31,   921,   114,  -414,   113,
-    -520,   307,   936,   113,   943,   722,   107,    48,   113,   374,
-     117,   945,  1404,   956,   130,   625,   131,   132,   133,   114,
-      63,    48,    48,    34,   950,    41,    42,   957,    48,   958,
-     959,   960,   961,  1105,   711,    48,   988,   989,   211,   221,
-     990,   977,  1005,  1006,   911,  1007,  1008,  1009,  1010,   911,
-     215,  1459,  1079,   213,  1011,    69,  1022,  1421,   160,  -402,
-    -401,    56,  1036,  1058,   625,   625,  1071,  1534,  1094,   906,
-     644,  1073,  1096,   272,  1097,  1095,    70,  1103,   307,  1106,
-    1113,   747,  1114,    48,  1115,  1120,  1122,   971,   215,  1123,
-    1124,   702,  1125,   215,  1128,  1131,  1151,   472,  1174,  1175,
-    1172,  1173,  1176,    48,    48,     8,     9,    10,    11,    12,
-     691,   114,  1190,   399,   400,   259,  1191,  1132,  1132,  1132,
-      48,  1193,  1194,   160,    48,  1105,   407,  1202,  1206,   401,
-     402,   403,  1189,   441,    31,   643,  -290,   404,    56,  1207,
-    1209,    -3,   405,     8,     9,    10,    11,    12,   442,  1214,
-     664,    48,  1219,    70,  1224,   107,   323,   493,  1222,    77,
-    1507,    48,    34,  1228,   703,   339,  1233,   922,   267,  1235,
-    1237,  1106,    31,  1240,   408,  1250,  1246,   107,   215,    48,
-    1252,   724,  1254,   728,   625,    48,  1256,    48,  1257,  1258,
-    1262,  1259,  1420,  1260,  1269,   107,  1278,  1279,   665,    37,
-      34,   175,   176,    40,   932,  1203,   601,  1286,  1307,   114,
-      41,    42,    45,    46,    37,   430,   175,   176,    40,   434,
-    1289,  1290,   113,  1105,  1291,    41,    42,    48,  1293,  1301,
-    1314,   114,  1192,  1320,  1322,    48,    77,  1328,   114,    48,
-     114,  1324,   114,    48,  1329,  1358,   113,  1335,   113,   323,
-     472,   372,  1336,  1338,   107,  1132,  1132,   472,   985,   215,
-     150,  1344,   151,   152,  1345,  1346,  1347,  1297,  1365,  1106,
-    1354,  1506,   214,  1355,  1366,  1383,   114,  1374,   114,  1375,
-    1376,   434,   233,   113,   488,  1189,  1392,   107,   113,   114,
-    1393,    56,  1189,  1460,  -403,  1506,  1506,   702,    56,  1396,
-    1407,   215,  1415,   162,   521,   307,    70,  1411,   472,  1413,
-     528,   529,   530,    70,  1416,  1417,   160,  1422,  1430,    37,
-    1506,   175,   176,    40,   214,  1431,  1432,   373,  1433,  1435,
-      41,    42,   865,  1349,   531,  1029,   532,   113,   533,  1305,
-    1440,  1445,  1449,  1189,    48,  1451,  1447,  1453,  1455,    56,
-     587,  1509,  1457,  1462,   593,    48,   376,    48,  1463,  1464,
-    1517,  1475,  1492,  1485,    70,  1487,  1500,   214,  1493,  1489,
-     703,  1515,  1516,   626,  1520,  1527,    48,   630,   922,  1529,
-     339,   918,  1531,   920,  1544,   107,  1545,   457,  1208,    77,
-    1537,   783,    48,   781,  1130,   784,    77,   113,   782,   785,
-    1058,  1306,  1495,  1410,  1547,  1368,    48,   107,   113,    48,
-     113,  1239,  1384,  1478,   107,  1088,   702,   216,   901,  1213,
-     902,  1221,   215,   922,  1092,   924,   702,   800,   214,  1127,
-    1035,   872,   938,  1315,   243,   323,   323,  1102,   790,   716,
-     702,   327,    48,   946,   791,   792,   113,    77,   113,     0,
-     215,  1367,   113,     0,     0,   215,     0,     0,  1138,     0,
-     113,     0,     0,   687,   479,   107,   214,     0,     0,   216,
-       0,   214,     0,    48,    48,     0,   117,     0,     0,     0,
-    1482,     0,  1482,     0,     0,     0,   499,    48,     0,   703,
-       0,     0,     0,  1372,     0,     0,     0,     0,     0,   703,
-       0,   488,     0,   323,     0,   488,     0,     0,     0,  1029,
-       0,     0,   216,   703,     0,   521,  1482,   521,  1482,     0,
-     521,     0,   323,   521,     0,     0,   215,   177,     0,     8,
-       9,    10,    11,    12,   339,     0,     0,     0,     0,    37,
-     215,   184,   185,    40,     0,  1397,     0,     0,  1405,     0,
-      41,    42,     0,     0,     0,     0,   214,   644,    31,     0,
-       0,     0,     0,  1039,     0,     0,     0,    48,     0,     0,
-       0,     0,     0,   216,     0,     0,   905,   177,   411,    48,
-     177,     0,     0,     0,    45,    46,    34,   323,     0,   922,
-       0,  1442,     0,     0,     0,     0,  1446,   906,   802,     0,
-       0,     0,     0,  1479,  1089,  1483,     0,     0,     0,     0,
-       0,   216,     0,     0,     0,     0,   216,     0,     0,     0,
-       0,     0,   643,     0,  1467,     0,   177,   891,   113,   843,
-       0,     0,     0,   215,   593,     0,     0,   214,     0,  1511,
-     852,  1513,    66,   118,   702,   702,     0,     0,     0,   922,
-     922,    48,     0,     0,   214,     0,     0,     0,     0,     0,
-      48,   644,    48,     0,     0,     0,     0,     0,     0,   113,
-       0,     0,     0,     0,    66,     0,     0,     0,     0,   214,
-       0,     0,     0,  1542,     0,  1543,     0,     0,     0,   177,
-       0,   161,    48,   687,     0,     0,     0,     0,  1550,  1551,
-       0,   216,   702,   702,     0,     0,     0,     0,  1535,     0,
-       0,   222,   113,     0,  1535,     0,     0,   703,   703,     0,
-       0,     0,     0,     0,     0,  1535,   643,     0,     0,  1535,
-       0,   488,     0,     0,   113,     0,     0,     0,   113,    57,
-      57,     0,     0,   177,     0,     0,   987,     0,   260,     0,
-     177,     0,     0,   339,     0,     0,   992,     0,     0,     0,
-       0,  1039,     0,     0,     0,    75,     0,     0,     0,     0,
-    1004,    57,     0,     0,     0,   703,   703,     0,     0,     0,
-       0,     0,   216,     0,     0,     0,     0,     0,   113,     0,
-     328,     0,     0,     0,     0,     0,     0,    75,   260,   350,
-     214,     0,     0,     0,     0,    57,     0,     0,    57,     0,
-       0,     0,   995,     0,     0,     0,     0,   802,   177,     0,
-       0,     0,     0,     0,   216,     0,   113,     0,   214,   406,
-     215,     0,     0,   214,   223,   177,     0,     0,     0,   177,
-      48,     0,     0,     0,   424,    48,     0,   429,   431,     0,
-    1312,     0,   161,     0,   922,     0,     0,     0,     0,     0,
-       0,     0,    48,     0,     0,     0,     0,     0,     0,     0,
-     922,     0,     0,   448,  1282,     0,     0,   451,     0,   452,
-       0,     0,   702,     0,     0,     0,     0,     0,   459,     0,
-     702,   702,   702,     0,    66,     0,   348,     0,     0,   473,
-       0,     0,   177,     0,   214,   802,     0,     0,     0,   480,
-       0,     0,   339,     0,     0,     0,     0,   431,   214,     0,
-       0,    78,   353,  1313,     0,     0,     0,     0,   687,     0,
-       0,    37,     0,   184,   185,    40,     0,     0,   499,   113,
-     922,   922,    41,    42,     0,   216,     0,     0,     0,     0,
-     488,  1107,   323,    78,   702,   703,     0,     0,     0,     0,
-       0,    57,    48,   703,   703,   703,     0,     0,   600,     0,
-     601,     0,     0,   216,  1166,  1167,    45,    46,   216,     0,
-       0,     0,     0,   260,     0,     0,     0,   594,     0,     0,
-     224,    57,     0,   622,     0,     0,   449,     0,     0,     0,
-       0,     0,     0,   113,   113,   113,   627,     0,   843,     0,
-     627,   214,     0,   260,     0,     0,   215,    75,     0,     0,
-       0,     0,    75,     0,     0,     0,     0,   703,     0,     0,
-       0,     0,  1216,  1217,     0,     0,     0,     0,     0,     0,
-      37,     0,   184,   185,    40,     0,     0,     0,     0,   216,
-       0,    41,    42,    37,     0,   184,   185,    40,     0,   177,
-     473,     0,     0,   216,    41,    42,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   350,     0,   905,   355,   411,
-     473,     0,     0,     0,     0,    45,    46,     0,   473,   687,
-    1505,   177,   411,     0,     0,     0,     0,     0,    45,    46,
-       0,     0,     0,     0,     0,     0,   698,   177,     0,   431,
-       0,   215,     0,     0,     0,     0,   223,     0,     0,     0,
-       0,   177,     0,     0,   712,     0,    66,     0,     0,     0,
-       0,   802,    48,    48,   431,     0,     0,     0,   431,     0,
-       0,   113,   113,   535,   536,   537,   538,   539,   540,   541,
-     542,   543,   544,     0,     0,     0,   216,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   260,   350,     0,
-       0,     0,   348,    78,     0,     0,     0,   545,    78,   113,
-       0,     0,     0,    75,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   353,     0,
-       0,     0,   177,    75,     0,     0,     0,     0,   214,     0,
-       0,    75,  1337,   793,     0,     0,   339,     0,     0,     0,
-    1339,  1340,  1341,    57,     0,     0,     0,     0,     0,   353,
-       0,   627,   805,     0,     0,     0,    48,   113,  1107,     0,
-       0,     0,     0,     0,   824,     0,   113,   353,     0,    75,
-       0,     0,     0,   283,   284,     0,   285,     0,     0,     0,
-      48,    48,   594,     0,     0,   348,     0,   594,     0,     0,
-       0,     0,   224,   627,     0,     0,   350,   350,   350,     0,
-       0,     0,   286,     0,  1385,    48,     0,     0,   287,     0,
-       0,   353,   288,     0,   350,   289,   290,   291,   292,    41,
-      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
-       0,     0,   698,     0,     0,     8,     9,    10,    11,    12,
-       0,     0,     0,   473,     0,   295,     0,   379,     0,   348,
-    1107,     0,     0,    45,    46,   297,   298,   299,   300,    78,
-       0,     0,     0,     0,    31,     0,   786,     0,     0,   473,
-       0,     0,   350,   216,   355,   353,     0,     0,     0,    78,
-       0,   937,     0,     0,   431,     0,   177,    78,     0,     0,
-       0,     0,    34,   348,   348,   348,     0,    37,     0,   184,
-     185,    40,     0,     0,     0,   355,   260,   712,    41,    42,
-       0,   348,   967,     0,   214,     0,     0,     0,     0,   353,
-     353,   353,     0,   355,     0,    78,     0,     8,     9,    10,
-      11,    12,     0,     0,   600,     0,   601,   353,     0,     0,
-       0,     0,    45,    46,     0,     0,     0,     0,  1107,     0,
-       0,   698,     0,     0,     0,   353,    31,     0,     0,     0,
-       0,   698,     0,   350,     0,   627,    75,   355,  1002,   348,
-     627,   805,     0,     0,     0,   698,     0,     0,     0,  1481,
-       0,  1481,     0,     0,    34,  1013,     0,     0,     0,    37,
-       0,     0,    75,    40,     0,   353,     0,     0,     0,     0,
-      41,    42,     0,     0,     0,     0,     0,     0,     0,   214,
-       0,    80,     0,     0,     0,  1481,     0,  1481,     0,     0,
-       0,     0,     0,     0,     0,     0,    43,     0,     0,     0,
-     353,   355,     0,     0,    45,    46,    66,     0,    87,     0,
-     413,     0,     0,    80,   323,     0,     0,   421,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   627,   216,
-     348,     0,     0,     0,     0,   260,   712,     0,   348,  1085,
-      87,     0,     0,     0,   353,   355,   355,   355,     0,     0,
-     225,     0,     0,     0,   353,     0,   353,     0,     0,     0,
-       0,   223,     0,   355,   353,  1099,     0,     0,   353,     0,
-       0,     0,     0,   431,   118,     0,     0,   226,     0,     0,
-       0,   355,     0,     0,     0,     0,     0,     0,     0,   413,
-       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    57,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    78,     0,
-       0,   355,     0,     0,   216,     0,     0,     0,     0,    75,
-       0,   594,     0,     0,     0,     0,     0,     0,   356,     0,
-       0,     0,     0,   576,   429,     0,     0,     0,     0,   698,
-     698,   580,   350,   350,   583,     0,   355,     0,     0,   353,
-       0,     0,     0,     0,     0,   363,     0,   177,     0,     0,
-       0,    57,  1188,     0,     0,   206,     2,   207,     4,     5,
+      49,   113,   407,   149,   453,   399,   428,    97,   150,   440,
+     151,   267,   400,   753,   767,   401,   114,  1071,   408,   106,
+     106,   402,   974,   280,   869,   828,   965,   403,    57,    57,
+     505,   845,    49,   966,  1188,    50,  1172,   152,   404,    97,
+     597,   405,   967,   147,   383,   384,   741,   610,  1070,    49,
+     357,   106,   827,   143,    70,   920,   161,   605,   410,    96,
+      57,   795,   177,   186,   819,  1380,   209,    50,   153,    49,
+     193,    56,   115,   216,   923,  1303,   226,  1440,   949,   726,
+      69,   281,   407,   731,   219,   399,    70,   820,   106,    31,
+      31,    96,   400,   724,    57,   401,   425,    57,   408,   821,
+      31,   402,   148,    56,   831,   113,   822,   403,    96,   162,
+     838,   261,    69,   113,   262,   670,   266,   271,   404,   122,
+     212,   405,   189,   194,    31,    96,   217,    31,    96,   227,
+     816,  1138,   475,   477,   510,   679,   154,   210,   202,   817,
+     220,   260,  1196,   683,  1304,   149,   307,   147,  1440,   818,
+     150,  1198,   151,   166,   161,   113,   345,   548,   549,   252,
+     209,   411,   411,  1459,    31,   986,   527,   373,  1200,   629,
+     419,    31,   411,   633,  1170,  1171,   291,   715,  1178,   152,
+     914,  1182,   965,  1235,   348,   186,   186,  1239,   203,   966,
+     358,   342,    76,   161,  1078,   548,   721,   481,   967,   411,
+     668,   266,  1197,  1469,  1179,   952,    96,   162,   832,    49,
+     153,  1199,   835,  1201,  1187,   409,   161,   166,   123,    96,
+     374,   209,   665,   439,    76,   149,   252,   329,   443,  1179,
+     150,   548,   151,   852,   829,   471,   602,   855,   666,   307,
+    1172,   836,  1030,   602,   398,   189,   162,  1017,   816,    57,
+     327,    49,  1140,   735,   176,  -233,  -233,   817,    97,   271,
+     476,   674,   676,  1081,   271,   266,   266,   818,    96,   162,
+     106,   113,   463,   161,  1016,   442,  1004,   483,   154,    57,
+      96,   444,  1188,   992,   500,   923,    50,   142,   924,  1249,
+    1172,   657,   441,  1527,   307,   163,   665,   860,   861,   820,
+     146,   610,  1094,   176,  1485,    70,   176,   307,  1205,  1206,
+      96,   821,   666,   436,   878,   831,   597,  1250,   822,   672,
+    1542,   597,    56,   572,   479,   677,  -233,   357,   147,   730,
+     923,    69,   567,  1399,  1400,   373,   168,   155,  1513,   377,
+    1515,   113,   816,   327,   580,   345,   411,   476,   743,   603,
+     621,   817,   176,   177,  1071,   378,   828,    63,   736,   163,
+     169,   818,  1399,  1400,   626,  1139,   568,  1497,   626,   569,
+     630,   113,   932,  1502,   634,   436,   748,   589,   737,   899,
+     110,   144,   139,   140,  1246,  1070,   447,    96,   374,    63,
+     987,    41,    42,  1522,  1202,   805,   266,   471,  1529,   171,
+     769,   770,   771,  1401,   212,   460,   186,   342,   604,  1172,
+     845,   166,   578,   373,   799,   176,  1030,   471,   579,   820,
+     357,   583,   243,   411,   266,   471,   307,   307,  1170,  1171,
+     266,   821,  1410,   626,   110,  1188,  1119,   854,   822,  1326,
+     110,   715,  1188,    76,  1526,    41,    42,   684,    76,   599,
+    1020,    41,    42,   579,   113,   435,  1120,   553,   554,  1327,
+    1127,   348,  1363,   995,  1537,   189,   374,   358,  -121,   176,
+    -121,  1541,   266,   760,  -121,   493,   176,   705,   494,   765,
+     266,   387,   626,   706,    49,   357,   953,   373,   720,  -121,
+    -121,    97,   229,  1188,   113,   230,   923,   388,   234,  1085,
+     236,   557,   558,   106,   911,  1245,   307,   245,   113,  1158,
+    1160,   307,    57,   307,   307,  1136,   714,   435,  1424,    50,
+     913,   751,  1017,   610,   870,   113,   345,   212,   882,  1105,
+     327,   327,  1425,  1015,  1429,  1430,   559,   560,    70,   883,
+     523,   411,  1102,    96,  1117,   176,   722,   604,  1435,  1470,
+     880,   181,   723,   163,   348,    56,   923,   923,   110,   390,
+     358,   342,   176,  1471,    69,   110,   176,   139,   140,    41,
+      42,   572,   572,   555,   556,   391,    41,    42,  1127,   307,
+    1444,   110,   201,   914,     2,   206,     4,     5,     6,     7,
+     626,   345,    41,    42,   286,   621,   392,  1331,   327,  -289,
+     715,   603,   111,   603,   865,    41,    42,   973,    63,   997,
+      76,   247,   393,   472,   805,  1475,   250,   327,   732,   348,
+    1333,   626,  1475,  -517,   733,   358,   626,   847,   621,   176,
+      76,   514,   626,  1361,   229,   626,   626,   626,    76,   871,
+    -468,   643,  -468,   862,   848,   886,  1015,   411,   849,    35,
+     394,    36,  1028,   626,   915,   266,   252,   877,   872,  -468,
+     815,   471,   604,   348,   348,   348,   395,  1142,   917,   411,
+     916,   807,  1075,  1523,  1444,   915,    76,   442,   917,  1444,
+    1185,   348,   263,   327,   918,   113,    37,   929,   908,  1185,
+      40,  1082,  1317,   -10,  1083,   597,  1186,    41,    42,  1444,
+     692,   498,   805,   110,   357,  1309,  1444,  1409,  1318,  1113,
+    1237,   626,   934,   621,    41,    42,   747,  -441,  1319,   720,
+     720,   748,   748,    43,   407,   846,   399,   561,   562,   893,
+     599,    45,    46,   400,  1320,   748,   401,  1364,   500,   348,
+     408,  -442,   402,   895,  1035,   113,   345,   912,   403,   748,
+     751,   751,   523,   212,   523,   276,   571,   523,   411,   404,
+     523,   923,   405,   981,    45,    46,   519,   212,   850,   982,
+    1277,  1278,   851,   278,   229,   472,   234,   923,   815,   604,
+     714,   342,   965,  1154,   850,   411,  1374,   176,  1101,   966,
+    1477,   750,  1478,   411,   572,   472,   279,  -103,   967,    45,
+      46,  -103,   626,   472,   626,   110,  1000,   139,   140,   626,
+     345,   330,   933,   603,   602,  1162,    41,    42,   994,   176,
+      45,    46,    37,  1233,   706,   603,    40,   331,  1349,   579,
+     348,  1357,  1350,    41,    42,   176,   332,   748,   348,   712,
+    1358,    63,   715,   371,   358,  1524,   748,   923,   923,   176,
+     548,   985,   982,   465,     8,     9,    10,    11,    12,   813,
+     212,   602,   329,   411,   229,   953,   372,    45,    46,   953,
+     953,  1360,   815,   550,    76,   307,  1365,   748,  -290,   551,
+     552,   333,   748,    31,   604,     8,     9,    10,    11,    12,
+     807,   510,  1370,  1371,   106,  1427,   334,   626,   673,   675,
+      76,  1424,   665,    57,   113,   345,   908,   911,   908,   335,
+    1445,    34,  1183,   376,    31,    37,   748,   385,   666,    40,
+     113,   715,  1157,   913,   602,   389,    41,    42,   805,    70,
+     176,   692,   409,   934,   934,  1491,  1419,   982,   720,   714,
+     342,  1492,    34,   113,   307,   129,    56,   130,   131,   132,
+      48,   112,   719,  1399,  1400,    69,    41,    42,  1106,   397,
+      45,    46,   106,  1547,   214,  1084,   426,   912,   751,   579,
+    1159,    57,   602,   427,  1509,  1426,   772,   773,   519,   112,
+     112,   432,    48,   519,   450,  1324,   519,   738,  1242,   739,
+     411,  1437,   740,    48,  1088,   744,  1088,   604,  -365,    48,
+     345,   774,   775,  1228,  -394,   484,    37,    48,   174,   175,
+      40,   780,   781,    48,  1107,   214,    48,    41,    42,    48,
+     461,   626,   626,  1127,   462,     2,   206,     4,     5,     6,
+       7,   504,   112,   112,   776,   777,   778,   779,   291,   472,
+     788,   307,     2,   206,     4,     5,     6,     7,   327,   348,
+     348,   528,   529,   530,   508,  1169,    48,   442,   214,    48,
+     106,  1495,  1437,   513,   525,   472,    48,    76,   111,    57,
+     527,   228,  1381,   563,   564,   531,  1381,   532,   566,   533,
+     534,   113,   252,   329,   411,   565,   908,   419,   661,   411,
+      35,   908,    36,   569,   176,    70,   338,    48,  -438,   587,
+     934,   658,   659,   712,   846,    48,  -291,    35,   266,    36,
+      48,   590,    56,     8,     9,    10,    11,    12,    -3,   214,
+     639,  1190,   660,   626,   481,   329,   411,   662,   663,   761,
+     664,   829,   329,   602,   766,    48,    48,    37,   667,   183,
+     184,    40,    31,   669,   257,   912,   693,   345,    41,    42,
+     912,    48,   694,    -3,   696,   498,   698,   214,  -237,    48,
+     734,   745,   214,  1296,  1297,  1298,   692,   749,    48,   757,
+      34,    48,   808,  1460,   906,   809,   411,   -12,   112,   812,
+     823,   714,    45,    46,   465,  1332,  1334,  1335,   -13,   271,
+     113,   867,   868,   112,   874,   907,   894,   112,   896,   897,
+     922,    48,   112,   901,   904,   219,  -415,   723,   113,   106,
+    -521,   944,   307,   937,   946,    48,    48,    57,    57,   957,
+     950,   959,    48,   958,   960,   951,   626,  -292,   961,    48,
+     113,   106,    63,    76,     8,     9,    10,    11,    12,   962,
+      57,   978,   989,   212,   342,  1106,   990,   991,   214,   106,
+    1006,  1007,  1008,  1009,   116,   879,  1010,   881,    57,  1011,
+     210,   220,   712,    31,  1012,  1023,    70,  -403,    37,  -402,
+     183,   184,    40,  1037,  1422,   626,   626,  1072,    48,    41,
+      42,  1535,  1074,    56,   271,  1095,   907,  1096,  1059,   307,
+    1097,    34,    69,  1098,  1104,  1114,   748,  1115,    48,    48,
+    1116,  1107,   159,   348,   348,   185,  1118,   928,   106,  1352,
+    1121,  1123,    57,    45,    46,    48,   972,    57,  1124,    48,
+    1125,  1126,   113,   407,  1132,  1129,   399,   692,  1152,   214,
+     644,  1173,  1174,   400,   173,  1175,   401,  1106,   442,   408,
+    1176,   106,   402,    70,  1177,  1191,    48,   665,   403,  1192,
+      57,  1194,  1195,  1203,  1210,   441,    48,  1207,   258,   404,
+      56,  1208,   405,   666,  1215,    -3,   159,  1220,  1225,  1190,
+    1223,   214,  1241,   493,    48,  1229,   253,  1508,  1234,   266,
+      48,  1236,    48,  1421,  1238,  1247,  1251,  1253,  1255,   110,
+    1257,   139,   238,  1107,  1258,   626,  1263,  1259,   472,   323,
+      41,    42,  1260,  1261,    76,   176,  1270,    37,   339,   174,
+     175,    40,  1279,   110,  1280,   139,   140,   112,    41,    42,
+     113,  1287,    48,   348,    41,    42,   239,  1290,  1291,  1292,
+      48,   240,  1330,  1294,    48,  1106,  1302,  1308,    48,   106,
+    1315,   112,   113,   112,   372,  1323,  1321,  1325,    57,   113,
+     727,   113,  1336,   113,  1329,   728,  1337,  1193,   430,  1339,
+    1345,   106,   434,  1346,  1347,  1348,   149,  1359,   106,  1355,
+      57,   150,   417,   151,  1356,  1366,  1367,    57,   112,  1298,
+    1375,    76,  1507,   112,  1384,  1376,  1377,   113,  1383,   113,
+    1393,  1107,   323,   214,  1394,   437,    70,  -404,  1397,  1408,
+     113,  1412,  1414,    70,   712,   445,  1507,  1507,  1416,  1417,
+     703,  1423,  1418,    56,   161,  1441,   307,  1431,  1432,   106,
+      56,   214,  1190,  1433,   434,  1434,   214,   488,    57,  1190,
+    1350,  1507,  1436,   112,  1446,  1448,  1450,  1452,   373,   213,
+      48,  1454,  1456,  1458,  1463,  1465,  1486,   521,   232,  1464,
+    1476,    48,  1488,    48,    70,  1490,  1493,  1501,  1521,  1122,
+     159,  1494,  1516,  1517,  1530,   479,   141,  1528,  1532,    63,
+    1538,    56,    48,   520,  1545,   176,  1546,   889,  1209,   782,
+    1190,  1133,  1131,   712,   784,  1133,  1307,  1411,    48,   783,
+     213,   704,   785,   112,   588,   786,  1496,   214,   594,  1548,
+    1369,  1385,    48,  1240,   112,    48,   112,  1214,  1479,   902,
+     903,   214,  1089,   925,   215,  1222,  1093,   627,   241,   244,
+     327,   631,   801,  1128,   339,  1059,  1036,   939,   873,  1103,
+     242,  1316,   717,   213,    76,  1133,    66,   117,    48,   947,
+     791,    76,   112,   792,   112,   793,   472,    37,   112,   174,
+     175,    40,     0,     0,     0,     0,   112,     0,    41,    42,
+       0,     0,     0,  1285,  1286,   215,  1288,     0,    66,    48,
+      48,     0,     0,  1293,     0,  1295,     0,     0,     0,   323,
+     323,     0,     0,    48,   376,   160,     0,     8,     9,    10,
+      11,    12,    76,     0,   213,     0,     0,  1483,     0,  1483,
+       0,     0,     0,     0,   214,   221,     0,   688,   215,     0,
+     528,   529,   530,     0,     0,     0,    31,   703,  1373,     0,
+     116,     0,   681,     0,     0,     0,     0,     8,     9,    10,
+      11,    12,   213,  1483,   531,  1483,   532,   213,   533,  1306,
+       0,   259,     0,     0,    34,   488,     0,   323,   707,   488,
+       0,     0,   499,     0,     0,     0,    31,     0,     0,   521,
+       0,   521,     0,    48,   521,     0,   323,   521,     0,   215,
+    1398,     0,     0,  1406,     0,    48,     0,     0,   339,   457,
+       0,     0,     0,   328,    34,   520,   571,     0,   411,     0,
+     520,   259,   350,   520,    45,    46,     0,     0,   704,   472,
+       0,     0,     0,     0,     0,     0,   472,   215,     0,     0,
+       0,     0,   215,     0,     0,     0,  1443,     0,   644,     0,
+       0,  1447,   406,   213,   112,     0,   750,     0,   411,     0,
+       0,  1405,   323,     0,    45,    46,   703,   424,     0,     0,
+     429,   431,     0,   803,     0,   160,   703,    48,     0,  1468,
+    1133,  1133,  1133,     0,     0,     0,    48,   472,    48,     0,
+     703,     0,     0,     0,     0,   112,   448,     0,     0,     0,
+     451,     0,   452,     0,   844,     0,     0,     0,     0,   594,
+       0,   459,     0,     0,     0,   853,    74,    66,    48,     0,
+       0,     0,   473,     0,     0,     0,     0,     0,   215,     0,
+       0,   214,   480,     0,   213,     0,     0,     0,   112,     0,
+     431,     8,     9,    10,    11,    12,   645,   704,    74,     0,
+       0,   213,   644,     0,     0,     0,     0,   704,     0,     0,
+     112,     0,     0,  1536,   112,     0,     0,     0,   688,  1536,
+      31,   704,     0,     0,     0,     0,   213,     0,     0,   891,
+    1536,     0,   892,     0,  1536,   222,     0,     0,   898,     0,
+       0,     0,   900,     0,     0,     0,     0,     0,    34,     0,
+       0,    37,     0,   183,   184,    40,   488,   259,     0,   215,
+       0,   595,    41,    42,   112,     0,     0,   623,  1133,  1133,
+       0,     0,     0,     0,     0,     0,     0,     0,   339,     0,
+     628,     0,     0,     0,   628,     0,     0,   259,   265,     0,
+     933,     0,   602,     0,     0,     0,    45,    46,    45,    46,
+       0,   215,   112,     0,     0,     0,  1461,   725,     0,   729,
+       0,     0,     0,     0,     0,     0,    48,     0,     0,     0,
+       0,    48,   353,   535,   536,   537,   538,   539,   540,   541,
+     542,   543,   544,   545,   473,     0,     0,   996,    48,     0,
+       0,     0,   803,     0,   703,   703,     0,     0,   213,   350,
+       0,   988,     0,     0,   473,     0,     0,   546,     0,     0,
+       0,   993,   473,     0,  1510,     0,     0,   214,     0,     0,
+       0,     0,     0,  1518,     0,  1005,   213,     0,     0,     0,
+     699,   213,    37,   431,   183,   184,    40,     0,     0,     0,
+       0,     0,     0,    41,    42,     0,   449,     0,   713,     0,
+      66,     0,   703,   703,     0,     0,     0,     0,   431,     0,
+       0,     0,   431,     0,     0,   112,     0,    74,     0,   601,
+       0,   602,    74,   215,     0,   704,   704,    45,    46,     0,
+     803,     0,     0,     0,     0,     0,     0,   339,    48,     0,
+       0,   259,   350,     0,     0,     0,     0,     0,     0,     0,
+       0,   215,   213,   688,     0,     0,   215,     0,  1080,   866,
+       0,     0,   214,    77,     0,     0,   213,     0,     0,     0,
+       0,     0,     0,     0,     0,   488,  1108,   323,     0,   112,
+     112,   112,     0,   704,   704,     0,   499,     0,   794,    37,
+       0,   183,   184,    40,     0,    77,     0,     0,     0,     0,
+      41,    42,     0,     0,     0,     0,   628,   806,   919,     0,
+     921,     0,     0,     0,   457,     0,     0,   222,    37,   825,
+     183,   184,    40,     0,     0,     0,   906,   215,   411,    41,
+      42,     0,   223,   844,    45,    46,     0,   595,     0,     0,
+       0,   215,   595,     0,     0,     0,     0,     0,   628,     0,
+    1313,   350,   350,   350,     0,  1506,     0,   411,     0,   213,
+       0,     0,     0,    45,    46,     0,     0,     0,     0,   350,
+       0,     0,     0,   124,   127,   128,     0,     0,     0,  1167,
+    1168,     0,   703,     0,    74,     0,     0,   699,     0,     0,
+     703,   703,   703,     0,     0,     0,     0,     0,   473,   353,
+       0,     0,     0,     0,    74,     0,     0,     0,    48,    48,
+       0,  1204,    74,     0,   688,     0,     0,   112,   112,   355,
+       0,     0,     0,     0,   473,     0,     0,   350,     0,     0,
+     353,  1314,     0,     0,   215,     0,   938,  1217,  1218,   431,
+       0,     0,     0,     0,     0,   254,     0,   255,   353,     0,
+      74,     0,     0,     0,   703,   112,   803,     0,     0,     0,
+       0,   259,   713,   704,     0,     0,     0,   968,     0,     0,
+       0,   704,   704,   704,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   645,     0,     0,     0,     0,     0,
+    1040,     0,   353,     0,     0,     0,     0,   126,   126,   126,
+       0,     0,     0,     0,     0,     0,   699,     0,     0,     0,
+       0,     0,    48,   112,    77,     0,   699,     0,   350,    77,
+     628,     0,   112,  1003,     0,   628,   806,     0,   396,     0,
+     699,  1090,     0,     0,     0,   704,    48,    48,   415,   416,
+    1014,   339,     0,   420,     0,   422,   423,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   213,   353,     0,     0,
+       0,    48,     0,  1108,     0,     0,     0,     0,     0,   126,
+       0,   126,     0,     0,     0,    79,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   645,     0,
+       0,    66,     0,     0,     0,     0,   275,     0,     0,     0,
+       0,   353,   353,   353,     0,     0,     0,    79,     0,     0,
+       0,     0,     0,   628,   223,     0,     0,  1338,     0,   353,
+     259,   713,     0,     0,  1086,  1340,  1341,  1342,     0,     0,
+       0,   215,     0,     0,     0,     0,     0,   353,     0,     0,
+       0,     0,     0,     0,   224,     0,     0,     0,    74,     0,
+    1100,     0,   126,     0,     0,  1108,     0,  1368,   431,   117,
+     126,     0,   126,   126,     0,     0,     0,   126,     0,   126,
+     126,     0,     0,     0,    74,     0,     0,   353,     0,     0,
+       0,    77,     0,     0,     0,     0,     0,     0,  1040,  1386,
+       0,     0,     0,     0,     0,     0,   355,     0,     0,     0,
+       0,    77,     0,     0,     0,     0,     0,     0,     0,    77,
+       0,     0,   353,     0,     0,     0,   595,     8,     9,    10,
+      11,    12,     0,     0,     0,     0,     0,   355,     0,   429,
+       0,   356,     0,     0,   699,   699,     0,   350,   350,   126,
+       0,     0,   213,     0,     0,   355,    31,    77,     0,     0,
+       0,     0,     0,  1108,     0,     0,   353,  1189,     0,     0,
+       0,     0,     0,     0,     0,     0,   353,     0,   353,     0,
+       0,     0,     0,   222,    34,     0,   353,     0,     0,    37,
+     353,   183,   184,    40,  1482,     0,  1482,     0,     0,   355,
+      41,    42,   699,   699,     0,     0,     0,     0,     0,     0,
+       0,  1283,     0,     0,     0,     0,     0,     0,     0,  1480,
+       0,  1484,     0,     0,     0,     0,   601,   215,   602,     0,
+    1482,     0,  1482,     0,    45,    46,    79,     0,     0,     0,
+       0,    79,     0,     0,     0,     0,     0,   213,     0,   628,
+       0,    74,     0,     0,     0,  1512,     0,  1514,     0,   323,
+       0,     0,     0,     0,   355,     0,     0,     0,     0,     0,
+       0,     0,     0,   713,     0,     0,     0,     0,     0,    86,
+       0,   353,     0,     0,     0,     0,     0,   413,     0,     0,
+       0,     0,     0,     0,   421,     0,     0,     0,     0,  1543,
+       0,  1544,     0,     0,     0,     0,     0,     0,   355,   355,
+     355,    86,     0,     0,  1551,  1552,  1284,     0,     0,     0,
+       0,     0,   215,     0,     0,     0,   355,     0,     0,     0,
+       0,     0,   796,   797,   259,     0,   224,     0,    66,     0,
+       0,     0,     0,     0,   355,     0,     0,     0,   225,     0,
+     699,     0,   713,     0,     0,    77,   117,     0,     0,     0,
+       0,   830,     0,     0,   833,   834,   413,   837,     0,   839,
+     840,     0,     0,     0,   841,   842,     0,     0,     0,     0,
+       0,    77,   699,     0,   355,     0,     0,     0,     0,     0,
+     699,   699,   699,     0,   353,   353,     0,   353,   353,     0,
+       0,   350,   350,    79,     0,     0,     0,     0,     8,     9,
+      10,    11,    12,     0,     0,  1189,     0,    74,   356,   355,
+       0,   577,     0,    79,     0,     0,     0,     0,     0,   581,
+       0,    79,   584,     0,     0,   363,     0,    31,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   117,   356,
+       0,     0,   353,   353,   699,     0,   126,   126,     0,     0,
+       0,     0,     0,   355,     0,    34,     0,   356,     0,    79,
+      37,     0,     0,   355,    40,   355,     0,     0,     0,     0,
+     223,    41,    42,   355,     0,   126,     0,   355,   126,   126,
+       0,   126,     0,   126,   126,     0,   413,     0,   126,   126,
+     421,     0,     0,     0,     0,     0,     0,    43,     0,     0,
+       0,   356,   970,   971,     0,    45,    46,     0,     0,     0,
+       0,   350,     0,   353,     0,     0,     0,     0,     0,     0,
+      86,     0,     0,     0,     0,    86,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   117,     0,    77,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   222,     0,  1189,     0,
+       0,     0,     0,     0,     0,  1189,   356,   413,   355,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    74,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     353,     0,   353,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     8,     9,    10,    11,    12,     0,
+     356,   356,   356,     0,     0,     0,  1189,     0,     0,     0,
+     225,     0,   353,  1531,     0,     0,   126,   126,   356,     0,
+     353,   353,   353,    31,     0,     0,     0,     0,     0,     0,
+       0,   353,   353,     0,     0,     0,   356,     0,     0,     0,
+       0,     0,     0,     0,     0,    74,     0,    79,     0,   577,
+     577,    34,     0,     0,  1091,     0,    37,     0,   183,   184,
+      40,     0,     0,     0,     0,     0,     0,    41,    42,     0,
+       0,   355,   355,    79,   355,   355,   356,    86,     0,     0,
+       0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
+       0,     0,   363,   906,    77,   411,     0,    86,     0,     0,
+       0,    45,    46,     0,     0,    86,     0,     0,     0,     0,
+       0,   356,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   363,     0,     0,     0,     0,     0,   355,
+     355,     0,     0,     0,     0,     0,   884,     0,     0,     0,
+     887,   363,     0,    86,     0,     0,     0,     0,     0,     0,
+       0,   353,     0,     0,     0,   356,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   356,     0,   356,     0,     0,
+       0,     0,   224,   126,     0,   356,     0,     0,   126,   356,
+       0,     0,     0,     0,     0,   363,   167,     0,   172,     0,
+       0,   178,   179,   180,     0,   182,     0,     0,    74,     0,
+     355,     0,     0,     0,     0,    74,     0,     0,     0,   233,
+       0,     0,     0,     0,     0,  1219,     0,     0,     0,     0,
+       0,   248,   249,     0,     8,     9,    10,    11,    12,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      79,     0,     0,   223,     0,     0,     0,     0,     0,     0,
+     363,     0,     0,    31,     0,     0,    74,     0,     0,     0,
+       0,     0,     0,     0,     0,    77,     0,     0,     0,     0,
+     356,     0,   577,     0,     0,     0,     0,   355,     0,   355,
+       0,    34,     0,     0,     0,     0,    37,     0,   183,   184,
+      40,     0,     0,     0,   363,   363,   363,    41,    42,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   355,
+       0,     0,   363,     0,     0,     0,     0,   355,   355,   355,
+       0,     0,     0,  1506,     0,   411,     0,     0,   355,   355,
+     363,    45,    46,     0,     0,   507,     0,   509,   512,   126,
+       0,    86,    77,     0,  1305,   515,   516,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     509,   509,     0,     0,     0,     0,     0,    86,     0,     0,
+     363,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   355,     0,   356,   356,     0,   356,   356,     0,     0,
+     413,     0,     0,     0,     0,     0,     0,     0,   509,     0,
+       0,     0,     0,     0,     0,   363,    79,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,  -293,     0,    26,    27,    28,
+       0,     0,     0,     0,   509,     0,    31,     0,     0,     0,
+       0,   356,   356,     0,     0,     0,     0,     0,   355,   363,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   363,
+       0,   363,     0,     0,    34,     0,   225,  1143,   126,   363,
+       0,    38,    39,   363,     0,  -293,     0,   592,     0,   600,
+       0,     0,     0,     0,  1155,     0,     0,     0,     0,     0,
+     624,   625,     0,     0,     0,    77,     0,     0,     0,     0,
+     282,   283,    77,   284,     0,     0,   635,     0,   338,     0,
+       0,     0,   356,     0,    45,    46,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   285,
+       0,     0,     0,     0,    86,   286,     0,     0,     0,   287,
+       0,     0,   288,   289,   290,   291,    41,    42,     0,   292,
+     293,     0,     0,    77,     0,   224,     0,     0,     0,     0,
+       0,     0,   413,     0,   363,     0,     0,     0,     0,     0,
+       0,     0,   294,     0,   379,     0,     0,    79,     0,     0,
+      45,    46,   296,   297,   298,   299,     0,     0,     0,   356,
+       0,   356,  1013,   787,     0,     8,     9,    10,    11,    12,
+       0,     0,  1243,   509,   509,   509,   509,   509,   509,   509,
+     509,   509,   509,   509,   509,   509,   509,   509,   509,   509,
+     509,   356,   282,   283,    31,   284,     0,     0,     0,   356,
+     356,   356,     0,     0,     0,     0,     0,     0,     0,     0,
+     356,   356,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   285,    34,     0,    79,     0,     0,   286,     0,     0,
+       0,   287,     0,     0,   288,   289,   290,   291,    41,    42,
+       0,   292,   293,     0,     0,     0,     0,   363,   363,     0,
+     363,   363,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   356,   294,     0,   379,     0,     0,     0,
+      86,     0,   344,    46,   296,   297,   298,   299,     0,     0,
+       1,     2,   206,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,   363,   363,    26,    27,    28,
+      29,     0,     0,    30,   282,   283,    31,   284,     0,   509,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     356,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   285,    34,     0,    35,     0,    36,   286,
+       0,    38,    39,   287,   165,     0,   288,   289,   290,   291,
+      41,    42,     0,   292,   293,     0,     0,     0,     0,     0,
+       0,   218,     0,     0,     0,     0,   363,    79,     0,     0,
+     509,     0,     0,     0,    79,     0,   294,     0,  1056,     0,
+       0,     0,     0,     0,    45,    46,   296,   297,   298,   299,
+       0,     0,     0,   926,     0,   927,     0,     0,     0,  -128,
+     509,     0,   930,   931,     0,     0,     0,   936,   165,   225,
+       0,     0,   272,     0,     0,     0,     0,     0,     0,   941,
+       0,     0,     0,     0,   945,    79,     0,     0,     0,     0,
+       0,    86,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   165,     0,   363,     0,   363,     0,     0,     0,     0,
+       0,   369,   979,     0,     0,   375,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1163,     0,     0,     8,
+       9,    10,    11,    12,     0,   363,     0,     0,     0,     0,
+       0,     0,     0,   363,   363,   363,     0,     0,     0,     0,
+       0,     0,     0,     0,   363,   363,   282,   283,    31,   284,
+       0,     0,     0,     0,   165,     0,     0,     0,    86,     0,
+       0,     0,     0,     0,     0,     0,   218,     0,     0,     0,
+     509,     0,     0,     0,     0,   285,    34,     0,     0,     0,
+       0,   286,     0,     0,   165,   287,     0,     0,   288,   289,
+     290,   291,    41,    42,     0,   292,   293,   363,     0,     0,
+       0,  1024,  1025,  1026,  1027,     0,  1029,     0,     0,   375,
+       0,     0,     0,     0,     0,   509,   165,     0,   294,     0,
+     379,  1073,     0,     0,     0,     0,  1164,    46,   296,   297,
+     298,   299,     0,     0,     0,  1079,     0,     0,     0,   524,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     509,     0,   165,     0,     0,     0,     0,     0,     0,   211,
+       0,     0,     0,   509,   363,     0,     0,     0,   231,     0,
+     235,     0,   237,     0,     0,  1099,     0,     0,     0,   246,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     598,     0,     0,     0,     0,   622,     0,     0,     0,     0,
+       0,     0,     0,     0,   509,     0,     0,     0,     0,     0,
+     211,    86,   235,   237,   246,     0,     0,     0,    86,     0,
+    1130,     0,     0,     0,     0,     0,  1137,     0,     0,     0,
+       0,  1141,     0,     0,     0,     0,  1145,     0,  1146,     0,
+       0,     0,  1148,     0,  1149,  1150,     0,     0,  1153,     0,
+       0,     0,     0,   211,     0,     0,     0,  1165,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    86,
+       0,   165,   165,     0,     0,  1180,  1181,     0,   369,     0,
+       0,   509,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   524,
+       0,     0,  1211,     0,     0,  1213,     0,     0,     0,     0,
+       0,     0,     0,     0,   211,     0,   235,   237,   246,     0,
+       0,     0,     0,     0,     0,     0,     0,   716,     0,     0,
+       0,     8,     9,    10,    11,    12,     0,     0,     0,   165,
+       0,   509,   509,     0,     0,     0,     0,     0,  1227,     0,
+       0,   524,   211,   524,  1231,  1232,   524,   211,   165,   524,
+      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   369,   497,     0,  1248,     0,     0,  1252,     0,     0,
+       0,  1254,     0,     0,     0,     0,     0,     0,    34,     0,
+       0,     0,     0,    37,  1262,   183,   184,    40,     0,     0,
+       0,     0,     0,     0,    41,    42,     0,  1269,     0,  1271,
+    1272,  1273,  1274,     0,     0,     0,     0,     0,     0,     0,
+       0,   211,     0,     0,   165,  1281,     0,  1282,     0,     0,
+     185,   172,     0,     0,     0,     0,   369,     0,    45,    46,
+     811,     0,     0,   211,     0,     0,     0,     0,   235,   237,
+       0,     0,     0,     0,     0,     0,   246,     0,     0,     0,
+    1310,  1311,     0,     0,     0,     0,   598,     0,     0,     0,
+       0,   598,     0,     0,     0,     0,     0,     0,     0,     0,
+     369,   369,   369,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   369,   211,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1343,  1344,     0,     0,     0,     0,     0,   211,     0,     0,
+    1354,     0,   211,     0,   211,     0,     0,     0,     0,     0,
+     524,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   211,     0,     0,   211,   211,   509,     0,     0,     0,
+       0,     0,   211,     0,     0,     0,   369,     0,   935,     0,
+       0,     0,   509,     0,     0,     0,   211,     0,     0,     0,
+       0,     0,     0,   211,     0,     0,     0,     0,     0,     0,
+       0,  1389,     0,  1390,  1391,  1392,     0,     0,     0,     0,
+       0,   716,     0,     0,     0,  1396,   156,     0,     0,     0,
+       0,     0,     0,     0,  1407,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,  1428,
+       0,     0,   509,   509,    31,     0,     0,     8,     9,    10,
+      11,    12,     0,   251,     0,     0,     0,   369,     0,     0,
+       0,   622,     0,   256,     0,   369,     0,     0,     0,     0,
+       0,     0,    34,     0,     0,     0,    31,    37,     0,    38,
+      39,    40,  1466,  1467,     0,     0,     0,     0,    41,    42,
+       0,     0,     0,     0,     0,  1472,     0,     0,   211,     0,
+       0,     0,  1472,     0,    34,     0,     0,     0,     0,    37,
+       0,   183,   184,    40,    43,     0,   157,     0,     0,   156,
+      41,    42,    45,    46,     0,     0,   211,     0,     0,     0,
+       0,   211,     0,   386,  1505,     0,     0,     0,  1511,     0,
+       0,     0,     0,     0,     0,     0,   265,     0,     0,     0,
+       0,     0,     0,     0,    45,    46,   418,     0,     0,     0,
+     716,     0,     0,     0,     0,     0,  1533,     0,  1534,     0,
+     433,     0,     0,     0,     0,   524,     0,     0,     0,   438,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   446,
+       0,     0,     0,     0,     0,     0,  1549,  1550,     0,   165,
+       0,     0,   211,     0,  1553,  1554,     0,     0,     0,     0,
+       0,     0,     0,     0,   464,     0,   211,     0,     0,   474,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   482,     0,     0,     0,   497,     0,   492,     0,
+     496,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   598,     0,   526,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,   369,   369,    26,    27,
+      28,     0,     0,     0,     0,     0,     0,    31,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   211,     0,     0,
+     586,     0,     0,     0,     0,   591,     0,     0,     0,   211,
+       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+      37,     0,    38,    39,    40,     0,     0,     0,   211,     0,
+       0,    41,    42,     0,   636,     0,   524,     0,   637,   638,
+       0,   640,     0,     0,     0,     0,     0,     0,   651,   652,
+       0,   653,   654,     0,   655,     0,   656,    43,     0,    44,
+       0,     0,     0,     0,     0,    45,    46,     0,     0,     0,
+       0,     0,     0,   586,     0,     0,     0,     0,     0,     0,
+       0,   671,     0,     0,     0,     0,     0,     0,     0,   341,
+     364,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   716,     0,     0,     0,   682,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     8,     9,    10,    11,
+      12,     0,     0,   414,     0,     0,     0,     0,     0,     0,
+     414,     0,   708,     0,     0,     0,     0,     0,   711,     0,
+       0,   211,     0,   464,   218,    31,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,  -293,     0,    26,    27,    28,     0,
+       0,   211,     0,    34,     0,    31,     0,     0,    37,   746,
+       0,   716,    40,     0,     0,     0,     0,     0,     0,    41,
+      42,     0,     0,     0,   764,     0,     0,     0,     0,     0,
+       0,     0,   414,    34,     0,     0,   211,     0,    37,     0,
+     336,   337,    40,     0,  -293,   719,     0,   211,     0,    41,
+      42,     0,     0,    45,    46,     0,     0,     0,     0,     0,
+     369,   369,     0,   790,     0,     0,     0,     0,     0,   218,
+       0,     0,   800,     0,     0,   635,     0,   338,   321,   802,
+       0,     0,     0,    45,    46,   810,     0,   414,   346,     0,
+       0,     0,     0,     0,   824,   414,   582,     0,   414,   585,
+     382,   382,     0,     0,     0,     0,     0,     0,     0,   364,
+       0,     0,     0,   614,     0,     0,     0,     0,     0,   211,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   632,   211,   864,   341,   205,     2,   206,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,   414,    26,    27,    28,   414,     0,     0,     0,
+     810,   321,    31,     0,     0,     0,     0,     0,   905,     0,
+     369,     0,   282,   283,     0,   284,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   478,     0,   364,     0,     0,
+      34,     0,    35,     0,    36,     0,     0,   207,    39,   251,
+       0,   285,     0,     0,     0,     0,     0,   286,     0,   942,
+     943,   287,   211,     0,   288,   289,   290,   291,    41,    42,
+       0,   292,   293,     0,     0,     0,   524,     0,   524,     0,
+       0,     0,     0,   414,   208,     0,   364,     0,     0,     0,
+      45,    46,   980,     0,   294,     0,   379,   984,     0,   380,
+       0,     0,    45,    46,   296,   297,   298,   299,     0,     0,
+       0,     0,   524,     0,   524,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   414,     0,     0,     0,   341,
+     364,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   165,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   382,     0,     0,     0,     0,   211,     0,     0,
+       0,  1018,     0,     0,     0,     0,     0,     0,  1019,     0,
+       0,     0,     0,     0,     0,   414,   414,     0,     0,     0,
+       0,  1021,     0,  1022,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   804,   364,     0,  1034,     0,     0,
+       0,     0,     0,  1038,     0,   614,     0,   614,   614,     0,
+       0,     0,     0,     0,   614,  1076,     0,     0,  1077,     0,
+       0,     0,     0,     0,   843,   364,     0,     0,     0,     0,
+     364,     0,     0,     0,     0,     0,     0,     0,     0,   364,
+     364,   364,     0,     0,     0,     0,   710,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   364,     0,     0,
+       0,     0,   414,   885,     0,     0,   414,   888,     0,     0,
+       0,     0,     0,   890,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   742,     0,     0,     0,     0,
+       0,     0,   414,     0,     0,   591,     0,     0,   759,     0,
+       0,     0,     0,   742,     0,     0,   742,     0,     0,     0,
+       0,     0,     0,     0,     0,   364,   614,     0,     0,   768,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1147,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   789,     0,     0,     0,     0,     0,     0,     0,   341,
+     364,   798,     0,     0,   414,   414,     0,     0,   346,     0,
+       0,     0,     0,   759,     0,     0,     0,     0,     0,     0,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,   526,     0,
+      26,    27,    28,     0,  1212,     0,     0,     0,   414,    31,
+       0,     0,     0,     0,   211,     0,   364,     0,     0,     0,
+       0,     0,   863,   804,   364,     0,     0,   614,     0,   614,
+     382,     0,     0,     0,     0,     0,     0,    34,  1224,   614,
+       0,     0,    37,  1226,   207,    39,    40,     0,     0,     0,
+       0,  1230,     0,    41,    42,     0,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,  -293,     0,     0,     0,     0,    43,
+       0,   270,     0,     0,  1256,    31,     0,    45,    46,     0,
+       0,     0,     0,     0,     0,     0,  1264,     0,     0,  1265,
+       0,  1266,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   804,     0,    34,     0,  1275,  1276,     0,   341,   364,
+     414,     0,   414,     0,  -293,     0,   414,     0,   759,     0,
+     964,     0,     0,     0,     0,     0,     0,  1289,     0,     0,
+     975,     0,     0,     0,     0,     0,   983,   614,   614,     0,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    31,
+       0,     0,   414,     0,  1328,     0,     0,     0,  1001,  1002,
+       0,     0,   346,     0,     0,     0,     0,     0,   282,   283,
+       0,   284,     0,   414,  1144,     0,   346,    34,     0,     0,
+       0,     0,     0,     0,   364,     0,     0,     0,  -294,     0,
+     414,  1156,     0,   614,   614,  1161,     0,   285,     0,     0,
+       0,     0,     0,   286,     0,   364,   364,   287,     0,     0,
+     288,   289,   290,   291,    41,    42,  1032,   292,   293,     0,
+     382,     0,     0,     0,     0,     0,     0,     0,     0,  1378,
+       0,  1379,     0,     0,     0,     0,     0,     0,     0,     0,
+     294,     0,   379,  1387,     0,  1388,     0,   758,    45,    46,
+     296,   297,   298,   299,     0,     0,     0,   346,     0,     0,
+       0,     0,  1395,     0,     0,     0,     0,     0,   414,     0,
+     414,     0,     0,     0,     0,   414,     0,     0,  1413,  1415,
+       0,     0,     0,     0,   614,     0,     0,     0,     0,  1420,
+       0,     0,  1230,     0,     0,     0,   321,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   804,   414,  1244,
+       0,     0,     0,  1442,     0,     0,     0,     0,     0,     0,
+       0,     0,  1449,     0,   382,  1451,     0,  1453,  1455,  1457,
+     975,   364,     0,     0,   742,   282,   283,     0,   284,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1151,     0,     0,     0,     0,
+       0,     0,     0,     0,   285,     0,  1166,  1487,     0,  1489,
+     641,  1230,   139,   140,   287,     0,     0,   288,   289,   290,
+     291,    41,    42,     0,   292,   293,  1500,     0,   382,     0,
+    1184,     0,   341,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   975,   975,   294,     0,   642,
+     364,   643,   380,     0,     0,    45,    46,   296,   297,   298,
+     299,     0,     0,     0,     0,     0,  1216,     0,     0,     0,
+       0,     0,     0,     0,     1,     2,   206,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,   364,
+     364,    26,    27,    28,    29,     0,     0,    30,     0,     0,
+      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   975,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,   863,
+      35,     0,    36,     0,     0,    38,    39,     0,     0,     0,
+       0,     0,     0,     0,  1267,  1268,     0,     1,     2,   206,
+       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,    29,    45,    46,
+      30,   282,   283,    31,  1041,  1042,     0,  1043,     0,     0,
+    1044,  1045,  1046,  1047,  1048,  1049,  1050,  1051,     0,     0,
+       0,  1052,     0,     0,     0,  1053,  1054,     0,    33,   364,
+     285,    34,     0,    35,     0,    36,  1055,     0,    38,    39,
+     287,     0,     0,   288,   289,   290,   291,    41,    42,     0,
+     292,   293,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   294,     0,  1056,     0,     0,   171,     0,
+       0,    45,    46,   296,   297,   298,   299,     0,     0,     0,
+       0,  1057,     0,     0,     0,     0,  -128,     0,     0,     0,
+       0,     0,     0,     0,     0,  1372,     0,     0,   742,     0,
+       0,     0,     0,     0,     0,     0,   414,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     414,   414,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   414,     1,     2,   206,     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,
+     282,   283,    31,   284,     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,   285,
+      34,     0,    35,    31,    36,   286,     0,    38,    39,   287,
+       0,     0,   288,   289,   290,   291,    41,    42,     0,   292,
+     293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,     0,     0,     0,   110,     0,    38,    39,
+       0,     0,   294,     0,    44,     0,     0,    41,    42,     0,
+      45,    46,   296,   297,   298,   299,     2,   206,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-     355,     0,    26,    27,    28,     0,     0,   698,   698,     0,
-     355,    31,   355,     0,     0,     0,     0,   224,   413,     0,
-     355,     0,   421,     0,   355,     0,     0,     0,     0,     0,
-       0,     0,     0,    80,     0,     0,     0,     0,    80,    34,
-       0,    35,     0,    36,    37,     0,   208,    39,    40,   348,
-     348,     0,     0,     0,   627,    41,    42,     0,     0,     0,
-      87,     0,     0,     0,     0,    87,     0,     0,     0,    57,
-       0,     0,   353,   353,     0,   353,   353,     0,   712,     0,
-       0,    43,     0,   209,     0,    78,     0,     0,     0,    45,
-      46,     0,     0,     0,     0,    75,     0,     0,     0,   413,
-       0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
-       0,     0,     0,     0,     0,   355,     0,     0,     0,     0,
-       0,  1283,     0,     0,     0,     0,     0,     0,     0,     0,
-     353,   353,   225,     0,    31,     0,     0,   177,     0,   260,
-       0,     0,     0,    66,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   698,     0,   712,     0,   226,
-       0,   118,    34,     0,     0,     0,     0,    37,     0,   184,
-     185,    40,     0,     0,     0,   127,   127,   127,    41,    42,
-       0,     0,     0,     0,     0,     0,     0,   698,     0,     0,
-     576,   576,     0,     0,     0,   698,   698,   698,     0,    80,
-       0,   353,     0,     0,   186,     0,   350,   350,     0,     0,
-       0,     0,    45,    46,   356,     0,     0,    57,    57,    80,
-    1188,     0,     0,     0,     0,     0,    87,    80,   355,   355,
-       0,   355,   355,     0,     0,     0,     0,     0,     0,     0,
-      57,   363,     0,     0,   223,   356,    87,     0,   127,     0,
-     127,    78,     0,   118,    87,     0,     0,     0,    57,   698,
-       0,     0,     0,   356,     0,    80,    75,     0,     0,     0,
-       0,     0,   363,     0,     0,   276,     0,   883,   353,     0,
-     353,   886,     0,     0,     0,     0,   355,   355,     0,     0,
-     363,     0,    87,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   348,   348,     0,     0,   356,     0,     0,
-     353,     0,    57,     0,     0,     0,     0,    57,   353,   353,
-     353,     0,     0,     0,     0,     0,   350,     0,     0,   353,
-     353,   127,     0,     0,   363,     0,     0,     0,     0,   127,
-       0,   127,   127,    75,     0,     0,   127,     0,   127,   127,
-      57,   118,     0,   168,     0,   173,     0,   355,   179,   180,
-     181,     0,   183,     0,     0,     0,     0,     0,     0,     0,
-       0,   356,     0,  1188,     0,     0,     0,   234,     0,     0,
-    1188,     0,   353,     0,     0,     0,     0,     0,     0,   249,
-     250,     0,     0,     0,   125,   128,   129,     0,   363,     0,
-     224,     0,     0,     0,     0,     0,     8,     9,    10,    11,
-      12,     0,     0,   576,     0,   356,   356,   356,   127,     0,
-       0,     0,    78,   348,     0,     0,     0,     0,     0,     0,
-       0,  1188,     0,   356,   355,    31,   355,     0,  1530,     0,
-       0,     0,   363,   363,   363,     0,     0,     0,    57,   353,
-       0,   356,     0,     0,     0,     0,     0,     0,     0,     0,
-     363,     0,    80,    34,     0,     0,   355,   255,    37,   256,
-      57,     0,    40,     0,   355,   355,   355,    57,   363,    41,
-      42,     0,     0,     0,     0,   355,   355,     0,    80,    87,
-       0,   356,     0,     0,     0,     0,    75,     0,     0,    78,
-       0,     0,     0,    75,     0,   718,     0,     0,     0,     0,
-       0,     0,     0,    45,    46,    87,     0,     0,   363,     8,
-       9,    10,    11,    12,     0,     0,   356,     0,    57,     0,
-       0,   413,     0,     0,     0,     0,     0,     0,   355,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
-     396,     0,     0,   363,    75,     0,     0,     0,     0,     0,
-     415,   416,     0,     0,     0,   420,     0,   422,   423,     0,
-     356,     0,     0,     0,     0,     0,    34,     0,     0,     0,
-     356,    37,   356,   184,   185,    40,     0,   225,     0,     0,
-     356,     0,    41,    42,   356,     0,     0,   363,     0,     8,
-       9,    10,    11,    12,     0,   355,     0,   363,  1142,   363,
-       0,     0,     0,     0,   226,     0,     0,   363,   905,     0,
-     411,   363,     0,     0,     0,  1154,    45,    46,    31,     0,
-       0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
-       0,     0,     0,     0,   591,     0,   599,     0,     0,     0,
-       0,     0,    78,     0,     0,    80,    34,   623,   624,    78,
-      31,    37,     0,   184,   185,    40,     0,     0,     0,     0,
+       0,     0,    26,    27,    28,     0,     0,     0,   321,   282,
+     283,    31,   284,     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,   285,    34,
+       0,    35,    31,    36,   286,     0,    38,    39,   287,     0,
+       0,   288,   289,   290,   291,    41,    42,     0,   292,   293,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
+       0,   294,     0,   343,     0,     0,     0,     0,   758,   344,
+      46,   296,   297,   298,   299,     2,   206,     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,   282,   283,
+      31,   284,     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,   285,    34,     0,
+      35,    31,    36,   286,     0,    38,    39,   287,     0,     0,
+     288,   289,   290,   291,    41,    42,     0,   292,   293,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
+       0,     0,     0,     0,     0,     0,   207,    39,     0,     0,
+     294,     0,   963,     0,     0,     0,     0,   758,   344,    46,
+     296,   297,   298,   299,     2,   206,     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,   282,   283,    31,
+     284,     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,   285,    34,     0,    35,
+      31,    36,   286,     0,    38,    39,   287,     0,     0,   288,
+     289,   290,   291,    41,    42,     0,   292,   293,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
+       0,   963,     0,     0,     0,     0,   758,    45,    46,   296,
+     297,   298,   299,     2,   206,     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,   282,   283,    31,   284,
+       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,   285,    34,     0,    35,     0,
+      36,   286,     0,    38,    39,   287,     0,     0,   288,   289,
+     290,   291,    41,    42,     0,   292,   293,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
+     343,     0,     0,     0,     0,     0,   344,    46,   296,   297,
+     298,   299,     2,   206,     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,   282,   283,    31,   284,     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,   285,    34,     0,    35,     0,    36,
+     286,     0,   207,    39,   287,     0,     0,   288,   289,   290,
+     291,    41,    42,     0,   292,   293,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   294,     0,   998,
+       0,     0,     0,     0,     0,   999,    46,   296,   297,   298,
+     299,     2,   206,     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,   282,   283,    31,   284,     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,   285,    34,     0,    35,     0,    36,   286,
+       0,    38,    39,   287,     0,     0,   288,   289,   290,   291,
+      41,    42,     0,   292,   293,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   294,     0,   963,     0,
+       0,     0,     0,     0,   344,    46,   296,   297,   298,   299,
+       2,   206,     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,   282,   283,    31,   284,     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,   285,    34,     0,    35,     0,    36,   286,     0,
+     207,    39,   287,     0,     0,   288,   289,   290,   291,    41,
+      42,     0,   292,   293,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   294,     0,   379,     0,     0,
+       0,     0,     0,    45,    46,   296,   297,   298,   299,  -516,
+       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,     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,    87,     0,     0,   356,     0,     0,    34,     0,
-       0,     0,     0,    37,     0,   184,   185,    40,  1505,     0,
-     411,     0,     0,   413,    41,    42,    45,    46,     0,     0,
-      78,     0,   363,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   127,   127,     0,     0,     0,     0,     0,
-     266,     0,     0,     0,     0,     0,     0,     0,    45,    46,
-       0,     0,     0,  1242,     0,     0,     0,     0,     0,     0,
-       0,     0,   127,     0,     0,   127,   127,     0,   127,     0,
-     127,   127,     0,     0,     0,   127,   127,     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,  -291,     0,    26,    27,    28,    29,   356,   356,
-      30,   356,   356,    31,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    80,     0,     0,     0,   363,   363,     0,   363,   363,
-       0,    34,     0,    35,     0,    36,     0,     0,    38,    39,
-       0,     0,  -291,     0,     0,     0,  1012,     0,    87,     8,
-       9,    10,    11,    12,     0,     0,   356,   356,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
+      44,     0,     0,     0,     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,    44,   283,   284,    31,   285,
-       0,    45,    46,   363,   363,     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,     0,
-       0,     0,     0,   127,   127,   286,    34,     0,     0,     0,
-       0,   287,     0,     0,     0,   288,     0,     0,   289,   290,
-     291,   292,    41,    42,     0,   293,   294,   356,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   795,   796,     0,     0,     0,     0,   295,     0,
-     379,     0,     0,     0,   363,     0,   344,    46,   297,   298,
-     299,   300,     0,     0,     0,     0,     0,     0,     0,     0,
-     225,   829,     0,     0,   832,   833,     0,   836,     0,   838,
-     839,     0,     0,     0,   840,   841,     0,     0,     0,     0,
-       0,     0,    80,     0,     0,     0,     0,   226,     0,   925,
-       0,   926,     0,     0,   356,     0,   356,     0,   929,   930,
-       0,     0,     0,   935,     0,     0,     0,     0,     0,    87,
-       0,     0,     0,     0,     0,   940,     0,     0,     0,     0,
-     944,   363,     0,   363,     0,     0,   356,     0,     0,     0,
-       0,     0,     0,     0,   356,   356,   356,     0,     0,     0,
-       0,     0,     0,     0,     0,   356,   356,     0,   978,     0,
-     127,     0,     0,   363,     0,   127,     0,     0,     0,    80,
-       0,   363,   363,   363,     0,     0,     0,     0,     0,     0,
-       0,     0,   363,   363,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    87,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   356,     0,
+       0,     0,     0,     0,    43,     0,    44,     0,     0,     0,
+    -520,     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,
-     166,     0,   969,   970,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   363,     0,   219,     0,     0,
-    1162,     0,     0,     8,     9,    10,    11,    12,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1023,  1024,  1025,
-    1026,     0,  1028,     0,     0,     0,     0,     0,     0,     0,
-     283,   284,    31,   285,     0,   356,     0,  1072,     0,     0,
-       0,     0,     0,     0,     0,   166,     0,     0,     0,   273,
-       0,  1078,     0,     0,     0,     0,     0,     0,     0,   286,
-      34,     0,   363,     0,     0,   287,     0,     0,     0,   288,
-       0,     0,   289,   290,   291,   292,    41,    42,   166,   293,
-     294,     0,    80,     0,     0,     0,   127,     0,   369,    80,
-       0,  1098,   375,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   295,     0,   379,     0,     0,     0,     0,    87,
-    1163,    46,   297,   298,   299,   300,    87,     8,     9,    10,
+       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,     0,     0,     0,     0,     0,     0,     0,     0,
+      43,     0,    44,     0,     0,     0,     0,     0,    45,    46,
+     205,     2,   206,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,  1129,    26,    27,    28,
-      80,   166,  1136,     0,  1090,     0,    31,  1140,     0,     0,
-       0,     0,  1144,   219,  1145,     0,     0,     0,  1147,     0,
-    1148,  1149,     0,     0,  1152,     0,     0,    87,     0,     0,
-       0,   166,     0,  1164,    34,     0,     0,     0,     0,     0,
-       0,   208,    39,     0,     0,     0,     0,     0,     0,     0,
-       0,  1179,  1180,     0,     0,     0,   375,     0,     0,     0,
-       0,     0,     0,   166,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   127,     0,     0,  1210,     0,
-       0,  1212,     0,     0,    45,    46,   524,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   166,     0,
-       0,     0,     0,     0,   212,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   232,     0,   236,     0,   238,     0,
-       0,     0,     0,     0,  1226,   247,     0,     0,     0,     0,
-    1230,  1231,     0,     0,     0,     0,   597,     0,     0,     0,
-       0,   621,     0,     0,     0,     0,     0,     0,     0,     0,
-    1247,     0,     0,  1251,     0,     0,   212,  1253,   236,   238,
-     247,     0,     0,     0,     0,  1218,     0,     0,     0,     0,
-    1261,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1268,     0,  1270,  1271,  1272,  1273,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
-       0,  1280,     0,  1281,     0,     0,     0,   173,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   166,   166,     0,
-       0,     0,     0,     0,   369,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1309,  1310,     0,     0,
-       0,     0,     0,     0,     0,   524,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     212,     0,   236,   238,   247,     0,     0,     0,     0,     0,
-       0,     0,     0,   715,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   166,  1342,  1343,     0,     0,
-       0,     0,     0,     0,  1304,     0,  1353,   524,   212,   524,
-       0,     0,   524,   212,   166,   524,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   369,   497,     0,
-       0,     0,     0,     0,     0,     0,     0,     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,  -291,     0,    26,    27,    28,  1388,     0,  1389,
-    1390,  1391,     0,    31,     0,     0,   212,     0,     0,   166,
-       0,  1395,     0,     0,     0,     0,     0,     0,     0,     0,
-    1406,   369,     0,     0,     0,   810,     0,     0,   212,     0,
-       0,    34,     0,   236,   238,     0,    37,     0,   336,   337,
-      40,   247,  -291,     0,     0,  1427,     0,    41,    42,     0,
-       0,   597,     0,     0,   321,     0,   597,     0,     0,     0,
-       0,     0,     0,     0,   346,   369,   369,   369,     0,   157,
-       0,     0,     0,   634,     0,   338,   382,   382,     0,     0,
-       0,    45,    46,   369,   212,     0,     0,     0,  1465,  1466,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1471,   212,     0,     0,     0,     0,   212,  1471,   212,
-     283,   284,     0,   285,     0,   524,     0,   252,     0,     0,
-       0,     0,     0,     0,     0,     0,   212,   257,     0,   212,
-     212,     0,     0,     0,     0,     0,     0,   212,     0,   286,
-    1504,   369,     0,   934,  1510,   287,     0,   321,     0,   288,
-       0,   212,   289,   290,   291,   292,    41,    42,   212,   293,
-     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   478,  1532,     0,  1533,     0,   715,     0,     0,     0,
-       0,     0,   295,   157,   379,     0,     0,   380,     0,     0,
-      45,    46,   297,   298,   299,   300,     0,   386,     0,     0,
-       0,     0,  1548,  1549,     0,     0,     0,     0,     0,     0,
-    1552,  1553,     0,     0,     0,     0,     0,     0,     0,     0,
-     418,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   369,     0,   433,     0,   621,     0,     0,     0,
-     369,     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,   212,     0,     0,     0,     0,     0,   464,     0,
-       0,     0,     0,   474,     0,     0,     0,   382,     0,     0,
-       0,     0,     0,   286,     0,     0,   482,     0,     0,   287,
-     212,     0,   492,   288,   496,   212,   289,   290,   291,   292,
-      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
-       0,   526,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   715,   295,     0,   379,     0,
-       0,     0,     0,   757,    45,    46,   297,   298,   299,   300,
-     524,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   585,     0,     0,     0,     0,   590,     0,
-       0,     0,     0,     0,   166,     0,   212,     0,     0,     0,
-       0,   709,     0,     0,     0,     0,     0,     0,     0,     0,
-     212,     0,     0,     0,     0,     0,     0,   635,     0,     0,
-       0,   636,   637,     0,   639,     0,     0,     0,     0,     0,
-     497,   650,   651,     0,   652,   653,     0,   654,     0,   655,
-     741,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     597,     0,     0,   758,     0,     0,   585,     0,   741,     0,
-       0,   741,     0,     0,   670,     0,     0,     0,     0,     0,
-       0,   369,   369,   767,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   681,
-       0,   212,     0,     0,     0,   788,     0,     0,     0,     0,
-       0,     0,     0,   212,     0,   797,     0,     0,     0,     0,
-       0,     0,   346,     0,     0,   707,     0,   758,     0,     0,
-       0,   710,   212,     0,     0,     0,   464,     0,     0,     0,
-       0,   524,     0,     0,     0,     0,   206,     2,   207,     4,
+      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,   485,   486,   487,    34,     0,    35,    31,    36,    37,
+       0,   207,    39,    40,     0,     0,     0,     0,     0,     0,
+      41,    42,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+       0,     0,    38,    39,     0,     0,    43,     0,   208,     0,
+       0,     0,     0,     0,    45,    46,     1,     2,   206,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,   745,    26,    27,    28,   862,     0,     0,     0,
-       0,     0,    31,     0,   382,     0,     0,   763,     0,     0,
+      25,  -293,     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,   715,     0,     0,
-      34,     0,    35,     0,    36,     0,     0,   208,    39,     0,
-       0,     0,     0,   283,   284,   789,   285,     0,     0,     0,
-       0,     0,     0,     0,   799,     0,     0,     0,     0,     0,
-       0,   801,     0,     0,     0,   212,     0,   809,     0,   219,
-       0,     0,   286,     0,   209,     0,   823,     0,   287,     0,
-      45,    46,   288,     0,     0,   289,   290,   291,   292,    41,
-      42,     0,   293,   294,     0,   212,     0,     0,     0,     0,
-       0,     0,   758,     0,   963,     0,   715,     0,     0,   341,
-     364,     0,     0,     0,   974,   295,   863,   379,     0,     0,
-     982,     0,     0,    45,    46,   297,   298,   299,   300,     0,
-     212,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   212,     0,   414,     0,     0,     0,     0,     0,     0,
-     414,     0,   809,     0,     0,   369,   369,     0,     0,     0,
-     904,     0,  1000,  1001,   219,     0,   346,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   507,
-     346,   509,   512,     0,     0,     0,     0,     0,     0,   515,
-     516,   252,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   941,   942,   509,   509,     0,     0,     0,     0,     0,
-       0,     0,     0,   212,     0,     0,     0,     0,     0,     0,
-    1031,     0,   414,     0,   382,     0,     0,   212,     0,     0,
-       0,     0,     0,     0,   979,     0,     0,     0,     0,   983,
-       0,   509,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-       0,   346,    26,    27,    28,     0,     0,     0,     0,     0,
-       0,    31,   684,     0,     0,   369,   414,   509,     0,     0,
-       0,     0,     0,     0,   414,   581,     0,   414,   584,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   364,    34,
-     321,     0,   613,  1017,     0,     0,    38,    39,     0,     0,
-    1018,     0,     0,     0,     0,     0,   212,     0,     0,     0,
-       0,   631,     0,  1020,   341,  1021,     0,     0,   382,     0,
-       0,   524,     0,   524,   974,     0,     0,     0,   741,  1033,
-       0,     0,     0,   685,     0,  1037,     0,   686,     0,    45,
-      46,   414,     0,     0,     0,   414,     0,  1075,     0,  1150,
-    1076,     0,     0,     0,     0,     0,     0,   524,     0,   524,
-    1165,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   364,     0,     0,     0,
-       0,     0,   382,     0,  1183,     0,   166,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   974,
-     974,   212,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    1215,     0,   414,     0,     0,   364,     0,   590,     0,     0,
-       0,    31,     0,     0,     0,   509,   509,   509,   509,   509,
-     509,   509,   509,   509,   509,   509,   509,   509,   509,   509,
-     509,   509,   509,     0,     0,     0,     0,   283,   284,    34,
-     285,     0,  1146,     0,   414,     0,     0,     0,   341,   364,
-       0,     0,     0,     0,     0,   974,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   286,     0,     0,     0,
-       0,     0,   287,   862,     0,     0,   288,     0,     0,   289,
-     290,   291,   292,    41,    42,     0,   293,   294,  1266,  1267,
-       0,     0,     0,   414,   414,     0,     0,     0,     0,     0,
-     526,     0,     0,     0,     0,     0,  1211,     0,     0,   295,
-       0,   379,   803,   364,   971,     0,     0,    45,    46,   297,
-     298,   299,   300,   613,     0,   613,   613,     0,     0,     0,
-       0,     0,   613,     0,     0,     0,     0,     0,     0,     0,
-    1223,     0,   842,   364,     0,  1225,     0,     0,   364,     0,
-       0,     0,     0,  1229,     0,     0,     0,   364,   364,   364,
-       0,   509,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   364,     0,     0,     0,     0,
-     414,   884,     0,     0,   414,   887,  1255,     0,     0,     0,
-       0,   889,     0,     0,     0,     0,     0,     0,  1263,     0,
-       0,  1264,     0,  1265,     0,     0,     0,     0,     0,     0,
-     414,     0,     0,     0,     0,     0,     0,  1274,  1275,     0,
-       0,     0,   509,     0,     0,     0,     0,     0,   212,  1371,
-       0,     0,   741,   364,   613,     0,     0,     0,     0,  1288,
        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,     0,     0,   341,   364,     0,
-       0,     0,   414,   414,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1327,     0,     0,     0,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,  -291,
-       0,    26,    27,    28,     0,     0,   414,     0,     0,     0,
-      31,     0,     0,     0,   364,     0,     0,     0,     0,     0,
-       0,   803,   364,     0,     0,   613,     0,   613,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   613,    34,     0,
-       0,     0,     0,    37,     0,   336,   337,    40,     0,  -291,
-       0,  1377,     0,  1378,    41,    42,     0,     0,     0,     0,
-       0,     0,   509,     0,     0,  1386,     0,  1387,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   338,     0,  1394,     0,     0,     0,    45,    46,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1412,  1414,     0,     0,     0,     0,     0,   509,     0,   803,
-       0,  1419,     0,     0,  1229,     0,   341,   364,   414,     0,
-     414,     0,     0,     0,   414,     0,     0,     0,     0,     0,
-       0,     0,   321,     0,     0,  1441,     0,     0,     0,     0,
-       0,     0,   509,     0,  1448,   613,   613,  1450,     0,  1452,
-    1454,  1456,     0,     0,     0,   509,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,  -291,     0,     0,     0,     0,     0,
-     414,     0,     0,     0,     0,    31,     0,     0,     0,  1486,
-       0,  1488,     0,  1229,     0,     0,   509,     0,     0,     0,
-       0,   414,  1143,     0,     0,     0,     0,     0,  1499,     0,
-       0,     0,   364,    34,     0,     0,     0,     0,   414,  1155,
-       0,   613,   613,  1160,  -291,     0,     0,     0,     0,     0,
-       0,     0,     0,   364,   364,     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,   509,    26,    27,    28,    29,     0,     0,
-      30,   283,   284,    31,   285,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   414,     0,   414,     0,
-       0,     0,     0,   414,     0,     0,     0,     0,     0,     0,
-     286,    34,   613,    35,     0,    36,   287,     0,    38,    39,
-     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
-     293,   294,     0,   509,   509,   803,   414,  1243,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   295,     0,  1055,     0,     0,     0,   364,
-       0,    45,    46,   297,   298,   299,   300,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  -126,     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,  1040,  1041,     0,  1042,     0,
-     341,  1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,
-       0,     0,  1051,     0,     0,     0,  1052,  1053,   364,    33,
-       0,   286,    34,     0,    35,     0,    36,  1054,     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,  1055,   364,   364,   172,
-       0,     0,    45,    46,   297,   298,   299,   300,     0,     0,
-       0,     0,  1056,     0,     0,     0,     0,  -126,     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,   509,    26,
-      27,    28,    29,     0,     0,    30,   283,   284,    31,   285,
-       0,     0,     0,     0,   509,     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,   364,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   295,     0,
-      44,     0,     0,     0,   509,   509,    45,    46,   297,   298,
-     299,   300,     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,
-       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,  -292,     0,     0,   414,   286,    34,     0,    35,     0,
-      36,   287,    31,    38,    39,   288,     0,     0,   289,   290,
-     291,   292,    41,    42,     0,   293,   294,     0,   414,   414,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,     0,   295,     0,
-     343,  -292,     0,   414,     0,   757,   344,    46,   297,   298,
-     299,   300,     2,   207,     4,     5,     6,     7,     8,     9,
+      34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
+       0,  -293,     2,   206,     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,   111,     0,    38,    39,     0,     0,   295,     0,   962,
-       0,     0,    41,    42,   757,   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,
-       0,     0,    38,    39,     0,     0,   295,     0,   962,     0,
-       0,     0,     0,   757,    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,   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,
+      28,     0,     0,     0,    44,     0,     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,    35,     0,    36,
+      37,     0,   207,    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,   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,   997,     0,     0,     0,
-       0,     0,   998,    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,     0,   295,     0,   962,     0,     0,     0,     0,
-       0,   344,    46,   297,   298,   299,   300,     2,   207,     4,
+       0,     0,     0,     0,     0,     0,     0,    43,     0,   208,
+       0,     0,     0,     0,     0,    45,    46,     2,   206,     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,    31,     0,     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,
+      34,     0,    35,     0,    36,     0,    31,    38,    39,     0,
+       2,   206,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    34,     0,    26,    27,    28,     0,
+       0,    38,    39,  -400,   678,    31,     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,     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,    34,     0,    35,   635,    36,   338,     0,
+      38,    39,     0,     0,    45,    46,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   295,     0,   379,     0,     0,     0,     0,     0,
-      45,    46,   297,   298,   299,   300,  -515,     0,     0,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+       0,     0,  1351,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   678,     0,     0,
+       0,     0,     0,    45,    46,     2,   206,     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,   685,    38,    39,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1353,     0,     0,
+       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
+       0,     0,   678,     0,     0,     0,     0,     0,    45,    46,
+       2,   206,     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,
+      22,    23,    24,    25,     0,   686,    26,    27,    28,   687,
+       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,
-      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,    34,     0,    35,     0,    36,     0,     0,
+     207,    39,     0,     2,   206,     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,   270,    31,     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,    43,     0,    44,     0,     0,
-       0,     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,    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,     0,     0,     0,     0,     0,     0,     0,
-       0,    43,     0,    44,     0,     0,     0,  -519,     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,    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,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,    44,
-       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,    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,     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,    44,    31,     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,     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,    45,    46,     2,   207,     4,     5,
+       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
+      36,     0,     0,    38,    39,     0,     2,   206,     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,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,     0,    26,    27,    28,    34,
-       0,    35,     0,    36,     0,    31,    38,    39,     0,     2,
-     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+     678,    31,     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,     0,    34,
+       0,    35,     0,    36,     0,     0,    38,    39,     0,     2,
+     206,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    34,     0,    26,    27,    28,     0,     0,
-      38,    39,  -399,   677,    31,     0,     0,     0,     0,    45,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+       0,     0,     0,   593,    31,     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,     0,    34,     0,    35,   634,    36,   338,     0,    38,
-      39,     0,     0,    45,    46,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,    35,     0,    36,     0,     0,   207,
+      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,   282,   283,
+      31,   284,     0,     0,     0,     0,   208,     0,     0,     0,
+       0,     0,    45,    46,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   285,    34,     0,
+       0,     0,     0,   286,     0,    38,    39,   287,     0,     0,
+     288,   289,   290,   291,    41,    42,     0,   292,   293,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1350,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   677,     0,     0,     0,
-       0,     0,    45,    46,     2,   207,     4,     5,     6,     7,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     294,     0,   517,     0,     0,   171,     0,     0,    45,    46,
+     296,   297,   298,   299,     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,   282,   283,    31,   284,     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,
+     285,    34,     0,     0,    31,     0,   286,     0,    38,    39,
+     287,     0,     0,   288,   289,   290,   291,    41,    42,     0,
+     292,   293,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,     0,     0,     0,    37,     0,   336,
+     337,    40,     0,   294,   -36,   295,     0,     0,    41,    42,
+       0,    45,    46,   296,   297,   298,   299,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,   338,    26,    27,    28,
+       0,     0,    45,    46,   282,   283,    31,   284,     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,   285,    34,     0,     0,    31,     0,   286,
+       0,    38,    39,   287,     0,     0,   288,   289,   290,   291,
+      41,    42,     0,   292,   293,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+     110,     0,    38,    39,     0,     0,   294,     0,   295,     0,
+       0,    41,    42,     0,    45,    46,   296,   297,   298,   299,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,    44,
+      26,    27,    28,     0,     0,    45,    46,   282,   283,    31,
+     284,     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,   285,    34,     0,     0,
+      31,   685,   286,     0,    38,    39,   287,     0,     0,   288,
+     289,   290,   291,    41,    42,     0,   292,   293,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+       0,     0,     0,     0,     0,    38,    39,     0,     0,   294,
+       0,   157,     0,     0,     0,     0,     0,    45,    46,   296,
+     297,   298,   299,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,   686,    26,    27,    28,  1092,     0,    45,    46,
+     282,   283,    31,   284,     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,   285,
+      34,     0,     0,    31,   685,   286,     0,    38,    39,   287,
+       0,     0,   288,   289,   290,   291,    41,    42,     0,   292,
+     293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
+       0,     0,   294,     0,   593,     0,     0,     0,     0,     0,
+      45,    46,   296,   297,   298,   299,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,   686,    26,    27,    28,  1221,
+       0,    45,    46,   282,   283,    31,   284,     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,   285,    34,    26,    27,    28,     0,   286,     0,
+      38,    39,   287,    31,     0,   288,   289,   290,   291,    41,
+      42,     0,   292,   293,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,     0,     0,   294,     0,   379,    38,    39,
+       0,     0,     0,    45,    46,   296,   297,   298,   299,   467,
+       2,   206,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,   257,    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,  -293,     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,   336,   337,    40,    31,  -293,     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,  -293,    34,    26,    27,    28,     0,    37,
+     338,   336,   337,    40,    31,     0,    45,    46,     0,     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,   635,     0,   338,    38,
+      39,     0,    31,  -293,    45,    46,     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,     0,     0,     0,    31,   338,    38,    39,     0,
+       0,     0,    45,    46,     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,
+     207,    39,     0,    31,   157,     0,     0,     0,     0,     0,
+      45,    46,     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,   270,    38,    39,
+       0,    31,     0,    45,    46,     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,     0,     0,     0,    31,   338,    38,    39,     0,     0,
+       0,    45,    46,     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,   686,     0,     0,     0,     0,     0,    45,
+      46,     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,   593,    38,    39,     0,
+      31,     0,    45,    46,     2,   206,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    34,     0,
+      26,    27,    28,     0,    44,   207,    39,     0,     0,    31,
+      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,     0,     0,    34,     0,    35,
+       0,    36,     0,     0,    38,    39,     0,     0,    45,    46,
+     282,   283,     0,   284,  1042,     0,  1043,     0,     0,  1044,
+    1045,  1046,  1047,  1048,  1049,  1050,  1051,     0,     0,  1525,
+    1052,     0,     0,     0,  1053,  1054,     0,    33,     0,   285,
+    -413,     0,     0,     0,     0,  1055,     0,     0,     0,   287,
+       0,     0,   288,   289,   290,   291,    41,    42,     0,   292,
+     293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   294,     0,   379,     0,     0,   171,     0,     0,
+      45,    46,   296,   297,   298,   299,     0,     0,   282,   283,
+    1057,   284,  1042,     0,  1043,  -128,     0,  1044,  1045,  1046,
+    1047,  1048,  1049,  1050,  1051,     0,     0,     0,  1052,     0,
+       0,     0,  1053,  1054,     0,    33,     0,   285,     0,     0,
+       0,     0,     0,  1055,     0,     0,     0,   287,     0,     0,
+     288,   289,   290,   291,    41,    42,     0,   292,   293,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     294,     0,   379,     0,     0,   171,     0,     0,    45,    46,
+     296,   297,   298,   299,     0,     0,     0,     0,  1057,     0,
+       0,     0,     0,  -128,     2,   206,     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,   684,    38,    39,     0,     0,     0,     0,
+       0,   282,   283,     0,   284,  1042,     0,  1043,  1399,  1400,
+    1044,  1045,  1046,  1047,  1048,  1049,  1050,  1051,     0,     0,
+    1525,  1052,     0,     0,     0,  1053,  1054,    34,    33,    35,
+     285,    36,     0,     0,    38,    39,  1055,     0,     0,     0,
+     287,     0,     0,   288,   289,   290,   291,    41,    42,     0,
+     292,   293,     0,     0,     0,     0,  1312,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1352,     0,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,   677,     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,   685,    26,    27,    28,  1091,     0,
-      45,    46,     0,     0,    31,     0,     0,     0,     0,     0,
+       0,     0,     0,   294,     0,   379,     0,     0,   171,     0,
+       0,    45,    46,   296,   297,   298,   299,     0,     0,   282,
+     283,  1057,   284,  1042,     0,  1043,  1399,  1400,  1044,  1045,
+    1046,  1047,  1048,  1049,  1050,  1051,     0,     0,     0,  1052,
+       0,     0,     0,  1053,  1054,     0,    33,     0,   285,     0,
+       0,     0,     0,     0,  1055,     0,     0,     0,   287,     0,
+       0,   288,   289,   290,   291,    41,    42,     0,   292,   293,
        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,   271,    31,     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,     0,    34,     0,    35,     0,    36,
-       0,     0,    38,    39,     0,     2,   207,     4,     5,     6,
+       0,   294,     0,   379,     0,     0,   171,     0,     0,    45,
+      46,   296,   297,   298,   299,     0,     0,   282,   283,  1057,
+     284,  1042,     0,  1043,     0,     0,  1044,  1045,  1046,  1047,
+    1048,  1049,  1050,  1051,     0,     0,     0,  1052,     0,     0,
+       0,  1053,  1054,     0,    33,     0,   285,     0,     0,     0,
+       0,     0,  1055,     0,     0,     0,   287,     0,     0,   288,
+     289,   290,   291,    41,    42,     0,   292,   293,     0,     0,
+       0,     0,     0,     0,   282,   283,     0,   284,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
+       0,   379,     0,     0,   171,     0,     0,    45,    46,   296,
+     297,   298,   299,   285,     0,     0,     0,  1057,     0,   286,
+       0,     0,     0,   287,     0,     0,   288,   289,   290,   291,
+      41,    42,     0,   292,   293,     0,     0,     0,     0,     0,
+       0,   282,   283,     0,   284,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   294,     0,   379,     0,
+       0,   972,     0,     0,    45,    46,   296,   297,   298,   299,
+     285,     0,     0,     0,     0,     0,   286,     0,     0,     0,
+     287,     0,     0,   288,   289,   290,   291,    41,    42,     0,
+     292,   293,     0,     0,     0,     0,     0,     0,   282,   283,
+       0,   284,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   294,     0,   379,     0,   282,   283,     0,
+     284,    45,    46,   296,   297,   298,   299,   285,     0,     0,
+       0,     0,     0,   286,     0,     0,     0,   287,     0,     0,
+     288,   289,   290,   291,    41,    42,   285,   292,   293,     0,
+       0,     0,   286,     0,     0,     0,   287,     0,     0,   288,
+     289,   290,   291,    41,    42,     0,   292,   293,     0,     0,
+     294,     0,   379,     0,   282,   283,     0,   284,   709,    46,
+     296,   297,   298,   299,     0,     0,     0,     0,     0,   294,
+       0,   379,     0,   282,   283,     0,   284,   344,    46,   296,
+     297,   298,   299,   285,     0,     0,     0,     0,     0,   286,
+       0,     0,     0,   287,     0,     0,   288,   289,   290,   291,
+      41,    42,   285,   292,   293,     0,     0,     0,   286,     0,
+       0,     0,   287,     0,     0,   288,   289,   290,   291,    41,
+      42,     0,   292,   293,     0,     0,   506,     0,     0,     0,
+     282,   283,     0,   284,    45,    46,   296,   297,   298,   299,
+       0,     0,     0,     0,     0,   294,     0,     0,     0,   282,
+     283,     0,   284,    45,    46,   296,   297,   298,   299,   285,
+       0,     0,     0,     0,     0,   286,     0,     0,     0,   287,
+       0,     0,   288,   289,   290,   291,    41,    42,   285,   292,
+     293,     0,     0,     0,   286,     0,     0,     0,   287,     0,
+       0,   288,   289,   290,   291,    41,    42,     0,   292,   293,
+       0,     0,   511,     0,     0,     0,     0,     0,     0,     0,
+      45,    46,   296,   297,   298,   299,     0,     0,     0,     0,
+       0,   514,     0,     0,     0,     0,     0,     0,     0,    45,
+      46,   296,   297,   298,   299,     2,   206,     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,   677,
-      31,     0,     0,     0,     0,    45,    46,     0,     0,     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,     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,    45,    46,
-       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,
-       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,    45,    46,     0,     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,    45,    46,   297,
-     298,   299,   300,     8,     9,    10,    11,    12,    13,    14,
+      35,     0,    36,    37,     0,   174,   175,    40,     0,     0,
+       0,     0,     0,     0,    41,    42,   205,     2,   206,     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,     0,    31,     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,    34,     0,     0,     0,     0,    37,     0,   336,   337,
-      40,     0,   295,   -35,   296,     0,     0,    41,    42,     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,   338,    26,    27,    28,     0,
-       0,    45,    46,   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,     0,    31,     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,    34,     0,     0,     0,     0,   111,
-       0,    38,    39,     0,     0,   295,     0,   296,     0,     0,
-      41,    42,     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,    44,    26,
-      27,    28,     0,     0,    45,    46,   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,     0,    31,
-     684,   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,
-     158,     0,     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,   685,    26,    27,    28,  1220,     0,    45,    46,   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,     0,    31,     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,
-      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,   295,     0,   592,     0,     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,   258,    26,    27,    28,     0,     0,
-      45,    46,   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,   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,    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,     0,   158,    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,     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,     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,   158,
-      38,    39,    40,    31,     0,    45,    46,     0,     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,    45,    46,     0,     0,    41,    42,     0,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,  -291,    34,
-      26,    27,    28,    43,    37,   271,   336,   337,    40,    31,
-       0,    45,    46,     0,     0,    41,    42,     0,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,  -291,    34,    26,    27,
-      28,   634,     0,   338,    38,    39,     0,    31,  -291,    45,
-      46,     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,     0,     0,   634,
-      31,   338,    38,    39,     0,     0,  -291,    45,    46,     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,   208,    39,     0,    31,   338,
-       0,     0,     0,     0,     0,    45,    46,     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,   271,    38,    39,     0,    31,     0,    45,    46,
-       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,     0,     0,     0,    31,
-     338,    38,    39,     0,     0,     0,    45,    46,     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,     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,    34,     0,     0,     0,     0,
-       0,   592,    38,    39,     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,    44,
-       0,     0,     0,     0,    31,    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,
-       0,     0,    34,     0,    35,     0,    36,     0,     0,    38,
-      39,   283,   284,     0,   285,  1041,     0,  1042,     0,     0,
-    1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,     0,
-    1524,  1051,     0,     0,     0,  1052,  1053,     0,    33,     0,
-     286,     0,     0,     0,     0,  -412,  1054,     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,    45,    46,   297,   298,   299,   300,     0,     0,   283,
-     284,  1056,   285,  1041,     0,  1042,  -126,     0,  1043,  1044,
-    1045,  1046,  1047,  1048,  1049,  1050,     0,     0,     0,  1051,
-       0,     0,     0,  1052,  1053,     0,    33,     0,   286,     0,
-       0,     0,     0,     0,  1054,     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,    45,
-      46,   297,   298,   299,   300,     0,     0,     0,     0,  1056,
-       0,     0,     0,     0,  -126,     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,  1041,     0,  1042,  1398,
-    1399,  1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,
-       0,  1524,  1051,     0,     0,     0,  1052,  1053,    34,    33,
-      35,   286,    36,     0,     0,    38,    39,  1054,     0,     0,
-       0,   288,     0,     0,   289,   290,   291,   292,    41,    42,
-       0,   293,   294,     0,     0,     0,     0,  1311,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   295,     0,   379,     0,     0,   172,
-       0,     0,    45,    46,   297,   298,   299,   300,     0,     0,
-     283,   284,  1056,   285,  1041,     0,  1042,  1398,  1399,  1043,
-    1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,     0,     0,
-    1051,     0,     0,     0,  1052,  1053,     0,    33,     0,   286,
-       0,     0,     0,     0,     0,  1054,     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,
-      45,    46,   297,   298,   299,   300,     0,     0,   283,   284,
-    1056,   285,  1041,     0,  1042,     0,     0,  1043,  1044,  1045,
-    1046,  1047,  1048,  1049,  1050,     0,     0,     0,  1051,     0,
-       0,     0,  1052,  1053,     0,    33,     0,   286,     0,     0,
-       0,     0,     0,  1054,     0,     0,     0,   288,     0,     0,
-     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
-       0,     0,     0,     0,     0,   283,   284,     0,   285,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     295,     0,   379,     0,     0,   172,     0,     0,    45,    46,
-     297,   298,   299,   300,   286,     0,     0,     0,  1056,     0,
-     640,     0,   140,   141,   288,     0,     0,   289,   290,   291,
-     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
-       0,     0,   283,   284,     0,   285,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   295,     0,   641,
-       0,   642,   380,     0,     0,    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,
-       0,   293,   294,     0,     0,     0,     0,     0,     0,   283,
-     284,     0,   285,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   295,     0,   379,     0,   283,   284,
-       0,   285,   708,    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,   295,     0,   379,     0,   283,   284,     0,   285,   344,
-      46,   297,   298,   299,   300,     0,     0,     0,     0,     0,
-     506,     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,   295,     0,     0,
-       0,   283,   284,     0,   285,    45,    46,   297,   298,   299,
-     300,     0,     0,     0,     0,     0,   511,     0,     0,     0,
-       0,     0,     0,     0,    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,     0,
-     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   514,     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,    27,    28,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
+      34,     0,    35,     0,    36,     0,     0,   207,    39,   467,
+       2,   206,     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,    34,     0,    35,     0,    36,     0,     0,   208,
-      39,   467,     2,   207,     4,     5,     6,     7,     8,     9,
+       0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
+      38,    39,     2,   206,     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,
@@ -2859,19 +2875,9 @@
        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,   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,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,   485,   486,   487,    34,     0,    35,
-      31,    36,     0,     0,   208,    39,     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,     0,    38,    39
+       0,     0,   207,    39
 };
 
 #define yypact_value_is_default(yystate) \
-  ((yystate) == (-1310))
+  ((yystate) == (-1323))
 
 #define yytable_value_is_error(yytable_value) \
@@ -2880,982 +2886,1010 @@
 static const yytype_int16 yycheck[] =
 {
-       0,     1,   240,   205,   186,   186,   117,     0,    43,   534,
-      43,    43,   600,   756,   646,     1,   749,   187,   521,     0,
-     186,   186,   186,   157,   169,   170,   749,   749,   186,   106,
-     220,   602,    32,   186,   345,   349,     0,   188,   280,    32,
-     157,   513,   600,    43,   874,    43,   603,   874,   349,    49,
-     620,    32,   609,   733,     0,   983,    49,   600,   492,   571,
-       0,     1,   496,    63,   602,   187,    66,    32,    32,    69,
-      63,   692,    43,    66,    64,     0,    69,  1040,    39,   156,
-       1,   600,    57,    69,   266,   266,    32,    43,    51,  1398,
-     364,   202,    32,    63,   368,  1321,   418,   267,    82,   600,
-     266,   266,   266,  1052,  1053,  1033,   106,    32,   266,   600,
-     600,   262,   263,   266,   114,    72,   438,   117,   118,   109,
-     282,    72,  1402,    96,   446,    39,    66,   695,    39,    69,
-      28,   109,   107,    39,    39,   110,    95,    39,    82,   128,
-      39,    66,   131,  1021,    82,   267,   109,   147,   148,   122,
-     111,   186,    11,   186,   186,   148,   156,   157,     0,   295,
-    1469,   161,   132,  1020,  1021,   109,    44,    45,   161,     0,
-     129,   482,   905,   109,   488,   132,     0,     1,    72,  1128,
-      78,   132,   905,   905,   687,    49,   186,   187,   186,   109,
-      32,   257,   130,  1419,   187,   109,   109,   111,   109,   718,
-     111,    32,   202,   109,   109,   111,   111,   109,    32,   111,
-     210,   131,    43,  1040,    72,   186,  1496,   210,    49,    82,
-     410,  1501,   222,   117,   812,    83,    84,   718,   718,   222,
-     186,   266,    63,   266,   266,    66,   406,   115,    69,  1452,
-     240,  1521,    85,   986,   219,    69,   112,   110,  1528,    82,
-     114,   109,   252,   824,   812,   116,   107,   814,   114,   252,
-     260,    44,    45,     3,   341,   265,   266,   267,   490,   812,
-     113,   252,   272,  1486,   267,  1488,   257,    82,   111,   900,
-     131,   793,   222,   147,   406,   396,   824,   252,   252,    49,
-     426,   427,   924,   812,   371,   295,     3,   222,   273,   433,
-      96,   602,  1501,   116,   109,   280,   252,   307,     0,   620,
-     480,   812,   252,   424,   625,   589,   433,   148,   110,   430,
-     112,   812,   812,   323,   116,  1288,   122,   252,   328,  1528,
-     161,   114,   253,    44,    45,   328,     0,    82,   906,   131,
-     132,   341,   504,   110,   932,   345,   210,  1225,   482,   349,
-     350,   109,   418,   111,   114,   186,   187,   631,   480,   681,
-     109,   116,   933,   130,   364,   110,    90,    91,   368,  1049,
-     506,   371,   438,   348,   932,   511,   240,   132,   514,   210,
-     446,  1211,   604,   951,  1211,   130,   608,   426,   427,   932,
-     365,   222,   526,    72,   369,   112,   396,  1275,   116,   116,
-     285,   125,   126,   114,    83,    84,   406,   629,   272,   526,
-     252,   633,   130,   406,  1472,   257,   110,  1274,  1275,    55,
-    1478,   252,   307,   308,   424,   350,   426,   427,   252,   999,
-     430,   567,   111,   433,   745,   266,   130,   418,   112,   116,
-    1498,   110,   116,   307,   111,  1503,   113,   116,   525,  1501,
-     210,  1008,  1009,   130,   454,   494,   590,   438,  1386,  1387,
-     345,  1288,    98,   130,   967,   446,   635,   636,   131,  1521,
-     229,   112,   472,   590,   513,   116,  1528,   116,  1441,   110,
-     480,   345,   482,   652,   484,  1448,   116,   480,   488,   248,
-     732,   484,   110,   132,   494,  1127,   381,   328,   116,   116,
-     130,   482,   647,   484,   666,   656,   506,   941,   508,   981,
-     824,   511,   272,   513,   514,   132,  1394,   687,   349,   109,
-     484,   521,   109,   824,   116,   525,   526,   109,  1099,   803,
-     109,   111,   111,   113,   808,   295,  1499,  1394,   484,   578,
-     132,   710,   109,   654,   484,   116,   467,   307,   473,  1117,
-     130,     4,     5,     6,     7,     8,     9,   116,   194,   484,
-     110,   132,   426,   427,   116,   687,   116,   116,   116,   116,
-     570,   571,   116,   132,   736,   406,   418,   109,   578,   116,
-     132,   217,  1085,   132,   132,   132,   109,  1090,   132,   589,
-     590,   227,   117,   904,   594,   132,   438,   116,   123,   124,
-     600,   116,   602,   109,   446,   111,   110,   528,  1288,  1177,
-    1178,   745,   533,   132,  1441,   681,    69,   132,    71,   110,
-     620,  1448,   896,   937,   846,   625,    72,   627,    74,    75,
-     494,   631,   801,   110,   634,   635,   636,    83,    84,    72,
-     110,   707,   484,   112,   590,   110,   621,   116,   112,   513,
-      83,    84,   652,   484,   654,   109,   910,   488,   912,   295,
-     484,   582,   637,   109,   549,   550,   551,   744,   114,   112,
-     109,   861,  1499,   116,    72,   809,   651,   115,    72,   132,
-      74,    75,  1362,   109,   684,    83,    84,   687,   999,    83,
-      84,   881,   809,   109,   454,   111,    72,   622,    74,    75,
-     681,    85,    86,    87,   109,   943,   111,    83,    84,   132,
-     710,   711,   712,   111,   578,   109,   938,  1115,   718,   719,
-     114,  1119,   867,   905,   905,   109,   707,   111,    64,   113,
-     114,   109,   653,   111,   655,   112,   110,   907,   114,   905,
-     905,   905,   116,   109,   744,   745,   506,   905,   508,   749,
-     750,   511,   905,   109,   514,   111,   620,   732,   109,    70,
-     111,   625,   109,    74,   745,  1445,    77,  1447,    79,   600,
-     904,   602,  1505,   698,   132,    86,   556,   557,   558,   559,
-    1305,     3,  1505,  1505,   705,   907,   114,   712,    10,    11,
-      12,    13,    14,   793,     4,     5,     6,     7,     8,     9,
-     110,   801,   109,   803,   111,   805,   116,   443,   808,   809,
-    1012,   114,   812,   109,  1382,   111,    72,    39,    74,    75,
-    1500,   117,   118,    33,   824,    72,   903,    83,    84,   114,
-    1398,   132,   110,   469,   132,  1146,    83,    84,   116,   681,
-      10,    11,    12,    13,    14,    67,    72,   110,  1122,   109,
-      76,   109,   110,   116,    82,   111,   687,    83,    84,    69,
-     110,    71,    49,   809,   111,   707,   116,   110,   109,    39,
-     506,   756,   109,   116,   874,   511,    63,   112,   514,    66,
-     805,    82,    69,   109,   118,   111,  1020,   718,   719,   110,
-    1035,   117,   118,   874,   127,   116,   896,    67,    88,    89,
-    1468,  1469,   213,   903,   904,   905,    72,   907,     4,     5,
-       6,     7,     8,     9,  1225,  1085,   110,    83,    84,   919,
-    1090,   128,   116,   904,   684,   110,    94,   109,   874,   111,
-      30,   116,   932,   933,   874,   117,   118,   937,   131,   109,
-      72,   111,   942,   943,    76,   111,   111,   117,   118,   874,
-     109,    83,    84,  1115,   110,   109,   942,  1119,  1120,   112,
-     116,   148,   109,  1085,   111,     0,     1,   967,  1090,   112,
-     117,   118,   110,    69,   161,    71,   110,   109,  1481,   119,
-     120,   812,   116,    83,    84,   117,   118,   112,    10,    11,
-      12,    13,    14,   824,    29,    30,  1107,    32,   110,   999,
-     187,   110,   942,   110,   116,    92,    93,    72,    43,    74,
-      75,    76,  1146,    72,    49,    74,    75,    39,    83,    84,
-    1020,  1021,    57,   210,    83,    84,   110,  1530,    63,   115,
-     116,    66,   874,   669,    69,   222,   957,   109,   110,   111,
-    1040,   352,   678,   354,   109,    67,   682,   110,    83,    84,
-     874,   109,   117,   118,  1190,  1191,    72,  1193,   979,  1040,
-      76,   110,   983,   110,  1200,   110,  1202,    83,    84,   116,
-     112,   116,   107,  1235,   905,   110,   907,  1002,   110,   943,
-    1080,   111,   117,   114,   116,  1085,   110,   109,   116,   111,
-    1090,   131,   116,   109,  1040,   117,   118,   110,   111,  1099,
-    1040,   117,   118,   506,    66,   508,   937,  1107,   511,    58,
-      59,   514,  1033,   148,   999,  1040,   115,   116,   942,    44,
-      45,   156,  1122,   552,   553,    72,   161,    74,    75,    76,
-    1207,   442,   109,   110,   111,   999,    83,    84,   560,   561,
-    1274,   328,   554,   555,   244,   114,  1146,   114,   109,   110,
-     111,   186,   187,   109,   112,  1040,   118,   110,   110,   919,
-    1322,   112,   109,    29,  1326,  1146,   112,   202,   112,     3,
-     117,   118,   109,   110,   111,   210,    10,    11,    12,    13,
-      14,    58,    59,    60,   219,   112,   116,   222,  1188,  1189,
-    1248,  1249,  1250,   110,   229,   130,   130,   130,  1040,   161,
-     110,   112,   114,  1189,   112,    39,   115,  1207,   110,   244,
-     115,  1211,   115,   248,   109,   116,  1040,   252,   253,   406,
-       1,   110,  1358,   110,    72,  1225,    74,    75,    76,  1229,
-    1211,   266,   267,    67,   132,    83,    84,   116,   273,   110,
-     110,   110,   110,  1229,  1225,   280,   110,   110,  1188,  1189,
-     110,   116,   110,   110,  1085,   110,   110,   110,   110,  1090,
-     222,  1423,   898,  1188,   110,  1211,   110,  1378,    49,   110,
-     110,  1211,   115,   874,  1274,  1275,    29,  1515,   110,   130,
-     380,   131,   112,  1283,   112,   116,  1211,   110,  1288,  1229,
-     110,   116,   110,   328,   130,   116,   112,   114,   260,   110,
-     110,   464,   110,   265,   116,   112,   110,  1288,   110,   110,
-     116,   116,   112,   348,   349,    10,    11,    12,    13,    14,
-    1080,  1321,   109,  1505,  1505,   106,   109,  1248,  1249,  1250,
-     365,   109,   109,   114,   369,  1321,  1506,   109,   130,  1505,
-    1505,  1505,  1288,  1283,    39,   380,     3,  1505,  1288,   112,
-     132,   115,  1505,    10,    11,    12,    13,    14,  1283,   110,
-    1530,   396,   110,  1288,   110,  1189,   147,   128,   115,  1211,
-    1481,   406,    67,   115,   464,   156,   114,   695,  1378,   112,
-     132,  1321,    39,   110,  1506,   116,   112,  1211,   350,   424,
-     112,   491,   110,   493,  1394,   430,   110,   432,   110,   112,
-     110,   112,  1377,   112,   112,  1229,   112,   112,  1530,    72,
-      67,    74,    75,    76,   109,  1051,   111,    47,   115,  1419,
-      83,    84,   117,   118,    72,   206,    74,    75,    76,   210,
-     132,   132,   467,  1419,   132,    83,    84,   472,   132,   132,
-     110,  1441,  1043,   115,   130,   480,  1288,   115,  1448,   484,
-    1450,   110,  1452,   488,   112,   109,   491,   112,   493,   240,
-    1441,   109,   112,   112,  1288,  1386,  1387,  1448,   786,   431,
-    1505,   112,  1505,  1505,   112,   110,   110,    60,   109,  1419,
-     112,  1481,    66,   112,   109,   132,  1486,   110,  1488,   110,
-     114,   272,    76,   528,   275,  1441,   112,  1321,   533,  1499,
-     112,  1441,  1448,  1424,   110,  1505,  1506,   670,  1448,   112,
-     110,   473,   109,  1506,   295,  1515,  1441,    96,  1499,    96,
-      85,    86,    87,  1448,   109,   132,   307,   115,   110,    72,
-    1530,    74,    75,    76,   118,   110,   110,  1530,   110,    42,
-      83,    84,   642,   116,   109,   863,   111,   582,   113,   114,
-     130,   132,   110,  1499,   589,   110,   132,    96,    96,  1499,
-     341,  1482,   132,   110,   345,   600,   109,   602,   132,   110,
-    1491,   132,   112,   110,  1499,   110,   132,   161,   112,   115,
-     670,   109,   132,   364,   115,   115,   621,   368,   906,   110,
-     371,   691,   110,   693,   110,  1419,   110,   697,  1056,  1441,
-     132,   564,   637,   562,   977,   565,  1448,   642,   563,   566,
-    1211,  1211,  1469,  1364,  1540,  1298,   651,  1441,   653,   654,
-     655,  1120,  1326,  1448,  1448,   912,   789,    66,   684,  1071,
-     684,  1090,   594,   951,   920,   697,   799,   582,   222,   971,
-     867,   648,   722,  1229,    83,   426,   427,   939,   570,   484,
-     813,  1515,   687,   732,   570,   570,   691,  1499,   693,    -1,
-     622,  1297,   697,    -1,    -1,   627,    -1,    -1,   986,    -1,
-     705,    -1,    -1,   454,  1505,  1499,   260,    -1,    -1,   118,
-      -1,   265,    -1,   718,   719,    -1,   467,    -1,    -1,    -1,
-    1450,    -1,  1452,    -1,    -1,    -1,   280,   732,    -1,   789,
-      -1,    -1,    -1,  1304,    -1,    -1,    -1,    -1,    -1,   799,
-      -1,   492,    -1,   494,    -1,   496,    -1,    -1,    -1,  1037,
-      -1,    -1,   161,   813,    -1,   506,  1486,   508,  1488,    -1,
-     511,    -1,   513,   514,    -1,    -1,   698,    57,    -1,    10,
-      11,    12,    13,    14,   525,    -1,    -1,    -1,    -1,    72,
-     712,    74,    75,    76,    -1,  1356,    -1,    -1,  1359,    -1,
-      83,    84,    -1,    -1,    -1,    -1,   350,   867,    39,    -1,
-      -1,    -1,    -1,   873,    -1,    -1,    -1,   812,    -1,    -1,
-      -1,    -1,    -1,   222,    -1,    -1,   109,   107,   111,   824,
-     110,    -1,    -1,    -1,   117,   118,    67,   578,    -1,  1117,
-      -1,  1402,    -1,    -1,    -1,    -1,  1407,   130,   589,    -1,
-      -1,    -1,    -1,  1449,   914,  1451,    -1,    -1,    -1,    -1,
-      -1,   260,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,
-      -1,    -1,   867,    -1,  1435,    -1,   156,   670,   873,   620,
-      -1,    -1,    -1,   805,   625,    -1,    -1,   431,    -1,  1485,
-     631,  1487,     0,     1,  1017,  1018,    -1,    -1,    -1,  1177,
-    1178,   896,    -1,    -1,   448,    -1,    -1,    -1,    -1,    -1,
-     905,   971,   907,    -1,    -1,    -1,    -1,    -1,    -1,   914,
-      -1,    -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,   473,
-      -1,    -1,    -1,  1529,    -1,  1531,    -1,    -1,    -1,   219,
-      -1,    49,   937,   684,    -1,    -1,    -1,    -1,  1544,  1545,
-      -1,   350,  1075,  1076,    -1,    -1,    -1,    -1,  1519,    -1,
-      -1,    69,   957,    -1,  1525,    -1,    -1,  1017,  1018,    -1,
-      -1,    -1,    -1,    -1,    -1,  1536,   971,    -1,    -1,  1540,
-      -1,   722,    -1,    -1,   979,    -1,    -1,    -1,   983,     0,
-       1,    -1,    -1,   273,    -1,    -1,   789,    -1,   106,    -1,
-     280,    -1,    -1,   744,    -1,    -1,   799,    -1,    -1,    -1,
-      -1,  1071,    -1,    -1,    -1,     0,    -1,    -1,    -1,    -1,
-     813,    32,    -1,    -1,    -1,  1075,  1076,    -1,    -1,    -1,
-      -1,    -1,   431,    -1,    -1,    -1,    -1,    -1,  1033,    -1,
-     148,    -1,    -1,    -1,    -1,    -1,    -1,    32,   156,   157,
-     594,    -1,    -1,    -1,    -1,    66,    -1,    -1,    69,    -1,
-      -1,    -1,   803,    -1,    -1,    -1,    -1,   808,   348,    -1,
-      -1,    -1,    -1,    -1,   473,    -1,  1071,    -1,   622,   187,
-    1002,    -1,    -1,   627,    69,   365,    -1,    -1,    -1,   369,
-    1085,    -1,    -1,    -1,   202,  1090,    -1,   205,   206,    -1,
-    1223,    -1,   210,    -1,  1382,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1398,    -1,    -1,   231,  1184,    -1,    -1,   235,    -1,   237,
-      -1,    -1,  1255,    -1,    -1,    -1,    -1,    -1,   246,    -1,
-    1263,  1264,  1265,    -1,   252,    -1,   157,    -1,    -1,   257,
-      -1,    -1,   432,    -1,   698,   896,    -1,    -1,    -1,   267,
-      -1,    -1,   903,    -1,    -1,    -1,    -1,   275,   712,    -1,
-      -1,     0,   157,  1223,    -1,    -1,    -1,    -1,   919,    -1,
-      -1,    72,    -1,    74,    75,    76,    -1,    -1,   732,  1184,
-    1468,  1469,    83,    84,    -1,   594,    -1,    -1,    -1,    -1,
-     941,   942,   943,    32,  1327,  1255,    -1,    -1,    -1,    -1,
-      -1,   222,  1207,  1263,  1264,  1265,    -1,    -1,   109,    -1,
-     111,    -1,    -1,   622,  1017,  1018,   117,   118,   627,    -1,
-      -1,    -1,    -1,   341,    -1,    -1,    -1,   345,    -1,    -1,
-      69,   252,    -1,   351,    -1,    -1,   231,    -1,    -1,    -1,
-      -1,    -1,    -1,  1248,  1249,  1250,   364,    -1,   999,    -1,
-     368,   805,    -1,   371,    -1,    -1,  1188,   252,    -1,    -1,
-      -1,    -1,   257,    -1,    -1,    -1,    -1,  1327,    -1,    -1,
-      -1,    -1,  1075,  1076,    -1,    -1,    -1,    -1,    -1,    -1,
-      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,   698,
-      -1,    83,    84,    72,    -1,    74,    75,    76,    -1,   589,
-     418,    -1,    -1,   712,    83,    84,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   433,    -1,   109,   157,   111,
-     438,    -1,    -1,    -1,    -1,   117,   118,    -1,   446,  1080,
-     109,   621,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
-      -1,    -1,    -1,    -1,    -1,    -1,   464,   637,    -1,   467,
-      -1,  1283,    -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,
-      -1,   651,    -1,    -1,   482,    -1,   484,    -1,    -1,    -1,
-      -1,  1122,  1377,  1378,   492,    -1,    -1,    -1,   496,    -1,
-      -1,  1386,  1387,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,    -1,    -1,    -1,   805,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   525,   526,    -1,
-      -1,    -1,   433,   252,    -1,    -1,    -1,   131,   257,  1424,
-      -1,    -1,    -1,   418,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   433,    -1,
-      -1,    -1,   732,   438,    -1,    -1,    -1,    -1,  1002,    -1,
-      -1,   446,  1255,   571,    -1,    -1,  1207,    -1,    -1,    -1,
-    1263,  1264,  1265,   484,    -1,    -1,    -1,    -1,    -1,   464,
-      -1,   589,   590,    -1,    -1,    -1,  1481,  1482,  1229,    -1,
-      -1,    -1,    -1,    -1,   602,    -1,  1491,   482,    -1,   484,
-      -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,
-    1505,  1506,   620,    -1,    -1,   526,    -1,   625,    -1,    -1,
-      -1,    -1,   351,   631,    -1,    -1,   634,   635,   636,    -1,
-      -1,    -1,    66,    -1,  1327,  1530,    -1,    -1,    72,    -1,
-      -1,   526,    76,    -1,   652,    79,    80,    81,    82,    83,
-      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   670,    -1,    -1,    10,    11,    12,    13,    14,
-      -1,    -1,    -1,   681,    -1,   109,    -1,   111,    -1,   590,
-    1321,    -1,    -1,   117,   118,   119,   120,   121,   122,   418,
-      -1,    -1,    -1,    -1,    39,    -1,   130,    -1,    -1,   707,
-      -1,    -1,   710,  1002,   433,   590,    -1,    -1,    -1,   438,
-      -1,   719,    -1,    -1,   722,    -1,   896,   446,    -1,    -1,
-      -1,    -1,    67,   634,   635,   636,    -1,    72,    -1,    74,
-      75,    76,    -1,    -1,    -1,   464,   744,   745,    83,    84,
-      -1,   652,   750,    -1,  1188,    -1,    -1,    -1,    -1,   634,
-     635,   636,    -1,   482,    -1,   484,    -1,    10,    11,    12,
-      13,    14,    -1,    -1,   109,    -1,   111,   652,    -1,    -1,
-      -1,    -1,   117,   118,    -1,    -1,    -1,    -1,  1419,    -1,
-      -1,   789,    -1,    -1,    -1,   670,    39,    -1,    -1,    -1,
-      -1,   799,    -1,   801,    -1,   803,   681,   526,   806,   710,
-     808,   809,    -1,    -1,    -1,   813,    -1,    -1,    -1,  1450,
-      -1,  1452,    -1,    -1,    67,   823,    -1,    -1,    -1,    72,
-      -1,    -1,   707,    76,    -1,   710,    -1,    -1,    -1,    -1,
-      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1283,
-      -1,     0,    -1,    -1,    -1,  1486,    -1,  1488,    -1,    -1,
+       0,     1,   186,    43,   239,   185,   204,     0,    43,   219,
+      43,   116,   185,   521,   534,   185,     1,   875,   186,     0,
+       1,   185,   757,    51,   647,   603,   750,   185,     0,     1,
+     281,   621,    32,   750,  1041,     0,  1022,    43,   185,    32,
+     345,   185,   750,    43,   168,   169,   513,   349,   875,    49,
+     156,    32,   603,    32,     0,   693,    49,   349,   187,     0,
+      32,   572,    57,    63,   601,  1322,    66,    32,    43,    69,
+      63,     0,     1,    66,   696,    63,    69,  1399,   734,   492,
+       0,   109,   266,   496,    69,   265,    32,   601,    69,    39,
+      39,    32,   265,   490,    66,   265,   201,    69,   266,   601,
+      39,   265,    43,    32,   604,   105,   601,   265,    49,    49,
+     610,   106,    32,   113,   109,   418,   116,   117,   265,    82,
+      66,   265,    63,    63,    39,    66,    66,    39,    69,    69,
+     601,   984,   261,   262,   284,   438,    43,    66,    28,   601,
+      69,   105,    72,   446,   132,   185,   146,   147,  1470,   601,
+     185,    72,   185,    49,   147,   155,   156,   307,   308,   109,
+     160,   111,   111,  1420,    39,   787,    82,   160,    72,   364,
+     109,    39,   111,   368,  1021,  1022,    82,   482,    96,   185,
+     688,  1034,   906,  1116,   156,   185,   186,  1120,    78,   906,
+     156,   155,     0,   186,   110,   345,   488,   109,   906,   111,
+     410,   201,   132,    96,   122,   111,   147,   147,   605,   209,
+     185,   132,   609,   117,  1041,    64,   209,   113,   109,   160,
+     160,   221,   406,   218,    32,   265,   109,   110,   221,   122,
+     265,   381,   265,   630,   109,   256,   111,   634,   406,   239,
+    1226,   109,   864,   111,   185,   186,   186,   825,   719,   221,
+     146,   251,   987,   504,    57,    44,    45,   719,   251,   259,
+     109,   426,   427,   901,   264,   265,   266,   719,   209,   209,
+     251,   271,   251,   266,   825,   221,   813,   272,   185,   251,
+     221,   221,  1289,   794,   279,   907,   251,   109,   696,    85,
+    1276,   396,   221,  1502,   294,    49,   480,   636,   637,   813,
+     109,   603,   925,   106,  1453,   251,   109,   307,  1053,  1054,
+     251,   813,   480,   209,   653,   815,   621,   113,   813,   424,
+    1529,   626,   251,   323,   265,   430,   115,   433,   328,   494,
+     952,   251,    95,    44,    45,   328,   107,   112,  1487,   116,
+    1489,   341,   813,   239,   109,   345,   111,   109,   513,   349,
+     350,   813,   155,   348,  1212,   132,   934,     0,   110,   113,
+     131,   813,    44,    45,   364,   987,   129,  1473,   368,   131,
+     365,   371,   711,  1479,   369,   271,   116,   341,   130,   682,
+      72,    11,    74,    75,  1129,  1212,   228,   328,   328,    32,
+     130,    83,    84,  1499,  1050,   590,   396,   418,  1504,   114,
+     550,   551,   552,   114,   350,   247,   406,   371,   349,  1395,
+    1000,   307,   110,   406,   579,   218,  1038,   438,   116,   933,
+     526,   109,   114,   111,   424,   446,   426,   427,  1275,  1276,
+     430,   933,   114,   433,    72,  1442,   110,   632,   933,   110,
+      72,   746,  1449,   251,  1502,    83,    84,   110,   256,   345,
+     847,    83,    84,   116,   454,   209,   130,   119,   120,   130,
+     968,   433,  1289,   802,  1522,   406,   406,   433,   110,   272,
+     112,  1529,   472,   111,   116,   128,   279,   110,   131,   111,
+     480,   116,   482,   116,   484,   591,   737,   480,   488,   131,
+     132,   484,    70,  1500,   494,    73,  1118,   132,    76,   907,
+      78,    90,    91,   484,   688,  1128,   506,    85,   508,  1009,
+    1010,   511,   484,   513,   514,   982,   482,   271,   116,   484,
+     688,   521,  1100,   825,   648,   525,   526,   473,   657,   942,
+     426,   427,   130,   825,  1387,  1388,   125,   126,   484,   109,
+     294,   111,   939,   484,   952,   348,   110,   488,  1395,   116,
+     655,   116,   116,   307,   526,   484,  1178,  1179,    72,   116,
+     526,   525,   365,   130,   484,    72,   369,    74,    75,    83,
+      84,   571,   572,    88,    89,   132,    83,    84,  1086,   579,
+    1403,    72,     3,  1091,     4,     5,     6,     7,     8,     9,
+     590,   591,    83,    84,    72,   595,   116,   111,   494,     3,
+     905,   601,     1,   603,   111,    83,    84,   757,   251,   804,
+     418,   116,   132,   256,   809,  1442,     0,   513,   110,   591,
+     111,   621,  1449,     0,   116,   591,   626,   622,   628,   432,
+     438,   109,   632,  1289,   212,   635,   636,   637,   446,   111,
+     111,   113,   113,   638,   112,   109,   938,   111,   116,    69,
+     116,    71,   862,   653,   116,   655,   109,   652,   130,   130,
+     601,   682,   603,   635,   636,   637,   132,   109,   116,   111,
+     132,   591,   882,  1500,  1497,   116,   484,   623,   116,  1502,
+     116,   653,   131,   579,   132,   685,    72,   708,   688,   116,
+      76,   132,   116,   109,   132,  1000,   132,    83,    84,  1522,
+     454,   279,   897,    72,   810,   132,  1529,  1363,   132,   944,
+    1118,   711,   712,   713,    83,    84,   110,   109,   116,   719,
+     720,   116,   116,   109,   908,   621,   906,    92,    93,   110,
+     626,   117,   118,   906,   132,   116,   906,   132,   733,   711,
+     908,   109,   906,   110,   868,   745,   746,   688,   906,   116,
+     750,   751,   506,   699,   508,   109,   109,   511,   111,   906,
+     514,  1383,   906,   110,   117,   118,   294,   713,   112,   116,
+    1178,  1179,   116,   109,   352,   418,   354,  1399,   719,   720,
+     746,   745,  1506,   109,   112,   111,  1306,   590,   116,  1506,
+    1446,   109,  1448,   111,   794,   438,   109,   112,  1506,   117,
+     118,   116,   802,   446,   804,    72,   806,    74,    75,   809,
+     810,   110,   109,   813,   111,  1013,    83,    84,   110,   622,
+     117,   118,    72,   110,   116,   825,    76,   110,   112,   116,
+     802,   110,   116,    83,    84,   638,   110,   116,   810,   482,
+     110,   484,  1147,   112,   810,  1501,   116,  1469,  1470,   652,
+    1000,   115,   116,   252,    10,    11,    12,    13,    14,   109,
+     806,   111,   110,   111,   442,  1116,   109,   117,   118,  1120,
+    1121,   110,   813,   117,   682,   875,   110,   116,     3,   123,
+     124,   110,   116,    39,   825,    10,    11,    12,    13,    14,
+     810,  1041,    58,    59,   875,   110,   110,   897,   426,   427,
+     708,   116,  1086,   875,   904,   905,   906,  1091,   908,   110,
+     110,    67,  1036,   109,    39,    72,   116,   115,  1086,    76,
+     920,  1226,   109,  1091,   111,   109,    83,    84,  1123,   875,
+     733,   685,    64,   933,   934,   110,   115,   116,   938,   905,
+     904,   116,    67,   943,   944,    72,   875,    74,    75,    76,
+       0,     1,   109,    44,    45,   875,    83,    84,   943,   132,
+     117,   118,   943,   110,    66,   906,   109,   908,   968,   116,
+     109,   943,   111,   109,  1482,  1383,   553,   554,   506,    29,
+      30,   112,    32,   511,   132,  1236,   514,   506,   109,   508,
+     111,  1399,   511,    43,   911,   514,   913,   938,   114,    49,
+    1000,   555,   556,  1108,   114,   114,    72,    57,    74,    75,
+      76,   561,   562,    63,   943,   117,    66,    83,    84,    69,
+     132,  1021,  1022,  1531,   132,     4,     5,     6,     7,     8,
+       9,   109,    82,    83,   557,   558,   559,   560,    82,   682,
+     568,  1041,     4,     5,     6,     7,     8,     9,   944,  1021,
+    1022,    85,    86,    87,   109,  1021,   106,  1003,   160,   109,
+    1041,  1469,  1470,   109,   112,   708,   116,   875,   467,  1041,
+      82,    33,  1323,   118,   127,   109,  1327,   111,    94,   113,
+     114,  1081,   109,   110,   111,   128,  1086,   109,   110,   111,
+      69,  1091,    71,   131,   897,  1041,   111,   147,   109,   109,
+    1100,   110,   110,   746,  1000,   155,     3,    69,  1108,    71,
+     160,   112,  1041,    10,    11,    12,    13,    14,   112,   221,
+     112,  1041,   110,  1123,   109,   110,   111,   110,   110,   528,
+     110,   109,   110,   111,   533,   185,   186,    72,   109,    74,
+      75,    76,    39,   112,   111,  1086,   114,  1147,    83,    84,
+    1091,   201,   116,   132,   131,   733,   114,   259,   114,   209,
+     109,   112,   264,    58,    59,    60,   920,   110,   218,   110,
+      67,   221,   112,  1424,   109,   112,   111,   130,   228,   112,
+     112,  1147,   117,   118,   583,  1249,  1250,  1251,   130,  1189,
+    1190,   130,   116,   243,    29,   130,   110,   247,   110,   112,
+     115,   251,   252,   114,   112,  1190,   110,   116,  1208,  1190,
+     115,   109,  1212,   115,   110,   265,   266,  1189,  1190,   110,
+     130,   110,   272,   116,   110,   132,  1226,     3,   110,   279,
+    1230,  1212,   875,  1041,    10,    11,    12,    13,    14,   110,
+    1212,   116,   110,  1189,  1208,  1230,   110,   110,   350,  1230,
+     110,   110,   110,   110,     1,   654,   110,   656,  1230,   110,
+    1189,  1190,   905,    39,   110,   110,  1212,   110,    72,   110,
+      74,    75,    76,   115,  1379,  1275,  1276,    29,   328,    83,
+      84,  1516,   131,  1212,  1284,   110,   130,   116,   875,  1289,
+     112,    67,  1212,   112,   110,   110,   116,   110,   348,   349,
+     130,  1230,    49,  1275,  1276,   109,   109,   706,  1289,  1275,
+     116,   112,  1284,   117,   118,   365,   114,  1289,   110,   369,
+     110,   110,  1322,  1507,   112,   116,  1506,  1081,   110,   431,
+     380,   116,   116,  1506,    55,   110,  1506,  1322,  1284,  1507,
+     110,  1322,  1506,  1289,   112,   109,   396,  1531,  1506,   109,
+    1322,   109,   109,   109,   132,  1284,   406,   130,   105,  1506,
+    1289,   112,  1506,  1531,   110,   115,   113,   110,   110,  1289,
+     115,   473,   110,   128,   424,   115,    97,  1482,   114,  1379,
+     430,   112,   432,  1378,   132,   112,   116,   112,   110,    72,
+     110,    74,    75,  1322,   110,  1395,   110,   112,  1041,   146,
+      83,    84,   112,   112,  1212,  1208,   112,    72,   155,    74,
+      75,    76,   112,    72,   112,    74,    75,   467,    83,    84,
+    1420,    47,   472,  1395,    83,    84,   109,   132,   132,   132,
+     480,   114,   112,   132,   484,  1420,   132,   115,   488,  1420,
+     110,   491,  1442,   493,   109,   130,   115,   110,  1420,  1449,
+     109,  1451,   112,  1453,   115,   114,   112,  1044,   205,   112,
+     112,  1442,   209,   112,   110,   110,  1506,   109,  1449,   112,
+    1442,  1506,   193,  1506,   112,   109,   109,  1449,   528,    60,
+     110,  1289,  1482,   533,   132,   110,   114,  1487,   109,  1489,
+     112,  1420,   239,   595,   112,   216,  1442,   110,   112,   110,
+    1500,    96,    96,  1449,  1147,   226,  1506,  1507,   109,   109,
+     464,   115,   132,  1442,  1507,   130,  1516,   110,   110,  1500,
+    1449,   623,  1442,   110,   271,   110,   628,   274,  1500,  1449,
+     116,  1531,    42,   583,   132,   132,   110,   110,  1531,    66,
+     590,    96,    96,   132,   110,   110,   110,   294,    75,   132,
+     132,   601,   110,   603,  1500,   115,   112,   132,   115,   958,
+     307,   112,   109,   132,   110,  1506,    30,   115,   110,  1212,
+     132,  1500,   622,   294,   110,  1378,   110,   667,  1057,   563,
+    1500,   980,   978,  1226,   565,   984,  1212,  1365,   638,   564,
+     117,   464,   566,   643,   341,   567,  1470,   699,   345,  1541,
+    1299,  1327,   652,  1121,   654,   655,   656,  1072,  1449,   685,
+     685,   713,   913,   698,    66,  1091,   921,   364,    82,    83,
+    1516,   368,   583,   972,   371,  1212,   868,   723,   649,   940,
+      82,  1230,   484,   160,  1442,  1034,     0,     1,   688,   733,
+     571,  1449,   692,   571,   694,   571,  1289,    72,   698,    74,
+      75,    76,    -1,    -1,    -1,    -1,   706,    -1,    83,    84,
+      -1,    -1,    -1,  1191,  1192,   117,  1194,    -1,    32,   719,
+     720,    -1,    -1,  1201,    -1,  1203,    -1,    -1,    -1,   426,
+     427,    -1,    -1,   733,   109,    49,    -1,    10,    11,    12,
+      13,    14,  1500,    -1,   221,    -1,    -1,  1451,    -1,  1453,
+      -1,    -1,    -1,    -1,   806,    69,    -1,   454,   160,    -1,
+      85,    86,    87,    -1,    -1,    -1,    39,   671,  1305,    -1,
+     467,    -1,   443,    -1,    -1,    -1,    -1,    10,    11,    12,
+      13,    14,   259,  1487,   109,  1489,   111,   264,   113,   114,
+      -1,   105,    -1,    -1,    67,   492,    -1,   494,   469,   496,
+      -1,    -1,   279,    -1,    -1,    -1,    39,    -1,    -1,   506,
+      -1,   508,    -1,   813,   511,    -1,   513,   514,    -1,   221,
+    1357,    -1,    -1,  1360,    -1,   825,    -1,    -1,   525,   243,
+      -1,    -1,    -1,   147,    67,   506,   109,    -1,   111,    -1,
+     511,   155,   156,   514,   117,   118,    -1,    -1,   671,  1442,
+      -1,    -1,    -1,    -1,    -1,    -1,  1449,   259,    -1,    -1,
+      -1,    -1,   264,    -1,    -1,    -1,  1403,    -1,   868,    -1,
+      -1,  1408,   186,   350,   874,    -1,   109,    -1,   111,    -1,
+      -1,  1359,   579,    -1,   117,   118,   790,   201,    -1,    -1,
+     204,   205,    -1,   590,    -1,   209,   800,   897,    -1,  1436,
+    1249,  1250,  1251,    -1,    -1,    -1,   906,  1500,   908,    -1,
+     814,    -1,    -1,    -1,    -1,   915,   230,    -1,    -1,    -1,
+     234,    -1,   236,    -1,   621,    -1,    -1,    -1,    -1,   626,
+      -1,   245,    -1,    -1,    -1,   632,     0,   251,   938,    -1,
+      -1,    -1,   256,    -1,    -1,    -1,    -1,    -1,   350,    -1,
+      -1,  1003,   266,    -1,   431,    -1,    -1,    -1,   958,    -1,
+     274,    10,    11,    12,    13,    14,   380,   790,    32,    -1,
+      -1,   448,   972,    -1,    -1,    -1,    -1,   800,    -1,    -1,
+     980,    -1,    -1,  1520,   984,    -1,    -1,    -1,   685,  1526,
+      39,   814,    -1,    -1,    -1,    -1,   473,    -1,    -1,   670,
+    1537,    -1,   671,    -1,  1541,    69,    -1,    -1,   679,    -1,
+      -1,    -1,   683,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      -1,    72,    -1,    74,    75,    76,   723,   341,    -1,   431,
+      -1,   345,    83,    84,  1034,    -1,    -1,   351,  1387,  1388,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   745,    -1,
+     364,    -1,    -1,    -1,   368,    -1,    -1,   371,   109,    -1,
+     109,    -1,   111,    -1,    -1,    -1,   117,   118,   117,   118,
+      -1,   473,  1072,    -1,    -1,    -1,  1425,   491,    -1,   493,
+      -1,    -1,    -1,    -1,    -1,    -1,  1086,    -1,    -1,    -1,
+      -1,  1091,   156,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   418,    -1,    -1,   804,  1108,    -1,
+      -1,    -1,   809,    -1,  1018,  1019,    -1,    -1,   595,   433,
+      -1,   790,    -1,    -1,   438,    -1,    -1,   131,    -1,    -1,
+      -1,   800,   446,    -1,  1483,    -1,    -1,  1189,    -1,    -1,
+      -1,    -1,    -1,  1492,    -1,   814,   623,    -1,    -1,    -1,
+     464,   628,    72,   467,    74,    75,    76,    -1,    -1,    -1,
+      -1,    -1,    -1,    83,    84,    -1,   230,    -1,   482,    -1,
+     484,    -1,  1076,  1077,    -1,    -1,    -1,    -1,   492,    -1,
+      -1,    -1,   496,    -1,    -1,  1185,    -1,   251,    -1,   109,
+      -1,   111,   256,   595,    -1,  1018,  1019,   117,   118,    -1,
+     897,    -1,    -1,    -1,    -1,    -1,    -1,   904,  1208,    -1,
+      -1,   525,   526,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   623,   699,   920,    -1,    -1,   628,    -1,   899,   643,
+      -1,    -1,  1284,     0,    -1,    -1,   713,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   942,   943,   944,    -1,  1249,
+    1250,  1251,    -1,  1076,  1077,    -1,   733,    -1,   572,    72,
+      -1,    74,    75,    76,    -1,    32,    -1,    -1,    -1,    -1,
+      83,    84,    -1,    -1,    -1,    -1,   590,   591,   692,    -1,
+     694,    -1,    -1,    -1,   698,    -1,    -1,   351,    72,   603,
+      74,    75,    76,    -1,    -1,    -1,   109,   699,   111,    83,
+      84,    -1,    69,  1000,   117,   118,    -1,   621,    -1,    -1,
+      -1,   713,   626,    -1,    -1,    -1,    -1,    -1,   632,    -1,
+    1224,   635,   636,   637,    -1,   109,    -1,   111,    -1,   806,
+      -1,    -1,    -1,   117,   118,    -1,    -1,    -1,    -1,   653,
+      -1,    -1,    -1,    26,    27,    28,    -1,    -1,    -1,  1018,
+    1019,    -1,  1256,    -1,   418,    -1,    -1,   671,    -1,    -1,
+    1264,  1265,  1266,    -1,    -1,    -1,    -1,    -1,   682,   433,
+      -1,    -1,    -1,    -1,   438,    -1,    -1,    -1,  1378,  1379,
+      -1,  1052,   446,    -1,  1081,    -1,    -1,  1387,  1388,   156,
+      -1,    -1,    -1,    -1,   708,    -1,    -1,   711,    -1,    -1,
+     464,  1224,    -1,    -1,   806,    -1,   720,  1076,  1077,   723,
+      -1,    -1,    -1,    -1,    -1,    98,    -1,   100,   482,    -1,
+     484,    -1,    -1,    -1,  1328,  1425,  1123,    -1,    -1,    -1,
+      -1,   745,   746,  1256,    -1,    -1,    -1,   751,    -1,    -1,
+      -1,  1264,  1265,  1266,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   868,    -1,    -1,    -1,    -1,    -1,
+     874,    -1,   526,    -1,    -1,    -1,    -1,    26,    27,    28,
+      -1,    -1,    -1,    -1,    -1,    -1,   790,    -1,    -1,    -1,
+      -1,    -1,  1482,  1483,   251,    -1,   800,    -1,   802,   256,
+     804,    -1,  1492,   807,    -1,   809,   810,    -1,   181,    -1,
+     814,   915,    -1,    -1,    -1,  1328,  1506,  1507,   191,   192,
+     824,  1208,    -1,   196,    -1,   198,   199,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1003,   591,    -1,    -1,
+      -1,  1531,    -1,  1230,    -1,    -1,    -1,    -1,    -1,    98,
+      -1,   100,    -1,    -1,    -1,     0,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   972,    -1,
+      -1,   875,    -1,    -1,    -1,    -1,   125,    -1,    -1,    -1,
+      -1,   635,   636,   637,    -1,    -1,    -1,    32,    -1,    -1,
+      -1,    -1,    -1,   897,   351,    -1,    -1,  1256,    -1,   653,
+     904,   905,    -1,    -1,   908,  1264,  1265,  1266,    -1,    -1,
+      -1,  1003,    -1,    -1,    -1,    -1,    -1,   671,    -1,    -1,
+      -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,   682,    -1,
+     934,    -1,   181,    -1,    -1,  1322,    -1,  1298,   942,   943,
+     189,    -1,   191,   192,    -1,    -1,    -1,   196,    -1,   198,
+     199,    -1,    -1,    -1,   708,    -1,    -1,   711,    -1,    -1,
+      -1,   418,    -1,    -1,    -1,    -1,    -1,    -1,  1072,  1328,
+      -1,    -1,    -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,
+      -1,   438,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   446,
+      -1,    -1,   746,    -1,    -1,    -1,  1000,    10,    11,    12,
+      13,    14,    -1,    -1,    -1,    -1,    -1,   464,    -1,  1013,
+      -1,   156,    -1,    -1,  1018,  1019,    -1,  1021,  1022,   268,
+      -1,    -1,  1189,    -1,    -1,   482,    39,   484,    -1,    -1,
+      -1,    -1,    -1,  1420,    -1,    -1,   790,  1041,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   800,    -1,   802,    -1,
+      -1,    -1,    -1,   807,    67,    -1,   810,    -1,    -1,    72,
+     814,    74,    75,    76,  1451,    -1,  1453,    -1,    -1,   526,
+      83,    84,  1076,  1077,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1185,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1450,
+      -1,  1452,    -1,    -1,    -1,    -1,   109,  1189,   111,    -1,
+    1487,    -1,  1489,    -1,   117,   118,   251,    -1,    -1,    -1,
+      -1,   256,    -1,    -1,    -1,    -1,    -1,  1284,    -1,  1123,
+      -1,   875,    -1,    -1,    -1,  1486,    -1,  1488,    -1,  1516,
+      -1,    -1,    -1,    -1,   591,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1147,    -1,    -1,    -1,    -1,    -1,     0,
+      -1,   905,    -1,    -1,    -1,    -1,    -1,   189,    -1,    -1,
+      -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,    -1,  1530,
+      -1,  1532,    -1,    -1,    -1,    -1,    -1,    -1,   635,   636,
+     637,    32,    -1,    -1,  1545,  1546,  1190,    -1,    -1,    -1,
+      -1,    -1,  1284,    -1,    -1,    -1,   653,    -1,    -1,    -1,
+      -1,    -1,   575,   576,  1208,    -1,   351,    -1,  1212,    -1,
+      -1,    -1,    -1,    -1,   671,    -1,    -1,    -1,    69,    -1,
+    1224,    -1,  1226,    -1,    -1,   682,  1230,    -1,    -1,    -1,
+      -1,   604,    -1,    -1,   607,   608,   268,   610,    -1,   612,
+     613,    -1,    -1,    -1,   617,   618,    -1,    -1,    -1,    -1,
+      -1,   708,  1256,    -1,   711,    -1,    -1,    -1,    -1,    -1,
+    1264,  1265,  1266,    -1,  1018,  1019,    -1,  1021,  1022,    -1,
+      -1,  1275,  1276,   418,    -1,    -1,    -1,    -1,    10,    11,
+      12,    13,    14,    -1,    -1,  1289,    -1,  1041,   433,   746,
+      -1,   323,    -1,   438,    -1,    -1,    -1,    -1,    -1,   331,
+      -1,   446,   334,    -1,    -1,   156,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1322,   464,
+      -1,    -1,  1076,  1077,  1328,    -1,   575,   576,    -1,    -1,
+      -1,    -1,    -1,   790,    -1,    67,    -1,   482,    -1,   484,
+      72,    -1,    -1,   800,    76,   802,    -1,    -1,    -1,    -1,
+     807,    83,    84,   810,    -1,   604,    -1,   814,   607,   608,
+      -1,   610,    -1,   612,   613,    -1,   398,    -1,   617,   618,
+     402,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,
+      -1,   526,   755,   756,    -1,   117,   118,    -1,    -1,    -1,
+      -1,  1395,    -1,  1147,    -1,    -1,    -1,    -1,    -1,    -1,
+     251,    -1,    -1,    -1,    -1,   256,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1420,    -1,   875,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1190,    -1,  1442,    -1,
+      -1,    -1,    -1,    -1,    -1,  1449,   591,   479,   905,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1212,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1224,    -1,  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    -1,
+     635,   636,   637,    -1,    -1,    -1,  1500,    -1,    -1,    -1,
+     351,    -1,  1256,  1507,    -1,    -1,   755,   756,   653,    -1,
+    1264,  1265,  1266,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1275,  1276,    -1,    -1,    -1,   671,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1289,    -1,   682,    -1,   571,
+     572,    67,    -1,    -1,   917,    -1,    72,    -1,    74,    75,
+      76,    -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,
+      -1,  1018,  1019,   708,  1021,  1022,   711,   418,    -1,    -1,
+      -1,    -1,    -1,    -1,  1328,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   433,   109,  1041,   111,    -1,   438,    -1,    -1,
+      -1,   117,   118,    -1,    -1,   446,    -1,    -1,    -1,    -1,
+      -1,   746,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   464,    -1,    -1,    -1,    -1,    -1,  1076,
+    1077,    -1,    -1,    -1,    -1,    -1,   658,    -1,    -1,    -1,
+     662,   482,    -1,   484,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1395,    -1,    -1,    -1,   790,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   800,    -1,   802,    -1,    -1,
+      -1,    -1,   807,   912,    -1,   810,    -1,    -1,   917,   814,
+      -1,    -1,    -1,    -1,    -1,   526,    53,    -1,    55,    -1,
+      -1,    58,    59,    60,    -1,    62,    -1,    -1,  1442,    -1,
+    1147,    -1,    -1,    -1,    -1,  1449,    -1,    -1,    -1,    76,
+      -1,    -1,    -1,    -1,    -1,  1078,    -1,    -1,    -1,    -1,
+      -1,    88,    89,    -1,    10,    11,    12,    13,    14,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     875,    -1,    -1,  1190,    -1,    -1,    -1,    -1,    -1,    -1,
+     591,    -1,    -1,    39,    -1,    -1,  1500,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1212,    -1,    -1,    -1,    -1,
+     905,    -1,   794,    -1,    -1,    -1,    -1,  1224,    -1,  1226,
+      -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,
+      76,    -1,    -1,    -1,   635,   636,   637,    83,    84,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1256,
+      -1,    -1,   653,    -1,    -1,    -1,    -1,  1264,  1265,  1266,
+      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,  1275,  1276,
+     671,   117,   118,    -1,    -1,   282,    -1,   284,   285,  1078,
+      -1,   682,  1289,    -1,  1207,   292,   293,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     307,   308,    -1,    -1,    -1,    -1,    -1,   708,    -1,    -1,
+     711,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1328,    -1,  1018,  1019,    -1,  1021,  1022,    -1,    -1,
+     912,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   345,    -1,
+      -1,    -1,    -1,    -1,    -1,   746,  1041,    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,   381,    -1,    39,    -1,    -1,    -1,
+      -1,  1076,  1077,    -1,    -1,    -1,    -1,    -1,  1395,   790,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   800,
+      -1,   802,    -1,    -1,    67,    -1,   807,   989,  1207,   810,
+      -1,    74,    75,   814,    -1,    78,    -1,   344,    -1,   346,
+      -1,    -1,    -1,    -1,  1006,    -1,    -1,    -1,    -1,    -1,
+     357,   358,    -1,    -1,    -1,  1442,    -1,    -1,    -1,    -1,
+      37,    38,  1449,    40,    -1,    -1,   109,    -1,   111,    -1,
+      -1,    -1,  1147,    -1,   117,   118,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
+      -1,    -1,    -1,    -1,   875,    72,    -1,    -1,    -1,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,  1500,    -1,  1190,    -1,    -1,    -1,    -1,
+      -1,    -1,  1084,    -1,   905,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   111,    -1,    -1,  1212,    -1,    -1,
+     117,   118,   119,   120,   121,   122,    -1,    -1,    -1,  1224,
+      -1,  1226,     7,   130,    -1,    10,    11,    12,    13,    14,
+      -1,    -1,  1124,   550,   551,   552,   553,   554,   555,   556,
+     557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
+     567,  1256,    37,    38,    39,    40,    -1,    -1,    -1,  1264,
+    1265,  1266,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1275,  1276,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    66,    67,    -1,  1289,    -1,    -1,    72,    -1,    -1,
+      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,  1018,  1019,    -1,
+    1021,  1022,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1328,   109,    -1,   111,    -1,    -1,    -1,
+    1041,    -1,   117,   118,   119,   120,   121,   122,    -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,  1076,  1077,    30,    31,    32,
+      33,    -1,    -1,    36,    37,    38,    39,    40,    -1,   696,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1395,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    66,    67,    -1,    69,    -1,    71,    72,
+      -1,    74,    75,    76,    49,    -1,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
+      -1,    66,    -1,    -1,    -1,    -1,  1147,  1442,    -1,    -1,
+     757,    -1,    -1,    -1,  1449,    -1,   109,    -1,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
+      -1,    -1,    -1,   700,    -1,   702,    -1,    -1,    -1,   132,
+     787,    -1,   709,   710,    -1,    -1,    -1,   714,   113,  1190,
+      -1,    -1,   117,    -1,    -1,    -1,    -1,    -1,    -1,   726,
+      -1,    -1,    -1,    -1,   731,  1500,    -1,    -1,    -1,    -1,
+      -1,  1212,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   146,    -1,  1224,    -1,  1226,    -1,    -1,    -1,    -1,
+      -1,   156,   759,    -1,    -1,   160,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     7,    -1,    -1,    10,
+      11,    12,    13,    14,    -1,  1256,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1264,  1265,  1266,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1275,  1276,    37,    38,    39,    40,
+      -1,    -1,    -1,    -1,   209,    -1,    -1,    -1,  1289,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   221,    -1,    -1,    -1,
+     907,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
+      -1,    72,    -1,    -1,   239,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,  1328,    -1,    -1,
+      -1,   858,   859,   860,   861,    -1,   863,    -1,    -1,   264,
+      -1,    -1,    -1,    -1,    -1,   952,   271,    -1,   109,    -1,
+     111,   878,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
+     121,   122,    -1,    -1,    -1,   892,    -1,    -1,    -1,   294,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     987,    -1,   307,    -1,    -1,    -1,    -1,    -1,    -1,    66,
+      -1,    -1,    -1,  1000,  1395,    -1,    -1,    -1,    75,    -1,
+      77,    -1,    79,    -1,    -1,   932,    -1,    -1,    -1,    86,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     345,    -1,    -1,    -1,    -1,   350,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1041,    -1,    -1,    -1,    -1,    -1,
+     117,  1442,   119,   120,   121,    -1,    -1,    -1,  1449,    -1,
+     977,    -1,    -1,    -1,    -1,    -1,   983,    -1,    -1,    -1,
+      -1,   988,    -1,    -1,    -1,    -1,   993,    -1,   995,    -1,
+      -1,    -1,   999,    -1,  1001,  1002,    -1,    -1,  1005,    -1,
+      -1,    -1,    -1,   160,    -1,    -1,    -1,  1014,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1500,
+      -1,   426,   427,    -1,    -1,  1032,  1033,    -1,   433,    -1,
+      -1,  1118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   454,
+      -1,    -1,  1059,    -1,    -1,  1062,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   221,    -1,   223,   224,   225,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   482,    -1,    -1,
+      -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,   494,
+      -1,  1178,  1179,    -1,    -1,    -1,    -1,    -1,  1105,    -1,
+      -1,   506,   259,   508,  1111,  1112,   511,   264,   513,   514,
+      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   526,   279,    -1,  1131,    -1,    -1,  1134,    -1,    -1,
+      -1,  1138,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    72,  1151,    74,    75,    76,    -1,    -1,
+      -1,    -1,    -1,    -1,    83,    84,    -1,  1164,    -1,  1166,
+    1167,  1168,  1169,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   328,    -1,    -1,   579,  1182,    -1,  1184,    -1,    -1,
+     109,  1188,    -1,    -1,    -1,    -1,   591,    -1,   117,   118,
+     595,    -1,    -1,   350,    -1,    -1,    -1,    -1,   355,   356,
+      -1,    -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,    -1,
+    1217,  1218,    -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,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   653,   406,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1267,  1268,    -1,    -1,    -1,    -1,    -1,   424,    -1,    -1,
+    1277,    -1,   429,    -1,   431,    -1,    -1,    -1,    -1,    -1,
+     685,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   448,    -1,    -1,   451,   452,  1383,    -1,    -1,    -1,
+      -1,    -1,   459,    -1,    -1,    -1,   711,    -1,   713,    -1,
+      -1,    -1,  1399,    -1,    -1,    -1,   473,    -1,    -1,    -1,
+      -1,    -1,    -1,   480,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1338,    -1,  1340,  1341,  1342,    -1,    -1,    -1,    -1,
+      -1,   746,    -1,    -1,    -1,  1352,    44,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1361,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,  1386,
+      -1,    -1,  1469,  1470,    39,    -1,    -1,    10,    11,    12,
+      13,    14,    -1,    91,    -1,    -1,    -1,   802,    -1,    -1,
+      -1,   806,    -1,   101,    -1,   810,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    -1,    -1,    39,    72,    -1,    74,
+      75,    76,  1429,  1430,    -1,    -1,    -1,    -1,    83,    84,
+      -1,    -1,    -1,    -1,    -1,  1442,    -1,    -1,   595,    -1,
+      -1,    -1,  1449,    -1,    67,    -1,    -1,    -1,    -1,    72,
+      -1,    74,    75,    76,   109,    -1,   111,    -1,    -1,   157,
+      83,    84,   117,   118,    -1,    -1,   623,    -1,    -1,    -1,
+      -1,   628,    -1,   171,  1481,    -1,    -1,    -1,  1485,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
-     745,   590,    -1,    -1,   117,   118,   874,    -1,     0,    -1,
-     190,    -1,    -1,    32,  1515,    -1,    -1,   197,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   896,  1188,
-     801,    -1,    -1,    -1,    -1,   903,   904,    -1,   809,   907,
-      32,    -1,    -1,    -1,   789,   634,   635,   636,    -1,    -1,
-      69,    -1,    -1,    -1,   799,    -1,   801,    -1,    -1,    -1,
-      -1,   806,    -1,   652,   809,   933,    -1,    -1,   813,    -1,
-      -1,    -1,    -1,   941,   942,    -1,    -1,    69,    -1,    -1,
-      -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   269,
-      -1,    -1,   681,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   874,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   707,    -1,
-      -1,   710,    -1,    -1,  1283,    -1,    -1,    -1,    -1,   874,
-      -1,   999,    -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,
-      -1,    -1,    -1,   323,  1012,    -1,    -1,    -1,    -1,  1017,
-    1018,   331,  1020,  1021,   334,    -1,   745,    -1,    -1,   904,
-      -1,    -1,    -1,    -1,    -1,   157,    -1,  1207,    -1,    -1,
-      -1,   942,  1040,    -1,    -1,     3,     4,     5,     6,     7,
+      -1,    -1,    -1,    -1,   117,   118,   194,    -1,    -1,    -1,
+     905,    -1,    -1,    -1,    -1,    -1,  1513,    -1,  1515,    -1,
+     208,    -1,    -1,    -1,    -1,   920,    -1,    -1,    -1,   217,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   227,
+      -1,    -1,    -1,    -1,    -1,    -1,  1543,  1544,    -1,   944,
+      -1,    -1,   699,    -1,  1551,  1552,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   252,    -1,   713,    -1,    -1,   257,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   270,    -1,    -1,    -1,   733,    -1,   276,    -1,
+     278,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1000,    -1,   295,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,  1021,  1022,    30,    31,
+      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   794,    -1,    -1,
+     338,    -1,    -1,    -1,    -1,   343,    -1,    -1,    -1,   806,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
+      72,    -1,    74,    75,    76,    -1,    -1,    -1,   825,    -1,
+      -1,    83,    84,    -1,   372,    -1,  1081,    -1,   376,   377,
+      -1,   379,    -1,    -1,    -1,    -1,    -1,    -1,   386,   387,
+      -1,   389,   390,    -1,   392,    -1,   394,   109,    -1,   111,
+      -1,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
+      -1,    -1,    -1,   411,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   419,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,
+     156,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1147,    -1,    -1,    -1,   444,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
+      14,    -1,    -1,   189,    -1,    -1,    -1,    -1,    -1,    -1,
+     196,    -1,   470,    -1,    -1,    -1,    -1,    -1,   476,    -1,
+      -1,   938,    -1,   481,  1189,    39,    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,   968,    -1,    67,    -1,    39,    -1,    -1,    72,   517,
+      -1,  1226,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
+      84,    -1,    -1,    -1,   532,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   268,    67,    -1,    -1,  1003,    -1,    72,    -1,
+      74,    75,    76,    -1,    78,   109,    -1,  1014,    -1,    83,
+      84,    -1,    -1,   117,   118,    -1,    -1,    -1,    -1,    -1,
+    1275,  1276,    -1,   571,    -1,    -1,    -1,    -1,    -1,  1284,
+      -1,    -1,   580,    -1,    -1,   109,    -1,   111,   146,   587,
+      -1,    -1,    -1,   117,   118,   593,    -1,   323,   156,    -1,
+      -1,    -1,    -1,    -1,   602,   331,   332,    -1,   334,   335,
+     168,   169,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   345,
+      -1,    -1,    -1,   349,    -1,    -1,    -1,    -1,    -1,  1086,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   368,  1100,   642,   371,     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,   398,    30,    31,    32,   402,    -1,    -1,    -1,
+     678,   239,    39,    -1,    -1,    -1,    -1,    -1,   686,    -1,
+    1395,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   263,    -1,   433,    -1,    -1,
+      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,   717,
+      -1,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,   727,
+     728,    76,  1189,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,  1451,    -1,  1453,    -1,
+      -1,    -1,    -1,   479,   111,    -1,   482,    -1,    -1,    -1,
+     117,   118,   760,    -1,   109,    -1,   111,   765,    -1,   114,
+      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
+      -1,    -1,  1487,    -1,  1489,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   521,    -1,    -1,    -1,   525,
+     526,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1516,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   380,    -1,    -1,    -1,    -1,  1284,    -1,    -1,
+      -1,   829,    -1,    -1,    -1,    -1,    -1,    -1,   836,    -1,
+      -1,    -1,    -1,    -1,    -1,   571,   572,    -1,    -1,    -1,
+      -1,   849,    -1,   851,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   590,   591,    -1,   865,    -1,    -1,
+      -1,    -1,    -1,   871,    -1,   601,    -1,   603,   604,    -1,
+      -1,    -1,    -1,    -1,   610,   883,    -1,    -1,   886,    -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,    -1,    -1,   474,    -1,    -1,    -1,
+      -1,    -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,    -1,    -1,    -1,   513,    -1,    -1,    -1,    -1,
+      -1,    -1,   688,    -1,    -1,   963,    -1,    -1,   526,    -1,
+      -1,    -1,    -1,   531,    -1,    -1,   534,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   711,   712,    -1,    -1,   547,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     998,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   569,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   745,
+     746,   579,    -1,    -1,   750,   751,    -1,    -1,   586,    -1,
+      -1,    -1,    -1,   591,    -1,    -1,    -1,    -1,    -1,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,  1056,    -1,
+      30,    31,    32,    -1,  1062,    -1,    -1,    -1,   794,    39,
+      -1,    -1,    -1,    -1,  1531,    -1,   802,    -1,    -1,    -1,
+      -1,    -1,   640,   809,   810,    -1,    -1,   813,    -1,   815,
+     648,    -1,    -1,    -1,    -1,    -1,    -1,    67,  1096,   825,
+      -1,    -1,    72,  1101,    74,    75,    76,    -1,    -1,    -1,
+      -1,  1109,    -1,    83,    84,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,  1142,    39,    -1,   117,   118,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1154,    -1,    -1,  1157,
+      -1,  1159,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   897,    -1,    67,    -1,  1173,  1174,    -1,   904,   905,
+     906,    -1,   908,    -1,    78,    -1,   912,    -1,   746,    -1,
+     748,    -1,    -1,    -1,    -1,    -1,    -1,  1195,    -1,    -1,
+     758,    -1,    -1,    -1,    -1,    -1,   764,   933,   934,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,   968,    -1,  1242,    -1,    -1,    -1,   806,   807,
+      -1,    -1,   810,    -1,    -1,    -1,    -1,    -1,    37,    38,
+      -1,    40,    -1,   989,   990,    -1,   824,    67,    -1,    -1,
+      -1,    -1,    -1,    -1,  1000,    -1,    -1,    -1,    78,    -1,
+    1006,  1007,    -1,  1009,  1010,  1011,    -1,    66,    -1,    -1,
+      -1,    -1,    -1,    72,    -1,  1021,  1022,    76,    -1,    -1,
+      79,    80,    81,    82,    83,    84,   864,    86,    87,    -1,
+     868,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1317,
+      -1,  1319,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,   111,  1331,    -1,  1333,    -1,   116,   117,   118,
+     119,   120,   121,   122,    -1,    -1,    -1,   905,    -1,    -1,
+      -1,    -1,  1350,    -1,    -1,    -1,    -1,    -1,  1084,    -1,
+    1086,    -1,    -1,    -1,    -1,  1091,    -1,    -1,  1366,  1367,
+      -1,    -1,    -1,    -1,  1100,    -1,    -1,    -1,    -1,  1377,
+      -1,    -1,  1380,    -1,    -1,    -1,   944,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1123,  1124,  1125,
+      -1,    -1,    -1,  1401,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1410,    -1,   972,  1413,    -1,  1415,  1416,  1417,
+     978,  1147,    -1,    -1,   982,    37,    38,    -1,    40,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1003,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    66,    -1,  1014,  1455,    -1,  1457,
+      72,  1459,    74,    75,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,  1474,    -1,  1036,    -1,
+    1038,    -1,  1208,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1053,  1054,   109,    -1,   111,
+    1226,   113,   114,    -1,    -1,   117,   118,   119,   120,   121,
+     122,    -1,    -1,    -1,    -1,    -1,  1074,    -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,  1275,
+    1276,    30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,
+      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1129,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,  1147,
+      69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1162,  1163,    -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,   111,    -1,    30,    31,    32,    33,   117,   118,
+      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,  1395,
+      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,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
+      -1,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1303,    -1,    -1,  1306,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1482,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1506,  1507,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1531,     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,    -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,
+      -1,    -1,   109,    -1,   111,    -1,    -1,    83,    84,    -1,
+     117,   118,   119,   120,   121,   122,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-     789,    -1,    30,    31,    32,    -1,    -1,  1075,  1076,    -1,
-     799,    39,   801,    -1,    -1,    -1,    -1,   806,   398,    -1,
-     809,    -1,   402,    -1,   813,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   252,    -1,    -1,    -1,    -1,   257,    67,
-      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,  1020,
-    1021,    -1,    -1,    -1,  1122,    83,    84,    -1,    -1,    -1,
-     252,    -1,    -1,    -1,    -1,   257,    -1,    -1,    -1,  1040,
-      -1,    -1,  1017,  1018,    -1,  1020,  1021,    -1,  1146,    -1,
-      -1,   109,    -1,   111,    -1,   874,    -1,    -1,    -1,   117,
-     118,    -1,    -1,    -1,    -1,  1040,    -1,    -1,    -1,   479,
-      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
-      -1,    -1,    -1,    -1,    -1,   904,    -1,    -1,    -1,    -1,
-      -1,  1189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1075,  1076,   351,    -1,    39,    -1,    -1,  1377,    -1,  1207,
-      -1,    -1,    -1,  1211,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1223,    -1,  1225,    -1,   351,
-      -1,  1229,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
-      75,    76,    -1,    -1,    -1,    26,    27,    28,    83,    84,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1255,    -1,    -1,
-     570,   571,    -1,    -1,    -1,  1263,  1264,  1265,    -1,   418,
-      -1,  1146,    -1,    -1,   109,    -1,  1274,  1275,    -1,    -1,
-      -1,    -1,   117,   118,   433,    -1,    -1,  1188,  1189,   438,
-    1288,    -1,    -1,    -1,    -1,    -1,   418,   446,  1017,  1018,
-      -1,  1020,  1021,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1211,   433,    -1,    -1,  1189,   464,   438,    -1,    99,    -1,
-     101,  1040,    -1,  1321,   446,    -1,    -1,    -1,  1229,  1327,
-      -1,    -1,    -1,   482,    -1,   484,  1211,    -1,    -1,    -1,
-      -1,    -1,   464,    -1,    -1,   126,    -1,   657,  1223,    -1,
-    1225,   661,    -1,    -1,    -1,    -1,  1075,  1076,    -1,    -1,
-     482,    -1,   484,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1274,  1275,    -1,    -1,   526,    -1,    -1,
-    1255,    -1,  1283,    -1,    -1,    -1,    -1,  1288,  1263,  1264,
-    1265,    -1,    -1,    -1,    -1,    -1,  1394,    -1,    -1,  1274,
-    1275,   182,    -1,    -1,   526,    -1,    -1,    -1,    -1,   190,
-      -1,   192,   193,  1288,    -1,    -1,   197,    -1,   199,   200,
-    1321,  1419,    -1,    53,    -1,    55,    -1,  1146,    58,    59,
-      60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   590,    -1,  1441,    -1,    -1,    -1,    77,    -1,    -1,
-    1448,    -1,  1327,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    -1,    -1,    -1,    26,    27,    28,    -1,   590,    -1,
-    1189,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
-      14,    -1,    -1,   793,    -1,   634,   635,   636,   269,    -1,
-      -1,    -1,  1211,  1394,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1499,    -1,   652,  1223,    39,  1225,    -1,  1506,    -1,
-      -1,    -1,   634,   635,   636,    -1,    -1,    -1,  1419,  1394,
-      -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     652,    -1,   681,    67,    -1,    -1,  1255,    99,    72,   101,
-    1441,    -1,    76,    -1,  1263,  1264,  1265,  1448,   670,    83,
-      84,    -1,    -1,    -1,    -1,  1274,  1275,    -1,   707,   681,
-      -1,   710,    -1,    -1,    -1,    -1,  1441,    -1,    -1,  1288,
-      -1,    -1,    -1,  1448,    -1,   109,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   117,   118,   707,    -1,    -1,   710,    10,
-      11,    12,    13,    14,    -1,    -1,   745,    -1,  1499,    -1,
-      -1,   911,    -1,    -1,    -1,    -1,    -1,    -1,  1327,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
-     182,    -1,    -1,   745,  1499,    -1,    -1,    -1,    -1,    -1,
-     192,   193,    -1,    -1,    -1,   197,    -1,   199,   200,    -1,
-     789,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
-     799,    72,   801,    74,    75,    76,    -1,   806,    -1,    -1,
-     809,    -1,    83,    84,   813,    -1,    -1,   789,    -1,    10,
-      11,    12,    13,    14,    -1,  1394,    -1,   799,   988,   801,
-      -1,    -1,    -1,    -1,   806,    -1,    -1,   809,   109,    -1,
-     111,   813,    -1,    -1,    -1,  1005,   117,   118,    39,    -1,
-      -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   344,    -1,   346,    -1,    -1,    -1,
-      -1,    -1,  1441,    -1,    -1,   874,    67,   357,   358,  1448,
-      39,    72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,
-      -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   874,    -1,    -1,   904,    -1,    -1,    67,    -1,
-      -1,    -1,    -1,    72,    -1,    74,    75,    76,   109,    -1,
-     111,    -1,    -1,  1083,    83,    84,   117,   118,    -1,    -1,
-    1499,    -1,   904,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   574,   575,    -1,    -1,    -1,    -1,    -1,
-     109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,
-      -1,    -1,    -1,  1123,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   603,    -1,    -1,   606,   607,    -1,   609,    -1,
-     611,   612,    -1,    -1,    -1,   616,   617,     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,    30,    31,    32,    33,  1017,  1018,
-      36,  1020,  1021,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    30,    31,    32,    -1,    -1,    -1,  1516,    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,
-      -1,  1040,    -1,    -1,    -1,  1017,  1018,    -1,  1020,  1021,
-      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
-      -1,    -1,    78,    -1,    -1,    -1,     7,    -1,  1040,    10,
-      11,    12,    13,    14,    -1,    -1,  1075,  1076,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,   116,   117,
+     118,   119,   120,   121,   122,     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,   116,   117,   118,
+     119,   120,   121,   122,     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,   116,   117,   118,   119,
+     120,   121,   122,     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,   111,    37,    38,    39,    40,
-      -1,   117,   118,  1075,  1076,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   754,   755,    66,    67,    -1,    -1,    -1,
-      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,  1146,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   574,   575,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    -1,    -1,    -1,  1146,    -1,   117,   118,   119,   120,
-     121,   122,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1189,   603,    -1,    -1,   606,   607,    -1,   609,    -1,   611,
-     612,    -1,    -1,    -1,   616,   617,    -1,    -1,    -1,    -1,
-      -1,    -1,  1211,    -1,    -1,    -1,    -1,  1189,    -1,   699,
-      -1,   701,    -1,    -1,  1223,    -1,  1225,    -1,   708,   709,
-      -1,    -1,    -1,   713,    -1,    -1,    -1,    -1,    -1,  1211,
-      -1,    -1,    -1,    -1,    -1,   725,    -1,    -1,    -1,    -1,
-     730,  1223,    -1,  1225,    -1,    -1,  1255,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1263,  1264,  1265,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1274,  1275,    -1,   758,    -1,
-     911,    -1,    -1,  1255,    -1,   916,    -1,    -1,    -1,  1288,
-      -1,  1263,  1264,  1265,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1274,  1275,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1288,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1327,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      49,    -1,   754,   755,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1327,    -1,    66,    -1,    -1,
-       7,    -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   857,   858,   859,
-     860,    -1,   862,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      37,    38,    39,    40,    -1,  1394,    -1,   877,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,   118,
-      -1,   891,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
-      67,    -1,  1394,    -1,    -1,    72,    -1,    -1,    -1,    76,
-      -1,    -1,    79,    80,    81,    82,    83,    84,   147,    86,
-      87,    -1,  1441,    -1,    -1,    -1,  1077,    -1,   157,  1448,
-      -1,   931,   161,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,  1441,
-     117,   118,   119,   120,   121,   122,  1448,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,   976,    30,    31,    32,
-    1499,   210,   982,    -1,   916,    -1,    39,   987,    -1,    -1,
-      -1,    -1,   992,   222,   994,    -1,    -1,    -1,   998,    -1,
-    1000,  1001,    -1,    -1,  1004,    -1,    -1,  1499,    -1,    -1,
-      -1,   240,    -1,  1013,    67,    -1,    -1,    -1,    -1,    -1,
-      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1031,  1032,    -1,    -1,    -1,   265,    -1,    -1,    -1,
-      -1,    -1,    -1,   272,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1206,    -1,    -1,  1058,    -1,
-      -1,  1061,    -1,    -1,   117,   118,   295,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,    -1,
-      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    76,    -1,    78,    -1,    80,    -1,
-      -1,    -1,    -1,    -1,  1104,    87,    -1,    -1,    -1,    -1,
-    1110,  1111,    -1,    -1,    -1,    -1,   345,    -1,    -1,    -1,
-      -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1130,    -1,    -1,  1133,    -1,    -1,   118,  1137,   120,   121,
-     122,    -1,    -1,    -1,    -1,  1077,    -1,    -1,    -1,    -1,
-    1150,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1163,    -1,  1165,  1166,  1167,  1168,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   161,
-      -1,  1181,    -1,  1183,    -1,    -1,    -1,  1187,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   426,   427,    -1,
-      -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1216,  1217,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   454,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     222,    -1,   224,   225,   226,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   482,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   494,  1266,  1267,    -1,    -1,
-      -1,    -1,    -1,    -1,  1206,    -1,  1276,   506,   260,   508,
-      -1,    -1,   511,   265,   513,   514,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   526,   280,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -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,    28,    -1,    30,    31,    32,  1337,    -1,  1339,
-    1340,  1341,    -1,    39,    -1,    -1,   328,    -1,    -1,   578,
-      -1,  1351,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1360,   590,    -1,    -1,    -1,   594,    -1,    -1,   350,    -1,
-      -1,    67,    -1,   355,   356,    -1,    72,    -1,    74,    75,
-      76,   363,    78,    -1,    -1,  1385,    -1,    83,    84,    -1,
-      -1,   620,    -1,    -1,   147,    -1,   625,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   157,   634,   635,   636,    -1,    44,
-      -1,    -1,    -1,   109,    -1,   111,   169,   170,    -1,    -1,
-      -1,   117,   118,   652,   406,    -1,    -1,    -1,  1428,  1429,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1441,   424,    -1,    -1,    -1,    -1,   429,  1448,   431,
-      37,    38,    -1,    40,    -1,   684,    -1,    92,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   448,   102,    -1,   451,
-     452,    -1,    -1,    -1,    -1,    -1,    -1,   459,    -1,    66,
-    1480,   710,    -1,   712,  1484,    72,    -1,   240,    -1,    76,
-      -1,   473,    79,    80,    81,    82,    83,    84,   480,    86,
-      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   264,  1512,    -1,  1514,    -1,   745,    -1,    -1,    -1,
-      -1,    -1,   109,   158,   111,    -1,    -1,   114,    -1,    -1,
-     117,   118,   119,   120,   121,   122,    -1,   172,    -1,    -1,
-      -1,    -1,  1542,  1543,    -1,    -1,    -1,    -1,    -1,    -1,
-    1550,  1551,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     195,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   801,    -1,   209,    -1,   805,    -1,    -1,    -1,
-     809,    -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,   594,    -1,    -1,    -1,    -1,    -1,   253,    -1,
-      -1,    -1,    -1,   258,    -1,    -1,    -1,   380,    -1,    -1,
-      -1,    -1,    -1,    66,    -1,    -1,   271,    -1,    -1,    72,
-     622,    -1,   277,    76,   279,   627,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
-      -1,   296,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   904,   109,    -1,   111,    -1,
-      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,   122,
-     919,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   338,    -1,    -1,    -1,    -1,   343,    -1,
-      -1,    -1,    -1,    -1,   943,    -1,   698,    -1,    -1,    -1,
-      -1,   474,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     712,    -1,    -1,    -1,    -1,    -1,    -1,   372,    -1,    -1,
-      -1,   376,   377,    -1,   379,    -1,    -1,    -1,    -1,    -1,
-     732,   386,   387,    -1,   389,   390,    -1,   392,    -1,   394,
-     513,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     999,    -1,    -1,   526,    -1,    -1,   411,    -1,   531,    -1,
-      -1,   534,    -1,    -1,   419,    -1,    -1,    -1,    -1,    -1,
-      -1,  1020,  1021,   546,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   444,
-      -1,   793,    -1,    -1,    -1,   568,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   805,    -1,   578,    -1,    -1,    -1,    -1,
-      -1,    -1,   585,    -1,    -1,   470,    -1,   590,    -1,    -1,
-      -1,   476,   824,    -1,    -1,    -1,   481,    -1,    -1,    -1,
-      -1,  1080,    -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,   517,    30,    31,    32,   639,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,   647,    -1,    -1,   532,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1146,    -1,    -1,
-      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    37,    38,   570,    40,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   579,    -1,    -1,    -1,    -1,    -1,
-      -1,   586,    -1,    -1,    -1,   937,    -1,   592,    -1,  1188,
-      -1,    -1,    66,    -1,   111,    -1,   601,    -1,    72,    -1,
-     117,   118,    76,    -1,    -1,    79,    80,    81,    82,    83,
-      84,    -1,    86,    87,    -1,   967,    -1,    -1,    -1,    -1,
-      -1,    -1,   745,    -1,   747,    -1,  1225,    -1,    -1,   156,
-     157,    -1,    -1,    -1,   757,   109,   641,   111,    -1,    -1,
-     763,    -1,    -1,   117,   118,   119,   120,   121,   122,    -1,
-    1002,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1013,    -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,
-     197,    -1,   677,    -1,    -1,  1274,  1275,    -1,    -1,    -1,
-     685,    -1,   805,   806,  1283,    -1,   809,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   283,
-     823,   285,   286,    -1,    -1,    -1,    -1,    -1,    -1,   293,
-     294,   716,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   726,   727,   307,   308,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1085,    -1,    -1,    -1,    -1,    -1,    -1,
-     863,    -1,   269,    -1,   867,    -1,    -1,  1099,    -1,    -1,
-      -1,    -1,    -1,    -1,   759,    -1,    -1,    -1,    -1,   764,
-      -1,   345,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,   904,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
-      -1,    39,    40,    -1,    -1,  1394,   323,   381,    -1,    -1,
-      -1,    -1,    -1,    -1,   331,   332,    -1,   334,   335,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   345,    67,
-     943,    -1,   349,   828,    -1,    -1,    74,    75,    -1,    -1,
-     835,    -1,    -1,    -1,    -1,    -1,  1188,    -1,    -1,    -1,
-      -1,   368,    -1,   848,   371,   850,    -1,    -1,   971,    -1,
-      -1,  1450,    -1,  1452,   977,    -1,    -1,    -1,   981,   864,
-      -1,    -1,    -1,   111,    -1,   870,    -1,   115,    -1,   117,
-     118,   398,    -1,    -1,    -1,   402,    -1,   882,    -1,  1002,
-     885,    -1,    -1,    -1,    -1,    -1,    -1,  1486,    -1,  1488,
-    1013,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,
-      -1,    -1,  1035,    -1,  1037,    -1,  1515,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1052,
-    1053,  1283,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-    1073,    -1,   479,    -1,    -1,   482,    -1,   962,    -1,    -1,
-      -1,    39,    -1,    -1,    -1,   549,   550,   551,   552,   553,
-     554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
-     564,   565,   566,    -1,    -1,    -1,    -1,    37,    38,    67,
-      40,    -1,   997,    -1,   521,    -1,    -1,    -1,   525,   526,
-      -1,    -1,    -1,    -1,    -1,  1128,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
-      -1,    -1,    72,  1146,    -1,    -1,    76,    -1,    -1,    79,
-      80,    81,    82,    83,    84,    -1,    86,    87,  1161,  1162,
-      -1,    -1,    -1,   570,   571,    -1,    -1,    -1,    -1,    -1,
-    1055,    -1,    -1,    -1,    -1,    -1,  1061,    -1,    -1,   109,
-      -1,   111,   589,   590,   114,    -1,    -1,   117,   118,   119,
-     120,   121,   122,   600,    -1,   602,   603,    -1,    -1,    -1,
-      -1,    -1,   609,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1095,    -1,   619,   620,    -1,  1100,    -1,    -1,   625,    -1,
-      -1,    -1,    -1,  1108,    -1,    -1,    -1,   634,   635,   636,
-      -1,   695,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   652,    -1,    -1,    -1,    -1,
-     657,   658,    -1,    -1,   661,   662,  1141,    -1,    -1,    -1,
-      -1,   668,    -1,    -1,    -1,    -1,    -1,    -1,  1153,    -1,
-      -1,  1156,    -1,  1158,    -1,    -1,    -1,    -1,    -1,    -1,
-     687,    -1,    -1,    -1,    -1,    -1,    -1,  1172,  1173,    -1,
-      -1,    -1,   756,    -1,    -1,    -1,    -1,    -1,  1530,  1302,
-      -1,    -1,  1305,   710,   711,    -1,    -1,    -1,    -1,  1194,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   786,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   744,   745,    -1,
-      -1,    -1,   749,   750,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1241,    -1,    -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,    -1,   793,    -1,    -1,    -1,
-      39,    -1,    -1,    -1,   801,    -1,    -1,    -1,    -1,    -1,
-      -1,   808,   809,    -1,    -1,   812,    -1,   814,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   824,    67,    -1,
-      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    78,
-      -1,  1316,    -1,  1318,    83,    84,    -1,    -1,    -1,    -1,
-      -1,    -1,   906,    -1,    -1,  1330,    -1,  1332,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,    -1,  1349,    -1,    -1,    -1,   117,   118,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1365,  1366,    -1,    -1,    -1,    -1,    -1,   951,    -1,   896,
-      -1,  1376,    -1,    -1,  1379,    -1,   903,   904,   905,    -1,
-     907,    -1,    -1,    -1,   911,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1515,    -1,    -1,  1400,    -1,    -1,    -1,    -1,
-      -1,    -1,   986,    -1,  1409,   932,   933,  1412,    -1,  1414,
-    1415,  1416,    -1,    -1,    -1,   999,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    -1,    -1,    -1,    -1,    -1,
-     967,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,  1454,
-      -1,  1456,    -1,  1458,    -1,    -1,  1040,    -1,    -1,    -1,
-      -1,   988,   989,    -1,    -1,    -1,    -1,    -1,  1473,    -1,
-      -1,    -1,   999,    67,    -1,    -1,    -1,    -1,  1005,  1006,
-      -1,  1008,  1009,  1010,    78,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1020,  1021,    -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,
-      26,    27,    -1,  1117,    30,    31,    32,    33,    -1,    -1,
-      36,    37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1083,    -1,  1085,    -1,
-      -1,    -1,    -1,  1090,    -1,    -1,    -1,    -1,    -1,    -1,
-      66,    67,  1099,    69,    -1,    71,    72,    -1,    74,    75,
-      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,  1177,  1178,  1122,  1123,  1124,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,  1146,
-      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   132,    -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,    41,    -1,    43,    -1,
-    1207,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
-      -1,    -1,    57,    -1,    -1,    -1,    61,    62,  1225,    64,
-      -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,  1274,  1275,   114,
-      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
-      -1,    -1,   127,    -1,    -1,    -1,    -1,   132,    -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,  1382,    30,
-      31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
-      -1,    -1,    -1,    -1,  1398,    -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,  1394,    -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,  1468,  1469,   117,   118,   119,   120,
-     121,   122,    -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,
-      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    -1,    -1,  1481,    66,    67,    -1,    69,    -1,
-      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,  1505,  1506,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    78,    -1,  1530,    -1,   116,   117,   118,   119,   120,
+     111,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
      121,   122,     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,
+      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,    67,    -1,    -1,    -1,
-      -1,    72,    -1,    74,    75,    -1,    -1,   109,    -1,   111,
-      -1,    -1,    83,    84,   116,   117,   118,   119,   120,   121,
+      -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,   117,   118,   119,   120,   121,
      122,     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,    -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,    67,    -1,    -1,    -1,    -1,
-      -1,    -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,
-      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,   122,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
        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,
+      -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,   109,    -1,   111,    -1,    -1,
+      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,     0,
+      -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,    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,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,   117,   118,     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,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
+     115,    -1,   117,   118,     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,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
+       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,    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,   117,   118,   119,   120,   121,   122,     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,    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,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
+      -1,    -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,     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,    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,
-      -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,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,     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,   109,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,   117,   118,   119,   120,   121,   122,     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,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-     117,   118,   119,   120,   121,   122,     0,    -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,    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,    -1,    -1,   109,    -1,   111,    -1,    -1,
-      -1,    -1,    -1,   117,   118,     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,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,    -1,   111,    -1,    -1,    -1,   115,    -1,   117,
-     118,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      67,    -1,    69,    -1,    71,    -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,    33,    -1,    -1,    36,    -1,    -1,    39,    40,    -1,
+      32,    -1,    -1,    -1,   111,    -1,    -1,    39,    -1,    -1,
+     117,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -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,
+      -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,   117,   118,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      -1,    -1,    -1,    -1,    -1,   117,   118,     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,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      67,    -1,    69,    -1,    71,    -1,    39,    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,    67,    -1,    30,    31,    32,    -1,
+      -1,    74,    75,   110,   111,    39,    -1,    -1,    -1,    -1,
+     117,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    67,    -1,    69,   109,    71,   111,    -1,
+      74,    75,    -1,    -1,   117,   118,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,
+      -1,    -1,    -1,   117,   118,     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,    33,    -1,    -1,
-      36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    67,    -1,
+      69,    -1,    71,    39,    40,    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,    -1,    -1,    74,    75,
+      -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
+       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,   111,    30,    31,    32,   115,
+      -1,   117,   118,    -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,    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,   117,   118,    -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,   111,    39,    -1,
+      -1,    -1,    -1,   117,   118,    -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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,   117,   118,     4,     5,     6,     7,
+      -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,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    67,
-      -1,    69,    -1,    71,    -1,    39,    74,    75,    -1,     4,
+     111,    39,    -1,    -1,    -1,    -1,   117,   118,    -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,    67,    -1,    30,    31,    32,    -1,    -1,
-      74,    75,   110,   111,    39,    -1,    -1,    -1,    -1,   117,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,   117,
      118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    69,   109,    71,   111,    -1,    74,
-      75,    -1,    -1,   117,   118,    -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,   117,   118,    -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,    -1,    -1,    -1,    -1,    -1,
-      -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,   117,   118,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,   111,    -1,    -1,   114,    -1,    -1,   117,   118,
+     119,   120,   121,   122,    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,    -1,    39,    -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,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
+      75,    76,    -1,   109,   110,   111,    -1,    -1,    83,    84,
+      -1,   117,   118,   119,   120,   121,   122,    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,   117,   118,    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,    -1,    39,    -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,    67,    -1,    -1,    -1,    -1,
+      72,    -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,
+      -1,    83,    84,    -1,   117,   118,   119,   120,   121,   122,
+      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,   117,   118,    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,    -1,
+      39,    40,    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,   117,   118,   119,
+     120,   121,   122,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,   111,    30,    31,    32,   115,    -1,   117,   118,
+      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,    -1,    39,    40,    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,
+     117,   118,   119,   120,   121,   122,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,   111,    30,    31,    32,   115,
+      -1,   117,   118,    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,    -1,   111,    74,    75,
+      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,     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,   111,    30,    31,    32,    -1,
+      -1,   117,   118,    -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,    -1,    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,    28,    67,    30,    31,    32,    -1,    72,
+     111,    74,    75,    76,    39,    -1,   117,   118,    -1,    -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,    -1,   111,    74,
+      75,    -1,    39,    78,   117,   118,    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,    -1,    -1,    -1,    39,   111,    74,    75,    -1,
+      -1,    -1,   117,   118,    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,   111,    -1,    -1,    -1,    -1,    -1,
+     117,   118,    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,   111,    74,    75,
+      -1,    39,    -1,   117,   118,    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,    -1,    -1,    -1,    39,   111,    74,    75,    -1,    -1,
+      -1,   117,   118,    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,   111,    -1,    -1,    -1,    -1,    -1,   117,
+     118,    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,   111,    74,    75,    -1,
+      39,    -1,   117,   118,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    67,    -1,
+      30,    31,    32,    -1,   111,    74,    75,    -1,    -1,    39,
+     117,   118,    -1,    -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,   117,   118,
+      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,    -1,    64,    -1,    66,
+     110,    -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,
+     117,   118,   119,   120,   121,   122,    -1,    -1,    37,    38,
+     127,    40,    41,    -1,    43,   132,    -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,   117,   118,
+     119,   120,   121,   122,    -1,    -1,    -1,    -1,   127,    -1,
+      -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,    -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,    40,    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,    -1,    -1,    74,    75,    -1,
-      -1,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,     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,   111,    30,    31,    32,   115,    -1,
-     117,   118,    -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,   111,    39,    -1,    -1,
-      -1,    -1,   117,   118,    -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,   111,
-      39,    -1,    -1,    -1,    -1,   117,   118,    -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,   111,    39,    -1,    -1,    -1,    -1,   117,   118,
-      -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,    -1,    -1,
-      30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,
-      40,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,   117,   118,    -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,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
-      -1,   111,    -1,    -1,   114,    -1,    -1,   117,   118,   119,
-     120,   121,   122,    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,    -1,    39,    -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,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,
-      76,    -1,   109,   110,   111,    -1,    -1,    83,    84,    -1,
-     117,   118,   119,   120,   121,   122,    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,   117,   118,    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,    -1,    39,    -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,    67,    -1,    -1,    -1,    -1,    72,
-      -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,
-      83,    84,    -1,   117,   118,   119,   120,   121,   122,    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,   117,   118,    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,    -1,    39,
-      40,    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,   117,   118,   119,   120,
-     121,   122,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,   111,    30,    31,    32,   115,    -1,   117,   118,    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,    -1,    39,    -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,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
-      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,
-     118,   119,   120,   121,   122,    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,
-     117,   118,    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,    -1,   111,    74,    75,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,     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,   111,    30,    31,    32,    -1,    -1,
-     117,   118,    -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,    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,   117,   118,    -1,    -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,   117,   118,    -1,    -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,    72,   111,    74,    75,    76,    39,
-      -1,   117,   118,    -1,    -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,    78,   117,
-     118,    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,    -1,    -1,   109,
-      39,   111,    74,    75,    -1,    -1,    78,   117,   118,    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,   111,
-      -1,    -1,    -1,    -1,    -1,   117,   118,    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,   111,    74,    75,    -1,    39,    -1,   117,   118,
-      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,    -1,    -1,    -1,    39,
-     111,    74,    75,    -1,    -1,    -1,   117,   118,    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,   111,    -1,
-      -1,    -1,    -1,    -1,   117,   118,    -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,    -1,    -1,   117,   118,     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,   111,
-      -1,    -1,    -1,    -1,    39,   117,   118,    -1,    -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,    37,    38,    -1,    40,    41,    -1,    43,    -1,    -1,
+      -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,    -1,    64,    -1,
-      66,    -1,    -1,    -1,    -1,   110,    72,    -1,    -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,
+      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,   117,   118,   119,   120,   121,   122,    -1,    -1,    37,
-      38,   127,    40,    41,    -1,    43,   132,    -1,    46,    47,
+      38,   127,    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,
@@ -3865,84 +3899,71 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,   117,
-     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,   127,
-      -1,    -1,    -1,    -1,   132,     4,     5,     6,     7,     8,
+     118,   119,   120,   121,   122,    -1,    -1,    37,    38,   127,
+      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,    37,    38,    -1,    40,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,   114,    -1,    -1,   117,   118,   119,
+     120,   121,   122,    66,    -1,    -1,    -1,   127,    -1,    72,
+      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
+      -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
+      -1,   114,    -1,    -1,   117,   118,   119,   120,   121,   122,
+      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,    37,    38,
+      -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,    -1,    37,    38,    -1,
+      40,   117,   118,   119,   120,   121,   122,    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,   111,    -1,    37,    38,    -1,    40,   117,   118,
+     119,   120,   121,   122,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    37,    38,    -1,    40,   117,   118,   119,
+     120,   121,   122,    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,
+      37,    38,    -1,    40,   117,   118,   119,   120,   121,   122,
+      -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,    37,
+      38,    -1,    40,   117,   118,   119,   120,   121,   122,    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,
+     117,   118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,
+     118,   119,   120,   121,   122,     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,   117,   118,   119,   120,   121,   122,    -1,    -1,
-      37,    38,   127,    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,
+      39,    -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,
-     117,   118,   119,   120,   121,   122,    -1,    -1,    37,    38,
-     127,    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,    37,    38,    -1,    40,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     109,    -1,   111,    -1,    -1,   114,    -1,    -1,   117,   118,
-     119,   120,   121,   122,    66,    -1,    -1,    -1,   127,    -1,
-      72,    -1,    74,    75,    76,    -1,    -1,    79,    80,    81,
-      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
-      -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
-      -1,   113,   114,    -1,    -1,   117,   118,   119,   120,   121,
-     122,    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,    37,
-      38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    37,    38,
-      -1,    40,   117,   118,   119,   120,   121,   122,    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,   111,    -1,    37,    38,    -1,    40,   117,
-     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,    -1,
-     109,    -1,    -1,    -1,    37,    38,    -1,    40,   117,   118,
-     119,   120,   121,   122,    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,    37,    38,    -1,    40,   117,   118,   119,   120,   121,
-     122,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
-      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,    -1,    -1,    -1,    -1,    -1,
-      -1,   117,   118,   119,   120,   121,   122,     4,     5,     6,
+      -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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      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,    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,
+      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,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
-      75,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      -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,
@@ -3951,15 +3972,5 @@
       -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,    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,    -1,    -1,    74,    75,    -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,    -1,    74,    75
+      -1,    -1,    74,    75
 };
 
@@ -3972,156 +3983,156 @@
       22,    23,    24,    25,    26,    27,    30,    31,    32,    33,
       36,    39,    40,    64,    67,    69,    71,    72,    74,    75,
-      76,    83,    84,   109,   111,   117,   118,   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,   119,   120,   121,
-     122,   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,   117,   149,   164,   217,   218,   224,
-     227,   231,   232,   237,   240,   241,   243,   262,   263,   267,
+      76,    83,    84,   109,   111,   117,   118,   137,   140,   150,
+     199,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   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,   150,   216,   218,   226,   228,   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,   200,   109,   150,   319,   324,
+     325,   326,   328,   329,   330,   112,   134,   111,   219,   226,
+     228,   323,   327,   366,   367,   370,   371,   135,   107,   131,
+     277,   114,   135,   174,    74,    75,   137,   272,   135,   135,
+     135,   116,   135,    74,    75,   109,   150,   309,   318,   319,
+     320,   321,   322,   323,   327,   331,   332,   333,   334,   335,
+     341,     3,    28,    78,   239,     3,     5,    74,   111,   150,
+     218,   229,   233,   235,   244,   285,   323,   327,   370,   216,
+     218,   228,   237,   241,   243,   284,   323,   327,    33,   234,
+     234,   229,   235,   135,   234,   229,   234,   229,    75,   109,
+     114,   274,   285,   114,   274,   234,   229,   116,   135,   135,
+       0,   134,   109,   174,   312,   312,   134,   111,   226,   228,
+     368,   272,   272,   131,   228,   109,   150,   309,   319,   323,
+     111,   150,   370,   306,   231,   314,   109,   290,   109,   109,
+      51,   109,    37,    38,    40,    66,    72,    76,    79,    80,
+      81,    82,    86,    87,   109,   111,   119,   120,   121,   122,
+     136,   140,   141,   142,   143,   144,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   165,   168,   226,   276,   292,   366,   371,   228,   110,
+     110,   110,   110,   110,   110,   110,    74,    75,   111,   226,
+     272,   350,   368,   111,   117,   150,   165,   218,   219,   225,
+     228,   232,   233,   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,
+     114,   150,   165,   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,   128,   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,
+     321,   322,   332,   333,   334,   335,   228,   318,   331,    64,
+     311,   111,   312,   349,   350,   312,   312,   174,   134,   109,
+     312,   349,   312,   312,   228,   309,   109,   109,   227,   228,
+     226,   228,   112,   134,   226,   366,   371,   174,   134,   272,
+     277,   218,   233,   323,   327,   174,   134,   294,   228,   237,
+     132,   228,   228,   292,   248,   246,   258,   274,   257,   228,
+     294,   132,   132,   305,   134,   139,   271,     3,   135,   208,
+     209,   223,   225,   228,   134,   311,   109,   311,   165,   319,
+     228,   109,   134,   272,   114,    33,    34,    35,   226,   286,
+     287,   289,   134,   128,   131,   291,   134,   229,   234,   235,
+     272,   315,   316,   317,   109,   141,   109,   149,   109,   149,
+     152,   109,   149,   109,   109,   149,   149,   111,   165,   170,
+     174,   226,   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,   117,
-     123,   124,   119,   120,    88,    89,    90,    91,   125,   126,
-      92,    93,   118,   127,   128,    94,    95,   129,   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,   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,   117,   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,   130,   275,   275,   275,
-     145,   164,   276,   275,   112,   134,   110,   116,   110,   109,
-     149,   349,   357,   358,   359,   360,   110,   116,   164,   111,
-     139,   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,   130,   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,   130,   116,   372,   278,
-     111,   130,   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,   130,   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,   130,
-     132,   111,   141,   200,   201,   202,   110,   116,   110,   110,
-     110,   110,   111,   164,   358,   359,   360,   227,   357,   312,
-     312,   114,   151,   167,   164,   165,   168,   116,   135,   134,
-     110,   116,   164,   134,   115,   162,   130,   264,   110,   110,
-     110,   345,   264,   110,   260,   225,   363,   111,   117,   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,   127,   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,   130,   163,   109,   110,   130,
-     116,   139,   112,   110,   110,   110,   357,   279,   116,   135,
-     168,   112,   139,   146,   147,   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,   117,   135,   164,   264,   264,   263,   267,
-     267,   268,   116,   116,   110,   110,   112,    96,   122,   135,
-     135,   146,   278,   164,   116,   132,   212,   216,   227,   231,
-     109,   109,   171,   109,   109,    72,   132,    72,   132,    72,
-     117,   170,   109,   173,   165,   165,   130,   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,   109,   349,   350,   372,   165,   112,   135,    85,   113,
-     116,   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,   130,   141,   110,   110,   130,   134,   115,   112,
-     111,   147,   111,   147,   147,   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,   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,   130,   163,   110,   135,   146,   146,
-     110,   110,   110,   110,   267,    42,   163,   179,   180,   310,
-     130,   134,   171,   181,   110,   132,   171,   132,   134,   110,
-     134,   110,   134,    96,   134,    96,   134,   132,   298,   141,
-     139,   204,   110,   132,   110,   135,   135,   171,    96,   116,
-     130,   135,   205,   206,   212,   132,   170,   170,   205,   173,
-     197,   225,   366,   173,   197,   110,   134,   110,   134,   115,
-     110,   116,   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
+     102,   103,   104,   105,   106,   107,   131,   167,   152,   152,
+     117,   123,   124,   119,   120,    88,    89,    90,    91,   125,
+     126,    92,    93,   118,   127,   128,    94,    95,   129,   131,
+     373,   109,   150,   345,   346,   347,   348,   349,   110,   116,
+     109,   349,   350,   109,   349,   350,   134,   109,   226,   368,
+     112,   134,   135,   111,   226,   228,   361,   362,   370,   371,
+     135,   109,   111,   150,   319,   336,   337,   338,   339,   340,
+     341,   342,   343,   344,   350,   351,   352,   353,   354,   355,
+     356,   150,   370,   228,   135,   135,   150,   226,   228,   363,
+     272,   226,   350,   363,   272,   109,   134,   134,   134,   112,
+     134,    72,   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,
+     208,   134,   309,   170,   276,   170,   276,   309,   111,   208,
+     311,   174,   134,   208,   110,    40,   111,   115,   226,   249,
+     250,   251,   366,   114,   116,   372,   131,   259,   114,   228,
+     264,   265,   266,   269,   270,   110,   116,   174,   134,   117,
+     165,   134,   225,   228,   263,   362,   370,   303,   304,   109,
+     150,   336,   110,   116,   373,   274,   286,   109,   114,   274,
+     276,   286,   110,   116,   109,   141,   110,   130,   275,   275,
+     275,   146,   165,   276,   275,   112,   134,   110,   116,   110,
+     109,   150,   349,   357,   358,   359,   360,   110,   116,   165,
+     111,   139,   145,   146,   134,   111,   139,   145,   165,   152,
+     152,   152,   153,   153,   154,   154,   155,   155,   155,   155,
+     156,   156,   157,   158,   159,   160,   161,   130,   170,   165,
+     134,   346,   347,   348,   228,   345,   312,   312,   165,   276,
+     134,   271,   134,   226,   350,   363,   228,   232,   112,   112,
+     134,   370,   112,   109,   134,   319,   337,   338,   339,   342,
+     352,   353,   354,   112,   134,   228,   336,   340,   351,   109,
+     312,   355,   373,   312,   312,   373,   109,   312,   355,   312,
+     312,   312,   312,   350,   226,   361,   371,   272,   112,   116,
+     112,   116,   373,   226,   363,   373,   260,   261,   262,   263,
+     260,   260,   272,   165,   134,   111,   274,   130,   116,   372,
+     278,   111,   130,   282,    29,   210,   211,   272,   260,   139,
+     309,   139,   311,   109,   349,   350,   109,   349,   350,   142,
+     350,   174,   264,   110,   110,   110,   110,   112,   174,   208,
+     174,   114,   250,   251,   112,   134,   109,   130,   150,   252,
+     254,   318,   319,   331,   357,   116,   132,   116,   132,   274,
+     248,   274,   115,   163,   164,   258,   135,   135,   139,   223,
+     135,   135,   260,   109,   150,   370,   135,   115,   228,   287,
+     288,   135,   134,   134,   109,   135,   110,   316,   170,   171,
+     130,   132,   111,   141,   201,   202,   203,   110,   116,   110,
+     110,   110,   110,   111,   165,   358,   359,   360,   228,   357,
+     312,   312,   114,   152,   168,   165,   166,   169,   116,   135,
+     134,   110,   116,   165,   134,   115,   163,   130,   264,   110,
+     110,   110,   345,   264,   110,   260,   226,   363,   111,   117,
+     150,   165,   165,   228,   342,   264,   110,   110,   110,   110,
+     110,   110,   110,     7,   228,   336,   340,   351,   134,   134,
+     373,   134,   134,   110,   135,   135,   135,   135,   277,   135,
+     163,   164,   165,   310,   134,   278,   280,   115,   134,   212,
+     274,    40,    41,    43,    46,    47,    48,    49,    50,    51,
+      52,    53,    57,    61,    62,    72,   111,   127,   171,   172,
+     173,   174,   175,   176,   178,   179,   191,   193,   194,   199,
+     213,   308,    29,   135,   131,   277,   134,   134,   110,   135,
+     174,   248,   132,   132,   319,   164,   228,   253,   254,   253,
+     274,   312,   115,   259,   372,   110,   116,   112,   112,   135,
+     228,   116,   373,   290,   110,   286,   216,   218,   226,   298,
+     299,   300,   301,   292,   110,   110,   130,   164,   109,   110,
+     130,   116,   139,   112,   110,   110,   110,   357,   279,   116,
+     135,   169,   112,   139,   147,   148,   146,   135,   147,   163,
+     168,   135,   109,   349,   350,   135,   135,   134,   135,   135,
+     135,   165,   110,   135,   109,   349,   350,   109,   355,   109,
+     355,   350,   227,     7,   117,   135,   165,   264,   264,   263,
+     267,   267,   268,   116,   116,   110,   110,   112,    96,   122,
+     135,   135,   147,   278,   165,   116,   132,   213,   217,   228,
+     232,   109,   109,   172,   109,   109,    72,   132,    72,   132,
+      72,   117,   171,   109,   174,   166,   166,   130,   112,   144,
+     132,   135,   134,   135,   212,   110,   165,   264,   264,   312,
+     110,   115,   252,   115,   134,   110,   134,   135,   309,   115,
+     134,   135,   135,   110,   114,   201,   112,   164,   132,   201,
+     203,   110,   109,   349,   350,   372,   166,   112,   135,    85,
+     113,   116,   135,   112,   135,   110,   134,   110,   110,   112,
+     112,   112,   135,   110,   134,   134,   134,   165,   165,   135,
+     112,   135,   135,   135,   135,   134,   134,   164,   164,   112,
+     112,   135,   135,   274,   228,   170,   170,    47,   170,   134,
+     132,   132,   132,   170,   132,   170,    58,    59,    60,   195,
+     196,   197,   132,    63,   132,   312,   114,   176,   115,   132,
+     135,   135,    96,   269,   270,   110,   299,   116,   132,   116,
+     132,   115,   297,   130,   141,   110,   110,   130,   134,   115,
+     112,   111,   148,   111,   148,   148,   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,   171,   192,   213,   132,   110,   109,   109,   174,   197,
+      58,    59,   165,   172,   145,   110,   110,   114,   134,   134,
+     298,   141,   204,   109,   132,   204,   264,   134,   134,   135,
+     135,   135,   135,   112,   112,   134,   135,   112,   172,    44,
+      45,   114,   182,   183,   184,   170,   172,   135,   110,   171,
+     114,   184,    96,   134,    96,   134,   109,   109,   132,   115,
+     134,   272,   309,   115,   116,   130,   164,   110,   135,   147,
+     147,   110,   110,   110,   110,   267,    42,   164,   180,   181,
+     310,   130,   134,   172,   182,   110,   132,   172,   132,   134,
+     110,   134,   110,   134,    96,   134,    96,   134,   132,   298,
+     141,   139,   205,   110,   132,   110,   135,   135,   172,    96,
+     116,   130,   135,   206,   207,   213,   132,   171,   171,   206,
+     174,   198,   226,   366,   174,   198,   110,   134,   110,   134,
+     115,   110,   116,   112,   112,   164,   180,   183,   185,   186,
+     134,   132,   183,   187,   188,   135,   109,   150,   309,   357,
+     139,   135,   174,   198,   174,   198,   109,   132,   139,   172,
+     177,   115,   183,   213,   171,    56,   177,   190,   115,   183,
+     110,   228,   110,   135,   135,   292,   172,   177,   132,   189,
+     190,   177,   190,   174,   174,   110,   110,   110,   189,   135,
+     135,   174,   174,   135,   135
 };
 
@@ -4960,227 +4971,230 @@
 
 /* Line 1806 of yacc.c  */
-#line 299 "parser.yy"
+#line 300 "parser.yy"
+    { typedefTable.enterScope(); }
+    break;
+
+  case 3:
+
+/* Line 1806 of yacc.c  */
+#line 304 "parser.yy"
+    { typedefTable.leaveScope(); }
+    break;
+
+  case 4:
+
+/* Line 1806 of yacc.c  */
+#line 311 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
+    break;
+
+  case 5:
+
+/* Line 1806 of yacc.c  */
+#line 312 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
+    break;
+
+  case 6:
+
+/* Line 1806 of yacc.c  */
+#line 313 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
+    break;
+
+  case 16:
+
+/* Line 1806 of yacc.c  */
+#line 338 "parser.yy"
+    { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].str) ); }
+    break;
+
+  case 17:
+
+/* Line 1806 of yacc.c  */
+#line 342 "parser.yy"
+    { (yyval.str) = (yyvsp[(1) - (1)].tok); }
+    break;
+
+  case 18:
+
+/* Line 1806 of yacc.c  */
+#line 344 "parser.yy"
     {
-			typedefTable.enterScope();
+			appendStr( (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].tok) );						// append 2nd juxtaposed string to 1st
+			delete (yyvsp[(2) - (2)].tok);									// allocated by lexer
+			(yyval.str) = (yyvsp[(1) - (2)].str);									// conversion from tok to str
 		}
     break;
 
-  case 3:
-
-/* Line 1806 of yacc.c  */
-#line 305 "parser.yy"
-    {
-			typedefTable.leaveScope();
-		}
-    break;
-
-  case 4:
-
-/* Line 1806 of yacc.c  */
-#line 314 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
-    break;
-
-  case 5:
-
-/* Line 1806 of yacc.c  */
-#line 315 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
-    break;
-
-  case 6:
-
-/* Line 1806 of yacc.c  */
-#line 316 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
-    break;
-
-  case 16:
-
-/* Line 1806 of yacc.c  */
-#line 341 "parser.yy"
-    { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 17:
-
-/* Line 1806 of yacc.c  */
-#line 343 "parser.yy"
-    {
-			appendStr( (yyvsp[(1) - (2)].constant)->get_constant()->get_value(), (yyvsp[(2) - (2)].tok) );
-			delete (yyvsp[(2) - (2)].tok);									// allocated by lexer
-			(yyval.constant) = (yyvsp[(1) - (2)].constant);
-		}
-    break;
-
-  case 18:
-
-/* Line 1806 of yacc.c  */
-#line 354 "parser.yy"
+  case 19:
+
+/* Line 1806 of yacc.c  */
+#line 355 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
-  case 19:
-
-/* Line 1806 of yacc.c  */
-#line 356 "parser.yy"
+  case 20:
+
+/* Line 1806 of yacc.c  */
+#line 357 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
-  case 20:
-
-/* Line 1806 of yacc.c  */
-#line 358 "parser.yy"
+  case 21:
+
+/* Line 1806 of yacc.c  */
+#line 359 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
 
-  case 21:
-
-/* Line 1806 of yacc.c  */
-#line 360 "parser.yy"
+  case 22:
+
+/* Line 1806 of yacc.c  */
+#line 361 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); }
     break;
 
-  case 23:
-
-/* Line 1806 of yacc.c  */
-#line 370 "parser.yy"
+  case 24:
+
+/* Line 1806 of yacc.c  */
+#line 371 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
 
-  case 24:
-
-/* Line 1806 of yacc.c  */
-#line 372 "parser.yy"
+  case 25:
+
+/* Line 1806 of yacc.c  */
+#line 373 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
 
-  case 25:
-
-/* Line 1806 of yacc.c  */
-#line 376 "parser.yy"
+  case 26:
+
+/* Line 1806 of yacc.c  */
+#line 377 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
-  case 27:
-
-/* Line 1806 of yacc.c  */
-#line 379 "parser.yy"
+  case 28:
+
+/* Line 1806 of yacc.c  */
+#line 380 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
-  case 29:
-
-/* Line 1806 of yacc.c  */
-#line 382 "parser.yy"
+  case 30:
+
+/* Line 1806 of yacc.c  */
+#line 383 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
 
-  case 30:
-
-/* Line 1806 of yacc.c  */
-#line 384 "parser.yy"
+  case 31:
+
+/* Line 1806 of yacc.c  */
+#line 385 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
 
-  case 31:
-
-/* Line 1806 of yacc.c  */
-#line 386 "parser.yy"
+  case 32:
+
+/* Line 1806 of yacc.c  */
+#line 387 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
     break;
 
-  case 32:
-
-/* Line 1806 of yacc.c  */
-#line 388 "parser.yy"
+  case 33:
+
+/* Line 1806 of yacc.c  */
+#line 389 "parser.yy"
     {
 			Token fn;
 			fn.str = new std::string( "?{}" ); // location undefined
-			(yyval.en) = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) ) );
+			(yyval.en) = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_last( (yyvsp[(3) - (4)].en) ) ) );
 		}
     break;
 
-  case 34:
-
-/* Line 1806 of yacc.c  */
-#line 398 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
-    break;
-
   case 35:
 
 /* Line 1806 of yacc.c  */
-#line 403 "parser.yy"
+#line 399 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
+    break;
+
+  case 36:
+
+/* Line 1806 of yacc.c  */
+#line 404 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 38:
-
-/* Line 1806 of yacc.c  */
-#line 409 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
-    break;
-
   case 39:
 
 /* Line 1806 of yacc.c  */
-#line 414 "parser.yy"
+#line 410 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
+    break;
+
+  case 40:
+
+/* Line 1806 of yacc.c  */
+#line 415 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
-  case 40:
-
-/* Line 1806 of yacc.c  */
-#line 418 "parser.yy"
+  case 41:
+
+/* Line 1806 of yacc.c  */
+#line 419 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
-  case 41:
-
-/* Line 1806 of yacc.c  */
-#line 420 "parser.yy"
+  case 42:
+
+/* Line 1806 of yacc.c  */
+#line 421 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
 
-  case 42:
-
-/* Line 1806 of yacc.c  */
-#line 422 "parser.yy"
+  case 43:
+
+/* Line 1806 of yacc.c  */
+#line 423 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
-  case 43:
-
-/* Line 1806 of yacc.c  */
-#line 424 "parser.yy"
+  case 44:
+
+/* Line 1806 of yacc.c  */
+#line 425 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
 
-  case 45:
-
-/* Line 1806 of yacc.c  */
-#line 432 "parser.yy"
+  case 46:
+
+/* Line 1806 of yacc.c  */
+#line 433 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
-  case 46:
-
-/* Line 1806 of yacc.c  */
-#line 434 "parser.yy"
+  case 47:
+
+/* Line 1806 of yacc.c  */
+#line 435 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
 
-  case 47:
-
-/* Line 1806 of yacc.c  */
-#line 436 "parser.yy"
+  case 48:
+
+/* Line 1806 of yacc.c  */
+#line 437 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
 
-  case 48:
-
-/* Line 1806 of yacc.c  */
-#line 441 "parser.yy"
+  case 49:
+
+/* Line 1806 of yacc.c  */
+#line 442 "parser.yy"
     {
 			switch ( (yyvsp[(1) - (2)].op) ) {
@@ -5197,408 +5211,408 @@
     break;
 
-  case 49:
-
-/* Line 1806 of yacc.c  */
-#line 454 "parser.yy"
+  case 50:
+
+/* Line 1806 of yacc.c  */
+#line 455 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
     break;
 
-  case 50:
-
-/* Line 1806 of yacc.c  */
-#line 456 "parser.yy"
+  case 51:
+
+/* Line 1806 of yacc.c  */
+#line 457 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
     break;
 
-  case 51:
-
-/* Line 1806 of yacc.c  */
-#line 458 "parser.yy"
+  case 52:
+
+/* Line 1806 of yacc.c  */
+#line 459 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
     break;
 
-  case 52:
-
-/* Line 1806 of yacc.c  */
-#line 460 "parser.yy"
+  case 53:
+
+/* Line 1806 of yacc.c  */
+#line 461 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
-  case 53:
-
-/* Line 1806 of yacc.c  */
-#line 462 "parser.yy"
+  case 54:
+
+/* Line 1806 of yacc.c  */
+#line 463 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
 
-  case 54:
-
-/* Line 1806 of yacc.c  */
-#line 464 "parser.yy"
+  case 55:
+
+/* Line 1806 of yacc.c  */
+#line 465 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
-  case 55:
-
-/* Line 1806 of yacc.c  */
-#line 466 "parser.yy"
+  case 56:
+
+/* Line 1806 of yacc.c  */
+#line 467 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
 
-  case 56:
-
-/* Line 1806 of yacc.c  */
-#line 468 "parser.yy"
+  case 57:
+
+/* Line 1806 of yacc.c  */
+#line 469 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
 
-  case 57:
-
-/* Line 1806 of yacc.c  */
-#line 470 "parser.yy"
+  case 58:
+
+/* Line 1806 of yacc.c  */
+#line 471 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
     break;
 
-  case 58:
-
-/* Line 1806 of yacc.c  */
-#line 472 "parser.yy"
+  case 59:
+
+/* Line 1806 of yacc.c  */
+#line 473 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     break;
 
-  case 59:
-
-/* Line 1806 of yacc.c  */
-#line 474 "parser.yy"
+  case 60:
+
+/* Line 1806 of yacc.c  */
+#line 475 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
     break;
 
-  case 60:
-
-/* Line 1806 of yacc.c  */
-#line 480 "parser.yy"
+  case 61:
+
+/* Line 1806 of yacc.c  */
+#line 481 "parser.yy"
     { (yyval.op) = OperKinds::PointTo; }
     break;
 
-  case 61:
-
-/* Line 1806 of yacc.c  */
-#line 481 "parser.yy"
+  case 62:
+
+/* Line 1806 of yacc.c  */
+#line 482 "parser.yy"
     { (yyval.op) = OperKinds::AddressOf; }
     break;
 
-  case 62:
-
-/* Line 1806 of yacc.c  */
-#line 487 "parser.yy"
+  case 63:
+
+/* Line 1806 of yacc.c  */
+#line 488 "parser.yy"
     { (yyval.op) = OperKinds::UnPlus; }
     break;
 
-  case 63:
-
-/* Line 1806 of yacc.c  */
-#line 488 "parser.yy"
+  case 64:
+
+/* Line 1806 of yacc.c  */
+#line 489 "parser.yy"
     { (yyval.op) = OperKinds::UnMinus; }
     break;
 
-  case 64:
-
-/* Line 1806 of yacc.c  */
-#line 489 "parser.yy"
+  case 65:
+
+/* Line 1806 of yacc.c  */
+#line 490 "parser.yy"
     { (yyval.op) = OperKinds::Neg; }
     break;
 
-  case 65:
-
-/* Line 1806 of yacc.c  */
-#line 490 "parser.yy"
+  case 66:
+
+/* Line 1806 of yacc.c  */
+#line 491 "parser.yy"
     { (yyval.op) = OperKinds::BitNeg; }
     break;
 
-  case 67:
-
-/* Line 1806 of yacc.c  */
-#line 496 "parser.yy"
+  case 68:
+
+/* Line 1806 of yacc.c  */
+#line 497 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
-  case 68:
-
-/* Line 1806 of yacc.c  */
-#line 498 "parser.yy"
+  case 69:
+
+/* Line 1806 of yacc.c  */
+#line 499 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
-  case 70:
-
-/* Line 1806 of yacc.c  */
-#line 504 "parser.yy"
+  case 71:
+
+/* Line 1806 of yacc.c  */
+#line 505 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 71:
-
-/* Line 1806 of yacc.c  */
-#line 506 "parser.yy"
+  case 72:
+
+/* Line 1806 of yacc.c  */
+#line 507 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 72:
-
-/* Line 1806 of yacc.c  */
-#line 508 "parser.yy"
+  case 73:
+
+/* Line 1806 of yacc.c  */
+#line 509 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 74:
-
-/* Line 1806 of yacc.c  */
-#line 514 "parser.yy"
+  case 75:
+
+/* Line 1806 of yacc.c  */
+#line 515 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 75:
-
-/* Line 1806 of yacc.c  */
-#line 516 "parser.yy"
+  case 76:
+
+/* Line 1806 of yacc.c  */
+#line 517 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 77:
-
-/* Line 1806 of yacc.c  */
-#line 522 "parser.yy"
+  case 78:
+
+/* Line 1806 of yacc.c  */
+#line 523 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 78:
-
-/* Line 1806 of yacc.c  */
-#line 524 "parser.yy"
+  case 79:
+
+/* Line 1806 of yacc.c  */
+#line 525 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 80:
-
-/* Line 1806 of yacc.c  */
-#line 530 "parser.yy"
+  case 81:
+
+/* Line 1806 of yacc.c  */
+#line 531 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 81:
-
-/* Line 1806 of yacc.c  */
-#line 532 "parser.yy"
+  case 82:
+
+/* Line 1806 of yacc.c  */
+#line 533 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 82:
-
-/* Line 1806 of yacc.c  */
-#line 534 "parser.yy"
+  case 83:
+
+/* Line 1806 of yacc.c  */
+#line 535 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 83:
-
-/* Line 1806 of yacc.c  */
-#line 536 "parser.yy"
+  case 84:
+
+/* Line 1806 of yacc.c  */
+#line 537 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 85:
-
-/* Line 1806 of yacc.c  */
-#line 542 "parser.yy"
+  case 86:
+
+/* Line 1806 of yacc.c  */
+#line 543 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 86:
-
-/* Line 1806 of yacc.c  */
-#line 544 "parser.yy"
+  case 87:
+
+/* Line 1806 of yacc.c  */
+#line 545 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 88:
-
-/* Line 1806 of yacc.c  */
-#line 550 "parser.yy"
+  case 89:
+
+/* Line 1806 of yacc.c  */
+#line 551 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 90:
-
-/* Line 1806 of yacc.c  */
-#line 556 "parser.yy"
+  case 91:
+
+/* Line 1806 of yacc.c  */
+#line 557 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 92:
-
-/* Line 1806 of yacc.c  */
-#line 562 "parser.yy"
+  case 93:
+
+/* Line 1806 of yacc.c  */
+#line 563 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 94:
-
-/* Line 1806 of yacc.c  */
-#line 568 "parser.yy"
+  case 95:
+
+/* Line 1806 of yacc.c  */
+#line 569 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
     break;
 
-  case 96:
-
-/* Line 1806 of yacc.c  */
-#line 574 "parser.yy"
+  case 97:
+
+/* Line 1806 of yacc.c  */
+#line 575 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
     break;
 
-  case 98:
-
-/* Line 1806 of yacc.c  */
-#line 580 "parser.yy"
+  case 99:
+
+/* Line 1806 of yacc.c  */
+#line 581 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
 
-  case 99:
-
-/* Line 1806 of yacc.c  */
-#line 583 "parser.yy"
+  case 100:
+
+/* Line 1806 of yacc.c  */
+#line 584 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
-  case 100:
-
-/* Line 1806 of yacc.c  */
-#line 585 "parser.yy"
+  case 101:
+
+/* Line 1806 of yacc.c  */
+#line 586 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
 
-  case 103:
-
-/* Line 1806 of yacc.c  */
-#line 596 "parser.yy"
+  case 104:
+
+/* Line 1806 of yacc.c  */
+#line 597 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 104:
-
-/* Line 1806 of yacc.c  */
-#line 598 "parser.yy"
+  case 105:
+
+/* Line 1806 of yacc.c  */
+#line 599 "parser.yy"
     { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
     break;
 
-  case 105:
-
-/* Line 1806 of yacc.c  */
-#line 603 "parser.yy"
+  case 106:
+
+/* Line 1806 of yacc.c  */
+#line 604 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
 
-  case 107:
-
-/* Line 1806 of yacc.c  */
-#line 608 "parser.yy"
+  case 108:
+
+/* Line 1806 of yacc.c  */
+#line 609 "parser.yy"
     { (yyval.op) = OperKinds::Assign; }
     break;
 
-  case 108:
-
-/* Line 1806 of yacc.c  */
-#line 609 "parser.yy"
+  case 109:
+
+/* Line 1806 of yacc.c  */
+#line 610 "parser.yy"
+    { (yyval.op) = OperKinds::AtAssn; }
+    break;
+
+  case 110:
+
+/* Line 1806 of yacc.c  */
+#line 611 "parser.yy"
     { (yyval.op) = OperKinds::MulAssn; }
     break;
 
-  case 109:
-
-/* Line 1806 of yacc.c  */
-#line 610 "parser.yy"
+  case 111:
+
+/* Line 1806 of yacc.c  */
+#line 612 "parser.yy"
     { (yyval.op) = OperKinds::DivAssn; }
     break;
 
-  case 110:
-
-/* Line 1806 of yacc.c  */
-#line 611 "parser.yy"
+  case 112:
+
+/* Line 1806 of yacc.c  */
+#line 613 "parser.yy"
     { (yyval.op) = OperKinds::ModAssn; }
     break;
 
-  case 111:
-
-/* Line 1806 of yacc.c  */
-#line 612 "parser.yy"
+  case 113:
+
+/* Line 1806 of yacc.c  */
+#line 614 "parser.yy"
     { (yyval.op) = OperKinds::PlusAssn; }
     break;
 
-  case 112:
-
-/* Line 1806 of yacc.c  */
-#line 613 "parser.yy"
+  case 114:
+
+/* Line 1806 of yacc.c  */
+#line 615 "parser.yy"
     { (yyval.op) = OperKinds::MinusAssn; }
     break;
 
-  case 113:
-
-/* Line 1806 of yacc.c  */
-#line 614 "parser.yy"
+  case 115:
+
+/* Line 1806 of yacc.c  */
+#line 616 "parser.yy"
     { (yyval.op) = OperKinds::LSAssn; }
     break;
 
-  case 114:
-
-/* Line 1806 of yacc.c  */
-#line 615 "parser.yy"
+  case 116:
+
+/* Line 1806 of yacc.c  */
+#line 617 "parser.yy"
     { (yyval.op) = OperKinds::RSAssn; }
     break;
 
-  case 115:
-
-/* Line 1806 of yacc.c  */
-#line 616 "parser.yy"
+  case 117:
+
+/* Line 1806 of yacc.c  */
+#line 618 "parser.yy"
     { (yyval.op) = OperKinds::AndAssn; }
     break;
 
-  case 116:
-
-/* Line 1806 of yacc.c  */
-#line 617 "parser.yy"
+  case 118:
+
+/* Line 1806 of yacc.c  */
+#line 619 "parser.yy"
     { (yyval.op) = OperKinds::ERAssn; }
     break;
 
-  case 117:
-
-/* Line 1806 of yacc.c  */
-#line 618 "parser.yy"
+  case 119:
+
+/* Line 1806 of yacc.c  */
+#line 620 "parser.yy"
     { (yyval.op) = OperKinds::OrAssn; }
     break;
 
-  case 118:
-
-/* Line 1806 of yacc.c  */
-#line 625 "parser.yy"
+  case 120:
+
+/* Line 1806 of yacc.c  */
+#line 627 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple() ); }
     break;
 
-  case 119:
-
-/* Line 1806 of yacc.c  */
-#line 627 "parser.yy"
+  case 121:
+
+/* Line 1806 of yacc.c  */
+#line 629 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
     break;
 
-  case 120:
-
-/* Line 1806 of yacc.c  */
-#line 629 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_link( (yyvsp[(4) - (6)].en) ) ) ); }
-    break;
-
-  case 121:
+  case 122:
 
 /* Line 1806 of yacc.c  */
 #line 631 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( (yyvsp[(5) - (7)].en) ) ) ); }
+    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
 
@@ -5606,6 +5620,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 637 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+#line 633 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
 
@@ -5613,37 +5627,44 @@
 
 /* Line 1806 of yacc.c  */
-#line 643 "parser.yy"
+#line 639 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
+    break;
+
+  case 127:
+
+/* Line 1806 of yacc.c  */
+#line 645 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 126:
-
-/* Line 1806 of yacc.c  */
-#line 648 "parser.yy"
+  case 128:
+
+/* Line 1806 of yacc.c  */
+#line 650 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 130:
-
-/* Line 1806 of yacc.c  */
-#line 657 "parser.yy"
+  case 132:
+
+/* Line 1806 of yacc.c  */
+#line 659 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
 
-  case 136:
-
-/* Line 1806 of yacc.c  */
-#line 664 "parser.yy"
+  case 138:
+
+/* Line 1806 of yacc.c  */
+#line 666 "parser.yy"
     {
 			Token fn;
 			fn.str = new std::string( "^?{}" ); // location undefined
-			(yyval.sn) = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ) ) ) );
+			(yyval.sn) = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_last( (yyvsp[(4) - (6)].en) ) ) ) ) );
 		}
     break;
 
-  case 137:
-
-/* Line 1806 of yacc.c  */
-#line 674 "parser.yy"
+  case 139:
+
+/* Line 1806 of yacc.c  */
+#line 676 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5651,16 +5672,9 @@
     break;
 
-  case 138:
-
-/* Line 1806 of yacc.c  */
-#line 681 "parser.yy"
-    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
-    break;
-
-  case 139:
-
-/* Line 1806 of yacc.c  */
-#line 688 "parser.yy"
-    { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
+  case 140:
+
+/* Line 1806 of yacc.c  */
+#line 683 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_compound( (StatementNode *)0 ) ); }
     break;
 
@@ -5668,21 +5682,28 @@
 
 /* Line 1806 of yacc.c  */
-#line 694 "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 142:
-
-/* Line 1806 of yacc.c  */
-#line 699 "parser.yy"
+#line 690 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_compound( (yyvsp[(5) - (7)].sn) ) ); }
+    break;
+
+  case 143:
+
+/* Line 1806 of yacc.c  */
+#line 696 "parser.yy"
+    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
+    break;
+
+  case 144:
+
+/* Line 1806 of yacc.c  */
+#line 701 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
-  case 143:
-
-/* Line 1806 of yacc.c  */
-#line 701 "parser.yy"
+  case 145:
+
+/* Line 1806 of yacc.c  */
+#line 703 "parser.yy"
     {	// mark all fields in list
-			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			(yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) );
@@ -5690,30 +5711,16 @@
     break;
 
-  case 144:
-
-/* Line 1806 of yacc.c  */
-#line 707 "parser.yy"
+  case 146:
+
+/* Line 1806 of yacc.c  */
+#line 709 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
-  case 147:
-
-/* Line 1806 of yacc.c  */
-#line 714 "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 148:
-
-/* Line 1806 of yacc.c  */
-#line 719 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_expr( (yyvsp[(1) - (2)].en) ) ); }
-    break;
-
   case 149:
 
 /* Line 1806 of yacc.c  */
-#line 725 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
+#line 716 "parser.yy"
+    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     break;
 
@@ -5721,21 +5728,35 @@
 
 /* Line 1806 of yacc.c  */
+#line 721 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_expr( (yyvsp[(1) - (2)].en) ) ); }
+    break;
+
+  case 151:
+
+/* Line 1806 of yacc.c  */
 #line 727 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
-    break;
-
-  case 151:
+    { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
+    break;
+
+  case 152:
 
 /* Line 1806 of yacc.c  */
 #line 729 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
-    break;
-
-  case 152:
+    { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
+    break;
+
+  case 153:
 
 /* Line 1806 of yacc.c  */
 #line 731 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
+    break;
+
+  case 154:
+
+/* Line 1806 of yacc.c  */
+#line 733 "parser.yy"
     {
-			StatementNode *sw = new StatementNode2( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
+			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
 			// The semantics of the declaration list is changed to include associated initialization, which is performed
 			// *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
@@ -5743,79 +5764,65 @@
 			// therefore, are removed from the grammar even though C allows it. The change also applies to choose
 			// statement.
-			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw;
+			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw;
 		}
     break;
 
-  case 153:
-
-/* Line 1806 of yacc.c  */
-#line 741 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
-    break;
-
-  case 154:
+  case 155:
 
 /* Line 1806 of yacc.c  */
 #line 743 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
+    break;
+
+  case 156:
+
+/* Line 1806 of yacc.c  */
+#line 745 "parser.yy"
     {
-			StatementNode *sw = new StatementNode2( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
-			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw;
+			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
+			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw;
 		}
     break;
 
-  case 155:
-
-/* Line 1806 of yacc.c  */
-#line 753 "parser.yy"
+  case 157:
+
+/* Line 1806 of yacc.c  */
+#line 755 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
-  case 156:
-
-/* Line 1806 of yacc.c  */
-#line 755 "parser.yy"
+  case 158:
+
+/* Line 1806 of yacc.c  */
+#line 757 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 158:
-
-/* Line 1806 of yacc.c  */
-#line 761 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_case( (yyvsp[(1) - (1)].en) ) ); }
-    break;
-
-  case 159:
-
-/* Line 1806 of yacc.c  */
-#line 763 "parser.yy"
-    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode2( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
-    break;
-
   case 160:
 
 /* Line 1806 of yacc.c  */
-#line 767 "parser.yy"
+#line 762 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); }
+    break;
+
+  case 161:
+
+/* Line 1806 of yacc.c  */
+#line 764 "parser.yy"
+    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
+    break;
+
+  case 162:
+
+/* Line 1806 of yacc.c  */
+#line 768 "parser.yy"
     { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     break;
 
-  case 161:
-
-/* Line 1806 of yacc.c  */
-#line 768 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_default() ); }
-    break;
-
   case 163:
 
 /* Line 1806 of yacc.c  */
-#line 774 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
-    break;
-
-  case 164:
-
-/* Line 1806 of yacc.c  */
-#line 778 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
+#line 769 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_default() ); }
     break;
 
@@ -5823,55 +5830,55 @@
 
 /* Line 1806 of yacc.c  */
-#line 783 "parser.yy"
+#line 775 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
+    break;
+
+  case 166:
+
+/* Line 1806 of yacc.c  */
+#line 779 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
+    break;
+
+  case 167:
+
+/* Line 1806 of yacc.c  */
+#line 784 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 167:
-
-/* Line 1806 of yacc.c  */
-#line 789 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
-    break;
-
-  case 168:
-
-/* Line 1806 of yacc.c  */
-#line 791 "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 169:
 
 /* Line 1806 of yacc.c  */
-#line 796 "parser.yy"
+#line 790 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
+    break;
+
+  case 170:
+
+/* Line 1806 of yacc.c  */
+#line 792 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(3) - (3)].sn) ) ) ) ) ); }
+    break;
+
+  case 171:
+
+/* Line 1806 of yacc.c  */
+#line 797 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 171:
-
-/* Line 1806 of yacc.c  */
-#line 802 "parser.yy"
+  case 173:
+
+/* Line 1806 of yacc.c  */
+#line 803 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
 
-  case 172:
-
-/* Line 1806 of yacc.c  */
-#line 804 "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 173:
-
-/* Line 1806 of yacc.c  */
-#line 806 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
-    break;
-
   case 174:
 
 /* Line 1806 of yacc.c  */
-#line 808 "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) ) ) ) ) ) ); }
+#line 805 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(2) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
 
@@ -5879,6 +5886,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 813 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_branch( "", BranchStmt::Break ) ); }
+#line 807 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
+    break;
+
+  case 176:
+
+/* Line 1806 of yacc.c  */
+#line 809 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_last( (yyvsp[(2) - (4)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(3) - (4)].sn)->set_last( (yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
     break;
 
@@ -5886,34 +5900,27 @@
 
 /* Line 1806 of yacc.c  */
-#line 819 "parser.yy"
+#line 814 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
+    break;
+
+  case 179:
+
+/* Line 1806 of yacc.c  */
+#line 820 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 178:
-
-/* Line 1806 of yacc.c  */
-#line 821 "parser.yy"
+  case 180:
+
+/* Line 1806 of yacc.c  */
+#line 822 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 179:
-
-/* Line 1806 of yacc.c  */
-#line 826 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
-    break;
-
-  case 180:
-
-/* Line 1806 of yacc.c  */
-#line 828 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
-    break;
-
   case 181:
 
 /* Line 1806 of yacc.c  */
-#line 830 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
+#line 827 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
 
@@ -5921,34 +5928,34 @@
 
 /* Line 1806 of yacc.c  */
-#line 835 "parser.yy"
+#line 829 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
+    break;
+
+  case 183:
+
+/* Line 1806 of yacc.c  */
+#line 831 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
+    break;
+
+  case 184:
+
+/* Line 1806 of yacc.c  */
+#line 836 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
 
-  case 183:
-
-/* Line 1806 of yacc.c  */
-#line 837 "parser.yy"
+  case 185:
+
+/* Line 1806 of yacc.c  */
+#line 838 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
 
-  case 184:
-
-/* Line 1806 of yacc.c  */
-#line 842 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
-    break;
-
-  case 185:
-
-/* Line 1806 of yacc.c  */
-#line 846 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
-    break;
-
   case 186:
 
 /* Line 1806 of yacc.c  */
-#line 849 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_branch( "", BranchStmt::Continue ) ); }
+#line 843 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
     break;
 
@@ -5956,6 +5963,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 853 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); delete (yyvsp[(2) - (3)].tok); }
+#line 847 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
     break;
 
@@ -5963,6 +5970,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 856 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_branch( "", BranchStmt::Break ) ); }
+#line 850 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Continue ) ); }
     break;
 
@@ -5970,6 +5977,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 860 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); delete (yyvsp[(2) - (3)].tok); }
+#line 854 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); }
     break;
 
@@ -5977,6 +5984,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 862 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_return( (yyvsp[(2) - (3)].en) ) ); }
+#line 857 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
     break;
 
@@ -5984,6 +5991,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 864 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_throw( (yyvsp[(2) - (3)].en) ) ); }
+#line 861 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); }
     break;
 
@@ -5991,6 +5998,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 866 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_throw( (yyvsp[(2) - (3)].en) ) ); }
+#line 863 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); }
     break;
 
@@ -5998,6 +6005,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 868 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_throw( (yyvsp[(2) - (5)].en) ) ); }
+#line 865 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     break;
 
@@ -6005,6 +6012,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 873 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
+#line 867 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     break;
 
@@ -6012,6 +6019,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 875 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
+#line 869 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); }
     break;
 
@@ -6019,81 +6026,91 @@
 
 /* Line 1806 of yacc.c  */
-#line 877 "parser.yy"
+#line 874 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
+    break;
+
+  case 197:
+
+/* Line 1806 of yacc.c  */
+#line 876 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
+    break;
+
+  case 198:
+
+/* Line 1806 of yacc.c  */
+#line 878 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
+    break;
+
+  case 200:
+
+/* Line 1806 of yacc.c  */
+#line 885 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
+    break;
+
+  case 201:
+
+/* Line 1806 of yacc.c  */
+#line 887 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
+    break;
+
+  case 202:
+
+/* Line 1806 of yacc.c  */
+#line 889 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
+    break;
+
+  case 203:
+
+/* Line 1806 of yacc.c  */
+#line 891 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
+    break;
+
+  case 204:
+
+/* Line 1806 of yacc.c  */
+#line 896 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
+    break;
+
+  case 205:
+
+/* Line 1806 of yacc.c  */
+#line 898 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
+    break;
+
+  case 206:
+
+/* Line 1806 of yacc.c  */
+#line 900 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
+    break;
+
+  case 207:
+
+/* Line 1806 of yacc.c  */
+#line 902 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
+    break;
+
+  case 208:
+
+/* Line 1806 of yacc.c  */
+#line 907 "parser.yy"
     {
-			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
-			(yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (4)].sn),*(yyvsp[(3) - (4)].pn) ))));
+			(yyval.sn) = new StatementNode( build_finally( (yyvsp[(2) - (2)].sn) ) );
 		}
     break;
 
-  case 198:
-
-/* Line 1806 of yacc.c  */
-#line 888 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
-    break;
-
-  case 199:
-
-/* Line 1806 of yacc.c  */
-#line 890 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
-    break;
-
-  case 200:
-
-/* Line 1806 of yacc.c  */
-#line 892 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
-    break;
-
-  case 201:
-
-/* Line 1806 of yacc.c  */
-#line 894 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
-    break;
-
-  case 202:
-
-/* Line 1806 of yacc.c  */
-#line 899 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
-    break;
-
-  case 203:
-
-/* Line 1806 of yacc.c  */
-#line 901 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
-    break;
-
-  case 204:
-
-/* Line 1806 of yacc.c  */
-#line 903 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
-    break;
-
-  case 205:
-
-/* Line 1806 of yacc.c  */
-#line 905 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
-    break;
-
-  case 206:
-
-/* Line 1806 of yacc.c  */
-#line 910 "parser.yy"
-    {
-			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
-			std::cout << "Just created a finally node" << std::endl;
-		}
-    break;
-
-  case 208:
-
-/* Line 1806 of yacc.c  */
-#line 924 "parser.yy"
+  case 210:
+
+/* Line 1806 of yacc.c  */
+#line 920 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6102,15 +6119,15 @@
     break;
 
-  case 209:
-
-/* Line 1806 of yacc.c  */
-#line 929 "parser.yy"
+  case 211:
+
+/* Line 1806 of yacc.c  */
+#line 925 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 210:
-
-/* Line 1806 of yacc.c  */
-#line 931 "parser.yy"
+  case 212:
+
+/* Line 1806 of yacc.c  */
+#line 927 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6119,79 +6136,65 @@
     break;
 
-  case 212:
+  case 214:
+
+/* Line 1806 of yacc.c  */
+#line 936 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
+    break;
+
+  case 215:
+
+/* Line 1806 of yacc.c  */
+#line 938 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
+    break;
+
+  case 216:
 
 /* Line 1806 of yacc.c  */
 #line 940 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
-    break;
-
-  case 213:
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); }
+    break;
+
+  case 217:
 
 /* Line 1806 of yacc.c  */
 #line 942 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
-    break;
-
-  case 214:
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ) ); }
+    break;
+
+  case 218:
 
 /* Line 1806 of yacc.c  */
 #line 944 "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;
-
-  case 215:
-
-/* Line 1806 of yacc.c  */
-#line 946 "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)].en) ); }
-    break;
-
-  case 216:
-
-/* Line 1806 of yacc.c  */
-#line 948 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ); }
-    break;
-
-  case 217:
-
-/* Line 1806 of yacc.c  */
-#line 953 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ) ); }
+    break;
+
+  case 219:
+
+/* Line 1806 of yacc.c  */
+#line 949 "parser.yy"
     { (yyval.flag) = false; }
     break;
 
-  case 218:
-
-/* Line 1806 of yacc.c  */
-#line 955 "parser.yy"
+  case 220:
+
+/* Line 1806 of yacc.c  */
+#line 951 "parser.yy"
     { (yyval.flag) = true; }
     break;
 
-  case 219:
-
-/* Line 1806 of yacc.c  */
-#line 960 "parser.yy"
+  case 221:
+
+/* Line 1806 of yacc.c  */
+#line 956 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 222:
-
-/* Line 1806 of yacc.c  */
-#line 967 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 223:
-
-/* Line 1806 of yacc.c  */
-#line 972 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_asm( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
-    break;
-
   case 224:
 
 /* Line 1806 of yacc.c  */
-#line 974 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_asm( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
+#line 963 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
 
@@ -6199,34 +6202,34 @@
 
 /* Line 1806 of yacc.c  */
+#line 968 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
+    break;
+
+  case 226:
+
+/* Line 1806 of yacc.c  */
+#line 970 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
+    break;
+
+  case 227:
+
+/* Line 1806 of yacc.c  */
+#line 975 "parser.yy"
+    { (yyval.en) = 0; }
+    break;
+
+  case 228:
+
+/* Line 1806 of yacc.c  */
+#line 977 "parser.yy"
+    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
+    break;
+
+  case 229:
+
+/* Line 1806 of yacc.c  */
 #line 979 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 226:
-
-/* Line 1806 of yacc.c  */
-#line 981 "parser.yy"
-    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
-    break;
-
-  case 227:
-
-/* Line 1806 of yacc.c  */
-#line 983 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
-    break;
-
-  case 228:
-
-/* Line 1806 of yacc.c  */
-#line 988 "parser.yy"
-    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 229:
-
-/* Line 1806 of yacc.c  */
-#line 990 "parser.yy"
-    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
 
@@ -6234,47 +6237,67 @@
 
 /* Line 1806 of yacc.c  */
-#line 997 "parser.yy"
+#line 984 "parser.yy"
+    {
+			(yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) );
+			delete (yyvsp[(1) - (1)].tok);									// allocated by lexer
+		}
+    break;
+
+  case 231:
+
+/* Line 1806 of yacc.c  */
+#line 989 "parser.yy"
+    {
+			(yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) );
+			delete (yyvsp[(3) - (3)].tok);									// allocated by lexer
+		}
+    break;
+
+  case 232:
+
+/* Line 1806 of yacc.c  */
+#line 999 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 233:
-
-/* Line 1806 of yacc.c  */
-#line 1004 "parser.yy"
+  case 235:
+
+/* Line 1806 of yacc.c  */
+#line 1006 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 234:
-
-/* Line 1806 of yacc.c  */
-#line 1009 "parser.yy"
+  case 236:
+
+/* Line 1806 of yacc.c  */
+#line 1011 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 237:
-
-/* Line 1806 of yacc.c  */
-#line 1016 "parser.yy"
+  case 239:
+
+/* Line 1806 of yacc.c  */
+#line 1018 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 242:
-
-/* Line 1806 of yacc.c  */
-#line 1030 "parser.yy"
+  case 244:
+
+/* Line 1806 of yacc.c  */
+#line 1032 "parser.yy"
     {}
     break;
 
-  case 243:
-
-/* Line 1806 of yacc.c  */
-#line 1031 "parser.yy"
+  case 245:
+
+/* Line 1806 of yacc.c  */
+#line 1033 "parser.yy"
     {}
     break;
 
-  case 251:
-
-/* Line 1806 of yacc.c  */
-#line 1060 "parser.yy"
+  case 253:
+
+/* Line 1806 of yacc.c  */
+#line 1062 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6283,8 +6306,8 @@
     break;
 
-  case 252:
-
-/* Line 1806 of yacc.c  */
-#line 1067 "parser.yy"
+  case 254:
+
+/* Line 1806 of yacc.c  */
+#line 1069 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6293,8 +6316,8 @@
     break;
 
-  case 253:
-
-/* Line 1806 of yacc.c  */
-#line 1072 "parser.yy"
+  case 255:
+
+/* Line 1806 of yacc.c  */
+#line 1074 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6303,8 +6326,8 @@
     break;
 
-  case 254:
-
-/* Line 1806 of yacc.c  */
-#line 1082 "parser.yy"
+  case 256:
+
+/* Line 1806 of yacc.c  */
+#line 1084 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6313,8 +6336,8 @@
     break;
 
-  case 255:
-
-/* Line 1806 of yacc.c  */
-#line 1087 "parser.yy"
+  case 257:
+
+/* Line 1806 of yacc.c  */
+#line 1089 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6323,8 +6346,8 @@
     break;
 
-  case 256:
-
-/* Line 1806 of yacc.c  */
-#line 1092 "parser.yy"
+  case 258:
+
+/* Line 1806 of yacc.c  */
+#line 1094 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6333,8 +6356,8 @@
     break;
 
-  case 257:
-
-/* Line 1806 of yacc.c  */
-#line 1100 "parser.yy"
+  case 259:
+
+/* Line 1806 of yacc.c  */
+#line 1102 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6343,8 +6366,8 @@
     break;
 
-  case 258:
-
-/* Line 1806 of yacc.c  */
-#line 1105 "parser.yy"
+  case 260:
+
+/* Line 1806 of yacc.c  */
+#line 1107 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6353,8 +6376,8 @@
     break;
 
-  case 259:
-
-/* Line 1806 of yacc.c  */
-#line 1110 "parser.yy"
+  case 261:
+
+/* Line 1806 of yacc.c  */
+#line 1112 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6363,8 +6386,8 @@
     break;
 
-  case 260:
-
-/* Line 1806 of yacc.c  */
-#line 1115 "parser.yy"
+  case 262:
+
+/* Line 1806 of yacc.c  */
+#line 1117 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6373,8 +6396,8 @@
     break;
 
-  case 261:
-
-/* Line 1806 of yacc.c  */
-#line 1120 "parser.yy"
+  case 263:
+
+/* Line 1806 of yacc.c  */
+#line 1122 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6383,8 +6406,8 @@
     break;
 
-  case 262:
-
-/* Line 1806 of yacc.c  */
-#line 1128 "parser.yy"
+  case 264:
+
+/* Line 1806 of yacc.c  */
+#line 1130 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6392,8 +6415,8 @@
     break;
 
-  case 263:
-
-/* Line 1806 of yacc.c  */
-#line 1151 "parser.yy"
+  case 265:
+
+/* Line 1806 of yacc.c  */
+#line 1153 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6401,8 +6424,8 @@
     break;
 
-  case 264:
-
-/* Line 1806 of yacc.c  */
-#line 1155 "parser.yy"
+  case 266:
+
+/* Line 1806 of yacc.c  */
+#line 1157 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6410,22 +6433,22 @@
     break;
 
-  case 265:
-
-/* Line 1806 of yacc.c  */
-#line 1162 "parser.yy"
+  case 267:
+
+/* Line 1806 of yacc.c  */
+#line 1164 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 266:
-
-/* Line 1806 of yacc.c  */
-#line 1166 "parser.yy"
+  case 268:
+
+/* Line 1806 of yacc.c  */
+#line 1168 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
 
-  case 267:
-
-/* Line 1806 of yacc.c  */
-#line 1171 "parser.yy"
+  case 269:
+
+/* Line 1806 of yacc.c  */
+#line 1173 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6434,8 +6457,8 @@
     break;
 
-  case 268:
-
-/* Line 1806 of yacc.c  */
-#line 1176 "parser.yy"
+  case 270:
+
+/* Line 1806 of yacc.c  */
+#line 1178 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6444,8 +6467,8 @@
     break;
 
-  case 269:
-
-/* Line 1806 of yacc.c  */
-#line 1181 "parser.yy"
+  case 271:
+
+/* Line 1806 of yacc.c  */
+#line 1183 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6454,8 +6477,8 @@
     break;
 
-  case 270:
-
-/* Line 1806 of yacc.c  */
-#line 1192 "parser.yy"
+  case 272:
+
+/* Line 1806 of yacc.c  */
+#line 1194 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6464,8 +6487,8 @@
     break;
 
-  case 271:
-
-/* Line 1806 of yacc.c  */
-#line 1197 "parser.yy"
+  case 273:
+
+/* Line 1806 of yacc.c  */
+#line 1199 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6474,8 +6497,8 @@
     break;
 
-  case 272:
-
-/* Line 1806 of yacc.c  */
-#line 1202 "parser.yy"
+  case 274:
+
+/* Line 1806 of yacc.c  */
+#line 1204 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6484,8 +6507,8 @@
     break;
 
-  case 273:
-
-/* Line 1806 of yacc.c  */
-#line 1207 "parser.yy"
+  case 275:
+
+/* Line 1806 of yacc.c  */
+#line 1209 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6494,8 +6517,8 @@
     break;
 
-  case 274:
-
-/* Line 1806 of yacc.c  */
-#line 1212 "parser.yy"
+  case 276:
+
+/* Line 1806 of yacc.c  */
+#line 1214 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6504,8 +6527,8 @@
     break;
 
-  case 275:
-
-/* Line 1806 of yacc.c  */
-#line 1221 "parser.yy"
+  case 277:
+
+/* Line 1806 of yacc.c  */
+#line 1223 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6514,8 +6537,8 @@
     break;
 
-  case 276:
-
-/* Line 1806 of yacc.c  */
-#line 1226 "parser.yy"
+  case 278:
+
+/* Line 1806 of yacc.c  */
+#line 1228 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6524,8 +6547,8 @@
     break;
 
-  case 281:
-
-/* Line 1806 of yacc.c  */
-#line 1243 "parser.yy"
+  case 283:
+
+/* Line 1806 of yacc.c  */
+#line 1245 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6534,8 +6557,8 @@
     break;
 
-  case 282:
-
-/* Line 1806 of yacc.c  */
-#line 1248 "parser.yy"
+  case 284:
+
+/* Line 1806 of yacc.c  */
+#line 1250 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6544,57 +6567,57 @@
     break;
 
-  case 291:
-
-/* Line 1806 of yacc.c  */
-#line 1270 "parser.yy"
+  case 293:
+
+/* Line 1806 of yacc.c  */
+#line 1272 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 294:
-
-/* Line 1806 of yacc.c  */
-#line 1282 "parser.yy"
+  case 296:
+
+/* Line 1806 of yacc.c  */
+#line 1284 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 297:
-
-/* Line 1806 of yacc.c  */
-#line 1293 "parser.yy"
+  case 299:
+
+/* Line 1806 of yacc.c  */
+#line 1295 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
 
-  case 298:
-
-/* Line 1806 of yacc.c  */
-#line 1295 "parser.yy"
+  case 300:
+
+/* Line 1806 of yacc.c  */
+#line 1297 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
 
-  case 299:
-
-/* Line 1806 of yacc.c  */
-#line 1297 "parser.yy"
+  case 301:
+
+/* Line 1806 of yacc.c  */
+#line 1299 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
 
-  case 300:
-
-/* Line 1806 of yacc.c  */
-#line 1299 "parser.yy"
+  case 302:
+
+/* Line 1806 of yacc.c  */
+#line 1301 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
 
-  case 301:
-
-/* Line 1806 of yacc.c  */
-#line 1301 "parser.yy"
+  case 303:
+
+/* Line 1806 of yacc.c  */
+#line 1303 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
 
-  case 302:
-
-/* Line 1806 of yacc.c  */
-#line 1303 "parser.yy"
+  case 304:
+
+/* Line 1806 of yacc.c  */
+#line 1305 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6602,8 +6625,8 @@
     break;
 
-  case 303:
-
-/* Line 1806 of yacc.c  */
-#line 1307 "parser.yy"
+  case 305:
+
+/* Line 1806 of yacc.c  */
+#line 1309 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6612,75 +6635,75 @@
     break;
 
-  case 305:
-
-/* Line 1806 of yacc.c  */
-#line 1316 "parser.yy"
+  case 307:
+
+/* Line 1806 of yacc.c  */
+#line 1318 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 306:
-
-/* Line 1806 of yacc.c  */
-#line 1318 "parser.yy"
+  case 308:
+
+/* Line 1806 of yacc.c  */
+#line 1320 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 308:
-
-/* Line 1806 of yacc.c  */
-#line 1329 "parser.yy"
+  case 310:
+
+/* Line 1806 of yacc.c  */
+#line 1331 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 310:
+  case 311:
+
+/* Line 1806 of yacc.c  */
+#line 1336 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
+    break;
+
+  case 312:
 
 /* Line 1806 of yacc.c  */
 #line 1338 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
-    break;
-
-  case 311:
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
+    break;
+
+  case 313:
 
 /* Line 1806 of yacc.c  */
 #line 1340 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
-    break;
-
-  case 312:
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
+    break;
+
+  case 314:
 
 /* Line 1806 of yacc.c  */
 #line 1342 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
-    break;
-
-  case 313:
-
-/* Line 1806 of yacc.c  */
-#line 1344 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
 
-  case 314:
-
-/* Line 1806 of yacc.c  */
-#line 1346 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
-    break;
-
   case 315:
 
 /* Line 1806 of yacc.c  */
-#line 1348 "parser.yy"
+#line 1345 "parser.yy"
+    { (yyval.decl) = new DeclarationNode; (yyval.decl)->isInline = true; }
+    break;
+
+  case 316:
+
+/* Line 1806 of yacc.c  */
+#line 1347 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
 
-  case 316:
+  case 317:
 
 /* Line 1806 of yacc.c  */
 #line 1350 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
-    break;
-
-  case 317:
+    { (yyval.decl) = new DeclarationNode; (yyval.decl)->isNoreturn = true; }
+    break;
+
+  case 318:
 
 /* Line 1806 of yacc.c  */
@@ -6689,5 +6712,5 @@
     break;
 
-  case 318:
+  case 319:
 
 /* Line 1806 of yacc.c  */
@@ -6696,5 +6719,5 @@
     break;
 
-  case 319:
+  case 320:
 
 /* Line 1806 of yacc.c  */
@@ -6703,5 +6726,5 @@
     break;
 
-  case 320:
+  case 321:
 
 /* Line 1806 of yacc.c  */
@@ -6710,5 +6733,5 @@
     break;
 
-  case 321:
+  case 322:
 
 /* Line 1806 of yacc.c  */
@@ -6717,5 +6740,5 @@
     break;
 
-  case 322:
+  case 323:
 
 /* Line 1806 of yacc.c  */
@@ -6724,5 +6747,5 @@
     break;
 
-  case 323:
+  case 324:
 
 /* Line 1806 of yacc.c  */
@@ -6731,5 +6754,5 @@
     break;
 
-  case 324:
+  case 325:
 
 /* Line 1806 of yacc.c  */
@@ -6738,5 +6761,5 @@
     break;
 
-  case 325:
+  case 326:
 
 /* Line 1806 of yacc.c  */
@@ -6745,5 +6768,5 @@
     break;
 
-  case 326:
+  case 327:
 
 /* Line 1806 of yacc.c  */
@@ -6752,5 +6775,5 @@
     break;
 
-  case 327:
+  case 328:
 
 /* Line 1806 of yacc.c  */
@@ -6759,5 +6782,5 @@
     break;
 
-  case 328:
+  case 329:
 
 /* Line 1806 of yacc.c  */
@@ -6766,5 +6789,5 @@
     break;
 
-  case 329:
+  case 330:
 
 /* Line 1806 of yacc.c  */
@@ -6773,5 +6796,5 @@
     break;
 
-  case 330:
+  case 331:
 
 /* Line 1806 of yacc.c  */
@@ -6780,5 +6803,5 @@
     break;
 
-  case 332:
+  case 333:
 
 /* Line 1806 of yacc.c  */
@@ -6787,5 +6810,5 @@
     break;
 
-  case 333:
+  case 334:
 
 /* Line 1806 of yacc.c  */
@@ -6794,5 +6817,5 @@
     break;
 
-  case 334:
+  case 335:
 
 /* Line 1806 of yacc.c  */
@@ -6801,5 +6824,5 @@
     break;
 
-  case 335:
+  case 336:
 
 /* Line 1806 of yacc.c  */
@@ -6808,5 +6831,5 @@
     break;
 
-  case 337:
+  case 338:
 
 /* Line 1806 of yacc.c  */
@@ -6815,5 +6838,5 @@
     break;
 
-  case 339:
+  case 340:
 
 /* Line 1806 of yacc.c  */
@@ -6822,5 +6845,5 @@
     break;
 
-  case 340:
+  case 341:
 
 /* Line 1806 of yacc.c  */
@@ -6829,5 +6852,5 @@
     break;
 
-  case 341:
+  case 342:
 
 /* Line 1806 of yacc.c  */
@@ -6836,5 +6859,5 @@
     break;
 
-  case 342:
+  case 343:
 
 /* Line 1806 of yacc.c  */
@@ -6843,5 +6866,5 @@
     break;
 
-  case 343:
+  case 344:
 
 /* Line 1806 of yacc.c  */
@@ -6850,5 +6873,5 @@
     break;
 
-  case 344:
+  case 345:
 
 /* Line 1806 of yacc.c  */
@@ -6857,5 +6880,5 @@
     break;
 
-  case 345:
+  case 346:
 
 /* Line 1806 of yacc.c  */
@@ -6864,5 +6887,5 @@
     break;
 
-  case 347:
+  case 348:
 
 /* Line 1806 of yacc.c  */
@@ -6871,5 +6894,5 @@
     break;
 
-  case 348:
+  case 349:
 
 /* Line 1806 of yacc.c  */
@@ -6878,5 +6901,5 @@
     break;
 
-  case 349:
+  case 350:
 
 /* Line 1806 of yacc.c  */
@@ -6885,5 +6908,5 @@
     break;
 
-  case 351:
+  case 352:
 
 /* Line 1806 of yacc.c  */
@@ -6892,5 +6915,5 @@
     break;
 
-  case 352:
+  case 353:
 
 /* Line 1806 of yacc.c  */
@@ -6899,5 +6922,5 @@
     break;
 
-  case 354:
+  case 355:
 
 /* Line 1806 of yacc.c  */
@@ -6906,5 +6929,5 @@
     break;
 
-  case 355:
+  case 356:
 
 /* Line 1806 of yacc.c  */
@@ -6913,5 +6936,5 @@
     break;
 
-  case 356:
+  case 357:
 
 /* Line 1806 of yacc.c  */
@@ -6920,5 +6943,5 @@
     break;
 
-  case 357:
+  case 358:
 
 /* Line 1806 of yacc.c  */
@@ -6927,5 +6950,5 @@
     break;
 
-  case 358:
+  case 359:
 
 /* Line 1806 of yacc.c  */
@@ -6934,5 +6957,5 @@
     break;
 
-  case 359:
+  case 360:
 
 /* Line 1806 of yacc.c  */
@@ -6941,5 +6964,5 @@
     break;
 
-  case 362:
+  case 363:
 
 /* Line 1806 of yacc.c  */
@@ -6948,5 +6971,5 @@
     break;
 
-  case 363:
+  case 364:
 
 /* Line 1806 of yacc.c  */
@@ -6958,5 +6981,5 @@
     break;
 
-  case 364:
+  case 365:
 
 /* Line 1806 of yacc.c  */
@@ -6965,5 +6988,5 @@
     break;
 
-  case 365:
+  case 366:
 
 /* Line 1806 of yacc.c  */
@@ -6972,5 +6995,5 @@
     break;
 
-  case 366:
+  case 367:
 
 /* Line 1806 of yacc.c  */
@@ -6979,5 +7002,5 @@
     break;
 
-  case 367:
+  case 368:
 
 /* Line 1806 of yacc.c  */
@@ -6986,5 +7009,5 @@
     break;
 
-  case 368:
+  case 369:
 
 /* Line 1806 of yacc.c  */
@@ -6993,5 +7016,5 @@
     break;
 
-  case 369:
+  case 370:
 
 /* Line 1806 of yacc.c  */
@@ -7000,5 +7023,5 @@
     break;
 
-  case 370:
+  case 371:
 
 /* Line 1806 of yacc.c  */
@@ -7007,5 +7030,5 @@
     break;
 
-  case 371:
+  case 372:
 
 /* Line 1806 of yacc.c  */
@@ -7014,5 +7037,5 @@
     break;
 
-  case 373:
+  case 374:
 
 /* Line 1806 of yacc.c  */
@@ -7021,10 +7044,10 @@
     break;
 
-  case 375:
+  case 376:
 
 /* Line 1806 of yacc.c  */
 #line 1505 "parser.yy"
     {	// mark all fields in list
-			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			(yyval.decl) = (yyvsp[(2) - (3)].decl);
@@ -7032,5 +7055,5 @@
     break;
 
-  case 377:
+  case 378:
 
 /* Line 1806 of yacc.c  */
@@ -7039,5 +7062,5 @@
     break;
 
-  case 378:
+  case 379:
 
 /* Line 1806 of yacc.c  */
@@ -7046,5 +7069,5 @@
     break;
 
-  case 379:
+  case 380:
 
 /* Line 1806 of yacc.c  */
@@ -7053,5 +7076,5 @@
     break;
 
-  case 380:
+  case 381:
 
 /* Line 1806 of yacc.c  */
@@ -7060,5 +7083,5 @@
     break;
 
-  case 381:
+  case 382:
 
 /* Line 1806 of yacc.c  */
@@ -7067,5 +7090,5 @@
     break;
 
-  case 382:
+  case 383:
 
 /* Line 1806 of yacc.c  */
@@ -7074,5 +7097,5 @@
     break;
 
-  case 383:
+  case 384:
 
 /* Line 1806 of yacc.c  */
@@ -7081,5 +7104,5 @@
     break;
 
-  case 384:
+  case 385:
 
 /* Line 1806 of yacc.c  */
@@ -7088,5 +7111,5 @@
     break;
 
-  case 385:
+  case 386:
 
 /* Line 1806 of yacc.c  */
@@ -7095,5 +7118,5 @@
     break;
 
-  case 387:
+  case 388:
 
 /* Line 1806 of yacc.c  */
@@ -7102,5 +7125,5 @@
     break;
 
-  case 388:
+  case 389:
 
 /* Line 1806 of yacc.c  */
@@ -7109,5 +7132,5 @@
     break;
 
-  case 389:
+  case 390:
 
 /* Line 1806 of yacc.c  */
@@ -7116,5 +7139,5 @@
     break;
 
-  case 391:
+  case 392:
 
 /* Line 1806 of yacc.c  */
@@ -7123,5 +7146,5 @@
     break;
 
-  case 392:
+  case 393:
 
 /* Line 1806 of yacc.c  */
@@ -7133,5 +7156,5 @@
     break;
 
-  case 393:
+  case 394:
 
 /* Line 1806 of yacc.c  */
@@ -7140,5 +7163,5 @@
     break;
 
-  case 394:
+  case 395:
 
 /* Line 1806 of yacc.c  */
@@ -7147,5 +7170,5 @@
     break;
 
-  case 395:
+  case 396:
 
 /* Line 1806 of yacc.c  */
@@ -7154,5 +7177,5 @@
     break;
 
-  case 396:
+  case 397:
 
 /* Line 1806 of yacc.c  */
@@ -7161,5 +7184,5 @@
     break;
 
-  case 397:
+  case 398:
 
 /* Line 1806 of yacc.c  */
@@ -7168,5 +7191,5 @@
     break;
 
-  case 398:
+  case 399:
 
 /* Line 1806 of yacc.c  */
@@ -7175,5 +7198,5 @@
     break;
 
-  case 399:
+  case 400:
 
 /* Line 1806 of yacc.c  */
@@ -7182,5 +7205,5 @@
     break;
 
-  case 403:
+  case 404:
 
 /* Line 1806 of yacc.c  */
@@ -7189,5 +7212,5 @@
     break;
 
-  case 404:
+  case 405:
 
 /* Line 1806 of yacc.c  */
@@ -7196,5 +7219,5 @@
     break;
 
-  case 405:
+  case 406:
 
 /* Line 1806 of yacc.c  */
@@ -7203,5 +7226,5 @@
     break;
 
-  case 407:
+  case 408:
 
 /* Line 1806 of yacc.c  */
@@ -7210,5 +7233,5 @@
     break;
 
-  case 408:
+  case 409:
 
 /* Line 1806 of yacc.c  */
@@ -7217,5 +7240,5 @@
     break;
 
-  case 409:
+  case 410:
 
 /* Line 1806 of yacc.c  */
@@ -7224,5 +7247,5 @@
     break;
 
-  case 411:
+  case 412:
 
 /* Line 1806 of yacc.c  */
@@ -7231,5 +7254,5 @@
     break;
 
-  case 412:
+  case 413:
 
 /* Line 1806 of yacc.c  */
@@ -7238,5 +7261,5 @@
     break;
 
-  case 415:
+  case 416:
 
 /* Line 1806 of yacc.c  */
@@ -7245,5 +7268,5 @@
     break;
 
-  case 418:
+  case 419:
 
 /* Line 1806 of yacc.c  */
@@ -7252,5 +7275,5 @@
     break;
 
-  case 419:
+  case 420:
 
 /* Line 1806 of yacc.c  */
@@ -7259,5 +7282,5 @@
     break;
 
-  case 421:
+  case 422:
 
 /* Line 1806 of yacc.c  */
@@ -7266,5 +7289,5 @@
     break;
 
-  case 422:
+  case 423:
 
 /* Line 1806 of yacc.c  */
@@ -7273,5 +7296,5 @@
     break;
 
-  case 423:
+  case 424:
 
 /* Line 1806 of yacc.c  */
@@ -7280,5 +7303,5 @@
     break;
 
-  case 428:
+  case 429:
 
 /* Line 1806 of yacc.c  */
@@ -7287,5 +7310,5 @@
     break;
 
-  case 430:
+  case 431:
 
 /* Line 1806 of yacc.c  */
@@ -7297,5 +7320,5 @@
     break;
 
-  case 431:
+  case 432:
 
 /* Line 1806 of yacc.c  */
@@ -7307,5 +7330,5 @@
     break;
 
-  case 433:
+  case 434:
 
 /* Line 1806 of yacc.c  */
@@ -7314,5 +7337,5 @@
     break;
 
-  case 434:
+  case 435:
 
 /* Line 1806 of yacc.c  */
@@ -7321,5 +7344,5 @@
     break;
 
-  case 435:
+  case 436:
 
 /* Line 1806 of yacc.c  */
@@ -7328,5 +7351,5 @@
     break;
 
-  case 447:
+  case 448:
 
 /* Line 1806 of yacc.c  */
@@ -7335,5 +7358,5 @@
     break;
 
-  case 451:
+  case 452:
 
 /* Line 1806 of yacc.c  */
@@ -7342,5 +7365,5 @@
     break;
 
-  case 452:
+  case 453:
 
 /* Line 1806 of yacc.c  */
@@ -7349,5 +7372,5 @@
     break;
 
-  case 453:
+  case 454:
 
 /* Line 1806 of yacc.c  */
@@ -7356,5 +7379,5 @@
     break;
 
-  case 454:
+  case 455:
 
 /* Line 1806 of yacc.c  */
@@ -7363,5 +7386,5 @@
     break;
 
-  case 455:
+  case 456:
 
 /* Line 1806 of yacc.c  */
@@ -7370,5 +7393,5 @@
     break;
 
-  case 456:
+  case 457:
 
 /* Line 1806 of yacc.c  */
@@ -7377,5 +7400,5 @@
     break;
 
-  case 457:
+  case 458:
 
 /* Line 1806 of yacc.c  */
@@ -7384,5 +7407,5 @@
     break;
 
-  case 459:
+  case 460:
 
 /* Line 1806 of yacc.c  */
@@ -7391,19 +7414,19 @@
     break;
 
-  case 460:
+  case 461:
 
 /* Line 1806 of yacc.c  */
 #line 1752 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
-    break;
-
-  case 461:
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
+    break;
+
+  case 462:
 
 /* Line 1806 of yacc.c  */
 #line 1754 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
-    break;
-
-  case 463:
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
+    break;
+
+  case 464:
 
 /* Line 1806 of yacc.c  */
@@ -7412,12 +7435,12 @@
     break;
 
-  case 465:
+  case 466:
 
 /* Line 1806 of yacc.c  */
 #line 1776 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) ) ); }
-    break;
-
-  case 466:
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 467:
 
 /* Line 1806 of yacc.c  */
@@ -7426,5 +7449,5 @@
     break;
 
-  case 467:
+  case 468:
 
 /* Line 1806 of yacc.c  */
@@ -7433,5 +7456,5 @@
     break;
 
-  case 468:
+  case 469:
 
 /* Line 1806 of yacc.c  */
@@ -7440,5 +7463,5 @@
     break;
 
-  case 469:
+  case 470:
 
 /* Line 1806 of yacc.c  */
@@ -7447,5 +7470,5 @@
     break;
 
-  case 470:
+  case 471:
 
 /* Line 1806 of yacc.c  */
@@ -7454,5 +7477,5 @@
     break;
 
-  case 472:
+  case 473:
 
 /* Line 1806 of yacc.c  */
@@ -7461,5 +7484,5 @@
     break;
 
-  case 473:
+  case 474:
 
 /* Line 1806 of yacc.c  */
@@ -7468,5 +7491,5 @@
     break;
 
-  case 474:
+  case 475:
 
 /* Line 1806 of yacc.c  */
@@ -7475,5 +7498,5 @@
     break;
 
-  case 476:
+  case 477:
 
 /* Line 1806 of yacc.c  */
@@ -7482,5 +7505,5 @@
     break;
 
-  case 477:
+  case 478:
 
 /* Line 1806 of yacc.c  */
@@ -7489,5 +7512,5 @@
     break;
 
-  case 478:
+  case 479:
 
 /* Line 1806 of yacc.c  */
@@ -7496,5 +7519,5 @@
     break;
 
-  case 480:
+  case 481:
 
 /* Line 1806 of yacc.c  */
@@ -7503,5 +7526,5 @@
     break;
 
-  case 481:
+  case 482:
 
 /* Line 1806 of yacc.c  */
@@ -7510,5 +7533,5 @@
     break;
 
-  case 482:
+  case 483:
 
 /* Line 1806 of yacc.c  */
@@ -7517,5 +7540,5 @@
     break;
 
-  case 484:
+  case 485:
 
 /* Line 1806 of yacc.c  */
@@ -7524,5 +7547,5 @@
     break;
 
-  case 485:
+  case 486:
 
 /* Line 1806 of yacc.c  */
@@ -7531,5 +7554,5 @@
     break;
 
-  case 486:
+  case 487:
 
 /* Line 1806 of yacc.c  */
@@ -7538,5 +7561,5 @@
     break;
 
-  case 487:
+  case 488:
 
 /* Line 1806 of yacc.c  */
@@ -7545,5 +7568,5 @@
     break;
 
-  case 488:
+  case 489:
 
 /* Line 1806 of yacc.c  */
@@ -7552,5 +7575,5 @@
     break;
 
-  case 489:
+  case 490:
 
 /* Line 1806 of yacc.c  */
@@ -7562,5 +7585,5 @@
     break;
 
-  case 490:
+  case 491:
 
 /* Line 1806 of yacc.c  */
@@ -7569,5 +7592,5 @@
     break;
 
-  case 491:
+  case 492:
 
 /* Line 1806 of yacc.c  */
@@ -7576,5 +7599,5 @@
     break;
 
-  case 492:
+  case 493:
 
 /* Line 1806 of yacc.c  */
@@ -7583,19 +7606,19 @@
     break;
 
-  case 494:
+  case 495:
 
 /* Line 1806 of yacc.c  */
 #line 1882 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
-    break;
-
-  case 495:
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
+    break;
+
+  case 496:
 
 /* Line 1806 of yacc.c  */
 #line 1884 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
-    break;
-
-  case 496:
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
+    break;
+
+  case 497:
 
 /* Line 1806 of yacc.c  */
@@ -7604,5 +7627,5 @@
     break;
 
-  case 497:
+  case 498:
 
 /* Line 1806 of yacc.c  */
@@ -7611,5 +7634,5 @@
     break;
 
-  case 498:
+  case 499:
 
 /* Line 1806 of yacc.c  */
@@ -7618,5 +7641,5 @@
     break;
 
-  case 499:
+  case 500:
 
 /* Line 1806 of yacc.c  */
@@ -7625,5 +7648,5 @@
     break;
 
-  case 500:
+  case 501:
 
 /* Line 1806 of yacc.c  */
@@ -7632,5 +7655,5 @@
     break;
 
-  case 501:
+  case 502:
 
 /* Line 1806 of yacc.c  */
@@ -7642,5 +7665,5 @@
     break;
 
-  case 502:
+  case 503:
 
 /* Line 1806 of yacc.c  */
@@ -7652,5 +7675,5 @@
     break;
 
-  case 503:
+  case 504:
 
 /* Line 1806 of yacc.c  */
@@ -7662,5 +7685,5 @@
     break;
 
-  case 504:
+  case 505:
 
 /* Line 1806 of yacc.c  */
@@ -7672,5 +7695,5 @@
     break;
 
-  case 505:
+  case 506:
 
 /* Line 1806 of yacc.c  */
@@ -7683,5 +7706,5 @@
     break;
 
-  case 507:
+  case 508:
 
 /* Line 1806 of yacc.c  */
@@ -7690,5 +7713,5 @@
     break;
 
-  case 510:
+  case 511:
 
 /* Line 1806 of yacc.c  */
@@ -7700,5 +7723,5 @@
     break;
 
-  case 511:
+  case 512:
 
 /* Line 1806 of yacc.c  */
@@ -7710,5 +7733,5 @@
     break;
 
-  case 512:
+  case 513:
 
 /* Line 1806 of yacc.c  */
@@ -7720,5 +7743,5 @@
     break;
 
-  case 513:
+  case 514:
 
 /* Line 1806 of yacc.c  */
@@ -7730,5 +7753,5 @@
     break;
 
-  case 514:
+  case 515:
 
 /* Line 1806 of yacc.c  */
@@ -7740,5 +7763,5 @@
     break;
 
-  case 515:
+  case 516:
 
 /* Line 1806 of yacc.c  */
@@ -7747,52 +7770,46 @@
     break;
 
-  case 516:
+  case 517:
 
 /* Line 1806 of yacc.c  */
 #line 1983 "parser.yy"
+    { parseTree = parseTree != nullptr ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);	}
+    break;
+
+  case 519:
+
+/* Line 1806 of yacc.c  */
+#line 1989 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl) != nullptr ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
+    break;
+
+  case 520:
+
+/* Line 1806 of yacc.c  */
+#line 1994 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 524:
+
+/* Line 1806 of yacc.c  */
+#line 2002 "parser.yy"
+    {}
+    break;
+
+  case 525:
+
+/* Line 1806 of yacc.c  */
+#line 2004 "parser.yy"
     {
-			if ( theTree ) {
-				theTree->appendList( (yyvsp[(1) - (1)].decl) );
-			} else {
-				theTree = (yyvsp[(1) - (1)].decl);
-			}
-		}
-    break;
-
-  case 518:
-
-/* Line 1806 of yacc.c  */
-#line 1995 "parser.yy"
-    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
-    break;
-
-  case 519:
-
-/* Line 1806 of yacc.c  */
-#line 2000 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 523:
-
-/* Line 1806 of yacc.c  */
-#line 2008 "parser.yy"
-    {}
-    break;
-
-  case 524:
-
-/* Line 1806 of yacc.c  */
-#line 2010 "parser.yy"
-    {
-			linkageStack.push( linkage );
+			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
 			linkage = LinkageSpec::fromString( *(yyvsp[(2) - (2)].tok) );
 		}
     break;
 
-  case 525:
-
-/* Line 1806 of yacc.c  */
-#line 2015 "parser.yy"
+  case 526:
+
+/* Line 1806 of yacc.c  */
+#line 2009 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7802,10 +7819,10 @@
     break;
 
-  case 526:
-
-/* Line 1806 of yacc.c  */
-#line 2021 "parser.yy"
+  case 527:
+
+/* Line 1806 of yacc.c  */
+#line 2015 "parser.yy"
     {	// mark all fields in list
-			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			(yyval.decl) = (yyvsp[(2) - (2)].decl);
@@ -7813,8 +7830,8 @@
     break;
 
-  case 528:
-
-/* Line 1806 of yacc.c  */
-#line 2036 "parser.yy"
+  case 529:
+
+/* Line 1806 of yacc.c  */
+#line 2030 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7824,8 +7841,8 @@
     break;
 
-  case 529:
-
-/* Line 1806 of yacc.c  */
-#line 2042 "parser.yy"
+  case 530:
+
+/* Line 1806 of yacc.c  */
+#line 2036 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7835,8 +7852,8 @@
     break;
 
-  case 530:
-
-/* Line 1806 of yacc.c  */
-#line 2051 "parser.yy"
+  case 531:
+
+/* Line 1806 of yacc.c  */
+#line 2045 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7846,8 +7863,8 @@
     break;
 
-  case 531:
-
-/* Line 1806 of yacc.c  */
-#line 2057 "parser.yy"
+  case 532:
+
+/* Line 1806 of yacc.c  */
+#line 2051 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7857,5 +7874,16 @@
     break;
 
-  case 532:
+  case 533:
+
+/* Line 1806 of yacc.c  */
+#line 2057 "parser.yy"
+    {
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			(yyval.decl) = (yyvsp[(2) - (3)].decl)->addFunctionBody( (yyvsp[(3) - (3)].sn) )->addQualifiers( (yyvsp[(1) - (3)].decl) );
+		}
+    break;
+
+  case 534:
 
 /* Line 1806 of yacc.c  */
@@ -7868,19 +7896,8 @@
     break;
 
-  case 533:
+  case 535:
 
 /* Line 1806 of yacc.c  */
 #line 2069 "parser.yy"
-    {
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			(yyval.decl) = (yyvsp[(2) - (3)].decl)->addFunctionBody( (yyvsp[(3) - (3)].sn) )->addQualifiers( (yyvsp[(1) - (3)].decl) );
-		}
-    break;
-
-  case 534:
-
-/* Line 1806 of yacc.c  */
-#line 2075 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7890,8 +7907,8 @@
     break;
 
-  case 535:
-
-/* Line 1806 of yacc.c  */
-#line 2083 "parser.yy"
+  case 536:
+
+/* Line 1806 of yacc.c  */
+#line 2077 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7901,8 +7918,8 @@
     break;
 
-  case 536:
-
-/* Line 1806 of yacc.c  */
-#line 2089 "parser.yy"
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2083 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7912,8 +7929,8 @@
     break;
 
-  case 537:
-
-/* Line 1806 of yacc.c  */
-#line 2097 "parser.yy"
+  case 538:
+
+/* Line 1806 of yacc.c  */
+#line 2091 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7923,8 +7940,8 @@
     break;
 
-  case 538:
-
-/* Line 1806 of yacc.c  */
-#line 2103 "parser.yy"
+  case 539:
+
+/* Line 1806 of yacc.c  */
+#line 2097 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7934,8 +7951,8 @@
     break;
 
-  case 542:
-
-/* Line 1806 of yacc.c  */
-#line 2118 "parser.yy"
+  case 543:
+
+/* Line 1806 of yacc.c  */
+#line 2112 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -7944,19 +7961,26 @@
 
 /* Line 1806 of yacc.c  */
-#line 2128 "parser.yy"
+#line 2117 "parser.yy"
+    { delete (yyvsp[(3) - (5)].str); }
+    break;
+
+  case 546:
+
+/* Line 1806 of yacc.c  */
+#line 2122 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 548:
+  case 549:
+
+/* Line 1806 of yacc.c  */
+#line 2129 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 550:
 
 /* Line 1806 of yacc.c  */
 #line 2135 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 549:
-
-/* Line 1806 of yacc.c  */
-#line 2141 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7965,6 +7989,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2156 "parser.yy"
-    {}
+#line 2146 "parser.yy"
+    { delete (yyvsp[(3) - (4)].en); }
     break;
 
@@ -7972,6 +7996,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2157 "parser.yy"
-    {}
+#line 2150 "parser.yy"
+    { delete (yyvsp[(1) - (1)].tok); }
     break;
 
@@ -7979,6 +8003,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2158 "parser.yy"
-    {}
+#line 2151 "parser.yy"
+    { delete (yyvsp[(1) - (1)].decl); }
     break;
 
@@ -7986,6 +8010,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2159 "parser.yy"
-    {}
+#line 2152 "parser.yy"
+    { delete (yyvsp[(1) - (1)].decl); }
     break;
 
@@ -7993,26 +8017,33 @@
 
 /* Line 1806 of yacc.c  */
-#line 2194 "parser.yy"
+#line 2153 "parser.yy"
+    { delete (yyvsp[(1) - (1)].decl); }
+    break;
+
+  case 560:
+
+/* Line 1806 of yacc.c  */
+#line 2188 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 561:
-
-/* Line 1806 of yacc.c  */
-#line 2197 "parser.yy"
+  case 562:
+
+/* Line 1806 of yacc.c  */
+#line 2191 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 562:
-
-/* Line 1806 of yacc.c  */
-#line 2199 "parser.yy"
+  case 563:
+
+/* Line 1806 of yacc.c  */
+#line 2193 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 563:
-
-/* Line 1806 of yacc.c  */
-#line 2204 "parser.yy"
+  case 564:
+
+/* Line 1806 of yacc.c  */
+#line 2198 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8021,428 +8052,428 @@
     break;
 
-  case 564:
-
-/* Line 1806 of yacc.c  */
-#line 2209 "parser.yy"
+  case 565:
+
+/* Line 1806 of yacc.c  */
+#line 2203 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 565:
-
-/* Line 1806 of yacc.c  */
-#line 2214 "parser.yy"
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2208 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 566:
-
-/* Line 1806 of yacc.c  */
-#line 2216 "parser.yy"
+  case 567:
+
+/* Line 1806 of yacc.c  */
+#line 2210 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 567:
-
-/* Line 1806 of yacc.c  */
-#line 2218 "parser.yy"
+  case 568:
+
+/* Line 1806 of yacc.c  */
+#line 2212 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 568:
+  case 569:
+
+/* Line 1806 of yacc.c  */
+#line 2217 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 570:
+
+/* Line 1806 of yacc.c  */
+#line 2219 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 571:
+
+/* Line 1806 of yacc.c  */
+#line 2221 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 572:
 
 /* Line 1806 of yacc.c  */
 #line 2223 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 573:
+
+/* Line 1806 of yacc.c  */
+#line 2228 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2230 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 575:
+
+/* Line 1806 of yacc.c  */
+#line 2239 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 577:
+
+/* Line 1806 of yacc.c  */
+#line 2242 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 578:
+
+/* Line 1806 of yacc.c  */
+#line 2247 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2249 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2251 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2256 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2258 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2260 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2265 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2267 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 586:
+
+/* Line 1806 of yacc.c  */
+#line 2269 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 590:
+
+/* Line 1806 of yacc.c  */
+#line 2284 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2286 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
+    break;
+
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2288 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2293 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 594:
+
+/* Line 1806 of yacc.c  */
+#line 2295 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 595:
+
+/* Line 1806 of yacc.c  */
+#line 2297 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2302 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2304 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2306 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 599:
+
+/* Line 1806 of yacc.c  */
+#line 2321 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 601:
+
+/* Line 1806 of yacc.c  */
+#line 2324 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 602:
+
+/* Line 1806 of yacc.c  */
+#line 2326 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2332 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2337 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2339 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2341 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2346 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 569:
-
-/* Line 1806 of yacc.c  */
-#line 2225 "parser.yy"
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2348 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 570:
-
-/* Line 1806 of yacc.c  */
-#line 2227 "parser.yy"
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2350 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2229 "parser.yy"
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2352 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2234 "parser.yy"
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2357 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2359 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2236 "parser.yy"
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2361 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2245 "parser.yy"
+  case 615:
+
+/* Line 1806 of yacc.c  */
+#line 2371 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 576:
-
-/* Line 1806 of yacc.c  */
-#line 2248 "parser.yy"
+  case 617:
+
+/* Line 1806 of yacc.c  */
+#line 2374 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 577:
-
-/* Line 1806 of yacc.c  */
-#line 2253 "parser.yy"
+  case 618:
+
+/* Line 1806 of yacc.c  */
+#line 2376 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 619:
+
+/* Line 1806 of yacc.c  */
+#line 2381 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2383 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2385 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2390 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2392 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2394 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2396 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2401 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 578:
-
-/* Line 1806 of yacc.c  */
-#line 2255 "parser.yy"
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2403 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2257 "parser.yy"
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2405 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 580:
-
-/* Line 1806 of yacc.c  */
-#line 2262 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2264 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2266 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2271 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2273 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2275 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 589:
-
-/* Line 1806 of yacc.c  */
-#line 2290 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2292 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
-    break;
-
-  case 591:
-
-/* Line 1806 of yacc.c  */
-#line 2294 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 592:
-
-/* Line 1806 of yacc.c  */
-#line 2299 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 593:
-
-/* Line 1806 of yacc.c  */
-#line 2301 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 594:
-
-/* Line 1806 of yacc.c  */
-#line 2303 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 595:
-
-/* Line 1806 of yacc.c  */
-#line 2308 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2310 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2312 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2327 "parser.yy"
+  case 629:
+
+/* Line 1806 of yacc.c  */
+#line 2436 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2330 "parser.yy"
+  case 631:
+
+/* Line 1806 of yacc.c  */
+#line 2439 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2332 "parser.yy"
+  case 632:
+
+/* Line 1806 of yacc.c  */
+#line 2441 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2338 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2343 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 605:
-
-/* Line 1806 of yacc.c  */
-#line 2345 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2347 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 607:
-
-/* Line 1806 of yacc.c  */
-#line 2352 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2354 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2356 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2358 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2363 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2365 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2367 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2377 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 616:
-
-/* Line 1806 of yacc.c  */
-#line 2380 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 617:
-
-/* Line 1806 of yacc.c  */
-#line 2382 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2387 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 619:
-
-/* Line 1806 of yacc.c  */
-#line 2389 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2391 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2396 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2398 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2400 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2402 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2407 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2409 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2411 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2442 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 630:
-
-/* Line 1806 of yacc.c  */
-#line 2445 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 631:
-
-/* Line 1806 of yacc.c  */
-#line 2447 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 632:
-
-/* Line 1806 of yacc.c  */
-#line 2452 "parser.yy"
+  case 633:
+
+/* Line 1806 of yacc.c  */
+#line 2446 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8451,8 +8482,8 @@
     break;
 
-  case 633:
-
-/* Line 1806 of yacc.c  */
-#line 2457 "parser.yy"
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2451 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8461,467 +8492,488 @@
     break;
 
-  case 634:
-
-/* Line 1806 of yacc.c  */
-#line 2465 "parser.yy"
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2459 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 635:
-
-/* Line 1806 of yacc.c  */
-#line 2467 "parser.yy"
+  case 636:
+
+/* Line 1806 of yacc.c  */
+#line 2461 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 636:
-
-/* Line 1806 of yacc.c  */
-#line 2469 "parser.yy"
+  case 637:
+
+/* Line 1806 of yacc.c  */
+#line 2463 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 637:
-
-/* Line 1806 of yacc.c  */
-#line 2474 "parser.yy"
+  case 638:
+
+/* Line 1806 of yacc.c  */
+#line 2468 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 638:
-
-/* Line 1806 of yacc.c  */
-#line 2476 "parser.yy"
+  case 639:
+
+/* Line 1806 of yacc.c  */
+#line 2470 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 639:
-
-/* Line 1806 of yacc.c  */
-#line 2481 "parser.yy"
+  case 640:
+
+/* Line 1806 of yacc.c  */
+#line 2475 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 640:
-
-/* Line 1806 of yacc.c  */
-#line 2483 "parser.yy"
+  case 641:
+
+/* Line 1806 of yacc.c  */
+#line 2477 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 642:
-
-/* Line 1806 of yacc.c  */
-#line 2498 "parser.yy"
+  case 643:
+
+/* Line 1806 of yacc.c  */
+#line 2492 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 643:
-
-/* Line 1806 of yacc.c  */
-#line 2500 "parser.yy"
+  case 644:
+
+/* Line 1806 of yacc.c  */
+#line 2494 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 644:
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2499 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2501 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2503 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 648:
 
 /* Line 1806 of yacc.c  */
 #line 2505 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 649:
+
+/* Line 1806 of yacc.c  */
+#line 2507 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 651:
+
+/* Line 1806 of yacc.c  */
+#line 2513 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2515 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2517 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2522 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
+    break;
+
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2524 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2526 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2532 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 658:
+
+/* Line 1806 of yacc.c  */
+#line 2534 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 660:
+
+/* Line 1806 of yacc.c  */
+#line 2540 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
+    break;
+
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2542 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
+    break;
+
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2544 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
+    break;
+
+  case 663:
+
+/* Line 1806 of yacc.c  */
+#line 2546 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
+    break;
+
+  case 665:
+
+/* Line 1806 of yacc.c  */
+#line 2561 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2563 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 667:
+
+/* Line 1806 of yacc.c  */
+#line 2568 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2507 "parser.yy"
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2570 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2509 "parser.yy"
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2572 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2511 "parser.yy"
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2574 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2513 "parser.yy"
+  case 671:
+
+/* Line 1806 of yacc.c  */
+#line 2576 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 650:
-
-/* Line 1806 of yacc.c  */
-#line 2519 "parser.yy"
+  case 673:
+
+/* Line 1806 of yacc.c  */
+#line 2582 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2521 "parser.yy"
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2584 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2523 "parser.yy"
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2586 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2528 "parser.yy"
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2591 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
 
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2530 "parser.yy"
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2593 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2532 "parser.yy"
+  case 678:
+
+/* Line 1806 of yacc.c  */
+#line 2595 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2538 "parser.yy"
+  case 680:
+
+/* Line 1806 of yacc.c  */
+#line 2602 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 682:
+
+/* Line 1806 of yacc.c  */
+#line 2613 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2540 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 659:
-
-/* Line 1806 of yacc.c  */
-#line 2546 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
-    break;
-
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2548 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
-    break;
-
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2550 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
-    break;
-
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2552 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
-    break;
-
-  case 664:
-
-/* Line 1806 of yacc.c  */
-#line 2567 "parser.yy"
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2616 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2618 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
+    break;
+
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2621 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2623 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
+    break;
+
+  case 687:
+
+/* Line 1806 of yacc.c  */
+#line 2625 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
+    break;
+
+  case 689:
+
+/* Line 1806 of yacc.c  */
+#line 2639 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2569 "parser.yy"
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2641 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2574 "parser.yy"
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2646 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2576 "parser.yy"
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2648 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 668:
-
-/* Line 1806 of yacc.c  */
-#line 2578 "parser.yy"
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2650 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2580 "parser.yy"
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2652 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2582 "parser.yy"
+  case 695:
+
+/* Line 1806 of yacc.c  */
+#line 2654 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 672:
-
-/* Line 1806 of yacc.c  */
-#line 2588 "parser.yy"
+  case 697:
+
+/* Line 1806 of yacc.c  */
+#line 2660 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2590 "parser.yy"
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2662 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2592 "parser.yy"
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2664 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2597 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
-    break;
-
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2599 "parser.yy"
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2669 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2601 "parser.yy"
+  case 701:
+
+/* Line 1806 of yacc.c  */
+#line 2671 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 679:
-
-/* Line 1806 of yacc.c  */
-#line 2608 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 681:
-
-/* Line 1806 of yacc.c  */
-#line 2619 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2622 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 683:
-
-/* Line 1806 of yacc.c  */
-#line 2624 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
-    break;
-
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2627 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 685:
-
-/* Line 1806 of yacc.c  */
-#line 2629 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
-    break;
-
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2631 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
-    break;
-
-  case 688:
-
-/* Line 1806 of yacc.c  */
-#line 2645 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2647 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2652 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2654 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 692:
-
-/* Line 1806 of yacc.c  */
-#line 2656 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2658 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2660 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 696:
-
-/* Line 1806 of yacc.c  */
-#line 2666 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2668 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2670 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2675 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2677 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 703:
-
-/* Line 1806 of yacc.c  */
-#line 2687 "parser.yy"
+  case 704:
+
+/* Line 1806 of yacc.c  */
+#line 2681 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 706:
+  case 707:
+
+/* Line 1806 of yacc.c  */
+#line 2691 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2693 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 709:
+
+/* Line 1806 of yacc.c  */
+#line 2695 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 710:
 
 /* Line 1806 of yacc.c  */
 #line 2697 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2699 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 707:
-
-/* Line 1806 of yacc.c  */
-#line 2699 "parser.yy"
+  case 712:
+
+/* Line 1806 of yacc.c  */
+#line 2701 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 708:
-
-/* Line 1806 of yacc.c  */
-#line 2701 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 709:
-
-/* Line 1806 of yacc.c  */
-#line 2703 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 710:
-
-/* Line 1806 of yacc.c  */
-#line 2705 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 711:
-
-/* Line 1806 of yacc.c  */
-#line 2707 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 712:
+  case 713:
+
+/* Line 1806 of yacc.c  */
+#line 2708 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2710 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2712 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 716:
 
 /* Line 1806 of yacc.c  */
 #line 2714 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 713:
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 717:
 
 /* Line 1806 of yacc.c  */
@@ -8930,33 +8982,33 @@
     break;
 
-  case 714:
+  case 718:
 
 /* Line 1806 of yacc.c  */
 #line 2718 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2720 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2722 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2720 "parser.yy"
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2724 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2722 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2724 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 718:
+  case 722:
 
 /* Line 1806 of yacc.c  */
@@ -8965,103 +9017,103 @@
     break;
 
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2728 "parser.yy"
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2731 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2733 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2738 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
+    break;
+
+  case 726:
+
+/* Line 1806 of yacc.c  */
+#line 2740 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
+    break;
+
+  case 728:
+
+/* Line 1806 of yacc.c  */
+#line 2767 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 732:
+
+/* Line 1806 of yacc.c  */
+#line 2778 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2780 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2782 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2784 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2786 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 737:
+
+/* Line 1806 of yacc.c  */
+#line 2788 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2795 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2797 "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 2730 "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 2732 "parser.yy"
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2799 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2737 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2739 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2744 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
-    break;
-
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2746 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
-    break;
-
-  case 727:
-
-/* Line 1806 of yacc.c  */
-#line 2773 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 731:
-
-/* Line 1806 of yacc.c  */
-#line 2784 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 732:
-
-/* Line 1806 of yacc.c  */
-#line 2786 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 733:
-
-/* Line 1806 of yacc.c  */
-#line 2788 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 734:
-
-/* Line 1806 of yacc.c  */
-#line 2790 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 735:
-
-/* Line 1806 of yacc.c  */
-#line 2792 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 736:
-
-/* Line 1806 of yacc.c  */
-#line 2794 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 737:
+  case 741:
 
 /* Line 1806 of yacc.c  */
@@ -9070,5 +9122,5 @@
     break;
 
-  case 738:
+  case 742:
 
 /* Line 1806 of yacc.c  */
@@ -9077,5 +9129,5 @@
     break;
 
-  case 739:
+  case 743:
 
 /* Line 1806 of yacc.c  */
@@ -9084,64 +9136,43 @@
     break;
 
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2807 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2809 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 742:
-
-/* Line 1806 of yacc.c  */
-#line 2811 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 743:
-
-/* Line 1806 of yacc.c  */
-#line 2816 "parser.yy"
+  case 744:
+
+/* Line 1806 of yacc.c  */
+#line 2810 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 744:
-
-/* Line 1806 of yacc.c  */
-#line 2821 "parser.yy"
+  case 745:
+
+/* Line 1806 of yacc.c  */
+#line 2815 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
 
-  case 745:
-
-/* Line 1806 of yacc.c  */
-#line 2823 "parser.yy"
+  case 746:
+
+/* Line 1806 of yacc.c  */
+#line 2817 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
-  case 746:
-
-/* Line 1806 of yacc.c  */
-#line 2825 "parser.yy"
+  case 747:
+
+/* Line 1806 of yacc.c  */
+#line 2819 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
-  case 749:
-
-/* Line 1806 of yacc.c  */
-#line 2849 "parser.yy"
+  case 750:
+
+/* Line 1806 of yacc.c  */
+#line 2843 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 750:
-
-/* Line 1806 of yacc.c  */
-#line 2851 "parser.yy"
+  case 751:
+
+/* Line 1806 of yacc.c  */
+#line 2845 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9150,5 +9181,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9153 "Parser/parser.cc"
+#line 9184 "Parser/parser.cc"
       default: break;
     }
@@ -9381,7 +9412,9 @@
 
 /* Line 2067 of yacc.c  */
-#line 2854 "parser.yy"
+#line 2848 "parser.yy"
 
 // ----end of grammar----
+
+extern char *yytext;
 
 void yyerror( const char * ) {
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/parser.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -276,4 +276,5 @@
 	InitializerNode *in;
 	OperKinds op;
+	std::string *str;
 	bool flag;
 
@@ -281,5 +282,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 284 "Parser/parser.h"
+#line 285 "Parser/parser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/parser.yy	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 11 18:02:57 2016
-// Update Count     : 1861
+// Last Modified On : Fri Aug 26 16:45:44 2016
+// Update Count     : 1964
 //
 
@@ -43,5 +43,4 @@
 #define YYDEBUG_LEXER_TEXT (yylval)						// lexer loads this up each time
 #define YYDEBUG 1										// get the pretty debugging code to compile
-extern char *yytext;
 
 #undef __GNUC_MINOR__
@@ -56,12 +55,13 @@
 #include "LinkageSpec.h"
 
-DeclarationNode *theTree = 0;							// the resulting parse tree
-LinkageSpec::Type linkage = LinkageSpec::Cforall;
-std::stack< LinkageSpec::Type > linkageStack;
-TypedefTable typedefTable;
-
-void appendStr( std::string &to, std::string *from ) {
+extern DeclarationNode * parseTree;
+extern LinkageSpec::Spec linkage;
+extern TypedefTable typedefTable;
+
+std::stack< LinkageSpec::Spec > linkageStack;
+
+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 ) );
+	to->insert( to->length() - 1, from->substr( 1, from->length() - 2 ) );
 } // appendStr
 %}
@@ -126,4 +126,5 @@
 	InitializerNode *in;
 	OperKinds op;
+	std::string *str;
 	bool flag;
 }
@@ -131,5 +132,6 @@
 %type<tok> identifier  no_01_identifier  no_attr_identifier zero_one
 %type<tok> identifier_or_type_name  no_attr_identifier_or_type_name  no_01_identifier_or_type_name
-%type<constant> string_literal_list
+%type<constant> string_literal
+%type<str> string_literal_list
 
 // expressions
@@ -143,5 +145,4 @@
 %type<en> constant_expression			assignment_expression		assignment_expression_opt
 %type<en> comma_expression				comma_expression_opt
-//%type<en> argument_expression_list		argument_expression			for_control_expression		assignment_opt
 %type<en> argument_expression_list		argument_expression			assignment_opt
 %type<fctl> for_control_expression
@@ -162,5 +163,5 @@
 %type<sn> case_value_list				case_label					case_label_list
 %type<sn> switch_clause_list_opt		switch_clause_list			choose_clause_list_opt		choose_clause_list
-%type<pn> handler_list					handler_clause				finally_clause
+%type<sn> handler_list					handler_clause				finally_clause
 
 // declarations
@@ -224,5 +225,5 @@
 %type<decl> paren_identifier paren_type
 
-%type<decl> storage_class storage_class_name storage_class_list
+%type<decl> storage_class storage_class_list
 
 %type<decl> sue_declaration_specifier sue_type_specifier
@@ -297,13 +298,9 @@
 
 push:
-		{
-			typedefTable.enterScope();
-		}
+		{ typedefTable.enterScope(); }
 	;
 
 pop:
-		{
-			typedefTable.leaveScope();
-		}
+		{ typedefTable.leaveScope(); }
 	;
 
@@ -312,5 +309,5 @@
 constant:
 		// ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant".
-INTEGERconstant									{ $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
+	INTEGERconstant								{ $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
 	| FLOATINGconstant							{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
 	| CHARACTERconstant							{ $$ = new ExpressionNode( build_constantChar( *$1 ) ); }
@@ -338,11 +335,15 @@
 	;
 
+string_literal:
+	string_literal_list							{ $$ = build_constantStr( *$1 ); }
+	;
+
 string_literal_list:									// juxtaposed strings are concatenated
-	STRINGliteral								{ $$ = build_constantStr( *$1 ); }
+	STRINGliteral								{ $$ = $1; } // conversion from tok to str
 	| string_literal_list STRINGliteral
 		{
-			appendStr( $1->get_constant()->get_value(), $2 );
+			appendStr( $1, $2 );						// append 2nd juxtaposed string to 1st
 			delete $2;									// allocated by lexer
-			$$ = $1;
+			$$ = $1;									// conversion from tok to str
 		}
 	;
@@ -371,5 +372,5 @@
 	| postfix_expression '(' argument_expression_list ')'
 		{ $$ = new ExpressionNode( build_func( $1, $3 ) ); }
-        // ambiguity with .0 so space required after field-selection, e.g.
+		// 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
@@ -389,5 +390,5 @@
 			Token fn;
 			fn.str = new std::string( "?{}" ); // location undefined
-			$$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_link( $3 ) ) );
+			$$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) );
 		}
 	;
@@ -396,5 +397,5 @@
 	argument_expression
 	| argument_expression_list ',' argument_expression
-		{ $$ = (ExpressionNode *)( $1->set_link( $3 )); }
+		{ $$ = (ExpressionNode *)( $1->set_last( $3 )); }
 	;
 
@@ -407,5 +408,5 @@
 field_list:												// CFA, tuple field selector
 	field
-	| field_list ',' field						{ $$ = (ExpressionNode *)$1->set_link( $3 ); }
+	| field_list ',' field						{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
 	;
 
@@ -413,5 +414,5 @@
 	no_attr_identifier
 		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
-        // ambiguity with .0 so space required after field-selection, e.g.
+		// ambiguity with .0 so space required after field-selection, e.g.
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| no_attr_identifier '.' field
@@ -431,5 +432,5 @@
 	| constant
 		{ $$ = $1; }
-	| string_literal_list
+	| string_literal
 		{ $$ = new ExpressionNode( $1 ); }
 	| EXTENSION cast_expression							// GCC
@@ -607,4 +608,5 @@
 assignment_operator:
 	'='											{ $$ = OperKinds::Assign; }
+	| ATassign									{ $$ = OperKinds::AtAssn; }
 	| MULTassign								{ $$ = OperKinds::MulAssn; }
 	| DIVassign									{ $$ = OperKinds::DivAssn; }
@@ -627,7 +629,7 @@
 		{ $$ = new ExpressionNode( build_tuple( $3 ) ); }
 	| '[' push ',' tuple_expression_list pop ']'
-		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_link( $4 ) ) ); }
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $4 ) ) ); }
 	| '[' push assignment_expression ',' tuple_expression_list pop ']'
-		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ); }
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_last( $5 ) ) ); }
 	;
 
@@ -635,5 +637,5 @@
 	assignment_expression_opt
 	| tuple_expression_list ',' assignment_expression_opt
-		{ $$ = (ExpressionNode *)$1->set_link( $3 ); }
+		{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
 	;
 
@@ -665,5 +667,5 @@
 			Token fn;
 			fn.str = new std::string( "^?{}" ); // location undefined
-			$$ = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ) ) );
+			$$ = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_last( $4 ) ) ) ) );
 		}
 	;
@@ -679,5 +681,5 @@
 compound_statement:
 	'{' '}'
-		{ $$ = new CompoundStmtNode( (StatementNode *)0 ); }
+		{ $$ = new StatementNode( build_compound( (StatementNode *)0 ) ); }
 	| '{'
 		// Two scopes are necessary because the block itself has a scope, but every declaration within the block also
@@ -686,5 +688,5 @@
 	  local_label_declaration_opt						// GCC, local labels
 	  block_item_list pop '}'							// C99, intermix declarations and statements
-		{ $$ = new CompoundStmtNode( $5 ); }
+		{ $$ = new StatementNode( build_compound( $5 ) ); }
 	;
 
@@ -692,5 +694,5 @@
 	block_item
 	| block_item_list push block_item
-		{ if ( $1 != 0 ) { $1->set_link( $3 ); $$ = $1; } }
+		{ if ( $1 != 0 ) { $1->set_last( $3 ); $$ = $1; } }
 	;
 
@@ -700,5 +702,5 @@
 	| EXTENSION declaration								// GCC
 		{	// mark all fields in list
-			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = $2; iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			$$ = new StatementNode( $2 );
@@ -712,10 +714,10 @@
 	statement
 	| statement_list statement
-		{ if ( $1 != 0 ) { $1->set_link( $2 ); $$ = $1; } }
+		{ if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } }
 	;
 
 expression_statement:
 	comma_expression_opt ';'
-		{ $$ = new StatementNode2( build_expr( $1 ) ); }
+		{ $$ = new StatementNode( build_expr( $1 ) ); }
 	;
 
@@ -723,12 +725,12 @@
 	IF '(' comma_expression ')' statement				%prec THEN
 		// explicitly deal with the shift/reduce conflict on if/else
-		{ $$ = new StatementNode2( build_if( $3, $5, nullptr ) ); }
+		{ $$ = new StatementNode( build_if( $3, $5, nullptr ) ); }
 	| IF '(' comma_expression ')' statement ELSE statement
-		{ $$ = new StatementNode2( build_if( $3, $5, $7 ) ); }
+		{ $$ = new StatementNode( build_if( $3, $5, $7 ) ); }
 	| SWITCH '(' comma_expression ')' case_clause		// CFA
-		{ $$ = new StatementNode2( build_switch( $3, $5 ) ); }
+		{ $$ = new StatementNode( build_switch( $3, $5 ) ); }
 	| SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA
 		{
-			StatementNode *sw = new StatementNode2( build_switch( $3, $8 ) );
+			StatementNode *sw = new StatementNode( build_switch( $3, $8 ) );
 			// The semantics of the declaration list is changed to include associated initialization, which is performed
 			// *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
@@ -736,12 +738,12 @@
 			// therefore, are removed from the grammar even though C allows it. The change also applies to choose
 			// statement.
-			$$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
+			$$ = $7 != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
 		}
 	| CHOOSE '(' comma_expression ')' case_clause		// CFA
-		{ $$ = new StatementNode2( build_switch( $3, $5 ) ); }
+		{ $$ = new StatementNode( build_switch( $3, $5 ) ); }
 	| CHOOSE '(' comma_expression ')' '{' push declaration_list_opt choose_clause_list_opt '}' // CFA
 		{
-			StatementNode *sw = new StatementNode2( build_switch( $3, $8 ) );
-			$$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
+			StatementNode *sw = new StatementNode( build_switch( $3, $8 ) );
+			$$ = $7 != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
 		}
 	;
@@ -758,13 +760,12 @@
 
 case_value_list:										// CFA
-	//case_value									{ $$ = new StatementNode( StatementNode::Case, $1, 0 ); }
-	case_value									{ $$ = new StatementNode2( build_case( $1 ) ); }
+	case_value									{ $$ = new StatementNode( build_case( $1 ) ); }
 		// convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5"
-	| case_value_list ',' case_value			{ $$ = (StatementNode *)($1->set_link( new StatementNode2( build_case( $3 ) ) ) ); }
+	| case_value_list ',' case_value			{ $$ = (StatementNode *)($1->set_last( new StatementNode( build_case( $3 ) ) ) ); }
 	;
 
 case_label:												// CFA
 	CASE case_value_list ':'					{ $$ = $2; }
-	| DEFAULT ':'								{ $$ = new StatementNode2( build_default() ); }
+	| DEFAULT ':'								{ $$ = new StatementNode( build_default() ); }
 		// A semantic check is required to ensure only one default clause per switch/choose statement.
 	;
@@ -772,9 +773,9 @@
 case_label_list:										// CFA
 	case_label
-	| case_label_list case_label				{ $$ = (StatementNode *)( $1->set_link( $2 )); }
+	| case_label_list case_label				{ $$ = (StatementNode *)( $1->set_last( $2 )); }
 	;
 
 case_clause:											// CFA
-	case_label_list statement					{ $$ = $1->append_last_case( new CompoundStmtNode( $2 ) ); }
+	case_label_list statement					{ $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); }
 	;
 
@@ -787,7 +788,7 @@
 switch_clause_list:										// CFA
 	case_label_list statement_list
-		{ $$ = $1->append_last_case( new CompoundStmtNode( $2 ) ); }
+		{ $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); }
 	| switch_clause_list case_label_list statement_list
-		{ $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( $3 ) ) ) ); }
+		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( $3 ) ) ) ) ); }
 	;
 
@@ -802,14 +803,14 @@
 		{ $$ = $1->append_last_case( $2 ); }
 	| case_label_list statement_list fall_through_opt
-		{ $$ = $1->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$2, *$3 ) ) ) ); }
+		{ $$ = $1->append_last_case( new StatementNode( build_compound( (StatementNode *)$2->set_last( $3 ) ) ) ); }
 	| choose_clause_list case_label_list fall_through
-		{ $$ = (StatementNode *)( $1->set_link( $2->append_last_case( $3 ))); }
+		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( $3 ))); }
 	| choose_clause_list case_label_list statement_list fall_through_opt
-		{ $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$3, *$4 ) ) ) ) ) ); }
+		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( (StatementNode *)$3->set_last( $4 ) ) ) ) ) ); }
 	;
 
 fall_through_opt:										// CFA
 	// empty
-		{ $$ = new StatementNode2( build_branch( "", BranchStmt::Break ) ); } // insert implicit break
+		{ $$ = new StatementNode( build_branch( BranchStmt::Break ) ); } // insert implicit break
 	| fall_through
 	;
@@ -824,9 +825,9 @@
 iteration_statement:
 	WHILE '(' comma_expression ')' statement
-		{ $$ = new StatementNode2( build_while( $3, $5 ) ); }
+		{ $$ = new StatementNode( build_while( $3, $5 ) ); }
 	| DO statement WHILE '(' comma_expression ')' ';'
-		{ $$ = new StatementNode2( build_while( $5, $2 ) ); }
+		{ $$ = new StatementNode( build_while( $5, $2 ) ); }
 	| FOR '(' push for_control_expression ')' statement
-		{ $$ = new StatementNode2( build_for( $4, $6 ) ); }
+		{ $$ = new StatementNode( build_for( $4, $6 ) ); }
 	;
 
@@ -840,68 +841,64 @@
 jump_statement:
 	GOTO IDENTIFIER ';'
-		{ $$ = new StatementNode2( build_branch( *$2, BranchStmt::Goto ) ); }
+		{ $$ = new StatementNode( build_branch( $2, BranchStmt::Goto ) ); }
 	| GOTO '*' comma_expression ';'						// GCC, computed goto
 		// The syntax for the GCC computed goto violates normal expression precedence, e.g., goto *i+3; => goto *(i+3);
 		// whereas normal operator precedence yields goto (*i)+3;
-		{ $$ = new StatementNode2( build_computedgoto( $3 ) ); }
+		{ $$ = new StatementNode( build_computedgoto( $3 ) ); }
 	| CONTINUE ';'
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement.
-		{ $$ = new StatementNode2( build_branch( "", BranchStmt::Continue ) ); }
+		{ $$ = new StatementNode( build_branch( BranchStmt::Continue ) ); }
 	| CONTINUE IDENTIFIER ';'							// CFA, multi-level continue
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
 		// the target of the transfer appears only at the start of an iteration statement.
-		{ $$ = new StatementNode2( build_branch( *$2, BranchStmt::Continue ) ); delete $2; }
+		{ $$ = new StatementNode( build_branch( $2, BranchStmt::Continue ) ); }
 	| BREAK ';'
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement.
-		{ $$ = new StatementNode2( build_branch( "", BranchStmt::Break ) ); }
+		{ $$ = new StatementNode( build_branch( BranchStmt::Break ) ); }
 	| BREAK IDENTIFIER ';'								// CFA, multi-level exit
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
 		// the target of the transfer appears only at the start of an iteration statement.
-		{ $$ = new StatementNode2( build_branch( *$2, BranchStmt::Break ) ); delete $2; }
+		{ $$ = new StatementNode( build_branch( $2, BranchStmt::Break ) ); }
 	| RETURN comma_expression_opt ';'
-		{ $$ = new StatementNode2( build_return( $2 ) ); }
+		{ $$ = new StatementNode( build_return( $2 ) ); }
 	| THROW assignment_expression_opt ';'				// handles rethrow
-		{ $$ = new StatementNode2( build_throw( $2 ) ); }
+		{ $$ = new StatementNode( build_throw( $2 ) ); }
 	| THROWRESUME assignment_expression_opt ';'			// handles reresume
-		{ $$ = new StatementNode2( build_throw( $2 ) ); }
+		{ $$ = new StatementNode( build_throw( $2 ) ); }
 	| THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume
-		{ $$ = new StatementNode2( build_throw( $2 ) ); }
+		{ $$ = new StatementNode( build_throw( $2 ) ); }
 	;
 
 exception_statement:
 	TRY compound_statement handler_list
-		{ $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }
+		{ $$ = new StatementNode( build_try( $2, $3, 0 ) ); }
 	| TRY compound_statement finally_clause
-		{ $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }
+		{ $$ = new StatementNode( build_try( $2, 0, $3 ) ); }
 	| TRY compound_statement handler_list finally_clause
-		{
-			$3->set_link( $4 );
-			$$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 ))));
-		}
+		{ $$ = new StatementNode( build_try( $2, $3, $4 ) ); }
 	;
 
 handler_list:
-		// There must be at least one catch clause
 	handler_clause
 		// ISO/IEC 9899:1999 Section 15.3(6 ) If present, a "..." handler shall be the last handler for its try block.
 	| CATCH '(' ELLIPSIS ')' compound_statement
-		{ $$ = StatementNode::newCatchStmt( 0, $5, true ); }
+		{ $$ = new StatementNode( build_catch( 0, $5, true ) ); }
 	| handler_clause CATCH '(' ELLIPSIS ')' compound_statement
-		{ $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); }
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); }
 	| CATCHRESUME '(' ELLIPSIS ')' compound_statement
-		{ $$ = StatementNode::newCatchStmt( 0, $5, true ); }
+		{ $$ = new StatementNode( build_catch( 0, $5, true ) ); }
 	| handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement
-		{ $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); }
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); }
 	;
 
 handler_clause:
 	CATCH '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = StatementNode::newCatchStmt( $5, $8 ); }
+		{ $$ = new StatementNode( build_catch( $5, $8 ) ); }
 	| handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); }
+	{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }
 	| CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = StatementNode::newCatchStmt( $5, $8 ); }
+		{ $$ = new StatementNode( build_catch( $5, $8 ) ); }
 	| handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); }
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }
 	;
 
@@ -909,6 +906,5 @@
 	FINALLY compound_statement
 		{
-			$$ = new StatementNode( StatementNode::Finally, 0, $2 );
-			std::cout << "Just created a finally node" << std::endl;
+			$$ = new StatementNode( build_finally( $2 ) );
 		}
 	;
@@ -937,14 +933,14 @@
 
 asm_statement:
-	ASM asm_volatile_opt '(' string_literal_list ')' ';'
-		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, 0 ); }
-	| ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ')' ';' // remaining GCC
-		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6 ); }
-	| ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ':' asm_operands_opt ')' ';'
-		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8 ); }
-	| ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ':' asm_operands_opt ':' asm_clobbers_list_opt ')' ';'
-		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8, $10 ); }
-	| ASM asm_volatile_opt GOTO '(' string_literal_list ':' ':' asm_operands_opt ':' asm_clobbers_list_opt ':' label_list ')' ';'
-		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $5, 0, $8, $10, $12 ); }
+	ASM asm_volatile_opt '(' string_literal ')' ';'
+		{ $$ = new StatementNode( build_asmstmt( $2, $4, 0 ) ); }
+	| ASM asm_volatile_opt '(' string_literal ':' asm_operands_opt ')' ';' // remaining GCC
+		{ $$ = new StatementNode( build_asmstmt( $2, $4, $6 ) ); }
+	| ASM asm_volatile_opt '(' string_literal ':' asm_operands_opt ':' asm_operands_opt ')' ';'
+		{ $$ = new StatementNode( build_asmstmt( $2, $4, $6, $8 ) ); }
+	| ASM asm_volatile_opt '(' string_literal ':' asm_operands_opt ':' asm_operands_opt ':' asm_clobbers_list_opt ')' ';'
+		{ $$ = new StatementNode( build_asmstmt( $2, $4, $6, $8, $10 ) ); }
+	| ASM asm_volatile_opt GOTO '(' string_literal ':' ':' asm_operands_opt ':' asm_clobbers_list_opt ':' label_list ')' ';'
+		{ $$ = new StatementNode( build_asmstmt( $2, $5, 0, $8, $10, $12 ) ); }
 	;
 
@@ -965,12 +961,12 @@
 	asm_operand
 	| asm_operands_list ',' asm_operand
-		{ $$ = (ExpressionNode *)$1->set_link( $3 ); }
+		{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
 	;
 
 asm_operand:											// GCC
-	string_literal_list '(' constant_expression ')'
-		{ $$ = new ExpressionNode( build_asm( 0, $1, $3 ) ); }
-	| '[' constant_expression ']' string_literal_list '(' constant_expression ')'
-	{ $$ = new ExpressionNode( build_asm( $2, $4, $6 ) ); }
+	string_literal '(' constant_expression ')'
+		{ $$ = new ExpressionNode( build_asmexpr( 0, $1, $3 ) ); }
+	| '[' constant_expression ']' string_literal '(' constant_expression ')'
+	{ $$ = new ExpressionNode( build_asmexpr( $2, $4, $6 ) ); }
 	;
 
@@ -978,15 +974,21 @@
 	// empty
 		{ $$ = 0; }										// use default argument
-	| string_literal_list
+	| string_literal
 		{ $$ = new ExpressionNode( $1 ); }
-	| asm_clobbers_list_opt ',' string_literal_list
-	{ $$ = (ExpressionNode *)$1->set_link( new ExpressionNode( $3 ) ); }
+	| asm_clobbers_list_opt ',' string_literal
+		{ $$ = (ExpressionNode *)$1->set_last( new ExpressionNode( $3 ) ); }
 	;
 
 label_list:
 	no_attr_identifier
-		{ $$ = new LabelNode(); $$->append_label( $1 ); }
+		{
+			$$ = new LabelNode(); $$->labels.push_back( *$1 );
+			delete $1;									// allocated by lexer
+		}
 	| label_list ',' no_attr_identifier
-		{ $$ = $1; $1->append_label( $3 ); }
+		{
+			$$ = $1; $1->labels.push_back( *$3 );
+			delete $3;									// allocated by lexer
+		}
 	;
 
@@ -1286,5 +1288,5 @@
 	type_qualifier_name
 	| attribute
-	//{ $$ = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
+		//{ $$ = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
 	;
 
@@ -1331,8 +1333,4 @@
 
 storage_class:
-	storage_class_name
-	;
-
-storage_class_name:
 	EXTERN
 		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
@@ -1344,9 +1342,11 @@
 		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
 	| INLINE											// C99
-		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
+		//{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
+		{ $$ = new DeclarationNode; $$->isInline = true; }
 	| FORTRAN											// C99
 		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
 	| NORETURN											// C11
-		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
+		//{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
+		{ $$ = new DeclarationNode; $$->isNoreturn = true; }
 	| THREADLOCAL										// C11
 		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
@@ -1504,5 +1504,5 @@
 	| EXTENSION field_declaring_list ';'				// GCC
 		{	// mark all fields in list
-			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = $2; iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			$$ = $2;
@@ -1750,7 +1750,7 @@
 	| initializer
 	| designation initializer					{ $$ = $2->set_designators( $1 ); }
-	| initializer_list ',' initializer			{ $$ = (InitializerNode *)( $1->set_link( $3 ) ); }
+	| initializer_list ',' initializer			{ $$ = (InitializerNode *)( $1->set_last( $3 ) ); }
 	| initializer_list ',' designation initializer
-		{ $$ = (InitializerNode *)( $1->set_link( $4->set_designators( $3 ) ) ); }
+		{ $$ = (InitializerNode *)( $1->set_last( $4->set_designators( $3 ) ) ); }
 	;
 
@@ -1774,5 +1774,5 @@
 	designator
 	| designator_list designator
-		{ $$ = (ExpressionNode *)( $1->set_link( $2 ) ); }
+		{ $$ = (ExpressionNode *)( $1->set_last( $2 ) ); }
 	//| designator_list designator						{ $$ = new ExpressionNode( $1, $2 ); }
 	;
@@ -1880,7 +1880,7 @@
 	| assignment_expression
 	| type_name_list ',' type_name
-		{ $$ = (ExpressionNode *)( $1->set_link( new ExpressionNode( build_typevalue( $3 ) ) ) ); }
+		{ $$ = (ExpressionNode *)( $1->set_last( new ExpressionNode( build_typevalue( $3 ) ) ) ); }
 	| type_name_list ',' assignment_expression
-		{ $$ = (ExpressionNode *)( $1->set_link( $3 )); }
+		{ $$ = (ExpressionNode *)( $1->set_last( $3 )); }
 	;
 
@@ -1981,11 +1981,5 @@
 		{}												// empty input file
 	| external_definition_list
-		{
-			if ( theTree ) {
-				theTree->appendList( $1 );
-			} else {
-				theTree = $1;
-			}
-		}
+		{ parseTree = parseTree != nullptr ? parseTree->appendList( $1 ) : $1;	}
 	;
 
@@ -1993,5 +1987,5 @@
 	external_definition
 	| external_definition_list push external_definition
-		{ $$ = ( $1 != NULL ) ? $1->appendList( $3 ) : $3; }
+		{ $$ = $1 != nullptr ? $1->appendList( $3 ) : $3; }
 	;
 
@@ -2009,5 +2003,5 @@
 	| EXTERN STRINGliteral
 		{
-			linkageStack.push( linkage );
+			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
 			linkage = LinkageSpec::fromString( *$2 );
 		}
@@ -2020,5 +2014,5 @@
 	| EXTENSION external_definition
 		{	// mark all fields in list
-			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = $2; iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			$$ = $2;
@@ -2121,5 +2115,5 @@
 asm_name_opt:											// GCC
 	// empty
-	| ASM '(' string_literal_list ')' attribute_list_opt
+	| ASM '(' string_literal_list ')' attribute_list_opt { delete $3; }	// FIX ME: unimplemented
 	;
 
@@ -2150,12 +2144,12 @@
 	// empty
 	| any_word
-	| any_word '(' comma_expression_opt ')'
+	| any_word '(' comma_expression_opt ')'	{ delete $3; } // FIX ME: unimplemented
 	;
 
 any_word:												// GCC
-	identifier_or_type_name {}
-	| storage_class_name {}
-	| basic_type_name {}
-	| type_qualifier {}
+	identifier_or_type_name { delete $1; }				// FIX ME: unimplemented
+	| storage_class { delete $1; }						// FIX ME: unimplemented
+	| basic_type_name { delete $1; }					// FIX ME: unimplemented
+	| type_qualifier { delete $1; }						// FIX ME: unimplemented
 	;
 
@@ -2855,4 +2849,6 @@
 // ----end of grammar----
 
+extern char *yytext;
+
 void yyerror( const char * ) {
 	std::cout << "Error ";
Index: src/Parser/parseutility.cc
===================================================================
--- src/Parser/parseutility.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/Parser/parseutility.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:30:39 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat May 16 15:31:33 2015
-// Update Count     : 2
+// Last Modified On : Sun Aug 14 23:45:03 2016
+// Update Count     : 3
 // 
 
@@ -17,4 +17,9 @@
 #include "SynTree/Type.h"
 #include "SynTree/Expression.h"
+
+// rewrite
+//    if ( x ) ...
+// as
+//    if ( (int)(x != 0) ) ...
 
 Expression *notZeroExpr( Expression *orig ) {
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -244,5 +244,5 @@
 		for ( std::list< Declaration* >::const_iterator i = members.begin(); i != members.end(); ++i ) {
 			if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType* >( *i ) ) {
-				alternatives.push_back( Alternative( new MemberExpr( dwt->clone(), expr->clone() ), env, newCost ) );
+				alternatives.push_back( Alternative( new MemberExpr( dwt, expr->clone() ), env, newCost ) );
 				renameTypes( alternatives.back().expr );
 			} else {
@@ -418,5 +418,5 @@
 	// /// Map of declaration uniqueIds (intended to be the assertions in an AssertionSet) to their parents and the number of times they've been included
 	//typedef std::unordered_map< UniqueId, std::unordered_map< UniqueId, unsigned > > AssertionParentSet;
-	
+
 	static const int recursionLimit = /*10*/ 4;  ///< Limit to depth of recursion satisfaction
 	//static const unsigned recursionParentLimit = 1;  ///< Limit to the number of times an assertion can recursively use itself
@@ -429,7 +429,7 @@
 		}
 	}
-	
+
 	template< typename ForwardIterator, typename OutputIterator >
-	void inferRecursive( ForwardIterator begin, ForwardIterator end, const Alternative &newAlt, OpenVarSet &openVars, const SymTab::Indexer &decls, const AssertionSet &newNeed, /*const AssertionParentSet &needParents,*/ 
+	void inferRecursive( ForwardIterator begin, ForwardIterator end, const Alternative &newAlt, OpenVarSet &openVars, const SymTab::Indexer &decls, const AssertionSet &newNeed, /*const AssertionParentSet &needParents,*/
 						 int level, const SymTab::Indexer &indexer, OutputIterator out ) {
 		if ( begin == end ) {
@@ -469,5 +469,5 @@
 				std::cerr << std::endl;
 			)
-			
+
 			AssertionSet newHave, newerNeed( newNeed );
 			TypeEnvironment newEnv( newAlt.env );
@@ -847,5 +847,5 @@
 		for ( std::list< Declaration* >::const_iterator i = members.begin(); i != members.end(); ++i ) {
 			if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType* >( *i ) ) {
-				alternatives.push_back( Alternative( new OffsetofExpr( aggInst->clone(), dwt->clone() ), env, Cost::zero ) );
+				alternatives.push_back( Alternative( new OffsetofExpr( aggInst->clone(), dwt ), env, Cost::zero ) );
 				renameTypes( alternatives.back().expr );
 			} else {
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/ResolvExpr/Resolver.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -446,7 +446,18 @@
 		} else if ( StructInstType * st = dynamic_cast< StructInstType * >( initContext ) ) {
 			resolveAggrInit( st->get_baseStruct(), iter, end );
-		} else if ( UnionInstType *st = dynamic_cast< UnionInstType * >( initContext ) ) {
+		} else if ( UnionInstType * st = dynamic_cast< UnionInstType * >( initContext ) ) {
 			resolveAggrInit( st->get_baseUnion(), iter, end );
+		} else if ( TypeInstType * tt = dynamic_cast< TypeInstType * >( initContext ) ) {
+			Type * base = tt->get_baseType()->get_base();
+			if ( base ) {
+				// know the implementation type, so try using that as the initContext
+				initContext = base;
+				visit( listInit );
+			} else {
+				// missing implementation type -- might be an unknown type variable, so try proceeding with the current init context
+				Visitor::visit( listInit );
+			}
 		} else {
+			assert( dynamic_cast< BasicType * >( initContext ) || dynamic_cast< PointerType * >( initContext ) );
 			// basic types are handled here
 			Visitor::visit( listInit );
@@ -539,14 +550,19 @@
 		}
 
-		// xxx - todo
-		// if ( InitTweak::isIntrinsicCallStmt( ctorInit->get_ctor() ) ) {
-		// 	// can reduce the constructor down to a SingleInit using the
-		// 	// second argument from the ctor call
-		// }
-
 		if ( InitTweak::isIntrinsicSingleArgCallStmt( ctorInit->get_dtor() ) ) {
 			delete ctorInit->get_dtor();
 			ctorInit->set_dtor( NULL );
 		}
+
+		// xxx - todo -- what about arrays?
+		// if ( dtor == NULL && InitTweak::isIntrinsicCallStmt( ctorInit->get_ctor() ) ) {
+		// 	// can reduce the constructor down to a SingleInit using the
+		// 	// second argument from the ctor call, since
+		// 	delete ctorInit->get_ctor();
+		// 	ctorInit->set_ctor( NULL );
+
+		// 	Expression * arg =
+		// 	ctorInit->set_init( new SingleInit( arg ) );
+		// }
 	}
 } // namespace ResolvExpr
Index: src/ResolvExpr/TypeEnvironment.cc
===================================================================
--- src/ResolvExpr/TypeEnvironment.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/ResolvExpr/TypeEnvironment.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// TypeEnvironment.cc -- 
+// TypeEnvironment.cc --
 //
 // Author           : Richard C. Bilson
@@ -23,4 +23,53 @@
 
 namespace ResolvExpr {
+	// adding this comparison operator significantly improves assertion resolution run time for
+	// some cases. The current resolution algorithm's speed partially depends on the order of
+	// assertions. Assertions which have fewer possible matches should appear before
+	// assertions which have more possible matches. This seems to imply that this could
+	// be further improved by providing an indexer as an additional argument and ordering based
+	// on the number of matches of the same kind (object, function) for the names of the
+	// declarations.
+	//
+	// I've seen a TU go from 54 minutes to 1 minute 34 seconds with the addition of this comparator.
+	bool AssertCompare::operator()( DeclarationWithType * d1, DeclarationWithType * d2 ) {
+			// Objects are always less than functions
+			if ( ObjectDecl * objectDecl1 = dynamic_cast< ObjectDecl * >( d1 ) ) {
+				if ( ObjectDecl * objectDecl2 = dynamic_cast< ObjectDecl * >( d2 ) ) {
+					// objects are ordered by name then type pointer, in that order
+					int cmp = objectDecl1->get_name().compare( objectDecl2->get_name() );
+					return cmp < 0 ||
+						( cmp == 0 && objectDecl1->get_type() < objectDecl2->get_type() );
+				} else {
+					return true;
+				}
+			} else if ( FunctionDecl * funcDecl1 = dynamic_cast< FunctionDecl * >( d1 ) ) {
+				if ( FunctionDecl * funcDecl2 = dynamic_cast< FunctionDecl * >( d2 ) ) {
+					// functions are ordered by name, # parameters, # returnVals, type pointer in that order
+					FunctionType * ftype1 = funcDecl1->get_functionType();
+					FunctionType * ftype2 = funcDecl2->get_functionType();
+					int numThings1 = ftype1->get_parameters().size() + ftype1->get_returnVals().size();
+					int numThings2 = ftype2->get_parameters().size() + ftype2->get_returnVals().size();
+					if ( numThings1 < numThings2 ) return true;
+					if ( numThings1 > numThings2 ) return false;
+
+					// if ( ftype1->get_parameters().size() < ftype2->get_parameters().size() ) return true;
+					// else if ( ftype1->get_parameters().size() > ftype2->get_parameters().size() ) return false;
+					// // same number of parameters
+					// if ( ftype1->get_returnVals().size() < ftype2->get_returnVals().size() ) return true;
+					// else if ( ftype1->get_returnVals().size() > ftype2->get_returnVals().size() ) return false;
+					// same number of return vals
+					// int cmp = funcDecl1->get_name().compare( funcDecl2->get_name() );
+					// if ( cmp < 0 ) return true;
+					// else if ( cmp > 0 ) return false;
+					// // same name
+					return ftype1 < ftype2;
+				} else {
+					return false;
+				}
+			} else {
+				assert( false );
+			}
+		}
+
 	void printAssertionSet( const AssertionSet &assertions, std::ostream &os, int indent ) {
 		for ( AssertionSet::const_iterator i = assertions.begin(); i != assertions.end(); ++i ) {
Index: src/ResolvExpr/TypeEnvironment.h
===================================================================
--- src/ResolvExpr/TypeEnvironment.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/ResolvExpr/TypeEnvironment.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// TypeEnvironment.h -- 
+// TypeEnvironment.h --
 //
 // Author           : Richard C. Bilson
@@ -28,5 +28,8 @@
 
 namespace ResolvExpr {
-	typedef std::map< DeclarationWithType*, bool > AssertionSet;
+	struct AssertCompare {
+		bool operator()( DeclarationWithType * d1, DeclarationWithType * d2 );
+	};
+	typedef std::map< DeclarationWithType*, bool, AssertCompare > AssertionSet;
 	typedef std::map< std::string, TypeDecl::Kind > OpenVarSet;
 
@@ -39,5 +42,5 @@
 		bool allowWidening;
 		TypeDecl::Kind kind;
-  
+
 		void initialize( const EqvClass &src, EqvClass &dest );
 		EqvClass();
@@ -62,5 +65,5 @@
 		void extractOpenVars( OpenVarSet &openVars ) const;
 		TypeEnvironment *clone() const { return new TypeEnvironment( *this ); }
-  
+
 		typedef std::list< EqvClass >::iterator iterator;
 		iterator begin() { return env.begin(); }
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/ResolvExpr/Unify.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -484,13 +484,13 @@
 		FunctionType *otherFunction = dynamic_cast< FunctionType* >( type2 );
 		if ( otherFunction && functionType->get_isVarArgs() == otherFunction->get_isVarArgs() ) {
-
-			if ( unifyDeclList( functionType->get_parameters().begin(), functionType->get_parameters().end(), otherFunction->get_parameters().begin(), otherFunction->get_parameters().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
-
-				if ( unifyDeclList( functionType->get_returnVals().begin(), functionType->get_returnVals().end(), otherFunction->get_returnVals().begin(), otherFunction->get_returnVals().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
-
-					markAssertions( haveAssertions, needAssertions, functionType );
-					markAssertions( haveAssertions, needAssertions, otherFunction );
-
-					result = true;
+			if ( functionType->get_parameters().size() == otherFunction->get_parameters().size() && functionType->get_returnVals().size() == otherFunction->get_returnVals().size() ) {
+				if ( unifyDeclList( functionType->get_parameters().begin(), functionType->get_parameters().end(), otherFunction->get_parameters().begin(), otherFunction->get_parameters().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
+					if ( unifyDeclList( functionType->get_returnVals().begin(), functionType->get_returnVals().end(), otherFunction->get_returnVals().begin(), otherFunction->get_returnVals().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
+
+						markAssertions( haveAssertions, needAssertions, functionType );
+						markAssertions( haveAssertions, needAssertions, otherFunction );
+
+						result = true;
+					} // if
 				} // if
 			} // if
Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SymTab/Autogen.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -68,5 +68,5 @@
 		copy->get_args().push_back( new VariableExpr( dstParam ) );
 		copy->get_args().push_back( new AddressExpr( new VariableExpr( srcParam ) ) );
-		copy->get_args().push_back( new SizeofExpr( unionType ) );
+		copy->get_args().push_back( new SizeofExpr( srcParam->get_type()->clone() ) );
 
 		*out++ = new ExprStmt( noLabels, copy );
@@ -420,8 +420,30 @@
 		copyCtorDecl->set_statements( assignDecl->get_statements()->clone() );
 
+		// create a constructor which takes the first member type as a parameter.
+		// for example, for Union A { int x; double y; }; generate
+		// void ?{}(A *, int)
+		// This is to mimic C's behaviour which initializes the first member of the union.
+		std::list<Declaration *> memCtors;
+		for ( Declaration * member : aggregateDecl->get_members() ) {
+			if ( DeclarationWithType * field = dynamic_cast< DeclarationWithType * >( member ) ) {
+				ObjectDecl * srcParam = new ObjectDecl( "src", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, field->get_type()->clone(), 0 );
+
+				FunctionType * memCtorType = ctorType->clone();
+				memCtorType->get_parameters().push_back( srcParam );
+				FunctionDecl * ctor = new FunctionDecl( "?{}", functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, memCtorType, new CompoundStmt( noLabels ), true, false );
+				ctor->fixUniqueId();
+
+				makeUnionFieldsAssignment( srcParam, dstParam, cloneWithParams( refType, unionParams ), back_inserter( ctor->get_statements()->get_kids() ) );
+				memCtors.push_back( ctor );
+				// only generate a ctor for the first field
+				break;
+			}
+		}
+
 		declsToAdd.push_back( assignDecl );
 		declsToAdd.push_back( ctorDecl );
 		declsToAdd.push_back( copyCtorDecl );
 		declsToAdd.push_back( dtorDecl );
+		declsToAdd.splice( declsToAdd.end(), memCtors );
 	}
 
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SymTab/Validate.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -58,4 +58,5 @@
 #include "Autogen.h"
 #include "ResolvExpr/typeops.h"
+#include <algorithm>
 
 #define debugPrint( x ) if ( doDebug ) { std::cout << x; }
@@ -162,5 +163,7 @@
 
 		typedef std::map< std::string, std::pair< TypedefDecl *, int > > TypedefMap;
+		typedef std::map< std::string, TypeDecl * > TypeDeclMap;
 		TypedefMap typedefNames;
+		TypeDeclMap typedeclNames;
 		int scopeLevel;
 	};
@@ -370,5 +373,9 @@
 		} // if
 
-		applySubstitution( ctx->get_parameters().begin(), ctx->get_parameters().end(), contextInst->get_parameters().begin(), ctx->get_members().begin(), ctx->get_members().end(), back_inserter( contextInst->get_members() ) );
+		// need to clone members of the context for ownership purposes
+		std::list< Declaration * > members;
+		std::transform( ctx->get_members().begin(), ctx->get_members().end(), back_inserter( members ), [](Declaration * dwt) { return dwt->clone(); } );
+
+		applySubstitution( ctx->get_parameters().begin(), ctx->get_parameters().end(), contextInst->get_parameters().begin(), members.begin(), members.end(), back_inserter( contextInst->get_members() ) );
 	}
 
@@ -521,4 +528,8 @@
 			delete typeInst;
 			return ret;
+		} else {
+			TypeDeclMap::const_iterator base = typedeclNames.find( typeInst->get_name() );
+			assert( base != typedeclNames.end() );
+			typeInst->set_baseType( base->second->clone() );
 		} // if
 		return typeInst;
@@ -565,4 +576,6 @@
 			typedefNames.erase( i ) ;
 		} // if
+
+		typedeclNames[ typeDecl->get_name() ] = typeDecl;
 		return typeDecl;
 	}
Index: src/SynTree/AggregateDecl.cc
===================================================================
--- src/SynTree/AggregateDecl.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SynTree/AggregateDecl.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// AggregateDecl.cc -- 
+// AggregateDecl.cc --
 //
 // Author           : Richard C. Bilson
Index: src/SynTree/Declaration.cc
===================================================================
--- src/SynTree/Declaration.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SynTree/Declaration.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Dec 09 14:08:29 2015
-// Update Count     : 12
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Aug 18 23:49:57 2016
+// Update Count     : 13
 //
 
@@ -27,5 +27,5 @@
 static IdMapType idMap;
 
-Declaration::Declaration( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage )
+Declaration::Declaration( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage )
 		: name( name ), storageClass( sc ), linkage( linkage ), isInline( false ), isNoreturn( false ), uniqueId( 0 ) {
 }
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SynTree/Declaration.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 21:03:17 2016
-// Update Count     : 39
+// Last Modified On : Thu Aug 18 23:50:24 2016
+// Update Count     : 40
 //
 
@@ -26,5 +26,5 @@
 class Declaration {
   public:
-	Declaration( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage );
+	Declaration( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage );
 	Declaration( const Declaration &other );
 	virtual ~Declaration();
@@ -34,6 +34,6 @@
 	DeclarationNode::StorageClass get_storageClass() const { return storageClass; }
 	void set_storageClass( DeclarationNode::StorageClass newValue ) { storageClass = newValue; }
-	LinkageSpec::Type get_linkage() const { return linkage; }
-	void set_linkage( LinkageSpec::Type newValue ) { linkage = newValue; }
+	LinkageSpec::Spec get_linkage() const { return linkage; }
+	void set_linkage( LinkageSpec::Spec newValue ) { linkage = newValue; }
 	bool get_isInline() const { return isInline; }
 	void set_isInline( bool newValue ) { isInline = newValue; }
@@ -56,5 +56,5 @@
 	std::string name;
 	DeclarationNode::StorageClass storageClass;
-	LinkageSpec::Type linkage;
+	LinkageSpec::Spec linkage;
 	bool isInline, isNoreturn;
 	UniqueId uniqueId;
@@ -64,5 +64,5 @@
 class DeclarationWithType : public Declaration {
   public:
-	DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, const std::list< Attribute * > & attributes );
+	DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes );
 	DeclarationWithType( const DeclarationWithType &other );
 	virtual ~DeclarationWithType();
@@ -97,5 +97,5 @@
 	typedef DeclarationWithType Parent;
   public:
-	ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes = std::list< Attribute * >(), bool isInline = false, bool isNoreturn = false );
+	ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes = std::list< Attribute * >(), bool isInline = false, bool isNoreturn = false );
 	ObjectDecl( const ObjectDecl &other );
 	virtual ~ObjectDecl();
@@ -123,5 +123,5 @@
 	typedef DeclarationWithType Parent;
   public:
-	FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, const std::list< Attribute * > attributes = std::list< Attribute * >() );
+	FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, const std::list< Attribute * > attributes = std::list< Attribute * >() );
 	FunctionDecl( const FunctionDecl &other );
 	virtual ~FunctionDecl();
Index: src/SynTree/DeclarationWithType.cc
===================================================================
--- src/SynTree/DeclarationWithType.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SynTree/DeclarationWithType.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Mon Apr 11 15:35:27 2016
-// Update Count     : 3
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Aug 18 23:50:41 2016
+// Update Count     : 4
 //
 
@@ -19,5 +19,5 @@
 #include "Common/utility.h"
 
-DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, const std::list< Attribute * > & attributes )
+DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes )
 		: Declaration( name, sc, linkage ), attributes( attributes ) {
 }
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SynTree/Expression.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -200,9 +200,8 @@
 
 OffsetofExpr::OffsetofExpr( const OffsetofExpr &other ) :
-	Expression( other ), type( maybeClone( other.type ) ), member( maybeClone( other.member ) ) {}
+	Expression( other ), type( maybeClone( other.type ) ), member( other.member ) {}
 
 OffsetofExpr::~OffsetofExpr() {
 	delete type;
-	delete member;
 }
 
@@ -359,4 +358,5 @@
 	assert( member );
 	os << std::string( indent + 2, ' ' );
+	os << (void*)member << " ";
 	member->print( os, indent + 2 );
 	os << std::endl;
@@ -383,5 +383,8 @@
 		Expression( _aname ), function(_function), args(_args) {}
 
-UntypedExpr::~UntypedExpr() {}
+UntypedExpr::~UntypedExpr() {
+	delete function;
+	deleteAll( args );
+}
 
 void UntypedExpr::print( std::ostream &os, int indent ) const {
Index: src/SynTree/FunctionDecl.cc
===================================================================
--- src/SynTree/FunctionDecl.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SynTree/FunctionDecl.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Fri May 06 15:59:48 2016
-// Update Count     : 19
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Aug 18 23:50:14 2016
+// Update Count     : 20
 //
 
@@ -22,5 +22,5 @@
 #include "Common/utility.h"
 
-FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, std::list< Attribute * > attributes )
+FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, std::list< Attribute * > attributes )
 		: Parent( name, sc, linkage, attributes ), type( type ), statements( statements ) {
 	set_isInline( isInline );
@@ -39,4 +39,5 @@
 	delete type;
 	delete statements;
+	deleteAll( oldDecls );
 }
 
Index: src/SynTree/Initializer.cc
===================================================================
--- src/SynTree/Initializer.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SynTree/Initializer.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -43,4 +43,5 @@
 
 SingleInit::~SingleInit() {
+	delete value;
 	deleteAll(designators);
 }
Index: src/SynTree/ObjectDecl.cc
===================================================================
--- src/SynTree/ObjectDecl.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SynTree/ObjectDecl.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Fri May 13 13:23:32 2016
-// Update Count     : 30
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Aug 18 23:50:33 2016
+// Update Count     : 31
 //
 
@@ -22,5 +22,5 @@
 #include "Statement.h"
 
-ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes, bool isInline, bool isNoreturn )
+ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes, bool isInline, bool isNoreturn )
 	: Parent( name, sc, linkage, attributes ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) {
 	set_isInline( isInline );
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SynTree/Statement.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug  4 11:25:20 2016
-// Update Count     : 61
+// Last Modified On : Fri Aug 12 13:58:48 2016
+// Update Count     : 62
 //
 
@@ -124,5 +124,9 @@
 	Statement( other ), condition( maybeClone( other.condition ) ), thenPart( maybeClone( other.thenPart ) ), elsePart( maybeClone( other.elsePart ) ) {}
 
-IfStmt::~IfStmt() {}
+IfStmt::~IfStmt() {
+	delete condition;
+	delete thenPart;
+	delete elsePart;
+}
 
 void IfStmt::print( std::ostream &os, int indent ) const {
@@ -155,4 +159,5 @@
 	delete condition;
 	// destroy statements
+	deleteAll( statements );
 }
 
@@ -183,4 +188,5 @@
 CaseStmt::~CaseStmt() {
 	delete condition;
+	deleteAll( stmts );
 }
 
@@ -216,4 +222,5 @@
 WhileStmt::~WhileStmt() {
 	delete body;
+	delete condition;
 }
 
@@ -290,4 +297,6 @@
 TryStmt::~TryStmt() {
 	delete block;
+	deleteAll( handlers );
+	delete finallyBlock;
 }
 
@@ -309,6 +318,6 @@
 }
 
-CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool isCatchRest ) :
-	Statement( labels ), decl ( _decl ), body( _body ), catchRest ( isCatchRest ) {
+CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool catchAny ) :
+	Statement( labels ), decl ( _decl ), body( _body ), catchRest ( catchAny ) {
 }
 
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SynTree/Statement.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug  4 11:26:02 2016
-// Update Count     : 64
+// Last Modified On : Fri Aug 12 13:57:46 2016
+// Update Count     : 65
 //
 
@@ -314,5 +314,5 @@
 class CatchStmt : public Statement {
   public:
-	CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool isCatchRest = false );
+	CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool catchAny = false );
 	CatchStmt( const CatchStmt &other );
 	virtual ~CatchStmt();
Index: src/SynTree/TypeSubstitution.h
===================================================================
--- src/SynTree/TypeSubstitution.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/SynTree/TypeSubstitution.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -169,7 +169,6 @@
 	TypeSubstitution sub = TypeSubstitution( formalBegin, formalEnd, actual );
 	for ( std::list< Declaration* >::iterator i = memberBegin; i != memberEnd; ++i ) {
-		Declaration *newdecl = (*i)->clone();
-		sub.apply( newdecl );
-		*out++ = newdecl;
+		sub.apply( *i );
+		*out++ = *i;
 	} // for
 }
Index: c/examples/asm.c
===================================================================
--- src/examples/asm.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ 	(revision )
@@ -1,29 +1,0 @@
-int fred() {
-    int src;
-    int dst;
-
-    asm volatile ( "mov %1, %0\n\t"
-		   "add $1, %0" : : : );
-
-    asm volatile ( "mov %1, %0\n\t"
-		   "add $1, %0"
-		   : "=" "r" (dst));
-
-    asm volatile ( "mov %1, %0\n\t"
-		   "add $1, %0"
-		   : "=r" (dst)
-		   : "r" (src));
-
-    asm ( "mov %1, %0\n\t"
-	  "add $1, %0"
-	  : "=r" (dst), "=r" (src)
-	  : [src] "r" (dst)
-	  : "r0");
-
-  L1: L2:
-    asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5"
-	       : /* No outputs. */
-	       : "r"(src), "r"(&dst)
-	       : "r5", "memory"
-	       : L1, L2 );
-}
Index: src/examples/gc_no_raii/premake4.lua
===================================================================
--- src/examples/gc_no_raii/premake4.lua	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/examples/gc_no_raii/premake4.lua	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -5,5 +5,5 @@
 includeDirList = {
 	"src/",
-	"../",
+	"../"
 }
 
@@ -48,5 +48,5 @@
 		linkoptions (linkOptionList)
 		includedirs (includeDirList)
-		files { "src/**.c" }
+		files { "src/**.c", "containers/**.c" }
 
 	configuration "debug"
Index: src/examples/gc_no_raii/src/gc.h
===================================================================
--- src/examples/gc_no_raii/src/gc.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/examples/gc_no_raii/src/gc.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -4,18 +4,18 @@
 #include "internal/collector.h"
 
-forall(otype T)
-static inline gcpointer(T) gcmalloc()
-{
-    gcpointer(T) ptr = { gc_allocate(sizeof(T)) };
-    ptr{};
-    gc_conditional_collect();
-    return ptr;
-}
+// forall(otype T)
+// static inline gcpointer(T) gcmalloc()
+// {
+//     gcpointer(T) ptr = { gc_allocate(sizeof(T)) };
+//     ptr{};
+//     gc_conditional_collect();
+//     return ptr;
+// }
 
 forall(otype T)
 static inline void gcmalloc(gcpointer(T)* ptr)
 {
-	ptr{ gc_allocate(sizeof(T)) };
-      (*ptr){};
+	ptr { gc_allocate(sizeof(T)) };
+	get(ptr) {};
       gc_conditional_collect();
 }
Index: src/examples/gc_no_raii/src/gcpointers.c
===================================================================
--- src/examples/gc_no_raii/src/gcpointers.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/examples/gc_no_raii/src/gcpointers.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -42,5 +42,5 @@
 }
 
-void gcpointer_ctor(gcpointer_t* this)
+void ?{}(gcpointer_t* this)
 {
 	this->ptr = (intptr_t)NULL;
@@ -48,5 +48,5 @@
 }
 
-void gcpointer_ctor(gcpointer_t* this, void* address)
+void ?{}(gcpointer_t* this, void* address)
 {
 	this->ptr = (intptr_t)address;
@@ -56,7 +56,7 @@
 }
 
-void gcpointer_ctor(gcpointer_t* this, gcpointer_t* other)
+void ?{}(gcpointer_t* this, gcpointer_t other)
 {
-	this->ptr = other->ptr;
+	this->ptr = other.ptr;
 	this->next = NULL;
 
@@ -64,5 +64,5 @@
 }
 
-void gcpointer_dtor(gcpointer_t* this)
+void ^?{}(gcpointer_t* this)
 {
 	unregister_ptr(this);
@@ -98,2 +98,30 @@
 	return this->ptr == (intptr_t)NULL;
 }
+
+forall(otype T) void ?{}(gcpointer(T)* this) {
+	(&this->internal) {};
+}
+
+forall(otype T) void ?{}(gcpointer(T)* this, void* address) {
+	(&this->internal) { address };
+}
+
+forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T)* other) {
+	(&this->internal) { other->internal };
+}
+
+forall(otype T) void ^?{}(gcpointer(T)* this) {
+	^?{}(&this->internal);
+}
+
+// forall(otype T) gcpointer(T) ?=?(gcpointer(T) this, gcpointer(T) rhs);
+//
+// forall(otype T) T *?(gcpointer(T) this);
+
+forall(otype T) T* get(gcpointer(T)* this) {
+	return (T*)this->internal.ptr;
+}
+//
+// //Logical operators
+// forall(otype T) int ?!=?(gcpointer(T) this, gcpointer(T) rhs);
+// forall(otype T) int ?==?(gcpointer(T) this, gcpointer(T) rhs);
Index: src/examples/gc_no_raii/src/gcpointers.h
===================================================================
--- src/examples/gc_no_raii/src/gcpointers.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/examples/gc_no_raii/src/gcpointers.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -30,5 +30,4 @@
 forall(otype T) void ?{}(gcpointer(T)* this);
 forall(otype T) void ?{}(gcpointer(T)* this, void* address);
-forall(otype T) void ctor(gcpointer(T)* this, void* address);
 forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T)* other);
 forall(otype T) void ^?{}(gcpointer(T)* this);
@@ -37,4 +36,5 @@
 
 forall(otype T) T *?(gcpointer(T) this);
+forall(otype T) T* get(gcpointer(T)* this);
 
 //Logical operators
Index: src/examples/gc_no_raii/src/internal/collector.c
===================================================================
--- src/examples/gc_no_raii/src/internal/collector.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/examples/gc_no_raii/src/internal/collector.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -8,4 +8,6 @@
 }
 #endif
+
+#include <fstream>
 
 #include "state.h"
@@ -36,5 +38,10 @@
 void* gc_allocate(size_t target_size)
 {
+	sout | "Allocating " | target_size | " bytes" | endl;
+
 	size_t size = gc_compute_size(target_size + sizeof(gc_object_header));
+
+	sout | "Object header size: " | sizeof(gc_object_header) | " bytes" | endl;
+	sout | "Actual allocation size: " | size | " bytes" | endl;
 
 	check(size < POOL_SIZE_BYTES);
Index: src/examples/gc_no_raii/src/internal/state.h
===================================================================
--- src/examples/gc_no_raii/src/internal/state.h	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/examples/gc_no_raii/src/internal/state.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -9,4 +9,5 @@
 }
 #endif
+#include <fstream>
 #include <vector>
 
@@ -37,4 +38,5 @@
 static inline bool gc_needs_collect(gc_state* state)
 {
+	sout | "Used Space: " | state->used_space | " bytes" | endl;
 	return state->used_space * 2 > state->total_space;
 }
Index: src/examples/gc_no_raii/test/gctest.c
===================================================================
--- src/examples/gc_no_raii/test/gctest.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/examples/gc_no_raii/test/gctest.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -2,4 +2,5 @@
 
 #include "gc.h"
+#include "internal/collector.h"
 
 #warning default test
@@ -8,7 +9,17 @@
 	sout | "Bonjour au monde!\n";
 
-	for(int i = 0; i < 1000000; i++) {
-		gcpointer(int) anInt;
-		gcmalloc(&anInt);
+	gcpointer(int) theInt;
+	gcmalloc(&theInt);
+
+	for(int i = 0; i < 10; i++) {
+		int a;
+		{
+			gcpointer(int) anInt;
+			gcmalloc(&anInt);
+		}
+		int p;
 	}
+
+	gc_collect(gc_get_state());
+	gc_conditional_collect();
 }
Index: src/include/assert.h
===================================================================
--- src/include/assert.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
+++ src/include/assert.h	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -0,0 +1,37 @@
+//
+// 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.
+//
+// assert.h --
+//
+// Author           : Peter A. Buhr
+// Created On       : Thu Aug 18 13:19:26 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Aug 18 13:25:55 2016
+// Update Count     : 4
+//
+
+#pragma once
+
+#include_next <assert.h>
+
+#define __STRINGIFY__(str) #str
+#define __VSTRINGIFY__(str) __STRINGIFY__(str)
+#define assertf(expr, fmt, ...) ((expr) ? static_cast<void>(0) : __assert_fail_f(__VSTRINGIFY__(expr), __FILE__, __LINE__, __PRETTY_FUNCTION__, fmt, ## __VA_ARGS__ ))
+
+void __assert_fail_f( const char *assertion, const char *file, unsigned int line, const char *function, const char *fmt, ... );
+
+template<typename T, typename U>
+static inline T safe_dynamic_cast(const U& src) {
+	T ret = dynamic_cast<T>(src);
+	assert(ret);
+	return ret;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End: //
Index: src/libcfa/Makefile.am
===================================================================
--- src/libcfa/Makefile.am	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/libcfa/Makefile.am	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 08:54:01 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Thu Aug 11 15:36:32 2016
-## Update Count     : 198
+## Last Modified On : Fri Aug 26 12:03:37 2016
+## Update Count     : 199
 ###############################################################################
 
@@ -56,5 +56,5 @@
 CC = ${abs_top_srcdir}/src/driver/cfa
 
-headers = limits stdlib math iostream fstream iterator rational # containers/vector
+headers = limits stdlib math iostream fstream iterator rational containers/vector
 libobjs = ${headers:=.o}
 
Index: src/libcfa/Makefile.in
===================================================================
--- src/libcfa/Makefile.in	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/libcfa/Makefile.in	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -89,7 +89,8 @@
 libcfa_a_AR = $(AR) $(ARFLAGS)
 libcfa_a_LIBADD =
+am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_1 = limits.$(OBJEXT) stdlib.$(OBJEXT) math.$(OBJEXT) \
 	iostream.$(OBJEXT) fstream.$(OBJEXT) iterator.$(OBJEXT) \
-	rational.$(OBJEXT)
+	rational.$(OBJEXT) containers/vector.$(OBJEXT)
 am_libcfa_a_OBJECTS = libcfa-prelude.$(OBJEXT) $(am__objects_1)
 libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS)
@@ -233,5 +234,5 @@
 cfalib_DATA = builtins.cf extras.cf prelude.cf
 MAINTAINERCLEANFILES = builtins.cf extras.cf ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
-headers = limits stdlib math iostream fstream iterator rational # containers/vector
+headers = limits stdlib math iostream fstream iterator rational containers/vector
 libobjs = ${headers:=.o}
 libcfa_a_SOURCES = libcfa-prelude.c ${headers:=.c}
@@ -303,4 +304,12 @@
 clean-libLIBRARIES:
 	-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
+containers/$(am__dirstamp):
+	@$(MKDIR_P) containers
+	@: > containers/$(am__dirstamp)
+containers/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) containers/$(DEPDIR)
+	@: > containers/$(DEPDIR)/$(am__dirstamp)
+containers/vector.$(OBJEXT): containers/$(am__dirstamp) \
+	containers/$(DEPDIR)/$(am__dirstamp)
 libcfa.a: $(libcfa_a_OBJECTS) $(libcfa_a_DEPENDENCIES) $(EXTRA_libcfa_a_DEPENDENCIES) 
 	$(AM_V_at)-rm -f libcfa.a
@@ -310,4 +319,5 @@
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
+	-rm -f containers/vector.$(OBJEXT)
 
 distclean-compile:
@@ -322,4 +332,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rational.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdlib.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/vector.Po@am__quote@
 
 .c.o:
@@ -494,4 +505,6 @@
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f containers/$(DEPDIR)/$(am__dirstamp)
+	-rm -f containers/$(am__dirstamp)
 
 maintainer-clean-generic:
@@ -504,5 +517,5 @@
 
 distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
+	-rm -rf ./$(DEPDIR) containers/$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
@@ -550,5 +563,5 @@
 
 maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
+	-rm -rf ./$(DEPDIR) containers/$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic \
Index: src/libcfa/containers/vector
===================================================================
--- src/libcfa/containers/vector	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/libcfa/containers/vector	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -1,10 +1,10 @@
-// 
+//
 // 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.
-// 
-// vector -- 
-// 
+//
+// vector --
+//
 // Author           : Thierry Delisle
 // Created On       : Tue Jul  5 18:00:07 2016
@@ -12,5 +12,5 @@
 // Last Modified On : Tue Jul  5 18:01:35 2016
 // Update Count     : 2
-// 
+//
 
 #pragma once
@@ -28,5 +28,5 @@
 	void ctor(allocator_t* const);
 	void dtor(allocator_t* const);
-	void realloc(allocator_t* const, size_t);
+	void realloc_storage(allocator_t* const, size_t);
 	T* data(allocator_t* const);
 };
@@ -64,5 +64,5 @@
 static inline void reserve(vector(T, allocator_t) *const this, size_t size)
 {
-	realloc(&this->storage, this->size+1);
+	realloc_storage(&this->storage, this->size+1);
 }
 
@@ -146,5 +146,5 @@
 
 forall(otype T)
-void realloc(heap_allocator(T) *const this, size_t size);
+void realloc_storage(heap_allocator(T) *const this, size_t size);
 
 forall(otype T)
Index: src/libcfa/containers/vector.c
===================================================================
--- src/libcfa/containers/vector.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/libcfa/containers/vector.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -1,10 +1,10 @@
-// 
+//
 // 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.
-// 
-// vector.c -- 
-// 
+//
+// vector.c --
+//
 // Author           : Thierry Delisle
 // Created On       : Tue Jul  5 18:07:52 2016
@@ -12,7 +12,7 @@
 // Last Modified On : Tue Jul  5 18:08:31 2016
 // Update Count     : 2
-// 
+//
 
-#include <containers/vector> 
+#include <containers/vector>
 
 #include <stdlib>
@@ -39,5 +39,5 @@
 void push_back(vector(T, allocator_t) *const this, T value)
 {
-	realloc(&this->storage, this->size+1);
+	realloc_storage(&this->storage, this->size+1);
 	data(&this->storage)[this->size] = value;
 	this->size++;
@@ -77,5 +77,5 @@
 
 forall(otype T)
-inline void realloc(heap_allocator(T) *const this, size_t size)
+inline void realloc_storage(heap_allocator(T) *const this, size_t size)
 {
 	enum { GROWTH_RATE = 2 };
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/main.cc	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -10,18 +10,20 @@
 // Created On       : Fri May 15 23:12:02 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Aug  6 16:17:41 2016
-// Update Count     : 210
+// Last Modified On : Sat Aug 20 12:52:22 2016
+// Update Count     : 403
 //
 
 #include <iostream>
 #include <fstream>
-#include <cstdlib>
-#include <cstdio>
-#include <getopt.h>
-#include "Parser/Parser.h"
-#include "Parser/ParseNode.h"
-#include "Parser/LinkageSpec.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Visitor.h"
+#include <signal.h>										// signal
+#include <getopt.h>										// getopt
+#include <execinfo.h>									// backtrace, backtrace_symbols_fd
+#include <cxxabi.h>										// __cxa_demangle
+
+using namespace std;
+
+#include "Parser/lex.h"
+#include "Parser/parser.h"
+#include "Parser/TypedefTable.h"
 #include "GenPoly/Lvalue.h"
 #include "GenPoly/Specialize.h"
@@ -32,31 +34,23 @@
 #include "CodeGen/FixNames.h"
 #include "ControlStruct/Mutate.h"
-#include "Tuples/Mutate.h"
-#include "Tuples/FunctionChecker.h"
-#include "SymTab/Mangler.h"
-#include "SymTab/Indexer.h"
 #include "SymTab/Validate.h"
 #include "ResolvExpr/AlternativePrinter.h"
 #include "ResolvExpr/Resolver.h"
 #include "MakeLibCfa.h"
-#include "InitTweak/Mutate.h"
 #include "InitTweak/GenInit.h"
 #include "InitTweak/FixInit.h"
-//#include "Explain/GenProlog.h"
-//#include "Try/Visit.h"
-
-#include "Common/SemanticError.h"
 #include "Common/UnimplementedError.h"
-
 #include "../config.h"
 
 using namespace std;
 
-#define OPTPRINT(x) \
-	if ( errorp ) std::cerr << x << std::endl;
-
-static void parse( FILE * input, LinkageSpec::Type t, bool shouldExit = false );
-static void dump( std::list< Declaration * > & translationUnit, std::ostream & out = std::cout );
-
+#define OPTPRINT(x) if ( errorp ) cerr << x << endl;
+
+
+LinkageSpec::Spec linkage = LinkageSpec::Cforall;
+TypedefTable typedefTable;
+DeclarationNode * parseTree = nullptr;					// program parse tree
+
+extern int yydebug;										// set for -g flag (Grammar)
 bool
 	astp = false,
@@ -66,5 +60,4 @@
 	exprp = false,
 	expraltp = false,
-	grammarp = false,
 	libcfap = false,
 	nopreludep = false,
@@ -78,139 +71,89 @@
 	codegenp = false;
 
-enum { Ast, Bbox, Bresolver, CtorInitFix, Expr, ExprAlt, Grammar, LibCFA, Nopreamble, Parse, Prototypes, Resolver, Symbol, Tree, Validate, };
-
-static struct option long_opts[] = {
-	{ "ast", no_argument, 0, Ast },
-	{ "before-box", no_argument, 0, Bbox },
-	{ "before-resolver", no_argument, 0, Bresolver },
-	{ "ctorinitfix", no_argument, 0, CtorInitFix },
-	{ "expr", no_argument, 0, Expr },
-	{ "expralt", no_argument, 0, ExprAlt },
-	{ "grammar", no_argument, 0, Grammar },
-	{ "libcfa", no_argument, 0, LibCFA },
-	{ "no-preamble", no_argument, 0, Nopreamble },
-	{ "parse", no_argument, 0, Parse },
-	{ "no-prototypes", no_argument, 0, Prototypes },
-	{ "resolver", no_argument, 0, Resolver },
-	{ "symbol", no_argument, 0, Symbol },
-	{ "tree", no_argument, 0, Tree },
-	{ "validate", no_argument, 0, Validate },
-	{ 0, 0, 0, 0 }
-};
-
-int main( int argc, char *argv[] ) {
-	FILE *input;
-	std::ostream *output = &std::cout;
-	int long_index;
-	std::list< Declaration * > translationUnit;
-	const char *filename = NULL;
-
-	opterr = 0;											// prevent getopt from printing error messages
-
-	int c;
-	while ( (c = getopt_long( argc, argv, "abBcefglnpqrstvyzD:F:", long_opts, &long_index )) != -1 ) {
-		switch ( c ) {
-		  case Ast:
-		  case 'a':										// dump AST
-			astp = true;
-			break;
-		  case Bresolver:
-		  case 'b':										// print before resolver steps
-			bresolvep = true;
-			break;
-		  case 'B':										// print before resolver steps
-			bboxp = true;
-			break;
-		  case CtorInitFix:
-		  case 'c':
-			ctorinitp = true;
-			break;
-		  case Expr:
-		  case 'e':										// dump AST after expression analysis
-			exprp = true;
-			break;
-		  case ExprAlt:
-		  case 'f':										// print alternatives for expressions
-			expraltp = true;
-			break;
-		  case Grammar:
-		  case 'g':										// bison debugging info (grammar rules)
-			grammarp = true;
-			break;
-		  case LibCFA:
-		  case 'l':										// generate libcfa.c
-			libcfap = true;
-			break;
-		  case Nopreamble:
-		  case 'n':										// do not read preamble
-			nopreludep = true;
-			break;
-		  case Prototypes:
-		  case 'p':										// generate prototypes for preamble functions
-			noprotop = true;
-			break;
-		  case Parse:
-		  case 'q':										// dump parse tree
-			parsep = true;
-			break;
-		  case Resolver:
-		  case 'r':										// print resolver steps
-			resolvep = true;
-			break;
-		  case Symbol:
-		  case 's':										// print symbol table events
-			symtabp = true;
-			break;
-		  case Tree:
-		  case 't':										// build in tree
-			treep = true;
-			break;
-		  case 'v':										// dump AST after decl validation pass
-			validp = true;
-			break;
-		  case 'y':
-			errorp = true;
-			break;
-		  case 'z':
-			codegenp = true;
-			break;
-		  case 'D':										// ignore -Dxxx
-			break;
-		  case 'F':										// source file-name without suffix
-			filename = optarg;
-			break;
-		  case '?':
-			cout << "Unknown option: '" << (char)optopt << "'" << endl;
-			exit( EXIT_FAILURE );
-		  default:
-			abort();
-		} // switch
-	} // while
+static void parse_cmdline( int argc, char *argv[], const char *& filename );
+static void parse( FILE * input, LinkageSpec::Spec linkage, bool shouldExit = false );
+static void dump( list< Declaration * > & translationUnit, ostream & out = cout );
+
+void sigSegvBusHandler( int sig_num ) {
+	enum { Frames = 50 };
+	void * array[Frames];
+	int size = backtrace( array, Frames );
+
+	cerr << "*CFA runtime error* program cfa-cpp terminated with "
+		 <<	(sig_num == SIGSEGV ? "segment fault" : "bus error")
+		 << " backtrace:" << endl;
+
+	char ** messages = backtrace_symbols( array, size );    
+
+	// skip first stack frame (points here)
+	for ( int i = 2; i < size - 2 && messages != nullptr; i += 1 ) {
+		char * mangled_name = nullptr, * offset_begin = nullptr, * offset_end = nullptr;
+		for ( char *p = messages[i]; *p; ++p ) {        // find parantheses and +offset
+			if (*p == '(') {
+				mangled_name = p; 
+			} else if (*p == '+') {
+				offset_begin = p;
+			} else if (*p == ')') {
+				offset_end = p;
+				break;
+			} // if
+		} // for
+
+		// if line contains symbol, attempt to demangle
+		if ( mangled_name && offset_begin && offset_end && mangled_name < offset_begin ) {
+			*mangled_name++ = '\0';
+			*offset_begin++ = '\0';
+			*offset_end++ = '\0';
+
+			int status;
+			char * real_name = __cxxabiv1::__cxa_demangle( mangled_name, 0, 0, &status );
+			if ( status == 0 ) {						// demangling successful ?
+				cerr << "(" << i - 2 << ") " << messages[i] << " : " 
+					 << real_name << "+" << offset_begin << offset_end << endl;
+
+			} else {									// otherwise, output mangled name
+				cerr << "(" << i - 2 << ") " << messages[i] << " : " 
+					 << mangled_name << "+" << offset_begin << offset_end << endl;
+			} // if
+			free( real_name );
+		} else {										// otherwise, print the whole line
+			cerr << "(" << i - 2 << ") " << messages[i] << endl;
+		} // if
+	} // for
+	free( messages );
+	exit( EXIT_FAILURE );
+} // sigSegvBusHandler
+
+int main( int argc, char * argv[] ) {
+	FILE * input;										// use FILE rather than istream because yyin is FILE
+	ostream *output = & cout;
+	const char *filename = nullptr;
+	list< Declaration * > translationUnit;
+
+	signal( SIGSEGV, sigSegvBusHandler );
+	signal( SIGBUS, sigSegvBusHandler );
+
+	parse_cmdline( argc, argv, filename );				// process command-line arguments
 
 	try {
 		// choose to read the program from a file or stdin
-		if ( optind < argc ) {
+		if ( optind < argc ) {							// any commands after the flags ? => input file name
 			input = fopen( argv[ optind ], "r" );
-			if ( ! input ) {
-				std::cout << "Error: cannot open " << argv[ optind ] << std::endl;
-				exit( EXIT_FAILURE );
-			} // if
+			assertf( input, "cannot open %s\n", argv[ optind ] );
 			// if running cfa-cpp directly, might forget to pass -F option (and really shouldn't have to)
-			if ( filename == NULL ) filename = argv[ optind ];
+			if ( filename == nullptr ) filename = argv[ optind ];
 			// prelude filename comes in differently
 			if ( libcfap ) filename = "prelude.cf";
 			optind += 1;
-		} else {
+		} else {										// no input file name
 			input = stdin;
 			// if running cfa-cpp directly, might forget to pass -F option. Since this takes from stdin, pass
 			// a fake name along
-			if ( filename == NULL ) filename = "stdin";
-		} // if
-
-		if ( optind < argc ) {
+			if ( filename == nullptr ) filename = "stdin";
+		} // if
+
+		if ( optind < argc ) {							// any commands after the flags and input file ? => output file name
 			output = new ofstream( argv[ optind ] );
 		} // if
-
-		Parser::get_parser().set_debug( grammarp );
 
 		// read in the builtins, extras, and the prelude
@@ -218,16 +161,10 @@
 			// -l is for initial build ONLY and builtins.cf is not in the lib directory so access it here.
 			FILE * builtins = fopen( libcfap | treep ? "builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
-			if ( builtins == NULL ) {
-				std::cerr << "Error: cannot open builtins.cf" << std::endl;
-				exit( EXIT_FAILURE );
-			} // if
+			assertf( builtins, "cannot open builtins.cf\n" );
 			parse( builtins, LinkageSpec::Compiler );
 
 			// read the extra prelude in, if not generating the cfa library
 			FILE * extras = fopen( libcfap | treep ? "extras.cf" : CFA_LIBDIR "/extras.cf", "r" );
-			if ( extras == NULL ) {
-				std::cerr << "Error: cannot open extras.cf" << std::endl;
-				exit( EXIT_FAILURE );
-			} // if
+			assertf( extras, "cannot open extras.cf\n" );
 			parse( extras, LinkageSpec::C );
 
@@ -235,24 +172,21 @@
 				// read the prelude in, if not generating the cfa library
 				FILE * prelude = fopen( treep ? "prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" );
-				if ( prelude == NULL ) {
-					std::cerr << "Error: cannot open prelude.cf" << std::endl;
-					exit( EXIT_FAILURE );
-				} // if
-
+				assertf( prelude, "cannot open prelude.cf\n" );
 				parse( prelude, LinkageSpec::Intrinsic );
 			} // if
 		} // if
 
-		parse( input, libcfap ? LinkageSpec::Intrinsic : LinkageSpec::Cforall, grammarp );
+		parse( input, libcfap ? LinkageSpec::Intrinsic : LinkageSpec::Cforall, yydebug );
 
 		if ( parsep ) {
-			Parser::get_parser().get_parseTree()->printList( std::cout );
-			Parser::get_parser().freeTree();
-			return 0;
-		} // if
-
-		buildList( Parser::get_parser().get_parseTree(), translationUnit );
-
-		Parser::get_parser().freeTree();
+			parseTree->printList( cout );
+			delete parseTree;
+			return 0;
+		} // if
+
+		buildList( parseTree, translationUnit );
+		delete parseTree;
+		parseTree = nullptr;
+
 		if ( astp ) {
 			dump( translationUnit );
@@ -268,5 +202,5 @@
 
 		if ( expraltp ) {
-			ResolvExpr::AlternativePrinter printer( std::cout );
+			ResolvExpr::AlternativePrinter printer( cout );
 			acceptAll( translationUnit, printer );
 			return 0;
@@ -300,5 +234,5 @@
 			dump( translationUnit );
 			return 0;
-		}
+		} // if
 
 		// fix ObjectDecl - replaces ConstructorInit nodes
@@ -308,5 +242,5 @@
 			dump ( translationUnit );
 			return 0;
-		}
+		} // if
 
 		OPTPRINT("instantiateGenerics")
@@ -322,5 +256,5 @@
 			dump( translationUnit );
 			return 0;
-		}
+		} // if
 		OPTPRINT( "box" )
 		GenPoly::box( translationUnit );
@@ -334,28 +268,28 @@
 		CodeGen::generate( translationUnit, *output, ! noprotop );
 
-		if ( output != &std::cout ) {
+		if ( output != &cout ) {
 			delete output;
 		} // if
 	} catch ( SemanticError &e ) {
 		if ( errorp ) {
-			std::cerr << "---AST at error:---" << std::endl;
-			dump( translationUnit, std::cerr );
-			std::cerr << std::endl << "---End of AST, begin error message:---\n" << std::endl;
-		}
-		e.print( std::cerr );
-		if ( output != &std::cout ) {
+			cerr << "---AST at error:---" << endl;
+			dump( translationUnit, cerr );
+			cerr << endl << "---End of AST, begin error message:---\n" << endl;
+		} // if
+		e.print( cerr );
+		if ( output != &cout ) {
 			delete output;
 		} // if
 		return 1;
 	} catch ( UnimplementedError &e ) {
-		std::cout << "Sorry, " << e.get_what() << " is not currently implemented" << std::endl;
-		if ( output != &std::cout ) {
+		cout << "Sorry, " << e.get_what() << " is not currently implemented" << endl;
+		if ( output != &cout ) {
 			delete output;
 		} // if
 		return 1;
 	} catch ( CompilerError &e ) {
-		std::cerr << "Compiler Error: " << e.get_what() << std::endl;
-		std::cerr << "(please report bugs to " << std::endl;
-		if ( output != &std::cout ) {
+		cerr << "Compiler Error: " << e.get_what() << endl;
+		cerr << "(please report bugs to " << endl;
+		if ( output != &cout ) {
 			delete output;
 		} // if
@@ -367,31 +301,142 @@
 } // main
 
-static void parse( FILE * input, LinkageSpec::Type linkage, bool shouldExit ) {
-	Parser::get_parser().set_linkage( linkage );
-	Parser::get_parser().parse( input );
+void parse_cmdline( int argc, char * argv[], const char *& filename ) {
+	enum { Ast, Bbox, Bresolver, CtorInitFix, Expr, ExprAlt, Grammar, LibCFA, Nopreamble, Parse, Prototypes, Resolver, Symbol, Tree, Validate, };
+
+	static struct option long_opts[] = {
+		{ "ast", no_argument, 0, Ast },
+		{ "before-box", no_argument, 0, Bbox },
+		{ "before-resolver", no_argument, 0, Bresolver },
+		{ "ctorinitfix", no_argument, 0, CtorInitFix },
+		{ "expr", no_argument, 0, Expr },
+		{ "expralt", no_argument, 0, ExprAlt },
+		{ "grammar", no_argument, 0, Grammar },
+		{ "libcfa", no_argument, 0, LibCFA },
+		{ "no-preamble", no_argument, 0, Nopreamble },
+		{ "parse", no_argument, 0, Parse },
+		{ "no-prototypes", no_argument, 0, Prototypes },
+		{ "resolver", no_argument, 0, Resolver },
+		{ "symbol", no_argument, 0, Symbol },
+		{ "tree", no_argument, 0, Tree },
+		{ "validate", no_argument, 0, Validate },
+		{ 0, 0, 0, 0 }
+	}; // long_opts
+	int long_index;
+
+	opterr = 0;											// (global) prevent getopt from printing error messages
+
+	int c;
+	while ( (c = getopt_long( argc, argv, "abBcefglnpqrstvyzD:F:", long_opts, &long_index )) != -1 ) {
+		switch ( c ) {
+		  case Ast:
+		  case 'a':										// dump AST
+			astp = true;
+			break;
+		  case Bresolver:
+		  case 'b':										// print before resolver steps
+			bresolvep = true;
+			break;
+		  case 'B':										// print before resolver steps
+			bboxp = true;
+			break;
+		  case CtorInitFix:
+		  case 'c':
+			ctorinitp = true;
+			break;
+		  case Expr:
+		  case 'e':										// dump AST after expression analysis
+			exprp = true;
+			break;
+		  case ExprAlt:
+		  case 'f':										// print alternatives for expressions
+			expraltp = true;
+			break;
+		  case Grammar:
+		  case 'g':										// bison debugging info (grammar rules)
+			yydebug = true;
+			break;
+		  case LibCFA:
+		  case 'l':										// generate libcfa.c
+			libcfap = true;
+			break;
+		  case Nopreamble:
+		  case 'n':										// do not read preamble
+			nopreludep = true;
+			break;
+		  case Prototypes:
+		  case 'p':										// generate prototypes for preamble functions
+			noprotop = true;
+			break;
+		  case Parse:
+		  case 'q':										// dump parse tree
+			parsep = true;
+			break;
+		  case Resolver:
+		  case 'r':										// print resolver steps
+			resolvep = true;
+			break;
+		  case Symbol:
+		  case 's':										// print symbol table events
+			symtabp = true;
+			break;
+		  case Tree:
+		  case 't':										// build in tree
+			treep = true;
+			break;
+		  case 'v':										// dump AST after decl validation pass
+			validp = true;
+			break;
+		  case 'y':
+			errorp = true;
+			break;
+		  case 'z':
+			codegenp = true;
+			break;
+		  case 'D':										// ignore -Dxxx
+			break;
+		  case 'F':										// source file-name without suffix
+			filename = optarg;
+			break;
+		  case '?':
+			assertf( false, "Unknown option: '%c'\n", (char)optopt );
+		  default:
+			abort();
+		} // switch
+	} // while
+} // parse_cmdline
+
+static void parse( FILE * input, LinkageSpec::Spec linkage, bool shouldExit ) {
+	extern int yyparse( void );
+	extern FILE * yyin;
+	extern int yylineno;
+
+	::linkage = linkage;								// set globals
+	yyin = input;
+	yylineno = 1;
+	typedefTable.enterScope();
+	int parseStatus = yyparse();
 
 	fclose( input );
-	if ( shouldExit || Parser::get_parser().get_parseStatus() != 0 ) {
-		exit( Parser::get_parser().get_parseStatus() );
+	if ( shouldExit || parseStatus != 0 ) {
+		exit( parseStatus );
 	} // if
-}
+} // parse
 
 static bool notPrelude( Declaration * decl ) {
 	return ! LinkageSpec::isBuiltin( decl->get_linkage() );
-}
-
-static void dump( std::list< Declaration * > & translationUnit, std::ostream & out ) {
-	std::list< Declaration * > decls;
+} // notPrelude
+
+static void dump( list< Declaration * > & translationUnit, ostream & out ) {
+	list< Declaration * > decls;
+
 	if ( noprotop ) {
-		filter( translationUnit.begin(), translationUnit.end(),
-				std::back_inserter( decls ), notPrelude );
+		filter( translationUnit.begin(), translationUnit.end(), back_inserter( decls ), notPrelude );
 	} else {
 		decls = translationUnit;
-	}
+	} // if
 
 	printAll( decls, out );
 	deleteAll( translationUnit );
-}
-
+} // dump
 
 // Local Variables: //
Index: src/tests/.expect/32/declarationSpecifier.txt
===================================================================
--- src/tests/.expect/32/declarationSpecifier.txt	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
+++ src/tests/.expect/32/declarationSpecifier.txt	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -0,0 +1,567 @@
+extern void *malloc(unsigned int __size);
+extern void free(void *__ptr);
+extern void abort(void);
+extern int atexit(void (*__func)(void));
+extern void exit(int __status);
+extern int printf(const char *__restrict __format, ...);
+volatile const short __x1__CVs_1;
+static volatile const short __x2__CVs_1;
+static volatile const short __x3__CVs_1;
+static volatile const short __x4__CVs_1;
+static volatile const short __x5__CVs_1;
+static volatile const short __x6__CVs_1;
+static volatile const short __x7__CVs_1;
+static volatile const short __x8__CVs_1;
+struct __anonymous0 {
+    int __i__i_1;
+};
+static inline struct __anonymous0 ___operator_assign__F13s__anonymous0_P13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
+    ((void)((*___dst__P13s__anonymous0_1).__i__i_1=___src__13s__anonymous0_1.__i__i_1));
+    return ((struct __anonymous0 )___src__13s__anonymous0_1);
+}
+static inline void ___constructor__F_P13s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))=___src__13s__anonymous0_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous0i_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+volatile const struct __anonymous0 __x10__CV13s__anonymous0_1;
+struct __anonymous1 {
+    int __i__i_1;
+};
+static inline struct __anonymous1 ___operator_assign__F13s__anonymous1_P13s__anonymous113s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, struct __anonymous1 ___src__13s__anonymous1_1){
+    ((void)((*___dst__P13s__anonymous1_1).__i__i_1=___src__13s__anonymous1_1.__i__i_1));
+    return ((struct __anonymous1 )___src__13s__anonymous1_1);
+}
+static inline void ___constructor__F_P13s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous113s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, struct __anonymous1 ___src__13s__anonymous1_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))=___src__13s__anonymous1_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous1i_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+volatile const struct __anonymous1 __x11__CV13s__anonymous1_1;
+struct __anonymous2 {
+    int __i__i_1;
+};
+static inline struct __anonymous2 ___operator_assign__F13s__anonymous2_P13s__anonymous213s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, struct __anonymous2 ___src__13s__anonymous2_1){
+    ((void)((*___dst__P13s__anonymous2_1).__i__i_1=___src__13s__anonymous2_1.__i__i_1));
+    return ((struct __anonymous2 )___src__13s__anonymous2_1);
+}
+static inline void ___constructor__F_P13s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous213s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, struct __anonymous2 ___src__13s__anonymous2_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))=___src__13s__anonymous2_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous2i_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+volatile const struct __anonymous2 __x12__CV13s__anonymous2_1;
+struct __anonymous3 {
+    int __i__i_1;
+};
+static inline struct __anonymous3 ___operator_assign__F13s__anonymous3_P13s__anonymous313s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, struct __anonymous3 ___src__13s__anonymous3_1){
+    ((void)((*___dst__P13s__anonymous3_1).__i__i_1=___src__13s__anonymous3_1.__i__i_1));
+    return ((struct __anonymous3 )___src__13s__anonymous3_1);
+}
+static inline void ___constructor__F_P13s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous313s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, struct __anonymous3 ___src__13s__anonymous3_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))=___src__13s__anonymous3_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous3i_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static volatile const struct __anonymous3 __x13__CV13s__anonymous3_1;
+struct __anonymous4 {
+    int __i__i_1;
+};
+static inline struct __anonymous4 ___operator_assign__F13s__anonymous4_P13s__anonymous413s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, struct __anonymous4 ___src__13s__anonymous4_1){
+    ((void)((*___dst__P13s__anonymous4_1).__i__i_1=___src__13s__anonymous4_1.__i__i_1));
+    return ((struct __anonymous4 )___src__13s__anonymous4_1);
+}
+static inline void ___constructor__F_P13s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous413s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, struct __anonymous4 ___src__13s__anonymous4_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))=___src__13s__anonymous4_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous4i_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static volatile const struct __anonymous4 __x14__CV13s__anonymous4_1;
+struct __anonymous5 {
+    int __i__i_1;
+};
+static inline struct __anonymous5 ___operator_assign__F13s__anonymous5_P13s__anonymous513s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, struct __anonymous5 ___src__13s__anonymous5_1){
+    ((void)((*___dst__P13s__anonymous5_1).__i__i_1=___src__13s__anonymous5_1.__i__i_1));
+    return ((struct __anonymous5 )___src__13s__anonymous5_1);
+}
+static inline void ___constructor__F_P13s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous513s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, struct __anonymous5 ___src__13s__anonymous5_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))=___src__13s__anonymous5_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous5i_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static volatile const struct __anonymous5 __x15__CV13s__anonymous5_1;
+struct __anonymous6 {
+    int __i__i_1;
+};
+static inline struct __anonymous6 ___operator_assign__F13s__anonymous6_P13s__anonymous613s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, struct __anonymous6 ___src__13s__anonymous6_1){
+    ((void)((*___dst__P13s__anonymous6_1).__i__i_1=___src__13s__anonymous6_1.__i__i_1));
+    return ((struct __anonymous6 )___src__13s__anonymous6_1);
+}
+static inline void ___constructor__F_P13s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous613s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, struct __anonymous6 ___src__13s__anonymous6_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))=___src__13s__anonymous6_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous6i_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static volatile const struct __anonymous6 __x16__CV13s__anonymous6_1;
+struct __anonymous7 {
+    int __i__i_1;
+};
+static inline struct __anonymous7 ___operator_assign__F13s__anonymous7_P13s__anonymous713s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, struct __anonymous7 ___src__13s__anonymous7_1){
+    ((void)((*___dst__P13s__anonymous7_1).__i__i_1=___src__13s__anonymous7_1.__i__i_1));
+    return ((struct __anonymous7 )___src__13s__anonymous7_1);
+}
+static inline void ___constructor__F_P13s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous713s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, struct __anonymous7 ___src__13s__anonymous7_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))=___src__13s__anonymous7_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous7i_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static volatile const struct __anonymous7 __x17__CV13s__anonymous7_1;
+volatile const short __x20__CVs_1;
+static volatile const short __x21__CVs_1;
+static volatile const short __x22__CVs_1;
+static volatile const short __x23__CVs_1;
+static volatile const short __x24__CVs_1;
+static volatile const short __x25__CVs_1;
+static volatile const short __x26__CVs_1;
+static volatile const short __x27__CVs_1;
+struct __anonymous8 {
+    short __i__s_1;
+};
+static inline struct __anonymous8 ___operator_assign__F13s__anonymous8_P13s__anonymous813s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, struct __anonymous8 ___src__13s__anonymous8_1){
+    ((void)((*___dst__P13s__anonymous8_1).__i__s_1=___src__13s__anonymous8_1.__i__s_1));
+    return ((struct __anonymous8 )___src__13s__anonymous8_1);
+}
+static inline void ___constructor__F_P13s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous813s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, struct __anonymous8 ___src__13s__anonymous8_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))=___src__13s__anonymous8_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous8s_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+volatile const struct __anonymous8 __x29__CV13s__anonymous8_1;
+struct __anonymous9 {
+    short __i__s_1;
+};
+static inline struct __anonymous9 ___operator_assign__F13s__anonymous9_P13s__anonymous913s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, struct __anonymous9 ___src__13s__anonymous9_1){
+    ((void)((*___dst__P13s__anonymous9_1).__i__s_1=___src__13s__anonymous9_1.__i__s_1));
+    return ((struct __anonymous9 )___src__13s__anonymous9_1);
+}
+static inline void ___constructor__F_P13s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous913s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, struct __anonymous9 ___src__13s__anonymous9_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))=___src__13s__anonymous9_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous9s_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+volatile const struct __anonymous9 __x30__CV13s__anonymous9_1;
+struct __anonymous10 {
+    short __i__s_1;
+};
+static inline struct __anonymous10 ___operator_assign__F14s__anonymous10_P14s__anonymous1014s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, struct __anonymous10 ___src__14s__anonymous10_1){
+    ((void)((*___dst__P14s__anonymous10_1).__i__s_1=___src__14s__anonymous10_1.__i__s_1));
+    return ((struct __anonymous10 )___src__14s__anonymous10_1);
+}
+static inline void ___constructor__F_P14s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1014s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, struct __anonymous10 ___src__14s__anonymous10_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))=___src__14s__anonymous10_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous10s_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+volatile const struct __anonymous10 __x31__CV14s__anonymous10_1;
+struct __anonymous11 {
+    short __i__s_1;
+};
+static inline struct __anonymous11 ___operator_assign__F14s__anonymous11_P14s__anonymous1114s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, struct __anonymous11 ___src__14s__anonymous11_1){
+    ((void)((*___dst__P14s__anonymous11_1).__i__s_1=___src__14s__anonymous11_1.__i__s_1));
+    return ((struct __anonymous11 )___src__14s__anonymous11_1);
+}
+static inline void ___constructor__F_P14s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1114s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, struct __anonymous11 ___src__14s__anonymous11_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))=___src__14s__anonymous11_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous11s_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+static volatile const struct __anonymous11 __x32__CV14s__anonymous11_1;
+struct __anonymous12 {
+    short __i__s_1;
+};
+static inline struct __anonymous12 ___operator_assign__F14s__anonymous12_P14s__anonymous1214s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, struct __anonymous12 ___src__14s__anonymous12_1){
+    ((void)((*___dst__P14s__anonymous12_1).__i__s_1=___src__14s__anonymous12_1.__i__s_1));
+    return ((struct __anonymous12 )___src__14s__anonymous12_1);
+}
+static inline void ___constructor__F_P14s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1214s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, struct __anonymous12 ___src__14s__anonymous12_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))=___src__14s__anonymous12_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous12s_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+static volatile const struct __anonymous12 __x33__CV14s__anonymous12_1;
+struct __anonymous13 {
+    short __i__s_1;
+};
+static inline struct __anonymous13 ___operator_assign__F14s__anonymous13_P14s__anonymous1314s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, struct __anonymous13 ___src__14s__anonymous13_1){
+    ((void)((*___dst__P14s__anonymous13_1).__i__s_1=___src__14s__anonymous13_1.__i__s_1));
+    return ((struct __anonymous13 )___src__14s__anonymous13_1);
+}
+static inline void ___constructor__F_P14s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1314s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, struct __anonymous13 ___src__14s__anonymous13_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))=___src__14s__anonymous13_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous13s_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+static volatile const struct __anonymous13 __x34__CV14s__anonymous13_1;
+struct __anonymous14 {
+    short __i__s_1;
+};
+static inline struct __anonymous14 ___operator_assign__F14s__anonymous14_P14s__anonymous1414s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, struct __anonymous14 ___src__14s__anonymous14_1){
+    ((void)((*___dst__P14s__anonymous14_1).__i__s_1=___src__14s__anonymous14_1.__i__s_1));
+    return ((struct __anonymous14 )___src__14s__anonymous14_1);
+}
+static inline void ___constructor__F_P14s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1414s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, struct __anonymous14 ___src__14s__anonymous14_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))=___src__14s__anonymous14_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous14s_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+static volatile const struct __anonymous14 __x35__CV14s__anonymous14_1;
+struct __anonymous15 {
+    short __i__s_1;
+};
+static inline struct __anonymous15 ___operator_assign__F14s__anonymous15_P14s__anonymous1514s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, struct __anonymous15 ___src__14s__anonymous15_1){
+    ((void)((*___dst__P14s__anonymous15_1).__i__s_1=___src__14s__anonymous15_1.__i__s_1));
+    return ((struct __anonymous15 )___src__14s__anonymous15_1);
+}
+static inline void ___constructor__F_P14s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1514s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, struct __anonymous15 ___src__14s__anonymous15_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))=___src__14s__anonymous15_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous15s_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+static volatile const struct __anonymous15 __x36__CV14s__anonymous15_1;
+static inline volatile const int __f11__FCVi___1();
+static inline volatile const int __f12__FCVi___1();
+static inline volatile const int __f13__FCVi___1();
+static inline volatile const int __f14__FCVi___1();
+static inline volatile const int __f15__FCVi___1();
+static inline volatile const int __f16__FCVi___1();
+static inline volatile const int __f17__FCVi___1();
+static inline volatile const int __f18__FCVi___1();
+static inline volatile const short __f21__FCVs___1();
+static inline volatile const short __f22__FCVs___1();
+static inline volatile const short __f23__FCVs___1();
+static inline volatile const short __f24__FCVs___1();
+static inline volatile const short __f25__FCVs___1();
+static inline volatile const short __f26__FCVs___1();
+static inline volatile const short __f27__FCVs___1();
+static inline volatile const short __f28__FCVs___1();
+struct __anonymous16 {
+    int __i__i_1;
+};
+static inline struct __anonymous16 ___operator_assign__F14s__anonymous16_P14s__anonymous1614s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, struct __anonymous16 ___src__14s__anonymous16_1){
+    ((void)((*___dst__P14s__anonymous16_1).__i__i_1=___src__14s__anonymous16_1.__i__i_1));
+    return ((struct __anonymous16 )___src__14s__anonymous16_1);
+}
+static inline void ___constructor__F_P14s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1614s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, struct __anonymous16 ___src__14s__anonymous16_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))=___src__14s__anonymous16_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous16i_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous16 __f31__FCV14s__anonymous16___1();
+struct __anonymous17 {
+    int __i__i_1;
+};
+static inline struct __anonymous17 ___operator_assign__F14s__anonymous17_P14s__anonymous1714s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, struct __anonymous17 ___src__14s__anonymous17_1){
+    ((void)((*___dst__P14s__anonymous17_1).__i__i_1=___src__14s__anonymous17_1.__i__i_1));
+    return ((struct __anonymous17 )___src__14s__anonymous17_1);
+}
+static inline void ___constructor__F_P14s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1714s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, struct __anonymous17 ___src__14s__anonymous17_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))=___src__14s__anonymous17_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous17i_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous17 __f32__FCV14s__anonymous17___1();
+struct __anonymous18 {
+    int __i__i_1;
+};
+static inline struct __anonymous18 ___operator_assign__F14s__anonymous18_P14s__anonymous1814s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, struct __anonymous18 ___src__14s__anonymous18_1){
+    ((void)((*___dst__P14s__anonymous18_1).__i__i_1=___src__14s__anonymous18_1.__i__i_1));
+    return ((struct __anonymous18 )___src__14s__anonymous18_1);
+}
+static inline void ___constructor__F_P14s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1814s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, struct __anonymous18 ___src__14s__anonymous18_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))=___src__14s__anonymous18_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous18i_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous18 __f33__FCV14s__anonymous18___1();
+struct __anonymous19 {
+    int __i__i_1;
+};
+static inline struct __anonymous19 ___operator_assign__F14s__anonymous19_P14s__anonymous1914s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, struct __anonymous19 ___src__14s__anonymous19_1){
+    ((void)((*___dst__P14s__anonymous19_1).__i__i_1=___src__14s__anonymous19_1.__i__i_1));
+    return ((struct __anonymous19 )___src__14s__anonymous19_1);
+}
+static inline void ___constructor__F_P14s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1914s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, struct __anonymous19 ___src__14s__anonymous19_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))=___src__14s__anonymous19_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous19i_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous19 __f34__FCV14s__anonymous19___1();
+struct __anonymous20 {
+    int __i__i_1;
+};
+static inline struct __anonymous20 ___operator_assign__F14s__anonymous20_P14s__anonymous2014s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, struct __anonymous20 ___src__14s__anonymous20_1){
+    ((void)((*___dst__P14s__anonymous20_1).__i__i_1=___src__14s__anonymous20_1.__i__i_1));
+    return ((struct __anonymous20 )___src__14s__anonymous20_1);
+}
+static inline void ___constructor__F_P14s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous2014s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, struct __anonymous20 ___src__14s__anonymous20_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))=___src__14s__anonymous20_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous20i_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous20 __f35__FCV14s__anonymous20___1();
+struct __anonymous21 {
+    int __i__i_1;
+};
+static inline struct __anonymous21 ___operator_assign__F14s__anonymous21_P14s__anonymous2114s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, struct __anonymous21 ___src__14s__anonymous21_1){
+    ((void)((*___dst__P14s__anonymous21_1).__i__i_1=___src__14s__anonymous21_1.__i__i_1));
+    return ((struct __anonymous21 )___src__14s__anonymous21_1);
+}
+static inline void ___constructor__F_P14s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous2114s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, struct __anonymous21 ___src__14s__anonymous21_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))=___src__14s__anonymous21_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous21i_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous21 __f36__FCV14s__anonymous21___1();
+struct __anonymous22 {
+    int __i__i_1;
+};
+static inline struct __anonymous22 ___operator_assign__F14s__anonymous22_P14s__anonymous2214s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, struct __anonymous22 ___src__14s__anonymous22_1){
+    ((void)((*___dst__P14s__anonymous22_1).__i__i_1=___src__14s__anonymous22_1.__i__i_1));
+    return ((struct __anonymous22 )___src__14s__anonymous22_1);
+}
+static inline void ___constructor__F_P14s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous2214s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, struct __anonymous22 ___src__14s__anonymous22_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))=___src__14s__anonymous22_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous22i_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous22 __f37__FCV14s__anonymous22___1();
+struct __anonymous23 {
+    int __i__i_1;
+};
+static inline struct __anonymous23 ___operator_assign__F14s__anonymous23_P14s__anonymous2314s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, struct __anonymous23 ___src__14s__anonymous23_1){
+    ((void)((*___dst__P14s__anonymous23_1).__i__i_1=___src__14s__anonymous23_1.__i__i_1));
+    return ((struct __anonymous23 )___src__14s__anonymous23_1);
+}
+static inline void ___constructor__F_P14s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous2314s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, struct __anonymous23 ___src__14s__anonymous23_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))=___src__14s__anonymous23_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous23i_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous23 __f38__FCV14s__anonymous23___1();
+static inline volatile const short __f41__FCVs___1();
+static inline volatile const short __f42__FCVs___1();
+static inline volatile const short __f43__FCVs___1();
+static inline volatile const short __f44__FCVs___1();
+static inline volatile const short __f45__FCVs___1();
+static inline volatile const short __f46__FCVs___1();
+static inline volatile const short __f47__FCVs___1();
+static inline volatile const short __f48__FCVs___1();
+int main(int __argc__i_1, const char **__argv__PPCc_1){
+    int _retVal0 = { 0 };
+    ((void)(_retVal0=0) /* ?{} */);
+    return ((int )_retVal0);
+}
+__attribute__ ((constructor(),)) static void _init_declarationSpecifier(void){
+    ((void)___constructor__F_P13s__anonymous0_autogen___1(((struct __anonymous0 *)(&__x10__CV13s__anonymous0_1))));
+    ((void)___constructor__F_P13s__anonymous1_autogen___1(((struct __anonymous1 *)(&__x11__CV13s__anonymous1_1))));
+    ((void)___constructor__F_P13s__anonymous2_autogen___1(((struct __anonymous2 *)(&__x12__CV13s__anonymous2_1))));
+    ((void)___constructor__F_P13s__anonymous3_autogen___1(((struct __anonymous3 *)(&__x13__CV13s__anonymous3_1))));
+    ((void)___constructor__F_P13s__anonymous4_autogen___1(((struct __anonymous4 *)(&__x14__CV13s__anonymous4_1))));
+    ((void)___constructor__F_P13s__anonymous5_autogen___1(((struct __anonymous5 *)(&__x15__CV13s__anonymous5_1))));
+    ((void)___constructor__F_P13s__anonymous6_autogen___1(((struct __anonymous6 *)(&__x16__CV13s__anonymous6_1))));
+    ((void)___constructor__F_P13s__anonymous7_autogen___1(((struct __anonymous7 *)(&__x17__CV13s__anonymous7_1))));
+    ((void)___constructor__F_P13s__anonymous8_autogen___1(((struct __anonymous8 *)(&__x29__CV13s__anonymous8_1))));
+    ((void)___constructor__F_P13s__anonymous9_autogen___1(((struct __anonymous9 *)(&__x30__CV13s__anonymous9_1))));
+    ((void)___constructor__F_P14s__anonymous10_autogen___1(((struct __anonymous10 *)(&__x31__CV14s__anonymous10_1))));
+    ((void)___constructor__F_P14s__anonymous11_autogen___1(((struct __anonymous11 *)(&__x32__CV14s__anonymous11_1))));
+    ((void)___constructor__F_P14s__anonymous12_autogen___1(((struct __anonymous12 *)(&__x33__CV14s__anonymous12_1))));
+    ((void)___constructor__F_P14s__anonymous13_autogen___1(((struct __anonymous13 *)(&__x34__CV14s__anonymous13_1))));
+    ((void)___constructor__F_P14s__anonymous14_autogen___1(((struct __anonymous14 *)(&__x35__CV14s__anonymous14_1))));
+    ((void)___constructor__F_P14s__anonymous15_autogen___1(((struct __anonymous15 *)(&__x36__CV14s__anonymous15_1))));
+}
+__attribute__ ((destructor(),)) static void _destroy_declarationSpecifier(void){
+    ((void)___destructor__F_P14s__anonymous15_autogen___1(((struct __anonymous15 *)(&__x36__CV14s__anonymous15_1))));
+    ((void)___destructor__F_P14s__anonymous14_autogen___1(((struct __anonymous14 *)(&__x35__CV14s__anonymous14_1))));
+    ((void)___destructor__F_P14s__anonymous13_autogen___1(((struct __anonymous13 *)(&__x34__CV14s__anonymous13_1))));
+    ((void)___destructor__F_P14s__anonymous12_autogen___1(((struct __anonymous12 *)(&__x33__CV14s__anonymous12_1))));
+    ((void)___destructor__F_P14s__anonymous11_autogen___1(((struct __anonymous11 *)(&__x32__CV14s__anonymous11_1))));
+    ((void)___destructor__F_P14s__anonymous10_autogen___1(((struct __anonymous10 *)(&__x31__CV14s__anonymous10_1))));
+    ((void)___destructor__F_P13s__anonymous9_autogen___1(((struct __anonymous9 *)(&__x30__CV13s__anonymous9_1))));
+    ((void)___destructor__F_P13s__anonymous8_autogen___1(((struct __anonymous8 *)(&__x29__CV13s__anonymous8_1))));
+    ((void)___destructor__F_P13s__anonymous7_autogen___1(((struct __anonymous7 *)(&__x17__CV13s__anonymous7_1))));
+    ((void)___destructor__F_P13s__anonymous6_autogen___1(((struct __anonymous6 *)(&__x16__CV13s__anonymous6_1))));
+    ((void)___destructor__F_P13s__anonymous5_autogen___1(((struct __anonymous5 *)(&__x15__CV13s__anonymous5_1))));
+    ((void)___destructor__F_P13s__anonymous4_autogen___1(((struct __anonymous4 *)(&__x14__CV13s__anonymous4_1))));
+    ((void)___destructor__F_P13s__anonymous3_autogen___1(((struct __anonymous3 *)(&__x13__CV13s__anonymous3_1))));
+    ((void)___destructor__F_P13s__anonymous2_autogen___1(((struct __anonymous2 *)(&__x12__CV13s__anonymous2_1))));
+    ((void)___destructor__F_P13s__anonymous1_autogen___1(((struct __anonymous1 *)(&__x11__CV13s__anonymous1_1))));
+    ((void)___destructor__F_P13s__anonymous0_autogen___1(((struct __anonymous0 *)(&__x10__CV13s__anonymous0_1))));
+}
Index: src/tests/.expect/32/extension.txt
===================================================================
--- src/tests/.expect/32/extension.txt	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/.expect/32/extension.txt	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -70,4 +70,9 @@
 static inline void ___destructor__F_P2uU_autogen___1(union U *___dst__P2uU_1){
 }
+static inline void ___constructor__F_P2uUi_autogen___1(union U *___dst__P2uU_1, int __src__i_1){
+    void *_tmp_cp_ret2;
+    ((void)((_tmp_cp_ret2=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&__src__i_1)), sizeof(int ))) , _tmp_cp_ret2));
+    ((void)(_tmp_cp_ret2) /* ^?{} */);
+}
 __extension__ enum E {
     __R__C2eE_1,
@@ -89,7 +94,7 @@
     __extension__ int __c__i_2;
     ((void)(__extension__ __a__i_2=(__extension__ __b__i_2+__extension__ __c__i_2)));
-    int _tmp_cp_ret2;
-    ((void)((_tmp_cp_ret2=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret2));
-    ((void)(_tmp_cp_ret2) /* ^?{} */);
+    int _tmp_cp_ret3;
+    ((void)((_tmp_cp_ret3=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret3));
+    ((void)(_tmp_cp_ret3) /* ^?{} */);
     ((void)__extension__ sizeof(3));
     ((void)__extension__ (((int )(3!=0)) || ((int )(4!=0))));
Index: src/tests/.expect/32/gccExtensions.txt
===================================================================
--- src/tests/.expect/32/gccExtensions.txt	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/.expect/32/gccExtensions.txt	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -5,8 +5,18 @@
 extern void exit(int __status);
 extern int printf(const char *__restrict __format, ...);
+extern int __x__i_1;
 int main(int __argc__i_1, const char **__argv__PPCc_1){
     asm ( "nop" :  :  :  );
     asm ( "nop" :  :  :  );
     asm ( "nop" :  :  :  );
+    static int __y__i_2;
+    static int *__z__Pi_2;
+    int __src__i_2;
+    int __dst__i_2;
+    asm volatile ( "mov %1, %0\n\tadd $1, %0" :  :  :  );
+    asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) :  :  );
+    asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) : "r" ( __src__i_2 ) :  );
+    asm ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ), "=r" ( __src__i_2 ) : [ __src__i_2 ] "r" ( __dst__i_2 ) : "r0" );
+    L2: L1: asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5" :  : "r" ( __src__i_2 ), "r" ( (&__dst__i_2) ) : "r5", "memory" : L1, L2 );
     double _Complex __c1__Xd_2;
     double _Complex __c2__Xd_2;
@@ -14,4 +24,14 @@
     const int __i2__Ci_2;
     const int __i3__Ci_2;
+    inline int __f1__Fi___2(){
+    }
+    inline int __f2__Fi___2(){
+    }
+    int __s1__i_2;
+    int __s2__i_2;
+    volatile int __v1__Vi_2;
+    volatile int __v2__Vi_2;
+    int __t1___2;
+    int __t2___2;
     __extension__ const int __ex__Ci_2;
     struct S {
@@ -64,14 +84,4 @@
     ((void)(__extension__ __a__i_2=(__extension__ __b__i_2+__extension__ __c__i_2)));
     ((void)(__extension__ __a__i_2=__extension__ (__extension__ __b__i_2+__extension__ __c__i_2)));
-    inline int __f1__Fi___2(){
-    }
-    inline int __f2__Fi___2(){
-    }
-    int __s1__i_2;
-    int __s2__i_2;
-    int __t1___2;
-    int __t2___2;
-    volatile int __v1__Vi_2;
-    volatile int __v2__Vi_2;
     int __a1__i_2;
     const int __a2__Ci_2;
Index: src/tests/.expect/64/declarationSpecifier.txt
===================================================================
--- src/tests/.expect/64/declarationSpecifier.txt	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
+++ src/tests/.expect/64/declarationSpecifier.txt	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -0,0 +1,567 @@
+extern void *malloc(long unsigned int __size);
+extern void free(void *__ptr);
+extern void abort(void);
+extern int atexit(void (*__func)(void));
+extern void exit(int __status);
+extern int printf(const char *__restrict __format, ...);
+volatile const short __x1__CVs_1;
+static volatile const short __x2__CVs_1;
+static volatile const short __x3__CVs_1;
+static volatile const short __x4__CVs_1;
+static volatile const short __x5__CVs_1;
+static volatile const short __x6__CVs_1;
+static volatile const short __x7__CVs_1;
+static volatile const short __x8__CVs_1;
+struct __anonymous0 {
+    int __i__i_1;
+};
+static inline struct __anonymous0 ___operator_assign__F13s__anonymous0_P13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
+    ((void)((*___dst__P13s__anonymous0_1).__i__i_1=___src__13s__anonymous0_1.__i__i_1));
+    return ((struct __anonymous0 )___src__13s__anonymous0_1);
+}
+static inline void ___constructor__F_P13s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))=___src__13s__anonymous0_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous0i_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+volatile const struct __anonymous0 __x10__CV13s__anonymous0_1;
+struct __anonymous1 {
+    int __i__i_1;
+};
+static inline struct __anonymous1 ___operator_assign__F13s__anonymous1_P13s__anonymous113s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, struct __anonymous1 ___src__13s__anonymous1_1){
+    ((void)((*___dst__P13s__anonymous1_1).__i__i_1=___src__13s__anonymous1_1.__i__i_1));
+    return ((struct __anonymous1 )___src__13s__anonymous1_1);
+}
+static inline void ___constructor__F_P13s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous113s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, struct __anonymous1 ___src__13s__anonymous1_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))=___src__13s__anonymous1_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous1i_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+volatile const struct __anonymous1 __x11__CV13s__anonymous1_1;
+struct __anonymous2 {
+    int __i__i_1;
+};
+static inline struct __anonymous2 ___operator_assign__F13s__anonymous2_P13s__anonymous213s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, struct __anonymous2 ___src__13s__anonymous2_1){
+    ((void)((*___dst__P13s__anonymous2_1).__i__i_1=___src__13s__anonymous2_1.__i__i_1));
+    return ((struct __anonymous2 )___src__13s__anonymous2_1);
+}
+static inline void ___constructor__F_P13s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous213s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, struct __anonymous2 ___src__13s__anonymous2_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))=___src__13s__anonymous2_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous2i_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+volatile const struct __anonymous2 __x12__CV13s__anonymous2_1;
+struct __anonymous3 {
+    int __i__i_1;
+};
+static inline struct __anonymous3 ___operator_assign__F13s__anonymous3_P13s__anonymous313s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, struct __anonymous3 ___src__13s__anonymous3_1){
+    ((void)((*___dst__P13s__anonymous3_1).__i__i_1=___src__13s__anonymous3_1.__i__i_1));
+    return ((struct __anonymous3 )___src__13s__anonymous3_1);
+}
+static inline void ___constructor__F_P13s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous313s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, struct __anonymous3 ___src__13s__anonymous3_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))=___src__13s__anonymous3_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous3i_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static volatile const struct __anonymous3 __x13__CV13s__anonymous3_1;
+struct __anonymous4 {
+    int __i__i_1;
+};
+static inline struct __anonymous4 ___operator_assign__F13s__anonymous4_P13s__anonymous413s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, struct __anonymous4 ___src__13s__anonymous4_1){
+    ((void)((*___dst__P13s__anonymous4_1).__i__i_1=___src__13s__anonymous4_1.__i__i_1));
+    return ((struct __anonymous4 )___src__13s__anonymous4_1);
+}
+static inline void ___constructor__F_P13s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous413s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, struct __anonymous4 ___src__13s__anonymous4_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))=___src__13s__anonymous4_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous4i_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static volatile const struct __anonymous4 __x14__CV13s__anonymous4_1;
+struct __anonymous5 {
+    int __i__i_1;
+};
+static inline struct __anonymous5 ___operator_assign__F13s__anonymous5_P13s__anonymous513s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, struct __anonymous5 ___src__13s__anonymous5_1){
+    ((void)((*___dst__P13s__anonymous5_1).__i__i_1=___src__13s__anonymous5_1.__i__i_1));
+    return ((struct __anonymous5 )___src__13s__anonymous5_1);
+}
+static inline void ___constructor__F_P13s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous513s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, struct __anonymous5 ___src__13s__anonymous5_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))=___src__13s__anonymous5_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous5i_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static volatile const struct __anonymous5 __x15__CV13s__anonymous5_1;
+struct __anonymous6 {
+    int __i__i_1;
+};
+static inline struct __anonymous6 ___operator_assign__F13s__anonymous6_P13s__anonymous613s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, struct __anonymous6 ___src__13s__anonymous6_1){
+    ((void)((*___dst__P13s__anonymous6_1).__i__i_1=___src__13s__anonymous6_1.__i__i_1));
+    return ((struct __anonymous6 )___src__13s__anonymous6_1);
+}
+static inline void ___constructor__F_P13s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous613s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, struct __anonymous6 ___src__13s__anonymous6_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))=___src__13s__anonymous6_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous6i_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static volatile const struct __anonymous6 __x16__CV13s__anonymous6_1;
+struct __anonymous7 {
+    int __i__i_1;
+};
+static inline struct __anonymous7 ___operator_assign__F13s__anonymous7_P13s__anonymous713s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, struct __anonymous7 ___src__13s__anonymous7_1){
+    ((void)((*___dst__P13s__anonymous7_1).__i__i_1=___src__13s__anonymous7_1.__i__i_1));
+    return ((struct __anonymous7 )___src__13s__anonymous7_1);
+}
+static inline void ___constructor__F_P13s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous713s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, struct __anonymous7 ___src__13s__anonymous7_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))=___src__13s__anonymous7_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous7i_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static volatile const struct __anonymous7 __x17__CV13s__anonymous7_1;
+volatile const short __x20__CVs_1;
+static volatile const short __x21__CVs_1;
+static volatile const short __x22__CVs_1;
+static volatile const short __x23__CVs_1;
+static volatile const short __x24__CVs_1;
+static volatile const short __x25__CVs_1;
+static volatile const short __x26__CVs_1;
+static volatile const short __x27__CVs_1;
+struct __anonymous8 {
+    short __i__s_1;
+};
+static inline struct __anonymous8 ___operator_assign__F13s__anonymous8_P13s__anonymous813s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, struct __anonymous8 ___src__13s__anonymous8_1){
+    ((void)((*___dst__P13s__anonymous8_1).__i__s_1=___src__13s__anonymous8_1.__i__s_1));
+    return ((struct __anonymous8 )___src__13s__anonymous8_1);
+}
+static inline void ___constructor__F_P13s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous813s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, struct __anonymous8 ___src__13s__anonymous8_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))=___src__13s__anonymous8_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous8s_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+volatile const struct __anonymous8 __x29__CV13s__anonymous8_1;
+struct __anonymous9 {
+    short __i__s_1;
+};
+static inline struct __anonymous9 ___operator_assign__F13s__anonymous9_P13s__anonymous913s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, struct __anonymous9 ___src__13s__anonymous9_1){
+    ((void)((*___dst__P13s__anonymous9_1).__i__s_1=___src__13s__anonymous9_1.__i__s_1));
+    return ((struct __anonymous9 )___src__13s__anonymous9_1);
+}
+static inline void ___constructor__F_P13s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous913s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, struct __anonymous9 ___src__13s__anonymous9_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))=___src__13s__anonymous9_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous9s_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+volatile const struct __anonymous9 __x30__CV13s__anonymous9_1;
+struct __anonymous10 {
+    short __i__s_1;
+};
+static inline struct __anonymous10 ___operator_assign__F14s__anonymous10_P14s__anonymous1014s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, struct __anonymous10 ___src__14s__anonymous10_1){
+    ((void)((*___dst__P14s__anonymous10_1).__i__s_1=___src__14s__anonymous10_1.__i__s_1));
+    return ((struct __anonymous10 )___src__14s__anonymous10_1);
+}
+static inline void ___constructor__F_P14s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1014s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, struct __anonymous10 ___src__14s__anonymous10_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))=___src__14s__anonymous10_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous10s_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+volatile const struct __anonymous10 __x31__CV14s__anonymous10_1;
+struct __anonymous11 {
+    short __i__s_1;
+};
+static inline struct __anonymous11 ___operator_assign__F14s__anonymous11_P14s__anonymous1114s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, struct __anonymous11 ___src__14s__anonymous11_1){
+    ((void)((*___dst__P14s__anonymous11_1).__i__s_1=___src__14s__anonymous11_1.__i__s_1));
+    return ((struct __anonymous11 )___src__14s__anonymous11_1);
+}
+static inline void ___constructor__F_P14s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1114s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, struct __anonymous11 ___src__14s__anonymous11_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))=___src__14s__anonymous11_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous11s_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+static volatile const struct __anonymous11 __x32__CV14s__anonymous11_1;
+struct __anonymous12 {
+    short __i__s_1;
+};
+static inline struct __anonymous12 ___operator_assign__F14s__anonymous12_P14s__anonymous1214s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, struct __anonymous12 ___src__14s__anonymous12_1){
+    ((void)((*___dst__P14s__anonymous12_1).__i__s_1=___src__14s__anonymous12_1.__i__s_1));
+    return ((struct __anonymous12 )___src__14s__anonymous12_1);
+}
+static inline void ___constructor__F_P14s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1214s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, struct __anonymous12 ___src__14s__anonymous12_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))=___src__14s__anonymous12_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous12s_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+static volatile const struct __anonymous12 __x33__CV14s__anonymous12_1;
+struct __anonymous13 {
+    short __i__s_1;
+};
+static inline struct __anonymous13 ___operator_assign__F14s__anonymous13_P14s__anonymous1314s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, struct __anonymous13 ___src__14s__anonymous13_1){
+    ((void)((*___dst__P14s__anonymous13_1).__i__s_1=___src__14s__anonymous13_1.__i__s_1));
+    return ((struct __anonymous13 )___src__14s__anonymous13_1);
+}
+static inline void ___constructor__F_P14s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1314s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, struct __anonymous13 ___src__14s__anonymous13_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))=___src__14s__anonymous13_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous13s_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+static volatile const struct __anonymous13 __x34__CV14s__anonymous13_1;
+struct __anonymous14 {
+    short __i__s_1;
+};
+static inline struct __anonymous14 ___operator_assign__F14s__anonymous14_P14s__anonymous1414s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, struct __anonymous14 ___src__14s__anonymous14_1){
+    ((void)((*___dst__P14s__anonymous14_1).__i__s_1=___src__14s__anonymous14_1.__i__s_1));
+    return ((struct __anonymous14 )___src__14s__anonymous14_1);
+}
+static inline void ___constructor__F_P14s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1414s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, struct __anonymous14 ___src__14s__anonymous14_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))=___src__14s__anonymous14_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous14s_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+static volatile const struct __anonymous14 __x35__CV14s__anonymous14_1;
+struct __anonymous15 {
+    short __i__s_1;
+};
+static inline struct __anonymous15 ___operator_assign__F14s__anonymous15_P14s__anonymous1514s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, struct __anonymous15 ___src__14s__anonymous15_1){
+    ((void)((*___dst__P14s__anonymous15_1).__i__s_1=___src__14s__anonymous15_1.__i__s_1));
+    return ((struct __anonymous15 )___src__14s__anonymous15_1);
+}
+static inline void ___constructor__F_P14s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1514s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, struct __anonymous15 ___src__14s__anonymous15_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))=___src__14s__anonymous15_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous15s_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, short __i__s_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))=__i__s_1) /* ?{} */);
+}
+static volatile const struct __anonymous15 __x36__CV14s__anonymous15_1;
+static inline volatile const int __f11__FCVi___1();
+static inline volatile const int __f12__FCVi___1();
+static inline volatile const int __f13__FCVi___1();
+static inline volatile const int __f14__FCVi___1();
+static inline volatile const int __f15__FCVi___1();
+static inline volatile const int __f16__FCVi___1();
+static inline volatile const int __f17__FCVi___1();
+static inline volatile const int __f18__FCVi___1();
+static inline volatile const short __f21__FCVs___1();
+static inline volatile const short __f22__FCVs___1();
+static inline volatile const short __f23__FCVs___1();
+static inline volatile const short __f24__FCVs___1();
+static inline volatile const short __f25__FCVs___1();
+static inline volatile const short __f26__FCVs___1();
+static inline volatile const short __f27__FCVs___1();
+static inline volatile const short __f28__FCVs___1();
+struct __anonymous16 {
+    int __i__i_1;
+};
+static inline struct __anonymous16 ___operator_assign__F14s__anonymous16_P14s__anonymous1614s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, struct __anonymous16 ___src__14s__anonymous16_1){
+    ((void)((*___dst__P14s__anonymous16_1).__i__i_1=___src__14s__anonymous16_1.__i__i_1));
+    return ((struct __anonymous16 )___src__14s__anonymous16_1);
+}
+static inline void ___constructor__F_P14s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1614s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, struct __anonymous16 ___src__14s__anonymous16_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))=___src__14s__anonymous16_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous16i_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous16 __f31__FCV14s__anonymous16___1();
+struct __anonymous17 {
+    int __i__i_1;
+};
+static inline struct __anonymous17 ___operator_assign__F14s__anonymous17_P14s__anonymous1714s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, struct __anonymous17 ___src__14s__anonymous17_1){
+    ((void)((*___dst__P14s__anonymous17_1).__i__i_1=___src__14s__anonymous17_1.__i__i_1));
+    return ((struct __anonymous17 )___src__14s__anonymous17_1);
+}
+static inline void ___constructor__F_P14s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1714s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, struct __anonymous17 ___src__14s__anonymous17_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))=___src__14s__anonymous17_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous17i_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous17 __f32__FCV14s__anonymous17___1();
+struct __anonymous18 {
+    int __i__i_1;
+};
+static inline struct __anonymous18 ___operator_assign__F14s__anonymous18_P14s__anonymous1814s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, struct __anonymous18 ___src__14s__anonymous18_1){
+    ((void)((*___dst__P14s__anonymous18_1).__i__i_1=___src__14s__anonymous18_1.__i__i_1));
+    return ((struct __anonymous18 )___src__14s__anonymous18_1);
+}
+static inline void ___constructor__F_P14s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1814s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, struct __anonymous18 ___src__14s__anonymous18_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))=___src__14s__anonymous18_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous18i_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous18 __f33__FCV14s__anonymous18___1();
+struct __anonymous19 {
+    int __i__i_1;
+};
+static inline struct __anonymous19 ___operator_assign__F14s__anonymous19_P14s__anonymous1914s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, struct __anonymous19 ___src__14s__anonymous19_1){
+    ((void)((*___dst__P14s__anonymous19_1).__i__i_1=___src__14s__anonymous19_1.__i__i_1));
+    return ((struct __anonymous19 )___src__14s__anonymous19_1);
+}
+static inline void ___constructor__F_P14s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1914s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, struct __anonymous19 ___src__14s__anonymous19_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))=___src__14s__anonymous19_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous19i_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous19 __f34__FCV14s__anonymous19___1();
+struct __anonymous20 {
+    int __i__i_1;
+};
+static inline struct __anonymous20 ___operator_assign__F14s__anonymous20_P14s__anonymous2014s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, struct __anonymous20 ___src__14s__anonymous20_1){
+    ((void)((*___dst__P14s__anonymous20_1).__i__i_1=___src__14s__anonymous20_1.__i__i_1));
+    return ((struct __anonymous20 )___src__14s__anonymous20_1);
+}
+static inline void ___constructor__F_P14s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous2014s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, struct __anonymous20 ___src__14s__anonymous20_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))=___src__14s__anonymous20_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous20i_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous20 __f35__FCV14s__anonymous20___1();
+struct __anonymous21 {
+    int __i__i_1;
+};
+static inline struct __anonymous21 ___operator_assign__F14s__anonymous21_P14s__anonymous2114s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, struct __anonymous21 ___src__14s__anonymous21_1){
+    ((void)((*___dst__P14s__anonymous21_1).__i__i_1=___src__14s__anonymous21_1.__i__i_1));
+    return ((struct __anonymous21 )___src__14s__anonymous21_1);
+}
+static inline void ___constructor__F_P14s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous2114s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, struct __anonymous21 ___src__14s__anonymous21_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))=___src__14s__anonymous21_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous21i_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous21 __f36__FCV14s__anonymous21___1();
+struct __anonymous22 {
+    int __i__i_1;
+};
+static inline struct __anonymous22 ___operator_assign__F14s__anonymous22_P14s__anonymous2214s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, struct __anonymous22 ___src__14s__anonymous22_1){
+    ((void)((*___dst__P14s__anonymous22_1).__i__i_1=___src__14s__anonymous22_1.__i__i_1));
+    return ((struct __anonymous22 )___src__14s__anonymous22_1);
+}
+static inline void ___constructor__F_P14s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous2214s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, struct __anonymous22 ___src__14s__anonymous22_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))=___src__14s__anonymous22_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous22i_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous22 __f37__FCV14s__anonymous22___1();
+struct __anonymous23 {
+    int __i__i_1;
+};
+static inline struct __anonymous23 ___operator_assign__F14s__anonymous23_P14s__anonymous2314s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, struct __anonymous23 ___src__14s__anonymous23_1){
+    ((void)((*___dst__P14s__anonymous23_1).__i__i_1=___src__14s__anonymous23_1.__i__i_1));
+    return ((struct __anonymous23 )___src__14s__anonymous23_1);
+}
+static inline void ___constructor__F_P14s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous2314s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, struct __anonymous23 ___src__14s__anonymous23_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))=___src__14s__anonymous23_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous23i_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+static inline volatile const struct __anonymous23 __f38__FCV14s__anonymous23___1();
+static inline volatile const short __f41__FCVs___1();
+static inline volatile const short __f42__FCVs___1();
+static inline volatile const short __f43__FCVs___1();
+static inline volatile const short __f44__FCVs___1();
+static inline volatile const short __f45__FCVs___1();
+static inline volatile const short __f46__FCVs___1();
+static inline volatile const short __f47__FCVs___1();
+static inline volatile const short __f48__FCVs___1();
+int main(int __argc__i_1, const char **__argv__PPCc_1){
+    int _retVal0 = { 0 };
+    ((void)(_retVal0=0) /* ?{} */);
+    return ((int )_retVal0);
+}
+__attribute__ ((constructor(),)) static void _init_declarationSpecifier(void){
+    ((void)___constructor__F_P13s__anonymous0_autogen___1(((struct __anonymous0 *)(&__x10__CV13s__anonymous0_1))));
+    ((void)___constructor__F_P13s__anonymous1_autogen___1(((struct __anonymous1 *)(&__x11__CV13s__anonymous1_1))));
+    ((void)___constructor__F_P13s__anonymous2_autogen___1(((struct __anonymous2 *)(&__x12__CV13s__anonymous2_1))));
+    ((void)___constructor__F_P13s__anonymous3_autogen___1(((struct __anonymous3 *)(&__x13__CV13s__anonymous3_1))));
+    ((void)___constructor__F_P13s__anonymous4_autogen___1(((struct __anonymous4 *)(&__x14__CV13s__anonymous4_1))));
+    ((void)___constructor__F_P13s__anonymous5_autogen___1(((struct __anonymous5 *)(&__x15__CV13s__anonymous5_1))));
+    ((void)___constructor__F_P13s__anonymous6_autogen___1(((struct __anonymous6 *)(&__x16__CV13s__anonymous6_1))));
+    ((void)___constructor__F_P13s__anonymous7_autogen___1(((struct __anonymous7 *)(&__x17__CV13s__anonymous7_1))));
+    ((void)___constructor__F_P13s__anonymous8_autogen___1(((struct __anonymous8 *)(&__x29__CV13s__anonymous8_1))));
+    ((void)___constructor__F_P13s__anonymous9_autogen___1(((struct __anonymous9 *)(&__x30__CV13s__anonymous9_1))));
+    ((void)___constructor__F_P14s__anonymous10_autogen___1(((struct __anonymous10 *)(&__x31__CV14s__anonymous10_1))));
+    ((void)___constructor__F_P14s__anonymous11_autogen___1(((struct __anonymous11 *)(&__x32__CV14s__anonymous11_1))));
+    ((void)___constructor__F_P14s__anonymous12_autogen___1(((struct __anonymous12 *)(&__x33__CV14s__anonymous12_1))));
+    ((void)___constructor__F_P14s__anonymous13_autogen___1(((struct __anonymous13 *)(&__x34__CV14s__anonymous13_1))));
+    ((void)___constructor__F_P14s__anonymous14_autogen___1(((struct __anonymous14 *)(&__x35__CV14s__anonymous14_1))));
+    ((void)___constructor__F_P14s__anonymous15_autogen___1(((struct __anonymous15 *)(&__x36__CV14s__anonymous15_1))));
+}
+__attribute__ ((destructor(),)) static void _destroy_declarationSpecifier(void){
+    ((void)___destructor__F_P14s__anonymous15_autogen___1(((struct __anonymous15 *)(&__x36__CV14s__anonymous15_1))));
+    ((void)___destructor__F_P14s__anonymous14_autogen___1(((struct __anonymous14 *)(&__x35__CV14s__anonymous14_1))));
+    ((void)___destructor__F_P14s__anonymous13_autogen___1(((struct __anonymous13 *)(&__x34__CV14s__anonymous13_1))));
+    ((void)___destructor__F_P14s__anonymous12_autogen___1(((struct __anonymous12 *)(&__x33__CV14s__anonymous12_1))));
+    ((void)___destructor__F_P14s__anonymous11_autogen___1(((struct __anonymous11 *)(&__x32__CV14s__anonymous11_1))));
+    ((void)___destructor__F_P14s__anonymous10_autogen___1(((struct __anonymous10 *)(&__x31__CV14s__anonymous10_1))));
+    ((void)___destructor__F_P13s__anonymous9_autogen___1(((struct __anonymous9 *)(&__x30__CV13s__anonymous9_1))));
+    ((void)___destructor__F_P13s__anonymous8_autogen___1(((struct __anonymous8 *)(&__x29__CV13s__anonymous8_1))));
+    ((void)___destructor__F_P13s__anonymous7_autogen___1(((struct __anonymous7 *)(&__x17__CV13s__anonymous7_1))));
+    ((void)___destructor__F_P13s__anonymous6_autogen___1(((struct __anonymous6 *)(&__x16__CV13s__anonymous6_1))));
+    ((void)___destructor__F_P13s__anonymous5_autogen___1(((struct __anonymous5 *)(&__x15__CV13s__anonymous5_1))));
+    ((void)___destructor__F_P13s__anonymous4_autogen___1(((struct __anonymous4 *)(&__x14__CV13s__anonymous4_1))));
+    ((void)___destructor__F_P13s__anonymous3_autogen___1(((struct __anonymous3 *)(&__x13__CV13s__anonymous3_1))));
+    ((void)___destructor__F_P13s__anonymous2_autogen___1(((struct __anonymous2 *)(&__x12__CV13s__anonymous2_1))));
+    ((void)___destructor__F_P13s__anonymous1_autogen___1(((struct __anonymous1 *)(&__x11__CV13s__anonymous1_1))));
+    ((void)___destructor__F_P13s__anonymous0_autogen___1(((struct __anonymous0 *)(&__x10__CV13s__anonymous0_1))));
+}
Index: src/tests/.expect/64/extension.txt
===================================================================
--- src/tests/.expect/64/extension.txt	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/.expect/64/extension.txt	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -70,4 +70,9 @@
 static inline void ___destructor__F_P2uU_autogen___1(union U *___dst__P2uU_1){
 }
+static inline void ___constructor__F_P2uUi_autogen___1(union U *___dst__P2uU_1, int __src__i_1){
+    void *_tmp_cp_ret2;
+    ((void)((_tmp_cp_ret2=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&__src__i_1)), sizeof(int ))) , _tmp_cp_ret2));
+    ((void)(_tmp_cp_ret2) /* ^?{} */);
+}
 __extension__ enum E {
     __R__C2eE_1,
@@ -89,7 +94,7 @@
     __extension__ int __c__i_2;
     ((void)(__extension__ __a__i_2=(__extension__ __b__i_2+__extension__ __c__i_2)));
-    int _tmp_cp_ret2;
-    ((void)((_tmp_cp_ret2=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret2));
-    ((void)(_tmp_cp_ret2) /* ^?{} */);
+    int _tmp_cp_ret3;
+    ((void)((_tmp_cp_ret3=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret3));
+    ((void)(_tmp_cp_ret3) /* ^?{} */);
     ((void)__extension__ sizeof(3));
     ((void)__extension__ (((int )(3!=0)) || ((int )(4!=0))));
Index: src/tests/.expect/64/gccExtensions.txt
===================================================================
--- src/tests/.expect/64/gccExtensions.txt	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/.expect/64/gccExtensions.txt	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -5,8 +5,18 @@
 extern void exit(int __status);
 extern int printf(const char *__restrict __format, ...);
+extern int __x__i_1;
 int main(int __argc__i_1, const char **__argv__PPCc_1){
     asm ( "nop" :  :  :  );
     asm ( "nop" :  :  :  );
     asm ( "nop" :  :  :  );
+    static int __y__i_2;
+    static int *__z__Pi_2;
+    int __src__i_2;
+    int __dst__i_2;
+    asm volatile ( "mov %1, %0\n\tadd $1, %0" :  :  :  );
+    asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) :  :  );
+    asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) : "r" ( __src__i_2 ) :  );
+    asm ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ), "=r" ( __src__i_2 ) : [ __src__i_2 ] "r" ( __dst__i_2 ) : "r0" );
+    L2: L1: asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5" :  : "r" ( __src__i_2 ), "r" ( (&__dst__i_2) ) : "r5", "memory" : L1, L2 );
     double _Complex __c1__Xd_2;
     double _Complex __c2__Xd_2;
@@ -14,4 +24,14 @@
     const int __i2__Ci_2;
     const int __i3__Ci_2;
+    inline int __f1__Fi___2(){
+    }
+    inline int __f2__Fi___2(){
+    }
+    int __s1__i_2;
+    int __s2__i_2;
+    volatile int __v1__Vi_2;
+    volatile int __v2__Vi_2;
+    int __t1___2;
+    int __t2___2;
     __extension__ const int __ex__Ci_2;
     struct S {
@@ -64,14 +84,4 @@
     ((void)(__extension__ __a__i_2=(__extension__ __b__i_2+__extension__ __c__i_2)));
     ((void)(__extension__ __a__i_2=__extension__ (__extension__ __b__i_2+__extension__ __c__i_2)));
-    inline int __f1__Fi___2(){
-    }
-    inline int __f2__Fi___2(){
-    }
-    int __s1__i_2;
-    int __s2__i_2;
-    int __t1___2;
-    int __t2___2;
-    volatile int __v1__Vi_2;
-    volatile int __v2__Vi_2;
     int __a1__i_2;
     const int __a2__Ci_2;
Index: src/tests/.expect/ctorWarnings.txt
===================================================================
--- src/tests/.expect/ctorWarnings.txt	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
+++ src/tests/.expect/ctorWarnings.txt	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -0,0 +1,7 @@
+CFA Version 1.0.0 (debug)
+Warning: in void ?{}(struct A *a, int x), member z may not have been constructed
+Warning: in void ?{}(struct B *b), member a2 used before being constructed
+Warning: in void ?{}(struct B *b), member a2 may not have been constructed
+Warning: in void ?{}(struct B *b), member a3 may not have been constructed
+Warning: in void ^?{}(struct B *b), member a2 may not have been destructed
+Warning: in void ^?{}(struct B *b), member a3 may not have been destructed
Index: src/tests/.expect/declarationErrors.txt
===================================================================
--- src/tests/.expect/declarationErrors.txt	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/.expect/declarationErrors.txt	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -1,18 +1,66 @@
 CFA Version 1.0.0 (debug)
-Error: invalid combination of storage classes in declaration of x9: static static volatile const short int 
+Error: invalid combination of storage classes in declaration of x9: static const volatile short int 
 
-Error: invalid combination of storage classes in declaration of x18: static static const volatile instance of struct __anonymous0
+Error: invalid combination of storage classes in declaration of x18: static const volatile instance of const volatile struct __anonymous0
   with members 
-    i: int 
    with body 
 
 
-Error: invalid combination of storage classes in declaration of x19: static static const volatile volatile instance of struct __anonymous1
+Error: duplicate qualifier volatile in declaration of x19: static const volatile instance of const volatile struct __anonymous1
   with members 
-    i: int 
    with body 
 
 
-Error: invalid combination of storage classes in declaration of x28: static static volatile const instance of type Int
+Error: invalid combination of storage classes in declaration of x28: static const volatile instance of type Int
+
+Error: duplicate qualifier const in declaration of f01: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier volatile in declaration of f02: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier const in declaration of f03: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier volatile in declaration of f04: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier const in declaration of f05: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier volatile in declaration of f06: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier const in declaration of f07: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier const, volatile in declaration of f08: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier const, volatile in declaration of f09: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier const, volatile in declaration of f09: static inline function
+  with no parameters 
+  returning const volatile int 
+
 
 make: *** [declarationErrors] Error 1
Index: c/tests/.expect/declarationSpecifier.txt
===================================================================
--- src/tests/.expect/declarationSpecifier.txt	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ 	(revision )
@@ -1,18 +1,0 @@
-CFA Version 1.0.0 (debug)
-Error: invalid combination of storage classes in declaration of x9: static static volatile const short int 
-
-Error: invalid combination of storage classes in declaration of x18: static static const volatile instance of struct __anonymous8
-  with members 
-    i: int 
-   with body 
-
-
-Error: invalid combination of storage classes in declaration of x19: static static const volatile volatile instance of struct __anonymous9
-  with members 
-    i: int 
-   with body 
-
-
-Error: invalid combination of storage classes in declaration of x28: static static volatile const instance of type Int
-
-make: *** [declarationSpecifier] Error 1
Index: src/tests/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/Makefile.am	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 09:08:15 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Tue Aug  9 15:34:57 2016
-## Update Count     : 38
+## Last Modified On : Mon Aug 15 12:24:54 2016
+## Update Count     : 39
 ###############################################################################
 
@@ -27,5 +27,5 @@
 
 all-local :
-	@+python test.py vector_test avl_test operators numericConstants expression enum asmName array typeof cast dtor-early-exit init_once
+	@+python test.py vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once
 
 all-tests :
@@ -53,4 +53,7 @@
 	${CC} ${CFLAGS} -DERR2 ${<} -o ${@}
 
+declarationSpecifier: declarationSpecifier.c
+	${CC} ${CFALGS} -CFA -XCFA -p ${<} -o ${@}
+
 gccExtensions : gccExtensions.c
 	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
@@ -59,2 +62,5 @@
 	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
+ctorWarnings: ctorWarnings.c
+	${CC} ${CFALGS} -CFA -XCFA -p ${<} -o /dev/null 2> ${@}
+
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/Makefile.in	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -635,5 +635,5 @@
 
 all-local :
-	@+python test.py vector_test avl_test operators numericConstants expression enum asmName array typeof cast dtor-early-exit init_once
+	@+python test.py vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once
 
 all-tests :
@@ -661,4 +661,7 @@
 	${CC} ${CFLAGS} -DERR2 ${<} -o ${@}
 
+declarationSpecifier: declarationSpecifier.c
+	${CC} ${CFALGS} -CFA -XCFA -p ${<} -o ${@}
+
 gccExtensions : gccExtensions.c
 	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
@@ -666,4 +669,7 @@
 extension : extension.c
 	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
+
+ctorWarnings: ctorWarnings.c
+	${CC} ${CFALGS} -CFA -XCFA -p ${<} -o /dev/null 2> ${@}
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
Index: c/tests/asmName.c
===================================================================
--- src/tests/asmName.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-//Testing assembly declaration
-extern int x asm( "xx" );
-
-int fred( int x ) {
-    static int y asm( "yy" );
-
-// Cforall extensions
-
-    static * int z asm( "zz" );
-}
-
-//Dummy main
-int main(int argc, char const *argv[])
-{
-	return 0;
-}
Index: src/tests/ctorWarnings.c
===================================================================
--- src/tests/ctorWarnings.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
+++ src/tests/ctorWarnings.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -0,0 +1,26 @@
+struct A {
+  int x, y, z;
+};
+
+void ?{}(A * a, int x) {
+  (&a->x){ x+999 };
+  a->y = 0; // not technically a constructor, but okay
+} // z never constructed
+
+struct B {
+  A a1, a2, a3;
+};
+
+void ?{}(B * b) {
+  b->a2 = (A) { 2 }; // a2 used before constructed
+  (&b->a1){ 1 };
+} // a2, a3 never constructed
+
+void ^?{}(B * b) {
+  b->a2 = (A) { 0 };
+  ^(&b->a1){};
+} // a2, a3 never destructed
+
+int main() {
+  B b;
+}
Index: src/tests/declarationErrors.c
===================================================================
--- src/tests/declarationErrors.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/declarationErrors.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -1,7 +1,34 @@
-static short int volatile static const x9;		// duplicate static
-struct { int i; } const static volatile static x18;	// duplicate static
+// 
+// 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.
+// 
+// declarationErrors.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Aug 17 08:23:43 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Aug 25 18:16:40 2016
+// Update Count     : 5
+// 
+
+static short int volatile static const x9;				// duplicate static
+struct { int i; } const static volatile static x18;		// duplicate static
 struct { int i; } const static volatile static volatile x19; // duplicate static & volatile
 typedef int Int;
-static Int volatile static const x28;			// duplicate static
+static Int volatile static const x28;					// duplicate static
+
+const static inline const volatile int f01();			// duplicate const
+volatile inline const volatile static int f02();		// duplicate volatile
+const inline const volatile int static f03();			// duplicate const
+volatile inline static const volatile int f04();		// duplicate volatile
+const static const inline volatile int f05();			// duplicate const
+volatile static const volatile inline int f06();		// duplicate volatile
+const static const volatile int inline f07();			// duplicate const
+volatile static const int inline const volatile f08();		// duplicate volatile
+
+volatile static const int inline const volatile f09();		// duplicate volatile
+volatile static const int inline const volatile f09();		// duplicate volatile
 
 //Dummy main
@@ -10,2 +37,7 @@
 	return 0;
 }
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa declarationErrors.c" //
+// End: //
Index: src/tests/declarationSpecifier.c
===================================================================
--- src/tests/declarationSpecifier.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/declarationSpecifier.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -1,9 +1,22 @@
+// 
+// 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.
+// 
+// declarationSpecifier.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Aug 17 08:21:04 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug 17 08:24:33 2016
+// Update Count     : 2
+// 
+
 typedef short int Int;
-
 
 const short int volatile x1;
 static const short int volatile x2;
 const static short int volatile x3;
-const short static int volatile x4;
 const static volatile short int x4;
 const short int static volatile x5;
@@ -11,5 +24,4 @@
 const short volatile int static x7;
 short int volatile static const x8;
-static short int volatile static const x9;		// duplicate static
 
 const volatile struct { int i; } x10;
@@ -21,6 +33,4 @@
 struct { int i; } const static volatile x16;
 struct { int i; } const volatile static x17;
-struct { int i; } const static volatile static x18;	// duplicate static
-struct { int i; } const static volatile static volatile x19; // duplicate static & volatile
 
 const Int volatile x20;
@@ -32,5 +42,4 @@
 const volatile Int static x26;
 Int volatile static const x27;
-static Int volatile static const x28;			// duplicate static
 
 const volatile struct { Int i; } x29;
@@ -42,14 +51,4 @@
 struct { Int i; } const static volatile x35;
 struct { Int i; } const volatile static x36;
-
-
-const static inline const volatile int f01();		// duplicate const
-volatile inline const volatile static int f02();	// duplicate volatile
-const inline const volatile int static f03();		// duplicate const
-volatile inline static const volatile int f04();	// duplicate volatile
-const static const inline volatile int f05();		// duplicate const
-volatile static const volatile inline int f06();	// duplicate volatile
-const static const volatile int inline f07();		// duplicate const
-volatile static const int inline volatile f08();	// duplicate volatile
 
 static inline const volatile int f11();
@@ -94,2 +93,7 @@
 	return 0;
 }
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa declarationSpecifier.c" //
+// End: //
Index: src/tests/dtor-early-exit.c
===================================================================
--- src/tests/dtor-early-exit.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/dtor-early-exit.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -1,2 +1,17 @@
+// 
+// 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.
+// 
+// dtor-early-exit.c -- 
+// 
+// Author           : Rob Schluntz
+// Created On       : Wed Aug 17 08:26:25 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug 17 08:29:37 2016
+// Update Count     : 2
+// 
+
 #include <fstream>
 #include <stdlib>
@@ -215,2 +230,7 @@
 	h();
 }
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa dtor-early-exit" //
+// End: //
Index: src/tests/exception.c
===================================================================
--- src/tests/exception.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/exception.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -11,5 +11,5 @@
 	x/4;
     } catch( int ) {
-    } catch( int x ) {
+    } catch( float x ) {
     } catch( struct { int i; } ) {
     } catch( struct { int i; } x ) {
@@ -21,5 +21,5 @@
     } catch( * struct { int i; } x ) {
     } catch( ... ) {
-//    } finally {
+    } finally {
     } // try
 }
Index: src/tests/functions.c
===================================================================
--- src/tests/functions.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/functions.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -1,2 +1,17 @@
+// 
+// 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.
+// 
+// functions.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Aug 17 08:39:58 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug 17 08:40:52 2016
+// Update Count     : 1
+// 
+
 // ANSI function definitions
 
@@ -165,3 +180,4 @@
 // Local Variables: //
 // tab-width: 4 //
+// compile-command: "cfa functions.c" //
 // End: //
Index: src/tests/gccExtensions.c
===================================================================
--- src/tests/gccExtensions.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/gccExtensions.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -1,6 +1,60 @@
+// 
+// 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.
+// 
+// gccExtensions.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Sun Aug 14 17:28:17 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug 17 09:26:50 2016
+// Update Count     : 10
+// 
+
+extern int x asm( "xx" );
+
 int main(int argc, char const *argv[]) {
+	// asm extensions
+
 	asm( "nop" );
 	__asm( "nop" );
 	__asm__( "nop" );
+
+	static int y asm( "yy" );
+#ifdef __CFA__
+	static * int z asm( "zz" );							// CFA declaration
+#endif // __CFA__
+
+	int src;
+	int dst;
+
+	asm volatile ( "mov %1, %0\n\t"
+				   "add $1, %0" : : : );
+
+	asm volatile ( "mov %1, %0\n\t"
+				   "add $1, %0"
+				   : "=" "r" (dst));
+
+	asm volatile ( "mov %1, %0\n\t"
+				   "add $1, %0"
+				   : "=r" (dst)
+				   : "r" (src));
+
+	asm ( "mov %1, %0\n\t"
+		  "add $1, %0"
+		  : "=r" (dst), "=r" (src)
+		  : [src] "r" (dst)
+		  : "r0");
+
+  L1: L2:
+	asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5"
+			   : /* No outputs. */
+			   : "r"(src), "r"(&dst)
+			   : "r5", "memory"
+			   : L1, L2 );
+
+	// alternative type/qualifer names
 
 	__complex__ c1;
@@ -10,4 +64,20 @@
 	__const int i2;
 	__const__ int i3;
+
+	__inline int f1() {}
+	__inline__ int f2() {}
+
+	__signed s1;
+	__signed s2;
+
+	__volatile int v1;
+	__volatile__ int v2;
+
+	// symbol table attributes
+
+	__typeof(s1) t1;
+	__typeof__(s1) t2;
+
+	// strange extension qualifier
 
 	__extension__ const int ex;
@@ -21,15 +91,5 @@
 	__extension__ a = __extension__ ( __extension__ b + __extension__ c );
 
-	__inline int f1() {}
-	__inline__ int f2() {}
-
-	__signed s1;
-	__signed s2;
-
-	__typeof(s1) t1;
-	__typeof__(s1) t2;
-
-	__volatile int v1;
-	__volatile__ int v2;
+	// attributes
 
 	__attribute__(()) int a1;
@@ -57,2 +117,7 @@
 	return 0;
 }
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa gccExtensions.c" //
+// End: //
Index: src/tests/identFuncDeclarator.c
===================================================================
--- src/tests/identFuncDeclarator.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/identFuncDeclarator.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -1,2 +1,17 @@
+// 
+// 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.
+// 
+// identFuncDeclarator.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Aug 17 08:36:34 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug 17 08:37:06 2016
+// Update Count     : 1
+// 
+
 int main() {
 	int f1;
@@ -97,2 +112,7 @@
 	int (* const(* const f81)(int))();
 }
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa identFuncDeclarator.c" //
+// End: //
Index: src/tests/identParamDeclarator.c
===================================================================
--- src/tests/identParamDeclarator.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/identParamDeclarator.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -1,2 +1,17 @@
+// 
+// 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.
+// 
+// identParamDeclarator.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Aug 17 08:37:56 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug 17 08:38:42 2016
+// Update Count     : 1
+// 
+
 int fred(
 	int f1,
@@ -147,2 +162,7 @@
 	return 0;
 }
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa identParamDeclarator.c" //
+// End: //
Index: src/tests/test.py
===================================================================
--- src/tests/test.py	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/test.py	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -99,9 +99,4 @@
 		return False
 
-# find the test data for a given test name
-def filterTests(testname) :
-	found = [test for test in allTests if test.name == testname]
-	return (found[0] if len(found) == 1 else Test(testname, testname) )
-
 ################################################################################
 #               running test functions
@@ -141,5 +136,5 @@
 		if not dry_run and fileContainsOnly(out_file, "make: *** No rule to make target `%s'.  Stop." % test.name) :
 			retcode = 1;
-			error = "\t\tNo make target for test %s!" % test
+			error = "\t\tNo make target for test %s!" % test.name
 			sh("rm %s" % out_file, False)
 
@@ -252,5 +247,10 @@
 	# already existing tests and create new info for the new tests
 	if options.regenerate_expected :
-		tests = map(filterTests, options.tests)
+		for testname in options.tests :
+			if testname.endswith(".c") or testname.endswith(".cc") or testname.endswith(".cpp") :
+				print('ERROR: "%s", tests are not allowed to end with a C/C++/CFA extension, ignoring it' % testname, file=sys.stderr)
+			else :
+				found = [test for test in allTests if test.name == testname]
+				tests.append( found[0] if len(found) == 1 else Test(testname, testname) )
 
 	else :
Index: src/tests/variableDeclarator.c
===================================================================
--- src/tests/variableDeclarator.c	(revision 79841be91c84428055cbee2c6670f4b434b5edd6)
+++ src/tests/variableDeclarator.c	(revision 6943a9871116ec46c4e36b597cc04f17cd4d347e)
@@ -1,3 +1,18 @@
-//Variable declarations test
+// 
+// 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.
+// 
+// variableDeclarator.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Aug 17 08:41:42 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug 17 08:42:21 2016
+// Update Count     : 1
+// 
+
+// Variable declarations test
 int f1;
 int (f2);
@@ -164,2 +179,7 @@
 	return 0;
 }
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa variableDeclarator.c" //
+// End: //
