Index: configure
===================================================================
--- configure	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ configure	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -2409,4 +2409,10 @@
 
 
+if test "x${CXXFLAGS}" = "x"; then
+   export CXXFLAGS="-std=c++11 -g -O2 ${CXXFLAGS}"
+else
+   export CXXFLAGS="-std=c++11 ${CXXFLAGS}"
+fi
+
 am__api_version='1.11'
 
Index: configure.ac
===================================================================
--- configure.ac	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ configure.ac	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -7,4 +7,10 @@
 #AC_CONFIG_SRCDIR([src/main.cc])
 AC_CONFIG_HEADERS([config.h])
+
+if test "x${CXXFLAGS}" = "x"; then
+   export CXXFLAGS="-std=c++11 -g -O2 ${CXXFLAGS}"
+else
+   export CXXFLAGS="-std=c++11 ${CXXFLAGS}"
+fi
 
 AM_INIT_AUTOMAKE
Index: doc/refrat/Makefile
===================================================================
--- doc/refrat/Makefile	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ doc/refrat/Makefile	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -1,5 +1,6 @@
 ## Define the appropriate configuration variables.
 
-TeXLIB = .::
+Macros = 
+TeXLIB = .:${Macros}:
 LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex
 BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex
Index: doc/refrat/refrat.tex
===================================================================
--- doc/refrat/refrat.tex	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ doc/refrat/refrat.tex	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -33,5 +33,33 @@
 
 \makeatletter
-% index macros
+\renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}}
+\renewenvironment{itemize}{\begin{list}{\labelitemi}{\topsep=5pt\itemsep=5pt\parsep=0pt}}{\end{list}}
+
+%  Reduce size of chapter/section titles
+\def\@makechapterhead#1{%
+  \vspace*{50\p@}%
+  {\parindent \z@ \raggedright \normalfont
+    \ifnum \c@secnumdepth >\m@ne
+        \large\bfseries \@chapapp\space \thechapter
+        \par\nobreak
+        \vskip 5\p@
+    \fi
+    \interlinepenalty\@M
+    \Large \bfseries #1\par\nobreak
+    \vskip 50\p@
+  }}
+\def\@makeschapterhead#1{%
+  \vspace*{50\p@}%
+  {\parindent \z@ \raggedright
+    \normalfont
+    \interlinepenalty\@M
+    \Large \bfseries  #1\par\nobreak
+    \vskip 50\p@
+  }}
+\renewcommand\section{\@startsection{section}{1}{\z@}{-3.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\large\bfseries}}
+\renewcommand\subsection{\@startsection{subsection}{2}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
+\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
+\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{-1em}{\normalfont\normalsize\bfseries}}
+
 \newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
 \newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
@@ -60,7 +88,7 @@
 %\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
 
-% text inline and lowercase index: \Index{Inline and index text}
-% text inline and as-in index: \Index{Inline and Index text}
-% text inline but index with different as-is text: \Index[index text]{inline text}
+% inline text and lowercase index: \Index{inline and lowercase index text}
+% inline text and as-in index: \Index[as-is index text]{inline text}
+% inline text but index with different as-is text: \Index[index text]{inline text}
 \newcommand{\Index}{\@ifstar\@sIndex\@Index}
 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
@@ -145,7 +173,13 @@
 \linenumbers					% comment out to turn off line numbering
 
-\title{\CFA (\CFAA) Reference Manual and Rationale}
-\author{Glen Ditchfield \and Peter A. Buhr}
-\date{DRAFT\\\today}
+\title{\Huge
+\CFA (\CFAA) Reference Manual and Rationale
+}% title
+\author{\huge
+Glen Ditchfield and Peter A. Buhr
+}% author
+\date{
+DRAFT\\\today
+}% date
 
 \pagenumbering{roman}
@@ -159,6 +193,6 @@
 \copyright\,2015 Glen Ditchfield \\ \\
 \noindent
-This work is licensed under the Creative Commons Attribution 4.0 International License. To view a
-copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}.
+This work is licensed under the Creative Commons Attribution 4.0 International License.
+To view a copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}.
 \vspace*{1in}
 
@@ -173,17 +207,15 @@
 \chapter*{Introduction}\addcontentsline{toc}{chapter}{Introduction}
 
-This document is a reference manual and rationale for \CFA, a polymorphic extension of the C
-programming language. It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and
-occasionally compares \CFA to {\CC} \cite{c++}.
-
-The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering
-differs). Unfortunately, this means the manual contains more ``forward references'' than usual,
-making it harder to follow if the reader does not have a copy of the {\c11} standard. For a simple
-introduction to \CFA, see the companion document ``An Overview of \CFA''
+This document is a reference manual and rationale for \CFA, a polymorphic extension of the C programming language.
+It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and occasionally compares \CFA to {\CC} \cite{c++}.
+
+The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering differs).
+Unfortunately, this means the manual contains more ``forward references'' than usual, making it harder to follow if the reader does not have a copy of the {\c11} standard.
+For a simple introduction to \CFA, see the companion document ``An Overview of \CFA''
 \cite{Ditchfield96:Overview}.
 
 \begin{rationale}
-Commentary (like this) is quoted with quads. Commentary usually deals with subtle points, the
-rationale behind a rule, and design decisions.
+Commentary (like this) is quoted with quads.
+Commentary usually deals with subtle points, the rationale behind a rule, and design decisions.
 \end{rationale}
 
@@ -194,6 +226,5 @@
 \chapter{Terms, definitions, and symbols}
 
-Terms from the {\c11} standard used in this document have the same meaning as in the {\c11}
-standard.
+Terms from the {\c11} standard used in this document have the same meaning as in the {\c11} standard.
 
 % No ``Conformance'' or ``Environment'' chapters yet.
@@ -205,7 +236,5 @@
 
 \section{Notation}
-The syntax notation used in this document is the same as in the {\c11} standard, with one exception:
-ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that
-these rules extend a previous definition, which occurs in this document or in the {\c11} standard.
+The syntax notation used in this document is the same as in the {\c11} standard, with one exception: ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that these rules extend a previous definition, which occurs in this document or in the {\c11} standard.
 
 
@@ -215,15 +244,12 @@
 \subsection{Scopes of identifiers}\index{scopes}
 
-\CFA's scope rules differ from C's in one major respect: a declaration of an identifier may
-overload\index{overloading} outer declarations of lexically identical identifiers in the same
-\Index{name space}, instead of hiding them. The outer declaration is hidden if the two declarations
-have \Index{compatible type}, or if one declares an array type and the other declares a pointer type
-and the element type and pointed-at type are compatible, or if one has function type and the other
-is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or
+\CFA's scope rules differ from C's in one major respect: a declaration of an identifier may overload\index{overloading} outer declarations of lexically identical identifiers in the same
+\Index{name space}, instead of hiding them.
+The outer declaration is hidden if the two declarations have \Index{compatible type}, or if one declares an array type and the other declares a pointer type and the element type and pointed-at type are compatible, or if one has function type and the other is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or
 \lstinline$typedef$\use{typedef} declaration and the other is not.  The outer declaration becomes
 \Index{visible} when the scope of the inner declaration terminates.
 \begin{rationale}
-Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same
-scope; a {\CC} program can not.
+Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same scope;
+a {\CC} program can not.
 \end{rationale}
 
@@ -232,16 +258,12 @@
 \index{linkage}
 
-\CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with
-external or internal linkage do not necessarily denote the same object or function. Instead, in the
-set of translation units and libraries that constitutes an entire program, any two instances of a
-particular identifier with \Index{external linkage} denote the same object or function if they have
-\Index{compatible type}s, or if one declares an array type and the other declares a pointer type and
-the element type and pointed-at type are compatible, or if one has function type and the other is a
-pointer to a compatible function type. Within one translation unit, each instance of an identifier
-with \Index{internal linkage} denotes the same object or function in the same circumstances.
+\CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with external or internal linkage do not necessarily denote the same object or function.
+Instead, in the set of translation units and libraries that constitutes an entire program, any two instances of a particular identifier with \Index{external linkage} denote the same object or function if they have
+\Index{compatible type}s, or if one declares an array type and the other declares a pointer type and the element type and pointed-at type are compatible, or if one has function type and the other is a pointer to a compatible function type.
+Within one translation unit, each instance of an identifier with \Index{internal linkage} denotes the same object or function in the same circumstances.
 Identifiers with \Index{no linkage} always denote unique entities.
 \begin{rationale}
-A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$; a C
-program cannot.
+A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$;
+a C program cannot.
 \end{rationale}
 
@@ -253,10 +275,8 @@
 \subsubsection{Semantics}
 
-\CFA provides a capability for generic types; using this capability a single "generic type
-generator" can be written that can represent multiple concrete type instantiations by substitution
-of the "type parameters" of the generic type for concrete types. Syntactically a generic type
-generator is represented by putting a forall specifier on a struct or union declaration, as defined
-in \VRef{forall}. An instantiation of the generic type is written by specifying the type parameters
-in parentheses after the name of the generic type generator:
+\CFA provides a capability for generic types;
+using this capability a single "generic type generator" can be written that can represent multiple concrete type instantiations by substitution of the "type parameters" of the generic type for concrete types.
+Syntactically a generic type generator is represented by putting a forall specifier on a struct or union declaration, as defined in \VRef{forall}.
+An instantiation of the generic type is written by specifying the type parameters in parentheses after the name of the generic type generator:
 \begin{lstlisting}
 forall( type T | sumable( T ) ) struct pair {
@@ -267,11 +287,8 @@
 \end{lstlisting}
 
-The type parameters in an instantiation of a generic type must satisfy any constraints in the forall
-specifier on the type generator declaration, e.g., \lstinline$sumable$. The instantiation then has
-the semantics that would result if the type parameters were substituted into the type generator
-declaration by macro substitution.
-
-Polymorphic functions may have generic types as parameters, and those generic types may use type
-parameters of the polymorphic function as type parameters of the generic type:
+The type parameters in an instantiation of a generic type must satisfy any constraints in the forall specifier on the type generator declaration, e.g., \lstinline$sumable$.
+The instantiation then has the semantics that would result if the type parameters were substituted into the type generator declaration by macro substitution.
+
+Polymorphic functions may have generic types as parameters, and those generic types may use type parameters of the polymorphic function as type parameters of the generic type:
 \begin{lstlisting}
 forall( type T ) void swap( pair(T) *p ) {
@@ -285,8 +302,5 @@
 \subsubsection{Constraints}
 
-To avoid unduly constraining implementors, the generic type generator definition must be visible at
-any point where it is instantiated.  Forward declarations of generic type generators are not
-forbidden, but the definition must be visible to instantiate the generic type.  Equivalently,
-instantiations of generic types are not allowed to be incomplete types.
+To avoid unduly constraining implementors, the generic type generator definition must be visible at any point where it is instantiated.  Forward declarations of generic type generators are not forbidden, but the definition must be visible to instantiate the generic type.  Equivalently, instantiations of generic types are not allowed to be incomplete types.
 
 \examples
@@ -295,15 +309,14 @@
 
 forall( type T ) struct B {
-	A(T) *a;  // legal, but cannot instantiate B(T)
+	A(T) *a;			// legal, but cannot instantiate B(T)
 };
 
-B(T) x; // illegal, *x.a is of an incomplete generic type
-
+B(T) x;					// illegal, *x.a is of an incomplete generic type
+ 
 forall( type T ) struct A {
 	B( T ) *b;
 };
 
-B( T ) y; // legal, *x.a is now of a complete generic type
-
+B( T ) y;				// legal, *x.a is now of a complete generic type
 
 // box.h:
@@ -313,6 +326,6 @@
 	
 // main.c:
-	box( int ) *b = make_box( 42 ); // illegal, def'n of box not visible
-	use_box( b ); // illegal
+	box( int ) *b = make_box( 42 ); // illegal, definition of box not visible
+	use_box( b );		// illegal
 \end{lstlisting}
 
@@ -320,5 +333,6 @@
 \section{Conversions}
 \CFA defines situations where values of one type are automatically converted to another type.
-These conversions are called \define{implicit conversion}s. The programmer can request
+These conversions are called \define{implicit conversion}s.
+The programmer can request
 \define{explicit conversion}s using cast expressions.
 
@@ -330,12 +344,9 @@
 \subsubsection{Safe arithmetic conversions}
 
-In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most
-binary arithmetic operators to convert the operands to a common type and determine the type of the
-operator's result. In \CFA, these conversions play a role in overload resolution, and
-collectively are called the \define{safe arithmetic conversion}s.
-
-Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion
-rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$. Let
-\(unsigned_{mr}\) be the unsigned integer type with maximal rank.
+In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most binary arithmetic operators to convert the operands to a common type and determine the type of the operator's result.
+In \CFA, these conversions play a role in overload resolution, and collectively are called the \define{safe arithmetic conversion}s.
+
+Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$.
+Let \(unsigned_{mr}\) be the unsigned integer type with maximal rank.
 
 The following conversions are \emph{direct} safe arithmetic conversions.
@@ -343,43 +354,26 @@
 \item
 The \Index{integer promotion}s.
-
-\item
-For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\)
-to \(unsigned_r\).
-
-\item
-For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists
-and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\).
-
+\item
+For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\) to \(unsigned_r\).
+\item
+For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\).
 \item
 Conversion from \(unsigned_{mr}\) to \lstinline$float$.
-
 \item
 Conversion from an enumerated type to its compatible integer type.
-
-\item
-Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to
-\lstinline$long double$.
-
-\item
-Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$,
-and from \lstinline$double _Complex$ to \lstinline$long double _Complex$.
-
+\item
+Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to \lstinline$long double$.
+\item
+Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$, and from \lstinline$double _Complex$ to \lstinline$long double _Complex$.
 \begin{sloppypar}
 \item
-Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from
-\lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the
-implementation supports imaginary types.
+Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from \lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the implementation supports imaginary types.
 \end{sloppypar}
 \end{itemize}
 
-If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion
-and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then
-the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic
-conversion.
-
-\begin{rationale}
-Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the
-usual arithmetic conversions, and \CFA does not include them as safe conversions.
+If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic conversion.
+
+\begin{rationale}
+Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the usual arithmetic conversions, and \CFA does not include them as safe conversions.
 \end{rationale}
 
@@ -393,7 +387,6 @@
 
 If an expression's type is a pointer to a structure or union type that has a member that is an
-\Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly
-converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's
-type. The result of the conversion is a pointer to the member.
+\Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's type.
+The result of the conversion is a pointer to the member.
 
 \examples
@@ -402,14 +395,13 @@
 	int x, y;
 };
-void move_by(struct point * p1, struct point * p2) {@\impl{move_by}@
+void move_by( struct point * p1, struct point * p2 ) {@\impl{move_by}@
 	p1->x += p2.x;
 	p1->y += p2.y;
 }
-
 struct color_point {
 	enum { RED, BLUE, GREEN } color;
 	struct point;
 } cp1, cp2;
-move_to(&cp1, &cp2);
+move_to( &cp1, &cp2 );
 \end{lstlisting}
 Thanks to implicit conversion, the two arguments that \lstinline$move_by()$ receives are pointers to
@@ -419,15 +411,11 @@
 \subsubsection{Specialization}
 A function or value whose type is polymorphic may be implicitly converted to one whose type is
-\Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}. Any
-value that is legal for the inferred parameter may be used, including other inferred parameters.
-
-If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters
-in its type, then an object or function must be visible at the point of the specialization that has
-the same identifier as the assertion parameter and has a type that is compatible\index{compatible
-  type} with or can be specialized to the type of the assertion parameter.  The assertion parameter
-is bound to that object or function.
-
-The type of the specialization is the type of the original with the bound inferred parameters and
-the bound assertion parameters replaced by their bound values.
+\Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}.
+Any value that is legal for the inferred parameter may be used, including other inferred parameters.
+
+If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters in its type, then an object or function must be visible at the point of the specialization that has the same identifier as the assertion parameter and has a type that is compatible\index{compatible
+  type} with or can be specialized to the type of the assertion parameter.  The assertion parameter is bound to that object or function.
+
+The type of the specialization is the type of the original with the bound inferred parameters and the bound assertion parameters replaced by their bound values.
 
 \examples
@@ -438,7 +426,7 @@
 can be specialized to (among other things)
 \begin{lstlisting}
-forall( type T ) void (*)( T, T );		// U bound to T 
-forall( type T ) void (*)( T, real );	// U bound to real 
-forall( type U ) void (*)( real, U );	// T bound to real 
+forall( type T ) void (*)( T, T );		// U bound to T
+forall( type T ) void (*)( T, real );	// U bound to real
+forall( type U ) void (*)( real, U );	// T bound to real
 void f( real, real );					// both bound to real 
 \end{lstlisting}
@@ -446,9 +434,9 @@
 The type
 \begin{lstlisting}
-forall( type T | T ?+?( T, T )) T (*)( T );
+forall( type T | T ?+?( T, T ) ) T (*)( T );
 \end{lstlisting}
 can be specialized to (among other things)
 \begin{lstlisting}
-int (*)( int );						// T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int ) 
+int (*)( int );		// T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int ) 
 \end{lstlisting}
 
@@ -465,20 +453,16 @@
 from a pointer to any non-\lstinline$void$ type to a pointer to \lstinline$void$;
 \item
-from a pointer to any type to a pointer to a more qualified version of the type\index{qualified
-type};
-\item
-from a pointer to a structure or union type to a pointer to the type of a member of the structure or
-union that is an \Index{anonymous structure} or an \Index{anonymous union};
-\item
-within the scope of an initialized \Index{type declaration}, conversions between a type and its
-implementation or between a pointer to a type and a pointer to its implementation.
+from a pointer to any type to a pointer to a more qualified version of the type\index{qualified type};
+\item
+from a pointer to a structure or union type to a pointer to the type of a member of the structure or union that is an \Index{anonymous structure} or an \Index{anonymous union};
+\item
+within the scope of an initialized \Index{type declaration}, conversions between a type and its implementation or between a pointer to a type and a pointer to its implementation.
 \end{itemize}
 
 Conversions that are not safe conversions are \define{unsafe conversion}s.
 \begin{rationale}
-As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type. This is
-clearly dangerous, and {\CC} does not have this implicit conversion.
-\CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a
-superset of C as possible, but discourages it by making it unsafe.
+As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type.
+This is clearly dangerous, and {\CC} does not have this implicit conversion.
+\CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a superset of C as possible, but discourages it by making it unsafe.
 \end{rationale}
 
@@ -486,7 +470,6 @@
 \subsection{Conversion cost}
 
-The \define{conversion cost} of a safe\index{safe conversion}
-conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion
-costs.} is a measure of how desirable or undesirable it is. It is defined as follows.
+The \define{conversion cost} of a safe\index{safe conversion} conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion costs.} is a measure of how desirable or undesirable it is.
+It is defined as follows.
 \begin{itemize}
 \item
@@ -497,6 +480,5 @@
 
 \item
-The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions
-needed to make up the conversion.
+The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions needed to make up the conversion.
 \end{itemize}
 
@@ -506,19 +488,16 @@
 \begin{itemize}
 \item
-The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1. The cost of an
-implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms
-of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and
-then to \lstinline$double$.
-
-\item
-If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an
-implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2:
-\lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$. Otherwise,
+The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1.
+The cost of an implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and then to \lstinline$double$.
+
+\item
+If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2:
+\lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$.
+Otherwise,
 \lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1.
 
 \item
-If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost
-of \lstinline$unsigned$ to \lstinline$long$ is 1. Otherwise, the conversion is an unsafe
-conversion, and its conversion cost is undefined.
+If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost of \lstinline$unsigned$ to \lstinline$long$ is 1.
+Otherwise, the conversion is an unsafe conversion, and its conversion cost is undefined.
 \end{itemize}
 
@@ -538,9 +517,7 @@
 \subsection{Identifiers}
 
-\CFA allows operator \Index{overloading} by associating operators with special function
-identifiers. Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status
-for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them
-as overloadable identifiers. Programmers can use these identifiers to declare functions and objects
-that implement operators and constants for their own types.
+\CFA allows operator \Index{overloading} by associating operators with special function identifiers.
+Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them as overloadable identifiers.
+Programmers can use these identifiers to declare functions and objects that implement operators and constants for their own types.
 
 
@@ -554,27 +531,21 @@
 \end{syntax}
 
-\index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0}
-and ``\lstinline$1$''\impl{1} are identifiers. No other tokens defined by the rules for integer
-constants are considered to be identifiers.
-\begin{rationale}
-Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C. All scalar
-types can be incremented and decremented, which is defined in terms of adding or subtracting 1. The
-operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any
-scalar arguments, and are defined in terms of comparison against 0. A \nonterm{constant-expression}
-that evaluates to 0 is effectively compatible with every pointer type.
-
-In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to
-any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to
-0 as a special case. However, user-defined arithmetic types often need the equivalent of a 1 or 0
-for their functions or operators, polymorphic functions often need 0 and 1 constants of a type
-matching their polymorphic parameters, and user-defined pointer-like types may need a null value.
-Defining special constants for a user-defined type is more efficient than defining a conversion to
-the type from \lstinline$_Bool$.
-
-Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers
-have special status in C. A facility that let programmers declare specific
-constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement.
-Some facility for defining the creation of values of programmer-defined types from arbitrary integer
-tokens would be needed. The complexity of such a feature doesn't seem worth the gain.
+\index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0} and ``\lstinline$1$''\impl{1} are identifiers.
+No other tokens defined by the rules for integer constants are considered to be identifiers.
+\begin{rationale}
+Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C.
+All scalar types can be incremented and decremented, which is defined in terms of adding or subtracting 1.
+The operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any scalar arguments, and are defined in terms of comparison against 0.
+A \nonterm{constant-expression} that evaluates to 0 is effectively compatible with every pointer type.
+
+In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to
+0 as a special case.
+However, user-defined arithmetic types often need the equivalent of a 1 or 0 for their functions or operators, polymorphic functions often need 0 and 1 constants of a type matching their polymorphic parameters, and user-defined pointer-like types may need a null value.
+Defining special constants for a user-defined type is more efficient than defining a conversion to the type from \lstinline$_Bool$.
+
+Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers have special status in C.
+A facility that let programmers declare specific constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement.
+Some facility for defining the creation of values of programmer-defined types from arbitrary integer tokens would be needed.
+The complexity of such a feature doesn't seem worth the gain.
 \end{rationale}
 
@@ -582,10 +553,7 @@
 \subsubsection{Operator identifiers}
 
-\index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the
-programmer-definable operator identifiers and the operations they are associated with. Functions
-that are declared with (or pointed at by function pointers that are declared with) these identifiers
-can be called by expressions that use the operator tokens and syntax, or the operator identifiers
-and ``function call'' syntax. The relationships between operators and function calls are discussed
-in descriptions of the operators.
+\index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the programmer-definable operator identifiers and the operations they are associated with.
+Functions that are declared with (or pointed at by function pointers that are declared with) these identifiers can be called by expressions that use the operator tokens and syntax, or the operator identifiers and ``function call'' syntax.
+The relationships between operators and function calls are discussed in descriptions of the operators.
 
 \begin{table}[hbt]
@@ -644,16 +612,13 @@
 
 \begin{rationale}
-Operator identifiers are made up of the characters of the operator token, with question marks added
-to mark the positions of the arguments of operators. The question marks serve as mnemonic devices;
-programmers can not create new operators by arbitrarily mixing question marks and other
-non-alphabetic characters. Note that prefix and postfix versions of the increment and decrement
-operators are distinguished by the position of the question mark.
-\end{rationale}
-
-\begin{rationale}
-The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs.  For
-instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a
-\CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not
-as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''.
+Operator identifiers are made up of the characters of the operator token, with question marks added to mark the positions of the arguments of operators.
+The question marks serve as mnemonic devices;
+programmers can not create new operators by arbitrarily mixing question marks and other non-alphabetic characters.
+Note that prefix and postfix versions of the increment and decrement operators are distinguished by the position of the question mark.
+\end{rationale}
+
+\begin{rationale}
+The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs.  For instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a
+\CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''.
 \end{rationale}
 
@@ -663,40 +628,41 @@
 \item
 The logical operators ``\lstinline$&&$'' and ``\lstinline$||$'', and the conditional operator
-``\lstinline$?:$''. These operators do not always evaluate their operands, and hence can not be
-properly defined by functions unless some mechanism like call-by-name is added to the language.
-Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by
-checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$''
-for user-defined types is enough to allow them to be used in logical expressions.
-
-\item
-The comma operator\index{comma expression}. It is a control-flow operator like those above.
+``\lstinline$?:$''.
+These operators do not always evaluate their operands, and hence can not be properly defined by functions unless some mechanism like call-by-name is added to the language.
+Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$'' for user-defined types is enough to allow them to be used in logical expressions.
+
+\item
+The comma operator\index{comma expression}.
+It is a control-flow operator like those above.
 Changing its meaning seems pointless and confusing.
 
 \item
-The ``address of'' operator. It would seem useful to define a unary ``\lstinline$&$'' operator that
-returns values of some programmer-defined pointer-like type. The problem lies with the type of the
-operator. Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type
-\lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$. The expression
-might be treated as a call to the unary function ``\lstinline$&?$''. Now what is the type of the
-function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by
-value, and there is no way to create a useful pointer-like result from a value. Hence the parameter
-must have type \lstinline$T *$. But then the expression must be rewritten as ``\lstinline$p = &?( &x )$''
+The ``address of'' operator.
+It would seem useful to define a unary ``\lstinline$&$'' operator that returns values of some programmer-defined pointer-like type.
+The problem lies with the type of the operator.
+Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type
+\lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$.
+The expression might be treated as a call to the unary function ``\lstinline$&?$''.
+Now what is the type of the function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by value, and there is no way to create a useful pointer-like result from a value.
+Hence the parameter must have type \lstinline$T *$.
+But then the expression must be rewritten as ``\lstinline$p = &?( &x )$''
 ---which doesn't seem like progress!
 
-The rule for address-of expressions would have to be something like ``keep applying address-of
-functions until you get one that takes a pointer argument, then use the built-in operator and
-stop''. It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$.
-
-\item
-The \lstinline$sizeof$ operator. It is already defined for every object type, and intimately tied
-into the language's storage allocation model. Redefining it seems pointless.
-
-\item
-The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''. These are not really infix
-operators, since their right ``operand'' is not a value or object.
-
-\item
-Cast operators\index{cast expression}. Anything that can be done with an explicit cast can be done
-with a function call. The difference in syntax is small.
+The rule for address-of expressions would have to be something like ``keep applying address-of functions until you get one that takes a pointer argument, then use the built-in operator and stop''.
+It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$.
+
+\item
+The \lstinline$sizeof$ operator.
+It is already defined for every object type, and intimately tied into the language's storage allocation model.
+Redefining it seems pointless.
+
+\item
+The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''.
+These are not really infix operators, since their right ``operand'' is not a value or object.
+
+\item
+Cast operators\index{cast expression}.
+Anything that can be done with an explicit cast can be done with a function call.
+The difference in syntax is small.
 \end{itemize}
 \end{rationale}
@@ -705,82 +671,69 @@
 \section{Expressions}
 
-\CFA allows operators and identifiers to be overloaded. Hence, each expression can have a number
-of \define{interpretation}s, each of which has a different type. The interpretations that are
-potentially executable are called \define{valid interpretation}s. The set of interpretations
-depends on the kind of expression and on the interpretations of the subexpressions that it contains.
-The rules for determining the valid interpretations of an expression are discussed below for each
-kind of expression. Eventually the context of the outermost expression chooses one interpretation
-of that expression.
-
-An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or
-function denoted by every identifier in the expression. An expression can have some interpretations
-that are ambiguous and others that are unambiguous. An expression that is chosen to be executed
-shall not be ambiguous.
-
-The \define{best valid interpretations} are the valid interpretations that use the fewest
-unsafe\index{unsafe conversion} conversions. Of these, the best are those where the functions and
-objects involved are the least polymorphic\index{less polymorphic}. Of these, the best have the
-lowest total \Index{conversion cost}, including all implicit conversions in the argument
-expressions. Of these, the best have the highest total conversion cost for the implicit conversions
-(if any) applied to the argument expressions. If there is no single best valid interpretation, or if
-the best valid interpretation is ambiguous, then the resulting interpretation is
-ambiguous\index{ambiguous interpretation}.
-
-\begin{rationale}
-\CFA's rules for selecting the best interpretation are designed to allow overload resolution to
-mimic C's operator semantics. In C, the ``usual arithmetic conversions'' are applied to the
-operands of binary operators if necessary to convert the operands to types with a common real type.
-In \CFA, those conversions are ``safe''. The ``fewest unsafe conversions'' rule ensures that the
-usual conversions are done, if possible. The ``lowest total expression cost'' rule chooses the
-proper common type. The odd-looking ``highest argument conversion cost'' rule ensures that, when
-unary expressions must be converted, conversions of function results are preferred to conversion of
-function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$.
-
-The ``least polymorphic'' rule reduces the number of polymorphic function calls, since such
-functions are presumably more expensive than monomorphic functions and since the more specific
-function is presumably more appropriate. It also gives preference to monomorphic values (such as the
+\CFA allows operators and identifiers to be overloaded.
+Hence, each expression can have a number of \define{interpretation}s, each of which has a different type.
+The interpretations that are potentially executable are called \define{valid interpretation}s.
+The set of interpretations depends on the kind of expression and on the interpretations of the subexpressions that it contains.
+The rules for determining the valid interpretations of an expression are discussed below for each kind of expression.
+Eventually the context of the outermost expression chooses one interpretation of that expression.
+
+An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or function denoted by every identifier in the expression.
+An expression can have some interpretations that are ambiguous and others that are unambiguous.
+An expression that is chosen to be executed shall not be ambiguous.
+
+The \define{best valid interpretations} are the valid interpretations that use the fewest unsafe\index{unsafe conversion} conversions.
+Of these, the best are those where the functions and objects involved are the least polymorphic\index{less polymorphic}.
+Of these, the best have the lowest total \Index{conversion cost}, including all implicit conversions in the argument expressions.
+Of these, the best have the highest total conversion cost for the implicit conversions
+(if any) applied to the argument expressions.
+If there is no single best valid interpretation, or if the best valid interpretation is ambiguous, then the resulting interpretation is ambiguous\index{ambiguous interpretation}.
+
+\begin{rationale}
+\CFA's rules for selecting the best interpretation are designed to allow overload resolution to mimic C's operator semantics.
+In C, the ``usual arithmetic conversions'' are applied to the operands of binary operators if necessary to convert the operands to types with a common real type.
+In \CFA, those conversions are ``safe''.
+The ``fewest unsafe conversions'' rule ensures that the usual conversions are done, if possible.
+The ``lowest total expression cost'' rule chooses the proper common type.
+The odd-looking ``highest argument conversion cost'' rule ensures that, when unary expressions must be converted, conversions of function results are preferred to conversion of function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$.
+
+The ``least polymorphic'' rule reduces the number of polymorphic function calls, since such functions are presumably more expensive than monomorphic functions and since the more specific function is presumably more appropriate.
+It also gives preference to monomorphic values (such as the
 \lstinline$int$ \lstinline$0$) over polymorphic values (such as the \Index{null pointer}
-\lstinline$0$\use{0}). However, interpretations that call polymorphic functions are preferred to
-interpretations that perform unsafe conversions, because those conversions potentially lose accuracy
-or violate strong typing.
+\lstinline$0$\use{0}).
+However, interpretations that call polymorphic functions are preferred to interpretations that perform unsafe conversions, because those conversions potentially lose accuracy or violate strong typing.
 
 There are two notable differences between \CFA's overload resolution rules and the rules for
-{\CC} defined in \cite{c++}. First, the result type of a function plays a role. In {\CC}, a
-function call must be completely resolved based on the arguments to the call in most circumstances.
-In \CFA, a function call may have several interpretations, each with a different result type, and
-the interpretations of the containing context choose among them. Second, safe conversions are used
-to choose among interpretations of all sorts of functions; in {\CC}, the ``usual arithmetic
-conversions'' are a separate set of rules that apply only to the built-in operators.
-\end{rationale}
-
-Expressions involving certain operators\index{operator identifiers} are considered to be equivalent
-to function calls. A transformation from ``operator'' syntax to ``function call'' syntax is defined
-by \define{rewrite rules}. Each operator has a set of predefined functions that overload its
-identifier. Overload resolution determines which member of the set is executed in a given
-expression. The functions have \Index{internal linkage} and are implicitly declared with \Index{file
-scope}. The predefined functions and rewrite rules are discussed below for each of these
-operators.
-\begin{rationale}
-Predefined functions and constants have internal linkage because that simplifies optimization in
-traditional compile-and-link environments. For instance, ``\lstinline$an_int + an_int$'' is
-equivalent to ``\lstinline$?+?(an_int, an_int)$''. If integer addition has not been redefined in
-the current scope, a compiler can generate code to perform the addition directly. If predefined
-functions had external linkage, this optimization would be difficult.
-\end{rationale}
-
-\begin{rationale}
-Since each subsection describes the interpretations of an expression in terms of the interpretations
-of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that
-uses one bottom-up pass over an expression tree. Such an algorithm was first described (for Ada) by
-Baker~\cite{Bak:overload}. It is extended here to handle polymorphic functions and arithmetic
-conversions. The overload resolution rules and the predefined functions have been chosen so that, in
-programs that do not introduce overloaded declarations, expressions will have the same meaning in C
-and in \CFA.
-\end{rationale}
-
-\begin{rationale}
-Expression syntax is quoted from the {\c11} standard. The syntax itself defines the precedence and
-associativity of operators. The sections are arranged in decreasing order of precedence, with all
-operators in a section having the same precedence.
+{\CC} defined in \cite{c++}.
+First, the result type of a function plays a role.
+In {\CC}, a function call must be completely resolved based on the arguments to the call in most circumstances.
+In \CFA, a function call may have several interpretations, each with a different result type, and the interpretations of the containing context choose among them.
+Second, safe conversions are used to choose among interpretations of all sorts of functions;
+in {\CC}, the ``usual arithmetic conversions'' are a separate set of rules that apply only to the built-in operators.
+\end{rationale}
+
+Expressions involving certain operators\index{operator identifiers} are considered to be equivalent to function calls.
+A transformation from ``operator'' syntax to ``function call'' syntax is defined by \define{rewrite rules}.
+Each operator has a set of predefined functions that overload its identifier.
+Overload resolution determines which member of the set is executed in a given expression.
+The functions have \Index{internal linkage} and are implicitly declared with \Index{file scope}.
+The predefined functions and rewrite rules are discussed below for each of these operators.
+\begin{rationale}
+Predefined functions and constants have internal linkage because that simplifies optimization in traditional compile-and-link environments.
+For instance, ``\lstinline$an_int + an_int$'' is equivalent to ``\lstinline$?+?(an_int, an_int)$''.
+If integer addition has not been redefined in the current scope, a compiler can generate code to perform the addition directly.
+If predefined functions had external linkage, this optimization would be difficult.
+\end{rationale}
+
+\begin{rationale}
+Since each subsection describes the interpretations of an expression in terms of the interpretations of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that uses one bottom-up pass over an expression tree.
+Such an algorithm was first described (for Ada) by Baker~\cite{Bak:overload}.
+It is extended here to handle polymorphic functions and arithmetic conversions.
+The overload resolution rules and the predefined functions have been chosen so that, in programs that do not introduce overloaded declarations, expressions will have the same meaning in C and in \CFA.
+\end{rationale}
+
+\begin{rationale}
+Expression syntax is quoted from the {\c11} standard.
+The syntax itself defines the precedence and associativity of operators.
+The sections are arranged in decreasing order of precedence, with all operators in a section having the same precedence.
 \end{rationale}
 
@@ -801,26 +754,20 @@
 const int 1;@\use{1}@
 const int 0;@\use{0}@
-forall( dtype DT ) DT *const 0;
-forall( ftype FT ) FT *const 0;
+forall( dtype DT ) DT * const 0;
+forall( ftype FT ) FT * const 0;
 \end{lstlisting}
 
 \semantics
-The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible}
-declarations of the identifier.
-
-A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type
-and value defined by {\c11}. The predefined integer identifiers ``\lstinline$1$'' and
-``\lstinline$0$'' have the integer values 1 and 0, respectively. The other two predefined
-``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when
-specialized\index{specialization} with a data type or function type respectively, produce a null
-pointer of that type.
+The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible} declarations of the identifier.
+
+A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type and value defined by {\c11}.
+The predefined integer identifiers ``\lstinline$1$'' and ``\lstinline$0$'' have the integer values 1 and 0, respectively.
+The other two predefined ``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when specialized\index{specialization} with a data type or function type respectively, produce a null pointer of that type.
 
 A parenthesised expression has the same interpretations as the contained \nonterm{expression}.
 
 \examples
-The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null
-pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe
-conversion from \lstinline$void *$ to \lstinline$const void *$. In each case, the null pointer
-conversion is better\index{best valid interpretations} than the unsafe conversion of the integer
+The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe conversion from \lstinline$void *$ to \lstinline$const void *$.
+In each case, the null pointer conversion is better\index{best valid interpretations} than the unsafe conversion of the integer
 \lstinline$0$ to a pointer.
 
@@ -828,22 +775,19 @@
 Note that the predefined identifiers have addresses.
 
-\CFA does not have C's concept of ``null pointer constants'', which are not typed values but
-special strings of tokens. The C token ``\lstinline$0$'' is an expression of type \lstinline$int$
-with the value ``zero'', and it \emph{also} is a null pointer constant. Similarly,
-``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer,
-and it also is a null pointer constant. However, in C, ``\lstinline$(void *)(void *)0$'' is
-\emph{not} a null pointer constant, even though it is null-valued, a pointer, and constant! The
-semantics of C expressions contain many special cases to deal with subexpressions that are null
-pointer constants.
-
-\CFA handles these cases through overload resolution. The declaration
-\begin{lstlisting}
-forall( dtype DT ) DT *const 0;
-\end{lstlisting}
-means that \lstinline$0$ is a polymorphic object, and contains a value that can have \emph{any}
-pointer-to-object type or pointer-to-incomplete type. The only such value is the null pointer.
-Therefore the type \emph{alone} is enough to identify a null pointer. Where C defines an operator
-with a special case for the null pointer constant, \CFA defines predefined functions with a
-polymorphic object parameter.
+\CFA does not have C's concept of ``null pointer constants'', which are not typed values but special strings of tokens.
+The C token ``\lstinline$0$'' is an expression of type \lstinline$int$ with the value ``zero'', and it \emph{also} is a null pointer constant.
+Similarly,
+``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer, and it also is a null pointer constant.
+However, in C, ``\lstinline$(void *)(void *)0$'' is
+\emph{not} a null pointer constant, even though it is null-valued, a pointer, and constant! The semantics of C expressions contain many special cases to deal with subexpressions that are null pointer constants.
+
+\CFA handles these cases through overload resolution.
+The declaration
+\begin{lstlisting}
+forall( dtype DT ) DT * const 0;
+\end{lstlisting} means that \lstinline$0$ is a polymorphic object, and contains a value that can have \emph{any} pointer-to-object type or pointer-to-incomplete type.
+The only such value is the null pointer.
+Therefore the type \emph{alone} is enough to identify a null pointer.
+Where C defines an operator with a special case for the null pointer constant, \CFA defines predefined functions with a polymorphic object parameter.
 \end{rationale}
 
@@ -851,9 +795,6 @@
 \subsubsection{Generic selection}
 
-\constraints The best interpretation of the controlling expression shall be
-unambiguous\index{ambiguous interpretation}, and shall have type compatible with at most one of the
-types named in its generic association list. If a generic selection has no \lstinline$default$
-generic association, the best interpretation of its controlling expression shall have type
-compatible with exactly one of the types named in its generic association list.
+\constraints The best interpretation of the controlling expression shall be unambiguous\index{ambiguous interpretation}, and shall have type compatible with at most one of the types named in its generic association list.
+If a generic selection has no \lstinline$default$ generic association, the best interpretation of its controlling expression shall have type compatible with exactly one of the types named in its generic association list.
 
 \semantics
@@ -883,7 +824,7 @@
 \rewriterules
 \begin{lstlisting}
-a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type */@\use{?[?]}@
+a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type@\use{?[?]}@
 a[b] @\rewrite@ ?[?]( a, b ) // otherwise
-a( ${\em arguments }$ ) @\rewrite@ ?()( a, ${\em arguments} )$@\use{?()}@
+a( @\emph{arguments}@ ) @\rewrite@ ?()( a, @\emph{arguments}@ )@\use{?()}@
 a++ @\rewrite@ ?++(&( a ))@\use{?++}@
 a-- @\rewrite@ ?--(&( a ))@\use{?--}@
@@ -913,21 +854,17 @@
 \end{lstlisting}
 \semantics
-The interpretations of subscript expressions are the interpretations of the corresponding function
-call expressions.
+The interpretations of subscript expressions are the interpretations of the corresponding function call expressions.
 \begin{rationale}
 C defines subscripting as pointer arithmetic in a way that makes \lstinline$a[i]$ and
-\lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the
-number of overloadings of \lstinline$?[?]$.
-
-Subscript expressions are rewritten as function calls that pass the first parameter by value. This
-is somewhat unfortunate, since array-like types tend to be large. The alternative is to use the
-rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''. However, C semantics forbid
-this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which
-does not have an address.
+\lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline$?[?]$.
+
+Subscript expressions are rewritten as function calls that pass the first parameter by value.
+This is somewhat unfortunate, since array-like types tend to be large.
+The alternative is to use the rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''.
+However, C semantics forbid this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which does not have an address.
 
 The repetitive form of the predefined identifiers shows up a deficiency\index{deficiencies!pointers
- to qualified types} of \CFA's type system. Type qualifiers are not included in type values, so
-polymorphic functions that take pointers to arbitrary types often come in one flavor for each
-possible qualification of the pointed-at type.
+ to qualified types} of \CFA's type system.
+Type qualifiers are not included in type values, so polymorphic functions that take pointers to arbitrary types often come in one flavor for each possible qualification of the pointed-at type.
 \end{rationale}
 
@@ -936,24 +873,16 @@
 
 \semantics
-A \define{function designator} is an interpretation of an expression that has function type. The
-\nonterm{postfix-expression} in a function call may have some interpretations that are function
-designators and some that are not.
-
-For those interpretations of the \nonterm{postfix-expression} that are not function designators, the
-expression is rewritten and becomes a call of a function named ``\lstinline$?()$''. The valid
-interpretations of the rewritten expression are determined in the manner described below.
-
-Each combination of function designators and argument interpretations is considered. For those
-interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function}
-designators, the combination has a \Index{valid interpretation} if the function designator accepts
-the number of arguments given, and each argument interpretation matches the corresponding explicit
-parameter:
+A \define{function designator} is an interpretation of an expression that has function type.
+The
+\nonterm{postfix-expression} in a function call may have some interpretations that are function designators and some that are not.
+
+For those interpretations of the \nonterm{postfix-expression} that are not function designators, the expression is rewritten and becomes a call of a function named ``\lstinline$?()$''.
+The valid interpretations of the rewritten expression are determined in the manner described below.
+
+Each combination of function designators and argument interpretations is considered.
+For those interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function} designators, the combination has a \Index{valid interpretation} if the function designator accepts the number of arguments given, and each argument interpretation matches the corresponding explicit parameter:
 \begin{itemize}
-\item
-if the argument corresponds to a parameter in the function designator's prototype, the argument
-interpretation must have the same type as the corresponding parameter, or be implicitly convertible
-to the parameter's type
-\item
-if the function designator's type does not include a prototype or if the argument corresponds to
+\item if the argument corresponds to a parameter in the function designator's prototype, the argument interpretation must have the same type as the corresponding parameter, or be implicitly convertible to the parameter's type
+\item if the function designator's type does not include a prototype or if the argument corresponds to
 ``\lstinline$...$'' in a prototype, a \Index{default argument promotion} is applied to it.
 \end{itemize}
@@ -961,49 +890,29 @@
 
 For those combinations where the interpretation of the \nonterm{postfix-expression} is a
-\Index{polymorphic function} designator and the function designator accepts the number of arguments
-given, there shall be at least one set of \define{implicit argument}s for the implicit parameters
-such that
+\Index{polymorphic function} designator and the function designator accepts the number of arguments given, there shall be at least one set of \define{implicit argument}s for the implicit parameters such that
 \begin{itemize}
 \item
-If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the
-implicit argument must be an object type; if it uses \lstinline$dtype$, the implicit argument must
-be an object type or an incomplete type; and if it uses \lstinline$ftype$, the implicit argument
-must be a function type.
-
-\item
-if an explicit parameter's type uses any implicit parameters, then the corresponding explicit
-argument must have a type that is (or can be safely converted\index{safe conversion} to) the type
-produced by substituting the implicit arguments for the implicit parameters in the explicit
-parameter type.
-
-\item
-the remaining explicit arguments must match the remaining explicit parameters, as described for
-monomorphic function designators.
-
-\item
-for each \Index{assertion parameter} in the function designator's type, there must be an object or
-function with the same identifier that is visible at the call site and whose type is compatible with
-or can be specialized to the type of the assertion declaration.
+If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the implicit argument must be an object type;
+if it uses \lstinline$dtype$, the implicit argument must be an object type or an incomplete type;
+and if it uses \lstinline$ftype$, the implicit argument must be a function type.
+
+\item if an explicit parameter's type uses any implicit parameters, then the corresponding explicit argument must have a type that is (or can be safely converted\index{safe conversion} to) the type produced by substituting the implicit arguments for the implicit parameters in the explicit parameter type.
+
+\item the remaining explicit arguments must match the remaining explicit parameters, as described for monomorphic function designators.
+
+\item for each \Index{assertion parameter} in the function designator's type, there must be an object or function with the same identifier that is visible at the call site and whose type is compatible with or can be specialized to the type of the assertion declaration.
 \end{itemize}
-There is a valid interpretation for each such set of implicit parameters. The type of each valid
-interpretation is the return type of the function designator with implicit parameter values
-substituted for the implicit arguments.
-
-A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or
-any of the argument interpretations is ambiguous.
-
-Every valid interpretation whose return type is not compatible with any other valid interpretation's
-return type is an interpretation of the function call expression.
-
-Every set of valid interpretations that have mutually compatible\index{compatible type} result types
-also produces an interpretation of the function call expression. The type of the interpretation is
-the \Index{composite type} of the types of the valid interpretations, and the value of the
-interpretation is that of the \Index{best valid interpretation}.
-\begin{rationale}
-One desirable property of a polymorphic programming language is \define{generalizability}: the
-ability to replace an abstraction with a more general but equivalent abstraction without requiring
-changes in any of the uses of the original\cite{Cormack90}. For instance, it should be possible to
-replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( type T ) T f( T );$''
-without affecting any calls of \lstinline$f$.
+There is a valid interpretation for each such set of implicit parameters.
+The type of each valid interpretation is the return type of the function designator with implicit parameter values substituted for the implicit arguments.
+
+A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or any of the argument interpretations is ambiguous.
+
+Every valid interpretation whose return type is not compatible with any other valid interpretation's return type is an interpretation of the function call expression.
+
+Every set of valid interpretations that have mutually compatible\index{compatible type} result types also produces an interpretation of the function call expression.
+The type of the interpretation is the \Index{composite type} of the types of the valid interpretations, and the value of the interpretation is that of the \Index{best valid interpretation}.
+\begin{rationale}
+One desirable property of a polymorphic programming language is \define{generalizability}: the ability to replace an abstraction with a more general but equivalent abstraction without requiring changes in any of the uses of the original\cite{Cormack90}.
+For instance, it should be possible to replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( type T ) T f( T );$'' without affecting any calls of \lstinline$f$.
 
 \CFA\index{deficiencies!generalizability} does not fully possess this property, because
@@ -1015,17 +924,16 @@
 float f;
 double d;
-f = g( f, f );	// (1) 
-f = g( i, f );	// (2) (safe conversion to float) 
-f = g( d, f );	// (3) (unsafe conversion to float) 
-\end{lstlisting}
-If \lstinline$g$ was replaced by ``\lstinline$forall( type T ) T g( T, T );$'', the first and second
-calls would be unaffected, but the third would change: \lstinline$f$ would be converted to
+f = g( f, f );		// (1)
+f = g( i, f );		// (2) (safe conversion to float)
+f = g( d, f );		// (3) (unsafe conversion to float) 
+\end{lstlisting}
+If \lstinline$g$ was replaced by ``\lstinline$forall( type T ) T g( T, T );$'', the first and second calls would be unaffected, but the third would change: \lstinline$f$ would be converted to
 \lstinline$double$, and the result would be a \lstinline$double$.
 
-Another example is the function ``\lstinline$void h( int *);$''. This function can be passed a
-\lstinline$void *$ argument, but the generalization ``\lstinline$forall( type T ) void h( T *);$''
-can not. In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an
-object type. If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any}
-object type, which is undesirable.
+Another example is the function ``\lstinline$void h( int *);$''.
+This function can be passed a
+\lstinline$void *$ argument, but the generalization ``\lstinline$forall( type T ) void h( T *);$'' can not.
+In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an object type.
+If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any} object type, which is undesirable.
 \end{rationale}
 
@@ -1045,14 +953,11 @@
 For that interpretation, the function call is treated as ``\lstinline$?()( sin_dx, 12.9 )$''.
 \begin{lstlisting}
-int f( long );		// (1) 
-int f( int, int );	// (2) 
+int f( long );		// (1)
+int f( int, int );	// (2)
 int f( int *);		// (3) 
-
 int i = f( 5 );		// calls (1) 
 \end{lstlisting}
-Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit
-\lstinline$int$ to \lstinline$long$ conversion. The other functions do not, since the second
-requires two arguments, and since there is no implicit conversion from \lstinline$int$ to
-\lstinline$int *$ that could be used with the third function.
+Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit \lstinline$int$ to \lstinline$long$ conversion.
+The other functions do not, since the second requires two arguments, and since there is no implicit conversion from \lstinline$int$ to \lstinline$int *$ that could be used with the third function.
 
 \begin{lstlisting}
@@ -1064,30 +969,25 @@
 
 \begin{lstlisting}
-forall( type T, type U ) void g( T, U );	// (4) 
-forall( type T ) void g( T, T );			// (5) 
-forall( type T ) void g( T, long );			// (6) 
-void g( long, long );						// (7) 
+forall( type T, type U ) void g( T, U );	// (4)
+forall( type T ) void g( T, T );			// (5)
+forall( type T ) void g( T, long );			// (6)
+void g( long, long );						// (7)
 double d;
 int i;
 int *p;
-
-g( d, d );			// calls (5) 
-g( d, i );			// calls (6) 
-g( i, i );			// calls (7) 
+g( d, d );			// calls (5)
+g( d, i );			// calls (6)
+g( i, i );			// calls (7)
 g( i, p );			// calls (4) 
 \end{lstlisting}
-The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are
-discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is
-chosen because it is less polymorphic than (4).
-
-For the second call, (7) is again discarded. Of the remaining interpretations for (4), (5), and (6)
-(with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least
-polymorphic.
-
-The third call has valid interpretations for all of the functions; (7) is chosen since it is not
-polymorphic at all.
-
-The fourth call has no interpretation for (5), because its arguments must have compatible type. (4)
-is chosen because it does not involve unsafe conversions.
+The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is chosen because it is less polymorphic than (4).
+
+For the second call, (7) is again discarded.
+Of the remaining interpretations for (4), (5), and (6) (with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least polymorphic.
+
+The third call has valid interpretations for all of the functions;
+(7) is chosen since it is not polymorphic at all.
+
+The fourth call has no interpretation for (5), because its arguments must have compatible type. (4) is chosen because it does not involve unsafe conversions.
 \begin{lstlisting}
 forall( type T ) T min( T, T );
@@ -1098,33 +998,28 @@
 }
 forall( type U | min_max( U ) ) void shuffle( U, U );
-shuffle(9, 10);
-\end{lstlisting}
-The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the
-only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and
+shuffle( 9, 10 );
+\end{lstlisting}
+The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and
 \lstinline$min$ must be specialized with \lstinline$T$ bound to \lstinline$double$.
 \begin{lstlisting}
-extern void q( int );		// (8) 
-extern void q( void * );	// (9) 
+extern void q( int );		// (8)
+extern void q( void * );	// (9)
 extern void r();
 q( 0 );
 r( 0 );
 \end{lstlisting}
-The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of
-the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9). The former is
-chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}. For
-the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has
-\emph{no} declared parameter types.
+The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9).
+The former is chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}.
+For the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has \emph{no} declared parameter types.
 
 
 \subsubsection{Structure and union members}
 
-\semantics In the member selection expression ``\lstinline$s$.\lstinline$m$'', there shall be at
-least one interpretation of \lstinline$s$ whose type is a structure type or union type containing a
-member named \lstinline$m$. If two or more interpretations of \lstinline$s$ have members named
-\lstinline$m$ with mutually compatible types, then the expression has an \Index{ambiguous
-interpretation} whose type is the composite type of the types of the members. If an interpretation
-of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other
-\lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type. The
-expression has no other interpretations.
+\semantics In the member selection expression ``\lstinline$s$.\lstinline$m$'', there shall be at least one interpretation of \lstinline$s$ whose type is a structure type or union type containing a member named \lstinline$m$.
+If two or more interpretations of \lstinline$s$ have members named
+\lstinline$m$ with mutually compatible types, then the expression has an \Index{ambiguous interpretation} whose type is the composite type of the types of the members.
+If an interpretation of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other
+\lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type.
+The expression has no other interpretations.
 
 The expression ``\lstinline$p->m$'' has the same interpretations as the expression
@@ -1136,159 +1031,89 @@
 \predefined
 \begin{lstlisting}
-_Bool ?++( volatile _Bool * ),
-	?++( _Atomic volatile _Bool * );
-char ?++( volatile char * ),
-	?++( _Atomic volatile char * );
-signed char ?++( volatile signed char * ),
-	?++( _Atomic volatile signed char * );
-unsigned char ?++( volatile signed char * ),
-	?++( _Atomic volatile signed char * );
-short int ?++( volatile short int * ),
-	?++( _Atomic volatile short int * );
-unsigned short int ?++( volatile unsigned short int * ),
-	?++( _Atomic volatile unsigned short int * );
-int ?++( volatile int * ),
-	?++( _Atomic volatile int * );
-unsigned int ?++( volatile unsigned int * ),
-	?++( _Atomic volatile unsigned int * );
-long int ?++( volatile long int * ),
-	?++( _Atomic volatile long int * );
-long unsigned int ?++( volatile long unsigned int * ),
-	?++( _Atomic volatile long unsigned int * );
-long long int ?++( volatile long long int * ),
-	?++( _Atomic volatile long long int * );
-long long unsigned ?++( volatile long long unsigned int * ),
-	?++( _Atomic volatile long long unsigned int * );
-float ?++( volatile float * ),
-	?++( _Atomic volatile float * );
-double ?++( volatile double * ),
-	?++( _Atomic volatile double * );
-long double ?++( volatile long double * ),
-	?++( _Atomic volatile long double * );
-
-forall( type T ) T * ?++( T * restrict volatile * ),
-	* ?++( T * _Atomic restrict volatile * );
-
-forall( type T ) _Atomic T * ?++( _Atomic T * restrict volatile * ),
-	* ?++( _Atomic T * _Atomic restrict volatile * );
-
-forall( type T ) const T * ?++( const T * restrict volatile * ),
-	* ?++( const T * _Atomic restrict volatile * );
-
-forall( type T ) volatile T * ?++( volatile T * restrict volatile * ),
-	* ?++( volatile T * _Atomic restrict volatile * );
-
-forall( type T ) restrict T * ?++( restrict T * restrict volatile * ),
-	* ?++( restrict T * _Atomic restrict volatile * );
-
+_Bool ?++( volatile _Bool * ), ?++( _Atomic volatile _Bool * );
+char ?++( volatile char * ), ?++( _Atomic volatile char * );
+signed char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * );
+unsigned char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * );
+short int ?++( volatile short int * ), ?++( _Atomic volatile short int * );
+unsigned short int ?++( volatile unsigned short int * ), ?++( _Atomic volatile unsigned short int * );
+int ?++( volatile int * ), ?++( _Atomic volatile int * );
+unsigned int ?++( volatile unsigned int * ), ?++( _Atomic volatile unsigned int * );
+long int ?++( volatile long int * ), ?++( _Atomic volatile long int * );
+long unsigned int ?++( volatile long unsigned int * ), ?++( _Atomic volatile long unsigned int * );
+long long int ?++( volatile long long int * ), ?++( _Atomic volatile long long int * );
+long long unsigned ?++( volatile long long unsigned int * ), ?++( _Atomic volatile long long unsigned int * );
+float ?++( volatile float * ), ?++( _Atomic volatile float * );
+double ?++( volatile double * ), ?++( _Atomic volatile double * );
+long double ?++( volatile long double * ), ?++( _Atomic volatile long double * );
+
+forall( type T ) T * ?++( T * restrict volatile * ), * ?++( T * _Atomic restrict volatile * );
+forall( type T ) _Atomic T * ?++( _Atomic T * restrict volatile * ), * ?++( _Atomic T * _Atomic restrict volatile * );
+forall( type T ) const T * ?++( const T * restrict volatile * ), * ?++( const T * _Atomic restrict volatile * );
+forall( type T ) volatile T * ?++( volatile T * restrict volatile * ), * ?++( volatile T * _Atomic restrict volatile * );
+forall( type T ) restrict T * ?++( restrict T * restrict volatile * ), * ?++( restrict T * _Atomic restrict volatile * );
 forall( type T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ),
 	* ?++( _Atomic const T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ),
 	* ?++( _Atomic restrict T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ),
 	* ?++( _Atomic volatile T * _Atomic restrict volatile * );
-
 forall( type T ) const restrict T * ?++( const restrict T * restrict volatile * ),
 	* ?++( const restrict T * _Atomic restrict volatile * );
-
 forall( type T ) const volatile T * ?++( const volatile T * restrict volatile * ),
 	* ?++( const volatile T * _Atomic restrict volatile * );
-
 forall( type T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ),
 	* ?++( restrict volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ),
 	* ?++( _Atomic const restrict T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ),
 	* ?++( _Atomic const volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ),
 	* ?++( _Atomic restrict volatile T * _Atomic restrict volatile * );
-
 forall( type T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ),
 	* ?++( const restrict volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ),
 	* ?++( _Atomic const restrict volatile T * _Atomic restrict volatile * );
 
-_Bool ?--( volatile _Bool * ),
-	?--( _Atomic volatile _Bool * );
-char ?--( volatile char * ),
-	?--( _Atomic volatile char * );
-signed char ?--( volatile signed char * ),
-	?--( _Atomic volatile signed char * );
-unsigned char ?--( volatile signed char * ),
-	?--( _Atomic volatile signed char * );
-short int ?--( volatile short int * ),
-	?--( _Atomic volatile short int * );
-unsigned short int ?--( volatile unsigned short int * ),
-	?--( _Atomic volatile unsigned short int * );
-int ?--( volatile int * ),
-	?--( _Atomic volatile int * );
-unsigned int ?--( volatile unsigned int * ),
-	?--( _Atomic volatile unsigned int * );
-long int ?--( volatile long int * ),
-	?--( _Atomic volatile long int * );
-long unsigned int ?--( volatile long unsigned int * ),
-	?--( _Atomic volatile long unsigned int * );
-long long int ?--( volatile long long int * ),
-	?--( _Atomic volatile long long int * );
-long long unsigned ?--( volatile long long unsigned int * ),
-	?--( _Atomic volatile long long unsigned int * );
-float ?--( volatile float * ),
-	?--( _Atomic volatile float * );
-double ?--( volatile double * ),
-	?--( _Atomic volatile double * );
-long double ?--( volatile long double * ),
-	?--( _Atomic volatile long double * );
-
-forall( type T ) T * ?--( T * restrict volatile * ),
-	* ?--( T * _Atomic restrict volatile * );
-
-forall( type T ) _Atomic T * ?--( _Atomic T * restrict volatile * ),
-	* ?--( _Atomic T * _Atomic restrict volatile * );
-
-forall( type T ) const T * ?--( const T * restrict volatile * ),
-	* ?--( const T * _Atomic restrict volatile * );
-
-forall( type T ) volatile T * ?--( volatile T * restrict volatile * ),
-	* ?--( volatile T * _Atomic restrict volatile * );
-
-forall( type T ) restrict T * ?--( restrict T * restrict volatile * ),
-	* ?--( restrict T * _Atomic restrict volatile * );
-
+_Bool ?--( volatile _Bool * ), ?--( _Atomic volatile _Bool * );
+char ?--( volatile char * ), ?--( _Atomic volatile char * );
+signed char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * );
+unsigned char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * );
+short int ?--( volatile short int * ), ?--( _Atomic volatile short int * );
+unsigned short int ?--( volatile unsigned short int * ), ?--( _Atomic volatile unsigned short int * );
+int ?--( volatile int * ), ?--( _Atomic volatile int * );
+unsigned int ?--( volatile unsigned int * ), ?--( _Atomic volatile unsigned int * );
+long int ?--( volatile long int * ), ?--( _Atomic volatile long int * );
+long unsigned int ?--( volatile long unsigned int * ), ?--( _Atomic volatile long unsigned int * );
+long long int ?--( volatile long long int * ), ?--( _Atomic volatile long long int * );
+long long unsigned ?--( volatile long long unsigned int * ), ?--( _Atomic volatile long long unsigned int * );
+float ?--( volatile float * ), ?--( _Atomic volatile float * );
+double ?--( volatile double * ), ?--( _Atomic volatile double * );
+long double ?--( volatile long double * ), ?--( _Atomic volatile long double * );
+
+forall( type T ) T * ?--( T * restrict volatile * ), * ?--( T * _Atomic restrict volatile * );
+forall( type T ) _Atomic T * ?--( _Atomic T * restrict volatile * ), * ?--( _Atomic T * _Atomic restrict volatile * );
+forall( type T ) const T * ?--( const T * restrict volatile * ), * ?--( const T * _Atomic restrict volatile * );
+forall( type T ) volatile T * ?--( volatile T * restrict volatile * ), * ?--( volatile T * _Atomic restrict volatile * );
+forall( type T ) restrict T * ?--( restrict T * restrict volatile * ), * ?--( restrict T * _Atomic restrict volatile * );
 forall( type T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ),
 	* ?--( _Atomic const T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ),
 	* ?--( _Atomic restrict T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ),
 	* ?--( _Atomic volatile T * _Atomic restrict volatile * );
-
 forall( type T ) const restrict T * ?--( const restrict T * restrict volatile * ),
 	* ?--( const restrict T * _Atomic restrict volatile * );
-
 forall( type T ) const volatile T * ?--( const volatile T * restrict volatile * ),
 	* ?--( const volatile T * _Atomic restrict volatile * );
-
 forall( type T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ),
 	* ?--( restrict volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ),
 	* ?--( _Atomic const restrict T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ),
 	* ?--( _Atomic const volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ),
 	* ?--( _Atomic restrict volatile T * _Atomic restrict volatile * );
-
 forall( type T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ),
 	* ?--( const restrict volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ),
 	* ?--( _Atomic const restrict volatile T * _Atomic restrict volatile * );
@@ -1308,30 +1133,21 @@
 
 \begin{rationale}
-Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a
-pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald
-has pointed out, this forces the modified operand of such expressions to be an lvalue. This
-partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues.
-\end{rationale}
-
-\begin{rationale}
-In C, a semantic rule requires that pointer operands of increment and decrement be pointers to
-object types. Hence, \lstinline$void *$ objects cannot be incremented. In \CFA, the restriction
-follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as
-opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the
-type parameter \lstinline$T$.
+Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald has pointed out, this forces the modified operand of such expressions to be an lvalue.
+This partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues.
+\end{rationale}
+
+\begin{rationale}
+In C, a semantic rule requires that pointer operands of increment and decrement be pointers to object types.
+Hence, \lstinline$void *$ objects cannot be incremented.
+In \CFA, the restriction follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the type parameter \lstinline$T$.
 \end{rationale}
 
 \semantics
-First, each interpretation of the operand of an increment or decrement expression is considered
-separately. For each interpretation that is a bit-field or is declared with the
-\lstinline$register$\index{register@{\lstinline$register$}} \index{Itorage-class specifier}, the
-expression has one valid interpretation, with the type of the operand, and the expression is
-ambiguous if the operand is.
-
-For the remaining interpretations, the expression is rewritten, and the interpretations of the
-expression are the interpretations of the corresponding function call. Finally, all interpretations
-of the expression produced for the different interpretations of the operand are combined to produce
-the interpretations of the expression as a whole; where interpretations have compatible result
-types, the best interpretations are selected in the manner described for function call expressions.
+First, each interpretation of the operand of an increment or decrement expression is considered separately.
+For each interpretation that is a bit-field or is declared with the
+\lstinline$register$\index{register@{\lstinline$register$}} \index{Itorage-class specifier}, the expression has one valid interpretation, with the type of the operand, and the expression is ambiguous if the operand is.
+
+For the remaining interpretations, the expression is rewritten, and the interpretations of the expression are the interpretations of the corresponding function call.
+Finally, all interpretations of the expression produced for the different interpretations of the operand are combined to produce the interpretations of the expression as a whole; where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions.
 
 \examples
@@ -1346,87 +1162,70 @@
 \lstinline$vs++$ calls the \lstinline$?++$ function with the \lstinline$volatile short *$ parameter.
 \lstinline$s++$ does the same, applying the safe conversion from \lstinline$short int *$ to
-\lstinline$volatile short int *$. Note that there is no conversion that adds an \lstinline$_Atomic$
-qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid
-interpretation.
+\lstinline$volatile short int *$.
+Note that there is no conversion that adds an \lstinline$_Atomic$ qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid interpretation.
 \end{sloppypar}
 
-There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$,
-and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$
-has no valid interpretations.
-
-The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the
-\lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the
-\lstinline$volatile$ qualifier.
-
-\begin{lstlisting}
-char * const restrict volatile * restrict volatile pqpc; pqpc++
-char * * restrict volatile ppc; ppc++; 
-\end{lstlisting}
-Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$,
-the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function
-with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring
-\lstinline$T$ to be \lstinline$char *$.
-
-\begin{sloppypar}
-\lstinline$ppc++$ calls the same function, again inferring \lstinline$T$ to be \lstinline$char *$,
-and using the safe conversions from \lstinline$T$ to \lstinline$T const restrict volatile$.
-\end{sloppypar}
-
-\begin{rationale}
-Increment and decrement expressions show up a deficiency of \CFA's type system. There is no such
-thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}.
-Therefore, there is no way to define a function that alters them, and hence no way to define
-increment and decrement functions for them. As a result, the semantics of increment and decrement
-expressions must treat them specially. This holds true for all of the operators that may modify
-such objects.
-\end{rationale}
-
-\begin{rationale}
-The polymorphic overloadings for pointer increment and decrement can be understood by considering
-increasingly complex types.
+There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$, and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$ has no valid interpretations.
+
+The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the \lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the \lstinline$volatile$ qualifier.
+\begin{lstlisting}
+char * const restrict volatile * restrict volatile pqpc;
+pqpc++
+char * * restrict volatile ppc;
+ppc++;
+\end{lstlisting}
+Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$, the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring \lstinline$T$ to be \lstinline$char *$.
+
+\lstinline$ppc++$ calls the same function, again inferring \lstinline$T$ to be \lstinline$char *$, and using the safe conversions from \lstinline$T$ to \lstinline$T const$ \lstinline$restrict volatile$.
+
+\begin{rationale}
+Increment and decrement expressions show up a deficiency of \CFA's type system.
+There is no such thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}.
+Therefore, there is no way to define a function that alters them, and hence no way to define increment and decrement functions for them.
+As a result, the semantics of increment and decrement expressions must treat them specially.
+This holds true for all of the operators that may modify such objects.
+\end{rationale}
+
+\begin{rationale}
+The polymorphic overloadings for pointer increment and decrement can be understood by considering increasingly complex types.
 \begin{enumerate}
 \item
-``\lstinline$char * p; p++;$''. The argument to \lstinline$?++$ has type \lstinline$char * *$, and
-the result has type \lstinline$char *$. The expression would be valid if \lstinline$?++$ were
-declared by
+``\lstinline$char * p; p++;$''.
+The argument to \lstinline$?++$ has type \lstinline$char * *$, and the result has type \lstinline$char *$.
+The expression would be valid if \lstinline$?++$ were declared by
 \begin{lstlisting}
 forall( type T ) T * ?++( T * * );
-\end{lstlisting}
-with \lstinline$T$ inferred to be \lstinline$char$.
-
-\item
-``\lstinline$char *restrict volatile qp; qp++$''. The result again has type \lstinline$char *$, but
-the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the
-hypothetical function declared in point 1. Hence the actual predefined function is
+\end{lstlisting} with \lstinline$T$ inferred to be \lstinline$char$.
+
+\item
+``\lstinline$char *restrict volatile qp; qp++$''.
+The result again has type \lstinline$char *$, but the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the hypothetical function declared in point 1.
+Hence the actual predefined function is
 \begin{lstlisting}
 forall( type T ) T * ?++( T * restrict volatile * );
-\end{lstlisting}
-which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add
-\lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so
-constant pointers cannot be incremented.)
-
-\item
-``\lstinline$char *_Atomic ap; ap++$''. The result again has type \lstinline$char *$, but no safe
-conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable. A
-separate overloading of \lstinline$?++$ is required.
-
-\item
-``\lstinline$char const volatile * pq; pq++$''. Here the result has type
+\end{lstlisting} which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add
+\lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so constant pointers cannot be incremented.)
+
+\item
+``\lstinline$char *_Atomic ap; ap++$''.
+The result again has type \lstinline$char *$, but no safe conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable.
+A separate overloading of \lstinline$?++$ is required.
+
+\item
+``\lstinline$char const volatile * pq; pq++$''.
+Here the result has type
 \lstinline$char const volatile *$, so a new overloading is needed:
 \begin{lstlisting}
 forall( type T ) T const volatile * ?++( T const volatile *restrict volatile * );
 \end{lstlisting}
-One overloading is needed for each combination of qualifiers in the pointed-at
-type\index{deficiencies!pointers to qualified types}.
+One overloading is needed for each combination of qualifiers in the pointed-at type\index{deficiencies!pointers to qualified types}.
  
 \item
-``\lstinline$float *restrict * prp; prp++$''. The \lstinline$restrict$ qualifier is handled just
-like \lstinline$const$ and \lstinline$volatile$ in the previous case:
+``\lstinline$float *restrict * prp; prp++$''.
+The \lstinline$restrict$ qualifier is handled just like \lstinline$const$ and \lstinline$volatile$ in the previous case:
 \begin{lstlisting}
 forall( type T ) T restrict * ?++( T restrict *restrict volatile * );
-\end{lstlisting}
-with \lstinline$T$ inferred to be \lstinline$float *$. This looks odd, because {\c11} contains a
-constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$
-is not syntactically a pointer type. \CFA loosens the constraint.
+\end{lstlisting} with \lstinline$T$ inferred to be \lstinline$float *$.
+This looks odd, because {\c11} contains a constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$ is not syntactically a pointer type. \CFA loosens the constraint.
 \end{enumerate}
 \end{rationale}
@@ -1436,6 +1235,5 @@
 
 \semantics 
-A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the
-compound literal.
+A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the compound literal.
 
 
@@ -1455,11 +1253,11 @@
 \rewriterules
 \begin{lstlisting}
-*a	@\rewrite@ *?(a) @\use{*?}@
-+a	@\rewrite@ +?(a) @\use{+?}@
--a	@\rewrite@ -?(a) @\use{-?}@
-~a	@\rewrite@ ~?(a) @\use{~?}@
-!a	@\rewrite@ !?(a) @\use{"!?}@
-++a	@\rewrite@ ++?(&(a)) @\use{++?}@
---a	@\rewrite@ --?(&(a)) @\use{--?}@
+*a	@\rewrite@ *?( a ) @\use{*?}@
++a	@\rewrite@ +?( a ) @\use{+?}@
+-a	@\rewrite@ -?( a ) @\use{-?}@
+~a	@\rewrite@ ~?( a ) @\use{~?}@
+!a	@\rewrite@ !?( a ) @\use{"!?}@
+++a	@\rewrite@ ++?(&( a )) @\use{++?}@
+--a	@\rewrite@ --?(&( a )) @\use{--?}@
 \end{lstlisting}
 
@@ -1469,159 +1267,89 @@
 \predefined
 \begin{lstlisting}
-_Bool ++?( volatile _Bool * ),
-	++?( _Atomic volatile _Bool * );
-char ++?( volatile char * ),
-	++?( _Atomic volatile char * );
-signed char ++?( volatile signed char * ),
-	++?( _Atomic volatile signed char * );
-unsigned char ++?( volatile signed char * ),
-	++?( _Atomic volatile signed char * );
-short int ++?( volatile short int * ),
-	++?( _Atomic volatile short int * );
-unsigned short int ++?( volatile unsigned short int * ),
-	++?( _Atomic volatile unsigned short int * );
-int ++?( volatile int * ),
-	++?( _Atomic volatile int * );
-unsigned int ++?( volatile unsigned int * ),
-	++?( _Atomic volatile unsigned int * );
-long int ++?( volatile long int * ),
-	++?( _Atomic volatile long int * );
-long unsigned int ++?( volatile long unsigned int * ),
-	++?( _Atomic volatile long unsigned int * );
-long long int ++?( volatile long long int * ),
-	++?( _Atomic volatile long long int * );
-long long unsigned ++?( volatile long long unsigned int * ),
-	++?( _Atomic volatile long long unsigned int * );
-float ++?( volatile float * ),
-	++?( _Atomic volatile float * );
-double ++?( volatile double * ),
-	++?( _Atomic volatile double * );
-long double ++?( volatile long double * ),
-	++?( _Atomic volatile long double * );
-
-forall( type T ) T * ++?( T * restrict volatile * ),
-	* ++?( T * _Atomic restrict volatile * );
-
-forall( type T ) _Atomic T * ++?( _Atomic T * restrict volatile * ),
-	* ++?( _Atomic T * _Atomic restrict volatile * );
-
-forall( type T ) const T * ++?( const T * restrict volatile * ),
-	* ++?( const T * _Atomic restrict volatile * );
-
-forall( type T ) volatile T * ++?( volatile T * restrict volatile * ),
-	* ++?( volatile T * _Atomic restrict volatile * );
-
-forall( type T ) restrict T * ++?( restrict T * restrict volatile * ),
-	* ++?( restrict T * _Atomic restrict volatile * );
-
+_Bool ++?( volatile _Bool * ), ++?( _Atomic volatile _Bool * );
+char ++?( volatile char * ), ++?( _Atomic volatile char * );
+signed char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * );
+unsigned char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * );
+short int ++?( volatile short int * ), ++?( _Atomic volatile short int * );
+unsigned short int ++?( volatile unsigned short int * ), ++?( _Atomic volatile unsigned short int * );
+int ++?( volatile int * ), ++?( _Atomic volatile int * );
+unsigned int ++?( volatile unsigned int * ), ++?( _Atomic volatile unsigned int * );
+long int ++?( volatile long int * ), ++?( _Atomic volatile long int * );
+long unsigned int ++?( volatile long unsigned int * ), ++?( _Atomic volatile long unsigned int * );
+long long int ++?( volatile long long int * ), ++?( _Atomic volatile long long int * );
+long long unsigned ++?( volatile long long unsigned int * ), ++?( _Atomic volatile long long unsigned int * );
+float ++?( volatile float * ), ++?( _Atomic volatile float * );
+double ++?( volatile double * ), ++?( _Atomic volatile double * );
+long double ++?( volatile long double * ), ++?( _Atomic volatile long double * );
+
+forall( type T ) T * ++?( T * restrict volatile * ), * ++?( T * _Atomic restrict volatile * );
+forall( type T ) _Atomic T * ++?( _Atomic T * restrict volatile * ), * ++?( _Atomic T * _Atomic restrict volatile * );
+forall( type T ) const T * ++?( const T * restrict volatile * ), * ++?( const T * _Atomic restrict volatile * );
+forall( type T ) volatile T * ++?( volatile T * restrict volatile * ), * ++?( volatile T * _Atomic restrict volatile * );
+forall( type T ) restrict T * ++?( restrict T * restrict volatile * ), * ++?( restrict T * _Atomic restrict volatile * );
 forall( type T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ),
 	* ++?( _Atomic const T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ),
 	* ++?( _Atomic volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ),
 	* ++?( _Atomic restrict T * _Atomic restrict volatile * );
-
 forall( type T ) const volatile T * ++?( const volatile T * restrict volatile * ),
 	* ++?( const volatile T * _Atomic restrict volatile * );
-
 forall( type T ) const restrict T * ++?( const restrict T * restrict volatile * ),
 	* ++?( const restrict T * _Atomic restrict volatile * );
-
 forall( type T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ),
 	* ++?( restrict volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ),
 	* ++?( _Atomic const volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ),
 	* ++?( _Atomic const restrict T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ),
 	* ++?( _Atomic restrict volatile T * _Atomic restrict volatile * );
-
 forall( type T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ),
 	* ++?( const restrict volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ),
 	* ++?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
 
-_Bool --?( volatile _Bool * ),
-	--?( _Atomic volatile _Bool * );
-char --?( volatile char * ),
-	--?( _Atomic volatile char * );
-signed char --?( volatile signed char * ),
-	--?( _Atomic volatile signed char * );
-unsigned char --?( volatile signed char * ),
-	--?( _Atomic volatile signed char * );
-short int --?( volatile short int * ),
-	--?( _Atomic volatile short int * );
-unsigned short int --?( volatile unsigned short int * ),
-	--?( _Atomic volatile unsigned short int * );
-int --?( volatile int * ),
-	--?( _Atomic volatile int * );
-unsigned int --?( volatile unsigned int * ),
-	--?( _Atomic volatile unsigned int * );
-long int --?( volatile long int * ),
-	--?( _Atomic volatile long int * );
-long unsigned int --?( volatile long unsigned int * ),
-	--?( _Atomic volatile long unsigned int * );
-long long int --?( volatile long long int * ),
-	--?( _Atomic volatile long long int * );
-long long unsigned --?( volatile long long unsigned int * ),
-	--?( _Atomic volatile long long unsigned int * );
-float --?( volatile float * ),
-	--?( _Atomic volatile float * );
-double --?( volatile double * ),
-	--?( _Atomic volatile double * );
-long double --?( volatile long double * ),
-	--?( _Atomic volatile long double * );
-
-forall( type T ) T * --?( T * restrict volatile * ),
-	* --?( T * _Atomic restrict volatile * );
-
-forall( type T ) _Atomic T * --?( _Atomic T * restrict volatile * ),
-	* --?( _Atomic T * _Atomic restrict volatile * );
-
-forall( type T ) const T * --?( const T * restrict volatile * ),
-	* --?( const T * _Atomic restrict volatile * );
-
-forall( type T ) volatile T * --?( volatile T * restrict volatile * ),
-	* --?( volatile T * _Atomic restrict volatile * );
-
-forall( type T ) restrict T * --?( restrict T * restrict volatile * ),
-	* --?( restrict T * _Atomic restrict volatile * );
-
+_Bool --?( volatile _Bool * ), --?( _Atomic volatile _Bool * );
+char --?( volatile char * ), --?( _Atomic volatile char * );
+signed char --?( volatile signed char * ), --?( _Atomic volatile signed char * );
+unsigned char --?( volatile signed char * ), --?( _Atomic volatile signed char * );
+short int --?( volatile short int * ), --?( _Atomic volatile short int * );
+unsigned short int --?( volatile unsigned short int * ), --?( _Atomic volatile unsigned short int * );
+int --?( volatile int * ), --?( _Atomic volatile int * );
+unsigned int --?( volatile unsigned int * ), --?( _Atomic volatile unsigned int * );
+long int --?( volatile long int * ), --?( _Atomic volatile long int * );
+long unsigned int --?( volatile long unsigned int * ), --?( _Atomic volatile long unsigned int * );
+long long int --?( volatile long long int * ), --?( _Atomic volatile long long int * );
+long long unsigned --?( volatile long long unsigned int * ), --?( _Atomic volatile long long unsigned int * );
+float --?( volatile float * ), --?( _Atomic volatile float * );
+double --?( volatile double * ), --?( _Atomic volatile double * );
+long double --?( volatile long double * ), --?( _Atomic volatile long double * );
+
+forall( type T ) T * --?( T * restrict volatile * ), * --?( T * _Atomic restrict volatile * );
+forall( type T ) _Atomic T * --?( _Atomic T * restrict volatile * ), * --?( _Atomic T * _Atomic restrict volatile * );
+forall( type T ) const T * --?( const T * restrict volatile * ), * --?( const T * _Atomic restrict volatile * );
+forall( type T ) volatile T * --?( volatile T * restrict volatile * ), * --?( volatile T * _Atomic restrict volatile * );
+forall( type T ) restrict T * --?( restrict T * restrict volatile * ), * --?( restrict T * _Atomic restrict volatile * );
 forall( type T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ),
 	* --?( _Atomic const T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ),
 	* --?( _Atomic volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ),
 	* --?( _Atomic restrict T * _Atomic restrict volatile * );
-
 forall( type T ) const volatile T * --?( const volatile T * restrict volatile * ),
 	* --?( const volatile T * _Atomic restrict volatile * );
-
 forall( type T ) const restrict T * --?( const restrict T * restrict volatile * ),
 	* --?( const restrict T * _Atomic restrict volatile * );
-
 forall( type T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ),
 	* --?( restrict volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ),
 	* --?( _Atomic const volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ),
 	* --?( _Atomic const restrict T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ),
 	* --?( _Atomic restrict volatile T * _Atomic restrict volatile * );
-
 forall( type T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ),
 	* --?( const restrict volatile T * _Atomic restrict volatile * );
-
 forall( type T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ),
 	* --?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
@@ -1645,7 +1373,5 @@
 
 \semantics
-The interpretations of prefix increment and decrement expressions are
-determined in the same way as the interpretations of postfix increment and
-decrement expressions.
+The interpretations of prefix increment and decrement expressions are determined in the same way as the interpretations of postfix increment and decrement expressions.
 
 
@@ -1670,5 +1396,4 @@
 forall( type T ) const restrict volatile lvalue T *?( const restrict volatile T * );
 forall( type T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * );
-
 forall( ftype FT ) FT *?( FT * );
 \end{lstlisting}
@@ -1682,6 +1407,5 @@
 \lstinline$T$ is the type of the operand.
 
-The interpretations of an indirection expression are the interpretations of the corresponding
-function call.
+The interpretations of an indirection expression are the interpretations of the corresponding function call.
 
 
@@ -1690,66 +1414,25 @@
 \predefined
 \begin{lstlisting}
-int
-	+?( int ),
-	-?( int ),
-	~?( int );
-unsigned int
-	+?( unsigned int ),
-	-?( unsigned int ),
-	 ~?( unsigned int );
-long int
-	+?( long int ),
-	-?( long int ),
-	~?( long int );
-long unsigned int
-	+?( long unsigned int ),
-	-?( long unsigned int ),
-	~?( long unsigned int );
-long long int
-	+?( long long int ),
-	-?( long long int ),
-	~?( long long int );
-long long unsigned int
-	+?( long long unsigned int ),
-	-?( long long unsigned int ),
-	~?( long long unsigned int );
-float
-	+?( float ),
-	-?( float );
-double
-	+?( double ),
-	-?( double );
-long double
-	+?( long double ),
-	-?( long double );
-_Complex float
-	+?( _Complex float ),
-	-?( _Complex float );
-_Complex double
-	+?( _Complex double ),
-	-?( _Complex double );
-_Complex long double
-	+?( _Complex long double ),
-	-?( _Complex long double );
-
-int !?( int ),
-	!?( unsigned int ),
-	!?( long ),
-	!?( long unsigned int ),
-	!?( long long int ),
-	!?( long long unsigned int ),
-	!?( float ),
-	!?( double ),
-	!?( long double ),
-	!?( _Complex float ),
-	!?( _Complex double ),
-	!?( _Complex long double );
-
+int	+?( int ), -?( int ), ~?( int );
+unsigned int +?( unsigned int ), -?( unsigned int ), ~?( unsigned int );
+long int +?( long int ), -?( long int ), ~?( long int );
+long unsigned int +?( long unsigned int ), -?( long unsigned int ), ~?( long unsigned int );
+long long int +?( long long int ), -?( long long int ), ~?( long long int );
+long long unsigned int +?( long long unsigned int ), -?( long long unsigned int ), ~?( long long unsigned int );
+float +?( float ), -?( float );
+double +?( double ), -?( double );
+long double +?( long double ), -?( long double );
+_Complex float +?( _Complex float ), -?( _Complex float );
+_Complex double +?( _Complex double ), -?( _Complex double );
+_Complex long double +?( _Complex long double ), -?( _Complex long double );
+int !?( int ), !?( unsigned int ), !?( long ), !?( long unsigned int ),
+	!?( long long int ), !?( long long unsigned int ),
+	!?( float ), !?( double ), !?( long double ),
+	!?( _Complex float ), !?( _Complex double ), !?( _Complex long double );
 forall( dtype DT ) int !?( const restrict volatile DT * );
 forall( dtype DT ) int !?( _Atomic const restrict volatile DT * );
 forall( ftype FT ) int !?( FT * );
 \end{lstlisting}
-For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
-rank of \lstinline$int$ there exist
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
 % Don't use predefined: keep this out of prelude.cf.
 \begin{lstlisting}
@@ -1759,6 +1442,5 @@
 
 \semantics
-The interpretations of a unary arithmetic expression are the interpretations of the corresponding
-function call.
+The interpretations of a unary arithmetic expression are the interpretations of the corresponding function call.
 
 \examples
@@ -1766,11 +1448,9 @@
 long int li;
 void eat_double( double );@\use{eat_double}@
-
-eat_double(-li ); // @\rewrite@ eat_double( -?( li ) ); 
+eat_double(-li ); // @\rewrite@ eat_double( -?( li ) );
 \end{lstlisting}
 The valid interpretations of ``\lstinline$-li$'' (assuming no extended integer types exist) are
 \begin{center}
-\begin{tabular}{llc}
-interpretation & result type & expression conversion cost \\
+\begin{tabular}{llc} interpretation & result type & expression conversion cost \\
 \hline
 \lstinline$-?( (int)li )$					& \lstinline$int$					& (unsafe) \\
@@ -1788,9 +1468,7 @@
 \end{tabular}
 \end{center}
-The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument
-conversion and the cost of the entire expression, are
+The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument conversion and the cost of the entire expression, are
 \begin{center}
-\begin{tabular}{lcc}
-interpretation & argument cost & expression cost \\
+\begin{tabular}{lcc} interpretation & argument cost & expression cost \\
 \hline
 \lstinline$eat_double( (double)-?( (int)li) )$					& 7			& (unsafe) \\
@@ -1808,6 +1486,7 @@
 \end{tabular}
 \end{center}
-Each has result type \lstinline$void$, so the best must be selected. The interpretations involving
-unsafe conversions are discarded. The remainder have equal expression conversion costs, so the
+Each has result type \lstinline$void$, so the best must be selected.
+The interpretations involving unsafe conversions are discarded.
+The remainder have equal expression conversion costs, so the
 ``highest argument conversion cost'' rule is invoked, and the chosen interpretation is
 \lstinline$eat_double( (double)-?(li) )$.
@@ -1820,26 +1499,19 @@
 \lstinline$dtype$, or \lstinline$ftype$.
 
-When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall
-have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall
-be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one
-interpretation, of type \lstinline$size_t$.
+When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one interpretation, of type \lstinline$size_t$.
 
 When \lstinline$sizeof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
-\nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand. When
-the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the
-expression is not a constant expression.
+\nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand.
+When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression.
 
 When \lstinline$_Alignof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
-\nonterm{type-parameter}, it yields the alignment requirement of the type that implements the
-operand. When the operand is an opaque type or an inferred type parameter\index{inferred
-parameter}, the expression is not a constant expression.
+\nonterm{type-parameter}, it yields the alignment requirement of the type that implements the operand.
+When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression.
 \begin{rationale}
 \begin{lstlisting}
 type Pair = struct { int first, second; };
 size_t p_size = sizeof(Pair);		// constant expression 
-
 extern type Rational;@\use{Rational}@
 size_t c_size = sizeof(Rational);	// non-constant expression 
-
 forall(type T) T f(T p1, T p2) {
 	size_t t_size = sizeof(T);		// non-constant expression 
@@ -1847,5 +1519,6 @@
 }
 \end{lstlisting}
-``\lstinline$sizeof Rational$'', although not statically known, is fixed. Within \lstinline$f()$,
+``\lstinline$sizeof Rational$'', although not statically known, is fixed.
+Within \lstinline$f()$,
 ``\lstinline$sizeof(T)$'' is fixed for each call of \lstinline$f()$, but may vary from call to call.
 \end{rationale}
@@ -1867,14 +1540,10 @@
 
 In a \Index{cast expression} ``\lstinline$($\nonterm{type-name}\lstinline$)e$'', if
-\nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is
-the only interpretation of the cast expression; otherwise, \lstinline$e$ shall have some
-interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast
-expression is the cast of the interpretation that can be converted at the lowest cost. The cast
-expression's interpretation is ambiguous\index{ambiguous interpretation} if more than one
-interpretation can be converted at the lowest cost or if the selected interpretation is ambiguous.
-
-\begin{rationale}
-Casts can be used to eliminate ambiguity in expressions by selecting interpretations of
-subexpressions, and to specialize polymorphic functions and values.
+\nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is the only interpretation of the cast expression;
+otherwise, \lstinline$e$ shall have some interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast expression is the cast of the interpretation that can be converted at the lowest cost.
+The cast expression's interpretation is ambiguous\index{ambiguous interpretation} if more than one interpretation can be converted at the lowest cost or if the selected interpretation is ambiguous.
+
+\begin{rationale}
+Casts can be used to eliminate ambiguity in expressions by selecting interpretations of subexpressions, and to specialize polymorphic functions and values.
 \end{rationale}
 
@@ -1899,49 +1568,27 @@
 \predefined
 \begin{lstlisting}
-int?*?( int, int ),
-	?/?( int, int ),
-	?%?( int, int );
-unsigned int?*?( unsigned int, unsigned int ),
-	?/?( unsigned int, unsigned int ),
-	?%?( unsigned int, unsigned int );
-long int?*?( long int, long int ),
-	?/?( long, long ),
-	?%?( long, long );
+int?*?( int, int ), ?/?( int, int ), ?%?( int, int );
+unsigned int?*?( unsigned int, unsigned int ), ?/?( unsigned int, unsigned int ), ?%?( unsigned int, unsigned int );
+long int?*?( long int, long int ), ?/?( long, long ), ?%?( long, long );
 long unsigned int?*?( long unsigned int, long unsigned int ),
-	?/?( long unsigned int, long unsigned int ),
-	?%?( long unsigned int, long unsigned int );
-long long int?*?( long long int, long long int ),
-	?/?( long long int, long long int ),
+	?/?( long unsigned int, long unsigned int ), ?%?( long unsigned int, long unsigned int );
+long long int?*?( long long int, long long int ), ?/?( long long int, long long int ),
 	?%?( long long int, long long int );
 long long unsigned int ?*?( long long unsigned int, long long unsigned int ),
-	?/?( long long unsigned int, long long unsigned int ),
-	?%?( long long unsigned int, long long unsigned int );
-float?*?( float, float ),
-	?/?( float, float );
-double?*?( double, double ),
-	?/?( double, double );
-long double?*?( long double, long double ),
-	?/?( long double, long double );
-_Complex float?*?( float, _Complex float ),
-	?/?( float, _Complex float ),
-	?*?( _Complex float, float ),
-	?/?( _Complex float, float ),
-	?*?( _Complex float, _Complex float ),
-	?/?( _Complex float, _Complex float );
-_Complex double?*?( double, _Complex double ),
-	?/?( double, _Complex double ),
-	?*?( _Complex double, double ),
-	?/?( _Complex double, double ),
-	?*?( _Complex double, _Complex double ),
-	?/?( _Complex double, _Complex double );
-_Complex long double?*?( long double, _Complex long double ),
-	?/?( long double, _Complex long double ),
-	?*?( _Complex long double, long double ),
-	?/?( _Complex long double, long double ),
-	?*?( _Complex long double, _Complex long double ),
-	?/?( _Complex long double, _Complex long double );
-\end{lstlisting}
-For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
-rank of \lstinline$int$ there exist
+	?/?( long long unsigned int, long long unsigned int ), ?%?( long long unsigned int, long long unsigned int );
+float?*?( float, float ), ?/?( float, float );
+double?*?( double, double ), ?/?( double, double );
+long double?*?( long double, long double ), ?/?( long double, long double );
+_Complex float?*?( float, _Complex float ), ?/?( float, _Complex float ),
+	?*?( _Complex float, float ), ?/?( _Complex float, float ),
+	?*?( _Complex float, _Complex float ), ?/?( _Complex float, _Complex float );
+_Complex double?*?( double, _Complex double ), ?/?( double, _Complex double ),
+	?*?( _Complex double, double ), ?/?( _Complex double, double ),
+	?*?( _Complex double, _Complex double ), ?/?( _Complex double, _Complex double );
+_Complex long double?*?( long double, _Complex long double ), ?/?( long double, _Complex long double ),
+	?*?( _Complex long double, long double ), ?/?( _Complex long double, long double ),
+	?*?( _Complex long double, _Complex long double ), ?/?( _Complex long double, _Complex long double );
+\end{lstlisting}
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
 % Don't use predefined: keep this out of prelude.cf.
 \begin{lstlisting}
@@ -1951,11 +1598,9 @@
 \begin{rationale}
 {\c11} does not include conversions from the \Index{real type}s to \Index{complex type}s in the
-\Index{usual arithmetic conversion}s.  Instead it specifies conversion of the result of binary
-operations on arguments from mixed type domains. \CFA's predefined operators match that pattern.
+\Index{usual arithmetic conversion}s.  Instead it specifies conversion of the result of binary operations on arguments from mixed type domains. \CFA's predefined operators match that pattern.
 \end{rationale}
 
 \semantics
-The interpretations of multiplicative expressions are the interpretations of the corresponding
-function call.
+The interpretations of multiplicative expressions are the interpretations of the corresponding function call.
 
 \examples
@@ -1966,15 +1611,12 @@
 eat_double( li % i );
 \end{lstlisting}
-``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''. The valid interpretations
-of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and
-the cost of converting the result to \lstinline$double$ (assuming no extended integer types are
-present ) are
+``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''.
+The valid interpretations of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and the cost of converting the result to \lstinline$double$ (assuming no extended integer types are present ) are
 \begin{center}
-\begin{tabular}{lcc}
-interpretation & argument cost & result cost \\
+\begin{tabular}{lcc} interpretation & argument cost & result cost \\
 \hline 
 \lstinline$ ?%?( (int)li, i )$										& (unsafe)	& 6	\\
 \lstinline$ ?%?( (unsigned)li,(unsigned)i )$						& (unsafe)	& 5	\\
-\lstinline$ ?%?(li,(long)i )$										& 1			& 4	\\
+\lstinline$ ?%?( li, (long)i )$										& 1			& 4	\\
 \lstinline$ ?%?( (long unsigned)li,(long unsigned)i )$				& 3			& 3	\\
 \lstinline$ ?%?( (long long)li,(long long)i )$						& 5			& 2	\\
@@ -1983,15 +1625,14 @@
 \end{center}
 The best interpretation of \lstinline$eat_double( li, i )$ is
-\lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the
-lowest total cost.
-
-\begin{rationale}
-{\c11} defines most arithmetic operations to apply an \Index{integer promotion} to any argument that
-belongs to a type that has an \Index{integer conversion rank} less than that of \lstinline$int$.If
+\lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the lowest total cost.
+
+\begin{rationale}
+{\c11} defines most arithmetic operations to apply an \Index{integer promotion} to any argument that belongs to a type that has an \Index{integer conversion rank} less than that of \lstinline$int$.If
 \lstinline$s$ is a \lstinline$short int$, ``\lstinline$s *s$'' does not have type \lstinline$short int$;
-it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches
-that pattern; it does not predefine ``\lstinline$short ?*?( short, short )$''.
-
-These ``missing'' operators limit polymorphism. Consider
+it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches that pattern;
+it does not predefine ``\lstinline$short ?*?( short, short )$''.
+
+These ``missing'' operators limit polymorphism.
+Consider
 \begin{lstlisting}
 forall( type T | T ?*?( T, T ) ) T square( T );
@@ -2001,5 +1642,6 @@
 Since \CFA does not define a multiplication operator for \lstinline$short int$,
 \lstinline$square( s )$ is treated as \lstinline$square( (int)s )$, and the result has type
-\lstinline$int$. This is mildly surprising, but it follows the {\c11} operator pattern.
+\lstinline$int$.
+This is mildly surprising, but it follows the {\c11} operator pattern.
 
 A more troubling example is
@@ -2010,6 +1652,6 @@
 \end{lstlisting}
 This has no valid interpretations, because \CFA has no conversion from ``array of
-\lstinline$short int$'' to ``array of \lstinline$int$''. The alternatives in such situations
-include
+\lstinline$short int$'' to ``array of \lstinline$int$''.
+The alternatives in such situations include
 \begin{itemize}
 \item
@@ -2020,6 +1662,5 @@
 \lstinline$product$.
 \item
-Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to
-the operator's argument type.
+Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to the operator's argument type.
 \end{itemize}
 \end{rationale}
@@ -2043,107 +1684,53 @@
 \predefined
 \begin{lstlisting}
-int?+?( int, int ),
-	?-?( int, int );
-unsigned int?+?( unsigned int, unsigned int ),
-	?-?( unsigned int, unsigned int );
-long int?+?( long int, long int ),
-	?-?( long int, long int );
-long unsigned int?+?( long unsigned int, long unsigned int ),
-	?-?( long unsigned int, long unsigned int );
-long long int?+?( long long int, long long int ),
-	?-?( long long int, long long int );
+int?+?( int, int ), ?-?( int, int );
+unsigned int?+?( unsigned int, unsigned int ), ?-?( unsigned int, unsigned int );
+long int?+?( long int, long int ), ?-?( long int, long int );
+long unsigned int?+?( long unsigned int, long unsigned int ), ?-?( long unsigned int, long unsigned int );
+long long int?+?( long long int, long long int ), ?-?( long long int, long long int );
 long long unsigned int ?+?( long long unsigned int, long long unsigned int ),
 	?-?( long long unsigned int, long long unsigned int );
-float?+?( float, float ),
-	?-?( float, float );
-double?+?( double, double ),
-	?-?( double, double );
-long double?+?( long double, long double ),
-	?-?( long double, long double );
-_Complex float?+?( _Complex float, float ),
-	?-?( _Complex float, float ),
-	?+?( float, _Complex float ),
-	?-?( float, _Complex float ),
-	?+?( _Complex float, _Complex float ),
-	?-?( _Complex float, _Complex float );
-_Complex double?+?( _Complex double, double ),
-	?-?( _Complex double, double ),
-	?+?( double, _Complex double ),
-	?-?( double, _Complex double ),
-	?+?( _Complex double, _Complex double ),
-	?-?( _Complex double, _Complex double );
-_Complex long double?+?( _Complex long double, long double ),
-	?-?( _Complex long double, long double ),
-	?+?( long double, _Complex long double ),
-	?-?( long double, _Complex long double ),
-	?+?( _Complex long double, _Complex long double ),
-	?-?( _Complex long double, _Complex long double );
-
-forall( type T ) T
-	* ?+?( T *, ptrdiff_t ),
-	* ?+?( ptrdiff_t, T * ),
-	* ?-?( T *, ptrdiff_t );
-
-forall( type T ) _Atomic T
-	* ?+?( _Atomic T *, ptrdiff_t ),
-	* ?+?( ptrdiff_t, _Atomic T * ),
+float?+?( float, float ), ?-?( float, float );
+double?+?( double, double ), ?-?( double, double );
+long double?+?( long double, long double ), ?-?( long double, long double );
+_Complex float?+?( _Complex float, float ), ?-?( _Complex float, float ),
+	?+?( float, _Complex float ), ?-?( float, _Complex float ),
+	?+?( _Complex float, _Complex float ), ?-?( _Complex float, _Complex float );
+_Complex double?+?( _Complex double, double ), ?-?( _Complex double, double ),
+	?+?( double, _Complex double ), ?-?( double, _Complex double ),
+	?+?( _Complex double, _Complex double ), ?-?( _Complex double, _Complex double );
+_Complex long double?+?( _Complex long double, long double ), ?-?( _Complex long double, long double ),
+	?+?( long double, _Complex long double ), ?-?( long double, _Complex long double ),
+	?+?( _Complex long double, _Complex long double ), ?-?( _Complex long double, _Complex long double );
+
+forall( type T ) T * ?+?( T *, ptrdiff_t ), * ?+?( ptrdiff_t, T * ), * ?-?( T *, ptrdiff_t );
+forall( type T ) _Atomic T * ?+?( _Atomic T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic T * ),
 	* ?-?( _Atomic T *, ptrdiff_t );
-
-forall( type T ) const T
-	* ?+?( const T *, ptrdiff_t ),
-	* ?+?( ptrdiff_t, const T * ),
+forall( type T ) const T * ?+?( const T *, ptrdiff_t ), * ?+?( ptrdiff_t, const T * ),
 	* ?-?( const T *, ptrdiff_t );
-
-forall( type T ) restrict T
-	* ?+?( restrict T *, ptrdiff_t ),
-	* ?+?( ptrdiff_t, restrict T * ),
+forall( type T ) restrict T * ?+?( restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict T * ),
 	* ?-?( restrict T *, ptrdiff_t );
-
-forall( type T ) volatile T
-	* ?+?( volatile T *, ptrdiff_t ),
-	* ?+?( ptrdiff_t, volatile T * ),
+forall( type T ) volatile T * ?+?( volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, volatile T * ),
 	* ?-?( volatile T *, ptrdiff_t );
-
-forall( type T ) _Atomic const T
-	* ?+?( _Atomic const T *, ptrdiff_t ),
-	* ?+?( ptrdiff_t, _Atomic const T * ),
+forall( type T ) _Atomic const T * ?+?( _Atomic const T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic const T * ),
 	* ?-?( _Atomic const T *, ptrdiff_t );
-
-forall( type T ) _Atomic restrict T
-	* ?+?( _Atomic restrict T *, ptrdiff_t ),
-	* ?+?( ptrdiff_t, _Atomic restrict T * ),
+forall( type T ) _Atomic restrict T * ?+?( _Atomic restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic restrict T * ),
 	* ?-?( _Atomic restrict T *, ptrdiff_t );
-
-forall( type T ) _Atomic volatile T
-	* ?+?( _Atomic volatile T *, ptrdiff_t ),
-	* ?+?( ptrdiff_t, _Atomic volatile T * ),
+forall( type T ) _Atomic volatile T * ?+?( _Atomic volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic volatile T * ),
 	* ?-?( _Atomic volatile T *, ptrdiff_t );
-
-forall( type T ) const restrict T
-	* ?+?( const restrict T *, ptrdiff_t ),
-	* ?+?( ptrdiff_t, const restrict T * ),
+forall( type T ) const restrict T * ?+?( const restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, const restrict T * ),
 	* ?-?( const restrict T *, ptrdiff_t );
-
-forall( type T ) const volatile T
-	* ?+?( const volatile T *, ptrdiff_t ),
-	* ?+?( ptrdiff_t, const volatile T * ),
+forall( type T ) const volatile T * ?+?( const volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, const volatile T * ),
 	* ?-?( const volatile T *, ptrdiff_t );
-
-forall( type T ) restrict volatile T
-	* ?+?( restrict volatile T *, ptrdiff_t ),
-	* ?+?( ptrdiff_t, restrict volatile T * ),
+forall( type T ) restrict volatile T * ?+?( restrict volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict volatile T * ),
 	* ?-?( restrict volatile T *, ptrdiff_t );
-
-forall( type T ) _Atomic const restrict T
-	* ?+?( _Atomic const restrict T *, ptrdiff_t ),
+forall( type T ) _Atomic const restrict T * ?+?( _Atomic const restrict T *, ptrdiff_t ),
 	* ?+?( ptrdiff_t, _Atomic const restrict T * ),
 	* ?-?( _Atomic const restrict T *, ptrdiff_t );
-
 forall( type T ) ptrdiff_t
 	* ?-?( const restrict volatile T *, const restrict volatile T * ),
 	* ?-?( _Atomic const restrict volatile T *, _Atomic const restrict volatile T * );
 \end{lstlisting}
-For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
-rank of \lstinline$int$ there exist
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
 % Don't use predefined: keep this out of prelude.cf.
 \begin{lstlisting}
@@ -2152,16 +1739,10 @@
 
 \semantics
-The interpretations of additive expressions are the interpretations of the corresponding function
-calls.
-
-\begin{rationale}
-\lstinline$ptrdiff_t$ is an implementation-defined identifier defined in \lstinline$<stddef.h>$ that
-is synonymous with a signed integral type that is large enough to hold the difference between two
-pointers. It seems reasonable to use it for pointer addition as well. (This is technically a
-difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral}
-argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition.
-The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an
-argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an
-unsigned type.
+The interpretations of additive expressions are the interpretations of the corresponding function calls.
+
+\begin{rationale}
+\lstinline$ptrdiff_t$ is an implementation-defined identifier defined in \lstinline$<stddef.h>$ that is synonymous with a signed integral type that is large enough to hold the difference between two pointers.
+It seems reasonable to use it for pointer addition as well. (This is technically a difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral} argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition.
+The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an unsigned type.
 \end{rationale}
 
@@ -2184,19 +1765,12 @@
 \predefined
 \begin{lstlisting}
-int ?<<?( int, int ),
-	 ?>>?( int, int );
-unsigned int ?<<?( unsigned int, int ),
-	 ?>>?( unsigned int, int );
-long int ?<<?( long int, int ),
-	 ?>>?( long int, int );
-long unsigned int ?<<?( long unsigned int, int ),
-	 ?>>?( long unsigned int, int );
-long long int ?<<?( long long int, int ),
-	 ?>>?( long long int, int );
-long long unsigned int ?<<?( long long unsigned int, int ),
-	 ?>>?( long long unsigned int, int);
-\end{lstlisting}
-For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
-rank of \lstinline$int$ there exist
+int ?<<?( int, int ), ?>>?( int, int );
+unsigned int ?<<?( unsigned int, int ), ?>>?( unsigned int, int );
+long int ?<<?( long int, int ), ?>>?( long int, int );
+long unsigned int ?<<?( long unsigned int, int ), ?>>?( long unsigned int, int );
+long long int ?<<?( long long int, int ), ?>>?( long long int, int );
+long long unsigned int ?<<?( long long unsigned int, int ), ?>>?( long long unsigned int, int);
+\end{lstlisting}
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
 % Don't use predefined: keep this out of prelude.cf.
 \begin{lstlisting}
@@ -2205,11 +1779,10 @@
 
 \begin{rationale}
-The bitwise shift operators break the usual pattern: they do not convert both operands to a common
-type. The right operand only undergoes \Index{integer promotion}.
+The bitwise shift operators break the usual pattern: they do not convert both operands to a common type.
+The right operand only undergoes \Index{integer promotion}.
 \end{rationale}
 
 \semantics
-The interpretations of a bitwise shift expression are the interpretations of the corresponding
-function calls.
+The interpretations of a bitwise shift expression are the interpretations of the corresponding function calls.
 
 
@@ -2235,43 +1808,23 @@
 \predefined
 \begin{lstlisting}
-int ?<?( int, int ),
-	?<=?( int, int ),
-	?>?( int, int ),
-	?>=?( int, int );
-int ?<?( unsigned int, unsigned int ),
-	?<=?( unsigned int, unsigned int ),
-	?>?( unsigned int, unsigned int ),
-	?>=?( unsigned int, unsigned int );
-int ?<?( long int, long int ),
-	?<=?( long int, long int ),
-	?>?( long int, long int ),
-	?>=?( long int, long int );
-int ?<?( long unsigned int, long unsigned ),
-	?<=?( long unsigned int, long unsigned ),
-	?>?( long unsigned int, long unsigned ),
-	?>=?( long unsigned int, long unsigned );
-int ?<?( long long int, long long int ),
-	?<=?( long long int, long long int ),
-	?>?( long long int, long long int ),
-	?>=?( long long int, long long int );
-int ?<?( long long unsigned int, long long unsigned ),
-	?<=?( long long unsigned int, long long unsigned ),
-	?>?( long long unsigned int, long long unsigned ),
-	?>=?( long long unsigned int, long long unsigned );
-int ?<?( float, float ),
-	?<=?( float, float ),
-	?>?( float, float ),
-	?>=?( float, float );
-int ?<?( double, double ),
-	?<=?( double, double ),
-	?>?( double, double ),
-	?>=?( double, double );
-int ?<?( long double, long double ),
-	?<=?( long double, long double ),
-	?>?( long double, long double ),
-	?>=?( long double, long double );
-
-forall( dtype DT ) int
-	?<?( const restrict volatile DT *, const restrict volatile DT * ),
+int ?<?( int, int ), ?<=?( int, int ),
+	?>?( int, int ), ?>=?( int, int );
+int ?<?( unsigned int, unsigned int ), ?<=?( unsigned int, unsigned int ),
+	?>?( unsigned int, unsigned int ), ?>=?( unsigned int, unsigned int );
+int ?<?( long int, long int ), ?<=?( long int, long int ),
+	?>?( long int, long int ), ?>=?( long int, long int );
+int ?<?( long unsigned int, long unsigned ), ?<=?( long unsigned int, long unsigned ),
+	?>?( long unsigned int, long unsigned ), ?>=?( long unsigned int, long unsigned );
+int ?<?( long long int, long long int ), ?<=?( long long int, long long int ),
+	?>?( long long int, long long int ), ?>=?( long long int, long long int );
+int ?<?( long long unsigned int, long long unsigned ), ?<=?( long long unsigned int, long long unsigned ),
+	?>?( long long unsigned int, long long unsigned ), ?>=?( long long unsigned int, long long unsigned );
+int ?<?( float, float ), ?<=?( float, float ),
+	?>?( float, float ), ?>=?( float, float );
+int ?<?( double, double ), ?<=?( double, double ),
+	?>?( double, double ), ?>=?( double, double );
+int ?<?( long double, long double ), ?<=?( long double, long double ),
+	?>?( long double, long double ), ?>=?( long double, long double );
+forall( dtype DT ) int ?<?( const restrict volatile DT *, const restrict volatile DT * ),
 	?<?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ),
 	?<=?( const restrict volatile DT *, const restrict volatile DT * ),
@@ -2282,6 +1835,5 @@
 	?>=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * );
 \end{lstlisting}
-For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
-rank of \lstinline$int$ there exist
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
 % Don't use predefined: keep this out of prelude.cf.
 \begin{lstlisting}
@@ -2293,6 +1845,5 @@
 
 \semantics
-The interpretations of a relational expression are the interpretations of the corresponding function
-call.
+The interpretations of a relational expression are the interpretations of the corresponding function call.
 
 
@@ -2314,41 +1865,22 @@
 \predefined
 \begin{lstlisting}
-int ?==?( int, int ),
-	?!=?( int, int ),
-	?==?( unsigned int, unsigned int ),
-	?!=?( unsigned int, unsigned int ),
-	?==?( long int, long int ),
-	?!=?( long int, long int ),
-	?==?( long unsigned int, long unsigned int ),
-	?!=?( long unsigned int, long unsigned int ),
-	?==?( long long int, long long int ),
-	?!=?( long long int, long long int ),
-	?==?( long long unsigned int, long long unsigned int ),
-	?!=?( long long unsigned int, long long unsigned int ),
-	?==?( float, float ),
-	?!=?( float, float ),
-	?==?( _Complex float, float ),
-	?!=?( _Complex float, float ),
-	?==?( float, _Complex float ),
-	?!=?( float, _Complex float ),
-	?==?( _Complex float, _Complex float ),
-	?!=?( _Complex float, _Complex float ),
-	?==?( double, double ),
-	?!=?( double, double ),
-	?==?( _Complex double, double ),
-	?!=?( _Complex double, double ),
-	?==?( double, _Complex double ),
-	?!=?( double, _Complex double ),
-	?==?( _Complex double, _Complex double ),
-	?!=?( _Complex double, _Complex double ),
-	?==?( long double, long double ),
-	?!=?( long double, long double ),
-	?==?( _Complex long double, long double ),
-	?!=?( _Complex long double, long double ),
-	?==?( long double, _Complex long double ),
-	?!=?( long double, _Complex long double ),
-	?==?( _Complex long double, _Complex long double ),
-	?!=?( _Complex long double, _Complex long double );
-
+int ?==?( int, int ), ?!=?( int, int ),
+	?==?( unsigned int, unsigned int ), ?!=?( unsigned int, unsigned int ),
+	?==?( long int, long int ), ?!=?( long int, long int ),
+	?==?( long unsigned int, long unsigned int ), ?!=?( long unsigned int, long unsigned int ),
+	?==?( long long int, long long int ), ?!=?( long long int, long long int ),
+	?==?( long long unsigned int, long long unsigned int ), ?!=?( long long unsigned int, long long unsigned int ),
+	?==?( float, float ), ?!=?( float, float ),
+	?==?( _Complex float, float ), ?!=?( _Complex float, float ),
+	?==?( float, _Complex float ), ?!=?( float, _Complex float ),
+	?==?( _Complex float, _Complex float ), ?!=?( _Complex float, _Complex float ),
+	?==?( double, double ), ?!=?( double, double ),
+	?==?( _Complex double, double ), ?!=?( _Complex double, double ),
+	?==?( double, _Complex double ), ?!=?( double, _Complex double ),
+	?==?( _Complex double, _Complex double ), ?!=?( _Complex double, _Complex double ),
+	?==?( long double, long double ), ?!=?( long double, long double ),
+	?==?( _Complex long double, long double ), ?!=?( _Complex long double, long double ),
+	?==?( long double, _Complex long double ), ?!=?( long double, _Complex long double ),
+	?==?( _Complex long double, _Complex long double ), ?!=?( _Complex long double, _Complex long double );
 forall( dtype DT ) int
 	?==?( const restrict volatile DT *, const restrict volatile DT * ),
@@ -2375,17 +1907,11 @@
 	?==?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * ),
 	?!=?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * );
-
 forall( ftype FT ) int
-	?==?( FT *, FT * ),
-	?!=?( FT *, FT * ),
-	?==?( FT *, forall( ftype FT2) FT2 * ),
-	?!=?( FT *, forall( ftype FT2) FT2 * ),
-	?==?( forall( ftype FT2) FT2*, FT * ),
-	?!=?( forall( ftype FT2) FT2*, FT * ),
-	?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ),
-	?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * );
-\end{lstlisting}
-For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
-rank of \lstinline$int$ there exist
+	?==?( FT *, FT * ), ?!=?( FT *, FT * ),
+	?==?( FT *, forall( ftype FT2) FT2 * ), ?!=?( FT *, forall( ftype FT2) FT2 * ),
+	?==?( forall( ftype FT2) FT2*, FT * ), ?!=?( forall( ftype FT2) FT2*, FT * ),
+	?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ), ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * );
+\end{lstlisting}
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
 % Don't use predefined: keep this out of prelude.cf.
 \begin{lstlisting}
@@ -2395,23 +1921,17 @@
 
 \begin{rationale}
-The polymorphic equality operations come in three styles: comparisons between pointers of compatible
-types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and
-between the \Index{null pointer} constant and pointers to any type. In the last case, a special
-constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA
-type system.
+The polymorphic equality operations come in three styles: comparisons between pointers of compatible types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and between the \Index{null pointer} constant and pointers to any type.
+In the last case, a special constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA type system.
 \end{rationale}
 
 \semantics
-The interpretations of an equality expression are the interpretations of the corresponding function
-call.
+The interpretations of an equality expression are the interpretations of the corresponding function call.
 
 \begin{sloppypar}
-The result of an equality comparison between two pointers to predefined functions or predefined
-values is implementation-defined.
+The result of an equality comparison between two pointers to predefined functions or predefined values is implementation-defined.
 \end{sloppypar}
 \begin{rationale}
-The implementation-defined status of equality comparisons allows implementations to use one library
-routine to implement many predefined functions. These optimization are particularly important when
-the predefined functions are polymorphic, as is the case for most pointer operations
+The implementation-defined status of equality comparisons allows implementations to use one library routine to implement many predefined functions.
+These optimization are particularly important when the predefined functions are polymorphic, as is the case for most pointer operations
 \end{rationale}
 
@@ -2439,6 +1959,5 @@
 long long unsigned int ?&?( long long unsigned int, long long unsigned int );
 \end{lstlisting}
-For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
-rank of \lstinline$int$ there exist
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
 % Don't use predefined: keep this out of prelude.cf.
 \begin{lstlisting}
@@ -2447,6 +1966,5 @@
 
 \semantics
-The interpretations of a bitwise AND expression are the interpretations of the corresponding
-function call.
+The interpretations of a bitwise AND expression are the interpretations of the corresponding function call.
 
 
@@ -2473,6 +1991,5 @@
 long long unsigned int ?^?( long long unsigned int, long long unsigned int );
 \end{lstlisting}
-For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
-rank of \lstinline$int$ there exist
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
 % Don't use predefined: keep this out of prelude.cf.
 \begin{lstlisting}
@@ -2481,6 +1998,5 @@
 
 \semantics
-The interpretations of a bitwise exclusive OR expression are the interpretations of the
-corresponding function call.
+The interpretations of a bitwise exclusive OR expression are the interpretations of the corresponding function call.
 
 
@@ -2507,6 +2023,5 @@
 long long unsigned int ?|?( long long unsigned int, long long unsigned int );
 \end{lstlisting}
-For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
-rank of \lstinline$int$ there exist
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
 % Don't use predefined: keep this out of prelude.cf.
 \begin{lstlisting}
@@ -2515,6 +2030,5 @@
 
 \semantics 
-The interpretations of a bitwise inclusive OR expression are the interpretations of the
-corresponding function call.
+The interpretations of a bitwise inclusive OR expression are the interpretations of the corresponding function call.
 
 
@@ -2528,13 +2042,12 @@
 
 \semantics The operands of the expression ``\lstinline$a && b$'' are treated as
-``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be
-unambiguous. The expression has only one interpretation, which is of type \lstinline$int$.
-\begin{rationale}
-When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has
-not been redefined for those types, the compiler can optimize away the function calls.
+``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be unambiguous.
+The expression has only one interpretation, which is of type \lstinline$int$.
+\begin{rationale}
+When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has not been redefined for those types, the compiler can optimize away the function calls.
 
 A common C idiom omits comparisons to \lstinline$0$ in the controlling expressions of loops and
-\lstinline$if$ statements. For instance, the loop below iterates as long as \lstinline$rp$ points
-at a \lstinline$Rational$ value that is non-zero.
+\lstinline$if$ statements.
+For instance, the loop below iterates as long as \lstinline$rp$ points at a \lstinline$Rational$ value that is non-zero.
 
 \begin{lstlisting}
@@ -2543,13 +2056,9 @@
 extern int ?!=?( Rational, Rational );
 Rational *rp;
-
 while ( rp && *rp ) { ... }
 \end{lstlisting}
-The logical expression calls the \lstinline$Rational$ inequality operator, passing
-it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result. In
-contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$
-conversion to \lstinline$*rp$ in the equivalent situation. The conversion to \lstinline$int$ would
-produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was
-not written with this situation in mind.
+The logical expression calls the \lstinline$Rational$ inequality operator, passing it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result.
+In contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$ conversion to \lstinline$*rp$ in the equivalent situation.
+The conversion to \lstinline$int$ would produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was not written with this situation in mind.
 \end{rationale}
 
@@ -2565,7 +2074,6 @@
 \semantics
 
-The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$''
-and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous. The expression has only one
-interpretation, which is of type \lstinline$int$.
+The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous.
+The expression has only one interpretation, which is of type \lstinline$int$.
 
 
@@ -2580,92 +2088,52 @@
 
 \semantics
-In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and
-third operands both have an interpretation with \lstinline$void$ type, then the expression has an
-interpretation with type \lstinline$void$, equivalent to
+In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and third operands both have an interpretation with \lstinline$void$ type, then the expression has an interpretation with type \lstinline$void$, equivalent to
 \begin{lstlisting}
 ( int)(( a)!=0) ? ( void)( b) : ( void)( c)
 \end{lstlisting}
 
-If the second and third operands both have interpretations with non-\lstinline$void$ types, the
-expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'',
-with \lstinline$cond$ declared as
+If the second and third operands both have interpretations with non-\lstinline$void$ types, the expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'', with \lstinline$cond$ declared as
 \begin{lstlisting}
 forall( type T ) T cond( int, T, T );
- 
-forall( dtype D ) void
-	* cond( int, D *, void * ),
-	* cond( int, void *, D * );
-	
-forall( dtype D ) _atomic void
-	* cond( int, _Atomic D *, _Atomic void * ),
-	* cond( int, _Atomic void *, _Atomic D * );
-
-forall( dtype D ) const void
-	* cond( int, const D *, const void * ),
-	* cond( int, const void *, const D * );
-
-forall( dtype D ) restrict void
-	* cond( int, restrict D *, restrict void * ),
-	* cond( int, restrict void *, restrict D * );
-
-forall( dtype D ) volatile void
-	* cond( int, volatile D *, volatile void * ),
-	* cond( int, volatile void *, volatile D * );
-
-forall( dtype D ) _Atomic const void
-	* cond( int, _Atomic const D *, _Atomic const void * ),
-	* cond( int, _Atomic const void *, _Atomic const D * );
-
-forall( dtype D ) _Atomic restrict void
-	* cond( int, _Atomic restrict D *, _Atomic restrict void * ),
-	* cond( int, _Atomic restrict void *, _Atomic restrict D * );
-
-forall( dtype D ) _Atomic volatile void
-	* cond( int, _Atomic volatile D *, _Atomic volatile void * ),
-	* cond( int, _Atomic volatile void *, _Atomic volatile D * );
-
-forall( dtype D ) const restrict void
-	* cond( int, const restrict D *, const restrict void * ),
-	* cond( int, const restrict void *, const restrict D * );
-
-forall( dtype D ) const volatile void
-	* cond( int, const volatile D *, const volatile void * ),
-	* cond( int, const volatile void *, const volatile D * );
-
-forall( dtype D ) restrict volatile void
-	* cond( int, restrict volatile D *, restrict volatile void * ),
-	* cond( int, restrict volatile void *, restrict volatile D * );
-
-forall( dtype D ) _Atomic const restrict void
-	* cond( int, _Atomic const restrict D *, _Atomic const restrict void * ),
+forall( dtype D ) void * cond( int, D *, void * ), * cond( int, void *, D * );
+forall( dtype D ) _atomic void * cond(
+	int, _Atomic D *, _Atomic void * ), * cond( int, _Atomic void *, _Atomic D * );
+forall( dtype D ) const void * cond(
+	int, const D *, const void * ), * cond( int, const void *, const D * );
+forall( dtype D ) restrict void * cond(
+	int, restrict D *, restrict void * ), * cond( int, restrict void *, restrict D * );
+forall( dtype D ) volatile void * cond(
+	int, volatile D *, volatile void * ), * cond( int, volatile void *, volatile D * );
+forall( dtype D ) _Atomic const void * cond(
+	int, _Atomic const D *, _Atomic const void * ), * cond( int, _Atomic const void *, _Atomic const D * );
+forall( dtype D ) _Atomic restrict void * cond(
+	int, _Atomic restrict D *, _Atomic restrict void * ), * cond( int, _Atomic restrict void *, _Atomic restrict D * );
+forall( dtype D ) _Atomic volatile void * cond(
+	int, _Atomic volatile D *, _Atomic volatile void * ), * cond( int, _Atomic volatile void *, _Atomic volatile D * );
+forall( dtype D ) const restrict void * cond(
+	int, const restrict D *, const restrict void * ), * cond( int, const restrict void *, const restrict D * );
+forall( dtype D ) const volatile void * cond(
+	int, const volatile D *, const volatile void * ), * cond( int, const volatile void *, const volatile D * );
+forall( dtype D ) restrict volatile void * cond(
+	int, restrict volatile D *, restrict volatile void * ), * cond( int, restrict volatile void *, restrict volatile D * );
+forall( dtype D ) _Atomic const restrict void * cond(
+	int, _Atomic const restrict D *, _Atomic const restrict void * ),
 	* cond( int, _Atomic const restrict void *, _Atomic const restrict D * );
-
-forall( dtype D ) _Atomic const volatile void
-	* cond( int, _Atomic const volatile D *, _Atomic const volatile void * ),
+forall( dtype D ) _Atomic const volatile void * cond(
+	int, _Atomic const volatile D *, _Atomic const volatile void * ),
 	* cond( int, _Atomic const volatile void *, _Atomic const volatile D * );
-
-forall( dtype D ) _Atomic restrict volatile void
-	* cond( int, _Atomic restrict volatile D *,
-	 _Atomic restrict volatile void * ),
-	* cond( int, _Atomic restrict volatile void *,
-	 _Atomic restrict volatile D * );
-
-forall( dtype D ) const restrict volatile void
-	* cond( int, const restrict volatile D *,
-	 const restrict volatile void * ),
-	* cond( int, const restrict volatile void *,
-	 const restrict volatile D * );
-
-forall( dtype D ) _Atomic const restrict volatile void
-	* cond( int, _Atomic const restrict volatile D *,
-	 _Atomic const restrict volatile void * ),
-	* cond( int, _Atomic const restrict volatile void *,
-	 _Atomic const restrict volatile D * );
-\end{lstlisting}
-
-\begin{rationale}
-The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and
-third operands have arithmetic type, and to combine the qualifiers of the second and third operands
-if they are pointers.
+forall( dtype D ) _Atomic restrict volatile void * cond(
+	int, _Atomic restrict volatile D *, _Atomic restrict volatile void * ),
+	* cond( int, _Atomic restrict volatile void *, _Atomic restrict volatile D * );
+forall( dtype D ) const restrict volatile void * cond(
+	int, const restrict volatile D *, const restrict volatile void * ),
+	* cond( int, const restrict volatile void *, const restrict volatile D * );
+forall( dtype D ) _Atomic const restrict volatile void * cond(
+	int, _Atomic const restrict volatile D *, _Atomic const restrict volatile void * ),
+	* cond( int, _Atomic const restrict volatile void *, _Atomic const restrict volatile D * );
+\end{lstlisting}
+
+\begin{rationale}
+The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and third operands have arithmetic type, and to combine the qualifiers of the second and third operands if they are pointers.
 \end{rationale}
 
@@ -2685,6 +2153,5 @@
 rand() ? cip : vip;
 \end{lstlisting}
-The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second
-and third operands to add \lstinline$volatile$ and \lstinline$const$ qualifiers, respectively.
+The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second and third operands to add \lstinline$volatile$ and \lstinline$const$ qualifiers, respectively.
 
 \begin{lstlisting}
@@ -2708,5 +2175,6 @@
 
 \rewriterules
-Let ``\(\leftarrow\)'' be any of the assignment operators. Then
+Let ``\(\leftarrow\)'' be any of the assignment operators.
+Then
 \use{?=?}\use{?*=?}\use{?/=?}\use{?%=?}\use{?+=?}\use{?-=?}
 \use{?>>=?}\use{?&=?}\use{?^=?}\use{?"|=?}%use{?<<=?}
@@ -2716,14 +2184,10 @@
 
 \semantics
-Each interpretation of the left operand of an assignment expression is considered separately. For
-each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class
-specifier, the expression has one valid interpretation, with the type of the left operand. The
-right operand is cast to that type, and the assignment expression is ambiguous if either operand is.
-For the remaining interpretations, the expression is rewritten, and the interpretations of the
-assignment expression are the interpretations of the corresponding function call. Finally, all
-interpretations of the expression produced for the different interpretations of the left operand are
-combined to produce the interpretations of the expression as a whole; where interpretations have
-compatible result types, the best interpretations are selected in the manner described for function
-call expressions.
+Each interpretation of the left operand of an assignment expression is considered separately.
+For each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class specifier, the expression has one valid interpretation, with the type of the left operand.
+The right operand is cast to that type, and the assignment expression is ambiguous if either operand is.
+For the remaining interpretations, the expression is rewritten, and the interpretations of the assignment expression are the interpretations of the corresponding function call.
+Finally, all interpretations of the expression produced for the different interpretations of the left operand are combined to produce the interpretations of the expression as a whole;
+where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions.
 
 
@@ -2790,21 +2254,16 @@
 	?=?( volatile _Complex long double *, _Complex long double ),
 	?=?( _Atomic volatile _Complex long double *, _Atomic _Complex long double );
-
 forall( ftype FT ) FT
 	* ?=?( FT * volatile *, FT * ),
 	* ?=?( FT * volatile *, forall( ftype F ) F * );
-
 forall( ftype FT ) FT const
 	* ?=?( FT const * volatile *, FT const * ),
 	* ?=?( FT const * volatile *, forall( ftype F ) F * );
-
 forall( ftype FT ) FT volatile
 	* ?=?( FT volatile * volatile *, FT * ),
 	* ?=?( FT volatile * volatile *, forall( ftype F ) F * );
-
 forall( ftype FT ) FT const
 	* ?=?( FT const volatile * volatile *, FT const * ),
 	* ?=?( FT const volatile * volatile *, forall( ftype F ) F * );
-
 forall( dtype DT ) DT
 	* ?=?( DT * restrict volatile *, DT * ),
@@ -2814,5 +2273,4 @@
 	* ?=?( DT * _Atomic restrict volatile *, void * ),
 	* ?=?( DT * _Atomic restrict volatile *, forall( dtype D ) D * );
-
 forall( dtype DT ) DT _Atomic
 	* ?=?( _Atomic DT * restrict volatile *, DT _Atomic * ),
@@ -2822,5 +2280,4 @@
 	* ?=?( _Atomic DT * _Atomic restrict volatile *, void * ),
 	* ?=?( _Atomic DT * _Atomic restrict volatile *, forall( dtype D ) D * );
-
 forall( dtype DT ) DT const
 	* ?=?( DT const * restrict volatile *, DT const * ),
@@ -2830,5 +2287,4 @@
 	* ?=?( DT const * _Atomic restrict volatile *, void const * ),
 	* ?=?( DT const * _Atomic restrict volatile *, forall( dtype D ) D * );
-
 forall( dtype DT ) DT restrict
 	* ?=?( restrict DT * restrict volatile *, DT restrict * ),
@@ -2838,5 +2294,4 @@
 	* ?=?( restrict DT * _Atomic restrict volatile *, void * ),
 	* ?=?( restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * );
-
 forall( dtype DT ) DT volatile
 	* ?=?( DT volatile * restrict volatile *, DT volatile * ),
@@ -2846,5 +2301,4 @@
 	* ?=?( DT volatile * _Atomic restrict volatile *, void volatile * ),
 	* ?=?( DT volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
-
 forall( dtype DT ) DT _Atomic const
 	* ?=?( DT _Atomic const * restrict volatile *, DT _Atomic const * ),
@@ -2854,5 +2308,4 @@
 	* ?=?( DT _Atomic const * _Atomic restrict volatile *, void const * ),
 	* ?=?( DT _Atomic const * _Atomic restrict volatile *, forall( dtype D ) D * );
-
 forall( dtype DT ) DT _Atomic restrict
 	* ?=?( _Atomic restrict DT * restrict volatile *, DT _Atomic restrict * ),
@@ -2862,5 +2315,4 @@
 	* ?=?( _Atomic restrict DT * _Atomic restrict volatile *, void * ),
 	* ?=?( _Atomic restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * );
-
 forall( dtype DT ) DT _Atomic volatile
 	* ?=?( DT _Atomic volatile * restrict volatile *, DT _Atomic volatile * ),
@@ -2870,5 +2322,4 @@
 	* ?=?( DT _Atomic volatile * _Atomic restrict volatile *, void volatile * ),
 	* ?=?( DT _Atomic volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
-
 forall( dtype DT ) DT const restrict
 	* ?=?( DT const restrict * restrict volatile *, DT const restrict * ),
@@ -2878,5 +2329,4 @@
 	* ?=?( DT const restrict * _Atomic restrict volatile *, void const * ),
 	* ?=?( DT const restrict * _Atomic restrict volatile *, forall( dtype D ) D * );
-
 forall( dtype DT ) DT const volatile
 	* ?=?( DT const volatile * restrict volatile *, DT const volatile * ),
@@ -2886,5 +2336,4 @@
 	* ?=?( DT const volatile * _Atomic restrict volatile *, void const volatile * ),
 	* ?=?( DT const volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
-
 forall( dtype DT ) DT restrict volatile
 	* ?=?( DT restrict volatile * restrict volatile *, DT restrict volatile * ),
@@ -2894,5 +2343,4 @@
 	* ?=?( DT restrict volatile * _Atomic restrict volatile *, void volatile * ),
 	* ?=?( DT restrict volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
-
 forall( dtype DT ) DT _Atomic const restrict
 	* ?=?( DT _Atomic const restrict * restrict volatile *,
@@ -2908,5 +2356,4 @@
 	* ?=?( DT _Atomic const restrict * _Atomic restrict volatile *,
 	 forall( dtype D ) D * );
-
 forall( dtype DT ) DT _Atomic const volatile
 	* ?=?( DT _Atomic const volatile * restrict volatile *,
@@ -2922,5 +2369,4 @@
 	* ?=?( DT _Atomic const volatile * _Atomic restrict volatile *,
 	 forall( dtype D ) D * );
-
 forall( dtype DT ) DT _Atomic restrict volatile
 	* ?=?( DT _Atomic restrict volatile * restrict volatile *,
@@ -2936,5 +2382,4 @@
 	* ?=?( DT _Atomic restrict volatile * _Atomic restrict volatile *,
 	 forall( dtype D ) D * );
-
 forall( dtype DT ) DT const restrict volatile
 	* ?=?( DT const restrict volatile * restrict volatile *,
@@ -2950,5 +2395,4 @@
 	* ?=?( DT const restrict volatile * _Atomic restrict volatile *,
 	 forall( dtype D ) D * );
-
 forall( dtype DT ) DT _Atomic const restrict volatile
 	* ?=?( DT _Atomic const restrict volatile * restrict volatile *,
@@ -2964,22 +2408,15 @@
 	* ?=?( DT _Atomic const restrict volatile * _Atomic restrict volatile *,
 	 forall( dtype D ) D * );
-
 forall( dtype DT ) void
 	* ?=?( void * restrict volatile *, DT * );
-
 forall( dtype DT ) void const
 	* ?=?( void const * restrict volatile *, DT const * );
-
 forall( dtype DT ) void volatile
 	* ?=?( void volatile * restrict volatile *, DT volatile * );
-
 forall( dtype DT ) void const volatile
 	* ?=?( void const volatile * restrict volatile *, DT const volatile * );
 \end{lstlisting}
 \begin{rationale}
-The pattern of overloadings for simple assignment resembles that of pointer increment and decrement,
-except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter,
-instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete
-type.
+The pattern of overloadings for simple assignment resembles that of pointer increment and decrement, except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter, instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete type.
 \end{rationale}
 
@@ -3006,11 +2443,9 @@
 
 \semantics
-The structure assignment functions provide member-wise assignment; each non-array member and each
-element of each array member of the right argument is assigned to the corresponding member or
-element of the left argument using the assignment function defined for its type. All other
-assignment functions have the same effect as the corresponding C assignment expression.
-\begin{rationale}
-Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that
-is, bitwise copy---even if some of the union members have programmer-defined assignment functions.
+The structure assignment functions provide member-wise assignment;
+each non-array member and each element of each array member of the right argument is assigned to the corresponding member or element of the left argument using the assignment function defined for its type.
+All other assignment functions have the same effect as the corresponding C assignment expression.
+\begin{rationale}
+Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that is, bitwise copy---even if some of the union members have programmer-defined assignment functions.
 \end{rationale}
 
@@ -3025,5 +2460,4 @@
 	* ?+=?( T * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T _Atomic
 	* ?+=?( T _Atomic * restrict volatile *, ptrdiff_t ),
@@ -3031,5 +2465,4 @@
 	* ?+=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T const
 	* ?+=?( T const * restrict volatile *, ptrdiff_t ),
@@ -3037,5 +2470,4 @@
 	* ?+=?( T const * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T const * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T restrict
 	* ?+=?( T restrict * restrict volatile *, ptrdiff_t ),
@@ -3043,5 +2475,4 @@
 	* ?+=?( T restrict * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T restrict * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T volatile
 	* ?+=?( T volatile * restrict volatile *, ptrdiff_t ),
@@ -3049,5 +2480,4 @@
 	* ?+=?( T volatile * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T volatile * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T _Atomic const
 	* ?+=?( T _Atomic const restrict volatile *, ptrdiff_t ),
@@ -3055,5 +2485,4 @@
 	* ?+=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T _Atomic restrict
 	* ?+=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ),
@@ -3061,5 +2490,4 @@
 	* ?+=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T _Atomic volatile
 	* ?+=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ),
@@ -3067,5 +2495,4 @@
 	* ?+=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T const restrict
 	* ?+=?( T const restrict * restrict volatile *, ptrdiff_t ),
@@ -3073,5 +2500,4 @@
 	* ?+=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T const volatile
 	* ?+=?( T const volatile * restrict volatile *, ptrdiff_t ),
@@ -3079,5 +2505,4 @@
 	* ?+=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T restrict volatile
 	* ?+=?( T restrict volatile * restrict volatile *, ptrdiff_t ),
@@ -3085,5 +2510,4 @@
 	* ?+=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T _Atomic const restrict
 	* ?+=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ),
@@ -3091,5 +2515,4 @@
 	* ?+=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T _Atomic const volatile
 	* ?+=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ),
@@ -3097,5 +2520,4 @@
 	* ?+=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T _Atomic restrict volatile
 	* ?+=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ),
@@ -3103,5 +2525,4 @@
 	* ?+=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T const restrict volatile
 	* ?+=?( T const restrict volatile * restrict volatile *, ptrdiff_t ),
@@ -3109,5 +2530,4 @@
 	* ?+=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
 	* ?-=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
-
 forall( type T ) T _Atomic const restrict volatile
 	* ?+=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ),
@@ -3321,6 +2741,6 @@
 \semantics
 In the comma expression ``\lstinline$a, b$'', the first operand is interpreted as
-``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}. The
-interpretations of the expression are the interpretations of the second operand.
+``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}.
+The interpretations of the expression are the interpretations of the second operand.
 
 
@@ -3337,31 +2757,24 @@
 
 \constraints
-If an identifier has \Index{no linkage}, there shall be no more than one declaration of the
-identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the
-same name space, except that:
+If an identifier has \Index{no linkage}, there shall be no more than one declaration of the identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the same name space, except that:
 \begin{itemize}
-\item
-a typedef name may be redefined to denote the same type as it currently does, provided that type is
-not a variably modified type;
-\item
-tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard.
+\item a typedef name may be redefined to denote the same type as it currently does, provided that type is not a variably modified type;
+\item tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard.
 \end{itemize}
 \begin{rationale}
-This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow
-overloading.
-\end{rationale}
-
-An identifier declared by a type declaration shall not be redeclared as a parameter in a function
-definition whose declarator includes an identifier list.
-\begin{rationale}
-This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters. This
-avoids an ambiguity between old-style function declarations and new-style function prototypes:
+This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow overloading.
+\end{rationale}
+
+An identifier declared by a type declaration shall not be redeclared as a parameter in a function definition whose declarator includes an identifier list.
+\begin{rationale}
+This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters.
+This avoids an ambiguity between old-style function declarations and new-style function prototypes:
 \begin{lstlisting}
 void f( Complex,	// ... 3000 characters ...
 void g( Complex,	// ... 3000 characters ...
-int Complex; { ... }
-\end{lstlisting}
-Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the
-second.
+int Complex;
+{ ... }
+\end{lstlisting}
+Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the second.
 \end{rationale}
 
@@ -3382,7 +2795,5 @@
 
 \semantics 
-\CFA extends the {\c11} definition of \define{anonymous structure} to include structure
-specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union
-specifiers with tags.
+\CFA extends the {\c11} definition of \define{anonymous structure} to include structure specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union specifiers with tags.
 \begin{rationale}
 This extension imitates an extension in the Plan 9 C compiler \cite{Thompson90new}.
@@ -3401,10 +2812,9 @@
 cp.x = 0;
 cp.color = RED;
-
 struct literal {@\impl{literal}@
 	enum { NUMBER, STRING } tag;
 	union {
-	 double n;
-	 char *s;
+		double n;
+		char *s;
 	};
 };
@@ -3428,21 +2838,17 @@
 \begin{comment}
 \constraints
-If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier}
-declares a structure or union tag, the types of the members of the structure or union shall not use
-any of the type identifiers declared by the \nonterm{type-parameter-list}.
-\begin{rationale}
-This sort of declaration is illegal because the scope of the type identifiers ends at the end of the
-declaration, but the scope of the structure tag does not.
-\begin{lstlisting}
-forall( type T ) struct Pair { T a, b; } mkPair( T, T ); // illegal 
-\end{lstlisting}
-If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the
-members' type be?
+If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier} declares a structure or union tag, the types of the members of the structure or union shall not use any of the type identifiers declared by the \nonterm{type-parameter-list}.
+\begin{rationale}
+This sort of declaration is illegal because the scope of the type identifiers ends at the end of the declaration, but the scope of the structure tag does not.
+\begin{lstlisting}
+forall( type T ) struct Pair { T a, b;
+} mkPair( T, T ); // illegal 
+\end{lstlisting}
+If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the members' type be?
 \end{rationale}
 \end{comment}
 
 \semantics
-The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type
-identifiers, function and object identifiers with \Index{no linkage}.
+The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type identifiers, function and object identifiers with \Index{no linkage}.
 
 If, in the declaration ``\lstinline$T D$'', \lstinline$T$ contains \nonterm{forall-specifier}s and
@@ -3450,27 +2856,20 @@
 \begin{lstlisting}
 D( @\normalsize\nonterm{parameter-type-list}@ )
-\end{lstlisting}
-then a type identifier declared by one of the \nonterm{forall-specifier}s is an \define{inferred
-parameter} of the function declarator if and only if it is not an inferred parameter of a function
-declarator in \lstinline$D$, and it is used in the type of a parameter in the following
+\end{lstlisting} then a type identifier declared by one of the \nonterm{forall-specifier}s is an \define{inferred parameter} of the function declarator if and only if it is not an inferred parameter of a function declarator in \lstinline$D$, and it is used in the type of a parameter in the following
 \nonterm{type-parameter-list} or it and an inferred parameter are used as arguments of a
-\Index{specification} in one of the \nonterm{forall-specifier}s. The identifiers declared by
-assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s
-of that function declarator.
+\Index{specification} in one of the \nonterm{forall-specifier}s.
+The identifiers declared by assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s of that function declarator.
 
 \begin{comment}
 \begin{rationale}
-Since every inferred parameter is used by some parameter, inference can be understood as a single
-bottom-up pass over the expression tree, that only needs to apply local reasoning at each node.
+Since every inferred parameter is used by some parameter, inference can be understood as a single bottom-up pass over the expression tree, that only needs to apply local reasoning at each node.
 
 If this restriction were lifted, it would be possible to write
 \begin{lstlisting}
-forall( type T ) T * alloc( void );@\use{alloc}@
-int *p = alloc();
+forall( type T ) T * alloc( void );@\use{alloc}@ int *p = alloc();
 \end{lstlisting}
 Here \lstinline$alloc()$ would receive \lstinline$int$ as an inferred argument, and return an
-\lstinline$int *$. In general, if a call to \lstinline$alloc()$ is a subexpression of an expression
-involving polymorphic functions and overloaded identifiers, there could be considerable distance
-between the call and the subexpression that causes \lstinline$T$ to be bound.
+\lstinline$int *$.
+In general, if a call to \lstinline$alloc()$ is a subexpression of an expression involving polymorphic functions and overloaded identifiers, there could be considerable distance between the call and the subexpression that causes \lstinline$T$ to be bound.
 
 With the current restriction, \lstinline$alloc()$ must be given an argument that determines
@@ -3482,22 +2881,17 @@
 \end{comment}
 
-If a function declarator is part of a function definition, its inferred parameters and assertion
-parameters have \Index{block scope}; otherwise, identifiers declared by assertions have a
+If a function declarator is part of a function definition, its inferred parameters and assertion parameters have \Index{block scope};
+otherwise, identifiers declared by assertions have a
 \define{declaration scope}, which terminates at the end of the \nonterm{declaration}.
 
 A function type that has at least one inferred parameter is a \define{polymorphic function} type.
-Function types with no inferred parameters are \define{monomorphic function} types. One function
-type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the
-same number of inferred parameters and fewer of its explicit parameters have types that depend on an
-inferred parameter.
-
-The names of inferred parameters and the order of identifiers in forall specifiers are not relevant
-to polymorphic function type compatibility. Let $f$ and $g$ be two polymorphic function types with
-the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$
-and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s. Let $f'$
-be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$. Then $f$ and $g$ are
-\Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if
-for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same
-identifier and compatible type, and vice versa.
+Function types with no inferred parameters are \define{monomorphic function} types.
+One function type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the same number of inferred parameters and fewer of its explicit parameters have types that depend on an inferred parameter.
+
+The names of inferred parameters and the order of identifiers in forall specifiers are not relevant to polymorphic function type compatibility.
+Let $f$ and $g$ be two polymorphic function types with the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$ and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s.
+Let $f'$ be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$.
+Then $f$ and $g$ are
+\Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same identifier and compatible type, and vice versa.
 
 \examples
@@ -3513,6 +2907,5 @@
 forall( type T ) T (*pfT )( T ) = fT;
 \end{lstlisting}
-\lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not
-polymorphic, but the function it points at is.
+\lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not polymorphic, but the function it points at is.
 \begin{lstlisting}
 int (*fvpfi( void ))( int ) {
@@ -3523,7 +2916,5 @@
 }
 \end{lstlisting}
-\lstinline$fvpfi()$ and \lstinline$fvpfT()$ are functions taking no arguments and returning pointers
-to functions. \lstinline$fvpfT()$ is monomorphic, but the function that its return value points
-at is polymorphic.
+\lstinline$fvpfi()$ and \lstinline$fvpfT()$ are functions taking no arguments and returning pointers to functions. \lstinline$fvpfT()$ is monomorphic, but the function that its return value points at is polymorphic.
 \begin{lstlisting}
 forall( type T ) int ( *fTpfi( T ) )( int );
@@ -3531,13 +2922,10 @@
 forall( type T, type U ) U ( *fTpfU( T ) )( U );
 \end{lstlisting}
-\lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function
-taking an integer and returning an integer. It could return \lstinline$pfi$. \lstinline$fTpfT()$
-is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning
-\lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$. For instance,
-in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and
-the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and
+\lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function taking an integer and returning an integer.
+It could return \lstinline$pfi$. \lstinline$fTpfT()$ is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning
+\lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$.
+For instance, in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and
 ``\lstinline$fTpfT("yes")("no")$'' are legal, but ``\lstinline$fTpfT(17)("no")$'' is illegal.
-\lstinline$fTpfU()$ is polymorphic ( in type \lstinline$T$), and returns a pointer to a function that
-is polymorphic ( in type \lstinline$U$). ``\lstinline$f5(17)("no")$'' is a legal expression of type
+\lstinline$fTpfU()$ is polymorphic ( in type \lstinline$T$), and returns a pointer to a function that is polymorphic ( in type \lstinline$U$). ``\lstinline$f5(17)("no")$'' is a legal expression of type
 \lstinline$char *$.
 \begin{lstlisting}
@@ -3545,41 +2933,33 @@
 forall( type U, type V, type W ) U * g( V *, U, W * const );
 \end{lstlisting}
-The functions \lstinline$f()$ and \lstinline$g()$ have compatible types. Let \(f\) and \(g\) be
-their types; then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\)
-= \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$. Replacing every \(f_i\)
-by \(g_i\) in \(f\) gives
+The functions \lstinline$f()$ and \lstinline$g()$ have compatible types.
+Let \(f\) and \(g\) be their types;
+then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\)
+= \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$.
+Replacing every \(f_i\) by \(g_i\) in \(f\) gives
 \begin{lstlisting}
 forall( type V, type U, type W ) U * f( V *, U, W * const );
-\end{lstlisting}
-which has a return type and parameter list that is compatible with \(g\).
-\begin{rationale}
-The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave
-room for inferred parameters of ordinary types in case parameterized types get added one day.
+\end{lstlisting} which has a return type and parameter list that is compatible with \(g\).
+\begin{rationale}
+The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave room for inferred parameters of ordinary types in case parameterized types get added one day.
 
 Even without parameterized types, I might try to allow
 \begin{lstlisting}
 forall( int n ) int sum( int vector[n] );
-\end{lstlisting}
-but C currently rewrites array parameters as pointer parameters, so the effects of such a change
-require more thought.
-\end{rationale}
-
-\begin{rationale}
-A polymorphic declaration must do two things: it must introduce type parameters, and it must apply
-assertions to those types. Adding this to existing C declaration syntax and semantics was delicate,
-and not entirely successful.
-
-C depends on declaration-before-use, so a forall specifier must introduce type names before they can
-be used in the declaration specifiers. This could be done by making the forall specifier part of
-the declaration specifiers, or by making it a new introductory clause of declarations.
-
-Assertions are also part of polymorphic function types, because it must be clear which functions
-have access to the assertion parameters declared by the assertions. All attempts to put assertions
-inside an introductory clause produced complex semantics and confusing code. Building them into the
-declaration specifiers could be done by placing them in the function's parameter list, or in a
-forall specifier that is a declaration specifier. Assertions are also used with type parameters of
-specifications, and by type declarations. For consistency's sake it seems best to attach assertions
-to the type declarations in forall specifiers, which means that forall specifiers must be
-declaration specifiers.
+\end{lstlisting} but C currently rewrites array parameters as pointer parameters, so the effects of such a change require more thought.
+\end{rationale}
+
+\begin{rationale}
+A polymorphic declaration must do two things: it must introduce type parameters, and it must apply assertions to those types.
+Adding this to existing C declaration syntax and semantics was delicate, and not entirely successful.
+
+C depends on declaration-before-use, so a forall specifier must introduce type names before they can be used in the declaration specifiers.
+This could be done by making the forall specifier part of the declaration specifiers, or by making it a new introductory clause of declarations.
+
+Assertions are also part of polymorphic function types, because it must be clear which functions have access to the assertion parameters declared by the assertions.
+All attempts to put assertions inside an introductory clause produced complex semantics and confusing code.
+Building them into the declaration specifiers could be done by placing them in the function's parameter list, or in a forall specifier that is a declaration specifier.
+Assertions are also used with type parameters of specifications, and by type declarations.
+For consistency's sake it seems best to attach assertions to the type declarations in forall specifiers, which means that forall specifiers must be declaration specifiers.
 \end{rationale}
 %HERE
@@ -3595,32 +2975,28 @@
 
 \constraints
-\lstinline$restrict$\index{register@{\lstinline$restrict$}} Types other than type parameters and
-pointer types whose referenced type is an object type shall not be restrict-qualified.
+\lstinline$restrict$\index{register@{\lstinline$restrict$}} Types other than type parameters and pointer types whose referenced type is an object type shall not be restrict-qualified.
 
 \semantics
-An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not
-establish any special semantics in that case.
-
-\begin{rationale}
-\CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be
-passed to polymorphic functions.
-\end{rationale}
-
-\lstinline$lvalue$ may be used to qualify the return type of a function type. Let \lstinline$T$ be
-an unqualified version of a type; then the result of calling a function with return type
+An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not establish any special semantics in that case.
+
+\begin{rationale}
+\CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be passed to polymorphic functions.
+\end{rationale}
+
+\lstinline$lvalue$ may be used to qualify the return type of a function type.
+Let \lstinline$T$ be an unqualified version of a type;
+then the result of calling a function with return type
 \lstinline$lvalue T$ is a \Index{modifiable lvalue} of type \lstinline$T$.
-\lstinline$const$\use{const} and \lstinline$volatile$\use{volatile} qualifiers may also be added to
-indicate that the function result is a constant or volatile lvalue.
-\begin{rationale}
-The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the
-return type of a function if the \lstinline$lvalue$ qualifier is also used.
-\end{rationale}
-
-An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue; the
-result of the expression is an lvalue.
-
-\begin{rationale}
-\lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to
-object of type \lstinline$T$) type. Reference types have four uses in {\CC}.
+\lstinline$const$\use{const} and \lstinline$volatile$\use{volatile} qualifiers may also be added to indicate that the function result is a constant or volatile lvalue.
+\begin{rationale}
+The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the return type of a function if the \lstinline$lvalue$ qualifier is also used.
+\end{rationale}
+
+An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue;
+the result of the expression is an lvalue.
+
+\begin{rationale}
+\lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to object of type \lstinline$T$) type.
+Reference types have four uses in {\CC}.
 \begin{itemize}
 \item
@@ -3629,7 +3005,6 @@
 
 \item
-A reference can be used to define an alias for a complicated lvalue expression, as a way of getting
-some of the functionality of the Pascal \lstinline$with$ statement. The following {\CC} code gives
-an example.
+A reference can be used to define an alias for a complicated lvalue expression, as a way of getting some of the functionality of the Pascal \lstinline$with$ statement.
+The following {\CC} code gives an example.
 \begin{lstlisting}
 {
@@ -3641,22 +3016,19 @@
 
 \item
-A reference parameter can be used to allow a function to modify an argument without forcing the
-caller to pass the address of the argument. This is most useful for user-defined assignment
-operators. In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and
-the two expressions
+A reference parameter can be used to allow a function to modify an argument without forcing the caller to pass the address of the argument.
+This is most useful for user-defined assignment operators.
+In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and the two expressions
 \begin{lstlisting}
 a = b;
 operator=( a, b );
-\end{lstlisting}
-are equivalent. If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first
-parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''. It cannot have type
+\end{lstlisting} are equivalent.
+If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''.
+It cannot have type
 \lstinline$T$, because then assignment couldn't alter the variable, and it can't have type
 ``\lstinline$T *$'', because the assignment would have to be written ``\lstinline$&a = b;$''.
 
-In the case of user-defined operators, this could just as well be handled by using pointer types and
-by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to
-``\lstinline$operator=(&( a), b )$''. Reference parameters of ``normal'' functions are Bad Things,
-because they remove a useful property of C function calls: an argument can only be modified by a
-function if it is preceded by ``\lstinline$&$''.
+In the case of user-defined operators, this could just as well be handled by using pointer types and by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to
+``\lstinline$operator=(&( a), b )$''.
+Reference parameters of ``normal'' functions are Bad Things, because they remove a useful property of C function calls: an argument can only be modified by a function if it is preceded by ``\lstinline$&$''.
 
 \item
@@ -3668,23 +3040,17 @@
 void fiddle( const Thing & );
 \end{lstlisting}
-If the second form is used, then constructors and destructors are not invoked to create a temporary
-variable at the call site ( and it is bad style for the caller to make any assumptions about such
-things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by
-aliases. The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too
-large or their constructors or destructors are too expensive. An implementation may switch between
-them without causing trouble for well-behaved clients. This leaves the implementor to define ``too
-large'' and ``too expensive''.
+If the second form is used, then constructors and destructors are not invoked to create a temporary variable at the call site ( and it is bad style for the caller to make any assumptions about such things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by aliases.
+The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too large or their constructors or destructors are too expensive.
+An implementation may switch between them without causing trouble for well-behaved clients.
+This leaves the implementor to define ``too large'' and ``too expensive''.
 
 I propose to push this job onto the compiler by allowing it to implement
 \begin{lstlisting}
 void fiddle( const volatile Thing );
-\end{lstlisting}
-with call-by-reference. Since it knows all about the size of \lstinline$Thing$s and the parameter
-passing mechanism, it should be able to come up with a better definition of ``too large'', and may
-be able to make a good guess at ``too expensive''.
+\end{lstlisting} with call-by-reference.
+Since it knows all about the size of \lstinline$Thing$s and the parameter passing mechanism, it should be able to come up with a better definition of ``too large'', and may be able to make a good guess at ``too expensive''.
 \end{itemize}
 
-In summary, since references are only really necessary for returning lvalues, I'll only provide
-lvalue functions.
+In summary, since references are only really necessary for returning lvalues, I'll only provide lvalue functions.
 \end{rationale}
 
@@ -3693,8 +3059,7 @@
 \subsection{Initialization}
 
-An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the
-object being initialized. An expression used in an \nonterm{initializer-list} is treated as being
-cast to the type of the aggregate member that it initializes. In either case the cast must have a
-single unambiguous \Index{interpretation}.
+An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the object being initialized.
+An expression used in an \nonterm{initializer-list} is treated as being cast to the type of the aggregate member that it initializes.
+In either case the cast must have a single unambiguous \Index{interpretation}.
 
 
@@ -3717,17 +3082,14 @@
 \end{syntax}
 \begin{rationale}
-The declarations allowed in a specification are much the same as those allowed in a structure,
-except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed.
+The declarations allowed in a specification are much the same as those allowed in a structure, except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed.
 \end{rationale}
 
 \semantics
-A \define{specification definition} defines a name for a \define{specification}: a parameterized
-collection of object and function declarations.
+A \define{specification definition} defines a name for a \define{specification}: a parameterized collection of object and function declarations.
 
 The declarations in a specification consist of the declarations in the
 \nonterm{spec-declaration-list} and declarations produced by any assertions in the
-\nonterm{spec-parameter-list}. If the collection contains two declarations that declare the same
-identifier and have compatible types, they are combined into one declaration with the composite type
-constructed from the two types.
+\nonterm{spec-parameter-list}.
+If the collection contains two declarations that declare the same identifier and have compatible types, they are combined into one declaration with the composite type constructed from the two types.
 
 
@@ -3747,11 +3109,10 @@
 
 \constraints
-The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name
-of a specification. The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for
-each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}. If the
-\nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type
-name of an \Index{object type}; if it uses \lstinline$dtype$, the argument shall be the type name of
-an object type or an \Index{incomplete type}; and if it uses \lstinline$ftype$, the argument shall
-be the type name of a \Index{function type}.
+The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name of a specification.
+The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}.
+If the
+\nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type name of an \Index{object type};
+if it uses \lstinline$dtype$, the argument shall be the type name of an object type or an \Index{incomplete type};
+and if it uses \lstinline$ftype$, the argument shall be the type name of a \Index{function type}.
 
 \semantics
@@ -3759,12 +3120,8 @@
 \define{assertion parameters}.
 
-The assertion parameters produced by an assertion that applies the name of a specification to type
-arguments are found by taking the declarations specified in the specification and treating each of
-the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument.
-
-The collection of assertion parameters produced by the \nonterm{assertion-list} are found by
-combining the declarations produced by each assertion. If the collection contains two declarations
-that declare the same identifier and have compatible types, they are combined into one declaration
-with the \Index{composite type} constructed from the two types.
+The assertion parameters produced by an assertion that applies the name of a specification to type arguments are found by taking the declarations specified in the specification and treating each of the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument.
+
+The collection of assertion parameters produced by the \nonterm{assertion-list} are found by combining the declarations produced by each assertion.
+If the collection contains two declarations that declare the same identifier and have compatible types, they are combined into one declaration with the \Index{composite type} constructed from the two types.
 
 \examples
@@ -3774,5 +3131,4 @@
 	return val + val;
 }
-
 context summable( type T ) {@\impl{summable}@
 	T ?+=?( T *, T );@\use{?+=?}@
@@ -3788,7 +3144,6 @@
 context sum_list( type List, type Element | summable( Element ) | list_of( List, Element ) ) {};
 \end{lstlisting}
-\lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added
-up. The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion
-parameters
+\lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added up.
+The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion parameters
 \begin{lstlisting}
 int ?+=?( int *, int );
@@ -3825,39 +3180,33 @@
 
 \constraints
-If a type declaration has block scope, and the declared identifier has external or internal linkage,
-the declaration shall have no initializer for the identifier.
+If a type declaration has block scope, and the declared identifier has external or internal linkage, the declaration shall have no initializer for the identifier.
 
 \semantics
-A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type
-name} for a type incompatible with all other types.
-
-An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}. Identifiers declared
-with type-class \lstinline$type$\use{type} are \Index{object type}s; those declared with type-class
-\lstinline$dtype$\use{dtype} are \Index{incomplete type}s; and those declared with type-class
-\lstinline$ftype$\use{ftype} are \Index{function type}s. The identifier has \Index{block scope} that
-terminates at the end of the \nonterm{spec-declaration-list} or polymorphic function that contains
-the \nonterm{type-parameter}.
-
-A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}.  The declared
-identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after
-the end of the initializer. The type in the initializer is called the \define{implementation
-  type}. Within the scope of the declaration, \Index{implicit conversion}s can be performed between
-the defined type and the implementation type, and between pointers to the defined type and pointers
-to the implementation type.
-
-A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or
-with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}. If a
-\Index{translation unit} or \Index{block} contains one or more such declarations for an identifier,
-it must contain exactly one definition of the identifier ( but not in an enclosed block, which would
-define a new type known only within that block).
+A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type name} for a type incompatible with all other types.
+
+An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}.
+Identifiers declared with type-class \lstinline$type$\use{type} are \Index{object type}s;
+those declared with type-class
+\lstinline$dtype$\use{dtype} are \Index{incomplete type}s;
+and those declared with type-class
+\lstinline$ftype$\use{ftype} are \Index{function type}s.
+The identifier has \Index{block scope} that terminates at the end of the \nonterm{spec-declaration-list} or polymorphic function that contains the \nonterm{type-parameter}.
+
+A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}.  The declared identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after the end of the initializer.
+The type in the initializer is called the \define{implementation
+  type}.
+Within the scope of the declaration, \Index{implicit conversion}s can be performed between the defined type and the implementation type, and between pointers to the defined type and pointers to the implementation type.
+
+A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}.
+If a
+\Index{translation unit} or \Index{block} contains one or more such declarations for an identifier, it must contain exactly one definition of the identifier ( but not in an enclosed block, which would define a new type known only within that block).
 \begin{rationale}
 Incomplete type declarations allow compact mutually-recursive types.
 \begin{lstlisting}
-type t1; // Incomplete type declaration. 
+type t1; // incomplete type declaration
 type t2 = struct { t1 * p; ... };
 type t1 = struct { t2 * p; ... };
 \end{lstlisting}
-Without them, mutual recursion could be handled by declaring mutually recursive structures, then
-initializing the types to those structures.
+Without them, mutual recursion could be handled by declaring mutually recursive structures, then initializing the types to those structures.
 \begin{lstlisting}
 struct s1;
@@ -3865,75 +3214,67 @@
 type t1 = struct s1 { struct s2 * p; ... };
 \end{lstlisting}
-This introduces extra names, and may force the programmer to cast between the types and their
-implementations.
+This introduces extra names, and may force the programmer to cast between the types and their implementations.
 \end{rationale}
 
 A type declaration without an initializer and with \Index{storage-class specifier}
-\lstinline$extern$\use{extern} is an \define{opaque type declaration}. Opaque types are
-\Index{object type}s. An opaque type is not a \nonterm{constant-expression}; neither is a structure
-or union that has a member whose type is not a \nonterm{constant-expression}.  Every other
-\Index{object type} is a \nonterm{constant-expression}. Objects with static storage duration shall
-be declared with a type that is a \nonterm{constant-expression}.
-\begin{rationale}
-Type declarations can declare identifiers with external linkage, whereas typedef declarations
-declare identifiers that only exist within a translation unit. These opaque types can be used in
-declarations, but the implementation of the type is not visible.
-
-Static objects can not have opaque types because space for them would have to be allocated at
-program start-up. This is a deficiency\index{deficiencies!static opaque objects}, but I don't want
-to deal with ``module initialization'' code just now.
-\end{rationale}
-
-An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a
-value of \Index{type-class} \lstinline$dtype$. An object type\index{object types} which is not a
-qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$. A
+\lstinline$extern$\use{extern} is an \define{opaque type declaration}.
+Opaque types are
+\Index{object type}s.
+An opaque type is not a \nonterm{constant-expression};
+neither is a structure or union that has a member whose type is not a \nonterm{constant-expression}.  Every other
+\Index{object type} is a \nonterm{constant-expression}.
+Objects with static storage duration shall be declared with a type that is a \nonterm{constant-expression}.
+\begin{rationale}
+Type declarations can declare identifiers with external linkage, whereas typedef declarations declare identifiers that only exist within a translation unit.
+These opaque types can be used in declarations, but the implementation of the type is not visible.
+
+Static objects can not have opaque types because space for them would have to be allocated at program start-up.
+This is a deficiency\index{deficiencies!static opaque objects}, but I don't want to deal with ``module initialization'' code just now.
+\end{rationale}
+
+An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a value of \Index{type-class} \lstinline$dtype$.
+An object type\index{object types} which is not a qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$.
+A
 \Index{function type} is a value of type-class \lstinline$ftype$.
 \begin{rationale}
-Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which
-omits the identifier being declared.
-
-Object types are precisely the types that can be instantiated. Type qualifiers are not included in
-type values because the compiler needs the information they provide at compile time to detect
-illegal statements or to produce efficient machine instructions. For instance, the code that a
-compiler must generate to manipulate an object that has volatile-qualified type may be different
-from the code to manipulate an ordinary object.
-
-Type qualifiers are a weak point of C's type system. Consider the standard library function
-\lstinline$strchr()$ which, given a string and a character, returns a pointer to the first
-occurrence of the character in the string.
+Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which omits the identifier being declared.
+
+Object types are precisely the types that can be instantiated.
+Type qualifiers are not included in type values because the compiler needs the information they provide at compile time to detect illegal statements or to produce efficient machine instructions.
+For instance, the code that a compiler must generate to manipulate an object that has volatile-qualified type may be different from the code to manipulate an ordinary object.
+
+Type qualifiers are a weak point of C's type system.
+Consider the standard library function
+\lstinline$strchr()$ which, given a string and a character, returns a pointer to the first occurrence of the character in the string.
 \begin{lstlisting}
 char *strchr( const char *s, int c ) {@\impl{strchr}@
 	char real_c = c; // done because c was declared as int. 
 	for ( ; *s != real_c; s++ )
-	 if ( *s == '\0' ) return NULL;
+		if ( *s == '\0' ) return NULL;
 	return ( char * )s;
 }
 \end{lstlisting}
-The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be
-used to search a constant string, but the return type must be \lstinline$char *$, because the result
-might be used to modify a non-constant string. Hence the body must perform a cast, and ( even worse)
-\lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings. What is needed
-is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has
-exactly the same qualifiers. Polymorphic functions do not provide a fix for this
-deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of
-type values. Instead, overloading can be used to define \lstinline$strchr()$ for each combination
-of qualifiers.
-\end{rationale}
-
-\begin{rationale}
-Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a
-type declaration, or as the type of a structure or union member. This prevents the declaration of
-types that contain each other.
+The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be used to search a constant string, but the return type must be \lstinline$char *$, because the result might be used to modify a non-constant string.
+Hence the body must perform a cast, and ( even worse)
+\lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings.
+What is needed is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has exactly the same qualifiers.
+Polymorphic functions do not provide a fix for this deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of type values.
+Instead, overloading can be used to define \lstinline$strchr()$ for each combination of qualifiers.
+\end{rationale}
+
+\begin{rationale}
+Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a type declaration, or as the type of a structure or union member.
+This prevents the declaration of types that contain each other.
 \begin{lstlisting}
 type t1;
-type t2 = t1; // illegal: incomplete type t1. 
+type t2 = t1; // illegal: incomplete type t1
 type t1 = t2;
 \end{lstlisting}
 
-The initializer in a file-scope declaration must be a constant expression. This means type
-declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque
+The initializer in a file-scope declaration must be a constant expression.
+This means type declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque
  types}.
 \begin{lstlisting}
-extern type Huge; // extended-precision integer type. 
+extern type Huge; // extended-precision integer type
 type Rational = struct {
 	Huge numerator, denominator;	// illegal 
@@ -3944,10 +3285,7 @@
 \end{lstlisting}
 Without this restriction, \CFA might require ``module initialization'' code ( since
-\lstinline$Rational$ has external linkage, it must be created before any other translation unit
-instantiates it), and would force an ordering on the initialization of the translation unit that
-defines \lstinline$Huge$ and the translation that declares \lstinline$Rational$.
-
-A benefit of the restriction is that it prevents the declaration in separate translation units of
-types that contain each other, which would be hard to prevent otherwise.
+\lstinline$Rational$ has external linkage, it must be created before any other translation unit instantiates it), and would force an ordering on the initialization of the translation unit that defines \lstinline$Huge$ and the translation that declares \lstinline$Rational$.
+
+A benefit of the restriction is that it prevents the declaration in separate translation units of types that contain each other, which would be hard to prevent otherwise.
 \begin{lstlisting}
 //  File a.c:
@@ -3962,31 +3300,26 @@
 \begin{rationale}
 Since a \nonterm{type-declaration} is a \nonterm{declaration} and not a
-\nonterm{struct-declaration}, type declarations can not be structure members. The form of
+\nonterm{struct-declaration}, type declarations can not be structure members.
+The form of
 \nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline$type$.
-Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued
-expressions. It also side-steps the problem of type-valued expressions producing different values
-in different declarations.
-
-Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit
-type parameters. This may be too restrictive, but it attempts to make compilation simpler. Recall
-that when traditional C scanners read in an identifier, they look it up in the symbol table to
-determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token
-depending on what they find. A type parameter would add a type name to the current scope. The
-scope manipulations involved in parsing the declaration of a function that takes function pointer
-parameters and returns a function pointer may just be too complicated.
-
-Explicit type parameters don't seem to be very useful, anyway, because their scope would not include
-the return type of the function. Consider the following attempt to define a type-safe memory
-allocation function.
+Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued expressions.
+It also side-steps the problem of type-valued expressions producing different values in different declarations.
+
+Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit type parameters.
+This may be too restrictive, but it attempts to make compilation simpler.
+Recall that when traditional C scanners read in an identifier, they look it up in the symbol table to determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token depending on what they find.
+A type parameter would add a type name to the current scope.
+The scope manipulations involved in parsing the declaration of a function that takes function pointer parameters and returns a function pointer may just be too complicated.
+
+Explicit type parameters don't seem to be very useful, anyway, because their scope would not include the return type of the function.
+Consider the following attempt to define a type-safe memory allocation function.
 \begin{lstlisting}
 #include <stdlib.h>
 T * new( type T ) { return ( T * )malloc( sizeof( T) ); };
-@\ldots@
-int * ip = new( int );
-\end{lstlisting}
-This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the
-function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the
-meaning of \lstinline$T$ in the scope that contains \lstinline$new$; it could be undefined, or a
-type name, or a function or variable name. Nothing good can result from such a situation.
+@\ldots@ int * ip = new( int );
+\end{lstlisting}
+This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the meaning of \lstinline$T$ in the scope that contains \lstinline$new$;
+it could be undefined, or a type name, or a function or variable name.
+Nothing good can result from such a situation.
 \end{rationale}
 
@@ -4003,16 +3336,13 @@
 f2( v2 );
 \end{lstlisting}
-\lstinline$V1$ is passed by value, so \lstinline$f1()$'s assignment to \lstinline$a[0]$ does not
-modify v1.  \lstinline$V2$ is converted to a pointer, so \lstinline$f2()$ modifies
-\lstinline$v2[0]$.
+\lstinline$V1$ is passed by value, so \lstinline$f1()$'s assignment to \lstinline$a[0]$ does not modify v1.  \lstinline$V2$ is converted to a pointer, so \lstinline$f2()$ modifies \lstinline$v2[0]$.
 
 A translation unit containing the declarations
 \begin{lstlisting}
-extern type Complex;@\use{Complex}@ // opaque type declaration. 
+extern type Complex;@\use{Complex}@ // opaque type declaration
 extern float abs( Complex );@\use{abs}@
-\end{lstlisting}
-can contain declarations of complex numbers, which can be passed to \lstinline$abs$. Some other
-translation unit must implement \lstinline$Complex$ and \lstinline$abs$. That unit might contain
-the declarations
+\end{lstlisting} can contain declarations of complex numbers, which can be passed to \lstinline$abs$.
+Some other translation unit must implement \lstinline$Complex$ and \lstinline$abs$.
+That unit might contain the declarations
 \begin{lstlisting}
 type Complex = struct { float re, im; };@\impl{Complex}@
@@ -4022,6 +3352,5 @@
 }
 \end{lstlisting}
-Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can
-be retrieved.
+Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can be retrieved.
 
 \begin{lstlisting}
@@ -4034,33 +3363,29 @@
 
 \begin{rationale}
-Within the scope of a type definition, an instance of the type can be viewed as having that type or
-as having the implementation type. In the \lstinline$Time_of_day$ example, the difference is
-important. Different languages have treated the distinction between the abstraction and the
-implementation in different ways.
+Within the scope of a type definition, an instance of the type can be viewed as having that type or as having the implementation type.
+In the \lstinline$Time_of_day$ example, the difference is important.
+Different languages have treated the distinction between the abstraction and the implementation in different ways.
 \begin{itemize}
 \item
-Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies. Two
-primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views.
-\item
-The Simula class \cite{Simula87} is essentially a record type. Since the only operations on a
-record are member selection and assignment, which can not be overloaded, there is never any
-ambiguity as to whether the abstraction or the implementation view is being used. In {\CC}
-\cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be
-overloaded. A ``scope resolution'' operator can be used inside the class to specify whether the
-abstract or implementation version of the operation should be used.
-\item
-An Ada derived type definition \cite{ada} creates a new type from an old type, and also implicitly
-declares derived subprograms that correspond to the existing subprograms that use the old type as a
-parameter type or result type. The derived subprograms are clones of the existing subprograms with
-the old type replaced by the derived type. Literals and aggregates of the old type are also cloned.
+Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies.
+Two primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views.
+\item
+The Simula class \cite{Simula87} is essentially a record type.
+Since the only operations on a record are member selection and assignment, which can not be overloaded, there is never any ambiguity as to whether the abstraction or the implementation view is being used.
+In {\CC}
+\cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be overloaded.
+A ``scope resolution'' operator can be used inside the class to specify whether the abstract or implementation version of the operation should be used.
+\item
+An Ada derived type definition \cite{ada} creates a new type from an old type, and also implicitly declares derived subprograms that correspond to the existing subprograms that use the old type as a parameter type or result type.
+The derived subprograms are clones of the existing subprograms with the old type replaced by the derived type.
+Literals and aggregates of the old type are also cloned.
 In other words, the abstract view provides exactly the same operations as the implementation view.
 This allows the abstract view to be used in all cases.
 
-The derived subprograms can be replaced by programmer-specified subprograms. This is an exception
-to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope. In this
-case, explicit conversions between the derived type and the old type can be used.
+The derived subprograms can be replaced by programmer-specified subprograms.
+This is an exception to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope.
+In this case, explicit conversions between the derived type and the old type can be used.
 \end{itemize}
-\CFA's rules are like Clu's, except that implicit conversions and
-conversion costs allow it to do away with most uses of \lstinline$up$ and \lstinline$down$. 
+\CFA's rules are like Clu's, except that implicit conversions and conversion costs allow it to do away with most uses of \lstinline$up$ and \lstinline$down$. 
 \end{rationale}
 
@@ -4070,54 +3395,35 @@
 A declaration\index{type declaration} of a type identifier \lstinline$T$ with type-class
 \lstinline$type$ implicitly declares a \define{default assignment} function
-\lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the
-identifier \lstinline$T$.
-\begin{rationale}
-Assignment is central to C's imperative programming style, and every existing C object type has
-assignment defined for it ( except for array types, which are treated as pointer types for purposes
-of assignment). Without this rule, nearly every inferred type parameter would need an accompanying
-assignment assertion parameter. If a type parameter should not have an assignment operation,
-\lstinline$dtype$ should be used. If a type should not have assignment defined, the user can define
-an assignment function that causes a run-time error, or provide an external declaration but no
-definition and thus cause a link-time error.
-\end{rationale}
-
-A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation
-type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment
-function. A definition\index{type definition} of a type identifier \lstinline$T$ with implementation
-type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and
-\define{default object}s as declared by the assertion declarations. The default objects and
-functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. Their
-values are determined as follows:
+\lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$.
+\begin{rationale}
+Assignment is central to C's imperative programming style, and every existing C object type has assignment defined for it ( except for array types, which are treated as pointer types for purposes of assignment).
+Without this rule, nearly every inferred type parameter would need an accompanying assignment assertion parameter.
+If a type parameter should not have an assignment operation,
+\lstinline$dtype$ should be used.
+If a type should not have assignment defined, the user can define an assignment function that causes a run-time error, or provide an external declaration but no definition and thus cause a link-time error.
+\end{rationale}
+
+A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment function.
+A definition\index{type definition} of a type identifier \lstinline$T$ with implementation type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and
+\define{default object}s as declared by the assertion declarations.
+The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$.
+Their values are determined as follows:
 \begin{itemize}
 \item
-If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name
-as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced
-by \lstinline$T$ is compatible with the type of the default object, then the default object is
-initialized with that object. Otherwise the scope of the declaration of \lstinline$T$ must contain
-a definition of the default object.
+If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced by \lstinline$T$ is compatible with the type of the default object, then the default object is initialized with that object.
+Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default object.
 
 \item 
-If at the definition of \lstinline$T$ there is visible a declaration of a function with the same
-name as the default function, and if the type of that function with all occurrence of \lstinline$I$
-replaced by \lstinline$T$ is compatible with the type of the default function, then the default
-function calls that function after converting its arguments and returns the converted result.
-
-Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that
-at the definition of \lstinline$T$ there is visible a declaration of a function with the same name
-as the default function, and the type of that function with all occurrences of the anonymous
-member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the
-default function, then the default function calls that function after converting its arguments and
-returns the result.
-
-Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default
-function.
+If at the definition of \lstinline$T$ there is visible a declaration of a function with the same name as the default function, and if the type of that function with all occurrence of \lstinline$I$ replaced by \lstinline$T$ is compatible with the type of the default function, then the default function calls that function after converting its arguments and returns the converted result.
+
+Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that at the definition of \lstinline$T$ there is visible a declaration of a function with the same name as the default function, and the type of that function with all occurrences of the anonymous member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the default function, then the default function calls that function after converting its arguments and returns the result.
+
+Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default function.
 \end{itemize}
 \begin{rationale}
-Note that a pointer to a default function will not compare as equal to a pointer to the inherited
-function.
-\end{rationale}
-
-A function or object with the same type and name as a default function or object that is declared
-within the scope of the definition of \lstinline$T$ replaces the default function or object.
+Note that a pointer to a default function will not compare as equal to a pointer to the inherited function.
+\end{rationale}
+
+A function or object with the same type and name as a default function or object that is declared within the scope of the definition of \lstinline$T$ replaces the default function or object.
 
 \examples
@@ -4125,13 +3431,12 @@
 context s( type T ) {
 	T a, b;
-}
-struct impl { int left, right; } a = { 0, 0 };
+} struct impl { int left, right; } a = { 0, 0 };
 type Pair | s( Pair ) = struct impl;
 Pair b = { 1, 1 };
 \end{lstlisting}
 The definition of \lstinline$Pair$ implicitly defines two objects \lstinline$a$ and \lstinline$b$.
-\lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$. The definition of
-\lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value
-from.
+\lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$.
+The definition of
+\lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value from.
 \begin{lstlisting}
 context ss( type T ) {
@@ -4152,11 +3457,9 @@
 void munge( Doodad * );
 \end{lstlisting}
-The assignment function inherits \lstinline$struct doodad$'s assignment function because the types
-match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout.
+The assignment function inherits \lstinline$struct doodad$'s assignment function because the types match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout.
 \lstinline$munge()$ inherits \lstinline$Whatsit$'s \lstinline$munge()$ because the types match when
-\lstinline$Whatsit$ is replaced by \lstinline$Doodad$ in the parameter list. \lstinline$clone()$
-does \emph{not} inherit \lstinline$Whatsit$'s \lstinline$clone()$: replacement in the parameter
-list yields ``\lstinline$Whatsit clone( Doodad )$'', which is not compatible with
-\lstinline$Doodad$'s \lstinline$clone()$'s type. Hence the definition of
+\lstinline$Whatsit$ is replaced by \lstinline$Doodad$ in the parameter list. \lstinline$clone()$ does \emph{not} inherit \lstinline$Whatsit$'s \lstinline$clone()$: replacement in the parameter list yields ``\lstinline$Whatsit clone( Doodad )$'', which is not compatible with
+\lstinline$Doodad$'s \lstinline$clone()$'s type.
+Hence the definition of
 ``\lstinline$Doodad clone( Doodad )$'' is necessary.
 
@@ -4173,11 +3476,11 @@
 
 \begin{rationale}
-The \emph{class} construct of object-oriented programming languages performs three independent
-functions. It \emph{encapsulates} a data structure; it defines a \emph{subtype} relationship, whereby
-instances of one class may be used in contexts that require instances of another; and it allows one
-class to \emph{inherit} the implementation of another.
-
-In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided
-by specifications and assertions. Inheritance is provided by default functions and objects.
+The \emph{class} construct of object-oriented programming languages performs three independent functions.
+It \emph{encapsulates} a data structure;
+it defines a \emph{subtype} relationship, whereby instances of one class may be used in contexts that require instances of another;
+and it allows one class to \emph{inherit} the implementation of another.
+
+In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided by specifications and assertions.
+Inheritance is provided by default functions and objects.
 \end{rationale}
 
@@ -4190,7 +3493,7 @@
 \end{syntax}
 
-Many statements contain expressions, which may have more than one interpretation. The following
-sections describe how the \CFA translator selects an interpretation. In all cases the result of the
-selection shall be a single unambiguous \Index{interpretation}.
+Many statements contain expressions, which may have more than one interpretation.
+The following sections describe how the \CFA translator selects an interpretation.
+In all cases the result of the selection shall be a single unambiguous \Index{interpretation}.
 
 
@@ -4239,6 +3542,5 @@
 switch ( E ) ...
 choose ( E ) ...
-\end{lstlisting}
-may have more than one interpretation, but it shall have only one interpretation with an integral type.
+\end{lstlisting} may have more than one interpretation, but it shall have only one interpretation with an integral type.
 An \Index{integer promotion} is performed on the expression if necessary.
 The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type.
@@ -4284,12 +3586,10 @@
 while ( E ) ...
 do ... while ( E );
-\end{lstlisting}
-is treated as ``\lstinline$( int )((E)!=0)$''.
+\end{lstlisting} is treated as ``\lstinline$( int )((E)!=0)$''.
 
 The statement 
 \begin{lstlisting}
 for ( a; b; c ) @\ldots@
-\end{lstlisting}
-is treated as
+\end{lstlisting} is treated as
 \begin{lstlisting}
 for ( ( void )( a ); ( int )(( b )!=0); ( void )( c ) ) ...
@@ -4413,9 +3713,8 @@
 
 The implementation shall define the macro names \lstinline$__LINE__$, \lstinline$__FILE__$,
-\lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard. It shall not define the
-macro name \lstinline$__STDC__$.
-
-In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the
-decimal constant 1.
+\lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard.
+It shall not define the macro name \lstinline$__STDC__$.
+
+In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the decimal constant 1.
 
 
@@ -4427,13 +3726,12 @@
 
 \section{C types}
-This section gives example specifications for some groups of types that are important in the C
-language, in terms of the predefined operations that can be applied to those types.
+This section gives example specifications for some groups of types that are important in the C language, in terms of the predefined operations that can be applied to those types.
 
 
 \subsection{Scalar, arithmetic, and integral types}
 
-The pointer, integral, and floating-point types are all \define{scalar types}. All of these types
-can be logically negated and compared. The assertion ``\lstinline$scalar( Complex )$'' should be read
-as ``type \lstinline$Complex$ is scalar''.
+The pointer, integral, and floating-point types are all \define{scalar types}.
+All of these types can be logically negated and compared.
+The assertion ``\lstinline$scalar( Complex )$'' should be read as ``type \lstinline$Complex$ is scalar''.
 \begin{lstlisting}
 context scalar( type T ) {@\impl{scalar}@
@@ -4443,8 +3741,7 @@
 \end{lstlisting}
 
-The integral and floating-point types are \define{arithmetic types}, which support the basic
-arithmetic operators. The use of an assertion in the \nonterm{spec-parameter-list} declares that,
-in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are
-available ). This is equivalent to inheritance of specifications.
+The integral and floating-point types are \define{arithmetic types}, which support the basic arithmetic operators.
+The use of an assertion in the \nonterm{spec-parameter-list} declares that, in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are available ).
+This is equivalent to inheritance of specifications.
 \begin{lstlisting}
 context arithmetic( type T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@
@@ -4477,6 +3774,7 @@
 
 Modifiable scalar lvalues are scalars and are modifiable lvalues, and assertions in the
-\nonterm{spec-parameter-list} reflect those relationships. This is equivalent to multiple
-inheritance of specifications. Scalars can also be incremented and decremented.
+\nonterm{spec-parameter-list} reflect those relationships.
+This is equivalent to multiple inheritance of specifications.
+Scalars can also be incremented and decremented.
 \begin{lstlisting}
 context m_l_scalar( type T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@
@@ -4486,6 +3784,6 @@
 \end{lstlisting}
 
-Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic. Note that this
-results in the ``inheritance'' of \lstinline$scalar$ along both paths.
+Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic.
+Note that this results in the ``inheritance'' of \lstinline$scalar$ along both paths.
 \begin{lstlisting}
 context m_l_arithmetic( type T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@
@@ -4493,5 +3791,4 @@
 	T ?+=?( T *, T ), ?-=?( T *, T );
 };
-
 context m_l_integral( type T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@
 	T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );@\use{m_l_arithmetic}@
@@ -4503,13 +3800,12 @@
 \subsection{Pointer and array types}
 
-Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a
-constant pointer to the first element of the array, and the subscript expression
+Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a constant pointer to the first element of the array, and the subscript expression
 ``\lstinline$a[i]$'' is equivalent to the dereferencing expression ``\lstinline$(*( a+( i )))$''.
 Technically, pointer arithmetic and pointer comparisons other than ``\lstinline$==$'' and
-``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not
-enforce those restrictions. Consequently, there is no need for a separate ``array type''
-specification.
-
-Pointer types are scalar types. Like other scalar types, they have ``\lstinline$+$'' and
+``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not enforce those restrictions.
+Consequently, there is no need for a separate ``array type'' specification.
+
+Pointer types are scalar types.
+Like other scalar types, they have ``\lstinline$+$'' and
 ``\lstinline$-$'' operators, but the types do not match the types of the operations in
 \lstinline$arithmetic$, so these operators cannot be consolidated in \lstinline$scalar$.
@@ -4519,5 +3815,4 @@
 	ptrdiff_t ?-?( P, P );
 };
-
 context m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@
 	P ?+=?( P *, long int ), ?-=?( P *, long int );
@@ -4527,23 +3822,21 @@
 \end{lstlisting}
 
-Specifications that define the dereference operator ( or subscript operator ) require two
-parameters, one for the pointer type and one for the pointed-at ( or element ) type. Different
-specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not
-included in types. The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as
+Specifications that define the dereference operator ( or subscript operator ) require two parameters, one for the pointer type and one for the pointed-at ( or element ) type.
+Different specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not included in types.
+The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as
 ``\lstinline$Safe_pointer$ acts like a pointer to \lstinline$int$''.
 \begin{lstlisting}
 context ptr_to( type P | pointer( P ), type T ) {@\impl{ptr_to}@@\use{pointer}@
-	lvalue T *?( P ); lvalue T ?[?]( P, long int );
+	lvalue T *?( P );
+	lvalue T ?[?]( P, long int );
 };
-
 context ptr_to_const( type P | pointer( P ), type T ) {@\impl{ptr_to_const}@
-	const lvalue T *?( P ); const lvalue T ?[?]( P, long int );@\use{pointer}@
+	const lvalue T *?( P );
+	const lvalue T ?[?]( P, long int );@\use{pointer}@
 };
-
 context ptr_to_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_volatile}@
-	volatile lvalue T *?( P ); volatile lvalue T ?[?]( P, long int );@\use{pointer}@
+	volatile lvalue T *?( P );
+	volatile lvalue T ?[?]( P, long int );@\use{pointer}@
 };
-\end{lstlisting}
-\begin{lstlisting}
 context ptr_to_const_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_const_volatile}@
 	const volatile lvalue T *?( P );@\use{pointer}@
@@ -4552,7 +3845,5 @@
 \end{lstlisting}
 
-Assignment to pointers is more complicated than is the case with other types, because the target's
-type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to
-a ``\lstinline$const T *$'', a ``\lstinline$volatile T *$'', and a ``\lstinline$const volatile T *$''.
+Assignment to pointers is more complicated than is the case with other types, because the target's type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to a ``\lstinline$const T *$'', a ``\lstinline$volatile T *$'', and a ``\lstinline$const volatile T *$''.
 Again, the pointed-at type is passed in, so that assertions can connect these specifications to the
 ``\lstinline$ptr_to$'' specifications.
@@ -4562,15 +3853,12 @@
 	T * ?=?( T **, P );
 };
-
 context m_l_ptr_to_const( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_const}@ type T | ptr_to_const( P, T )@\use{ptr_to_const}@) {
 	P ?=?( P *, const T * );
 	const T * ?=?( const T **, P );
 };
-
 context m_l_ptr_to_volatile( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_volatile}@ type T | ptr_to_volatile( P, T )) {@\use{ptr_to_volatile}@
 	P ?=?( P *, volatile T * );
 	volatile T * ?=?( volatile T **, P );
 };
-
 context m_l_ptr_to_const_volatile( type P | ptr_to_const_volatile( P ),@\use{ptr_to_const_volatile}@@\impl{m_l_ptr_to_const_volatile}@
 		type T | m_l_ptr_to_volatile( P, T ) | m_l_ptr_to_const( P )) {@\use{m_l_ptr_to_const}@@\use{m_l_ptr_to_volatile}@
@@ -4580,7 +3868,6 @@
 \end{lstlisting}
 
-Note the regular manner in which type qualifiers appear in those specifications. An alternative
-specification can make use of the fact that qualification of the pointed-at type is part of a
-pointer type to capture that regularity.
+Note the regular manner in which type qualifiers appear in those specifications.
+An alternative specification can make use of the fact that qualification of the pointed-at type is part of a pointer type to capture that regularity.
 \begin{lstlisting}
 context m_l_ptr_like( type MyP | m_l_pointer( MyP ),@\use{m_l_pointer}@@\impl{m_l_ptr_like}@ type CP | m_l_pointer( CP ) ) {
@@ -4590,36 +3877,30 @@
 \end{lstlisting}
 The assertion ``\lstinline$| m_l_ptr_like( Safe_ptr, const int * )$'' should be read as
-``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''. This specification has two
-defects, compared to the original four: there is no automatic assertion that dereferencing a
+``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''.
+This specification has two defects, compared to the original four: there is no automatic assertion that dereferencing a
 \lstinline$MyP$ produces an lvalue of the type that \lstinline$CP$ points at, and the
-``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed
-to \lstinline$CP$ really is a pointer type.
+``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed to \lstinline$CP$ really is a pointer type.
 
 
 \section{Relationships between operations}
 
-Different operators often have related meanings; for instance, in C, ``\lstinline$+$'',
+Different operators often have related meanings;
+for instance, in C, ``\lstinline$+$'',
 ``\lstinline$+=$'', and the two versions of ``\lstinline$++$'' perform variations of addition.
-Languages like {\CC} and Ada allow programmers to define operators for new types, but do not
-require that these relationships be preserved, or even that all of the operators be implemented.
-Completeness and consistency is left to the good taste and discretion of the programmer. It is
-possible to encourage these attributes by providing generic operator functions, or member functions
-of abstract classes, that are defined in terms of other, related operators.
-
-In \CFA, polymorphic functions provide the equivalent of these generic operators, and
-specifications explicitly define the minimal implementation that a programmer should provide. This
-section shows a few examples.
+Languages like {\CC} and Ada allow programmers to define operators for new types, but do not require that these relationships be preserved, or even that all of the operators be implemented.
+Completeness and consistency is left to the good taste and discretion of the programmer.
+It is possible to encourage these attributes by providing generic operator functions, or member functions of abstract classes, that are defined in terms of other, related operators.
+
+In \CFA, polymorphic functions provide the equivalent of these generic operators, and specifications explicitly define the minimal implementation that a programmer should provide.
+This section shows a few examples.
 
 
 \subsection{Relational and equality operators}
 
-The different comparison operators have obvious relationships, but there is no obvious subset of the
-operations to use in the implementation of the others. However, it is usually convenient to
-implement a single comparison function that returns a negative integer, 0, or a positive integer if
-its first argument is respectively less than, equal to, or greater than its second argument; the
-library function \lstinline$strcmp$ is an example.
-
-C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation,
-returns 1 if its operand compares equal to 0, and 0 otherwise.
+The different comparison operators have obvious relationships, but there is no obvious subset of the operations to use in the implementation of the others.
+However, it is usually convenient to implement a single comparison function that returns a negative integer, 0, or a positive integer if its first argument is respectively less than, equal to, or greater than its second argument;
+the library function \lstinline$strcmp$ is an example.
+
+C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation, returns 1 if its operand compares equal to 0, and 0 otherwise.
 \begin{lstlisting}
 context comparable( type T ) {
@@ -4627,10 +3908,8 @@
 	int compare( T, T );
 }
-
 forall( type T | comparable( T ) ) int ?<?( T l, T r ) {
 	return compare( l, r ) < 0;
 }
 // ... similarly for <=, ==, >=, >, and !=. 
-
 forall( type T | comparable( T ) ) int !?( T operand ) {
 	return !compare( operand, 0 );
@@ -4641,9 +3920,7 @@
 \subsection{Arithmetic and integer operations}
 
-A complete arithmetic type would provide the arithmetic operators and the corresponding assignment
-operators. Of these, the assignment operators are more likely to be implemented directly, because
-it is usually more efficient to alter the contents of an existing object than to create and return a
-new one. Similarly, a complete integral type would provide integral operations based on integral
-assignment operations.
+A complete arithmetic type would provide the arithmetic operators and the corresponding assignment operators.
+Of these, the assignment operators are more likely to be implemented directly, because it is usually more efficient to alter the contents of an existing object than to create and return a new one.
+Similarly, a complete integral type would provide integral operations based on integral assignment operations.
 \begin{lstlisting}
 context arith_base( type T ) {
@@ -4651,9 +3928,7 @@
 	T ?+=?( T *, T ), ?-=?( T *, T ), ?*=?( T *, T ), ?/=?( T *, T );
 }
-
 forall( type T | arith_base( T ) ) T ?+?( T l, T r ) {
 	return l += r;
 }
-
 forall( type T | arith_base( T ) ) T ?++( T * operand ) {
 	T temporary = *operand;
@@ -4661,15 +3936,12 @@
 	return temporary;
 }
-
 forall( type T | arith_base( T ) ) T ++?( T * operand ) {
 	return *operand += 1;
 }
 // ... similarly for -, --, *, and /. 
-
 context int_base( type T ) {
 	T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );
 	T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );
 }
-
 forall( type T | int_base( T ) ) T ?&?( T l, T r ) {
 	return l &= r;
@@ -4678,9 +3950,8 @@
 \end{lstlisting}
 
-Note that, although an arithmetic type would certainly provide comparison functions, and an integral
-type would provide arithmetic operations, there does not have to be any relationship among
-\lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$. Note also that these
-declarations provide guidance and assistance, but they do not define an absolutely minimal set of
-requirements. A truly minimal implementation of an arithmetic type might only provide
+Note that, although an arithmetic type would certainly provide comparison functions, and an integral type would provide arithmetic operations, there does not have to be any relationship among
+\lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$.
+Note also that these declarations provide guidance and assistance, but they do not define an absolutely minimal set of requirements.
+A truly minimal implementation of an arithmetic type might only provide
 \lstinline$0$, \lstinline$1$, and \lstinline$?-=?$, which would be used by polymorphic
 \lstinline$?+=?$, \lstinline$?*=?$, and \lstinline$?/=?$ functions.
@@ -4692,23 +3963,28 @@
 Review index entries.
 
-Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers. This gets
-into \lstinline$noalias$ territory. Qualifying anything (``\lstinline$short restrict rs$'') means
-pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers.
-
-Enumerated types. Constants are not ints. Overloading. Definition should be ``representable as an
-integer type'', not ``as an int''. C11 usual conversions freely convert to and from ordinary
-integer types via assignment, which works between any integer types. Does enum Color ?*?( enum
+Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers.
+This gets into \lstinline$noalias$ territory.
+Qualifying anything (``\lstinline$short restrict rs$'') means pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers.
+
+Enumerated types.
+Constants are not ints.
+Overloading.
+Definition should be ``representable as an integer type'', not ``as an int''.
+C11 usual conversions freely convert to and from ordinary integer types via assignment, which works between any integer types.
+Does enum Color ?*?( enum
 Color, enum Color ) really make sense? ?++ does, but it adds (int)1.
 
-Operators on {,signed,unsigned} char and other small types. ?<? harmless; ?*? questionable for
-chars. Generic selections make these choices visible. Safe conversion operators? Predefined
+Operators on {,signed,unsigned} char and other small types. ?<? harmless;
+?*? questionable for chars.
+Generic selections make these choices visible.
+Safe conversion operators? Predefined
 ``promotion'' function?
 
-\lstinline$register$ assignment might be handled as assignment to a temporary with copying back and
-forth, but copying must not be done by assignment.
+\lstinline$register$ assignment might be handled as assignment to a temporary with copying back and forth, but copying must not be done by assignment.
 
 Don't use ptrdiff\_t by name in the predefineds.
 
-Polymorphic objects. Polymorphic typedefs and type declarations.
+Polymorphic objects.
+Polymorphic typedefs and type declarations.
 
 
@@ -4719,7 +3995,8 @@
 \addcontentsline{toc}{chapter}{\indexname} % add index name to table of contents
 \begin{theindex}
-Italic page numbers give the location of the main entry for the referenced term. Plain page numbers
-denote uses of the indexed term. Entries for grammar non-terminals are italicized. A typewriter
-font is used for grammar terminals and program identifiers.
+Italic page numbers give the location of the main entry for the referenced term.
+Plain page numbers denote uses of the indexed term.
+Entries for grammar non-terminals are italicized.
+A typewriter font is used for grammar terminals and program identifiers.
 \indexspace
 \input{refrat.ind}
Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/CodeGen/CodeGenerator.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jan 25 21:22:00 2016
-// Update Count     : 242
+// Last Modified On : Wed Mar  2 17:32:16 2016
+// Update Count     : 243
 //
 
@@ -170,5 +170,5 @@
 	}
   
-	void CodeGenerator::visit( ContextDecl *aggregateDecl ) {}
+	void CodeGenerator::visit( TraitDecl *aggregateDecl ) {}
   
 	void CodeGenerator::visit( TypedefDecl *typeDecl ) {
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/CodeGen/CodeGenerator.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -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 Aug 12 14:27:14 2015
-// Update Count     : 27
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:32:24 2016
+// Update Count     : 28
 //
 
@@ -38,5 +38,5 @@
 		virtual void visit( UnionDecl *aggregateDecl );
 		virtual void visit( EnumDecl *aggregateDecl );
-		virtual void visit( ContextDecl *aggregateDecl );
+		virtual void visit( TraitDecl *aggregateDecl );
 		virtual void visit( TypedefDecl *typeDecl );
 		virtual void visit( TypeDecl *typeDecl );
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Makefile.am	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 08:51:46 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Thu Jan 28 16:50:26 2016
-## Update Count     : 55
+## Last Modified On : Fri Feb 26 17:19:16 2016
+## Update Count     : 57
 ###############################################################################
 
@@ -46,5 +46,5 @@
 driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL
 
-CXXFLAGS = -g	# remove default -O2 to allow better debugging
+CXXFLAGS = -g -std=c++11		# remove default -O2 to allow better debugging
 
 MAINTAINERCLEANFILES += ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Makefile.in	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -247,5 +247,5 @@
 CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = -g	# remove default -O2 to allow better debugging
+CXXFLAGS = -g -std=c++11		# remove default -O2 to allow better debugging
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
@@ -411,7 +411,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/Makefile
+	  $(AUTOMAKE) --foreign src/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/DeclarationNode.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 14 14:46:32 2015
-// Update Count     : 126
+// Last Modified On : Wed Mar  2 17:26:24 2016
+// Update Count     : 134
 //
 
@@ -34,8 +34,9 @@
 const char *DeclarationNode::storageName[] = { "extern", "static", "auto", "register", "inline", "fortran", "_Noreturn", "_Thread_local", "" };
 const char *DeclarationNode::qualifierName[] = { "const", "restrict", "volatile", "lvalue", "_Atomic" };
-const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary" };
+const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary",  };
 const char *DeclarationNode::modifierName[]  = { "signed", "unsigned", "short", "long" };
 const char *DeclarationNode::aggregateName[] = { "struct", "union", "context" };
 const char *DeclarationNode::typeClassName[] = { "type", "dtype", "ftype" };
+const char *DeclarationNode::builtinTypeName[] = { "__builtin_va_list" };
 
 UniqueName DeclarationNode::anonymous( "__anonymous" );
@@ -147,4 +148,11 @@
 	newnode->type = new TypeData( TypeData::Basic );
 	newnode->type->basic->typeSpec.push_back( bt );
+	return newnode;
+}
+
+DeclarationNode *DeclarationNode::newBuiltinType( BuiltinType bt ) {
+	DeclarationNode *newnode = new DeclarationNode;
+	newnode->type = new TypeData( TypeData::Builtin );
+	newnode->type->builtin->type = bt;
 	return newnode;
 }
@@ -215,5 +223,5 @@
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->name = assign_strptr( name );
-	// do something with the constant
+	newnode->enumeratorValue = constant;
 	return newnode;
 }
@@ -243,8 +251,8 @@
 }
 
-DeclarationNode *DeclarationNode::newContext( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {
+DeclarationNode *DeclarationNode::newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Aggregate );
-	newnode->type->aggregate->kind = Context;
+	newnode->type->aggregate->kind = Trait;
 	newnode->type->aggregate->params = params;
 	newnode->type->aggregate->fields = asserts;
@@ -253,9 +261,9 @@
 }
 
-DeclarationNode *DeclarationNode::newContextUse( std::string *name, ExpressionNode *params ) {
+DeclarationNode *DeclarationNode::newTraitUse( std::string *name, ExpressionNode *params ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::AggregateInst );
 	newnode->type->aggInst->aggregate = new TypeData( TypeData::Aggregate );
-	newnode->type->aggInst->aggregate->aggregate->kind = Context;
+	newnode->type->aggInst->aggregate->aggregate->kind = Trait;
 	newnode->type->aggInst->aggregate->aggregate->name = assign_strptr( name );
 	newnode->type->aggInst->params = params;
@@ -794,5 +802,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
+		cur = dynamic_cast<DeclarationNode *>( cur->get_link() );
 	} // while
 	if ( ! errors.isEmpty() ) {
@@ -881,6 +889,6 @@
 			  ret = new UnionInstType( type->buildQualifiers(), type->aggregate->name );
 			  break;
-			case DeclarationNode::Context:
-			  ret = new ContextInstType( type->buildQualifiers(), type->aggregate->name );
+			case DeclarationNode::Trait:
+			  ret = new TraitInstType( type->buildQualifiers(), type->aggregate->name );
 			  break;
 			default:
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/ParseNode.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Feb  1 13:32:32 2016
-// Update Count     : 184
+// Last Modified On : Wed Mar  2 17:26:35 2016
+// Update Count     : 190
 //
 
@@ -329,6 +329,7 @@
 	enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary };
 	enum Modifier  { Signed, Unsigned, Short, Long };
-	enum Aggregate { Struct, Union, Context };
+	enum Aggregate { Struct, Union, Trait };
 	enum TypeClass { Type, Dtype, Ftype };
+	enum BuiltinType { Valist };
 
 	static const char *storageName[];  
@@ -338,4 +339,5 @@
 	static const char *aggregateName[];
 	static const char *typeClassName[];
+	static const char *builtinTypeName[];
 
 	static DeclarationNode *newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle = false );
@@ -352,6 +354,6 @@
 	static DeclarationNode *newFromTypeGen( std::string *, ExpressionNode *params );
 	static DeclarationNode *newTypeParam( TypeClass, std::string *);
-	static DeclarationNode *newContext( std::string *name, DeclarationNode *params, DeclarationNode *asserts );
-	static DeclarationNode *newContextUse( std::string *name, ExpressionNode *params );
+	static DeclarationNode *newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts );
+	static DeclarationNode *newTraitUse( std::string *name, ExpressionNode *params );
 	static DeclarationNode *newTypeDecl( std::string *name, DeclarationNode *typeParams );
 	static DeclarationNode *newPointer( DeclarationNode *qualifiers );
@@ -363,4 +365,5 @@
 	static DeclarationNode *newAttr( std::string *, ExpressionNode *expr );
 	static DeclarationNode *newAttr( std::string *, DeclarationNode *type );
+	static DeclarationNode *newBuiltinType( BuiltinType );
 
 	DeclarationNode *addQualifiers( DeclarationNode *);
@@ -401,4 +404,5 @@
 	LinkageSpec::Type get_linkage() const { return linkage; }
 	DeclarationNode *extractAggregate() const;
+	ExpressionNode *get_enumeratorValue() const { return enumeratorValue; }
 
 	DeclarationNode();
@@ -413,4 +417,5 @@
 	std::list< std::string > attributes;
 	ExpressionNode *bitfieldWidth;
+	ExpressionNode *enumeratorValue;
 	InitializerNode *initializer;
 	bool hasEllipsis;
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/TypeData.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 14 14:57:23 2015
-// Update Count     : 32
+// Last Modified On : Wed Mar  2 17:26:45 2016
+// Update Count     : 49
 //
 
@@ -23,4 +23,5 @@
 #include "SynTree/Expression.h"
 #include "SynTree/Statement.h"
+#include "SynTree/Initializer.h"
 
 TypeData::TypeData( Kind k ) : kind( k ), base( 0 ), forall( 0 ) {
@@ -84,4 +85,7 @@
 		typeexpr->expr = 0;
 		break;
+	  case Builtin:
+		builtin = new Builtin_t;
+		break;
 	  case Attr:
 		attr = new Attr_t;
@@ -149,4 +153,7 @@
 		delete typeexpr->expr;
 		delete typeexpr;
+		break;
+	  case Builtin:
+		delete builtin;
 		break;
 	  case Attr:
@@ -221,4 +228,7 @@
 		newtype->typeexpr->expr = maybeClone( typeexpr->expr );
 		break;
+	  case Builtin:
+		newtype->builtin->type = builtin->type;
+		break;
 	  case Attr:
 		newtype->attr->expr = maybeClone( attr->expr );
@@ -396,4 +406,7 @@
 			attr->type->print( os, indent + 2 );
 		} // if
+		break;
+	  case Builtin:
+		os << "gcc builtin type";
 		break;
 	  default:
@@ -506,4 +519,6 @@
 	  case Typeof:
 		return buildTypeof();
+	  case Builtin:
+		return new VarArgsType( buildQualifiers() );
 	  case Attr:
 		return buildAttr();
@@ -805,6 +820,6 @@
 		buildForall( aggregate->params, at->get_parameters() );
 		break;
-	  case DeclarationNode::Context:
-		at = new ContextDecl( aggregate->name );
+	  case DeclarationNode::Trait:
+		at = new TraitDecl( aggregate->name );
 		buildList( aggregate->params, at->get_parameters() );
 		break;
@@ -845,6 +860,6 @@
 			ret = new UnionInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
 			break;
-		  case DeclarationNode::Context:
-			ret = new ContextInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
+		  case DeclarationNode::Trait:
+			ret = new TraitInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
 			break;
 		  default:
@@ -883,4 +898,11 @@
 	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() ) ) );
+		} // if
+	} // for
 	return ret;
 }
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/TypeData.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jan 14 23:31:15 2016
-// Update Count     : 17
+// Last Modified On : Fri Feb 26 14:21:38 2016
+// Update Count     : 19
 //
 
@@ -24,5 +24,5 @@
 struct TypeData {
 	enum Kind { Unknown, Basic, Pointer, Array, Function, Aggregate, AggregateInst,
-				Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Attr } kind;
+				Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Builtin, Attr } kind;
 
 	TypeData( Kind k = Unknown );
@@ -98,4 +98,8 @@
 	};
 
+	struct Builtin_t {
+		DeclarationNode::BuiltinType type;
+	};
+
 	struct Attr_t {
 		std::string name;
@@ -116,4 +120,5 @@
 		Typeof_t * typeexpr;
 		Attr_t * attr;
+		Builtin_t * builtin;
 	};
 
Index: src/Parser/TypedefTable.cc
===================================================================
--- src/Parser/TypedefTable.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/TypedefTable.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:20:13 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun 26 07:30:16 2015
-// Update Count     : 19
+// Last Modified On : Wed Mar  2 17:25:55 2016
+// Update Count     : 20
 //
 
@@ -61,7 +61,7 @@
 
 void TypedefTable::addToScope( const std::string &identifier, kind_t kind, int scope ) {
-	if ( currentContext != "" && scope == contextScope ) {
+	if ( currentTrait != "" && scope == contextScope ) {
 		DeferredEntry entry = { identifier, kind };
-		contexts[currentContext].push_back( entry );
+		contexts[currentTrait].push_back( entry );
 	} else {
 		debugPrint( "Adding " << identifier << " as kind " << kind << " scope " << scope << " from scope " << currentScope << endl );
@@ -112,5 +112,5 @@
 }
 
-void TypedefTable::openContext( const std::string &contextName ) {
+void TypedefTable::openTrait( const std::string &contextName ) {
 	map< string, deferListType >::iterator i = contexts.find( contextName );
 	if ( i != contexts.end() ) {
@@ -150,11 +150,11 @@
 }
 
-void TypedefTable::enterContext( const std::string &contextName ) {
-	currentContext = contextName;
+void TypedefTable::enterTrait( const std::string &contextName ) {
+	currentTrait = contextName;
 	contextScope = currentScope;
 }
 
-void TypedefTable::leaveContext() {
-	currentContext = "";
+void TypedefTable::leaveTrait() {
+	currentTrait = "";
 }
 
Index: src/Parser/TypedefTable.h
===================================================================
--- src/Parser/TypedefTable.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/TypedefTable.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:24:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun 25 22:52:15 2015
-// Update Count     : 11
+// Last Modified On : Wed Mar  2 17:26:54 2016
+// Update Count     : 12
 //
 
@@ -40,5 +40,5 @@
 
 	int currentScope;
-	std::string currentContext;
+	std::string currentTrait;
 	int contextScope;
 	
@@ -79,10 +79,10 @@
 	
 	// dump the definitions from a pre-defined context into the current scope
-	void openContext( const std::string &contextName );
+	void openTrait( const std::string &contextName );
 	
 	void enterScope();
 	void leaveScope();
-	void enterContext( const std::string &contextName );
-	void leaveContext();
+	void enterTrait( const std::string &contextName );
+	void leaveTrait();
 
 	void print() const;
Index: src/Parser/lex.cc
===================================================================
--- src/Parser/lex.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/lex.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -382,6 +382,6 @@
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 179
-#define YY_END_OF_BUFFER 180
+#define YY_NUM_RULES 180
+#define YY_END_OF_BUFFER 181
 /* This struct is not used in this scanner,
    but its presence is necessary. */
@@ -391,102 +391,103 @@
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[876] =
+static yyconst flex_int16_t yy_accept[888] =
     {   0,
-        0,    0,    0,    0,    0,    0,  114,  114,  117,  117,
-      180,  178,    7,    9,    8,  137,  116,  101,  142,  145,
-      113,  124,  125,  140,  138,  128,  139,  131,  141,  106,
-      107,  108,  129,  130,  147,  149,  148,  150,  178,  101,
-      122,  178,  123,  143,  101,  103,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  126,  146,  127,  144,    7,  178,    4,    4,  179,
-      104,  179,  105,  114,  115,  121,  117,  118,    7,    9,
-        0,    8,  154,  173,  101,    0,  166,  136,  159,  167,
-      164,  151,  162,  152,  163,  161,    0,  111,    3,    0,
-
-      165,  111,  109,    0,    0,  109,  109,    0,    0,  109,
-      108,  108,  108,    0,  108,  134,  135,  133,  155,  157,
-      153,  158,  156,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  102,  172,
-        0,  116,  113,  101,    0,    0,  169,    0,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,   39,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,   57,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  168,  160,    7,    0,    0,    0,    2,    0,
-
-        5,  104,    0,    0,    0,  114,    0,  120,  119,  119,
-        0,    0,    0,  117,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  132,
-      111,  111,    0,  111,  111,  111,    0,    6,  111,  109,
-        0,    0,    0,  111,    0,  109,  109,  109,  109,    0,
-      110,    0,    0,  108,  108,  108,  108,    0,  170,  171,
-        0,  176,  174,    0,    0,    0,  102,    0,    0,    0,
-        0,    0,    0,    0,    0,  101,   17,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,   14,  101,  101,  101,  101,
-
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,   51,  101,  101,  101,   64,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,   88,  101,  101,  101,  101,  101,  101,  101,    0,
-        0,    0,    0,    0,    0,    0,    0,  119,    0,    0,
-        0,    0,    0,  119,    0,    0,  177,    0,    0,    0,
-        0,    0,    0,    0,  111,    0,  111,    0,  111,    0,
-        0,  111,  111,  109,  109,    0,    0,  110,  110,    0,
-      110,    0,  110,  108,  108,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  175,  101,  101,  101,  101,
-
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,   21,
-      101,   24,  101,   27,  101,  101,  101,  101,  101,  101,
-      101,   42,  101,   44,  101,  101,  101,  101,  101,  101,
-      101,   56,  101,   67,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,   89,  101,  101,   96,  101,
-      101,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  119,    0,    0,    0,    0,
-        0,  111,  111,    0,    0,    0,    0,    0,  110,  110,
-        0,  112,    0,  110,  110,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,  101,  101,
-       22,  101,  101,  101,  101,  101,  101,  101,   15,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,   23,   25,  101,   32,  101,  101,  101,
-      101,  101,   41,  101,  101,  101,  101,   49,  101,  101,
-       54,  101,  101,  101,  101,  101,   76,  101,  101,  101,
-      101,  101,   86,  101,  101,   94,  101,  101,  100,    0,
+        0,    0,    0,    0,    0,    0,  115,  115,  118,  118,
+      181,  179,    7,    9,    8,  138,  117,  102,  143,  146,
+      114,  125,  126,  141,  139,  129,  140,  132,  142,  107,
+      108,  109,  130,  131,  148,  150,  149,  151,  179,  102,
+      123,  179,  124,  144,  102,  104,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  127,  147,  128,  145,    7,  179,    4,    4,
+      180,  105,  180,  106,  115,  116,  122,  118,  119,    7,
+        9,    0,    8,  155,  174,  102,    0,  167,  137,  160,
+      168,  165,  152,  163,  153,  164,  162,    0,  112,    3,
+
+        0,  166,  112,  110,    0,    0,  110,  110,    0,    0,
+      110,  109,  109,  109,    0,  109,  135,  136,  134,  156,
+      158,  154,  159,  157,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  103,
+      173,    0,  117,  114,  102,    0,    0,  170,    0,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,   38,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,   56,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  169,  161,    7,    0,    0,    0,
+
+        2,    0,    5,  105,    0,    0,    0,  115,    0,  121,
+      120,  120,    0,    0,    0,  118,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  112,    0,
-        0,  110,  112,  112,  112,  112,  112,  110,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,  101,    0,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,   59,  101,  101,  101,
-      101,  101,  101,  101,  101,   28,  101,  101,  101,  101,
-       40,   43,   46,  101,  101,   52,  101,   61,   68,  101,
-      101,   75,   77,   80,   81,   83,   84,  101,  101,   91,
-      101,  101,    0,    1,    0,    0,    0,    0,    0,    0,
-      104,    0,    0,    0,  119,    0,    0,    0,    0,  112,
-      112,  112,  112,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  101,  101,   18,  101,  101,  101,  101,  101,
-
-      101,  101,   16,  101,  101,  101,   33,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,   35,  101,
-       37,   38,  101,   48,   53,  101,  101,  101,   90,  101,
-      101,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   10,   11,   29,   55,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,   60,
-       62,   65,  101,  101,   78,   92,  101,  101,   36,   47,
-       71,   72,  101,   95,   97,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  101,   69,  101,
-      101,   12,  101,  101,   30,   34,  101,  101,  101,   66,
-
-      101,  101,  101,  101,  101,  101,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   58,
-      101,  101,  101,  101,  101,  101,  101,   50,   63,   73,
-       79,   93,   98,  101,  101,    0,    0,    0,    0,    0,
-        0,    0,    0,  101,  101,   13,   19,  101,   31,  101,
-      101,  101,   26,   87,    0,    0,  101,  101,  101,  101,
-      101,   74,   99,  101,   85,   20,  101,   45,   82,  101,
-      101,  101,  101,   70,    0
+        0,  133,  112,  112,    0,  112,  112,  112,    0,    6,
+      112,  110,    0,    0,    0,  112,    0,  110,  110,  110,
+      110,    0,  111,    0,    0,  109,  109,  109,  109,    0,
+      171,  172,    0,  177,  175,    0,    0,    0,  103,    0,
+        0,    0,    0,    0,    0,    0,    0,  102,   17,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,   14,  102,  102,
+
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,   50,  102,  102,  102,
+       63,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,   89,  102,  102,  102,  102,
+      102,  102,  102,    0,    0,    0,    0,    0,    0,    0,
+        0,  120,    0,    0,    0,    0,    0,  120,    0,    0,
+      178,    0,    0,    0,    0,    0,    0,    0,  112,    0,
+      112,    0,  112,    0,    0,  112,  112,  110,  110,    0,
+        0,  111,  111,    0,  111,    0,  111,  109,  109,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  176,
+
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,   21,  102,   24,  102,   27,  102,  102,
+      102,  102,  102,  102,  102,   41,  102,   43,  102,  102,
+      102,  102,  102,  102,  102,   55,  102,   66,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,   97,  102,  102,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  120,    0,    0,    0,    0,    0,  112,  112,    0,
+        0,    0,    0,    0,  111,  111,    0,  113,    0,  111,
+
+      111,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  102,  102,   22,  102,  102,  102,
+      102,  102,  102,  102,   15,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,   23,
+       25,  102,   32,  102,  102,  102,  102,   40,  102,  102,
+      102,  102,   48,  102,  102,   53,  102,  102,   70,  102,
+      102,  102,   76,  102,  102,  102,  102,  102,   86,   88,
+      102,  102,   94,  102,  102,  101,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  113,    0,    0,  111,  113,
+
+      113,  113,  113,  113,  111,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  102,    0,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,   58,  102,  102,  102,  102,  102,  102,
+      102,  102,   28,  102,  102,  102,   39,   42,   45,  102,
+      102,   51,  102,   60,   67,  102,  102,   75,   77,   80,
+       81,   83,   84,  102,  102,   91,  102,  102,    0,    1,
+        0,    0,    0,    0,    0,    0,  105,    0,    0,    0,
+      120,    0,    0,    0,    0,  113,  113,  113,  113,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
+
+       18,  102,  102,  102,  102,  102,  102,  102,   16,  102,
+      102,  102,   33,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,   36,   37,  102,   47,   52,
+      102,  102,  102,   90,  102,  102,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
+       11,   29,   54,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,   59,   61,   64,  102,  102,   78,
+       92,  102,  102,   35,   46,   71,   72,  102,   95,   98,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  102,   68,  102,  102,   12,  102,  102,   30,
+
+       34,  102,  102,  102,   65,  102,  102,  102,  102,  102,
+      102,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   57,  102,  102,  102,  102,  102,
+      102,  102,   49,   62,   73,   79,   93,   99,  102,  102,
+        0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
+       13,   19,  102,  102,   31,  102,  102,  102,   26,   87,
+        0,    0,  102,  102,  102,  102,  102,  102,   74,  100,
+      102,   85,   20,  102,  102,   44,   82,  102,  102,  102,
+      102,  102,  102,  102,   96,   69,    0
     } ;
 
@@ -536,243 +537,247 @@
     } ;
 
-static yyconst flex_int16_t yy_base[1050] =
+static yyconst flex_int16_t yy_base[1062] =
     {   0,
-        0,   83, 2238, 2237,   93,    0,  175,  176,  177,  178,
-     2252, 2782,  189, 2782,  195,   54, 2782, 2197,   59,  171,
-     2782, 2782, 2782,   55,  186, 2782,  189,  187,  202,  214,
-      272,    0, 2213, 2782,  214, 2213,  150,  340,  153,  222,
-     2782,  157, 2782,  215,  224, 2782,  207,  181,  221,  249,
-      235,  289,  155,  255,  218,  206,  266,  256,  323,  259,
-      192, 2782,  223, 2782, 2210,  377,  342, 2782, 2220, 2782,
-     2187,  234, 2782,    0, 2782,  421,    0, 2782,  393, 2782,
-      399,  405, 2782,  492, 2184,  241, 2782, 2782, 2782, 2782,
-     2782, 2201, 2782, 2200, 2782, 2782, 2211,  552, 2782, 2226,
-
-     2782,  413,  393,  437,  493,  377,  318,  195,  430,  382,
-        0,  384,  321,  196,  427, 2782, 2782, 2782, 2194, 2782,
-     2782, 2782, 2193, 2192,  252,  302, 2206,  342,  435,  422,
-      381,  455,  400,  494, 2185,  440, 2133,  469, 2163, 2782,
-      276, 2782, 2782,  520, 2159, 2157, 2782, 2128,  414,  463,
-      470,  325,  254,  479,  432,  274,  480,  423,  483,  498,
-      492,  503,  499,  509,  341,  455,  484,  377,  510,  512,
-      517,  518,  529,  530,  531,  537, 2154,  541,  536,  544,
-      557,  546,  566,  569,  538,  552,  548,  554,  588,  571,
-      570,  580, 2782, 2782,  645,  651, 2202,  657, 2782,  663,
-
-     2782, 2152,  593, 2147, 2144,    0,  631, 2782, 2782,  669,
-     2141, 2140, 2139,    0, 2160,  629,  635,  639,  678,  677,
-      666,  670,  671,  674, 2138,  681,  682, 2115, 2114, 2782,
-        0,  597,  702,  678,  676, 2111, 2160, 2782,  693,    0,
-      710,  723,  743,  762,  788,  707, 2782, 2119, 2094,    0,
-      776, 2138,  768,  723, 2782, 2113, 2086,  809, 2782, 2782,
-     2118, 2782, 2782,  705,  710, 2098, 2097,  724, 2091, 2088,
-     2087,    0, 2086,    0, 2056,  709,  682,  707,  712,  710,
-      724,  647,  750,  671,  786,  751,  748,  731,  778,  787,
-      789,  788,  792,  790,  758, 2084,  796,  806,  800,  813,
-
-      798,  810,  802,  816,  822,  819,  815,  826,  830,  829,
-      831,  832,  833,  837,  839,  841,  846,  843, 2081,  848,
-      850,  849,  851,  852,  854,  853,  857,  855,  858,  863,
-      868, 2080,  867,  912,  871,  878,  872,  879,  882,  937,
-      939, 2076, 2074, 2071,    0, 2070,    0,  927,  931, 2069,
-        0, 2067,    0, 2064,    0, 2084, 2782,  913,  926, 2064,
-     2060,    0, 2057,    0, 2782,  942,  960,  953, 2782,  966,
-      981, 1005, 2053, 2782, 2782,  955,  968,  995,  968, 1028,
-      892, 1014,  970, 2782, 2782, 2049, 2047, 2045,    0, 2042,
-        0, 2040,    0, 2038,    0, 2782,  909,  944,  982,  943,
-
-     1006,  911, 1012,  923, 1013, 1019, 1009, 1016, 1023, 1024,
-     1020,  972, 1030, 1028,  989, 1026, 1034, 1027, 1039, 2038,
-     1044, 2035, 1048, 2034, 1049, 1051, 1052, 1053, 1056, 1057,
-     1055, 2033, 1059, 2031,  946, 1063, 1066, 1067, 1068, 1071,
-     1069, 2028, 1075, 2025, 1077, 1080, 1079, 1082, 1084, 1086,
-     1087, 1090, 1097, 1107, 1088, 1108, 1093, 1098, 2024, 1096,
-     1111, 1164, 2020,    0, 2018,    0, 2015,    0, 2012,    0,
-     1151, 2011,    0, 2010,    0, 2008, 2005, 2002,    0, 2001,
-        0, 1156, 2000, 1162, 1148, 1182, 1149, 1126, 1147, 2782,
-     1201, 1215, 1241, 2010, 1983, 1992, 1991,    0, 1990,    0,
-
-     1988,    0, 1985,    0, 1982,    0, 1981,    0, 1161, 1149,
-     1983, 1179, 1140, 1180, 1117, 1182, 1192, 1199, 1181, 1163,
-     1196, 1200, 1201, 1220, 1198, 1221, 1224,  604, 1226, 1227,
-     1231, 1233, 1234, 1981, 1244, 1236, 1978, 1240, 1241, 1246,
-     1247, 1243, 1975, 1250, 1251, 1253, 1254, 1974, 1255, 1267,
-     1973, 1264, 1271, 1256, 1263, 1257, 1971, 1275, 1277, 1279,
-     1260, 1281, 1290, 1285, 1288, 1968, 1289, 1291, 1967, 2015,
-     1961,    0, 1958,    0, 1957,    0, 1956,    0, 1954,    0,
-     1921,    0, 1919,    0, 1918,    0, 1336, 1342, 1369, 1353,
-     1915, 2782, 1359, 1307, 1359, 1309, 1912, 2782, 1911,    0,
-
-     1910,    0, 1908,    0, 1905,    0,    0,    0, 1905,    0,
-     1347, 1295, 1292, 1323, 1337, 1338, 1296, 1349, 1351, 1355,
-     1353, 1348, 1363, 1364, 1371, 1373, 1380, 1375, 1403, 1381,
-     1385, 1389, 1094, 1387, 1390, 1904, 1391, 1393, 1397, 1401,
-     1903, 1901, 1898, 1394, 1400, 1897, 1404, 1896, 1894, 1402,
-     1408, 1891, 1890, 1889, 1887, 1884, 1880, 1417, 1412, 1876,
-     1420, 1418, 1921, 2782, 1853,    0, 1852,    0,    0,    0,
-     1854,    0,    0,    0, 2782,    0,    0,    0,    0, 1463,
-     1849, 2782, 2782, 1469, 1846,    0, 1845,    0,    0,    0,
-        0, 1844, 1407, 1446, 1845, 1406, 1423, 1300, 1431, 1449,
-
-     1455, 1447, 1842, 1457, 1448, 1459, 1464, 1460, 1490, 1474,
-     1470, 1494, 1480, 1475, 1484, 1485, 1486, 1482, 1841, 1487,
-     1840, 1838, 1489, 1835, 1834, 1491, 1493, 1497, 1833, 1498,
-     1500,    0,    0,    0, 1828, 1825, 1824, 1548,    0, 1823,
-     1821, 1818, 1817, 1816, 1817, 1814, 1813, 1812, 1505, 1510,
-     1502, 1501, 1504, 1508, 1513, 1517, 1526, 1528, 1559, 1810,
-     1533, 1807, 1534, 1535, 1544, 1545, 1538, 1539, 1806, 1805,
-     1803, 1800, 1540, 1799, 1798, 1793, 1786, 1784, 1783, 1780,
-     1779, 1778, 1776, 1759, 1750, 1749, 1746, 1546, 1742, 1549,
-     1550, 1552, 1554, 1557, 1558, 1739, 1556, 1589, 1566, 1732,
-
-     1565, 1572, 1577, 1579, 1567, 1578, 1727, 1726, 1705, 1704,
-     1703, 1696, 1694, 1693, 1650, 1649, 1647, 1645, 1644, 1646,
-     1571, 1584, 1582, 1581, 1586, 1593, 1595, 1645, 1644, 1597,
-     1642, 1641, 1598, 1599, 1602, 1636, 1635, 1633, 1422, 1421,
-     1205, 1201,  946, 1605, 1610,  910, 1603, 1607,  768, 1613,
-     1618, 1619,  723,  605,  503,  370, 1609, 1620, 1623, 1624,
-     1625,  338,  337, 1627,  290,  251, 1630,  200,  196, 1631,
-     1632, 1637, 1633,  136, 2782, 1707, 1720, 1733, 1743, 1753,
-     1766, 1776, 1789, 1802, 1815, 1823, 1833, 1840, 1847, 1854,
-     1861, 1868, 1875, 1882, 1889, 1896, 1909, 1916, 1920, 1928,
-
-     1931, 1938, 1945, 1952, 1955, 1962, 1968, 1981, 1994, 2001,
-     2008, 2015, 2022, 2025, 2032, 2035, 2042, 2045, 2052, 2055,
-     2062, 2065, 2072, 2075, 2082, 2085, 2092, 2100, 2107, 2114,
-     2121, 2128, 2131, 2138, 2141, 2148, 2151, 2158, 2164, 2177,
-     2184, 2191, 2194, 2201, 2204, 2211, 2214, 2221, 2224, 2231,
-     2234, 2241, 2244, 2251, 2258, 2261, 2268, 2271, 2278, 2285,
-     2292, 2295, 2302, 2305, 2312, 2315, 2322, 2325, 2332, 2335,
-     2342, 2348, 2361, 2368, 2375, 2378, 2385, 2388, 2395, 2398,
-     2405, 2408, 2415, 2418, 2425, 2428, 2435, 2438, 2445, 2448,
-     2455, 2462, 2465, 2472, 2475, 2482, 2485, 2492, 2495, 2498,
-
-     2504, 2511, 2520, 2527, 2534, 2537, 2544, 2547, 2550, 2556,
-     2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, 2591, 2594,
-     2601, 2604, 2607, 2610, 2613, 2623, 2630, 2633, 2636, 2639,
-     2646, 2653, 2660, 2663, 2670, 2677, 2684, 2691, 2698, 2705,
-     2712, 2719, 2726, 2733, 2740, 2747, 2754, 2761, 2768
+        0,   83, 2268, 2265,   93,    0,  175,  176,  177,  178,
+     2279, 2798,  189, 2798,  195,   54, 2798, 2226,   59,  171,
+     2798, 2798, 2798,   55,  186, 2798,  189,  187,  202,  214,
+      272,    0, 2244, 2798,  214, 2243,  150,  340,  153,  222,
+     2798,  157, 2798,  215,  224, 2798,  207,  181,  221,  249,
+      235,  289,  155,  255,  218,  231,  206,  266,  256,  323,
+      259,  192, 2798,  252, 2798, 2238,  377,  342, 2798, 2249,
+     2798, 2218,  241, 2798,    0, 2798,  421,    0, 2798,  393,
+     2798,  399,  405, 2798,  492, 2216,  276, 2798, 2798, 2798,
+     2798, 2798, 2231, 2798, 2228, 2798, 2798, 2240,  552, 2798,
+
+     2257, 2798,  413,  393,  437,  493,  377,  318,  195,  430,
+      382,    0,  384,  321,  196,  427, 2798, 2798, 2798, 2226,
+     2798, 2798, 2798, 2223, 2220,  304,  342, 2235,  381,  435,
+      422,  400,  455,  440,  494, 2216,  469, 2165,  497, 2193,
+     2798,  432, 2798, 2798,  521, 2187, 2186, 2798, 2159,  470,
+      414,  436,  325,  254,  463,  480,  486,  563,  274,  482,
+      484,  487,  495,  234,  489,  341,  488,  490,  377,  507,
+      497,  501,  503,  514,  515,  506,  529, 2186,  531,  537,
+      505,  518,  536,  534,  538,  559,  575,  571,  577,  574,
+      599,  590,  581,  592, 2798, 2798,  662,  668, 2232,  674,
+
+     2798,  680, 2798, 2180,  583, 2176, 2175,    0,  671, 2798,
+     2798,  686, 2173, 2170, 2167,    0, 2189,  568,  615,  618,
+      695,  694,  627,  654,  628,  683, 2186,  686,  687, 2163,
+     2160, 2798,    0,  680,  712,  703,  682, 2157, 2208, 2798,
+      711,    0,  702,  756,  762,  795,  774,  604, 2798, 2167,
+     2141,    0,  803, 2167,  780,  684, 2798, 2143, 2118,  804,
+     2798, 2798, 2148, 2798, 2798,  724,  728, 2126, 2126,  694,
+     2122, 2120, 2117,    0, 2114,    0, 2085,  679,  682,  696,
+      423,  722,  757,  703,  758,  741,  799,  764,  725,  789,
+      697,  774,  788,  792,  760,  784,  795, 2115,  809,  797,
+
+      816,  196,  804,  812,  817,  823,  829,  632,  831,  832,
+      836,  819,  837,  833,  840,  844,  847,  843,  853,  851,
+     2113,  854,  855,  856,  859,  857,  858,  860,  861,  867,
+      863,  866,  868,  873,  874, 2110,  877,  716,  882,  883,
+      884,  888,  894,  947,  944, 2104, 2103, 2102,    0, 2100,
+        0,  934,  939, 2097,    0, 2094,    0, 2093,    0, 2113,
+     2798,  934,  935, 2092, 2087,    0, 2086,    0, 2798,  947,
+      967,  958, 2798,  973,  988, 1012, 2085, 2798, 2798,  932,
+      962,  999,  975, 1033,  912, 1020,  956, 2798, 2798, 2083,
+     2080, 2079,    0, 2078,    0, 2076,    0, 2073,    0, 2798,
+
+      956,  936,  978,  950,  994, 1010, 1016,  973, 1019, 1020,
+     1024, 1012, 1029, 1030, 1026, 1027, 1032, 1038, 1044, 1031,
+     1051, 1049, 1041, 2072, 1055, 2068, 1054, 2066, 1057, 1058,
+     1059,  974, 1061, 1064, 1065, 2064, 1070, 2061, 1063, 1071,
+     1073, 1075, 1076, 1081, 1077, 2059, 1082, 2057, 1084, 1087,
+     1089, 1092, 1094, 1095, 1100, 1090, 1098, 1106, 1115, 1102,
+     1103, 1116, 1104, 1118, 2054, 1119, 1123, 1169, 2048,    0,
+     2047,    0, 2046,    0, 2044,    0, 1164, 2041,    0, 2038,
+        0, 2037, 2036, 2034,    0, 2031,    0, 1171, 2028, 1177,
+     1137, 1197, 1164, 1112, 1131, 2798, 1216, 1230, 1256, 2039,
+
+     2014, 2024, 2021,    0, 2018,    0, 2017,    0, 2016,    0,
+     2014,    0, 2011,    0, 1159, 1164, 2011, 1160, 1178, 1182,
+     1133, 1194, 1208, 1185,  541, 1199, 1197, 1215, 1193, 1209,
+     1211, 1225, 1210, 1254, 1235, 1237, 1239, 1241, 1242, 2010,
+     1252, 1248, 2009, 1249, 1253, 1255, 1251, 2007, 1258, 1261,
+     1262, 1264, 2004, 1265, 1271, 2001, 1263, 1273, 2000, 1269,
+     1275, 1277, 1999, 1281, 1283, 1285, 1284, 1286, 1296, 1997,
+     1295, 1287, 1994, 1299, 1300, 1991, 2039, 1986,    0, 1984,
+        0, 1981,    0, 1980,    0, 1979,    0, 1977,    0, 1974,
+        0, 1973,    0, 1336, 1346, 1369, 1357, 1972, 2798, 1375,
+
+     1311, 1347, 1313, 1970, 2798, 1937,    0, 1935,    0, 1934,
+        0, 1931,    0,    0,    0, 1931,    0, 1353, 1354, 1305,
+     1302, 1335, 1363, 1366, 1367, 1364,  586, 1370, 1365, 1374,
+     1368, 1376, 1369, 1385, 1380, 1166, 1392, 1394, 1327, 1395,
+     1396, 1399, 1930, 1398, 1400, 1401, 1929, 1927, 1924, 1403,
+     1402, 1921, 1409, 1920, 1919, 1406, 1404, 1917, 1914, 1913,
+     1912, 1910, 1907, 1416, 1417, 1906, 1419, 1405, 1954, 2798,
+     1900,    0, 1897,    0,    0,    0, 1896,    0,    0,    0,
+     2798,    0,    0,    0,    0, 1459, 1889, 2798, 2798, 1465,
+     1885,    0, 1869,    0,    0,    0,    0, 1868, 1424, 1442,
+
+     1870, 1444, 1447, 1443, 1451, 1453, 1455, 1457, 1868, 1459,
+     1460, 1476, 1461, 1463, 1494, 1477, 1478, 1504, 1483, 1482,
+     1481, 1488, 1490, 1491, 1492, 1865, 1864, 1493, 1863, 1861,
+     1497, 1496, 1499, 1858, 1500, 1502,    0,    0,    0, 1854,
+     1853, 1851, 1550,    0, 1848, 1847, 1846, 1844, 1841, 1843,
+     1842, 1840, 1837, 1507, 1513, 1505, 1514, 1509, 1515, 1528,
+     1506, 1531, 1533, 1562, 1836, 1536, 1835, 1537, 1541, 1544,
+     1549, 1542, 1543, 1833, 1830, 1829, 1828, 1550, 1826, 1823,
+     1819, 1818, 1816, 1813, 1812, 1811, 1809, 1802, 1800, 1799,
+     1796, 1795, 1551, 1797, 1554, 1556, 1555, 1559, 1560, 1561,
+
+     1795, 1565, 1592, 1568, 1778, 1569, 1576, 1577, 1584, 1570,
+     1572, 1766, 1765, 1762, 1755, 1752, 1745, 1743, 1742, 1721,
+     1720, 1719, 1712, 1710, 1712, 1582, 1587, 1595, 1590, 1589,
+     1597, 1585, 1670, 1669, 1601, 1666, 1665, 1605, 1606, 1609,
+     1660, 1659, 1655, 1654, 1651, 1650, 1649, 1593, 1610, 1611,
+     1412, 1614, 1612, 1620, 1337, 1621, 1623, 1627, 1000,  928,
+      896,  778, 1628, 1629, 1631, 1632, 1633, 1635,  709,  628,
+     1637,  373,  338, 1639, 1640,  337,  257, 1641, 1643, 1645,
+     1647, 1646, 1649, 1651,  200,  136, 2798, 1723, 1736, 1749,
+     1759, 1769, 1782, 1792, 1805, 1818, 1831, 1839, 1849, 1856,
+
+     1863, 1870, 1877, 1884, 1891, 1898, 1905, 1912, 1925, 1932,
+     1936, 1944, 1947, 1954, 1961, 1968, 1971, 1978, 1984, 1997,
+     2010, 2017, 2024, 2031, 2038, 2041, 2048, 2051, 2058, 2061,
+     2068, 2071, 2078, 2081, 2088, 2091, 2098, 2101, 2108, 2116,
+     2123, 2130, 2137, 2144, 2147, 2154, 2157, 2164, 2167, 2174,
+     2180, 2193, 2200, 2207, 2210, 2217, 2220, 2227, 2230, 2237,
+     2240, 2247, 2250, 2257, 2260, 2267, 2274, 2277, 2284, 2287,
+     2294, 2301, 2308, 2311, 2318, 2321, 2328, 2331, 2338, 2341,
+     2348, 2351, 2358, 2364, 2377, 2384, 2391, 2394, 2401, 2404,
+     2411, 2414, 2421, 2424, 2431, 2434, 2441, 2444, 2451, 2454,
+
+     2461, 2464, 2471, 2478, 2481, 2488, 2491, 2498, 2501, 2508,
+     2511, 2514, 2520, 2527, 2536, 2543, 2550, 2553, 2560, 2563,
+     2566, 2572, 2579, 2582, 2585, 2588, 2591, 2594, 2597, 2600,
+     2607, 2610, 2617, 2620, 2623, 2626, 2629, 2639, 2646, 2649,
+     2652, 2655, 2662, 2669, 2676, 2679, 2686, 2693, 2700, 2707,
+     2714, 2721, 2728, 2735, 2742, 2749, 2756, 2763, 2770, 2777,
+     2784
     } ;
 
-static yyconst flex_int16_t yy_def[1050] =
+static yyconst flex_int16_t yy_def[1062] =
     {   0,
-      875,    1,  876,  876,  875,    5,  877,  877,  878,  878,
-      875,  875,  875,  875,  875,  875,  875,  879,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,   31,  875,  875,  875,  875,  875,  875,  880,  879,
-      875,  875,  875,  875,  879,  875,  879,  879,  879,  879,
-      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
-      879,  875,  875,  875,  875,  875,  881,  875,  875,  875,
-      882,  875,  875,  883,  875,  875,  884,  875,  875,  875,
-      875,  875,  875,  875,  879,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  885,
-
-      875,   98,   30,  875,  875,  875,  875,  886,   30,  875,
-       31,  875,  875,   31,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  887,  875,
-      875,  875,  875,  879,  888,  889,  875,  875,  879,  879,
-      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
-      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
-      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
-      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
-      879,  879,  875,  875,  875,  881,  881,  881,  875,  881,
-
-      875,  882,  875,  890,  891,  883,  875,  875,  875,  875,
-      892,  893,  894,  884,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  895,  896,  875,
-       98,  875,  875,  875,  875,   98,  897,  875,  875,  103,
-      103,  875,  875,  875,  875,  875,  875,  875,  875,  898,
-      899,  900,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  887,  875,  901,  902,
-      903,  904,  905,  906,  875,  907,  907,  907,  907,  907,
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
-
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  908,
-      909,  910,  911,  912,  913,  914,  915,  875,  875,  916,
-      917,  918,  919,  920,  921,  875,  875,  875,  875,  875,
-      922,  923,  924,  925,  875,  875,  875,  875,  875,  875,
-      875,  367,  372,  875,  875,  926,  927,  928,  875,  875,
-      875,  928,  875,  875,  875,  929,  930,  931,  932,  933,
-      934,  935,  936,  937,  938,  875,  939,  939,  939,  939,
-
-      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
-      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
-      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
-      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
-      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
-      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
-      939,  940,  941,  942,  943,  944,  945,  946,  947,  948,
-      875,  949,  950,  951,  952,  953,  953,  954,  955,  956,
-      957,  875,  482,  875,  958,  875,  958,  875,  875,  875,
-      875,  875,  875,  875,  875,  959,  960,  961,  962,  963,
-
-      964,  965,  966,  967,  968,  969,  970,  971,  972,  972,
-      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
-      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
-      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
-      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
-      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
-      972,  972,  972,  972,  972,  972,  972,  972,  972,  973,
-      974,  975,  976,  977,  978,  979,  980,  981,  982,  983,
-      984,  985,  986,  987,  988,  989,  875,  875,  875,  875,
-      990,  875,  589,  875,  875,  875,  593,  875,  991,  992,
-
-      993,  994,  995,  996,  997,  998,  999, 1000, 1001, 1002,
-     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
-     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
-     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
-     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
-     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
-     1001, 1001, 1003,  875, 1004, 1005, 1006, 1007, 1008, 1009,
-     1010, 1011, 1012, 1013,  875, 1014, 1015, 1016, 1017,  875,
-      680,  875,  875,  875, 1018, 1019, 1020, 1021, 1022, 1023,
-     1024, 1025, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1027, 1028, 1029, 1030, 1031, 1032,  875, 1033, 1018,
-     1020, 1034, 1035, 1025, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1036, 1037, 1030, 1038, 1031,
-     1039, 1032, 1040, 1041, 1034, 1042, 1035, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-
-     1026, 1026, 1026, 1026, 1026, 1026, 1043, 1036, 1044, 1037,
-     1045, 1038, 1046, 1039, 1047, 1040, 1048, 1041, 1042, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1049, 1043, 1044, 1045, 1046,
-     1020, 1047, 1048, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1049, 1020, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026,    0,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875
+      887,    1,  888,  888,  887,    5,  889,  889,  890,  890,
+      887,  887,  887,  887,  887,  887,  887,  891,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,   31,  887,  887,  887,  887,  887,  887,  892,  891,
+      887,  887,  887,  887,  891,  887,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  887,  887,  887,  887,  887,  893,  887,  887,
+      887,  894,  887,  887,  895,  887,  887,  896,  887,  887,
+      887,  887,  887,  887,  887,  891,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+
+      897,  887,   99,   30,  887,  887,  887,  887,  898,   30,
+      887,   31,  887,  887,   31,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  899,
+      887,  887,  887,  887,  891,  900,  901,  887,  887,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  887,  887,  887,  893,  893,  893,
+
+      887,  893,  887,  894,  887,  902,  903,  895,  887,  887,
+      887,  887,  904,  905,  906,  896,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  907,
+      908,  887,   99,  887,  887,  887,  887,   99,  909,  887,
+      887,  104,  104,  887,  887,  887,  887,  887,  887,  887,
+      887,  910,  911,  912,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  899,  887,
+      913,  914,  915,  916,  917,  918,  887,  919,  919,  919,
+      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
+      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
+
+      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
+      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
+      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
+      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
+      919,  919,  919,  920,  921,  922,  923,  924,  925,  926,
+      927,  887,  887,  928,  929,  930,  931,  932,  933,  887,
+      887,  887,  887,  887,  934,  935,  936,  937,  887,  887,
+      887,  887,  887,  887,  887,  371,  376,  887,  887,  938,
+      939,  940,  887,  887,  887,  940,  887,  887,  887,  941,
+      942,  943,  944,  945,  946,  947,  948,  949,  950,  887,
+
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  952,  953,  954,
+      955,  956,  957,  958,  959,  960,  887,  961,  962,  963,
+      964,  965,  965,  966,  967,  968,  969,  887,  488,  887,
+      970,  887,  970,  887,  887,  887,  887,  887,  887,  887,
+
+      887,  971,  972,  973,  974,  975,  976,  977,  978,  979,
+      980,  981,  982,  983,  984,  984,  984,  984,  984,  984,
+      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
+      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
+      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
+      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
+      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
+      984,  984,  984,  984,  984,  984,  985,  986,  987,  988,
+      989,  990,  991,  992,  993,  994,  995,  996,  997,  998,
+      999, 1000, 1001,  887,  887,  887,  887, 1002,  887,  596,
+
+      887,  887,  887,  600,  887, 1003, 1004, 1005, 1006, 1007,
+     1008, 1009, 1010, 1011, 1012, 1013, 1014, 1013, 1013, 1013,
+     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1015,  887,
+     1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025,
+      887, 1026, 1027, 1028, 1029,  887,  686,  887,  887,  887,
+     1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1038,
+
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1039, 1040, 1041, 1042,
+     1043, 1044,  887, 1045, 1030, 1032, 1046, 1047, 1037, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1048, 1049, 1042, 1050, 1043, 1051, 1044, 1052, 1053, 1046,
+     1054, 1047, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1055, 1048, 1056, 1049, 1057, 1050, 1058, 1051, 1059,
+     1052, 1060, 1053, 1054, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1061, 1055, 1056, 1057, 1058, 1032, 1059, 1060, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1061, 1032, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038,    0,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887
     } ;
 
-static yyconst flex_int16_t yy_nxt[2867] =
+static yyconst flex_int16_t yy_nxt[2883] =
     {   0,
        12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
@@ -782,316 +787,318 @@
        18,   18,   40,   18,   18,   18,   18,   18,   40,   18,
        41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
-       51,   52,   53,   18,   54,   18,   55,   18,   18,   18,
-       18,   56,   57,   58,   59,   60,   61,   18,   18,   18,
-       62,   63,   64,   65,   66,   83,   91,   84,   84,   66,
-       87,   88,   67,   70,   70,   70,   70,   70,   70,   70,
-
-       70,   70,   70,   71,   70,   70,   70,   70,   70,   70,
-       70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
-       70,   70,   70,   70,   70,   70,   70,   70,   71,   71,
+       51,   52,   53,   18,   54,   18,   55,   18,   18,   56,
+       18,   57,   58,   59,   60,   61,   62,   18,   18,   18,
+       63,   64,   65,   66,   67,   84,   92,   85,   85,   67,
+       88,   89,   68,   71,   71,   71,   71,   71,   71,   71,
+
+       71,   71,   71,   72,   71,   71,   71,   71,   71,   71,
        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   70,   72,   70,   70,   71,   73,   71,
-       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   70,   70,   70,   70,   75,   75,   78,
-       78,  122,  123,   89,  140,   78,   78,   86,   75,   75,
-       79,   80,   81,   81,   81,   79,   81,   80,   82,   82,
-
-       82,   81,   90,   92,  141,  145,   86,   97,   94,   98,
-       98,   98,   98,   98,   98,  250,  875,   93,   99,   84,
-       95,   96,   84,  100,  176,  117,   76,   76,   76,   76,
-      142,  146,   86,  101,  102,  143,  103,  103,  103,  103,
-      104,  104,  118,   86,  119,  120,  147,   86,  148,  252,
-      258,   86,  160,  105,  193,  192,  106,   86,   86,  149,
-      150,  151,  107,  108,  152,  153,  181,  154,  109,   86,
-      155,  156,   86,   86,  105,   86,  144,  161,  157,  158,
-      110,  159,  204,  261,  162,  262,   86,  179,  107,  228,
-      163,  108,  102,  180,  111,  111,  111,  111,  111,  111,
-
-       86,  168,   86,  169,  194,   86,   86,   86,  205,  164,
-       86,  105,  170,  165,  112,  229,  177,   86,  166,  186,
-      113,  281,  167,  178,  269,   86,  114,  187,  191,  182,
-      183,  142,  105,  261,  188,  262,  143,  284,  115,  184,
-       86,   86,  185,  198,  199,  171,  113,  124,  198,  189,
-      270,  125,  126,  172,  127,  173,  128,  129,  174,  130,
-      248,  131,  175,  256,  200,  200,  200,  200,  200,  200,
-      132,  133,  134,  261,   86,  262,   86,  144,  195,   80,
-       81,   81,   81,  195,  249,  280,  196,  257,   86,   86,
-      135,  190,   86,  136,   79,   80,   81,   81,   81,   79,
-
-       81,   80,   81,   81,   81,   81,   81,   80,   82,   82,
-       82,   81,  261,  305,  262,  240,  240,  240,  240,  246,
-      137,  138,  207,  208,  875,  247,  254,  207,   86,  209,
-      247,  261,  255,  262,  209,   98,   98,   98,   98,   98,
-       98,  263,  875,  210,  210,  210,  210,  241,  246,  308,
-      875,  247,  263,  261,  209,  262,  247,  102,  255,  104,
-      104,  104,  104,  104,  104,   86,  261,  239,  262,  211,
-      875,  261,  209,  262,   86,  255,  105,  209,  209,  875,
-      276,  209,  209,   86,  253,  264,  261,  277,  262,  209,
-      296,  242,  209,  254,  209,  212,  209,  105,  213,  215,
-
-      261,  255,  262,  216,  217,  283,   86,  875,  218,  219,
-      243,  220,  243,  221,   86,  244,  244,  244,  244,  244,
-      244,   86,  222,  223,  224,  261,  265,  262,  142,  306,
-       86,   86,  278,  143,   86,   86,  285,  286,  287,  279,
-      288,  289,  225,   86,  290,  226,  291,  245,  282,   86,
-       86,  292,  293,  294,   86,  295,  297,  875,  298,  301,
-       86,   86,  307,   86,  299,  300,  309,  303,   86,   86,
-      304,   86,  302,  227,  231,  231,  231,  231,  231,  231,
-       86,   86,   86,  312,  310,  311,  313,   86,   86,   86,
-      232,  233,   86,  234,  235,   86,  142,   86,  314,   86,
-
-      321,  315,  330,   86,  320,   86,  236,  318,   86,  316,
-      317,  232,  233,  232,  319,  325,  234,   86,  235,  322,
-       86,   86,   86,  331,  333,  328,  332,  629,  326,  323,
-      324,   86,  207,  208,  337,  335,  338,  207,  365,   86,
-      329,  342,  334,  336,  339,  327,  195,   80,   81,   81,
-       81,  195,  198,  199,  196,   86,   86,  198,  198,  199,
-      356,  365,  357,  198,  340,  199,  356,  343,  357,  340,
-      356,  341,  357,  200,  200,  200,  200,  200,  200,  200,
-      200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
-      200,  348,  348,  348,  348,  357,  357,  356,   86,  357,
-
-      358,  356,  356,  357,  357,  356,  359,  357,  356,  356,
-      357,  357,  356,  356,  357,  357,  369,  365,  403,  366,
-      369,  366,   86,  349,  367,  367,  367,  367,  367,  367,
-      875,  232,  233,   86,  234,  235,  261,  369,  262,  369,
-      365,  261,  405,  262,  369,  104,  104,  104,  104,  104,
-      104,  398,  232,  233,  232,  374,  368,  234,   86,  235,
-       86,   86,  105,   86,  371,  244,  244,  244,  244,  244,
-      244,  384,  386,  397,   86,   86,  399,  253,  401,  400,
-      402,  374,   86,  105,  372,  372,  372,  372,  372,  372,
-      104,  104,  104,  104,  104,  104,  377,  384,  387,   86,
-
-      232,   86,   86,  234,  235,  243,  404,  243,  411,   86,
-      244,  244,  244,  244,  244,  244,  373,  410,  379,   86,
-      380,  232,  253,  232,  381,  409,  234,  419,  235,   86,
-      382,  111,  111,  111,  111,  111,  111,   86,   86,   86,
-       86,   86,  383,   86,  412,  415,  380,   86,  416,   86,
-      381,   86,  406,   86,  413,  414,  417,   86,  407,  408,
-      422,   86,  421,  258,   86,  420,   86,   86,  418,  424,
-       86,  423,  428,   86,  426,  427,  430,   86,  429,  425,
-       86,   86,   86,   86,   86,  431,  432,  433,   86,  437,
-       86,  435,   86,  438,   86,  439,  434,   86,  436,   86,
-
-       86,   86,   86,   86,   86,   86,   86,  443,   86,   86,
-      444,  441,  440,  446,   86,  442,  445,  451,   86,   86,
-      142,  450,   86,   86,  447,  449,  448,  456,  452,   86,
-       86,  459,  453,   86,  494,  460,  454,  455,  340,  199,
-      457,  199,  458,  340,  356,  341,  357,  197,  461,  209,
-      209,  209,  209,  348,  348,  348,  348,  356,  495,  357,
-       86,   86,   86,   86,  367,  367,  367,  367,  367,  367,
-      366,  509,  366,  514,   86,  367,  367,  367,  367,  367,
-      367,  471,  482,  482,  482,  482,  482,  482,  231,  231,
-      231,  231,  231,  231,   86,   86,  516,   86,  232,  486,
-
-      875,  234,  235,  240,  240,  240,  240,  104,  104,  487,
-      489,  510,  486,  512,  483,  377,  490,  545,  490,  232,
-      370,  232,  488,   86,  234,  486,  235,  372,  372,  372,
-      372,  372,  372,   86,  875,  371,  489,  379,  486,  380,
-       86,  525,  490,  381,  490,  491,  529,  491,  511,  382,
-      492,  492,  492,  492,  492,  492,  379,   86,  380,  373,
-       86,  383,  381,   86,   86,  380,  513,   86,  496,  381,
-       86,   86,  515,  517,   86,   86,  519,   86,   86,   86,
-      383,   86,  493,  518,  380,   86,  526,  521,  381,  520,
-       86,  522,  523,  524,  527,   86,  531,  532,  530,   86,
-
-       86,  528,   86,   86,   86,  533,   86,   86,   86,  534,
-       86,  535,  538,  541,   86,  543,  539,   86,   86,   86,
-       86,  536,   86,  542,  537,  544,   86,  540,   86,  551,
-       86,   86,  547,   86,  549,   86,  546,   86,   86,   86,
-      548,   86,  550,  552,   86,   86,  558,   86,   86,   86,
-      555,  553,  554,  556,  560,  561,  559,  557,   86,   86,
-      567,  566,   86,  716,  563,  562,  199,  564,   86,  568,
-      486,  569,  570,  209,  209,  209,  209,  565,  482,  482,
-      482,  482,  482,  482,  372,  372,  372,  372,  372,  372,
-      616,   86,  486,  486,  232,  592,  486,  234,  235,  588,
-
-       86,  588,  487,  591,  589,  589,  589,  589,  589,  589,
-      483,  614,   86,  612,   86,  232,  484,  232,  486,  486,
-      234,  592,  235,  492,  492,  492,  492,  492,  492,  611,
-       86,   86,   86,   86,  621,  620,  590,  593,  593,  593,
-      593,  593,  593,   86,  615,  613,  617,   86,  618,   86,
-       86,   86,   86,  594,  626,  875,  595,  596,  491,  856,
-      491,  619,  622,  492,  492,  492,  492,  492,  492,  597,
-      623,   86,   86,  624,  594,   86,  594,   86,   86,  595,
-      625,  596,   86,  627,   86,   86,  630,   86,  628,  635,
-      634,   86,   86,  633,   86,   86,  636,   86,   86,  632,
-
-      631,   86,   86,  641,   86,   86,   86,   86,   86,  638,
-      642,   86,  639,  640,   86,   86,  644,  637,   86,  643,
-      645,  646,   86,  647,  648,  652,   86,  651,   86,  650,
-       86,  649,   86,  656,  653,  658,   86,  655,  654,   86,
-       86,   86,   86,   86,  657,  659,   86,   86,  682,  660,
-      682,   86,  696,  695,  700,  662,  749,  661,  482,  482,
-      482,  482,  482,  482,  589,  589,  589,  589,  589,  589,
-      588,  682,  588,  682,   86,  589,  589,  589,  589,  589,
-      589,  593,  593,  593,  593,  593,  593,  697,   86,   86,
-      587,  680,  680,  680,  680,  680,  680,  683,   86,   86,
-
-       86,  683,   86,  693,   86,  698,   86,  594,  701,  703,
-      595,  596,  699,  597,   86,   86,  694,  704,  683,  702,
-      683,  705,   86,  681,   86,  683,   86,  712,  594,  706,
-      594,   86,   86,  595,  710,  596,   86,  707,   86,  708,
-       86,   86,   86,  711,   86,   86,  709,  713,   86,  715,
-      718,   86,   86,   86,   86,   86,  714,   86,   86,   86,
-      717,  722,  726,   86,  719,  723,  727,  720,   86,   86,
-      721,   86,  725,  729,   86,  875,  875,  728,  724,  745,
-      730,  748,   86,  747,  731,  680,  680,  680,  680,  680,
-      680,  593,  593,  593,  593,  593,  593,   86,   86,   86,
-
-       86,  594,  750,  751,  595,  596,   86,  746,   86,  752,
-       86,   86,  755,  759,  754,   86,  753,  681,  757,  756,
-      762,   86,  594,  684,  594,   86,   86,  595,  760,  596,
-      761,   86,  758,   86,  763,   86,   86,   86,   86,  764,
-       86,   86,   86,  765,   86,   86,  766,  769,   86,   86,
-      767,   86,   86,   86,  768,   86,   86,  774,  790,   86,
-      775,   86,  771,  770,   86,  792,  772,  791,   86,  773,
-      680,  680,  680,  680,  680,  680,  788,   86,  789,   86,
-      796,  794,  793,  798,   86,   86,   86,  799,  800,   86,
-       86,   86,  797,  801,  795,   86,   86,   86,  802,  803,
-
-       86,   86,  738,   86,  804,   86,  823,   86,   86,   86,
-       86,  825,  826,  805,  806,  828,   86,   86,   86,  822,
-      829,  821,   86,   86,  820,  827,  831,  824,   86,   86,
-       86,  832,   86,   86,  834,   86,  846,   86,  830,  833,
-       86,  847,  845,  844,   86,  835,   86,  849,   86,   86,
-       86,  851,  852,   86,   86,  848,   86,  859,   86,  853,
-       86,   86,  854,  850,   86,  857,  858,  861,  860,   86,
-       86,   86,  862,  863,   86,   86,   86,  866,   86,  868,
-      864,   86,   86,   86,   86,  867,  865,  875,   86,  875,
-      855,  871,   86,   86,  874,   86,   86,   86,  875,  875,
-
-      869,  843,  870,  875,  842,  872,  873,   68,   68,   68,
-       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
-       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
-       74,   74,   74,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   85,  875,  840,   85,
-      875,   85,   85,   85,   85,   85,  139,  839,  875,  838,
-      139,  139,  139,  139,  139,  139,  197,  197,  197,  197,
-      197,  197,  197,  197,  197,  197,  197,  197,  197,  202,
-      875,  837,  202,   86,  202,  202,  202,  202,  202,  206,
-       86,  206,  206,   86,  206,  206,  206,  206,  206,  206,
-
-      875,  206,  214,  819,  875,  214,  214,  214,  214,  214,
-      214,  214,  214,  818,  214,  237,  237,  237,  237,  237,
-      237,  237,  237,  237,  237,  237,  237,  237,  251,  251,
-      816,  251,  875,  814,  875,  251,  267,  812,  875,  267,
-      810,  267,  267,  267,  267,  267,  271,  808,  271,   86,
-       86,   86,  271,  273,   86,  273,   86,   86,   86,  273,
-      344,   86,  344,   86,   86,   86,  344,  346,   86,  346,
-      875,  787,  785,  346,  350,  875,  350,  875,  782,  780,
-      350,  352,  778,  352,   86,   86,   86,  352,  354,   86,
-      354,   86,   86,   86,  354,  361,   86,  361,  744,  741,
-
-      740,  361,  363,  738,  363,  203,  734,  733,  363,  237,
-      237,  237,  237,  237,  237,  237,  237,  237,  237,  237,
-      237,  237,  376,  664,  376,  378,  378,   86,  378,  378,
-      378,   86,  378,  251,  251,   86,  251,  388,   86,  388,
-       86,   86,   86,  388,  390,   86,  390,   86,   86,   86,
-      390,  392,   86,  392,   86,   86,   86,  392,  271,  691,
-      271,  394,  690,  394,  688,  686,  684,  394,  273,  591,
-      273,   85,  679,  678,   85,  676,   85,   85,   85,   85,
-       85,  197,  197,  197,  197,  197,  197,  197,  197,  197,
-      197,  197,  197,  197,  462,  462,  462,  462,  462,  462,
-
-      462,  462,  462,  462,  462,  462,  462,  463,  674,  463,
-      672,  670,  668,  463,  465,  666,  465,  664,   86,   86,
-      465,  467,   86,  467,   86,   86,   86,  467,  344,   86,
-      344,  469,   86,  469,   86,  610,  608,  469,  346,  606,
-      346,  472,  604,  472,  602,  600,  496,  472,  350,  598,
-      350,  474,  598,  474,  587,  586,  584,  474,  352,  477,
-      352,  476,  477,  476,  582,  580,  578,  476,  354,  576,
-      354,  478,  574,  478,  572,   86,   86,  478,  361,   86,
-      361,  480,   86,  480,   86,   86,   86,  480,  363,   86,
-      363,  485,  508,  485,  506,  485,  504,  485,  376,  502,
-
-      376,  500,  376,  498,  376,  378,  378,  484,  378,  378,
-      378,  481,  378,  497,  479,  497,  357,  357,  477,  497,
-      499,  475,  499,  473,  470,  468,  499,  501,  466,  501,
-      464,   86,   86,  501,  388,   86,  388,  503,  396,  503,
-      395,  393,  391,  503,  390,  389,  390,  505,  268,  505,
-      263,  262,  385,  505,  392,  385,  392,  507,  250,  507,
-      375,  375,  238,  507,  394,  370,  394,   85,  364,  362,
-       85,  360,   85,   85,   85,   85,   85,  462,  462,  462,
-      462,  462,  462,  462,  462,  462,  462,  462,  462,  462,
-      571,  356,  571,  355,  353,  351,  571,  463,  347,  463,
-
-      573,  345,  573,  203,  199,   86,  573,  465,  275,  465,
-      575,  274,  575,  272,  268,  263,  575,  467,  266,  467,
-      577,  263,  577,  261,  260,  259,  577,  469,  238,  469,
-      579,  230,  579,   84,   84,   86,  579,  472,  203,  472,
-      581,  201,  581,   84,  121,  116,  581,  474,   86,  474,
-      476,  875,  476,   69,   69,  875,  476,  583,  875,  583,
-      875,  875,  875,  583,  478,  875,  478,  585,  875,  585,
-      875,  875,  875,  585,  480,  875,  480,  485,  875,  485,
-      875,  485,  875,  485,  378,  875,  378,  875,  875,  875,
-      378,  599,  875,  599,  875,  875,  875,  599,  497,  875,
-
-      497,  601,  875,  601,  875,  875,  875,  601,  499,  875,
-      499,  603,  875,  603,  875,  875,  875,  603,  501,  875,
-      501,  605,  875,  605,  875,  875,  875,  605,  503,  875,
-      503,  607,  875,  607,  875,  875,  875,  607,  505,  875,
-      505,  609,  875,  609,  875,  875,  875,  609,  507,  875,
-      507,   85,  875,  875,   85,  875,   85,   85,   85,   85,
-       85,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  665,  875,  665,  875,  875,  875,
-      665,  571,  875,  571,  667,  875,  667,  875,  875,  875,
-      667,  573,  875,  573,  669,  875,  669,  875,  875,  875,
-
-      669,  575,  875,  575,  671,  875,  671,  875,  875,  875,
-      671,  577,  875,  577,  673,  875,  673,  875,  875,  875,
-      673,  579,  875,  579,  675,  875,  675,  875,  875,  875,
-      675,  581,  875,  581,  677,  875,  677,  875,  875,  875,
-      677,  583,  875,  583,   85,  875,   85,  875,  875,  875,
-       85,  585,  875,  585,  485,  875,  485,  875,  875,  875,
-      485,  685,  875,  685,  875,  875,  875,  685,  599,  875,
-      599,  687,  875,  687,  875,  875,  875,  687,  601,  875,
-      601,  689,  875,  689,  875,  875,  875,  689,  603,  875,
-      603,  139,  875,  139,  875,  875,  875,  139,  605,  875,
-
-      605,  692,  875,  692,  607,  875,  607,   85,  875,  875,
-       85,  875,   85,   85,   85,   85,   85,  609,  875,  609,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  732,  875,  732,  875,  875,  875,  732,
-      665,  875,  665,  202,  875,  202,  875,  875,  875,  202,
-      667,  875,  667,  735,  875,  735,  669,  875,  669,  202,
-      875,  875,  202,  875,  202,  202,  202,  202,  202,  671,
-      875,  671,  736,  875,  736,  673,  875,  673,  675,  875,
-      675,  737,  875,  737,  677,  875,  677,   85,  875,   85,
-      739,  875,  739,  875,  875,  875,  739,  685,  875,  685,
-
-      267,  875,  267,  875,  875,  875,  267,  687,  875,  687,
-      742,  875,  742,  689,  875,  689,  139,  875,  139,  743,
-      875,  743,  875,  875,  875,  743,   85,  875,  875,   85,
-      875,   85,   85,   85,   85,   85,  776,  875,  776,  732,
-      875,  732,  202,  875,  202,  777,  875,  777,  875,  875,
-      875,  777,  779,  875,  779,  875,  875,  875,  779,  781,
-      875,  781,  875,  875,  875,  781,  783,  875,  783,  784,
-      875,  784,  875,  875,  875,  784,  786,  875,  786,  875,
-      875,  875,  786,  807,  875,  807,  875,  875,  875,  807,
-      809,  875,  809,  875,  875,  875,  809,  811,  875,  811,
-
-      875,  875,  875,  811,  813,  875,  813,  875,  875,  875,
-      813,  815,  875,  815,  875,  875,  875,  815,  817,  875,
-      817,  875,  875,  875,  817,  609,  875,  609,  875,  875,
-      875,  609,  836,  875,  836,  875,  875,  875,  836,  671,
-      875,  671,  875,  875,  875,  671,  675,  875,  675,  875,
-      875,  875,  675,   85,  875,   85,  875,  875,  875,   85,
-      841,  875,  841,  875,  875,  875,  841,  139,  875,  139,
-      875,  875,  875,  139,  202,  875,  202,  875,  875,  875,
-      202,   11,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875
+       71,   71,   71,   71,   71,   71,   71,   71,   72,   72,
+       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
+       72,   72,   72,   71,   73,   71,   71,   72,   74,   72,
+       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
+       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
+       72,   72,   72,   71,   71,   71,   71,   76,   76,   79,
+       79,  123,  124,   90,  141,   79,   79,   87,   76,   76,
+       80,   81,   82,   82,   82,   80,   82,   81,   83,   83,
+
+       83,   82,   91,   93,  142,  146,   87,   98,   95,   99,
+       99,   99,   99,   99,   99,  252,  887,   94,  100,   85,
+       96,   97,   85,  101,  177,  118,   77,   77,   77,   77,
+      143,  147,   87,  102,  103,  144,  104,  104,  104,  104,
+      105,  105,  119,   87,  120,  121,  148,   87,  149,  254,
+      260,   87,  161,  106,  427,  194,  107,   87,   87,  150,
+      151,  152,  108,  109,  153,  154,  183,  155,  110,   87,
+      156,  157,   87,   87,  106,   87,  145,  162,  158,  159,
+      111,  160,   87,  195,  163,   87,   87,  180,  108,  206,
+      164,  109,  103,  181,  112,  112,  112,  112,  112,  112,
+
+       87,  169,  305,  170,  182,   87,   87,   87,   87,  165,
+       87,  106,  171,  166,  113,  207,  178,   87,  167,  188,
+      114,  283,  168,  179,  230,   87,  115,  189,  193,  184,
+      185,  143,  106,  196,  190,  263,  144,  264,  116,  186,
+       87,  298,  187,  200,  201,  172,  114,  125,  200,  191,
+      231,  126,  127,  173,  128,  174,  129,  130,  175,  131,
+      250,  132,  176,  258,  202,  202,  202,  202,  202,  202,
+      133,  134,  135,  263,   87,  264,   87,  145,  197,   81,
+       82,   82,   82,  197,  251,  282,  198,  259,   87,   87,
+      136,  192,   87,  137,   80,   81,   82,   82,   82,   80,
+
+       82,   81,   82,   82,   82,   82,   82,   81,   83,   83,
+       83,   82,  263,  307,  264,  242,  242,  242,  242,  248,
+      138,  139,  209,  210,   87,  249,  256,  209,   87,  211,
+      249,  263,  257,  264,  211,   99,   99,   99,   99,   99,
+       99,  265,  887,  212,  212,  212,  212,  243,  248,  310,
+      887,  249,  265,  263,  211,  264,  249,  103,  257,  105,
+      105,  105,  105,  105,  105,   87,  263,  241,  264,  213,
+      887,  263,  211,  264,   87,  257,  106,  211,  211,  887,
+      271,  211,  211,  280,  255,  266,  263,   87,  264,  211,
+      404,  244,  211,  256,  211,  214,  211,  106,  215,  217,
+
+      263,  257,  264,  218,  219,  281,  272,  887,  220,  221,
+      245,  222,  245,  223,   87,  246,  246,  246,  246,  246,
+      246,   87,  224,  225,  226,  263,  267,  264,  263,  143,
+      264,   87,  284,   87,  144,   87,  278,   87,   87,   87,
+       87,   87,  227,  279,  300,  228,   87,  247,   87,  286,
+      306,  303,   87,  285,   87,  299,   87,   87,   87,  301,
+      302,  323,  308,  311,  304,   87,   87,  314,  309,   87,
+      313,  315,   87,  229,  233,  233,  233,  233,  233,  233,
+       87,  312,   87,  316,  318,   87,  317,   87,   87,   87,
+      234,  235,   87,  236,  237,  627,  324,  320,  325,  360,
+
+      329,  361,  319,  328,  321,  322,  238,  143,  326,  327,
+       87,  234,  235,  234,   87,  331,  236,  330,  237,  287,
+      288,  289,   87,  290,  291,   87,   87,  292,   87,  293,
+      332,  346,   87,  335,  294,  295,  296,   87,  297,  333,
+      709,   87,  334,   87,  337,  341,  360,  342,  361,  360,
+       87,  361,  378,  338,  339,  336,  343,  347,  360,  360,
+      361,  361,  340,  197,   81,   82,   82,   82,  197,  200,
+      201,  198,  209,  210,  200,  200,  201,  209,  378,   87,
+      200,  344,  201,   87,  362,  360,  344,  361,  345,  434,
+      202,  202,  202,  202,  202,  202,  202,  202,  202,  202,
+
+      202,  202,  202,  202,  202,  202,  202,  202,  352,  352,
+      352,  352,  361,  361,  360,  363,  361,  360,  360,  361,
+      361,  369,  887,  369,  143,  360,  360,  361,  361,  370,
+       87,  370,  388,   87,  371,  371,  371,  371,  371,  371,
+      353,  373,  390,  401,  369,  373,  369,   87,   87,  234,
+      235,  402,  236,  237,   87,  263,  375,  264,  388,  263,
+       87,  264,  373,  416,  373,  403,  372,   87,  391,  373,
+      234,  235,  234,   87,  407,  236,   87,  237,  105,  105,
+      105,  105,  105,  105,  246,  246,  246,  246,  246,  246,
+      405,  245,   87,  245,  414,  106,  246,  246,  246,  246,
+
+      246,  246,  105,  105,  105,  105,  105,  105,   87,   87,
+      255,   87,  409,  406,  408,   87,  106,  376,  376,  376,
+      376,  376,  376,  381,  421,   87,  112,  112,  112,  112,
+      112,  112,  887,  234,  255,   87,  236,  237,  413,   87,
+       87,  417,  418,   87,  419,  383,   87,  384,   87,  377,
+       87,  385,  420,  425,  234,   87,  234,  386,  260,  236,
+       87,  237,  422,   87,  423,  410,  415,   87,   87,  387,
+       87,  411,  412,  384,   87,  428,  426,  385,  424,  432,
+       87,  429,   87,   87,   87,  433,  438,   87,   87,  430,
+      431,   87,  436,  437,   87,   87,  441,  439,   87,  440,
+
+      442,  435,   87,  443,   87,   87,   87,   87,   87,   87,
+       87,   87,   87,  445,   87,  447,  448,   87,   87,   87,
+      444,  449,  446,  451,   87,   87,  450,  456,   87,  455,
+      452,  454,  453,   87,   87,   87,  457,  462,  461,   87,
+      458,  459,  460,  465,  466,   87,  201,  464,  344,  201,
+      887,  463,  199,  344,  500,  345,  211,  211,  211,  211,
+      467,  352,  352,  352,  352,  360,  360,  361,  361,  371,
+      371,  371,  371,  371,  371,  370,  492,  370,  501,   87,
+      371,  371,  371,  371,  371,  371,  493,   87,  477,  488,
+      488,  488,  488,  488,  488,  233,  233,  233,  233,  233,
+
+      233,   87,  492,  516,  496,  234,  492,   87,  236,  237,
+      242,  242,  242,  242,  105,  105,  494,  495,  515,  381,
+      518,  489,  495,  496,   87,   87,  234,  374,  234,   87,
+      496,  236,  492,  237,  376,  376,  376,  376,  376,  376,
+      887,  383,  375,  384,  517,   87,  522,  385,  545,  496,
+      497,   87,  497,  386,  519,  498,  498,  498,  498,  498,
+      498,   87,  383,   87,  384,  387,  377,   87,  385,  384,
+       87,   87,  520,  385,  502,   87,  521,   87,   87,  523,
+       87,   87,   87,   87,  524,  526,  387,  499,  532,   87,
+      384,  525,   87,  527,  385,   87,  531,  528,  529,  530,
+
+       87,  535,   87,  536,  533,   87,   87,  539,   87,   87,
+       87,  534,   87,  537,   87,   87,   87,  541,  546,  538,
+      540,   87,   87,  544,   87,  548,   87,   87,   87,  542,
+      547,  543,   87,   87,  550,   87,  549,  556,   87,  552,
+       87,   87,  554,   87,  551,   87,   87,  559,  553,   87,
+      557,   87,  555,   87,   87,   87,  492,   87,  558,  565,
+      564,  560,  566,  561,  567,  562,   87,   87,  563,   87,
+       87,  201,  573,  568,   87,  571,  570,  577,  569,  599,
+      574,  492,  492,  576,   87,  572,  211,  211,  211,  211,
+      718,  493,  575,  488,  488,  488,  488,  488,  488,  376,
+
+      376,  376,  376,  376,  376,  599,  623,  492,  492,  234,
+       87,   87,  236,  237,  595,   87,  595,   87,  598,  596,
+      596,  596,  596,  596,  596,  489,  620,  618,  619,   87,
+      234,  490,  234,   87,  492,  236,   87,  237,  498,  498,
+      498,  498,  498,  498,   87,   87,  622,  626,   87,  621,
+       87,  597,  600,  600,  600,  600,  600,  600,  624,   87,
+       87,   87,   87,  629,  625,  631,   87,  633,  601,  632,
+      628,  602,  603,  497,  635,  497,   87,  636,  498,  498,
+      498,  498,  498,  498,  604,  630,   87,  634,   87,  601,
+       87,  601,   87,   87,  602,  637,  603,  642,  641,   87,
+
+       87,  640,   87,   87,   87,   87,   87,  639,  643,   87,
+      638,  647,   87,   87,   87,   87,   87,  644,  648,  645,
+       87,  646,   87,  654,   87,  650,   87,  653,   87,  649,
+      651,  652,   87,  655,   87,   87,   87,   87,   87,  657,
+      659,  664,  656,  661,  660,  658,   87,   87,  666,  663,
+       87,   87,  688,   87,  688,  665,   87,  662,  488,  488,
+      488,  488,  488,  488,  668,  702,  703,  667,  596,  596,
+      596,  596,  596,  596,  595,  688,  595,  688,   87,  596,
+      596,  596,  596,  596,  596,  689,   87,  721,   87,  689,
+      594,  686,  686,  686,  686,  686,  686,  600,  600,  600,
+
+      600,  600,  600,  704,   87,   87,  689,  601,  689,  699,
+      602,  603,  701,  689,   87,   87,   87,   87,   87,   87,
+       87,   87,  700,  687,  706,   87,  707,   87,  601,  604,
+      601,   87,  708,  602,  710,  603,   87,  705,  711,  716,
+      712,  713,  715,   87,  714,   87,   87,   87,  717,   87,
+       87,   87,   87,   87,   87,   87,   87,   87,  719,  724,
+       87,  727,  732,   87,  722,  720,  731,   87,   87,  723,
+       87,  736,  725,  726,  728,   87,  733,  730,  734,  735,
+      729,  686,  686,  686,  686,  686,  686,  600,  600,  600,
+      600,  600,  600,   87,   87,   87,  750,  601,   87,  754,
+
+      602,  603,   87,  751,   87,  753,   87,  756,   87,  757,
+       87,   87,   87,  687,   87,  762,  759,  764,  601,  690,
+      601,  752,  755,  602,  760,  603,  758,   87,   87,   87,
+      767,  765,   87,   87,   87,  763,  761,  768,  766,   87,
+      770,   87,   87,   87,   87,   87,  769,   87,   87,  771,
+       87,   87,  774,   87,  772,   87,   87,   87,   87,  779,
+       87,  795,  780,  773,   87,   87,   87,  775,  776,  777,
+      797,  778,  686,  686,  686,  686,  686,  686,  793,   87,
+      796,  794,   87,  800,   87,  801,  803,   87,   87,  798,
+      804,  805,   87,   87,   87,   87,  799,  802,  807,  806,
+
+       87,   87,   87,  808,  743,   87,   87,   87,  809,  828,
+       87,   87,   87,   87,  830,  831,   87,  810,  833,   87,
+       87,   87,  834,   87,  811,  827,  826,   87,   87,  825,
+      836,  837,  829,   87,  832,   87,   87,  839,   87,  840,
+       87,   87,  835,   87,  838,  850,   87,  887,   87,  851,
+      852,  855,   87,  856,  849,  857,   87,   87,  853,  858,
+       87,   87,   87,   87,  854,   87,  859,  864,  865,  860,
+      863,   87,   87,  866,   87,  868,  867,  869,   87,   87,
+       87,  870,   87,   87,   87,  873,   87,  875,   87,  876,
+       87,   87,   87,  874,   87,  872,   87,   87,   87,  871,
+
+       87,  880,   87,  887,  862,  887,  879,  881,  887,  887,
+      877,  878,  886,  887,  861,  884,   87,   87,  882,  883,
+       87,   87,  885,   69,   69,   69,   69,   69,   69,   69,
+       69,   69,   69,   69,   69,   69,   75,   75,   75,   75,
+       75,   75,   75,   75,   75,   75,   75,   75,   75,   78,
+       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
+       78,   78,   86,   87,  887,   86,  887,   86,   86,   86,
+       86,   86,  140,  848,  887,  847,  140,  140,  140,  140,
+      140,  140,  199,  199,  199,  199,  199,  199,  199,  199,
+      199,  199,  199,  199,  199,  204,  887,  845,  204,  887,
+
+      204,  204,  204,  204,  204,  208,  844,  208,  208,  887,
+      208,  208,  208,  208,  208,  208,  843,  208,  216,  887,
+      842,  216,  216,  216,  216,  216,  216,  216,  216,   87,
+      216,  239,  239,  239,  239,  239,  239,  239,  239,  239,
+      239,  239,  239,  239,  253,  253,   87,  253,   87,  887,
+      824,  253,  269,  887,  823,  269,  821,  269,  269,  269,
+      269,  269,  273,  887,  273,  819,  887,  817,  273,  275,
+      887,  275,  815,  813,   87,  275,  348,   87,  348,   87,
+       87,   87,  348,  350,   87,  350,   87,   87,   87,  350,
+      354,   87,  354,   87,   87,  887,  354,  356,  792,  356,
+
+      790,  887,  887,  356,  358,  787,  358,  785,  783,   87,
+      358,  365,   87,  365,   87,   87,   87,  365,  367,   87,
+      367,   87,  749,  746,  367,  239,  239,  239,  239,  239,
+      239,  239,  239,  239,  239,  239,  239,  239,  380,  745,
+      380,  382,  382,  743,  382,  382,  382,  205,  382,  253,
+      253,  739,  253,  392,  738,  392,  670,   87,   87,  392,
+      394,   87,  394,   87,   87,   87,  394,  396,   87,  396,
+       87,   87,   87,  396,  273,   87,  273,  398,   87,  398,
+       87,   87,   87,  398,  275,  697,  275,   86,  696,  694,
+       86,  692,   86,   86,   86,   86,   86,  199,  199,  199,
+
+      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
+      468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
+      468,  468,  468,  469,  690,  469,  598,  685,  684,  469,
+      471,  682,  471,  680,  678,  676,  471,  473,  674,  473,
+      672,  670,   87,  473,  348,   87,  348,  475,   87,  475,
+       87,   87,   87,  475,  350,   87,  350,  478,   87,  478,
+       87,   87,   87,  478,  354,  617,  354,  480,  615,  480,
+      613,  611,  609,  480,  356,  607,  356,  482,  502,  482,
+      605,  605,  594,  482,  358,  593,  358,  484,  591,  484,
+      483,  483,  589,  484,  365,  587,  365,  486,  585,  486,
+
+      583,  581,  579,  486,  367,   87,  367,  491,   87,  491,
+       87,  491,   87,  491,  380,   87,  380,   87,  380,   87,
+      380,  382,  382,   87,  382,  382,  382,  514,  382,  503,
+      512,  503,  510,  508,  506,  503,  505,  504,  505,  490,
+      487,  485,  505,  507,  361,  507,  361,  483,  481,  507,
+      392,  479,  392,  509,  476,  509,  474,  472,  470,  509,
+      394,   87,  394,  511,   87,  511,   87,  400,  399,  511,
+      396,  397,  396,  513,  395,  513,  393,  270,  265,  513,
+      398,  264,  398,   86,  389,  389,   86,  252,   86,   86,
+       86,   86,   86,  468,  468,  468,  468,  468,  468,  468,
+
+      468,  468,  468,  468,  468,  468,  578,  379,  578,  379,
+      240,  374,  578,  469,  368,  469,  580,  366,  580,  364,
+      360,  359,  580,  471,  357,  471,  582,  355,  582,  351,
+      349,  205,  582,  473,  201,  473,  584,   87,  584,  277,
+      276,  274,  584,  475,  270,  475,  586,  265,  586,  268,
+      265,  263,  586,  478,  262,  478,  588,  261,  588,  240,
+      232,   85,  588,  480,   85,  480,  482,   87,  482,  205,
+      203,   85,  482,  590,  122,  590,  117,   87,  887,  590,
+      484,   70,  484,  592,   70,  592,  887,  887,  887,  592,
+      486,  887,  486,  491,  887,  491,  887,  491,  887,  491,
+
+      382,  887,  382,  887,  887,  887,  382,  606,  887,  606,
+      887,  887,  887,  606,  503,  887,  503,  608,  887,  608,
+      887,  887,  887,  608,  505,  887,  505,  610,  887,  610,
+      887,  887,  887,  610,  507,  887,  507,  612,  887,  612,
+      887,  887,  887,  612,  509,  887,  509,  614,  887,  614,
+      887,  887,  887,  614,  511,  887,  511,  616,  887,  616,
+      887,  887,  887,  616,  513,  887,  513,   86,  887,  887,
+       86,  887,   86,   86,   86,   86,   86,  669,  669,  669,
+      669,  669,  669,  669,  669,  669,  669,  669,  669,  669,
+      671,  887,  671,  887,  887,  887,  671,  578,  887,  578,
+
+      673,  887,  673,  887,  887,  887,  673,  580,  887,  580,
+      675,  887,  675,  887,  887,  887,  675,  582,  887,  582,
+      677,  887,  677,  887,  887,  887,  677,  584,  887,  584,
+      679,  887,  679,  887,  887,  887,  679,  586,  887,  586,
+      681,  887,  681,  887,  887,  887,  681,  588,  887,  588,
+      683,  887,  683,  887,  887,  887,  683,  590,  887,  590,
+       86,  887,   86,  887,  887,  887,   86,  592,  887,  592,
+      491,  887,  491,  887,  887,  887,  491,  691,  887,  691,
+      887,  887,  887,  691,  606,  887,  606,  693,  887,  693,
+      887,  887,  887,  693,  608,  887,  608,  695,  887,  695,
+
+      887,  887,  887,  695,  610,  887,  610,  140,  887,  140,
+      887,  887,  887,  140,  612,  887,  612,  698,  887,  698,
+      614,  887,  614,   86,  887,  887,   86,  887,   86,   86,
+       86,   86,   86,  616,  887,  616,  669,  669,  669,  669,
+      669,  669,  669,  669,  669,  669,  669,  669,  669,  737,
+      887,  737,  887,  887,  887,  737,  671,  887,  671,  204,
+      887,  204,  887,  887,  887,  204,  673,  887,  673,  740,
+      887,  740,  675,  887,  675,  204,  887,  887,  204,  887,
+      204,  204,  204,  204,  204,  677,  887,  677,  741,  887,
+      741,  679,  887,  679,  681,  887,  681,  742,  887,  742,
+
+      683,  887,  683,   86,  887,   86,  744,  887,  744,  887,
+      887,  887,  744,  691,  887,  691,  269,  887,  269,  887,
+      887,  887,  269,  693,  887,  693,  747,  887,  747,  695,
+      887,  695,  140,  887,  140,  748,  887,  748,  887,  887,
+      887,  748,   86,  887,  887,   86,  887,   86,   86,   86,
+       86,   86,  781,  887,  781,  737,  887,  737,  204,  887,
+      204,  782,  887,  782,  887,  887,  887,  782,  784,  887,
+      784,  887,  887,  887,  784,  786,  887,  786,  887,  887,
+      887,  786,  788,  887,  788,  789,  887,  789,  887,  887,
+      887,  789,  791,  887,  791,  887,  887,  887,  791,  812,
+
+      887,  812,  887,  887,  887,  812,  814,  887,  814,  887,
+      887,  887,  814,  816,  887,  816,  887,  887,  887,  816,
+      818,  887,  818,  887,  887,  887,  818,  820,  887,  820,
+      887,  887,  887,  820,  822,  887,  822,  887,  887,  887,
+      822,  616,  887,  616,  887,  887,  887,  616,  841,  887,
+      841,  887,  887,  887,  841,  677,  887,  677,  887,  887,
+      887,  677,  681,  887,  681,  887,  887,  887,  681,   86,
+      887,   86,  887,  887,  887,   86,  846,  887,  846,  887,
+      887,  887,  846,  140,  887,  140,  887,  887,  887,  140,
+      204,  887,  204,  887,  887,  887,  204,   11,  887,  887,
+
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887
     } ;
 
-static yyconst flex_int16_t yy_chk[2867] =
+static yyconst flex_int16_t yy_chk[2883] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1114,304 +1121,306 @@
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    7,    8,    9,
-       10,   37,   37,   20,   39,    9,   10,  874,    7,    8,
+       10,   37,   37,   20,   39,    9,   10,  886,    7,    8,
        13,   13,   13,   13,   13,   13,   15,   15,   15,   15,
 
        15,   15,   20,   25,   39,   42,   53,   28,   27,   28,
-       28,   28,   28,   28,   28,  108,  114,   25,   29,   25,
+       28,   28,   28,   28,   28,  109,  115,   25,   29,   25,
        27,   27,   27,   29,   53,   35,    7,    8,    9,   10,
        40,   42,   48,   29,   30,   40,   30,   30,   30,   30,
-       30,   30,   35,   61,   35,   35,   44,  869,   44,  108,
-      114,  868,   48,   30,   63,   61,   30,   56,   47,   45,
-       45,   45,   30,   30,   45,   45,   56,   45,   30,   55,
+       30,   30,   35,   62,   35,   35,   44,  302,   44,  109,
+      115,  885,   48,   30,  302,   62,   30,   57,   47,   45,
+       45,   45,   30,   30,   45,   45,   57,   45,   30,   55,
        45,   45,   49,   40,   30,   45,   40,   49,   45,   47,
-       30,   47,   72,  125,   49,  125,   51,   55,   30,   86,
+       30,   47,   56,   64,   49,  164,   51,   55,   30,   73,
        49,   30,   31,   55,   31,   31,   31,   31,   31,   31,
 
-       50,   51,  866,   51,   63,  153,   54,   58,   72,   50,
-       60,   31,   51,   50,   31,   86,   54,   57,   50,   58,
-       31,  153,   50,   54,  141,  156,   31,   58,   60,   57,
-       57,   59,   31,  126,   58,  126,   59,  156,   31,   57,
-       52,  865,   57,   67,   67,   52,   31,   38,   67,   59,
-      141,   38,   38,   52,   38,   52,   38,   38,   52,   38,
-      107,   38,   52,  113,   67,   67,   67,   67,   67,   67,
-       38,   38,   38,  128,   59,  128,  152,   59,   66,   66,
-       66,   66,   66,   66,  107,  152,   66,  113,  863,  862,
-       38,   59,  165,   38,   79,   79,   79,   79,   79,   79,
-
-       81,   81,   81,   81,   81,   81,   82,   82,   82,   82,
-       82,   82,  131,  165,  131,  103,  103,  103,  103,  106,
-       38,   38,   76,   76,  856,  106,  112,   76,  168,   76,
-      110,  133,  112,  133,   76,  102,  102,  102,  102,  102,
-      102,  130,  103,   76,   76,   76,   76,  103,  110,  168,
-      109,  106,  129,  130,   76,  130,  110,  104,  112,  104,
-      104,  104,  104,  104,  104,  149,  129,  102,  129,   76,
-      103,  136,   76,  136,  158,  115,  104,   76,   76,  109,
-      149,   76,   76,  155,  109,  132,  132,  149,  132,   76,
-      158,  104,   76,  115,   76,   76,   76,  104,   76,   84,
-
-      138,  115,  138,   84,   84,  155,  166,  109,   84,   84,
-      105,   84,  105,   84,  150,  105,  105,  105,  105,  105,
-      105,  151,   84,   84,   84,  134,  134,  134,  144,  166,
-      154,  157,  150,  144,  159,  167,  157,  157,  157,  151,
-      157,  157,   84,  161,  157,   84,  157,  105,  154,  160,
-      163,  157,  157,  157,  162,  157,  159,  855,  160,  162,
-      164,  169,  167,  170,  161,  161,  169,  163,  171,  172,
-      164,  144,  162,   84,   98,   98,   98,   98,   98,   98,
-      173,  174,  175,  171,  169,  170,  172,  179,  176,  185,
-       98,   98,  178,   98,   98,  180,  189,  182,  173,  187,
-
-      180,  174,  185,  186,  179,  188,   98,  178,  181,  175,
-      176,   98,   98,   98,  178,  182,   98,  183,   98,  181,
-      184,  191,  190,  186,  188,  184,  187,  528,  183,  181,
-      181,  192,  207,  207,  191,  190,  191,  207,  232,  189,
-      184,  203,  189,  190,  192,  183,  195,  195,  195,  195,
-      195,  195,  196,  196,  195,  528,  854,  196,  198,  198,
-      216,  232,  216,  198,  200,  200,  217,  203,  217,  200,
-      218,  200,  218,  196,  196,  196,  196,  196,  196,  198,
-      198,  198,  198,  198,  198,  200,  200,  200,  200,  200,
-      200,  210,  210,  210,  210,  219,  220,  221,  282,  221,
-
-      222,  222,  223,  222,  223,  224,  224,  224,  220,  219,
-      220,  219,  226,  227,  226,  227,  234,  235,  282,  233,
-      234,  233,  284,  210,  233,  233,  233,  233,  233,  233,
-      241,  239,  239,  277,  239,  239,  264,  234,  264,  234,
-      235,  265,  284,  265,  234,  242,  242,  242,  242,  242,
-      242,  277,  239,  239,  239,  246,  233,  239,  278,  239,
-      276,  280,  242,  279,  241,  243,  243,  243,  243,  243,
-      243,  254,  268,  276,  853,  281,  278,  242,  280,  279,
-      281,  246,  288,  242,  244,  244,  244,  244,  244,  244,
-      253,  253,  253,  253,  253,  253,  251,  254,  268,  287,
-
-      244,  283,  286,  244,  244,  245,  283,  245,  288,  295,
-      245,  245,  245,  245,  245,  245,  244,  287,  251,  849,
-      251,  244,  253,  244,  251,  286,  244,  295,  244,  289,
-      251,  258,  258,  258,  258,  258,  258,  285,  290,  292,
-      291,  294,  251,  293,  289,  291,  251,  297,  292,  301,
-      251,  299,  285,  303,  290,  290,  293,  298,  285,  285,
-      299,  302,  298,  258,  300,  297,  307,  304,  294,  301,
-      306,  300,  304,  305,  303,  303,  306,  308,  305,  302,
-      310,  309,  311,  312,  313,  307,  308,  309,  314,  313,
-      315,  311,  316,  314,  318,  315,  310,  317,  312,  320,
-
-      322,  321,  323,  324,  326,  325,  328,  318,  327,  329,
-      320,  316,  315,  322,  330,  317,  321,  327,  333,  331,
-      334,  326,  335,  337,  323,  325,  324,  333,  328,  336,
-      338,  337,  329,  339,  381,  338,  330,  331,  340,  340,
-      335,  341,  336,  340,  358,  340,  358,  341,  339,  348,
-      348,  348,  348,  349,  349,  349,  349,  359,  381,  359,
-      397,  846,  402,  334,  366,  366,  366,  366,  366,  366,
-      368,  397,  368,  402,  404,  368,  368,  368,  368,  368,
-      368,  348,  367,  367,  367,  367,  367,  367,  370,  370,
-      370,  370,  370,  370,  400,  398,  404,  435,  367,  376,
-
-      843,  367,  367,  371,  371,  371,  371,  371,  371,  376,
-      379,  398,  377,  400,  367,  378,  379,  435,  383,  367,
-      370,  367,  377,  412,  367,  376,  367,  372,  372,  372,
-      372,  372,  372,  399,  382,  371,  383,  378,  377,  378,
-      415,  412,  379,  378,  383,  380,  415,  380,  399,  378,
-      380,  380,  380,  380,  380,  380,  382,  401,  382,  372,
-      407,  378,  382,  403,  405,  378,  401,  408,  382,  378,
-      406,  411,  403,  405,  409,  410,  407,  416,  418,  414,
-      382,  413,  380,  406,  382,  417,  413,  409,  382,  408,
-      419,  410,  410,  411,  414,  421,  417,  418,  416,  423,
-
-      425,  414,  426,  427,  428,  419,  431,  429,  430,  421,
-      433,  423,  427,  429,  436,  431,  427,  437,  438,  439,
-      441,  425,  440,  430,  426,  433,  443,  428,  445,  441,
-      447,  446,  437,  448,  439,  449,  436,  450,  451,  455,
-      438,  452,  440,  443,  457,  633,  450,  460,  453,  458,
-      447,  445,  446,  448,  452,  453,  451,  449,  454,  456,
-      458,  457,  461,  633,  455,  454,  462,  456,  515,  460,
-      488,  461,  462,  471,  471,  471,  471,  456,  482,  482,
-      482,  482,  482,  482,  484,  484,  484,  484,  484,  484,
-      515,  513,  485,  487,  482,  489,  488,  482,  482,  486,
-
-      510,  486,  485,  487,  486,  486,  486,  486,  486,  486,
-      482,  513,  509,  510,  520,  482,  484,  482,  485,  487,
-      482,  489,  482,  491,  491,  491,  491,  491,  491,  509,
-      512,  514,  519,  516,  520,  519,  486,  492,  492,  492,
-      492,  492,  492,  517,  514,  512,  516,  521,  517,  525,
-      518,  522,  523,  492,  525,  842,  492,  492,  493,  841,
-      493,  518,  521,  493,  493,  493,  493,  493,  493,  492,
-      522,  524,  526,  523,  492,  527,  492,  529,  530,  492,
-      524,  492,  531,  526,  532,  533,  529,  536,  527,  535,
-      533,  538,  539,  532,  542,  535,  536,  540,  541,  531,
-
-      530,  544,  545,  542,  546,  547,  549,  554,  556,  539,
-      544,  561,  540,  541,  555,  552,  546,  538,  550,  545,
-      547,  549,  553,  550,  552,  556,  558,  555,  559,  554,
-      560,  553,  562,  561,  558,  563,  564,  560,  559,  565,
-      567,  563,  568,  613,  562,  564,  612,  617,  594,  565,
-      596,  698,  613,  612,  617,  568,  698,  567,  587,  587,
-      587,  587,  587,  587,  588,  588,  588,  588,  588,  588,
-      590,  594,  590,  596,  614,  590,  590,  590,  590,  590,
-      590,  593,  593,  593,  593,  593,  593,  614,  615,  616,
-      587,  589,  589,  589,  589,  589,  589,  595,  611,  622,
-
-      618,  595,  619,  611,  621,  615,  620,  589,  618,  620,
-      589,  589,  616,  593,  623,  624,  611,  621,  595,  619,
-      595,  622,  625,  589,  626,  595,  628,  629,  589,  623,
-      589,  627,  630,  589,  627,  589,  631,  624,  634,  625,
-      632,  635,  637,  628,  638,  644,  626,  630,  639,  632,
-      635,  645,  640,  650,  629,  647,  631,  696,  693,  651,
-      634,  640,  650,  659,  637,  644,  651,  638,  658,  662,
-      639,  661,  647,  659,  697,  840,  839,  658,  645,  693,
-      661,  697,  699,  696,  662,  680,  680,  680,  680,  680,
-      680,  684,  684,  684,  684,  684,  684,  694,  702,  705,
-
-      700,  680,  699,  700,  680,  680,  701,  694,  704,  701,
-      706,  708,  705,  709,  704,  707,  702,  680,  707,  706,
-      712,  711,  680,  684,  680,  710,  714,  680,  710,  680,
-      711,  713,  708,  718,  713,  715,  716,  717,  720,  714,
-      723,  709,  726,  715,  727,  712,  716,  720,  728,  730,
-      717,  731,  752,  751,  718,  753,  749,  730,  751,  754,
-      731,  750,  726,  723,  755,  753,  727,  752,  756,  728,
-      738,  738,  738,  738,  738,  738,  749,  757,  750,  758,
-      757,  755,  754,  759,  761,  763,  764,  761,  763,  767,
-      768,  773,  758,  764,  756,  765,  766,  788,  765,  766,
-
-      790,  791,  738,  792,  767,  793,  792,  797,  794,  795,
-      759,  794,  795,  768,  773,  798,  801,  799,  805,  791,
-      799,  790,  821,  802,  788,  797,  802,  793,  803,  806,
-      804,  803,  824,  823,  805,  822,  823,  825,  801,  804,
-      798,  824,  822,  821,  826,  806,  827,  826,  830,  833,
-      834,  830,  833,  835,  847,  825,  844,  847,  848,  834,
-      857,  845,  835,  827,  850,  844,  845,  850,  848,  851,
-      852,  858,  851,  852,  859,  860,  861,  859,  864,  861,
-      857,  867,  870,  871,  873,  860,  858,  838,  872,  837,
-      836,  870,  832,  831,  873,  829,  828,  820,  819,  818,
-
-      864,  817,  867,  816,  815,  871,  872,  876,  876,  876,
-      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
-      877,  877,  877,  877,  877,  877,  877,  877,  877,  877,
-      877,  877,  877,  878,  878,  878,  878,  878,  878,  878,
-      878,  878,  878,  878,  878,  878,  879,  814,  813,  879,
-      812,  879,  879,  879,  879,  879,  880,  811,  810,  809,
-      880,  880,  880,  880,  880,  880,  881,  881,  881,  881,
-      881,  881,  881,  881,  881,  881,  881,  881,  881,  882,
-      808,  807,  882,  800,  882,  882,  882,  882,  882,  883,
-      796,  883,  883,  789,  883,  883,  883,  883,  883,  883,
-
-      787,  883,  884,  786,  785,  884,  884,  884,  884,  884,
-      884,  884,  884,  784,  884,  885,  885,  885,  885,  885,
-      885,  885,  885,  885,  885,  885,  885,  885,  886,  886,
-      783,  886,  782,  781,  780,  886,  887,  779,  778,  887,
-      777,  887,  887,  887,  887,  887,  888,  776,  888,  775,
-      774,  772,  888,  889,  771,  889,  770,  769,  762,  889,
-      890,  760,  890,  748,  747,  746,  890,  891,  745,  891,
-      744,  743,  742,  891,  892,  741,  892,  740,  737,  736,
-      892,  893,  735,  893,  729,  725,  724,  893,  894,  722,
-      894,  721,  719,  703,  894,  895,  695,  895,  692,  687,
-
-      685,  895,  896,  681,  896,  671,  667,  665,  896,  897,
-      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
-      897,  897,  898,  663,  898,  899,  899,  660,  899,  899,
-      899,  657,  899,  900,  900,  656,  900,  901,  655,  901,
-      654,  653,  652,  901,  902,  649,  902,  648,  646,  643,
-      902,  903,  642,  903,  641,  636,  609,  903,  904,  605,
-      904,  905,  603,  905,  601,  599,  597,  905,  906,  591,
-      906,  907,  585,  583,  907,  581,  907,  907,  907,  907,
-      907,  908,  908,  908,  908,  908,  908,  908,  908,  908,
-      908,  908,  908,  908,  909,  909,  909,  909,  909,  909,
-
-      909,  909,  909,  909,  909,  909,  909,  910,  579,  910,
-      577,  575,  573,  910,  911,  571,  911,  570,  569,  566,
-      911,  912,  557,  912,  551,  548,  543,  912,  913,  537,
-      913,  914,  534,  914,  511,  507,  505,  914,  915,  503,
-      915,  916,  501,  916,  499,  497,  496,  916,  917,  495,
-      917,  918,  494,  918,  483,  480,  478,  918,  919,  477,
-      919,  920,  476,  920,  474,  472,  469,  920,  921,  467,
-      921,  922,  465,  922,  463,  459,  444,  922,  923,  442,
-      923,  924,  434,  924,  432,  424,  422,  924,  925,  420,
-      925,  926,  394,  926,  392,  926,  390,  926,  927,  388,
-
-      927,  387,  927,  386,  927,  928,  928,  373,  928,  928,
-      928,  363,  928,  929,  361,  929,  360,  356,  354,  929,
-      930,  352,  930,  350,  346,  344,  930,  931,  343,  931,
-      342,  332,  319,  931,  932,  296,  932,  933,  275,  933,
-      273,  271,  270,  933,  934,  269,  934,  935,  267,  935,
-      266,  261,  257,  935,  936,  256,  936,  937,  252,  937,
-      249,  248,  237,  937,  938,  236,  938,  939,  229,  228,
-      939,  225,  939,  939,  939,  939,  939,  940,  940,  940,
-      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
-      941,  215,  941,  213,  212,  211,  941,  942,  205,  942,
-
-      943,  204,  943,  202,  197,  177,  943,  944,  148,  944,
-      945,  146,  945,  145,  139,  137,  945,  946,  135,  946,
-      947,  127,  947,  124,  123,  119,  947,  948,  100,  948,
-      949,   97,  949,   94,   92,   85,  949,  950,   71,  950,
-      951,   69,  951,   65,   36,   33,  951,  952,   18,  952,
-      953,   11,  953,    4,    3,    0,  953,  954,    0,  954,
-        0,    0,    0,  954,  955,    0,  955,  956,    0,  956,
-        0,    0,    0,  956,  957,    0,  957,  958,    0,  958,
-        0,  958,    0,  958,  959,    0,  959,    0,    0,    0,
-      959,  960,    0,  960,    0,    0,    0,  960,  961,    0,
-
-      961,  962,    0,  962,    0,    0,    0,  962,  963,    0,
-      963,  964,    0,  964,    0,    0,    0,  964,  965,    0,
-      965,  966,    0,  966,    0,    0,    0,  966,  967,    0,
-      967,  968,    0,  968,    0,    0,    0,  968,  969,    0,
-      969,  970,    0,  970,    0,    0,    0,  970,  971,    0,
-      971,  972,    0,    0,  972,    0,  972,  972,  972,  972,
-      972,  973,  973,  973,  973,  973,  973,  973,  973,  973,
-      973,  973,  973,  973,  974,    0,  974,    0,    0,    0,
-      974,  975,    0,  975,  976,    0,  976,    0,    0,    0,
-      976,  977,    0,  977,  978,    0,  978,    0,    0,    0,
-
-      978,  979,    0,  979,  980,    0,  980,    0,    0,    0,
-      980,  981,    0,  981,  982,    0,  982,    0,    0,    0,
-      982,  983,    0,  983,  984,    0,  984,    0,    0,    0,
-      984,  985,    0,  985,  986,    0,  986,    0,    0,    0,
-      986,  987,    0,  987,  988,    0,  988,    0,    0,    0,
-      988,  989,    0,  989,  990,    0,  990,    0,    0,    0,
-      990,  991,    0,  991,    0,    0,    0,  991,  992,    0,
-      992,  993,    0,  993,    0,    0,    0,  993,  994,    0,
-      994,  995,    0,  995,    0,    0,    0,  995,  996,    0,
-      996,  997,    0,  997,    0,    0,    0,  997,  998,    0,
-
-      998,  999,    0,  999, 1000,    0, 1000, 1001,    0,    0,
-     1001,    0, 1001, 1001, 1001, 1001, 1001, 1002,    0, 1002,
-     1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
-     1003, 1003, 1003, 1004,    0, 1004,    0,    0,    0, 1004,
-     1005,    0, 1005, 1006,    0, 1006,    0,    0,    0, 1006,
-     1007,    0, 1007, 1008,    0, 1008, 1009,    0, 1009, 1010,
-        0,    0, 1010,    0, 1010, 1010, 1010, 1010, 1010, 1011,
-        0, 1011, 1012,    0, 1012, 1013,    0, 1013, 1014,    0,
-     1014, 1015,    0, 1015, 1016,    0, 1016, 1017,    0, 1017,
-     1018,    0, 1018,    0,    0,    0, 1018, 1019,    0, 1019,
-
-     1020,    0, 1020,    0,    0,    0, 1020, 1021,    0, 1021,
-     1022,    0, 1022, 1023,    0, 1023, 1024,    0, 1024, 1025,
-        0, 1025,    0,    0,    0, 1025, 1026,    0,    0, 1026,
-        0, 1026, 1026, 1026, 1026, 1026, 1027,    0, 1027, 1028,
-        0, 1028, 1029,    0, 1029, 1030,    0, 1030,    0,    0,
-        0, 1030, 1031,    0, 1031,    0,    0,    0, 1031, 1032,
-        0, 1032,    0,    0,    0, 1032, 1033,    0, 1033, 1034,
-        0, 1034,    0,    0,    0, 1034, 1035,    0, 1035,    0,
-        0,    0, 1035, 1036,    0, 1036,    0,    0,    0, 1036,
-     1037,    0, 1037,    0,    0,    0, 1037, 1038,    0, 1038,
-
-        0,    0,    0, 1038, 1039,    0, 1039,    0,    0,    0,
-     1039, 1040,    0, 1040,    0,    0,    0, 1040, 1041,    0,
-     1041,    0,    0,    0, 1041, 1042,    0, 1042,    0,    0,
-        0, 1042, 1043,    0, 1043,    0,    0,    0, 1043, 1044,
-        0, 1044,    0,    0,    0, 1044, 1045,    0, 1045,    0,
-        0,    0, 1045, 1046,    0, 1046,    0,    0,    0, 1046,
-     1047,    0, 1047,    0,    0,    0, 1047, 1048,    0, 1048,
-        0,    0,    0, 1048, 1049,    0, 1049,    0,    0,    0,
-     1049,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875
+       50,   51,  164,   51,   56,  154,   54,   59,  877,   50,
+       61,   31,   51,   50,   31,   73,   54,   58,   50,   59,
+       31,  154,   50,   54,   87,  159,   31,   59,   61,   58,
+       58,   60,   31,   64,   59,  126,   60,  126,   31,   58,
+       52,  159,   58,   68,   68,   52,   31,   38,   68,   60,
+       87,   38,   38,   52,   38,   52,   38,   38,   52,   38,
+      108,   38,   52,  114,   68,   68,   68,   68,   68,   68,
+       38,   38,   38,  127,   60,  127,  153,   60,   67,   67,
+       67,   67,   67,   67,  108,  153,   67,  114,  876,  873,
+       38,   60,  166,   38,   80,   80,   80,   80,   80,   80,
+
+       82,   82,   82,   82,   82,   82,   83,   83,   83,   83,
+       83,   83,  129,  166,  129,  104,  104,  104,  104,  107,
+       38,   38,   77,   77,  872,  107,  113,   77,  169,   77,
+      111,  132,  113,  132,   77,  103,  103,  103,  103,  103,
+      103,  131,  104,   77,   77,   77,   77,  104,  111,  169,
+      110,  107,  130,  131,   77,  131,  111,  105,  113,  105,
+      105,  105,  105,  105,  105,  151,  130,  103,  130,   77,
+      104,  134,   77,  134,  281,  116,  105,   77,   77,  110,
+      142,   77,   77,  151,  110,  133,  133,  152,  133,   77,
+      281,  105,   77,  116,   77,   77,   77,  105,   77,   85,
+
+      137,  116,  137,   85,   85,  152,  142,  110,   85,   85,
+      106,   85,  106,   85,  155,  106,  106,  106,  106,  106,
+      106,  150,   85,   85,   85,  135,  135,  135,  139,  145,
+      139,  156,  155,  160,  145,  161,  150,  157,  162,  167,
+      165,  168,   85,  150,  161,   85,  163,  106,  171,  157,
+      165,  163,  172,  156,  173,  160,  181,  176,  170,  162,
+      162,  181,  167,  170,  163,  174,  175,  172,  168,  182,
+      171,  173,  145,   85,   99,   99,   99,   99,   99,   99,
+      177,  170,  179,  174,  176,  184,  175,  183,  180,  185,
+       99,   99,  525,   99,   99,  525,  182,  179,  183,  218,
+
+      185,  218,  177,  184,  179,  180,   99,  191,  183,  183,
+      186,   99,   99,   99,  158,  186,   99,  185,   99,  158,
+      158,  158,  188,  158,  158,  190,  187,  158,  189,  158,
+      186,  205,  193,  189,  158,  158,  158,  627,  158,  187,
+      627,  192,  188,  194,  190,  193,  219,  193,  219,  220,
+      191,  220,  248,  191,  192,  189,  194,  205,  223,  225,
+      223,  225,  192,  197,  197,  197,  197,  197,  197,  198,
+      198,  197,  209,  209,  198,  200,  200,  209,  248,  870,
+      200,  202,  202,  308,  224,  224,  202,  224,  202,  308,
+      198,  198,  198,  198,  198,  198,  200,  200,  200,  200,
+
+      200,  200,  202,  202,  202,  202,  202,  202,  212,  212,
+      212,  212,  221,  222,  226,  226,  226,  228,  229,  228,
+      229,  234,  243,  237,  338,  222,  221,  222,  221,  235,
+      278,  235,  256,  279,  235,  235,  235,  235,  235,  235,
+      212,  236,  270,  278,  234,  236,  237,  280,  291,  241,
+      241,  279,  241,  241,  284,  266,  243,  266,  256,  267,
+      869,  267,  236,  291,  236,  280,  235,  338,  270,  236,
+      241,  241,  241,  282,  284,  241,  289,  241,  244,  244,
+      244,  244,  244,  244,  245,  245,  245,  245,  245,  245,
+      282,  247,  286,  247,  289,  244,  247,  247,  247,  247,
+
+      247,  247,  255,  255,  255,  255,  255,  255,  283,  285,
+      244,  295,  286,  283,  285,  288,  244,  246,  246,  246,
+      246,  246,  246,  253,  295,  292,  260,  260,  260,  260,
+      260,  260,  862,  246,  255,  296,  246,  246,  288,  293,
+      290,  292,  292,  294,  293,  253,  297,  253,  300,  246,
+      287,  253,  294,  300,  246,  303,  246,  253,  260,  246,
+      299,  246,  296,  304,  297,  287,  290,  301,  305,  253,
+      312,  287,  287,  253,  306,  303,  301,  253,  299,  306,
+      307,  304,  309,  310,  314,  307,  312,  311,  313,  305,
+      305,  315,  310,  311,  318,  316,  315,  313,  317,  314,
+
+      316,  309,  320,  317,  319,  322,  323,  324,  326,  327,
+      325,  328,  329,  318,  331,  320,  322,  332,  330,  333,
+      317,  323,  319,  325,  334,  335,  324,  330,  337,  329,
+      326,  328,  327,  339,  340,  341,  331,  337,  335,  342,
+      332,  333,  334,  341,  342,  343,  345,  340,  344,  344,
+      861,  339,  345,  344,  385,  344,  352,  352,  352,  352,
+      343,  353,  353,  353,  353,  362,  363,  362,  363,  370,
+      370,  370,  370,  370,  370,  372,  380,  372,  385,  860,
+      372,  372,  372,  372,  372,  372,  380,  402,  352,  371,
+      371,  371,  371,  371,  371,  374,  374,  374,  374,  374,
+
+      374,  404,  380,  402,  387,  371,  381,  401,  371,  371,
+      375,  375,  375,  375,  375,  375,  381,  383,  401,  382,
+      404,  371,  387,  383,  408,  432,  371,  374,  371,  403,
+      387,  371,  381,  371,  376,  376,  376,  376,  376,  376,
+      386,  382,  375,  382,  403,  405,  408,  382,  432,  383,
+      384,  859,  384,  382,  405,  384,  384,  384,  384,  384,
+      384,  406,  386,  412,  386,  382,  376,  407,  386,  382,
+      409,  410,  406,  382,  386,  411,  407,  415,  416,  409,
+      413,  414,  420,  417,  410,  412,  386,  384,  417,  418,
+      386,  411,  423,  413,  386,  419,  416,  414,  414,  415,
+
+      422,  419,  421,  420,  418,  427,  425,  423,  429,  430,
+      431,  418,  433,  421,  439,  434,  435,  427,  433,  422,
+      425,  437,  440,  431,  441,  435,  442,  443,  445,  429,
+      434,  430,  444,  447,  439,  449,  437,  445,  450,  441,
+      451,  456,  443,  452,  440,  453,  454,  450,  442,  457,
+      447,  455,  444,  460,  461,  463,  494,  458,  449,  456,
+      455,  451,  457,  452,  458,  453,  459,  462,  454,  464,
+      466,  468,  463,  459,  467,  462,  461,  468,  460,  495,
+      464,  491,  494,  467,  521,  462,  477,  477,  477,  477,
+      636,  491,  466,  488,  488,  488,  488,  488,  488,  490,
+
+      490,  490,  490,  490,  490,  495,  521,  491,  493,  488,
+      515,  518,  488,  488,  492,  516,  492,  636,  493,  492,
+      492,  492,  492,  492,  492,  488,  518,  515,  516,  519,
+      488,  490,  488,  520,  493,  488,  524,  488,  497,  497,
+      497,  497,  497,  497,  529,  522,  520,  524,  527,  519,
+      526,  492,  498,  498,  498,  498,  498,  498,  522,  523,
+      530,  533,  531,  527,  523,  529,  528,  531,  498,  530,
+      526,  498,  498,  499,  533,  499,  532,  534,  499,  499,
+      499,  499,  499,  499,  498,  528,  535,  532,  536,  498,
+      537,  498,  538,  539,  498,  535,  498,  541,  539,  542,
+
+      544,  538,  547,  541,  545,  534,  546,  537,  542,  549,
+      536,  547,  550,  551,  557,  552,  554,  544,  549,  545,
+      560,  546,  555,  557,  558,  551,  561,  555,  562,  550,
+      552,  554,  564,  558,  565,  567,  566,  568,  572,  561,
+      564,  569,  560,  566,  565,  562,  571,  569,  572,  568,
+      574,  575,  601,  621,  603,  571,  620,  567,  594,  594,
+      594,  594,  594,  594,  575,  620,  621,  574,  595,  595,
+      595,  595,  595,  595,  597,  601,  597,  603,  639,  597,
+      597,  597,  597,  597,  597,  602,  622,  639,  855,  602,
+      594,  596,  596,  596,  596,  596,  596,  600,  600,  600,
+
+      600,  600,  600,  622,  618,  619,  602,  596,  602,  618,
+      596,  596,  619,  602,  623,  626,  629,  624,  625,  631,
+      633,  628,  618,  596,  624,  630,  625,  632,  596,  600,
+      596,  635,  626,  596,  628,  596,  634,  623,  629,  634,
+      630,  631,  633,  637,  632,  638,  640,  641,  635,  644,
+      642,  645,  646,  651,  650,  657,  668,  656,  637,  642,
+      653,  646,  657,  851,  640,  638,  656,  664,  665,  641,
+      667,  668,  644,  645,  650,  699,  664,  653,  665,  667,
+      651,  686,  686,  686,  686,  686,  686,  690,  690,  690,
+      690,  690,  690,  700,  704,  702,  699,  686,  703,  704,
+
+      686,  686,  705,  700,  706,  703,  707,  706,  708,  707,
+      710,  711,  713,  686,  714,  713,  710,  715,  686,  690,
+      686,  702,  705,  686,  711,  686,  708,  712,  716,  717,
+      718,  716,  721,  720,  719,  714,  712,  719,  717,  722,
+      721,  723,  724,  725,  728,  715,  720,  732,  731,  722,
+      733,  735,  725,  736,  723,  718,  756,  761,  754,  735,
+      758,  756,  736,  724,  755,  757,  759,  728,  731,  732,
+      758,  733,  743,  743,  743,  743,  743,  743,  754,  760,
+      757,  755,  762,  761,  763,  762,  764,  766,  768,  759,
+      766,  768,  769,  772,  773,  770,  760,  763,  770,  769,
+
+      771,  778,  793,  771,  743,  795,  797,  796,  772,  797,
+      798,  799,  800,  764,  799,  800,  802,  773,  803,  804,
+      806,  810,  804,  811,  778,  796,  795,  807,  808,  793,
+      807,  808,  798,  826,  802,  809,  832,  810,  827,  811,
+      830,  829,  806,  803,  809,  827,  828,  848,  831,  828,
+      829,  831,  835,  832,  826,  835,  838,  839,  830,  838,
+      840,  849,  850,  853,  830,  852,  839,  850,  852,  840,
+      849,  854,  856,  853,  857,  856,  854,  857,  858,  863,
+      864,  858,  865,  866,  867,  865,  868,  867,  871,  868,
+      874,  875,  878,  866,  879,  864,  880,  882,  881,  863,
+
+      883,  878,  884,  847,  846,  845,  875,  879,  844,  843,
+      871,  874,  884,  842,  841,  882,  837,  836,  880,  881,
+      834,  833,  883,  888,  888,  888,  888,  888,  888,  888,
+      888,  888,  888,  888,  888,  888,  889,  889,  889,  889,
+      889,  889,  889,  889,  889,  889,  889,  889,  889,  890,
+      890,  890,  890,  890,  890,  890,  890,  890,  890,  890,
+      890,  890,  891,  825,  824,  891,  823,  891,  891,  891,
+      891,  891,  892,  822,  821,  820,  892,  892,  892,  892,
+      892,  892,  893,  893,  893,  893,  893,  893,  893,  893,
+      893,  893,  893,  893,  893,  894,  819,  818,  894,  817,
+
+      894,  894,  894,  894,  894,  895,  816,  895,  895,  815,
+      895,  895,  895,  895,  895,  895,  814,  895,  896,  813,
+      812,  896,  896,  896,  896,  896,  896,  896,  896,  805,
+      896,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  898,  898,  801,  898,  794,  792,
+      791,  898,  899,  790,  789,  899,  788,  899,  899,  899,
+      899,  899,  900,  787,  900,  786,  785,  784,  900,  901,
+      783,  901,  782,  781,  780,  901,  902,  779,  902,  777,
+      776,  775,  902,  903,  774,  903,  767,  765,  753,  903,
+      904,  752,  904,  751,  750,  749,  904,  905,  748,  905,
+
+      747,  746,  745,  905,  906,  742,  906,  741,  740,  734,
+      906,  907,  730,  907,  729,  727,  726,  907,  908,  709,
+      908,  701,  698,  693,  908,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  910,  691,
+      910,  911,  911,  687,  911,  911,  911,  677,  911,  912,
+      912,  673,  912,  913,  671,  913,  669,  666,  663,  913,
+      914,  662,  914,  661,  660,  659,  914,  915,  658,  915,
+      655,  654,  652,  915,  916,  649,  916,  917,  648,  917,
+      647,  643,  616,  917,  918,  612,  918,  919,  610,  608,
+      919,  606,  919,  919,  919,  919,  919,  920,  920,  920,
+
+      920,  920,  920,  920,  920,  920,  920,  920,  920,  920,
+      921,  921,  921,  921,  921,  921,  921,  921,  921,  921,
+      921,  921,  921,  922,  604,  922,  598,  592,  590,  922,
+      923,  588,  923,  586,  584,  582,  923,  924,  580,  924,
+      578,  577,  576,  924,  925,  573,  925,  926,  570,  926,
+      563,  559,  556,  926,  927,  553,  927,  928,  548,  928,
+      543,  540,  517,  928,  929,  513,  929,  930,  511,  930,
+      509,  507,  505,  930,  931,  503,  931,  932,  502,  932,
+      501,  500,  489,  932,  933,  486,  933,  934,  484,  934,
+      483,  482,  480,  934,  935,  478,  935,  936,  475,  936,
+
+      473,  471,  469,  936,  937,  465,  937,  938,  448,  938,
+      446,  938,  438,  938,  939,  436,  939,  428,  939,  426,
+      939,  940,  940,  424,  940,  940,  940,  398,  940,  941,
+      396,  941,  394,  392,  391,  941,  942,  390,  942,  377,
+      367,  365,  942,  943,  364,  943,  360,  358,  356,  943,
+      944,  354,  944,  945,  350,  945,  348,  347,  346,  945,
+      946,  336,  946,  947,  321,  947,  298,  277,  275,  947,
+      948,  273,  948,  949,  272,  949,  271,  269,  268,  949,
+      950,  263,  950,  951,  259,  258,  951,  254,  951,  951,
+      951,  951,  951,  952,  952,  952,  952,  952,  952,  952,
+
+      952,  952,  952,  952,  952,  952,  953,  251,  953,  250,
+      239,  238,  953,  954,  231,  954,  955,  230,  955,  227,
+      217,  215,  955,  956,  214,  956,  957,  213,  957,  207,
+      206,  204,  957,  958,  199,  958,  959,  178,  959,  149,
+      147,  146,  959,  960,  140,  960,  961,  138,  961,  136,
+      128,  125,  961,  962,  124,  962,  963,  120,  963,  101,
+       98,   95,  963,  964,   93,  964,  965,   86,  965,   72,
+       70,   66,  965,  966,   36,  966,   33,   18,   11,  966,
+      967,    4,  967,  968,    3,  968,    0,    0,    0,  968,
+      969,    0,  969,  970,    0,  970,    0,  970,    0,  970,
+
+      971,    0,  971,    0,    0,    0,  971,  972,    0,  972,
+        0,    0,    0,  972,  973,    0,  973,  974,    0,  974,
+        0,    0,    0,  974,  975,    0,  975,  976,    0,  976,
+        0,    0,    0,  976,  977,    0,  977,  978,    0,  978,
+        0,    0,    0,  978,  979,    0,  979,  980,    0,  980,
+        0,    0,    0,  980,  981,    0,  981,  982,    0,  982,
+        0,    0,    0,  982,  983,    0,  983,  984,    0,    0,
+      984,    0,  984,  984,  984,  984,  984,  985,  985,  985,
+      985,  985,  985,  985,  985,  985,  985,  985,  985,  985,
+      986,    0,  986,    0,    0,    0,  986,  987,    0,  987,
+
+      988,    0,  988,    0,    0,    0,  988,  989,    0,  989,
+      990,    0,  990,    0,    0,    0,  990,  991,    0,  991,
+      992,    0,  992,    0,    0,    0,  992,  993,    0,  993,
+      994,    0,  994,    0,    0,    0,  994,  995,    0,  995,
+      996,    0,  996,    0,    0,    0,  996,  997,    0,  997,
+      998,    0,  998,    0,    0,    0,  998,  999,    0,  999,
+     1000,    0, 1000,    0,    0,    0, 1000, 1001,    0, 1001,
+     1002,    0, 1002,    0,    0,    0, 1002, 1003,    0, 1003,
+        0,    0,    0, 1003, 1004,    0, 1004, 1005,    0, 1005,
+        0,    0,    0, 1005, 1006,    0, 1006, 1007,    0, 1007,
+
+        0,    0,    0, 1007, 1008,    0, 1008, 1009,    0, 1009,
+        0,    0,    0, 1009, 1010,    0, 1010, 1011,    0, 1011,
+     1012,    0, 1012, 1013,    0,    0, 1013,    0, 1013, 1013,
+     1013, 1013, 1013, 1014,    0, 1014, 1015, 1015, 1015, 1015,
+     1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1016,
+        0, 1016,    0,    0,    0, 1016, 1017,    0, 1017, 1018,
+        0, 1018,    0,    0,    0, 1018, 1019,    0, 1019, 1020,
+        0, 1020, 1021,    0, 1021, 1022,    0,    0, 1022,    0,
+     1022, 1022, 1022, 1022, 1022, 1023,    0, 1023, 1024,    0,
+     1024, 1025,    0, 1025, 1026,    0, 1026, 1027,    0, 1027,
+
+     1028,    0, 1028, 1029,    0, 1029, 1030,    0, 1030,    0,
+        0,    0, 1030, 1031,    0, 1031, 1032,    0, 1032,    0,
+        0,    0, 1032, 1033,    0, 1033, 1034,    0, 1034, 1035,
+        0, 1035, 1036,    0, 1036, 1037,    0, 1037,    0,    0,
+        0, 1037, 1038,    0,    0, 1038,    0, 1038, 1038, 1038,
+     1038, 1038, 1039,    0, 1039, 1040,    0, 1040, 1041,    0,
+     1041, 1042,    0, 1042,    0,    0,    0, 1042, 1043,    0,
+     1043,    0,    0,    0, 1043, 1044,    0, 1044,    0,    0,
+        0, 1044, 1045,    0, 1045, 1046,    0, 1046,    0,    0,
+        0, 1046, 1047,    0, 1047,    0,    0,    0, 1047, 1048,
+
+        0, 1048,    0,    0,    0, 1048, 1049,    0, 1049,    0,
+        0,    0, 1049, 1050,    0, 1050,    0,    0,    0, 1050,
+     1051,    0, 1051,    0,    0,    0, 1051, 1052,    0, 1052,
+        0,    0,    0, 1052, 1053,    0, 1053,    0,    0,    0,
+     1053, 1054,    0, 1054,    0,    0,    0, 1054, 1055,    0,
+     1055,    0,    0,    0, 1055, 1056,    0, 1056,    0,    0,
+        0, 1056, 1057,    0, 1057,    0,    0,    0, 1057, 1058,
+        0, 1058,    0,    0,    0, 1058, 1059,    0, 1059,    0,
+        0,    0, 1059, 1060,    0, 1060,    0,    0,    0, 1060,
+     1061,    0, 1061,    0,    0,    0, 1061,  887,  887,  887,
+
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[180] =
+static yyconst flex_int32_t yy_rule_can_match_eol[181] =
     {   0,
 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -1420,9 +1429,9 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 
-    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
+    0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        };
+    0,     };
 
 static yy_state_type yy_last_accepting_state;
@@ -1452,6 +1461,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Tue Feb  2 15:06:54 2016
- * Update Count     : 426
+ * Last Modified On : Wed Mar  2 18:07:20 2016
+ * Update Count     : 434
  */
 #line 20 "lex.ll"
@@ -1511,5 +1520,5 @@
 
 
-#line 1514 "Parser/lex.cc"
+#line 1523 "Parser/lex.cc"
 
 #define INITIAL 0
@@ -1706,5 +1715,5 @@
 
 				   /* line directives */
-#line 1709 "Parser/lex.cc"
+#line 1718 "Parser/lex.cc"
 
 	if ( !(yy_init) )
@@ -1760,5 +1769,5 @@
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 876 )
+				if ( yy_current_state >= 888 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
@@ -1766,5 +1775,5 @@
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 2782 );
+		while ( yy_base[yy_current_state] != 2798 );
 
 yy_find_action:
@@ -2003,120 +2012,120 @@
 YY_RULE_SETUP
 #line 203 "lex.ll"
-{ KEYWORD_RETURN(CONTEXT); }			// CFA
+{ KEYWORD_RETURN(CONTINUE); }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 204 "lex.ll"
-{ KEYWORD_RETURN(CONTINUE); }
+{ KEYWORD_RETURN(DEFAULT); }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 205 "lex.ll"
-{ KEYWORD_RETURN(DEFAULT); }
+{ KEYWORD_RETURN(DISABLE); }			// CFA
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 206 "lex.ll"
-{ KEYWORD_RETURN(DISABLE); }			// CFA
+{ KEYWORD_RETURN(DO); }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 207 "lex.ll"
-{ KEYWORD_RETURN(DO); }
+{ KEYWORD_RETURN(DOUBLE); }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 208 "lex.ll"
-{ KEYWORD_RETURN(DOUBLE); }
+{ KEYWORD_RETURN(DTYPE); }				// CFA
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 209 "lex.ll"
-{ KEYWORD_RETURN(DTYPE); }				// CFA
+{ KEYWORD_RETURN(ELSE); }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 210 "lex.ll"
-{ KEYWORD_RETURN(ELSE); }
+{ KEYWORD_RETURN(ENABLE); }				// CFA
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 211 "lex.ll"
-{ KEYWORD_RETURN(ENABLE); }				// CFA
+{ KEYWORD_RETURN(ENUM); }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 212 "lex.ll"
-{ KEYWORD_RETURN(ENUM); }
+{ KEYWORD_RETURN(EXTENSION); }			// GCC
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 213 "lex.ll"
-{ KEYWORD_RETURN(EXTENSION); }			// GCC
+{ KEYWORD_RETURN(EXTERN); }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 214 "lex.ll"
-{ KEYWORD_RETURN(EXTERN); }
+{ KEYWORD_RETURN(FALLTHRU); }			// CFA
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 215 "lex.ll"
-{ KEYWORD_RETURN(FALLTHRU); }			// CFA
+{ KEYWORD_RETURN(FINALLY); }			// CFA
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 216 "lex.ll"
-{ KEYWORD_RETURN(FINALLY); }			// CFA
+{ KEYWORD_RETURN(FLOAT); }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
 #line 217 "lex.ll"
-{ KEYWORD_RETURN(FLOAT); }
+{ KEYWORD_RETURN(FLOAT); }				// GCC
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 218 "lex.ll"
-{ KEYWORD_RETURN(FLOAT); }				// GCC
+{ KEYWORD_RETURN(FOR); }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 219 "lex.ll"
-{ KEYWORD_RETURN(FOR); }
+{ KEYWORD_RETURN(FORALL); }				// CFA
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 220 "lex.ll"
-{ KEYWORD_RETURN(FORALL); }				// CFA
+{ KEYWORD_RETURN(FORTRAN); }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 221 "lex.ll"
-{ KEYWORD_RETURN(FORTRAN); }
+{ KEYWORD_RETURN(FTYPE); }				// CFA
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 222 "lex.ll"
-{ KEYWORD_RETURN(FTYPE); }				// CFA
+{ KEYWORD_RETURN(GENERIC); }			// C11
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 223 "lex.ll"
-{ KEYWORD_RETURN(GENERIC); }			// C11
+{ KEYWORD_RETURN(GOTO); }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 224 "lex.ll"
-{ KEYWORD_RETURN(GOTO); }
+{ KEYWORD_RETURN(IF); }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 225 "lex.ll"
-{ KEYWORD_RETURN(IF); }
+{ KEYWORD_RETURN(IMAGINARY); }			// C99
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 226 "lex.ll"
-{ KEYWORD_RETURN(IMAGINARY); }			// C99
+{ KEYWORD_RETURN(IMAGINARY); }			// GCC
 	YY_BREAK
 case 59:
@@ -2128,10 +2137,10 @@
 YY_RULE_SETUP
 #line 228 "lex.ll"
-{ KEYWORD_RETURN(IMAGINARY); }			// GCC
+{ KEYWORD_RETURN(INLINE); }				// C99
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 229 "lex.ll"
-{ KEYWORD_RETURN(INLINE); }				// C99
+{ KEYWORD_RETURN(INLINE); }				// GCC
 	YY_BREAK
 case 62:
@@ -2143,40 +2152,40 @@
 YY_RULE_SETUP
 #line 231 "lex.ll"
-{ KEYWORD_RETURN(INLINE); }				// GCC
+{ KEYWORD_RETURN(INT); }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 232 "lex.ll"
-{ KEYWORD_RETURN(INT); }
+{ KEYWORD_RETURN(INT); }				// GCC
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 233 "lex.ll"
-{ KEYWORD_RETURN(INT); }				// GCC
+{ KEYWORD_RETURN(LABEL); }				// GCC
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 234 "lex.ll"
-{ KEYWORD_RETURN(LABEL); }				// GCC
+{ KEYWORD_RETURN(LONG); }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 235 "lex.ll"
-{ KEYWORD_RETURN(LONG); }
+{ KEYWORD_RETURN(LVALUE); }				// CFA
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 236 "lex.ll"
-{ KEYWORD_RETURN(LVALUE); }				// CFA
+{ KEYWORD_RETURN(NORETURN); }			// C11
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 237 "lex.ll"
-{ KEYWORD_RETURN(NORETURN); }			// C11
+{ KEYWORD_RETURN(OFFSETOF); }		// GCC
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 238 "lex.ll"
-{ KEYWORD_RETURN(OFFSETOF); }		// GCC
+{ KEYWORD_RETURN(OTYPE); }				// CFA
 	YY_BREAK
 case 71:
@@ -2268,10 +2277,10 @@
 YY_RULE_SETUP
 #line 256 "lex.ll"
+{ KEYWORD_RETURN(TRAIT); }				// CFA
+	YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 257 "lex.ll"
 { KEYWORD_RETURN(TRY); }				// CFA
-	YY_BREAK
-case 89:
-YY_RULE_SETUP
-#line 257 "lex.ll"
-{ KEYWORD_RETURN(TYPE); }				// CFA
 	YY_BREAK
 case 90:
@@ -2308,15 +2317,15 @@
 YY_RULE_SETUP
 #line 264 "lex.ll"
+{ KEYWORD_RETURN(VALIST); }			// GCC
+	YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 265 "lex.ll"
 { KEYWORD_RETURN(VOID); }
 	YY_BREAK
-case 97:
-YY_RULE_SETUP
-#line 265 "lex.ll"
+case 98:
+YY_RULE_SETUP
+#line 266 "lex.ll"
 { KEYWORD_RETURN(VOLATILE); }
-	YY_BREAK
-case 98:
-YY_RULE_SETUP
-#line 266 "lex.ll"
-{ KEYWORD_RETURN(VOLATILE); }			// GCC
 	YY_BREAK
 case 99:
@@ -2328,47 +2337,47 @@
 YY_RULE_SETUP
 #line 268 "lex.ll"
+{ KEYWORD_RETURN(VOLATILE); }			// GCC
+	YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 269 "lex.ll"
 { KEYWORD_RETURN(WHILE); }
 	YY_BREAK
 /* identifier */
-case 101:
-YY_RULE_SETUP
-#line 271 "lex.ll"
+case 102:
+YY_RULE_SETUP
+#line 272 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 102:
-YY_RULE_SETUP
-#line 272 "lex.ll"
+case 103:
+YY_RULE_SETUP
+#line 273 "lex.ll"
 { ATTRIBUTE_RETURN(); }
 	YY_BREAK
-case 103:
-YY_RULE_SETUP
-#line 273 "lex.ll"
+case 104:
+YY_RULE_SETUP
+#line 274 "lex.ll"
 { BEGIN BKQUOTE; }
 	YY_BREAK
-case 104:
-YY_RULE_SETUP
-#line 274 "lex.ll"
+case 105:
+YY_RULE_SETUP
+#line 275 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 105:
-YY_RULE_SETUP
-#line 275 "lex.ll"
+case 106:
+YY_RULE_SETUP
+#line 276 "lex.ll"
 { BEGIN 0; }
 	YY_BREAK
 /* numeric constants */
-case 106:
-YY_RULE_SETUP
-#line 278 "lex.ll"
+case 107:
+YY_RULE_SETUP
+#line 279 "lex.ll"
 { NUMERIC_RETURN(ZERO); }				// CFA
 	YY_BREAK
-case 107:
-YY_RULE_SETUP
-#line 279 "lex.ll"
+case 108:
+YY_RULE_SETUP
+#line 280 "lex.ll"
 { NUMERIC_RETURN(ONE); }				// CFA
-	YY_BREAK
-case 108:
-YY_RULE_SETUP
-#line 280 "lex.ll"
-{ NUMERIC_RETURN(INTEGERconstant); }
 	YY_BREAK
 case 109:
@@ -2385,5 +2394,5 @@
 YY_RULE_SETUP
 #line 283 "lex.ll"
-{ NUMERIC_RETURN(FLOATINGconstant); }
+{ NUMERIC_RETURN(INTEGERconstant); }
 	YY_BREAK
 case 112:
@@ -2392,63 +2401,63 @@
 { NUMERIC_RETURN(FLOATINGconstant); }
 	YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 285 "lex.ll"
+{ NUMERIC_RETURN(FLOATINGconstant); }
+	YY_BREAK
 /* character constant, allows empty value */
-case 113:
-YY_RULE_SETUP
-#line 287 "lex.ll"
+case 114:
+YY_RULE_SETUP
+#line 288 "lex.ll"
 { BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
 	YY_BREAK
-case 114:
-YY_RULE_SETUP
-#line 288 "lex.ll"
+case 115:
+YY_RULE_SETUP
+#line 289 "lex.ll"
 { *strtext += std::string( yytext ); }
 	YY_BREAK
-case 115:
-/* rule 115 can match eol */
-YY_RULE_SETUP
-#line 289 "lex.ll"
+case 116:
+/* rule 116 can match eol */
+YY_RULE_SETUP
+#line 290 "lex.ll"
 { BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
 	YY_BREAK
 /* ' stop highlighting */
 /* string constant */
-case 116:
-YY_RULE_SETUP
-#line 293 "lex.ll"
+case 117:
+YY_RULE_SETUP
+#line 294 "lex.ll"
 { BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
 	YY_BREAK
-case 117:
-YY_RULE_SETUP
-#line 294 "lex.ll"
+case 118:
+YY_RULE_SETUP
+#line 295 "lex.ll"
 { *strtext += std::string( yytext ); }
 	YY_BREAK
-case 118:
-/* rule 118 can match eol */
-YY_RULE_SETUP
-#line 295 "lex.ll"
+case 119:
+/* rule 119 can match eol */
+YY_RULE_SETUP
+#line 296 "lex.ll"
 { BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
 	YY_BREAK
 /* " stop highlighting */
 /* common character/string constant */
-case 119:
-YY_RULE_SETUP
-#line 299 "lex.ll"
+case 120:
+YY_RULE_SETUP
+#line 300 "lex.ll"
 { rm_underscore(); *strtext += std::string( yytext ); }
 	YY_BREAK
-case 120:
-/* rule 120 can match eol */
-YY_RULE_SETUP
-#line 300 "lex.ll"
+case 121:
+/* rule 121 can match eol */
+YY_RULE_SETUP
+#line 301 "lex.ll"
 {}						// continuation (ALSO HANDLED BY CPP)
 	YY_BREAK
-case 121:
-YY_RULE_SETUP
-#line 301 "lex.ll"
+case 122:
+YY_RULE_SETUP
+#line 302 "lex.ll"
 { *strtext += std::string( yytext ); } // unknown escape character
 	YY_BREAK
 /* punctuation */
-case 122:
-YY_RULE_SETUP
-#line 304 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
 case 123:
 YY_RULE_SETUP
@@ -2479,10 +2488,10 @@
 YY_RULE_SETUP
 #line 310 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 311 "lex.ll"
 { ASCIIOP_RETURN(); }					// also operator
-	YY_BREAK
-case 129:
-YY_RULE_SETUP
-#line 311 "lex.ll"
-{ ASCIIOP_RETURN(); }
 	YY_BREAK
 case 130:
@@ -2494,38 +2503,38 @@
 YY_RULE_SETUP
 #line 313 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 314 "lex.ll"
 { ASCIIOP_RETURN(); }					// also operator
 	YY_BREAK
-case 132:
-YY_RULE_SETUP
-#line 314 "lex.ll"
+case 133:
+YY_RULE_SETUP
+#line 315 "lex.ll"
 { NAMEDOP_RETURN(ELLIPSIS); }
 	YY_BREAK
 /* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
-case 133:
-YY_RULE_SETUP
-#line 317 "lex.ll"
+case 134:
+YY_RULE_SETUP
+#line 318 "lex.ll"
 { RETURN_VAL('['); }
 	YY_BREAK
-case 134:
-YY_RULE_SETUP
-#line 318 "lex.ll"
+case 135:
+YY_RULE_SETUP
+#line 319 "lex.ll"
 { RETURN_VAL(']'); }
 	YY_BREAK
-case 135:
-YY_RULE_SETUP
-#line 319 "lex.ll"
+case 136:
+YY_RULE_SETUP
+#line 320 "lex.ll"
 { RETURN_VAL('{'); }
 	YY_BREAK
-case 136:
-YY_RULE_SETUP
-#line 320 "lex.ll"
+case 137:
+YY_RULE_SETUP
+#line 321 "lex.ll"
 { RETURN_VAL('}'); }
 	YY_BREAK
 /* operators */
-case 137:
-YY_RULE_SETUP
-#line 323 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
 case 138:
 YY_RULE_SETUP
@@ -2595,122 +2604,122 @@
 case 151:
 YY_RULE_SETUP
-#line 338 "lex.ll"
+#line 337 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 339 "lex.ll"
 { NAMEDOP_RETURN(ICR); }
 	YY_BREAK
-case 152:
-YY_RULE_SETUP
-#line 339 "lex.ll"
+case 153:
+YY_RULE_SETUP
+#line 340 "lex.ll"
 { NAMEDOP_RETURN(DECR); }
 	YY_BREAK
-case 153:
-YY_RULE_SETUP
-#line 340 "lex.ll"
+case 154:
+YY_RULE_SETUP
+#line 341 "lex.ll"
 { NAMEDOP_RETURN(EQ); }
 	YY_BREAK
-case 154:
-YY_RULE_SETUP
-#line 341 "lex.ll"
+case 155:
+YY_RULE_SETUP
+#line 342 "lex.ll"
 { NAMEDOP_RETURN(NE); }
 	YY_BREAK
-case 155:
-YY_RULE_SETUP
-#line 342 "lex.ll"
+case 156:
+YY_RULE_SETUP
+#line 343 "lex.ll"
 { NAMEDOP_RETURN(LS); }
 	YY_BREAK
-case 156:
-YY_RULE_SETUP
-#line 343 "lex.ll"
+case 157:
+YY_RULE_SETUP
+#line 344 "lex.ll"
 { NAMEDOP_RETURN(RS); }
 	YY_BREAK
-case 157:
-YY_RULE_SETUP
-#line 344 "lex.ll"
+case 158:
+YY_RULE_SETUP
+#line 345 "lex.ll"
 { NAMEDOP_RETURN(LE); }
 	YY_BREAK
-case 158:
-YY_RULE_SETUP
-#line 345 "lex.ll"
+case 159:
+YY_RULE_SETUP
+#line 346 "lex.ll"
 { NAMEDOP_RETURN(GE); }
 	YY_BREAK
-case 159:
-YY_RULE_SETUP
-#line 346 "lex.ll"
+case 160:
+YY_RULE_SETUP
+#line 347 "lex.ll"
 { NAMEDOP_RETURN(ANDAND); }
 	YY_BREAK
-case 160:
-YY_RULE_SETUP
-#line 347 "lex.ll"
+case 161:
+YY_RULE_SETUP
+#line 348 "lex.ll"
 { NAMEDOP_RETURN(OROR); }
 	YY_BREAK
-case 161:
-YY_RULE_SETUP
-#line 348 "lex.ll"
+case 162:
+YY_RULE_SETUP
+#line 349 "lex.ll"
 { NAMEDOP_RETURN(ARROW); }
 	YY_BREAK
-case 162:
-YY_RULE_SETUP
-#line 349 "lex.ll"
+case 163:
+YY_RULE_SETUP
+#line 350 "lex.ll"
 { NAMEDOP_RETURN(PLUSassign); }
 	YY_BREAK
-case 163:
-YY_RULE_SETUP
-#line 350 "lex.ll"
+case 164:
+YY_RULE_SETUP
+#line 351 "lex.ll"
 { NAMEDOP_RETURN(MINUSassign); }
 	YY_BREAK
-case 164:
-YY_RULE_SETUP
-#line 351 "lex.ll"
+case 165:
+YY_RULE_SETUP
+#line 352 "lex.ll"
 { NAMEDOP_RETURN(MULTassign); }
 	YY_BREAK
-case 165:
-YY_RULE_SETUP
-#line 352 "lex.ll"
+case 166:
+YY_RULE_SETUP
+#line 353 "lex.ll"
 { NAMEDOP_RETURN(DIVassign); }
 	YY_BREAK
-case 166:
-YY_RULE_SETUP
-#line 353 "lex.ll"
+case 167:
+YY_RULE_SETUP
+#line 354 "lex.ll"
 { NAMEDOP_RETURN(MODassign); }
 	YY_BREAK
-case 167:
-YY_RULE_SETUP
-#line 354 "lex.ll"
+case 168:
+YY_RULE_SETUP
+#line 355 "lex.ll"
 { NAMEDOP_RETURN(ANDassign); }
 	YY_BREAK
-case 168:
-YY_RULE_SETUP
-#line 355 "lex.ll"
+case 169:
+YY_RULE_SETUP
+#line 356 "lex.ll"
 { NAMEDOP_RETURN(ORassign); }
 	YY_BREAK
-case 169:
-YY_RULE_SETUP
-#line 356 "lex.ll"
+case 170:
+YY_RULE_SETUP
+#line 357 "lex.ll"
 { NAMEDOP_RETURN(ERassign); }
 	YY_BREAK
-case 170:
-YY_RULE_SETUP
-#line 357 "lex.ll"
+case 171:
+YY_RULE_SETUP
+#line 358 "lex.ll"
 { NAMEDOP_RETURN(LSassign); }
 	YY_BREAK
-case 171:
-YY_RULE_SETUP
-#line 358 "lex.ll"
+case 172:
+YY_RULE_SETUP
+#line 359 "lex.ll"
 { NAMEDOP_RETURN(RSassign); }
 	YY_BREAK
-case 172:
-YY_RULE_SETUP
-#line 360 "lex.ll"
+case 173:
+YY_RULE_SETUP
+#line 361 "lex.ll"
 { NAMEDOP_RETURN(ATassign); }
 	YY_BREAK
 /* CFA, operator identifier */
-case 173:
-YY_RULE_SETUP
-#line 363 "lex.ll"
+case 174:
+YY_RULE_SETUP
+#line 364 "lex.ll"
 { IDENTIFIER_RETURN(); }				// unary
-	YY_BREAK
-case 174:
-YY_RULE_SETUP
-#line 364 "lex.ll"
-{ IDENTIFIER_RETURN(); }
 	YY_BREAK
 case 175:
@@ -2722,4 +2731,9 @@
 YY_RULE_SETUP
 #line 366 "lex.ll"
+{ IDENTIFIER_RETURN(); }
+	YY_BREAK
+case 177:
+YY_RULE_SETUP
+#line 367 "lex.ll"
 { IDENTIFIER_RETURN(); }		// binary
 	YY_BREAK
@@ -2750,7 +2764,7 @@
 	  an argument list.
 	*/
-case 177:
-YY_RULE_SETUP
-#line 393 "lex.ll"
+case 178:
+YY_RULE_SETUP
+#line 394 "lex.ll"
 {
 	// 1 or 2 character unary operator ?
@@ -2765,15 +2779,15 @@
 	YY_BREAK
 /* unknown characters */
-case 178:
-YY_RULE_SETUP
-#line 405 "lex.ll"
+case 179:
+YY_RULE_SETUP
+#line 406 "lex.ll"
 { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
 	YY_BREAK
-case 179:
-YY_RULE_SETUP
-#line 407 "lex.ll"
+case 180:
+YY_RULE_SETUP
+#line 408 "lex.ll"
 ECHO;
 	YY_BREAK
-#line 2778 "Parser/lex.cc"
+#line 2792 "Parser/lex.cc"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(COMMENT):
@@ -3072,5 +3086,5 @@
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 876 )
+			if ( yy_current_state >= 888 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
@@ -3100,9 +3114,9 @@
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 876 )
+		if ( yy_current_state >= 888 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 875);
+	yy_is_jam = (yy_current_state == 887);
 
 	return yy_is_jam ? 0 : yy_current_state;
@@ -3750,5 +3764,5 @@
 #define YYTABLES_NAME "yytables"
 
-#line 407 "lex.ll"
+#line 408 "lex.ll"
 
 
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/lex.ll	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Tue Feb  2 15:06:54 2016
- * Update Count     : 426
+ * Last Modified On : Wed Mar  2 18:07:20 2016
+ * Update Count     : 434
  */
 
@@ -137,5 +137,5 @@
 %%
 				   /* line directives */
-^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["][^\n]*"\n" {
+^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" {
 	/* " stop highlighting */
 	char *end_num;
@@ -201,5 +201,4 @@
 __const			{ KEYWORD_RETURN(CONST); }				// GCC
 __const__		{ KEYWORD_RETURN(CONST); }				// GCC
-context			{ KEYWORD_RETURN(CONTEXT); }			// CFA
 continue		{ KEYWORD_RETURN(CONTINUE); }
 default			{ KEYWORD_RETURN(DEFAULT); }
@@ -237,4 +236,5 @@
 _Noreturn		{ KEYWORD_RETURN(NORETURN); }			// C11
 __builtin_offsetof { KEYWORD_RETURN(OFFSETOF); }		// GCC
+otype			{ KEYWORD_RETURN(OTYPE); }				// CFA
 register		{ KEYWORD_RETURN(REGISTER); }
 restrict		{ KEYWORD_RETURN(RESTRICT); }			// C99
@@ -254,6 +254,6 @@
 throw			{ KEYWORD_RETURN(THROW); }				// CFA
 throwResume		{ KEYWORD_RETURN(THROWRESUME); }		// CFA
+trait			{ KEYWORD_RETURN(TRAIT); }				// CFA
 try				{ KEYWORD_RETURN(TRY); }				// CFA
-type			{ KEYWORD_RETURN(TYPE); }				// CFA
 typedef			{ KEYWORD_RETURN(TYPEDEF); }
 typeof			{ KEYWORD_RETURN(TYPEOF); }				// GCC
@@ -262,4 +262,5 @@
 union			{ KEYWORD_RETURN(UNION); }
 unsigned		{ KEYWORD_RETURN(UNSIGNED); }
+__builtin_va_list { KEYWORD_RETURN(VALIST); }			// GCC
 void			{ KEYWORD_RETURN(VOID); }
 volatile		{ KEYWORD_RETURN(VOLATILE); }
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/parser.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -138,88 +138,89 @@
      SIGNED = 277,
      UNSIGNED = 278,
-     BOOL = 279,
-     COMPLEX = 280,
-     IMAGINARY = 281,
-     TYPEOF = 282,
-     LABEL = 283,
-     ENUM = 284,
-     STRUCT = 285,
-     UNION = 286,
-     TYPE = 287,
-     FTYPE = 288,
-     DTYPE = 289,
-     CONTEXT = 290,
-     SIZEOF = 291,
-     OFFSETOF = 292,
-     ATTRIBUTE = 293,
-     EXTENSION = 294,
-     IF = 295,
-     ELSE = 296,
-     SWITCH = 297,
-     CASE = 298,
-     DEFAULT = 299,
-     DO = 300,
-     WHILE = 301,
-     FOR = 302,
-     BREAK = 303,
-     CONTINUE = 304,
-     GOTO = 305,
-     RETURN = 306,
-     CHOOSE = 307,
-     DISABLE = 308,
-     ENABLE = 309,
-     FALLTHRU = 310,
-     TRY = 311,
-     CATCH = 312,
-     CATCHRESUME = 313,
-     FINALLY = 314,
-     THROW = 315,
-     THROWRESUME = 316,
-     AT = 317,
-     ASM = 318,
-     ALIGNAS = 319,
-     ALIGNOF = 320,
-     ATOMIC = 321,
-     GENERIC = 322,
-     NORETURN = 323,
-     STATICASSERT = 324,
-     THREADLOCAL = 325,
-     IDENTIFIER = 326,
-     QUOTED_IDENTIFIER = 327,
-     TYPEDEFname = 328,
-     TYPEGENname = 329,
-     ATTR_IDENTIFIER = 330,
-     ATTR_TYPEDEFname = 331,
-     ATTR_TYPEGENname = 332,
-     INTEGERconstant = 333,
-     FLOATINGconstant = 334,
-     CHARACTERconstant = 335,
-     STRINGliteral = 336,
-     ZERO = 337,
-     ONE = 338,
-     ARROW = 339,
-     ICR = 340,
-     DECR = 341,
-     LS = 342,
-     RS = 343,
-     LE = 344,
-     GE = 345,
-     EQ = 346,
-     NE = 347,
-     ANDAND = 348,
-     OROR = 349,
-     ELLIPSIS = 350,
-     MULTassign = 351,
-     DIVassign = 352,
-     MODassign = 353,
-     PLUSassign = 354,
-     MINUSassign = 355,
-     LSassign = 356,
-     RSassign = 357,
-     ANDassign = 358,
-     ERassign = 359,
-     ORassign = 360,
-     ATassign = 361,
-     THEN = 362
+     VALIST = 279,
+     BOOL = 280,
+     COMPLEX = 281,
+     IMAGINARY = 282,
+     TYPEOF = 283,
+     LABEL = 284,
+     ENUM = 285,
+     STRUCT = 286,
+     UNION = 287,
+     OTYPE = 288,
+     FTYPE = 289,
+     DTYPE = 290,
+     TRAIT = 291,
+     SIZEOF = 292,
+     OFFSETOF = 293,
+     ATTRIBUTE = 294,
+     EXTENSION = 295,
+     IF = 296,
+     ELSE = 297,
+     SWITCH = 298,
+     CASE = 299,
+     DEFAULT = 300,
+     DO = 301,
+     WHILE = 302,
+     FOR = 303,
+     BREAK = 304,
+     CONTINUE = 305,
+     GOTO = 306,
+     RETURN = 307,
+     CHOOSE = 308,
+     DISABLE = 309,
+     ENABLE = 310,
+     FALLTHRU = 311,
+     TRY = 312,
+     CATCH = 313,
+     CATCHRESUME = 314,
+     FINALLY = 315,
+     THROW = 316,
+     THROWRESUME = 317,
+     AT = 318,
+     ASM = 319,
+     ALIGNAS = 320,
+     ALIGNOF = 321,
+     ATOMIC = 322,
+     GENERIC = 323,
+     NORETURN = 324,
+     STATICASSERT = 325,
+     THREADLOCAL = 326,
+     IDENTIFIER = 327,
+     QUOTED_IDENTIFIER = 328,
+     TYPEDEFname = 329,
+     TYPEGENname = 330,
+     ATTR_IDENTIFIER = 331,
+     ATTR_TYPEDEFname = 332,
+     ATTR_TYPEGENname = 333,
+     INTEGERconstant = 334,
+     FLOATINGconstant = 335,
+     CHARACTERconstant = 336,
+     STRINGliteral = 337,
+     ZERO = 338,
+     ONE = 339,
+     ARROW = 340,
+     ICR = 341,
+     DECR = 342,
+     LS = 343,
+     RS = 344,
+     LE = 345,
+     GE = 346,
+     EQ = 347,
+     NE = 348,
+     ANDAND = 349,
+     OROR = 350,
+     ELLIPSIS = 351,
+     MULTassign = 352,
+     DIVassign = 353,
+     MODassign = 354,
+     PLUSassign = 355,
+     MINUSassign = 356,
+     LSassign = 357,
+     RSassign = 358,
+     ANDassign = 359,
+     ERassign = 360,
+     ORassign = 361,
+     ATassign = 362,
+     THEN = 363
    };
 #endif
@@ -246,88 +247,89 @@
 #define SIGNED 277
 #define UNSIGNED 278
-#define BOOL 279
-#define COMPLEX 280
-#define IMAGINARY 281
-#define TYPEOF 282
-#define LABEL 283
-#define ENUM 284
-#define STRUCT 285
-#define UNION 286
-#define TYPE 287
-#define FTYPE 288
-#define DTYPE 289
-#define CONTEXT 290
-#define SIZEOF 291
-#define OFFSETOF 292
-#define ATTRIBUTE 293
-#define EXTENSION 294
-#define IF 295
-#define ELSE 296
-#define SWITCH 297
-#define CASE 298
-#define DEFAULT 299
-#define DO 300
-#define WHILE 301
-#define FOR 302
-#define BREAK 303
-#define CONTINUE 304
-#define GOTO 305
-#define RETURN 306
-#define CHOOSE 307
-#define DISABLE 308
-#define ENABLE 309
-#define FALLTHRU 310
-#define TRY 311
-#define CATCH 312
-#define CATCHRESUME 313
-#define FINALLY 314
-#define THROW 315
-#define THROWRESUME 316
-#define AT 317
-#define ASM 318
-#define ALIGNAS 319
-#define ALIGNOF 320
-#define ATOMIC 321
-#define GENERIC 322
-#define NORETURN 323
-#define STATICASSERT 324
-#define THREADLOCAL 325
-#define IDENTIFIER 326
-#define QUOTED_IDENTIFIER 327
-#define TYPEDEFname 328
-#define TYPEGENname 329
-#define ATTR_IDENTIFIER 330
-#define ATTR_TYPEDEFname 331
-#define ATTR_TYPEGENname 332
-#define INTEGERconstant 333
-#define FLOATINGconstant 334
-#define CHARACTERconstant 335
-#define STRINGliteral 336
-#define ZERO 337
-#define ONE 338
-#define ARROW 339
-#define ICR 340
-#define DECR 341
-#define LS 342
-#define RS 343
-#define LE 344
-#define GE 345
-#define EQ 346
-#define NE 347
-#define ANDAND 348
-#define OROR 349
-#define ELLIPSIS 350
-#define MULTassign 351
-#define DIVassign 352
-#define MODassign 353
-#define PLUSassign 354
-#define MINUSassign 355
-#define LSassign 356
-#define RSassign 357
-#define ANDassign 358
-#define ERassign 359
-#define ORassign 360
-#define ATassign 361
-#define THEN 362
+#define VALIST 279
+#define BOOL 280
+#define COMPLEX 281
+#define IMAGINARY 282
+#define TYPEOF 283
+#define LABEL 284
+#define ENUM 285
+#define STRUCT 286
+#define UNION 287
+#define OTYPE 288
+#define FTYPE 289
+#define DTYPE 290
+#define TRAIT 291
+#define SIZEOF 292
+#define OFFSETOF 293
+#define ATTRIBUTE 294
+#define EXTENSION 295
+#define IF 296
+#define ELSE 297
+#define SWITCH 298
+#define CASE 299
+#define DEFAULT 300
+#define DO 301
+#define WHILE 302
+#define FOR 303
+#define BREAK 304
+#define CONTINUE 305
+#define GOTO 306
+#define RETURN 307
+#define CHOOSE 308
+#define DISABLE 309
+#define ENABLE 310
+#define FALLTHRU 311
+#define TRY 312
+#define CATCH 313
+#define CATCHRESUME 314
+#define FINALLY 315
+#define THROW 316
+#define THROWRESUME 317
+#define AT 318
+#define ASM 319
+#define ALIGNAS 320
+#define ALIGNOF 321
+#define ATOMIC 322
+#define GENERIC 323
+#define NORETURN 324
+#define STATICASSERT 325
+#define THREADLOCAL 326
+#define IDENTIFIER 327
+#define QUOTED_IDENTIFIER 328
+#define TYPEDEFname 329
+#define TYPEGENname 330
+#define ATTR_IDENTIFIER 331
+#define ATTR_TYPEDEFname 332
+#define ATTR_TYPEGENname 333
+#define INTEGERconstant 334
+#define FLOATINGconstant 335
+#define CHARACTERconstant 336
+#define STRINGliteral 337
+#define ZERO 338
+#define ONE 339
+#define ARROW 340
+#define ICR 341
+#define DECR 342
+#define LS 343
+#define RS 344
+#define LE 345
+#define GE 346
+#define EQ 347
+#define NE 348
+#define ANDAND 349
+#define OROR 350
+#define ELLIPSIS 351
+#define MULTassign 352
+#define DIVassign 353
+#define MODassign 354
+#define PLUSassign 355
+#define MINUSassign 356
+#define LSassign 357
+#define RSassign 358
+#define ANDassign 359
+#define ERassign 360
+#define ORassign 361
+#define ATassign 362
+#define THEN 363
 
 
@@ -339,5 +341,5 @@
 
 /* Line 293 of yacc.c  */
-#line 110 "parser.yy"
+#line 111 "parser.yy"
 
 	Token tok;
@@ -356,5 +358,5 @@
 
 /* Line 293 of yacc.c  */
-#line 359 "Parser/parser.cc"
+#line 361 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -368,5 +370,5 @@
 
 /* Line 343 of yacc.c  */
-#line 371 "Parser/parser.cc"
+#line 373 "Parser/parser.cc"
 
 #ifdef short
@@ -585,20 +587,20 @@
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  248
+#define YYFINAL  249
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   11042
+#define YYLAST   11290
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  132
+#define YYNTOKENS  133
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  238
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  751
+#define YYNRULES  752
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1578
+#define YYNSTATES  1579
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   362
+#define YYMAXUTOK   363
 
 #define YYTRANSLATE(YYX)						\
@@ -611,14 +613,14 @@
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   117,     2,     2,     2,   124,   119,     2,
-     108,   109,   118,   120,   115,   121,   112,   123,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   116,   131,
-     125,   130,   126,   129,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   118,     2,     2,     2,   125,   120,     2,
+     109,   110,   119,   121,   116,   122,   113,   124,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   117,   132,
+     126,   131,   127,   130,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   110,     2,   111,   127,     2,     2,     2,     2,     2,
+       2,   111,     2,   112,   128,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   113,   128,   114,   122,     2,     2,     2,
+       2,     2,     2,   114,   129,   115,   123,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -644,5 +646,5 @@
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107
+     105,   106,   107,   108
 };
 
@@ -685,47 +687,47 @@
     1156,  1158,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
     1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,  1193,  1195,
-    1197,  1199,  1201,  1203,  1205,  1208,  1211,  1215,  1219,  1221,
-    1225,  1227,  1230,  1233,  1236,  1241,  1246,  1251,  1256,  1258,
-    1261,  1264,  1268,  1270,  1273,  1276,  1278,  1281,  1284,  1288,
-    1290,  1293,  1296,  1298,  1300,  1305,  1308,  1314,  1322,  1325,
-    1328,  1331,  1333,  1336,  1339,  1343,  1346,  1350,  1352,  1355,
-    1359,  1362,  1365,  1370,  1371,  1373,  1376,  1379,  1381,  1382,
-    1384,  1387,  1390,  1396,  1403,  1406,  1409,  1414,  1415,  1418,
-    1419,  1421,  1423,  1425,  1431,  1437,  1443,  1445,  1451,  1457,
-    1467,  1469,  1475,  1476,  1478,  1480,  1486,  1488,  1490,  1496,
-    1502,  1504,  1508,  1512,  1517,  1519,  1521,  1523,  1525,  1528,
-    1530,  1534,  1538,  1540,  1543,  1545,  1549,  1551,  1553,  1555,
-    1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1574,  1576,
-    1578,  1580,  1583,  1584,  1587,  1590,  1592,  1597,  1598,  1600,
-    1603,  1607,  1612,  1615,  1618,  1620,  1623,  1625,  1628,  1634,
-    1640,  1648,  1655,  1657,  1660,  1663,  1667,  1669,  1672,  1675,
-    1680,  1683,  1688,  1689,  1694,  1697,  1699,  1701,  1703,  1704,
-    1707,  1713,  1719,  1733,  1735,  1737,  1741,  1745,  1748,  1752,
-    1756,  1759,  1764,  1766,  1773,  1783,  1784,  1796,  1798,  1802,
-    1806,  1810,  1812,  1814,  1820,  1823,  1829,  1830,  1832,  1834,
-    1838,  1839,  1841,  1843,  1845,  1847,  1848,  1855,  1858,  1860,
-    1863,  1868,  1871,  1875,  1879,  1883,  1888,  1894,  1900,  1906,
-    1913,  1915,  1917,  1919,  1923,  1924,  1930,  1931,  1933,  1935,
-    1938,  1945,  1947,  1951,  1952,  1954,  1959,  1961,  1963,  1965,
-    1967,  1970,  1972,  1975,  1978,  1980,  1984,  1987,  1991,  1995,
-    1998,  2003,  2008,  2012,  2021,  2025,  2028,  2030,  2033,  2040,
-    2049,  2053,  2056,  2060,  2064,  2069,  2074,  2078,  2080,  2082,
-    2084,  2089,  2096,  2100,  2103,  2107,  2111,  2116,  2121,  2125,
-    2128,  2130,  2133,  2136,  2138,  2142,  2145,  2149,  2153,  2156,
-    2161,  2166,  2170,  2177,  2186,  2190,  2193,  2195,  2198,  2201,
-    2204,  2208,  2212,  2215,  2220,  2225,  2229,  2236,  2245,  2249,
-    2252,  2254,  2257,  2260,  2262,  2264,  2267,  2271,  2275,  2278,
-    2283,  2290,  2299,  2301,  2304,  2307,  2309,  2312,  2315,  2319,
-    2323,  2325,  2330,  2335,  2339,  2345,  2354,  2358,  2361,  2365,
-    2367,  2373,  2379,  2386,  2393,  2395,  2398,  2401,  2403,  2406,
-    2409,  2413,  2417,  2419,  2424,  2429,  2433,  2439,  2448,  2452,
-    2454,  2457,  2459,  2462,  2469,  2475,  2482,  2490,  2498,  2500,
-    2503,  2506,  2508,  2511,  2514,  2518,  2522,  2524,  2529,  2534,
-    2538,  2547,  2551,  2553,  2555,  2558,  2560,  2562,  2565,  2569,
-    2572,  2576,  2579,  2583,  2587,  2590,  2595,  2599,  2602,  2606,
-    2609,  2614,  2618,  2621,  2628,  2635,  2642,  2650,  2652,  2655,
-    2657,  2659,  2661,  2664,  2668,  2671,  2675,  2678,  2682,  2686,
-    2691,  2694,  2698,  2703,  2706,  2712,  2718,  2725,  2732,  2733,
-    2735,  2736
+    1197,  1199,  1201,  1203,  1205,  1207,  1210,  1213,  1217,  1221,
+    1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,  1258,
+    1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,  1286,
+    1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1316,  1324,
+    1327,  1330,  1333,  1335,  1338,  1341,  1345,  1348,  1352,  1354,
+    1357,  1361,  1364,  1367,  1372,  1373,  1375,  1378,  1381,  1383,
+    1384,  1386,  1389,  1392,  1398,  1405,  1408,  1411,  1416,  1417,
+    1420,  1421,  1423,  1425,  1427,  1433,  1439,  1445,  1447,  1453,
+    1459,  1469,  1471,  1477,  1478,  1480,  1482,  1488,  1490,  1492,
+    1498,  1504,  1506,  1510,  1514,  1519,  1521,  1523,  1525,  1527,
+    1530,  1532,  1536,  1540,  1542,  1545,  1547,  1551,  1553,  1555,
+    1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1573,  1576,
+    1578,  1580,  1582,  1585,  1586,  1589,  1592,  1594,  1599,  1600,
+    1602,  1605,  1609,  1614,  1617,  1620,  1622,  1625,  1627,  1630,
+    1636,  1642,  1650,  1657,  1659,  1662,  1665,  1669,  1671,  1674,
+    1677,  1682,  1685,  1690,  1691,  1696,  1699,  1701,  1703,  1705,
+    1706,  1709,  1715,  1721,  1735,  1737,  1739,  1743,  1747,  1750,
+    1754,  1758,  1761,  1766,  1768,  1775,  1785,  1786,  1798,  1800,
+    1804,  1808,  1812,  1814,  1816,  1822,  1825,  1831,  1832,  1834,
+    1836,  1840,  1841,  1843,  1845,  1847,  1849,  1850,  1857,  1860,
+    1862,  1865,  1870,  1873,  1877,  1881,  1885,  1890,  1896,  1902,
+    1908,  1915,  1917,  1919,  1921,  1925,  1926,  1932,  1933,  1935,
+    1937,  1940,  1947,  1949,  1953,  1954,  1956,  1961,  1963,  1965,
+    1967,  1969,  1972,  1974,  1977,  1980,  1982,  1986,  1989,  1993,
+    1997,  2000,  2005,  2010,  2014,  2023,  2027,  2030,  2032,  2035,
+    2042,  2051,  2055,  2058,  2062,  2066,  2071,  2076,  2080,  2082,
+    2084,  2086,  2091,  2098,  2102,  2105,  2109,  2113,  2118,  2123,
+    2127,  2130,  2132,  2135,  2138,  2140,  2144,  2147,  2151,  2155,
+    2158,  2163,  2168,  2172,  2179,  2188,  2192,  2195,  2197,  2200,
+    2203,  2206,  2210,  2214,  2217,  2222,  2227,  2231,  2238,  2247,
+    2251,  2254,  2256,  2259,  2262,  2264,  2266,  2269,  2273,  2277,
+    2280,  2285,  2292,  2301,  2303,  2306,  2309,  2311,  2314,  2317,
+    2321,  2325,  2327,  2332,  2337,  2341,  2347,  2356,  2360,  2363,
+    2367,  2369,  2375,  2381,  2388,  2395,  2397,  2400,  2403,  2405,
+    2408,  2411,  2415,  2419,  2421,  2426,  2431,  2435,  2441,  2450,
+    2454,  2456,  2459,  2461,  2464,  2471,  2477,  2484,  2492,  2500,
+    2502,  2505,  2508,  2510,  2513,  2516,  2520,  2524,  2526,  2531,
+    2536,  2540,  2549,  2553,  2555,  2557,  2560,  2562,  2564,  2567,
+    2571,  2574,  2578,  2581,  2585,  2589,  2592,  2597,  2601,  2604,
+    2608,  2611,  2616,  2620,  2623,  2630,  2637,  2644,  2652,  2654,
+    2657,  2659,  2661,  2663,  2666,  2670,  2673,  2677,  2680,  2684,
+    2688,  2693,  2696,  2700,  2705,  2708,  2714,  2720,  2727,  2734,
+    2735,  2737,  2738
 };
 
@@ -733,278 +735,279 @@
 static const yytype_int16 yyrhs[] =
 {
-     298,     0,    -1,    -1,    -1,    78,    -1,    79,    -1,    80,
-      -1,    71,    -1,    75,    -1,   139,    -1,    71,    -1,    75,
-      -1,    71,    -1,   139,    -1,    82,    -1,    83,    -1,    81,
-      -1,   140,    81,    -1,    71,    -1,   139,    -1,   108,   167,
-     109,    -1,   108,   171,   109,    -1,   141,    -1,   142,   110,
-     133,   162,   134,   111,    -1,   142,   108,   143,   109,    -1,
-     142,   112,   138,    -1,   142,   112,   110,   133,   145,   134,
-     111,    -1,   142,    84,   138,    -1,   142,    84,   110,   133,
-     145,   134,   111,    -1,   142,    85,    -1,   142,    86,    -1,
-     108,   271,   109,   113,   275,   368,   114,    -1,   142,   113,
-     143,   114,    -1,   144,    -1,   143,   115,   144,    -1,    -1,
-     162,    -1,   138,   116,   162,    -1,   110,   133,   162,   134,
-     111,   116,   162,    -1,   110,   133,   162,   115,   165,   134,
-     111,   116,   162,    -1,   146,    -1,   145,   115,   146,    -1,
-     138,    -1,   138,   112,   146,    -1,   138,   112,   110,   133,
-     145,   134,   111,    -1,   138,    84,   146,    -1,   138,    84,
-     110,   133,   145,   134,   111,    -1,   142,    -1,   135,    -1,
-     140,    -1,    85,   147,    -1,    86,   147,    -1,    39,   149,
-      -1,   148,   149,    -1,   117,   149,    -1,   118,   149,    -1,
-      36,   147,    -1,    36,   108,   271,   109,    -1,    37,   108,
-     271,   115,   138,   109,    -1,    75,    -1,    75,   108,   272,
-     109,    -1,    75,   108,   144,   109,    -1,    65,   147,    -1,
-      65,   108,   271,   109,    -1,    93,   138,    -1,   119,    -1,
-     120,    -1,   121,    -1,   122,    -1,   147,    -1,   108,   271,
-     109,   149,    -1,   108,   271,   109,   164,    -1,   149,    -1,
-     150,   118,   149,    -1,   150,   123,   149,    -1,   150,   124,
-     149,    -1,   150,    -1,   151,   120,   150,    -1,   151,   121,
-     150,    -1,   151,    -1,   152,    87,   151,    -1,   152,    88,
-     151,    -1,   152,    -1,   153,   125,   152,    -1,   153,   126,
-     152,    -1,   153,    89,   152,    -1,   153,    90,   152,    -1,
-     153,    -1,   154,    91,   153,    -1,   154,    92,   153,    -1,
-     154,    -1,   155,   119,   154,    -1,   155,    -1,   156,   127,
-     155,    -1,   156,    -1,   157,   128,   156,    -1,   157,    -1,
-     158,    93,   157,    -1,   158,    -1,   159,    94,   158,    -1,
-     159,    -1,   159,   129,   167,   116,   160,    -1,   159,   129,
-     116,   160,    -1,   159,   129,   167,   116,   164,    -1,   160,
-      -1,   160,    -1,   147,   130,   162,    -1,   147,   166,   162,
-      -1,   164,   369,    -1,    -1,   162,    -1,   110,   111,    -1,
-     110,   133,   162,   134,   111,    -1,   110,   133,   115,   165,
-     134,   111,    -1,   110,   133,   162,   115,   165,   134,   111,
-      -1,   163,    -1,   165,   115,   163,    -1,    96,    -1,    97,
-      -1,    98,    -1,    99,    -1,   100,    -1,   101,    -1,   102,
-      -1,   103,    -1,   104,    -1,   105,    -1,   162,    -1,   167,
-     115,   162,    -1,    -1,   167,    -1,   170,    -1,   171,    -1,
-     175,    -1,   176,    -1,   188,    -1,   190,    -1,   191,    -1,
-     196,    -1,   127,   142,   113,   143,   114,   131,    -1,   138,
-     116,   308,   169,    -1,   113,   114,    -1,   113,   133,   133,
-     207,   172,   134,   114,    -1,   173,    -1,   172,   133,   173,
-      -1,   210,    -1,    39,   210,    -1,   304,    -1,   169,   134,
-      -1,   169,    -1,   174,   169,    -1,   168,   131,    -1,    40,
-     108,   167,   109,   169,    -1,    40,   108,   167,   109,   169,
-      41,   169,    -1,    42,   108,   167,   109,   181,    -1,    42,
-     108,   167,   109,   113,   133,   203,   182,   114,    -1,    52,
-     108,   167,   109,   181,    -1,    52,   108,   167,   109,   113,
-     133,   203,   184,   114,    -1,   161,    -1,   161,    95,   161,
-      -1,   306,    -1,   177,    -1,   178,   115,   177,    -1,    43,
-     178,   116,    -1,    44,   116,    -1,   179,    -1,   180,   179,
-      -1,   180,   169,    -1,    -1,   183,    -1,   180,   174,    -1,
-     183,   180,   174,    -1,    -1,   185,    -1,   180,   187,    -1,
-     180,   174,   186,    -1,   185,   180,   187,    -1,   185,   180,
-     174,   186,    -1,    -1,   187,    -1,    55,    -1,    55,   131,
-      -1,    46,   108,   167,   109,   169,    -1,    45,   169,    46,
-     108,   167,   109,   131,    -1,    47,   108,   133,   189,   109,
-     169,    -1,   168,   134,   131,   168,   131,   168,    -1,   210,
-     168,   131,   168,    -1,    50,   138,   131,    -1,    50,   118,
-     167,   131,    -1,    49,   131,    -1,    49,   138,   131,    -1,
-      48,   131,    -1,    48,   138,   131,    -1,    51,   168,   131,
-      -1,    60,   163,   131,    -1,    61,   163,   131,    -1,    61,
-     163,    62,   162,   131,    -1,    56,   171,   192,    -1,    56,
-     171,   194,    -1,    56,   171,   192,   194,    -1,   193,    -1,
-      57,   108,    95,   109,   171,    -1,   193,    57,   108,    95,
-     109,   171,    -1,    58,   108,    95,   109,   171,    -1,   193,
-      58,   108,    95,   109,   171,    -1,    57,   108,   133,   133,
-     195,   134,   109,   171,   134,    -1,   193,    57,   108,   133,
-     133,   195,   134,   109,   171,   134,    -1,    58,   108,   133,
-     133,   195,   134,   109,   171,   134,    -1,   193,    58,   108,
-     133,   133,   195,   134,   109,   171,   134,    -1,    59,   171,
-      -1,   223,    -1,   223,   305,    -1,   223,   353,    -1,   362,
-     138,    -1,   362,    -1,    63,   197,   108,   140,   109,   131,
-      -1,    63,   197,   108,   140,   116,   198,   109,   131,    -1,
-      63,   197,   108,   140,   116,   198,   116,   198,   109,   131,
-      -1,    63,   197,   108,   140,   116,   198,   116,   198,   116,
-     201,   109,   131,    -1,    63,   197,    50,   108,   140,   116,
-     116,   198,   116,   201,   116,   202,   109,   131,    -1,    -1,
-      11,    -1,    -1,   199,    -1,   200,    -1,   199,   115,   200,
-      -1,   140,   108,   161,   109,    -1,   110,   161,   111,   140,
-     108,   161,   109,    -1,    -1,   140,    -1,   201,   115,   140,
-      -1,   138,    -1,   202,   115,   138,    -1,   134,    -1,   204,
-      -1,   210,    -1,   204,   133,   210,    -1,   134,    -1,   206,
-      -1,   220,    -1,   206,   133,   220,    -1,    -1,   208,    -1,
-      28,   209,   131,    -1,   208,    28,   209,   131,    -1,   270,
-      -1,   209,   115,   270,    -1,   211,    -1,   220,    -1,   212,
-     134,   131,    -1,   217,   134,   131,    -1,   214,   134,   131,
-      -1,   289,   134,   131,    -1,   292,   134,   131,    -1,   213,
-     273,    -1,   229,   213,   273,    -1,   212,   134,   115,   133,
-     268,   273,    -1,   363,   268,   307,    -1,   366,   268,   307,
-      -1,   225,   366,   268,   307,    -1,   215,    -1,   225,   215,
-      -1,   229,   215,    -1,   229,   225,   215,    -1,   214,   134,
-     115,   133,   268,    -1,   110,   111,   268,   108,   133,   256,
-     134,   109,    -1,   366,   268,   108,   133,   256,   134,   109,
-      -1,   216,   268,   108,   133,   256,   134,   109,    -1,   110,
-     133,   258,   134,   111,    -1,   110,   133,   258,   134,   115,
-     133,   259,   134,   111,    -1,     3,   213,    -1,     3,   215,
-      -1,   217,   134,   115,   133,   138,    -1,     3,   223,   305,
-      -1,   218,   134,   115,   133,   305,    -1,   225,     3,   223,
-     305,    -1,   223,     3,   305,    -1,   223,     3,   225,   305,
-      -1,     3,   138,   130,   162,    -1,   219,   134,   115,   133,
-     138,   130,   162,    -1,   221,   134,   131,    -1,   218,   134,
-     131,    -1,   219,   134,   131,    -1,   238,   134,   131,    -1,
-     222,   305,   307,   273,    -1,   221,   115,   308,   305,   307,
-     273,    -1,   234,    -1,   238,    -1,   240,    -1,   279,    -1,
-     235,    -1,   239,    -1,   241,    -1,   280,    -1,    -1,   225,
-      -1,   226,    -1,   225,   226,    -1,   227,    -1,   310,    -1,
-      10,    -1,    12,    -1,    11,    -1,    14,    -1,    66,    -1,
-      -1,    13,   108,   228,   282,   109,    -1,   230,    -1,   225,
-     230,    -1,   229,   225,   230,    -1,   231,    -1,   230,   231,
-      -1,   232,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
-      -1,     8,    -1,     9,    -1,    68,    -1,    70,    -1,    16,
+     299,     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,   168,
+     110,    -1,   109,   172,   110,    -1,   142,    -1,   143,   111,
+     134,   163,   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,   272,   110,   114,   276,   369,   115,    -1,   143,   114,
+     144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
+     163,    -1,   139,   117,   163,    -1,   111,   134,   163,   135,
+     112,   117,   163,    -1,   111,   134,   163,   116,   166,   135,
+     112,   117,   163,    -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,    86,   148,    -1,    87,   148,    -1,    40,   150,
+      -1,   149,   150,    -1,   118,   150,    -1,   119,   150,    -1,
+      37,   148,    -1,    37,   109,   272,   110,    -1,    38,   109,
+     272,   116,   139,   110,    -1,    76,    -1,    76,   109,   273,
+     110,    -1,    76,   109,   145,   110,    -1,    66,   148,    -1,
+      66,   109,   272,   110,    -1,    94,   139,    -1,   120,    -1,
+     121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   272,
+     110,   150,    -1,   109,   272,   110,   165,    -1,   150,    -1,
+     151,   119,   150,    -1,   151,   124,   150,    -1,   151,   125,
+     150,    -1,   151,    -1,   152,   121,   151,    -1,   152,   122,
+     151,    -1,   152,    -1,   153,    88,   152,    -1,   153,    89,
+     152,    -1,   153,    -1,   154,   126,   153,    -1,   154,   127,
+     153,    -1,   154,    90,   153,    -1,   154,    91,   153,    -1,
+     154,    -1,   155,    92,   154,    -1,   155,    93,   154,    -1,
+     155,    -1,   156,   120,   155,    -1,   156,    -1,   157,   128,
+     156,    -1,   157,    -1,   158,   129,   157,    -1,   158,    -1,
+     159,    94,   158,    -1,   159,    -1,   160,    95,   159,    -1,
+     160,    -1,   160,   130,   168,   117,   161,    -1,   160,   130,
+     117,   161,    -1,   160,   130,   168,   117,   165,    -1,   161,
+      -1,   161,    -1,   148,   131,   163,    -1,   148,   167,   163,
+      -1,   165,   370,    -1,    -1,   163,    -1,   111,   112,    -1,
+     111,   134,   163,   135,   112,    -1,   111,   134,   116,   166,
+     135,   112,    -1,   111,   134,   163,   116,   166,   135,   112,
+      -1,   164,    -1,   166,   116,   164,    -1,    97,    -1,    98,
+      -1,    99,    -1,   100,    -1,   101,    -1,   102,    -1,   103,
+      -1,   104,    -1,   105,    -1,   106,    -1,   163,    -1,   168,
+     116,   163,    -1,    -1,   168,    -1,   171,    -1,   172,    -1,
+     176,    -1,   177,    -1,   189,    -1,   191,    -1,   192,    -1,
+     197,    -1,   128,   143,   114,   144,   115,   132,    -1,   139,
+     117,   309,   170,    -1,   114,   115,    -1,   114,   134,   134,
+     208,   173,   135,   115,    -1,   174,    -1,   173,   134,   174,
+      -1,   211,    -1,    40,   211,    -1,   305,    -1,   170,   135,
+      -1,   170,    -1,   175,   170,    -1,   169,   132,    -1,    41,
+     109,   168,   110,   170,    -1,    41,   109,   168,   110,   170,
+      42,   170,    -1,    43,   109,   168,   110,   182,    -1,    43,
+     109,   168,   110,   114,   134,   204,   183,   115,    -1,    53,
+     109,   168,   110,   182,    -1,    53,   109,   168,   110,   114,
+     134,   204,   185,   115,    -1,   162,    -1,   162,    96,   162,
+      -1,   307,    -1,   178,    -1,   179,   116,   178,    -1,    44,
+     179,   117,    -1,    45,   117,    -1,   180,    -1,   181,   180,
+      -1,   181,   170,    -1,    -1,   184,    -1,   181,   175,    -1,
+     184,   181,   175,    -1,    -1,   186,    -1,   181,   188,    -1,
+     181,   175,   187,    -1,   186,   181,   188,    -1,   186,   181,
+     175,   187,    -1,    -1,   188,    -1,    56,    -1,    56,   132,
+      -1,    47,   109,   168,   110,   170,    -1,    46,   170,    47,
+     109,   168,   110,   132,    -1,    48,   109,   134,   190,   110,
+     170,    -1,   169,   135,   132,   169,   132,   169,    -1,   211,
+     169,   132,   169,    -1,    51,   139,   132,    -1,    51,   119,
+     168,   132,    -1,    50,   132,    -1,    50,   139,   132,    -1,
+      49,   132,    -1,    49,   139,   132,    -1,    52,   169,   132,
+      -1,    61,   164,   132,    -1,    62,   164,   132,    -1,    62,
+     164,    63,   163,   132,    -1,    57,   172,   193,    -1,    57,
+     172,   195,    -1,    57,   172,   193,   195,    -1,   194,    -1,
+      58,   109,    96,   110,   172,    -1,   194,    58,   109,    96,
+     110,   172,    -1,    59,   109,    96,   110,   172,    -1,   194,
+      59,   109,    96,   110,   172,    -1,    58,   109,   134,   134,
+     196,   135,   110,   172,   135,    -1,   194,    58,   109,   134,
+     134,   196,   135,   110,   172,   135,    -1,    59,   109,   134,
+     134,   196,   135,   110,   172,   135,    -1,   194,    59,   109,
+     134,   134,   196,   135,   110,   172,   135,    -1,    60,   172,
+      -1,   224,    -1,   224,   306,    -1,   224,   354,    -1,   363,
+     139,    -1,   363,    -1,    64,   198,   109,   141,   110,   132,
+      -1,    64,   198,   109,   141,   117,   199,   110,   132,    -1,
+      64,   198,   109,   141,   117,   199,   117,   199,   110,   132,
+      -1,    64,   198,   109,   141,   117,   199,   117,   199,   117,
+     202,   110,   132,    -1,    64,   198,    51,   109,   141,   117,
+     117,   199,   117,   202,   117,   203,   110,   132,    -1,    -1,
+      11,    -1,    -1,   200,    -1,   201,    -1,   200,   116,   201,
+      -1,   141,   109,   162,   110,    -1,   111,   162,   112,   141,
+     109,   162,   110,    -1,    -1,   141,    -1,   202,   116,   141,
+      -1,   139,    -1,   203,   116,   139,    -1,   135,    -1,   205,
+      -1,   211,    -1,   205,   134,   211,    -1,   135,    -1,   207,
+      -1,   221,    -1,   207,   134,   221,    -1,    -1,   209,    -1,
+      29,   210,   132,    -1,   209,    29,   210,   132,    -1,   271,
+      -1,   210,   116,   271,    -1,   212,    -1,   221,    -1,   213,
+     135,   132,    -1,   218,   135,   132,    -1,   215,   135,   132,
+      -1,   290,   135,   132,    -1,   293,   135,   132,    -1,   214,
+     274,    -1,   230,   214,   274,    -1,   213,   135,   116,   134,
+     269,   274,    -1,   364,   269,   308,    -1,   367,   269,   308,
+      -1,   226,   367,   269,   308,    -1,   216,    -1,   226,   216,
+      -1,   230,   216,    -1,   230,   226,   216,    -1,   215,   135,
+     116,   134,   269,    -1,   111,   112,   269,   109,   134,   257,
+     135,   110,    -1,   367,   269,   109,   134,   257,   135,   110,
+      -1,   217,   269,   109,   134,   257,   135,   110,    -1,   111,
+     134,   259,   135,   112,    -1,   111,   134,   259,   135,   116,
+     134,   260,   135,   112,    -1,     3,   214,    -1,     3,   216,
+      -1,   218,   135,   116,   134,   139,    -1,     3,   224,   306,
+      -1,   219,   135,   116,   134,   306,    -1,   226,     3,   224,
+     306,    -1,   224,     3,   306,    -1,   224,     3,   226,   306,
+      -1,     3,   139,   131,   163,    -1,   220,   135,   116,   134,
+     139,   131,   163,    -1,   222,   135,   132,    -1,   219,   135,
+     132,    -1,   220,   135,   132,    -1,   239,   135,   132,    -1,
+     223,   306,   308,   274,    -1,   222,   116,   309,   306,   308,
+     274,    -1,   235,    -1,   239,    -1,   241,    -1,   280,    -1,
+     236,    -1,   240,    -1,   242,    -1,   281,    -1,    -1,   226,
+      -1,   227,    -1,   226,   227,    -1,   228,    -1,   311,    -1,
+      10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
+      -1,    13,   109,   229,   283,   110,    -1,   231,    -1,   226,
+     231,    -1,   230,   226,   231,    -1,   232,    -1,   231,   232,
+      -1,   233,    -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,    24,    -1,    25,
-      -1,    26,    -1,   235,    -1,   229,   235,    -1,   234,   231,
-      -1,   234,   231,   225,    -1,   234,   231,   235,    -1,   236,
-      -1,   224,   237,   224,    -1,   233,    -1,   225,   233,    -1,
-     236,   226,    -1,   236,   233,    -1,    27,   108,   272,   109,
-      -1,    27,   108,   167,   109,    -1,    77,   108,   272,   109,
-      -1,    77,   108,   167,   109,    -1,   239,    -1,   229,   239,
-      -1,   238,   231,    -1,   238,   231,   225,    -1,   242,    -1,
-     225,   242,    -1,   239,   226,    -1,   241,    -1,   229,   241,
-      -1,   240,   231,    -1,   240,   231,   225,    -1,    73,    -1,
-     225,    73,    -1,   241,   226,    -1,   243,    -1,   253,    -1,
-     244,   113,   245,   114,    -1,   244,   270,    -1,   244,   270,
-     113,   245,   114,    -1,   244,   108,   288,   109,   113,   245,
-     114,    -1,   244,   281,    -1,    30,   308,    -1,    31,   308,
-      -1,   246,    -1,   245,   246,    -1,   247,   131,    -1,    39,
-     247,   131,    -1,   248,   131,    -1,    39,   248,   131,    -1,
-     362,    -1,   362,   270,    -1,   247,   115,   270,    -1,   247,
-     115,    -1,   223,   249,    -1,   248,   115,   308,   249,    -1,
-      -1,   251,    -1,   314,   250,    -1,   327,   250,    -1,   353,
-      -1,    -1,   251,    -1,   116,   161,    -1,    29,   308,    -1,
-     252,   113,   254,   368,   114,    -1,   252,   270,   113,   254,
-     368,   114,    -1,   252,   270,    -1,   270,   255,    -1,   254,
-     115,   270,   255,    -1,    -1,   130,   161,    -1,    -1,   257,
-      -1,   259,    -1,   258,    -1,   258,   134,   115,   133,   259,
-      -1,   259,   134,   115,   133,    95,    -1,   258,   134,   115,
-     133,    95,    -1,   263,    -1,   259,   134,   115,   133,   263,
-      -1,   258,   134,   115,   133,   263,    -1,   258,   134,   115,
-     133,   259,   134,   115,   133,   263,    -1,   264,    -1,   259,
-     134,   115,   133,   264,    -1,    -1,   261,    -1,   262,    -1,
-     262,   134,   115,   133,    95,    -1,   266,    -1,   265,    -1,
-     262,   134,   115,   133,   266,    -1,   262,   134,   115,   133,
-     265,    -1,   265,    -1,   358,   268,   369,    -1,   366,   268,
-     369,    -1,   225,   366,   268,   369,    -1,   215,    -1,   266,
-      -1,   358,    -1,   366,    -1,   225,   366,    -1,   367,    -1,
-     222,   332,   369,    -1,   222,   336,   369,    -1,   222,    -1,
-     222,   347,    -1,   138,    -1,   267,   115,   138,    -1,   136,
-      -1,    73,    -1,    74,    -1,   137,    -1,    73,    -1,    74,
-      -1,   138,    -1,    73,    -1,    74,    -1,   362,    -1,   223,
-      -1,   223,   353,    -1,   362,    -1,   367,    -1,   223,    -1,
-     223,   341,    -1,    -1,   130,   274,    -1,   106,   274,    -1,
-     162,    -1,   113,   275,   368,   114,    -1,    -1,   274,    -1,
-     276,   274,    -1,   275,   115,   274,    -1,   275,   115,   276,
-     274,    -1,   277,   116,    -1,   270,   116,    -1,   278,    -1,
-     277,   278,    -1,    79,    -1,   112,   270,    -1,   110,   133,
-     162,   134,   111,    -1,   110,   133,   306,   134,   111,    -1,
-     110,   133,   161,    95,   161,   134,   111,    -1,   112,   110,
-     133,   145,   134,   111,    -1,   280,    -1,   229,   280,    -1,
-     279,   231,    -1,   279,   231,   225,    -1,   281,    -1,   225,
-     281,    -1,   280,   226,    -1,    74,   108,   288,   109,    -1,
-     283,   369,    -1,   282,   115,   283,   369,    -1,    -1,   285,
-     270,   284,   286,    -1,   223,   332,    -1,    32,    -1,    34,
-      -1,    33,    -1,    -1,   286,   287,    -1,   128,   270,   108,
-     288,   109,    -1,   128,   113,   133,   294,   114,    -1,   128,
-     108,   133,   282,   134,   109,   113,   133,   294,   114,   108,
-     288,   109,    -1,   272,    -1,   162,    -1,   288,   115,   272,
-      -1,   288,   115,   162,    -1,    32,   290,    -1,   230,    32,
-     290,    -1,   289,   115,   290,    -1,   291,   286,    -1,   291,
-     286,   130,   272,    -1,   270,    -1,   269,   108,   133,   282,
-     134,   109,    -1,    35,   270,   108,   133,   282,   134,   109,
-     113,   114,    -1,    -1,    35,   270,   108,   133,   282,   134,
-     109,   113,   293,   294,   114,    -1,   295,    -1,   294,   133,
-     295,    -1,   296,   134,   131,    -1,   297,   134,   131,    -1,
-     213,    -1,   215,    -1,   296,   134,   115,   133,   268,    -1,
-     223,   305,    -1,   297,   134,   115,   133,   305,    -1,    -1,
-     299,    -1,   301,    -1,   299,   133,   301,    -1,    -1,   299,
-      -1,   210,    -1,   303,    -1,   196,    -1,    -1,     5,    81,
-     302,   113,   300,   114,    -1,    39,   301,    -1,   304,    -1,
-     319,   171,    -1,   323,   133,   205,   171,    -1,   214,   171,
-      -1,   222,   319,   171,    -1,   225,   319,   171,    -1,   229,
-     319,   171,    -1,   229,   225,   319,   171,    -1,   222,   323,
-     133,   205,   171,    -1,   225,   323,   133,   205,   171,    -1,
-     229,   323,   133,   205,   171,    -1,   229,   225,   323,   133,
-     205,   171,    -1,   314,    -1,   319,    -1,   327,    -1,   161,
-     122,   161,    -1,    -1,    63,   108,   140,   109,   308,    -1,
-      -1,   309,    -1,   310,    -1,   309,   310,    -1,    38,   108,
-     108,   311,   109,   109,    -1,   312,    -1,   311,   115,   312,
-      -1,    -1,   313,    -1,   313,   108,   168,   109,    -1,   268,
-      -1,   232,    -1,   233,    -1,   226,    -1,   315,   308,    -1,
-     316,    -1,   317,   308,    -1,   318,   308,    -1,   136,    -1,
-     108,   315,   109,    -1,   118,   314,    -1,   118,   225,   314,
-      -1,   108,   316,   109,    -1,   315,   345,    -1,   108,   316,
-     109,   345,    -1,   108,   317,   109,   346,    -1,   108,   317,
-     109,    -1,   108,   316,   109,   108,   133,   260,   134,   109,
-      -1,   108,   318,   109,    -1,   320,   308,    -1,   321,    -1,
-     322,   308,    -1,   315,   108,   133,   260,   134,   109,    -1,
-     108,   321,   109,   108,   133,   260,   134,   109,    -1,   108,
-     320,   109,    -1,   118,   319,    -1,   118,   225,   319,    -1,
-     108,   321,   109,    -1,   108,   321,   109,   345,    -1,   108,
-     322,   109,   346,    -1,   108,   322,   109,    -1,   324,    -1,
-     325,    -1,   326,    -1,   315,   108,   267,   109,    -1,   108,
-     325,   109,   108,   267,   109,    -1,   108,   324,   109,    -1,
-     118,   323,    -1,   118,   225,   323,    -1,   108,   325,   109,
-      -1,   108,   325,   109,   345,    -1,   108,   326,   109,   346,
-      -1,   108,   326,   109,    -1,   328,   308,    -1,   329,    -1,
-     330,   308,    -1,   331,   308,    -1,   337,    -1,   108,   328,
-     109,    -1,   118,   327,    -1,   118,   225,   327,    -1,   108,
-     329,   109,    -1,   328,   345,    -1,   108,   329,   109,   345,
-      -1,   108,   330,   109,   346,    -1,   108,   330,   109,    -1,
-     328,   108,   133,   260,   134,   109,    -1,   108,   329,   109,
-     108,   133,   260,   134,   109,    -1,   108,   331,   109,    -1,
-     315,   308,    -1,   333,    -1,   334,   308,    -1,   335,   308,
-      -1,   118,   332,    -1,   118,   225,   332,    -1,   108,   333,
-     109,    -1,   315,   351,    -1,   108,   333,   109,   345,    -1,
-     108,   334,   109,   346,    -1,   108,   334,   109,    -1,   315,
-     108,   133,   260,   134,   109,    -1,   108,   333,   109,   108,
-     133,   260,   134,   109,    -1,   108,   335,   109,    -1,   337,
-     308,    -1,   338,    -1,   339,   308,    -1,   340,   308,    -1,
-      73,    -1,    74,    -1,   118,   336,    -1,   118,   225,   336,
-      -1,   108,   338,   109,    -1,   337,   351,    -1,   108,   338,
-     109,   351,    -1,   337,   108,   133,   260,   134,   109,    -1,
-     108,   338,   109,   108,   133,   260,   134,   109,    -1,   342,
-      -1,   343,   308,    -1,   344,   308,    -1,   118,    -1,   118,
-     225,    -1,   118,   341,    -1,   118,   225,   341,    -1,   108,
-     342,   109,    -1,   345,    -1,   108,   342,   109,   345,    -1,
-     108,   343,   109,   346,    -1,   108,   343,   109,    -1,   108,
-     133,   260,   134,   109,    -1,   108,   342,   109,   108,   133,
-     260,   134,   109,    -1,   108,   344,   109,    -1,   110,   111,
-      -1,   110,   111,   346,    -1,   346,    -1,   110,   133,   162,
-     134,   111,    -1,   110,   133,   118,   134,   111,    -1,   346,
-     110,   133,   162,   134,   111,    -1,   346,   110,   133,   118,
-     134,   111,    -1,   348,    -1,   349,   308,    -1,   350,   308,
-      -1,   118,    -1,   118,   225,    -1,   118,   347,    -1,   118,
-     225,   347,    -1,   108,   348,   109,    -1,   351,    -1,   108,
-     348,   109,   351,    -1,   108,   349,   109,   346,    -1,   108,
-     349,   109,    -1,   108,   133,   260,   134,   109,    -1,   108,
-     348,   109,   108,   133,   260,   134,   109,    -1,   108,   350,
-     109,    -1,   352,    -1,   352,   346,    -1,   346,    -1,   110,
-     111,    -1,   110,   133,   225,   118,   134,   111,    -1,   110,
-     133,   225,   134,   111,    -1,   110,   133,   225,   162,   134,
-     111,    -1,   110,   133,     7,   224,   162,   134,   111,    -1,
-     110,   133,   225,     7,   162,   134,   111,    -1,   354,    -1,
-     355,   308,    -1,   356,   308,    -1,   118,    -1,   118,   225,
-      -1,   118,   353,    -1,   118,   225,   353,    -1,   108,   354,
-     109,    -1,   345,    -1,   108,   354,   109,   345,    -1,   108,
-     355,   109,   346,    -1,   108,   355,   109,    -1,   108,   354,
-     109,   108,   133,   260,   134,   109,    -1,   108,   356,   109,
-      -1,   358,    -1,   366,    -1,   225,   366,    -1,   359,    -1,
-     360,    -1,   118,   223,    -1,   225,   118,   223,    -1,   118,
-     367,    -1,   225,   118,   367,    -1,   118,   357,    -1,   225,
-     118,   357,    -1,   110,   111,   223,    -1,   361,   223,    -1,
-     110,   111,   346,   223,    -1,   361,   346,   223,    -1,   346,
-     223,    -1,   110,   111,   359,    -1,   361,   359,    -1,   110,
-     111,   346,   359,    -1,   361,   346,   359,    -1,   346,   359,
-      -1,   110,   133,   225,   118,   134,   111,    -1,   110,   133,
-     225,   162,   134,   111,    -1,   110,   133,   229,   162,   134,
-     111,    -1,   110,   133,   229,   225,   162,   134,   111,    -1,
-     366,    -1,   225,   366,    -1,   363,    -1,   364,    -1,   365,
-      -1,   118,   223,    -1,   225,   118,   223,    -1,   118,   367,
-      -1,   225,   118,   367,    -1,   118,   362,    -1,   225,   118,
-     362,    -1,   110,   111,   223,    -1,   110,   111,   346,   223,
-      -1,   346,   223,    -1,   110,   111,   364,    -1,   110,   111,
-     346,   364,    -1,   346,   364,    -1,   110,   133,   259,   134,
-     111,    -1,   110,   111,   108,   256,   109,    -1,   366,   108,
-     133,   256,   134,   109,    -1,   216,   108,   133,   256,   134,
-     109,    -1,    -1,   115,    -1,    -1,   130,   162,    -1
+      -1,    22,    -1,    23,    -1,    15,    -1,    25,    -1,    26,
+      -1,    27,    -1,    24,    -1,   236,    -1,   230,   236,    -1,
+     235,   232,    -1,   235,   232,   226,    -1,   235,   232,   236,
+      -1,   237,    -1,   225,   238,   225,    -1,   234,    -1,   226,
+     234,    -1,   237,   227,    -1,   237,   234,    -1,    28,   109,
+     273,   110,    -1,    28,   109,   168,   110,    -1,    78,   109,
+     273,   110,    -1,    78,   109,   168,   110,    -1,   240,    -1,
+     230,   240,    -1,   239,   232,    -1,   239,   232,   226,    -1,
+     243,    -1,   226,   243,    -1,   240,   227,    -1,   242,    -1,
+     230,   242,    -1,   241,   232,    -1,   241,   232,   226,    -1,
+      74,    -1,   226,    74,    -1,   242,   227,    -1,   244,    -1,
+     254,    -1,   245,   114,   246,   115,    -1,   245,   271,    -1,
+     245,   271,   114,   246,   115,    -1,   245,   109,   289,   110,
+     114,   246,   115,    -1,   245,   282,    -1,    31,   309,    -1,
+      32,   309,    -1,   247,    -1,   246,   247,    -1,   248,   132,
+      -1,    40,   248,   132,    -1,   249,   132,    -1,    40,   249,
+     132,    -1,   363,    -1,   363,   271,    -1,   248,   116,   271,
+      -1,   248,   116,    -1,   224,   250,    -1,   249,   116,   309,
+     250,    -1,    -1,   252,    -1,   315,   251,    -1,   328,   251,
+      -1,   354,    -1,    -1,   252,    -1,   117,   162,    -1,    30,
+     309,    -1,   253,   114,   255,   369,   115,    -1,   253,   271,
+     114,   255,   369,   115,    -1,   253,   271,    -1,   271,   256,
+      -1,   255,   116,   271,   256,    -1,    -1,   131,   162,    -1,
+      -1,   258,    -1,   260,    -1,   259,    -1,   259,   135,   116,
+     134,   260,    -1,   260,   135,   116,   134,    96,    -1,   259,
+     135,   116,   134,    96,    -1,   264,    -1,   260,   135,   116,
+     134,   264,    -1,   259,   135,   116,   134,   264,    -1,   259,
+     135,   116,   134,   260,   135,   116,   134,   264,    -1,   265,
+      -1,   260,   135,   116,   134,   265,    -1,    -1,   262,    -1,
+     263,    -1,   263,   135,   116,   134,    96,    -1,   267,    -1,
+     266,    -1,   263,   135,   116,   134,   267,    -1,   263,   135,
+     116,   134,   266,    -1,   266,    -1,   359,   269,   370,    -1,
+     367,   269,   370,    -1,   226,   367,   269,   370,    -1,   216,
+      -1,   267,    -1,   359,    -1,   367,    -1,   226,   367,    -1,
+     368,    -1,   223,   333,   370,    -1,   223,   337,   370,    -1,
+     223,    -1,   223,   348,    -1,   139,    -1,   268,   116,   139,
+      -1,   137,    -1,    74,    -1,    75,    -1,   138,    -1,    74,
+      -1,    75,    -1,   139,    -1,    74,    -1,    75,    -1,   363,
+      -1,   224,    -1,   224,   354,    -1,   363,    -1,   368,    -1,
+     224,    -1,   224,   342,    -1,    -1,   131,   275,    -1,   107,
+     275,    -1,   163,    -1,   114,   276,   369,   115,    -1,    -1,
+     275,    -1,   277,   275,    -1,   276,   116,   275,    -1,   276,
+     116,   277,   275,    -1,   278,   117,    -1,   271,   117,    -1,
+     279,    -1,   278,   279,    -1,    80,    -1,   113,   271,    -1,
+     111,   134,   163,   135,   112,    -1,   111,   134,   307,   135,
+     112,    -1,   111,   134,   162,    96,   162,   135,   112,    -1,
+     113,   111,   134,   146,   135,   112,    -1,   281,    -1,   230,
+     281,    -1,   280,   232,    -1,   280,   232,   226,    -1,   282,
+      -1,   226,   282,    -1,   281,   227,    -1,    75,   109,   289,
+     110,    -1,   284,   370,    -1,   283,   116,   284,   370,    -1,
+      -1,   286,   271,   285,   287,    -1,   224,   333,    -1,    33,
+      -1,    35,    -1,    34,    -1,    -1,   287,   288,    -1,   129,
+     271,   109,   289,   110,    -1,   129,   114,   134,   295,   115,
+      -1,   129,   109,   134,   283,   135,   110,   114,   134,   295,
+     115,   109,   289,   110,    -1,   273,    -1,   163,    -1,   289,
+     116,   273,    -1,   289,   116,   163,    -1,    33,   291,    -1,
+     231,    33,   291,    -1,   290,   116,   291,    -1,   292,   287,
+      -1,   292,   287,   131,   273,    -1,   271,    -1,   270,   109,
+     134,   283,   135,   110,    -1,    36,   271,   109,   134,   283,
+     135,   110,   114,   115,    -1,    -1,    36,   271,   109,   134,
+     283,   135,   110,   114,   294,   295,   115,    -1,   296,    -1,
+     295,   134,   296,    -1,   297,   135,   132,    -1,   298,   135,
+     132,    -1,   214,    -1,   216,    -1,   297,   135,   116,   134,
+     269,    -1,   224,   306,    -1,   298,   135,   116,   134,   306,
+      -1,    -1,   300,    -1,   302,    -1,   300,   134,   302,    -1,
+      -1,   300,    -1,   211,    -1,   304,    -1,   197,    -1,    -1,
+       5,    82,   303,   114,   301,   115,    -1,    40,   302,    -1,
+     305,    -1,   320,   172,    -1,   324,   134,   206,   172,    -1,
+     215,   172,    -1,   223,   320,   172,    -1,   226,   320,   172,
+      -1,   230,   320,   172,    -1,   230,   226,   320,   172,    -1,
+     223,   324,   134,   206,   172,    -1,   226,   324,   134,   206,
+     172,    -1,   230,   324,   134,   206,   172,    -1,   230,   226,
+     324,   134,   206,   172,    -1,   315,    -1,   320,    -1,   328,
+      -1,   162,   123,   162,    -1,    -1,    64,   109,   141,   110,
+     309,    -1,    -1,   310,    -1,   311,    -1,   310,   311,    -1,
+      39,   109,   109,   312,   110,   110,    -1,   313,    -1,   312,
+     116,   313,    -1,    -1,   314,    -1,   314,   109,   169,   110,
+      -1,   269,    -1,   233,    -1,   234,    -1,   227,    -1,   316,
+     309,    -1,   317,    -1,   318,   309,    -1,   319,   309,    -1,
+     137,    -1,   109,   316,   110,    -1,   119,   315,    -1,   119,
+     226,   315,    -1,   109,   317,   110,    -1,   316,   346,    -1,
+     109,   317,   110,   346,    -1,   109,   318,   110,   347,    -1,
+     109,   318,   110,    -1,   109,   317,   110,   109,   134,   261,
+     135,   110,    -1,   109,   319,   110,    -1,   321,   309,    -1,
+     322,    -1,   323,   309,    -1,   316,   109,   134,   261,   135,
+     110,    -1,   109,   322,   110,   109,   134,   261,   135,   110,
+      -1,   109,   321,   110,    -1,   119,   320,    -1,   119,   226,
+     320,    -1,   109,   322,   110,    -1,   109,   322,   110,   346,
+      -1,   109,   323,   110,   347,    -1,   109,   323,   110,    -1,
+     325,    -1,   326,    -1,   327,    -1,   316,   109,   268,   110,
+      -1,   109,   326,   110,   109,   268,   110,    -1,   109,   325,
+     110,    -1,   119,   324,    -1,   119,   226,   324,    -1,   109,
+     326,   110,    -1,   109,   326,   110,   346,    -1,   109,   327,
+     110,   347,    -1,   109,   327,   110,    -1,   329,   309,    -1,
+     330,    -1,   331,   309,    -1,   332,   309,    -1,   338,    -1,
+     109,   329,   110,    -1,   119,   328,    -1,   119,   226,   328,
+      -1,   109,   330,   110,    -1,   329,   346,    -1,   109,   330,
+     110,   346,    -1,   109,   331,   110,   347,    -1,   109,   331,
+     110,    -1,   329,   109,   134,   261,   135,   110,    -1,   109,
+     330,   110,   109,   134,   261,   135,   110,    -1,   109,   332,
+     110,    -1,   316,   309,    -1,   334,    -1,   335,   309,    -1,
+     336,   309,    -1,   119,   333,    -1,   119,   226,   333,    -1,
+     109,   334,   110,    -1,   316,   352,    -1,   109,   334,   110,
+     346,    -1,   109,   335,   110,   347,    -1,   109,   335,   110,
+      -1,   316,   109,   134,   261,   135,   110,    -1,   109,   334,
+     110,   109,   134,   261,   135,   110,    -1,   109,   336,   110,
+      -1,   338,   309,    -1,   339,    -1,   340,   309,    -1,   341,
+     309,    -1,    74,    -1,    75,    -1,   119,   337,    -1,   119,
+     226,   337,    -1,   109,   339,   110,    -1,   338,   352,    -1,
+     109,   339,   110,   352,    -1,   338,   109,   134,   261,   135,
+     110,    -1,   109,   339,   110,   109,   134,   261,   135,   110,
+      -1,   343,    -1,   344,   309,    -1,   345,   309,    -1,   119,
+      -1,   119,   226,    -1,   119,   342,    -1,   119,   226,   342,
+      -1,   109,   343,   110,    -1,   346,    -1,   109,   343,   110,
+     346,    -1,   109,   344,   110,   347,    -1,   109,   344,   110,
+      -1,   109,   134,   261,   135,   110,    -1,   109,   343,   110,
+     109,   134,   261,   135,   110,    -1,   109,   345,   110,    -1,
+     111,   112,    -1,   111,   112,   347,    -1,   347,    -1,   111,
+     134,   163,   135,   112,    -1,   111,   134,   119,   135,   112,
+      -1,   347,   111,   134,   163,   135,   112,    -1,   347,   111,
+     134,   119,   135,   112,    -1,   349,    -1,   350,   309,    -1,
+     351,   309,    -1,   119,    -1,   119,   226,    -1,   119,   348,
+      -1,   119,   226,   348,    -1,   109,   349,   110,    -1,   352,
+      -1,   109,   349,   110,   352,    -1,   109,   350,   110,   347,
+      -1,   109,   350,   110,    -1,   109,   134,   261,   135,   110,
+      -1,   109,   349,   110,   109,   134,   261,   135,   110,    -1,
+     109,   351,   110,    -1,   353,    -1,   353,   347,    -1,   347,
+      -1,   111,   112,    -1,   111,   134,   226,   119,   135,   112,
+      -1,   111,   134,   226,   135,   112,    -1,   111,   134,   226,
+     163,   135,   112,    -1,   111,   134,     7,   225,   163,   135,
+     112,    -1,   111,   134,   226,     7,   163,   135,   112,    -1,
+     355,    -1,   356,   309,    -1,   357,   309,    -1,   119,    -1,
+     119,   226,    -1,   119,   354,    -1,   119,   226,   354,    -1,
+     109,   355,   110,    -1,   346,    -1,   109,   355,   110,   346,
+      -1,   109,   356,   110,   347,    -1,   109,   356,   110,    -1,
+     109,   355,   110,   109,   134,   261,   135,   110,    -1,   109,
+     357,   110,    -1,   359,    -1,   367,    -1,   226,   367,    -1,
+     360,    -1,   361,    -1,   119,   224,    -1,   226,   119,   224,
+      -1,   119,   368,    -1,   226,   119,   368,    -1,   119,   358,
+      -1,   226,   119,   358,    -1,   111,   112,   224,    -1,   362,
+     224,    -1,   111,   112,   347,   224,    -1,   362,   347,   224,
+      -1,   347,   224,    -1,   111,   112,   360,    -1,   362,   360,
+      -1,   111,   112,   347,   360,    -1,   362,   347,   360,    -1,
+     347,   360,    -1,   111,   134,   226,   119,   135,   112,    -1,
+     111,   134,   226,   163,   135,   112,    -1,   111,   134,   230,
+     163,   135,   112,    -1,   111,   134,   230,   226,   163,   135,
+     112,    -1,   367,    -1,   226,   367,    -1,   364,    -1,   365,
+      -1,   366,    -1,   119,   224,    -1,   226,   119,   224,    -1,
+     119,   368,    -1,   226,   119,   368,    -1,   119,   363,    -1,
+     226,   119,   363,    -1,   111,   112,   224,    -1,   111,   112,
+     347,   224,    -1,   347,   224,    -1,   111,   112,   365,    -1,
+     111,   112,   347,   365,    -1,   347,   365,    -1,   111,   134,
+     260,   135,   112,    -1,   111,   112,   109,   257,   110,    -1,
+     367,   109,   134,   257,   135,   110,    -1,   217,   109,   134,
+     257,   135,   110,    -1,    -1,   116,    -1,    -1,   131,   163,
+      -1
 };
 
@@ -1012,80 +1015,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   290,   290,   296,   305,   306,   307,   311,   312,   313,
-     317,   318,   322,   323,   327,   328,   332,   333,   339,   341,
-     343,   345,   350,   351,   357,   361,   363,   364,   366,   367,
-     369,   371,   373,   381,   382,   388,   389,   390,   395,   397,
-     402,   403,   407,   411,   413,   415,   417,   422,   425,   427,
-     429,   431,   433,   435,   437,   439,   445,   447,   449,   451,
-     453,   455,   457,   459,   461,   466,   467,   468,   469,   473,
-     474,   476,   481,   482,   484,   486,   491,   492,   494,   499,
-     500,   502,   507,   508,   510,   512,   514,   519,   520,   522,
-     527,   528,   533,   534,   539,   540,   545,   546,   551,   552,
-     557,   558,   560,   562,   567,   572,   573,   575,   577,   583,
-     584,   590,   592,   594,   596,   601,   602,   607,   608,   609,
-     610,   611,   612,   613,   614,   615,   616,   620,   621,   627,
-     628,   634,   635,   636,   637,   638,   639,   640,   641,   642,
-     651,   658,   660,   670,   671,   676,   678,   680,   682,   686,
-     687,   692,   697,   700,   702,   704,   709,   711,   719,   720,
-     722,   726,   727,   732,   733,   738,   739,   743,   748,   749,
-     753,   755,   761,   762,   766,   768,   770,   772,   778,   779,
-     783,   784,   788,   790,   792,   797,   799,   804,   806,   810,
-     813,   817,   820,   824,   826,   830,   832,   839,   841,   843,
-     852,   854,   856,   858,   860,   865,   867,   869,   871,   876,
-     889,   890,   895,   897,   902,   906,   908,   910,   912,   914,
-     920,   921,   927,   928,   932,   933,   938,   940,   946,   947,
-     949,   954,   956,   963,   965,   969,   970,   975,   977,   981,
-     982,   986,   988,   992,   993,   997,   998,  1002,  1003,  1018,
-    1019,  1020,  1021,  1022,  1026,  1031,  1038,  1048,  1053,  1058,
-    1066,  1071,  1076,  1081,  1086,  1094,  1116,  1121,  1128,  1130,
-    1137,  1142,  1147,  1158,  1163,  1168,  1173,  1178,  1187,  1192,
-    1200,  1201,  1202,  1203,  1209,  1214,  1222,  1223,  1224,  1225,
-    1229,  1230,  1231,  1232,  1237,  1238,  1247,  1248,  1253,  1254,
-    1259,  1261,  1263,  1265,  1267,  1270,  1269,  1281,  1282,  1284,
-    1294,  1295,  1300,  1304,  1306,  1308,  1310,  1312,  1314,  1316,
-    1318,  1323,  1325,  1327,  1329,  1331,  1333,  1335,  1337,  1339,
-    1341,  1343,  1345,  1351,  1352,  1354,  1356,  1358,  1363,  1364,
-    1370,  1371,  1373,  1375,  1380,  1382,  1384,  1386,  1391,  1392,
-    1394,  1396,  1401,  1402,  1404,  1409,  1410,  1412,  1414,  1419,
-    1421,  1423,  1428,  1429,  1433,  1435,  1437,  1439,  1441,  1446,
-    1448,  1453,  1455,  1460,  1461,  1463,  1464,  1469,  1470,  1472,
-    1474,  1479,  1481,  1487,  1488,  1490,  1493,  1496,  1501,  1502,
-    1507,  1512,  1516,  1518,  1520,  1525,  1527,  1533,  1534,  1542,
-    1543,  1547,  1548,  1549,  1551,  1553,  1560,  1561,  1563,  1565,
-    1570,  1571,  1577,  1578,  1582,  1583,  1588,  1589,  1590,  1592,
-    1600,  1601,  1603,  1606,  1608,  1612,  1613,  1614,  1616,  1618,
-    1622,  1627,  1635,  1636,  1645,  1647,  1652,  1653,  1654,  1658,
-    1659,  1660,  1664,  1665,  1666,  1670,  1671,  1672,  1677,  1678,
-    1679,  1680,  1686,  1687,  1689,  1694,  1695,  1700,  1701,  1702,
-    1703,  1704,  1719,  1720,  1725,  1726,  1734,  1736,  1738,  1741,
-    1743,  1745,  1768,  1769,  1771,  1773,  1778,  1779,  1781,  1786,
-    1791,  1792,  1798,  1797,  1801,  1805,  1807,  1809,  1815,  1816,
-    1821,  1826,  1828,  1833,  1835,  1836,  1838,  1843,  1845,  1847,
-    1852,  1854,  1859,  1864,  1872,  1878,  1877,  1891,  1892,  1897,
-    1898,  1902,  1907,  1912,  1920,  1925,  1936,  1937,  1948,  1949,
-    1955,  1956,  1960,  1961,  1962,  1965,  1964,  1975,  1980,  1985,
-    1991,  2000,  2006,  2012,  2018,  2024,  2032,  2038,  2046,  2052,
-    2061,  2062,  2063,  2067,  2071,  2073,  2078,  2079,  2083,  2084,
-    2089,  2095,  2096,  2099,  2101,  2102,  2106,  2107,  2108,  2109,
-    2143,  2145,  2146,  2148,  2153,  2158,  2163,  2165,  2167,  2172,
-    2174,  2176,  2178,  2183,  2185,  2195,  2197,  2198,  2203,  2205,
-    2207,  2212,  2214,  2216,  2221,  2223,  2225,  2234,  2235,  2236,
-    2240,  2242,  2244,  2249,  2251,  2253,  2258,  2260,  2262,  2277,
-    2279,  2280,  2282,  2287,  2288,  2293,  2295,  2297,  2302,  2304,
-    2306,  2308,  2313,  2315,  2317,  2327,  2329,  2330,  2332,  2337,
-    2339,  2341,  2346,  2348,  2350,  2352,  2357,  2359,  2361,  2392,
-    2394,  2395,  2397,  2402,  2407,  2415,  2417,  2419,  2424,  2426,
-    2431,  2433,  2447,  2448,  2450,  2455,  2457,  2459,  2461,  2463,
-    2468,  2469,  2471,  2473,  2478,  2480,  2482,  2488,  2490,  2492,
-    2496,  2498,  2500,  2502,  2516,  2517,  2519,  2524,  2526,  2528,
-    2530,  2532,  2537,  2538,  2540,  2542,  2547,  2549,  2551,  2557,
-    2558,  2560,  2569,  2572,  2574,  2577,  2579,  2581,  2594,  2595,
-    2597,  2602,  2604,  2606,  2608,  2610,  2615,  2616,  2618,  2620,
-    2625,  2627,  2635,  2636,  2637,  2642,  2643,  2647,  2649,  2651,
-    2653,  2655,  2657,  2664,  2666,  2668,  2670,  2672,  2674,  2676,
-    2678,  2680,  2682,  2687,  2689,  2691,  2696,  2722,  2723,  2725,
-    2729,  2730,  2734,  2736,  2738,  2740,  2742,  2744,  2751,  2753,
-    2755,  2757,  2759,  2761,  2766,  2771,  2773,  2775,  2793,  2795,
-    2800,  2801
+       0,   291,   291,   297,   306,   307,   308,   312,   313,   314,
+     318,   319,   323,   324,   328,   329,   333,   334,   340,   342,
+     344,   346,   351,   352,   358,   362,   364,   365,   367,   368,
+     370,   372,   374,   382,   383,   389,   390,   391,   396,   398,
+     403,   404,   408,   412,   414,   416,   418,   423,   426,   428,
+     430,   432,   434,   436,   438,   440,   446,   448,   450,   452,
+     454,   456,   458,   460,   462,   467,   468,   469,   470,   474,
+     475,   477,   482,   483,   485,   487,   492,   493,   495,   500,
+     501,   503,   508,   509,   511,   513,   515,   520,   521,   523,
+     528,   529,   534,   535,   540,   541,   546,   547,   552,   553,
+     558,   559,   561,   563,   568,   573,   574,   576,   578,   584,
+     585,   591,   593,   595,   597,   602,   603,   608,   609,   610,
+     611,   612,   613,   614,   615,   616,   617,   621,   622,   628,
+     629,   635,   636,   637,   638,   639,   640,   641,   642,   643,
+     652,   659,   661,   671,   672,   677,   679,   681,   683,   687,
+     688,   693,   698,   701,   703,   705,   710,   712,   720,   721,
+     723,   727,   728,   733,   734,   739,   740,   744,   749,   750,
+     754,   756,   762,   763,   767,   769,   771,   773,   779,   780,
+     784,   785,   789,   791,   793,   798,   800,   805,   807,   811,
+     814,   818,   821,   825,   827,   831,   833,   840,   842,   844,
+     853,   855,   857,   859,   861,   866,   868,   870,   872,   877,
+     890,   891,   896,   898,   903,   907,   909,   911,   913,   915,
+     921,   922,   928,   929,   933,   934,   939,   941,   947,   948,
+     950,   955,   957,   964,   966,   970,   971,   976,   978,   982,
+     983,   987,   989,   993,   994,   998,   999,  1003,  1004,  1019,
+    1020,  1021,  1022,  1023,  1027,  1032,  1039,  1049,  1054,  1059,
+    1067,  1072,  1077,  1082,  1087,  1095,  1117,  1122,  1129,  1131,
+    1138,  1143,  1148,  1159,  1164,  1169,  1174,  1179,  1188,  1193,
+    1201,  1202,  1203,  1204,  1210,  1215,  1223,  1224,  1225,  1226,
+    1230,  1231,  1232,  1233,  1238,  1239,  1248,  1249,  1254,  1255,
+    1260,  1262,  1264,  1266,  1268,  1271,  1270,  1282,  1283,  1285,
+    1295,  1296,  1301,  1305,  1307,  1309,  1311,  1313,  1315,  1317,
+    1319,  1324,  1326,  1328,  1330,  1332,  1334,  1336,  1338,  1340,
+    1342,  1344,  1346,  1348,  1354,  1355,  1357,  1359,  1361,  1366,
+    1367,  1373,  1374,  1376,  1378,  1383,  1385,  1387,  1389,  1394,
+    1395,  1397,  1399,  1404,  1405,  1407,  1412,  1413,  1415,  1417,
+    1422,  1424,  1426,  1431,  1432,  1436,  1438,  1440,  1442,  1444,
+    1449,  1451,  1456,  1458,  1463,  1464,  1466,  1467,  1472,  1473,
+    1475,  1477,  1482,  1484,  1490,  1491,  1493,  1496,  1499,  1504,
+    1505,  1510,  1515,  1519,  1521,  1523,  1528,  1530,  1536,  1537,
+    1545,  1546,  1550,  1551,  1552,  1554,  1556,  1563,  1564,  1566,
+    1568,  1573,  1574,  1580,  1581,  1585,  1586,  1591,  1592,  1593,
+    1595,  1603,  1604,  1606,  1609,  1611,  1615,  1616,  1617,  1619,
+    1621,  1625,  1630,  1638,  1639,  1648,  1650,  1655,  1656,  1657,
+    1661,  1662,  1663,  1667,  1668,  1669,  1673,  1674,  1675,  1680,
+    1681,  1682,  1683,  1689,  1690,  1692,  1697,  1698,  1703,  1704,
+    1705,  1706,  1707,  1722,  1723,  1728,  1729,  1737,  1739,  1741,
+    1744,  1746,  1748,  1771,  1772,  1774,  1776,  1781,  1782,  1784,
+    1789,  1794,  1795,  1801,  1800,  1804,  1808,  1810,  1812,  1818,
+    1819,  1824,  1829,  1831,  1836,  1838,  1839,  1841,  1846,  1848,
+    1850,  1855,  1857,  1862,  1867,  1875,  1881,  1880,  1894,  1895,
+    1900,  1901,  1905,  1910,  1915,  1923,  1928,  1939,  1940,  1951,
+    1952,  1958,  1959,  1963,  1964,  1965,  1968,  1967,  1978,  1983,
+    1988,  1994,  2003,  2009,  2015,  2021,  2027,  2035,  2041,  2049,
+    2055,  2064,  2065,  2066,  2070,  2074,  2076,  2081,  2082,  2086,
+    2087,  2092,  2098,  2099,  2102,  2104,  2105,  2109,  2110,  2111,
+    2112,  2146,  2148,  2149,  2151,  2156,  2161,  2166,  2168,  2170,
+    2175,  2177,  2179,  2181,  2186,  2188,  2198,  2200,  2201,  2206,
+    2208,  2210,  2215,  2217,  2219,  2224,  2226,  2228,  2237,  2238,
+    2239,  2243,  2245,  2247,  2252,  2254,  2256,  2261,  2263,  2265,
+    2280,  2282,  2283,  2285,  2290,  2291,  2296,  2298,  2300,  2305,
+    2307,  2309,  2311,  2316,  2318,  2320,  2330,  2332,  2333,  2335,
+    2340,  2342,  2344,  2349,  2351,  2353,  2355,  2360,  2362,  2364,
+    2395,  2397,  2398,  2400,  2405,  2410,  2418,  2420,  2422,  2427,
+    2429,  2434,  2436,  2450,  2451,  2453,  2458,  2460,  2462,  2464,
+    2466,  2471,  2472,  2474,  2476,  2481,  2483,  2485,  2491,  2493,
+    2495,  2499,  2501,  2503,  2505,  2519,  2520,  2522,  2527,  2529,
+    2531,  2533,  2535,  2540,  2541,  2543,  2545,  2550,  2552,  2554,
+    2560,  2561,  2563,  2572,  2575,  2577,  2580,  2582,  2584,  2597,
+    2598,  2600,  2605,  2607,  2609,  2611,  2613,  2618,  2619,  2621,
+    2623,  2628,  2630,  2638,  2639,  2640,  2645,  2646,  2650,  2652,
+    2654,  2656,  2658,  2660,  2667,  2669,  2671,  2673,  2675,  2677,
+    2679,  2681,  2683,  2685,  2690,  2692,  2694,  2699,  2725,  2726,
+    2728,  2732,  2733,  2737,  2739,  2741,  2743,  2745,  2747,  2754,
+    2756,  2758,  2760,  2762,  2764,  2769,  2774,  2776,  2778,  2796,
+    2798,  2803,  2804
 };
 #endif
@@ -1099,13 +1102,13 @@
   "STATIC", "INLINE", "FORTRAN", "CONST", "VOLATILE", "RESTRICT", "FORALL",
   "LVALUE", "VOID", "CHAR", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE",
-  "SIGNED", "UNSIGNED", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF", "LABEL",
-  "ENUM", "STRUCT", "UNION", "TYPE", "FTYPE", "DTYPE", "CONTEXT", "SIZEOF",
-  "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH", "CASE",
-  "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO", "RETURN",
-  "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH", "CATCHRESUME",
-  "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS", "ALIGNOF",
-  "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT", "THREADLOCAL",
-  "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname", "TYPEGENname",
-  "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
+  "SIGNED", "UNSIGNED", "VALIST", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF",
+  "LABEL", "ENUM", "STRUCT", "UNION", "OTYPE", "FTYPE", "DTYPE", "TRAIT",
+  "SIZEOF", "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH",
+  "CASE", "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO",
+  "RETURN", "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH",
+  "CATCHRESUME", "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS",
+  "ALIGNOF", "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT",
+  "THREADLOCAL", "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname",
+  "TYPEGENname", "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
   "INTEGERconstant", "FLOATINGconstant", "CHARACTERconstant",
   "STRINGliteral", "ZERO", "ONE", "ARROW", "ICR", "DECR", "LS", "RS", "LE",
@@ -1169,18 +1172,18 @@
   "type_parameter", "$@2", "type_class", "assertion_list_opt", "assertion",
   "type_name_list", "type_declaring_list", "type_declarator",
-  "type_declarator_name", "context_specifier", "$@3",
-  "context_declaration_list", "context_declaration",
-  "new_context_declaring_list", "context_declaring_list",
-  "translation_unit", "external_definition_list",
-  "external_definition_list_opt", "external_definition", "$@4",
-  "external_function_definition", "function_definition", "declarator",
-  "subrange", "asm_name_opt", "attribute_list_opt", "attribute_list",
-  "attribute", "attribute_parameter_list", "attrib", "any_word",
-  "variable_declarator", "paren_identifier", "variable_ptr",
-  "variable_array", "variable_function", "function_declarator",
-  "function_no_ptr", "function_ptr", "function_array",
-  "old_function_declarator", "old_function_no_ptr", "old_function_ptr",
-  "old_function_array", "type_redeclarator", "paren_type", "type_ptr",
-  "type_array", "type_function", "identifier_parameter_declarator",
+  "type_declarator_name", "trait_specifier", "$@3",
+  "trait_declaration_list", "trait_declaration",
+  "new_trait_declaring_list", "trait_declaring_list", "translation_unit",
+  "external_definition_list", "external_definition_list_opt",
+  "external_definition", "$@4", "external_function_definition",
+  "function_definition", "declarator", "subrange", "asm_name_opt",
+  "attribute_list_opt", "attribute_list", "attribute",
+  "attribute_parameter_list", "attrib", "any_word", "variable_declarator",
+  "paren_identifier", "variable_ptr", "variable_array",
+  "variable_function", "function_declarator", "function_no_ptr",
+  "function_ptr", "function_array", "old_function_declarator",
+  "old_function_no_ptr", "old_function_ptr", "old_function_array",
+  "type_redeclarator", "paren_type", "type_ptr", "type_array",
+  "type_function", "identifier_parameter_declarator",
   "identifier_parameter_ptr", "identifier_parameter_array",
   "identifier_parameter_function", "type_parameter_redeclarator",
@@ -1219,8 +1222,8 @@
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,    40,    41,
-      91,    93,    46,   123,   125,    44,    58,    33,    42,    38,
-      43,    45,   126,    47,    37,    60,    62,    94,   124,    63,
-      61,    59
+     355,   356,   357,   358,   359,   360,   361,   362,   363,    40,
+      41,    91,    93,    46,   123,   125,    44,    58,    33,    42,
+      38,    43,    45,   126,    47,    37,    60,    62,    94,   124,
+      63,    61,    59
 };
 # endif
@@ -1229,80 +1232,80 @@
 static const yytype_uint16 yyr1[] =
 {
-       0,   132,   133,   134,   135,   135,   135,   136,   136,   136,
-     137,   137,   138,   138,   139,   139,   140,   140,   141,   141,
-     141,   141,   142,   142,   142,   142,   142,   142,   142,   142,
-     142,   142,   142,   143,   143,   144,   144,   144,   144,   144,
-     145,   145,   146,   146,   146,   146,   146,   147,   147,   147,
-     147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
-     147,   147,   147,   147,   147,   148,   148,   148,   148,   149,
-     149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
-     152,   152,   153,   153,   153,   153,   153,   154,   154,   154,
-     155,   155,   156,   156,   157,   157,   158,   158,   159,   159,
-     160,   160,   160,   160,   161,   162,   162,   162,   162,   163,
-     163,   164,   164,   164,   164,   165,   165,   166,   166,   166,
-     166,   166,   166,   166,   166,   166,   166,   167,   167,   168,
-     168,   169,   169,   169,   169,   169,   169,   169,   169,   169,
-     170,   171,   171,   172,   172,   173,   173,   173,   173,   174,
-     174,   175,   176,   176,   176,   176,   176,   176,   177,   177,
-     177,   178,   178,   179,   179,   180,   180,   181,   182,   182,
-     183,   183,   184,   184,   185,   185,   185,   185,   186,   186,
-     187,   187,   188,   188,   188,   189,   189,   190,   190,   190,
-     190,   190,   190,   190,   190,   190,   190,   191,   191,   191,
-     192,   192,   192,   192,   192,   193,   193,   193,   193,   194,
-     195,   195,   195,   195,   195,   196,   196,   196,   196,   196,
-     197,   197,   198,   198,   199,   199,   200,   200,   201,   201,
-     201,   202,   202,   203,   203,   204,   204,   205,   205,   206,
-     206,   207,   207,   208,   208,   209,   209,   210,   210,   211,
-     211,   211,   211,   211,   212,   212,   212,   213,   213,   213,
-     214,   214,   214,   214,   214,   215,   215,   215,   216,   216,
-     217,   217,   217,   218,   218,   218,   218,   218,   219,   219,
-     220,   220,   220,   220,   221,   221,   222,   222,   222,   222,
-     223,   223,   223,   223,   224,   224,   225,   225,   226,   226,
-     227,   227,   227,   227,   227,   228,   227,   229,   229,   229,
-     230,   230,   231,   232,   232,   232,   232,   232,   232,   232,
-     232,   233,   233,   233,   233,   233,   233,   233,   233,   233,
-     233,   233,   233,   234,   234,   234,   234,   234,   235,   235,
-     236,   236,   236,   236,   237,   237,   237,   237,   238,   238,
-     238,   238,   239,   239,   239,   240,   240,   240,   240,   241,
-     241,   241,   242,   242,   243,   243,   243,   243,   243,   244,
-     244,   245,   245,   246,   246,   246,   246,   247,   247,   247,
-     247,   248,   248,   249,   249,   249,   249,   249,   250,   250,
-     251,   252,   253,   253,   253,   254,   254,   255,   255,   256,
-     256,   257,   257,   257,   257,   257,   258,   258,   258,   258,
-     259,   259,   260,   260,   261,   261,   262,   262,   262,   262,
-     263,   263,   263,   263,   263,   264,   264,   264,   264,   264,
-     265,   265,   266,   266,   267,   267,   268,   268,   268,   269,
-     269,   269,   270,   270,   270,   271,   271,   271,   272,   272,
-     272,   272,   273,   273,   273,   274,   274,   275,   275,   275,
-     275,   275,   276,   276,   277,   277,   278,   278,   278,   278,
-     278,   278,   279,   279,   279,   279,   280,   280,   280,   281,
-     282,   282,   284,   283,   283,   285,   285,   285,   286,   286,
-     287,   287,   287,   288,   288,   288,   288,   289,   289,   289,
-     290,   290,   291,   291,   292,   293,   292,   294,   294,   295,
-     295,   296,   296,   296,   297,   297,   298,   298,   299,   299,
-     300,   300,   301,   301,   301,   302,   301,   301,   303,   303,
-     303,   304,   304,   304,   304,   304,   304,   304,   304,   304,
-     305,   305,   305,   306,   307,   307,   308,   308,   309,   309,
-     310,   311,   311,   312,   312,   312,   313,   313,   313,   313,
-     314,   314,   314,   314,   315,   315,   316,   316,   316,   317,
-     317,   317,   317,   318,   318,   319,   319,   319,   320,   320,
-     320,   321,   321,   321,   322,   322,   322,   323,   323,   323,
-     324,   324,   324,   325,   325,   325,   326,   326,   326,   327,
-     327,   327,   327,   328,   328,   329,   329,   329,   330,   330,
-     330,   330,   331,   331,   331,   332,   332,   332,   332,   333,
-     333,   333,   334,   334,   334,   334,   335,   335,   335,   336,
-     336,   336,   336,   337,   337,   338,   338,   338,   339,   339,
-     340,   340,   341,   341,   341,   342,   342,   342,   342,   342,
-     343,   343,   343,   343,   344,   344,   344,   345,   345,   345,
-     346,   346,   346,   346,   347,   347,   347,   348,   348,   348,
-     348,   348,   349,   349,   349,   349,   350,   350,   350,   351,
-     351,   351,   352,   352,   352,   352,   352,   352,   353,   353,
-     353,   354,   354,   354,   354,   354,   355,   355,   355,   355,
-     356,   356,   357,   357,   357,   358,   358,   359,   359,   359,
-     359,   359,   359,   360,   360,   360,   360,   360,   360,   360,
-     360,   360,   360,   361,   361,   361,   361,   362,   362,   362,
-     363,   363,   364,   364,   364,   364,   364,   364,   365,   365,
-     365,   365,   365,   365,   366,   367,   367,   367,   368,   368,
-     369,   369
+       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,   145,   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,   148,   148,   149,   149,   149,   149,   150,
+     150,   150,   151,   151,   151,   151,   152,   152,   152,   153,
+     153,   153,   154,   154,   154,   154,   154,   155,   155,   155,
+     156,   156,   157,   157,   158,   158,   159,   159,   160,   160,
+     161,   161,   161,   161,   162,   163,   163,   163,   163,   164,
+     164,   165,   165,   165,   165,   166,   166,   167,   167,   167,
+     167,   167,   167,   167,   167,   167,   167,   168,   168,   169,
+     169,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     171,   172,   172,   173,   173,   174,   174,   174,   174,   175,
+     175,   176,   177,   177,   177,   177,   177,   177,   178,   178,
+     178,   179,   179,   180,   180,   181,   181,   182,   183,   183,
+     184,   184,   185,   185,   186,   186,   186,   186,   187,   187,
+     188,   188,   189,   189,   189,   190,   190,   191,   191,   191,
+     191,   191,   191,   191,   191,   191,   191,   192,   192,   192,
+     193,   193,   193,   193,   193,   194,   194,   194,   194,   195,
+     196,   196,   196,   196,   196,   197,   197,   197,   197,   197,
+     198,   198,   199,   199,   200,   200,   201,   201,   202,   202,
+     202,   203,   203,   204,   204,   205,   205,   206,   206,   207,
+     207,   208,   208,   209,   209,   210,   210,   211,   211,   212,
+     212,   212,   212,   212,   213,   213,   213,   214,   214,   214,
+     215,   215,   215,   215,   215,   216,   216,   216,   217,   217,
+     218,   218,   218,   219,   219,   219,   219,   219,   220,   220,
+     221,   221,   221,   221,   222,   222,   223,   223,   223,   223,
+     224,   224,   224,   224,   225,   225,   226,   226,   227,   227,
+     228,   228,   228,   228,   228,   229,   228,   230,   230,   230,
+     231,   231,   232,   233,   233,   233,   233,   233,   233,   233,
+     233,   234,   234,   234,   234,   234,   234,   234,   234,   234,
+     234,   234,   234,   234,   235,   235,   235,   235,   235,   236,
+     236,   237,   237,   237,   237,   238,   238,   238,   238,   239,
+     239,   239,   239,   240,   240,   240,   241,   241,   241,   241,
+     242,   242,   242,   243,   243,   244,   244,   244,   244,   244,
+     245,   245,   246,   246,   247,   247,   247,   247,   248,   248,
+     248,   248,   249,   249,   250,   250,   250,   250,   250,   251,
+     251,   252,   253,   254,   254,   254,   255,   255,   256,   256,
+     257,   257,   258,   258,   258,   258,   258,   259,   259,   259,
+     259,   260,   260,   261,   261,   262,   262,   263,   263,   263,
+     263,   264,   264,   264,   264,   264,   265,   265,   265,   265,
+     265,   266,   266,   267,   267,   268,   268,   269,   269,   269,
+     270,   270,   270,   271,   271,   271,   272,   272,   272,   273,
+     273,   273,   273,   274,   274,   274,   275,   275,   276,   276,
+     276,   276,   276,   277,   277,   278,   278,   279,   279,   279,
+     279,   279,   279,   280,   280,   280,   280,   281,   281,   281,
+     282,   283,   283,   285,   284,   284,   286,   286,   286,   287,
+     287,   288,   288,   288,   289,   289,   289,   289,   290,   290,
+     290,   291,   291,   292,   292,   293,   294,   293,   295,   295,
+     296,   296,   297,   297,   297,   298,   298,   299,   299,   300,
+     300,   301,   301,   302,   302,   302,   303,   302,   302,   304,
+     304,   304,   305,   305,   305,   305,   305,   305,   305,   305,
+     305,   306,   306,   306,   307,   308,   308,   309,   309,   310,
+     310,   311,   312,   312,   313,   313,   313,   314,   314,   314,
+     314,   315,   315,   315,   315,   316,   316,   317,   317,   317,
+     318,   318,   318,   318,   319,   319,   320,   320,   320,   321,
+     321,   321,   322,   322,   322,   323,   323,   323,   324,   324,
+     324,   325,   325,   325,   326,   326,   326,   327,   327,   327,
+     328,   328,   328,   328,   329,   329,   330,   330,   330,   331,
+     331,   331,   331,   332,   332,   332,   333,   333,   333,   333,
+     334,   334,   334,   335,   335,   335,   335,   336,   336,   336,
+     337,   337,   337,   337,   338,   338,   339,   339,   339,   340,
+     340,   341,   341,   342,   342,   342,   343,   343,   343,   343,
+     343,   344,   344,   344,   344,   345,   345,   345,   346,   346,
+     346,   347,   347,   347,   347,   348,   348,   348,   349,   349,
+     349,   349,   349,   350,   350,   350,   350,   351,   351,   351,
+     352,   352,   352,   353,   353,   353,   353,   353,   353,   354,
+     354,   354,   355,   355,   355,   355,   355,   356,   356,   356,
+     356,   357,   357,   358,   358,   358,   359,   359,   360,   360,
+     360,   360,   360,   360,   361,   361,   361,   361,   361,   361,
+     361,   361,   361,   361,   362,   362,   362,   362,   363,   363,
+     363,   364,   364,   365,   365,   365,   365,   365,   365,   366,
+     366,   366,   366,   366,   366,   367,   368,   368,   368,   369,
+     369,   370,   370
 };
 
@@ -1343,47 +1346,47 @@
        1,     2,     1,     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,     5,     7,     2,     2,
-       2,     1,     2,     2,     3,     2,     3,     1,     2,     3,
-       2,     2,     4,     0,     1,     2,     2,     1,     0,     1,
-       2,     2,     5,     6,     2,     2,     4,     0,     2,     0,
-       1,     1,     1,     5,     5,     5,     1,     5,     5,     9,
-       1,     5,     0,     1,     1,     5,     1,     1,     5,     5,
-       1,     3,     3,     4,     1,     1,     1,     1,     2,     1,
-       3,     3,     1,     2,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
-       1,     2,     0,     2,     2,     1,     4,     0,     1,     2,
-       3,     4,     2,     2,     1,     2,     1,     2,     5,     5,
-       7,     6,     1,     2,     2,     3,     1,     2,     2,     4,
-       2,     4,     0,     4,     2,     1,     1,     1,     0,     2,
-       5,     5,    13,     1,     1,     3,     3,     2,     3,     3,
-       2,     4,     1,     6,     9,     0,    11,     1,     3,     3,
-       3,     1,     1,     5,     2,     5,     0,     1,     1,     3,
-       0,     1,     1,     1,     1,     0,     6,     2,     1,     2,
-       4,     2,     3,     3,     3,     4,     5,     5,     5,     6,
-       1,     1,     1,     3,     0,     5,     0,     1,     1,     2,
-       6,     1,     3,     0,     1,     4,     1,     1,     1,     1,
+       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,     5,     7,     2,
+       2,     2,     1,     2,     2,     3,     2,     3,     1,     2,
+       3,     2,     2,     4,     0,     1,     2,     2,     1,     0,
+       1,     2,     2,     5,     6,     2,     2,     4,     0,     2,
+       0,     1,     1,     1,     5,     5,     5,     1,     5,     5,
+       9,     1,     5,     0,     1,     1,     5,     1,     1,     5,
+       5,     1,     3,     3,     4,     1,     1,     1,     1,     2,
+       1,     3,     3,     1,     2,     1,     3,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
+       1,     1,     2,     0,     2,     2,     1,     4,     0,     1,
+       2,     3,     4,     2,     2,     1,     2,     1,     2,     5,
+       5,     7,     6,     1,     2,     2,     3,     1,     2,     2,
+       4,     2,     4,     0,     4,     2,     1,     1,     1,     0,
+       2,     5,     5,    13,     1,     1,     3,     3,     2,     3,
+       3,     2,     4,     1,     6,     9,     0,    11,     1,     3,
+       3,     3,     1,     1,     5,     2,     5,     0,     1,     1,
+       3,     0,     1,     1,     1,     1,     0,     6,     2,     1,
+       2,     4,     2,     3,     3,     3,     4,     5,     5,     5,
+       6,     1,     1,     1,     3,     0,     5,     0,     1,     1,
+       2,     6,     1,     3,     0,     1,     4,     1,     1,     1,
+       1,     2,     1,     2,     2,     1,     3,     2,     3,     3,
+       2,     4,     4,     3,     8,     3,     2,     1,     2,     6,
+       8,     3,     2,     3,     3,     4,     4,     3,     1,     1,
+       1,     4,     6,     3,     2,     3,     3,     4,     4,     3,
        2,     1,     2,     2,     1,     3,     2,     3,     3,     2,
-       4,     4,     3,     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,     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
 };
 
@@ -1395,160 +1398,160 @@
      294,   294,   315,   313,   316,   314,   317,   318,   300,   302,
      301,     0,   303,   329,   321,   326,   324,   325,   323,   322,
-     327,   328,   330,   331,   332,   546,   546,   546,     0,     0,
-       0,   294,   220,   304,   319,   320,     7,   359,     0,     8,
-      14,    15,     0,     2,   294,   564,     9,   524,   522,   247,
-       3,   452,     3,   260,     0,     3,     3,     3,   248,     3,
-       0,     0,     0,   295,   296,   298,   294,   307,   310,   312,
-     340,   286,   333,   338,   287,   348,   288,   355,   352,   362,
-       0,     0,   363,   289,   472,   476,     3,     3,     0,     2,
-     518,   523,   528,   299,     0,     0,   546,   576,   546,     2,
-     587,   588,   589,   294,     0,   730,   731,     0,    12,   294,
-       0,    13,   270,   271,     0,   295,   290,   291,   292,   293,
-     525,   305,   391,   547,   548,   369,   370,    12,   443,   444,
-      11,   439,   442,     0,   502,   497,   488,   443,   444,     0,
-       0,   527,   221,     0,   294,     0,     0,     0,     0,     0,
-       0,     0,     0,   294,   294,     2,     0,   732,   295,   581,
-     593,   736,   729,   727,   734,     0,     0,     0,   254,     2,
-       0,   531,   437,   438,   436,     0,     0,     0,     0,   546,
-       0,   633,   634,     0,     0,   544,   540,   546,   561,   546,
-     546,   541,     2,   542,   546,   600,   546,   546,   603,     0,
-       0,     0,   294,   294,   313,   360,     2,   294,   261,   297,
-     308,   341,   353,   477,     0,     2,     0,   452,   262,   295,
-     334,   349,   356,   473,     0,     2,     0,   311,   335,   342,
-     343,     0,   350,   354,   357,   361,   444,   294,   294,   365,
-     368,     0,   394,   474,   478,     0,     0,     0,     1,   294,
-       2,   529,   575,   577,   294,     2,   740,   295,   743,   544,
-     544,   295,     0,     0,     0,   273,   546,   541,     2,   294,
-       0,     0,   294,   549,     2,   500,     2,   553,     0,     0,
-       0,     0,     0,     0,    18,    59,     4,     5,     6,    16,
-       0,     0,     0,   294,     2,     0,   294,    65,    66,    67,
-      68,    48,    19,    49,    22,    47,    69,     0,    72,    76,
-      79,    82,    87,    90,    92,    94,    96,    98,   100,   105,
-     494,   750,   450,   493,     0,   448,   449,     0,   565,   580,
-     583,   586,   592,   595,   598,   359,     0,     2,   738,     0,
-     294,   741,     2,   294,     3,   424,     0,   432,   295,   294,
-     307,   333,   287,   348,   355,     3,     3,   406,   410,   420,
-     425,   472,   294,   426,   705,   706,   294,   427,   429,   294,
-       2,   582,   594,   728,     2,     2,   249,     2,   457,     0,
-     455,   454,   453,   141,     2,     2,   251,     2,     2,   250,
-       2,   281,     2,   282,     0,   280,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   566,   605,     0,   452,     2,
-     560,   569,   659,   562,   563,   532,   294,     2,   599,   608,
-     601,   602,     0,   276,   294,   294,   339,   295,     0,   295,
-       0,   294,   733,   737,   735,   533,   294,   544,   255,   263,
-     309,     0,     2,   534,   294,   498,   336,   337,   283,   351,
-     358,     0,   294,     2,   383,   294,   371,     0,     0,   377,
-     727,   294,   748,   397,     0,   475,   499,   252,   253,   519,
-     294,   434,     0,   294,   237,     0,     2,   239,     0,   295,
-       0,   257,     2,   258,   278,     0,     0,     2,   294,   544,
-     294,   485,   487,   486,     0,     0,   750,     0,   294,     0,
-     294,   489,   294,   559,   557,   558,   556,     0,   551,   554,
-       0,     0,   294,    56,   294,    69,    52,   294,    62,   294,
-     294,    50,    51,    64,     2,   127,     0,     0,   446,     0,
-     445,   111,   294,    54,    55,    17,     0,    29,    30,    35,
-       2,     0,    35,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,     0,     0,    53,     0,     0,     0,     0,
+     327,   328,   333,   330,   331,   332,   547,   547,   547,     0,
+       0,     0,   294,   220,   304,   319,   320,     7,   360,     0,
+       8,    14,    15,     0,     2,   294,   565,     9,   525,   523,
+     247,     3,   453,     3,   260,     0,     3,     3,     3,   248,
+       3,     0,     0,     0,   295,   296,   298,   294,   307,   310,
+     312,   341,   286,   334,   339,   287,   349,   288,   356,   353,
+     363,     0,     0,   364,   289,   473,   477,     3,     3,     0,
+       2,   519,   524,   529,   299,     0,     0,   547,   577,   547,
+       2,   588,   589,   590,   294,     0,   731,   732,     0,    12,
+     294,     0,    13,   270,   271,     0,   295,   290,   291,   292,
+     293,   526,   305,   392,   548,   549,   370,   371,    12,   444,
+     445,    11,   440,   443,     0,   503,   498,   489,   444,   445,
+       0,     0,   528,   221,     0,   294,     0,     0,     0,     0,
+       0,     0,     0,     0,   294,   294,     2,     0,   733,   295,
+     582,   594,   737,   730,   728,   735,     0,     0,     0,   254,
+       2,     0,   532,   438,   439,   437,     0,     0,     0,     0,
+     547,     0,   634,   635,     0,     0,   545,   541,   547,   562,
+     547,   547,   542,     2,   543,   547,   601,   547,   547,   604,
+       0,     0,     0,   294,   294,   313,   361,     2,   294,   261,
+     297,   308,   342,   354,   478,     0,     2,     0,   453,   262,
+     295,   335,   350,   357,   474,     0,     2,     0,   311,   336,
+     343,   344,     0,   351,   355,   358,   362,   445,   294,   294,
+     366,   369,     0,   395,   475,   479,     0,     0,     0,     1,
+     294,     2,   530,   576,   578,   294,     2,   741,   295,   744,
+     545,   545,   295,     0,     0,     0,   273,   547,   542,     2,
+     294,     0,     0,   294,   550,     2,   501,     2,   554,     0,
+       0,     0,     0,     0,     0,    18,    59,     4,     5,     6,
+      16,     0,     0,     0,   294,     2,     0,   294,    65,    66,
+      67,    68,    48,    19,    49,    22,    47,    69,     0,    72,
+      76,    79,    82,    87,    90,    92,    94,    96,    98,   100,
+     105,   495,   751,   451,   494,     0,   449,   450,     0,   566,
+     581,   584,   587,   593,   596,   599,   360,     0,     2,   739,
+       0,   294,   742,     2,   294,     3,   425,     0,   433,   295,
+     294,   307,   334,   287,   349,   356,     3,     3,   407,   411,
+     421,   426,   473,   294,   427,   706,   707,   294,   428,   430,
+     294,     2,   583,   595,   729,     2,     2,   249,     2,   458,
+       0,   456,   455,   454,   141,     2,     2,   251,     2,     2,
+     250,     2,   281,     2,   282,     0,   280,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   567,   606,     0,   453,
+       2,   561,   570,   660,   563,   564,   533,   294,     2,   600,
+     609,   602,   603,     0,   276,   294,   294,   340,   295,     0,
+     295,     0,   294,   734,   738,   736,   534,   294,   545,   255,
+     263,   309,     0,     2,   535,   294,   499,   337,   338,   283,
+     352,   359,     0,   294,     2,   384,   294,   372,     0,     0,
+     378,   728,   294,   749,   398,     0,   476,   500,   252,   253,
+     520,   294,   435,     0,   294,   237,     0,     2,   239,     0,
+     295,     0,   257,     2,   258,   278,     0,     0,     2,   294,
+     545,   294,   486,   488,   487,     0,     0,   751,     0,   294,
+       0,   294,   490,   294,   560,   558,   559,   557,     0,   552,
+     555,     0,     0,   294,    56,   294,    69,    52,   294,    62,
+     294,   294,    50,    51,    64,     2,   127,     0,     0,   447,
+       0,   446,   111,   294,    54,    55,    17,     0,    29,    30,
+      35,     2,     0,    35,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,     0,     0,    53,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   108,     2,   645,   451,
-     642,   546,   546,   650,   479,   294,     2,   584,   585,     0,
-     596,   597,     0,     2,   739,   742,   111,   294,     2,   294,
-       0,   707,   295,   711,   702,   703,   709,     0,     2,     2,
-     667,   546,   750,   616,   546,   546,   750,   546,   630,   546,
-     546,   681,   433,   664,   546,   546,   672,   679,   294,   428,
-     295,     0,     0,   294,   717,   295,   722,   750,   714,   294,
-     719,   750,   294,   294,   294,     0,   111,     0,    18,     5,
-       2,     0,    19,     0,   458,   748,     0,     0,   464,   241,
-       0,   294,     0,     0,     0,   544,   568,   572,   574,   604,
-     607,   611,   614,   567,   606,     0,   284,   657,     0,   294,
-     277,     0,     0,     0,     0,   275,     2,     0,   259,   535,
-     294,     0,     0,     0,     0,   294,   294,     0,     0,   691,
-     381,   384,   388,   546,   388,   696,   387,   688,   546,   546,
-     364,   372,   380,   373,   546,   375,   378,   294,   749,     0,
-       0,   395,   748,   295,     3,   413,     3,   417,   416,   590,
-       0,   530,   294,     3,     3,   294,   432,   295,     3,   426,
-     427,     2,     0,     0,     0,   484,   306,   294,   480,   482,
-       3,     2,     2,     0,   501,     3,     0,   553,   129,     0,
-       0,   222,     0,     0,     0,     2,     0,     0,    36,     0,
-       0,   111,   294,    20,     0,    21,     0,   691,   447,     0,
-     109,     3,     2,    27,     2,     0,    33,     0,     2,    25,
-       0,   106,   107,    73,    74,    75,    77,    78,    80,    81,
-      85,    86,    83,    84,    88,    89,    91,    93,    95,    97,
-      99,     0,     0,   751,   294,     0,     0,     0,   646,   647,
-     643,   644,   496,   495,   294,     0,     3,   294,   713,   294,
-     718,   295,   294,   294,   294,   661,   704,   660,     2,   294,
-       0,     0,     0,     0,     0,     0,     0,     0,   682,     0,
-     668,   619,   635,   669,     2,   615,   622,   430,   617,   618,
-     431,     2,   629,   638,   631,   632,   665,   666,   680,   708,
-     712,   710,   750,   268,     2,   744,     2,   421,   716,   721,
-     422,     0,   400,     3,     3,     3,     3,   452,     3,     0,
-       2,   467,   463,   749,     0,   459,   466,     2,   462,   465,
-       0,   294,   242,   264,     3,   272,   274,     0,   452,     2,
-     570,   571,     2,   609,   610,     0,   658,   536,     3,   345,
-     344,   347,   346,   294,   537,     0,   538,   294,   374,   376,
-       2,     0,     0,     0,     0,   104,   390,   692,   693,   385,
-     389,   386,   689,   690,   379,   383,   366,   397,   392,   398,
-       0,     0,     0,   435,   240,     0,     0,     3,     2,   667,
-     428,     0,   526,     0,   750,   488,     0,   294,   294,   294,
-       0,   550,   552,   130,     0,     0,   215,     0,     0,     0,
-     223,   224,    57,     0,    63,   294,     0,    61,    60,     0,
-     128,   692,   457,    70,    71,   110,   115,     3,   109,     0,
-       0,     0,    24,    35,     3,     0,    32,   102,     0,     3,
-     649,   653,   656,   648,     3,   591,     3,   715,   720,     2,
-     294,     3,     3,   295,     0,     3,   621,   625,   628,   637,
-     671,   675,   678,   294,     3,   620,   636,   670,   294,   294,
-     423,   294,   294,   745,     0,     0,     0,     0,   256,     0,
-     104,     0,     3,     3,     0,   460,     0,   456,     0,     0,
-     245,   294,     0,     0,   129,     0,     0,     0,     0,     0,
-     129,     0,     0,   109,   109,     2,     0,     0,     0,     3,
-     131,   132,     2,   143,   133,   134,   135,   136,   137,   138,
-     145,   147,     0,     0,     0,   285,   294,   294,   546,     0,
-     539,   294,   111,   695,   699,   701,   694,   382,   396,   393,
-     578,     2,   663,   662,     0,   668,     2,   481,   483,   503,
-       3,   511,   512,     0,     2,   507,     3,     3,     0,     0,
-     555,   222,     0,     0,     0,   222,     0,     0,     3,    37,
-     748,   109,     0,     3,   660,    42,     3,    40,     3,    34,
-       0,     3,   101,   103,     0,     2,   651,   652,     0,     0,
-     294,     0,     0,     0,     3,   637,     0,     2,   623,   624,
-       2,   639,     2,   673,   674,     0,     0,     3,     0,     3,
-       3,     3,     3,   408,   407,   411,     2,     2,   747,   746,
-     112,     0,     0,     0,     0,     3,   461,     3,     0,   243,
-     146,     3,   295,   294,     0,     0,     0,     0,     2,   191,
-       0,   189,     0,     0,     0,     0,     0,     0,     0,     0,
-     111,     0,   546,   151,   148,   294,     0,     0,   267,   279,
-       3,     3,   545,   612,   367,     2,   697,   698,   294,   266,
-     294,     0,   514,   491,   294,     0,     0,   490,   505,     0,
-       0,     0,   216,     0,   225,    58,   109,     0,     0,   116,
-     113,     0,     0,     0,     0,     0,     0,    23,     0,   654,
-     294,   579,   265,   723,   724,   725,     0,   676,   294,   294,
-     294,     3,     3,     0,   684,     0,     0,     0,     0,   294,
-     294,     3,   543,   468,   469,     0,     0,   246,   295,     0,
-       0,     0,     0,   294,   192,   190,     0,   187,   193,     0,
-       0,     0,     0,   197,   200,   198,   194,     0,   195,    35,
-     129,   144,   142,   244,     0,     0,   294,   415,   419,   418,
-       0,   508,     2,   509,     2,   510,   504,   294,   228,     0,
-     226,     0,   228,     3,   660,    31,   114,     2,    45,     2,
-      43,    41,    28,   112,    26,     3,   726,     3,     3,     3,
-       0,     0,   683,   685,   626,   640,   269,     2,   405,     3,
-     404,     0,   471,   468,   129,     0,     0,   129,     3,     0,
-     129,   188,     0,     2,     2,   209,   199,     0,     0,     0,
-       0,   140,   573,   613,     3,     2,     0,     0,     2,   229,
-       0,     0,   217,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   686,   687,   294,     0,   470,   152,     0,     0,
-       2,   165,   129,   154,     0,   182,     0,   129,     0,     2,
-     156,     0,     2,     0,     2,     2,     2,   196,    32,     0,
-     294,   513,   515,   506,     0,     0,     0,     0,   114,    38,
-       3,     3,   655,   627,   641,   677,   409,   129,   158,   161,
-       0,   160,   164,     3,   167,   166,     0,   129,   184,   129,
-       3,     0,   294,     0,   294,     0,     2,     0,     2,   139,
-     700,     2,   230,   231,     0,   227,   218,     0,     0,     0,
-     153,     0,     0,   163,   233,   168,     2,   235,   183,     0,
-     186,   172,   201,     3,   210,   214,   203,     3,     0,   294,
-       0,   294,     0,     0,     0,    39,    46,    44,   159,   162,
-     129,     0,   169,   294,   129,   129,     0,   173,     0,     0,
-     691,   211,   212,   213,     0,   202,     3,   204,     3,   294,
-     219,   232,   149,   170,   155,   129,   236,   185,   180,   178,
-     174,   157,   129,     0,   692,     0,     0,     0,     0,   150,
-     171,   181,   175,   179,   178,   176,     3,     3,     0,     0,
-     492,   177,   205,   207,     3,     3,   206,   208
+       0,     0,     0,     0,     0,     0,     0,   108,     2,   646,
+     452,   643,   547,   547,   651,   480,   294,     2,   585,   586,
+       0,   597,   598,     0,     2,   740,   743,   111,   294,     2,
+     294,     0,   708,   295,   712,   703,   704,   710,     0,     2,
+       2,   668,   547,   751,   617,   547,   547,   751,   547,   631,
+     547,   547,   682,   434,   665,   547,   547,   673,   680,   294,
+     429,   295,     0,     0,   294,   718,   295,   723,   751,   715,
+     294,   720,   751,   294,   294,   294,     0,   111,     0,    18,
+       5,     2,     0,    19,     0,   459,   749,     0,     0,   465,
+     241,     0,   294,     0,     0,     0,   545,   569,   573,   575,
+     605,   608,   612,   615,   568,   607,     0,   284,   658,     0,
+     294,   277,     0,     0,     0,     0,   275,     2,     0,   259,
+     536,   294,     0,     0,     0,     0,   294,   294,     0,     0,
+     692,   382,   385,   389,   547,   389,   697,   388,   689,   547,
+     547,   365,   373,   381,   374,   547,   376,   379,   294,   750,
+       0,     0,   396,   749,   295,     3,   414,     3,   418,   417,
+     591,     0,   531,   294,     3,     3,   294,   433,   295,     3,
+     427,   428,     2,     0,     0,     0,   485,   306,   294,   481,
+     483,     3,     2,     2,     0,   502,     3,     0,   554,   129,
+       0,     0,   222,     0,     0,     0,     2,     0,     0,    36,
+       0,     0,   111,   294,    20,     0,    21,     0,   692,   448,
+       0,   109,     3,     2,    27,     2,     0,    33,     0,     2,
+      25,     0,   106,   107,    73,    74,    75,    77,    78,    80,
+      81,    85,    86,    83,    84,    88,    89,    91,    93,    95,
+      97,    99,     0,     0,   752,   294,     0,     0,     0,   647,
+     648,   644,   645,   497,   496,   294,     0,     3,   294,   714,
+     294,   719,   295,   294,   294,   294,   662,   705,   661,     2,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,   683,
+       0,   669,   620,   636,   670,     2,   616,   623,   431,   618,
+     619,   432,     2,   630,   639,   632,   633,   666,   667,   681,
+     709,   713,   711,   751,   268,     2,   745,     2,   422,   717,
+     722,   423,     0,   401,     3,     3,     3,     3,   453,     3,
+       0,     2,   468,   464,   750,     0,   460,   467,     2,   463,
+     466,     0,   294,   242,   264,     3,   272,   274,     0,   453,
+       2,   571,   572,     2,   610,   611,     0,   659,   537,     3,
+     346,   345,   348,   347,   294,   538,     0,   539,   294,   375,
+     377,     2,     0,     0,     0,     0,   104,   391,   693,   694,
+     386,   390,   387,   690,   691,   380,   384,   367,   398,   393,
+     399,     0,     0,     0,   436,   240,     0,     0,     3,     2,
+     668,   429,     0,   527,     0,   751,   489,     0,   294,   294,
+     294,     0,   551,   553,   130,     0,     0,   215,     0,     0,
+       0,   223,   224,    57,     0,    63,   294,     0,    61,    60,
+       0,   128,   693,   458,    70,    71,   110,   115,     3,   109,
+       0,     0,     0,    24,    35,     3,     0,    32,   102,     0,
+       3,   650,   654,   657,   649,     3,   592,     3,   716,   721,
+       2,   294,     3,     3,   295,     0,     3,   622,   626,   629,
+     638,   672,   676,   679,   294,     3,   621,   637,   671,   294,
+     294,   424,   294,   294,   746,     0,     0,     0,     0,   256,
+       0,   104,     0,     3,     3,     0,   461,     0,   457,     0,
+       0,   245,   294,     0,     0,   129,     0,     0,     0,     0,
+       0,   129,     0,     0,   109,   109,     2,     0,     0,     0,
+       3,   131,   132,     2,   143,   133,   134,   135,   136,   137,
+     138,   145,   147,     0,     0,     0,   285,   294,   294,   547,
+       0,   540,   294,   111,   696,   700,   702,   695,   383,   397,
+     394,   579,     2,   664,   663,     0,   669,     2,   482,   484,
+     504,     3,   512,   513,     0,     2,   508,     3,     3,     0,
+       0,   556,   222,     0,     0,     0,   222,     0,     0,     3,
+      37,   749,   109,     0,     3,   661,    42,     3,    40,     3,
+      34,     0,     3,   101,   103,     0,     2,   652,   653,     0,
+       0,   294,     0,     0,     0,     3,   638,     0,     2,   624,
+     625,     2,   640,     2,   674,   675,     0,     0,     3,     0,
+       3,     3,     3,     3,   409,   408,   412,     2,     2,   748,
+     747,   112,     0,     0,     0,     0,     3,   462,     3,     0,
+     243,   146,     3,   295,   294,     0,     0,     0,     0,     2,
+     191,     0,   189,     0,     0,     0,     0,     0,     0,     0,
+       0,   111,     0,   547,   151,   148,   294,     0,     0,   267,
+     279,     3,     3,   546,   613,   368,     2,   698,   699,   294,
+     266,   294,     0,   515,   492,   294,     0,     0,   491,   506,
+       0,     0,     0,   216,     0,   225,    58,   109,     0,     0,
+     116,   113,     0,     0,     0,     0,     0,     0,    23,     0,
+     655,   294,   580,   265,   724,   725,   726,     0,   677,   294,
+     294,   294,     3,     3,     0,   685,     0,     0,     0,     0,
+     294,   294,     3,   544,   469,   470,     0,     0,   246,   295,
+       0,     0,     0,     0,   294,   192,   190,     0,   187,   193,
+       0,     0,     0,     0,   197,   200,   198,   194,     0,   195,
+      35,   129,   144,   142,   244,     0,     0,   294,   416,   420,
+     419,     0,   509,     2,   510,     2,   511,   505,   294,   228,
+       0,   226,     0,   228,     3,   661,    31,   114,     2,    45,
+       2,    43,    41,    28,   112,    26,     3,   727,     3,     3,
+       3,     0,     0,   684,   686,   627,   641,   269,     2,   406,
+       3,   405,     0,   472,   469,   129,     0,     0,   129,     3,
+       0,   129,   188,     0,     2,     2,   209,   199,     0,     0,
+       0,     0,   140,   574,   614,     3,     2,     0,     0,     2,
+     229,     0,     0,   217,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   687,   688,   294,     0,   471,   152,     0,
+       0,     2,   165,   129,   154,     0,   182,     0,   129,     0,
+       2,   156,     0,     2,     0,     2,     2,     2,   196,    32,
+       0,   294,   514,   516,   507,     0,     0,     0,     0,   114,
+      38,     3,     3,   656,   628,   642,   678,   410,   129,   158,
+     161,     0,   160,   164,     3,   167,   166,     0,   129,   184,
+     129,     3,     0,   294,     0,   294,     0,     2,     0,     2,
+     139,   701,     2,   230,   231,     0,   227,   218,     0,     0,
+       0,   153,     0,     0,   163,   233,   168,     2,   235,   183,
+       0,   186,   172,   201,     3,   210,   214,   203,     3,     0,
+     294,     0,   294,     0,     0,     0,    39,    46,    44,   159,
+     162,   129,     0,   169,   294,   129,   129,     0,   173,     0,
+       0,   692,   211,   212,   213,     0,   202,     3,   204,     3,
+     294,   219,   232,   149,   170,   155,   129,   236,   185,   180,
+     178,   174,   157,   129,     0,   693,     0,     0,     0,     0,
+     150,   171,   181,   175,   179,   178,   176,     3,     3,     0,
+       0,   493,   177,   205,   207,     3,     3,   206,   208
 };
 
@@ -1556,193 +1559,193 @@
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   839,   474,   301,    45,   131,   132,   302,   303,   304,
-     305,   785,   786,  1146,  1147,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,  1051,
-     525,   996,   321,   997,   554,   973,  1078,  1542,  1080,  1081,
-    1082,  1083,  1543,  1084,  1085,  1459,  1460,  1421,  1422,  1423,
-    1521,  1522,  1526,  1527,  1562,  1563,  1086,  1379,  1087,  1088,
-    1313,  1314,  1315,  1503,  1089,   143,   979,   980,   981,  1400,
-    1484,  1495,  1496,   475,   476,   901,   902,  1059,    48,    49,
-      50,    51,    52,   345,   156,    55,    56,    57,    58,    59,
-     347,    61,    62,   261,    64,    65,   272,   349,   350,    68,
-      69,    70,    71,   116,    73,   202,   352,   117,    76,   118,
-      78,    79,    80,   455,   456,   457,   458,   700,   939,   701,
-      81,    82,   462,   721,   881,   882,   355,   356,   724,   725,
-     726,   357,   358,   359,   360,   472,   339,   133,   134,   529,
-     323,   168,   654,   655,   656,   657,   658,    83,   119,    85,
-     495,   496,   965,   497,   275,   501,   324,    86,   135,   136,
-      87,  1337,  1124,  1125,  1126,  1127,    88,    89,   742,    90,
-     271,    91,    92,   185,  1053,   688,   410,   123,    93,   507,
-     508,   509,   186,   266,   188,   189,   190,   267,    96,    97,
-      98,    99,   100,   101,   102,   193,   194,   195,   196,   197,
-     851,   613,   614,   615,   616,   198,   618,   619,   620,   579,
-     580,   581,   582,   705,   103,   622,   623,   624,   625,   626,
-     627,   938,   707,   708,   709,   603,   363,   364,   365,   366,
-     325,   162,   105,   106,   107,   368,   719,   576
+      -1,   840,   475,   302,    46,   132,   133,   303,   304,   305,
+     306,   786,   787,  1147,  1148,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,  1052,
+     526,   997,   322,   998,   555,   974,  1079,  1543,  1081,  1082,
+    1083,  1084,  1544,  1085,  1086,  1460,  1461,  1422,  1423,  1424,
+    1522,  1523,  1527,  1528,  1563,  1564,  1087,  1380,  1088,  1089,
+    1314,  1315,  1316,  1504,  1090,   144,   980,   981,   982,  1401,
+    1485,  1496,  1497,   476,   477,   902,   903,  1060,    49,    50,
+      51,    52,    53,   346,   157,    56,    57,    58,    59,    60,
+     348,    62,    63,   262,    65,    66,   273,   350,   351,    69,
+      70,    71,    72,   117,    74,   203,   353,   118,    77,   119,
+      79,    80,    81,   456,   457,   458,   459,   701,   940,   702,
+      82,    83,   463,   722,   882,   883,   356,   357,   725,   726,
+     727,   358,   359,   360,   361,   473,   340,   134,   135,   530,
+     324,   169,   655,   656,   657,   658,   659,    84,   120,    86,
+     496,   497,   966,   498,   276,   502,   325,    87,   136,   137,
+      88,  1338,  1125,  1126,  1127,  1128,    89,    90,   743,    91,
+     272,    92,    93,   186,  1054,   689,   411,   124,    94,   508,
+     509,   510,   187,   267,   189,   190,   191,   268,    97,    98,
+      99,   100,   101,   102,   103,   194,   195,   196,   197,   198,
+     852,   614,   615,   616,   617,   199,   619,   620,   621,   580,
+     581,   582,   583,   706,   104,   623,   624,   625,   626,   627,
+     628,   939,   708,   709,   710,   604,   364,   365,   366,   367,
+     326,   163,   106,   107,   108,   369,   720,   577
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1281
+#define YYPACT_NINF -1356
 static const yytype_int16 yypact[] =
 {
-    3705,  8889, -1281,   104, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281,    44, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281, -1281, -1281, -1281,   155,   155,   155,  1205,   815,
-     110,  6006,   222, -1281, -1281, -1281, -1281, -1281,   130, -1281,
-   -1281, -1281,  1267,   189,  3199, -1281, -1281, -1281, -1281, -1281,
-   -1281,    31,   144, -1281,  1338, -1281, -1281, -1281, -1281,   153,
-    1410,   279,    82,  7674, -1281, -1281,  8086,  1234, -1281, -1281,
-   -1281,   981,   359,  7231,   925,   669,   981,  1012, -1281, -1281,
-     738,   575, -1281,   981,  1119, -1281,   242, -1281,   416,   419,
-   -1281, -1281, -1281, -1281,   277,   144,   155, -1281,   155, -1281,
-   -1281, -1281, -1281,  9536,  1338, -1281, -1281,  1338, -1281,  9574,
-     321, -1281, -1281, -1281,  2195,  9607, -1281,   565,   565,   565,
-   -1281, -1281, -1281,   155, -1281, -1281, -1281,   280,   366,   418,
-   -1281, -1281, -1281,   425, -1281, -1281, -1281, -1281, -1281,   443,
-     475, -1281, -1281,   120,  8972,  3739,   375,   387,   486,   496,
-     514,   527,   541,  8273,  7081,   550,   568, -1281,  9460, -1281,
-   -1281, -1281, -1281,   602, -1281,   121,  4456,  4456, -1281,   552,
-     298, -1281, -1281, -1281, -1281,   634,   302,   306,   327,   155,
-     590, -1281, -1281,  1410,  2454,   696, -1281,    90, -1281,   155,
-     155,   144, -1281, -1281,   124, -1281,   155,   155, -1281,  2638,
-     658,   667,   565,  6993, -1281, -1281,   678,  3199, -1281, -1281,
-     981, -1281, -1281, -1281,   144, -1281,  1338,    31, -1281,  8010,
-   -1281,   565,   565,   565,   144, -1281,  1205, -1281,  5198, -1281,
-   -1281,   673,   565, -1281,   565, -1281,   130,  8972,  9002,   686,
-   -1281,   815,   694,   565, -1281,  1205,   728,   736, -1281,  6006,
-     544, -1281, -1281, -1281,  9431, -1281, -1281,  3957, -1281,   696,
-      79,  9607,  6464,  2195,  2638, -1281,   157, -1281, -1281,  9574,
-    1338,   717,  7703, -1281, -1281,   699, -1281, 10744,   783,   831,
-    3925,   787,  6306, 10567, -1281,   827, -1281, -1281, -1281, -1281,
-   10625, 10625,   544,  8633,   829,  6306,  9085, -1281, -1281, -1281,
-   -1281, -1281, -1281,   862, -1281,  1121,  2197,  6306, -1281,   599,
-     388,   472,   354,   593,   830,   867,   873,   970,   245, -1281,
-   -1281,   874,   650, -1281,   325, -1281, -1281,  3739, -1281, -1281,
-     585,   901, -1281,   747,   901,   958,   130, -1281, -1281,   962,
-    9536, -1281,   977,  8746, -1281, -1281,   957,   935,  8355,  6993,
-     981, -1281,   981,   565,   565, -1281, -1281, -1281, -1281, -1281,
-   -1281,   565,  9645,  1338, -1281, -1281,  9683,  1067, -1281,  9123,
-   -1281, -1281, -1281, -1281, -1281, -1281, -1281,   990,  5315,  6306,
-   -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281, -1281, -1281,  2195, -1281,   846,   996,   998,  1002,
-     864,  1005,  1008,  1026,  2454, -1281, -1281,  1031,    31,  1033,
-   -1281, -1281,  1061, -1281, -1281, -1281,  9431, -1281, -1281, -1281,
-   -1281, -1281,  2638, -1281,  8972,  8972, -1281,   565,  2195,  7112,
-    1338,  8426, -1281, -1281, -1281, -1281,  9431,    79, -1281, -1281,
-     981,   144, -1281, -1281,  9431, -1281,  6877, -1281, -1281,   565,
-     565,   376,  9716,  1035,  1868,  2111, -1281,   334,   338,   815,
-   -1281,  9002,  1059,  1047,   815,   565, -1281, -1281, -1281, -1281,
-    9940, -1281,   583,  6755, -1281,   144,  1065, -1281,  2195, 10825,
-   10471, -1281, -1281, -1281, -1281,   889,  2638, -1281,  8497,   696,
-    7558, -1281, -1281, -1281,  1286,   636,   874,   815,  7703,   868,
-    9574, -1281,  7703, -1281, -1281, -1281, -1281,   638, -1281,  1073,
-     831,   207,  8633, -1281,  9716, -1281, -1281,  8633, -1281,  8859,
-    8633, -1281, -1281, -1281,  1071, -1281,   681,  1077,   668,  1078,
-   -1281,  4381,  6724, -1281, -1281, -1281,   328, -1281, -1281, 10490,
-   -1281,   385, 10490, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281, -1281,  6464,  6464, -1281,  6306,  6306,  6306,  6306,
-    6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,
-    6306,  6306,  6306,  6306,  4789,  6464, -1281,   650,  1062, -1281,
-   -1281,   155,   155, -1281, -1281,  8972, -1281, -1281,  1061,   544,
-   -1281,  1061, 10548, -1281, -1281, -1281,  5232,  6724,  1079,  9198,
-    1080, -1281,  9754, -1281, -1281,   602, -1281,  1082,  1185,  1084,
-    1899,   185,   874, -1281,   155,   155,   874,   233, -1281,   155,
-     155,  1061, -1281, -1281,   155,   155, -1281,   901,  9792,  1338,
-   10968,   234,   509,  9792, -1281,  5821, -1281,   874, -1281,  9645,
-   -1281,   293,  5525,  5525,  5525,  1338, -1281,  5054,  1072,   558,
-     990,  1016,  1083,  1086, -1281,  1074,  4456,   592, -1281,  1172,
-    1338,  5525,   544,  2195,   544,   696,   809,   901, -1281, -1281,
-     814,   901, -1281, -1281, -1281,   831, -1281,   901,   144,  9940,
-   -1281,   682,  1095,   691,  1099, -1281,  1098,   144, -1281, -1281,
-    9431,   144,  1103,   362,   407,  9825,  7200,  1999,  6306,  1917,
-   -1281, -1281,  1101,    94,  1101, -1281, -1281, -1281,   155,   155,
-   -1281, -1281,   815, -1281,   155, -1281, -1281,  3122,   815,  1107,
-    6306, -1281,  1059, 10968, -1281, -1281,  1102, -1281, -1281, -1281,
-     544, -1281, 10897,  6306, -1281,  5525,   675,  8355, -1281, -1281,
-     602,  1108,  1109,  1286,  3745, -1281, -1281,  7703, -1281, -1281,
-    1111, -1281, -1281,  1116, -1281,  1111,  1128, 10744,  6464,   146,
-    1113,    53,  1136,  1115,  1137,   829,  1131,  1139, -1281,  1142,
-    1143,  1696,  6843, -1281,  6464, -1281,   668,  1691, -1281,  6022,
-    6464,  1138, -1281, -1281,   990,   708, -1281,  6464, -1281, -1281,
-     727, -1281, -1281, -1281, -1281, -1281,   599,   599,   388,   388,
-     472,   472,   472,   472,   354,   354,   593,   830,   867,   873,
-     970,  6306,   755, -1281,  9940,  1148,  1149,  1152,  1062, -1281,
-   -1281, -1281, -1281, -1281,  9940,   713,  6306,  5525, -1281,  9645,
-   -1281,  7319,  9311,  9236,  7081, -1281, -1281, -1281,  1185,  9940,
-     951,  1160,  1163,  1165,  1166,  1175,  1176,  1182, -1281,  3532,
-    1899, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1061, -1281,
-   -1281, -1281,   874, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281,  1183, -1281,  1187,  1189, -1281, -1281,    31,  1138,  5054,
-   -1281, -1281, -1281,  5315,  1180, -1281, -1281, -1281, -1281, -1281,
-     815,  6243,  1272, -1281, -1281, -1281, -1281,  1188,    31, -1281,
-   -1281,  1061, -1281, -1281,  1061,    70,  1061, -1281, -1281, -1281,
-   -1281, -1281, -1281,  9498, -1281,   144, -1281,  9002, -1281, -1281,
-    1201,   818,  1208,  1212,  1213, -1281, -1281,  1917, -1281, -1281,
-   -1281, -1281, -1281, -1281, -1281,  1868, -1281,  1047, -1281, -1281,
-    1210,  1216,  1211, -1281, -1281,  1218,  1223, -1281,   675,  1777,
-   -1281,   562, -1281,  3745,   874, -1281,  1226,  7703,  9863,  8972,
-    1230, -1281, -1281,  1225,  1235,  1238, -1281,  6306,   252,    40,
-    1231, -1281,  1242,   544,  1242,  6724,  6464, -1281, -1281,  1242,
-   -1281,  1691,  5315, -1281, -1281, -1281, -1281,  1236,  6464,  1245,
-     544,  5054, -1281, 10490, -1281,   544, -1281, -1281,  6464, -1281,
-     850,   901, -1281, -1281, -1281, -1281, -1281, -1281, -1281,   990,
-    8746, -1281, -1281,  7438,  1249, -1281,   856,   901, -1281,   872,
-     904,   901, -1281,   565,  4646, -1281, -1281, -1281,  9940,  9940,
-   -1281,  8426,  8426, -1281,  1252,  1255,  1264,  1271, -1281,  1253,
-     594,   247,  1138, -1281,   544, -1281,  4456, -1281,  6464,   459,
-   -1281,  6603,  1274,  1279, 10343,  1281,  1283,   301,   308,   344,
-    6464,  1285,   144,  6464,  6464,  1284,   498,  1282,  1268, -1281,
-   -1281, -1281,  1289, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281,   815,  1296,  6464, -1281,  9940,  9940,   155,  1301,
-   -1281,  9349,  4935,   934,   901, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281, -1281, -1281,  1305,  1777, -1281, -1281,  1290, -1281,
-    1111, -1281, -1281,  2195,  1309, -1281, -1281, -1281,   734,  1312,
-   -1281,    53,  1317,  6306,  1303,    53,    53,  1327,  1323, -1281,
-    1074,  6464,  1328,  1236,  1036,   113,  1326, -1281,  1323, -1281,
-    1331,  1326, -1281, -1281,  1337, -1281, -1281,  1061,  1340,  1343,
-    6962,  1342,  1344,  1350, -1281, -1281,  1353, -1281, -1281,  1061,
-   -1281, -1281, -1281, -1281,  1061,  6464,  6464,  6306,  1355, -1281,
-   -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281,  6306,  6306,  1356,  1357,  1326, -1281, -1281,   815, -1281,
-   -1281, -1281,  7939,  9863,  6464,  6464,  1423,  6464, -1281, -1281,
-    1341, -1281,  1345,  6464,  1347,  1358,  6464,  1097,  1360,    74,
-    8776,  1197,   155, -1281, -1281,  6243,  1361,   467, -1281, -1281,
-   -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1061, 10467, -1281,
-    8497,  1362, -1281, -1281,  9863,   482,   494, -1281,  1372,  1383,
-     831,  1394, -1281,    66, -1281, -1281,  6464,  1395,  1393, -1281,
-   -1281,  1399,   430,   657,   544,  1400,  1401, -1281,  1406, -1281,
-    9940, -1281, -1281, -1281, -1281, -1281,  1412, -1281,  9940,  9940,
-    9940, -1281, -1281,  1413, -1281,  1415,  1425,  1427,   623,  8125,
-    8240, -1281, -1281,   278, -1281,  1426,  1429, -1281,  8568,   745,
-     759,  1430,   769,  6445, -1281, -1281,   502, -1281, -1281,   770,
-    1434,  1436,   144,  1487,   911, -1281, -1281,  6464, -1281, 10490,
-   10343, -1281, -1281, -1281,  1442,  1444,  9940, -1281, -1281, -1281,
-    1437, -1281, -1281, -1281, -1281, -1281, -1281,  9863,   831,   269,
-   -1281,  1424,   831,  1236,   373, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281, -1281,  1443, -1281, -1281, -1281, -1281, -1281, -1281,
-    1452,  1454, -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1458,
-   -1281,  1457, -1281, -1281, 10343,   148,  6464, 10343, -1281,  1462,
-    6464, -1281,   171,  1484,  1486, -1281, -1281,  1465,  1476,  1455,
-     905, -1281, -1281, -1281, -1281, -1281,  1338,  2195,  1471,   862,
-     918,  6306, -1281,   772,  1477,  6464,   544,   544,  1480,  1482,
-    1483,  1485, -1281, -1281,  8426,  1472, -1281,  1555,  6306,  1493,
-   -1281, -1281, 10254, -1281,   790, -1281,  1467, 10343,  1468, -1281,
-   -1281,  1511, -1281,  1513, -1281,  1507,  1529, -1281,  1496,  1519,
-    9863, -1281, -1281, -1281,   831,   544,  1520,  1499,  1515, -1281,
-    1326,  1326, -1281, -1281, -1281, -1281, -1281, 10343,   258, -1281,
-     922, -1281, -1281,  7790, -1281, -1281,  1501,  6464, -1281,  6464,
-    7790,   144,  9716,   144,  9716,  1528, -1281,  1530, -1281, -1281,
-   -1281,  1524,   862, -1281,   794, -1281, -1281,  6464,  1540,  1542,
-   -1281,  6306,  6306, -1281, -1281,  1051,   133, -1281, -1281,  1510,
-   -1281,  1051, -1281, -1281,  2099,   544, -1281, -1281,   144,  9716,
-     144,  9716,  1546,  1525,   544, -1281, -1281, -1281, -1281, -1281,
-   10254,  1541,  1051,  7866,  6464, 10165,  1543,  1051,  1551,  2099,
-    2338, -1281, -1281, -1281,  1552, -1281, -1281, -1281, -1281,  8972,
-   -1281, -1281, -1281, 10072, -1281, 10254, -1281, -1281,  1531,  9979,
-   -1281, -1281, 10165,   144,  2338,   144,  1557,  1559,   795, -1281,
-   10072, -1281, -1281, -1281,  9979, -1281, -1281, -1281,   144,   144,
-   -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281
+    5863,  4890, -1356,    65, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356,     9, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356, -1356, -1356, -1356,   139,   139,   139,  1216,
+     781,    63,  4761,   238, -1356, -1356, -1356, -1356, -1356,   165,
+   -1356, -1356, -1356,   572,   207,  2350, -1356, -1356, -1356, -1356,
+   -1356, -1356,    59,   217, -1356,  1506, -1356, -1356, -1356, -1356,
+     220,  1734,   341,    66,  7480, -1356, -1356,  9240,  1240, -1356,
+   -1356, -1356,  1320,   351,  3183,  1125,   757,  1320,  1149, -1356,
+   -1356,  1042,   895, -1356,  1320,  1227, -1356,   243, -1356,   378,
+     403, -1356, -1356, -1356, -1356,   303,   217,   139, -1356,   139,
+   -1356, -1356, -1356, -1356,  9019,  1506, -1356, -1356,  1506, -1356,
+    9774,   314, -1356, -1356, -1356,  1811,  9812, -1356,   726,   726,
+     726, -1356, -1356, -1356,   139, -1356, -1356, -1356,   353,   381,
+     400, -1356, -1356, -1356,   417, -1356, -1356, -1356, -1356, -1356,
+     424,   436, -1356, -1356,    28,  8867,  2398,   371,   447,   459,
+     467,   482,   495,   557,  8670,  6999,   468,   584, -1356,  9350,
+   -1356, -1356, -1356, -1356,   594, -1356,   335,  4628,  4628, -1356,
+     575,   352, -1356, -1356, -1356, -1356,   602,   432,   434,   470,
+     139,   624, -1356, -1356,  1734,  1711,   656, -1356,    68, -1356,
+     139,   139,   217, -1356, -1356,    93, -1356,   139,   139, -1356,
+    2093,   670,   699,   726,  6910, -1356, -1356,   654,  2350, -1356,
+   -1356,  1320, -1356, -1356, -1356,   217, -1356,  1506,    59, -1356,
+    7819, -1356,   726,   726,   726,   217, -1356,  1216, -1356,  6673,
+   -1356, -1356,   659,   726, -1356,   726, -1356,   165,  8867,  8784,
+     714, -1356,   781,   740,   726, -1356,  1216,   737,   749, -1356,
+    4761,   791, -1356, -1356, -1356,  4061, -1356, -1356,  7390, -1356,
+     656,    62,  9812, 10718,  1811,  2093, -1356,   152, -1356, -1356,
+    9774,  1506,   770,  7511, -1356, -1356,   269, -1356,  3425,   779,
+     827,  3643,   814, 10872, 10930, -1356,   817, -1356, -1356, -1356,
+   -1356, 10949, 10949,   791,  8525,   818, 10872,  8981, -1356, -1356,
+   -1356, -1356, -1356, -1356,   855, -1356,   889,  2173, 10872, -1356,
+     498,   751,   809,   524,   880,   822,   831,   819,   869,     5,
+   -1356, -1356,   883,    64, -1356,   116, -1356, -1356,  2398, -1356,
+   -1356,   516,   900, -1356,   644,   900,   913,   165, -1356, -1356,
+     915,  9019, -1356,   916,  8639, -1356, -1356,  1004,  1539,  8240,
+    6910,  1320, -1356,  1320,   726,   726, -1356, -1356, -1356, -1356,
+   -1356, -1356,   726,  9885,  1506, -1356, -1356,  9923,  1500, -1356,
+    7969, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   929,  5043,
+   10872, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356, -1356, -1356,  1811, -1356,   876,   936,   938,
+     944,   885,   947,   954,   957,  1711, -1356, -1356,   930,    59,
+     960, -1356, -1356,   970, -1356, -1356, -1356,  4061, -1356, -1356,
+   -1356, -1356, -1356,  2093, -1356,  8867,  8867, -1356,   726,  1811,
+    7030,  1506,  8313, -1356, -1356, -1356, -1356,  4061,    62, -1356,
+   -1356,  1320,   217, -1356, -1356,  4061, -1356,  6793, -1356, -1356,
+     726,   726,   472,  9953,   974,  1092,  5671, -1356,   521,   543,
+     781, -1356,  8784,   976,   959,   781,   726, -1356, -1356, -1356,
+   -1356, 10252, -1356,   560,  6550, -1356,   217,   981, -1356,  1811,
+   11070, 10776, -1356, -1356, -1356, -1356,   921,  2093, -1356,  8386,
+     656,  6061, -1356, -1356, -1356,   820,   612,   883,   781,  7511,
+    1338,  9774, -1356,  7511, -1356, -1356, -1356, -1356,   638, -1356,
+     994,   827,   255,  8525, -1356,  9953, -1356, -1356,  8525, -1356,
+    8753,  8525, -1356, -1356, -1356,   993, -1356,   665,   998,   161,
+    1002, -1356,  9490,  6639, -1356, -1356, -1356,   290, -1356, -1356,
+   10795, -1356,   366, 10795, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356, -1356, 10718, 10718, -1356, 10872, 10872, 10872,
+   10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872,
+   10872, 10872, 10872, 10872, 10872,  5362, 10718, -1356,    64,  1168,
+   -1356, -1356,   139,   139, -1356, -1356,  8867, -1356, -1356,   970,
+     791, -1356,   970, 10853, -1356, -1356, -1356,  3524,  6639,  1016,
+    9095,  1028, -1356, 10035, -1356, -1356,   594, -1356,  1029,   776,
+    1036,  1922,   164,   883, -1356,   139,   139,   883,   174, -1356,
+     139,   139,   970, -1356, -1356,   139,   139, -1356,   900, 10065,
+    1506, 11215,   233,   347, 10065, -1356, 10214, -1356,   883, -1356,
+    9885, -1356,   125,  7935,  7935,  7935,  1506, -1356,  6115,  1033,
+     414,   929,  1150,  1037,  1038, -1356,  1054,  4628,   555, -1356,
+    1124,  1506,  7935,   791,  1811,   791,   656,   704,   900, -1356,
+   -1356,   729,   900, -1356, -1356, -1356,   827, -1356,   900,   217,
+   10252, -1356,   666,  1061,   679,  1062, -1356,  1065,   217, -1356,
+   -1356,  4061,   217,  1059,   553,   573, 10103,  7119,  1590, 10872,
+    1954, -1356, -1356,  1066,    39,  1066, -1356, -1356, -1356,   139,
+     139, -1356, -1356,   781, -1356,   139, -1356, -1356,  9630,   781,
+    1069, 10872, -1356,   976, 11215, -1356, -1356,  1075, -1356, -1356,
+   -1356,   791, -1356, 11143, 10872, -1356,  7935,   588,  8240, -1356,
+   -1356,   594,  1072,  1077,   820,  2542, -1356, -1356,  7511, -1356,
+   -1356,  1074, -1356, -1356,  1088, -1356,  1074,  1090,  3425, 10718,
+     205,  1073,    47,  1094,  1082,  1100,   818,  1102,  1110, -1356,
+    1113,  1117,  9661,  6759, -1356, 10718, -1356,   161,  1861, -1356,
+    6396, 10718,  1120, -1356, -1356,   929,   689, -1356, 10718, -1356,
+   -1356,   865, -1356, -1356, -1356, -1356, -1356,   498,   498,   751,
+     751,   809,   809,   809,   809,   524,   524,   880,   822,   831,
+     819,   869, 10872,   875, -1356, 10252,  1119,  1140,  1142,  1168,
+   -1356, -1356, -1356, -1356, -1356, 10252,   691, 10872,  7935, -1356,
+    9885, -1356,  7239,  9209,  8905,  6999, -1356, -1356, -1356,   776,
+   10252,   927,  1145,  1152,  1158,  1159,  1162,  1166,  1172, -1356,
+    4275,  1922, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   970,
+   -1356, -1356, -1356,   883, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356,  1176, -1356,  1183,  1185, -1356, -1356,    59,  1120,
+    6115, -1356, -1356, -1356,  5043,  1144, -1356, -1356, -1356, -1356,
+   -1356,   781,  6242,  1231, -1356, -1356, -1356, -1356,  1165,    59,
+   -1356, -1356,   970, -1356, -1356,   970,    29,   970, -1356, -1356,
+   -1356, -1356, -1356, -1356,  9380, -1356,   217, -1356,  8784, -1356,
+   -1356,  1190,   906,  1187,  1193,  1198, -1356, -1356,  1954, -1356,
+   -1356, -1356, -1356, -1356, -1356, -1356,  1092, -1356,   959, -1356,
+   -1356,  1195,  1202,  1201, -1356, -1356,  1206,  1210, -1356,   588,
+    2182, -1356,   533, -1356,  2542,   883, -1356,  1213,  7511, 10176,
+    8867,  1220, -1356, -1356,  1218,  1222,  1224, -1356, 10872,   230,
+      -1,  1219, -1356,  1225,   791,  1225,  6639, 10718, -1356, -1356,
+    1225, -1356,  1861,  5043, -1356, -1356, -1356, -1356,  1236, 10718,
+    1233,   791,  6115, -1356, 10795, -1356,   791, -1356, -1356, 10718,
+   -1356,   782,   900, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
+     929,  8639, -1356, -1356,  7359,  1237, -1356,   807,   900, -1356,
+     825,   836,   900, -1356,   726,  4460, -1356, -1356, -1356, 10252,
+   10252, -1356,  8313,  8313, -1356,  1241,  1248,  1246,  1259, -1356,
+    1262,   672,   244,  1120, -1356,   791, -1356,  4628, -1356, 10718,
+     578, -1356,  6519,  1267,  1271, 10660,  1272,  1277,   122,   304,
+     298, 10718,  1279,   217, 10718, 10718,  1280,   678,  1254,  1261,
+   -1356, -1356, -1356,  1284, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356,   781,  1290, 10718, -1356, 10252, 10252,   139,
+    1292, -1356,  9743,  9520,   847,   900, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356, -1356, -1356,  1293,  2182, -1356, -1356,  1275,
+   -1356,  1074, -1356, -1356,  1811,  1296, -1356, -1356, -1356,   706,
+    1291, -1356,    47,  1305, 10872,  1288,    47,    47,  1314,  1310,
+   -1356,  1054, 10718,  1315,  1236,   711,   214,  1317, -1356,  1310,
+   -1356,  1323,  1317, -1356, -1356,  1328, -1356, -1356,   970,  1329,
+    1330,  6879,  1331,  1339,  1341, -1356, -1356,  1340, -1356, -1356,
+     970, -1356, -1356, -1356, -1356,   970, 10718, 10718, 10872,  1344,
+   -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356, 10872, 10872,  1347,  1349,  1317, -1356, -1356,   781,
+   -1356, -1356, -1356,  7746, 10176, 10718, 10718,  1394, 10718, -1356,
+   -1356,  1333, -1356,  1334, 10718,  1335,  1343, 10718,   992,  1345,
+      36,  8158,  1229,   139, -1356, -1356,  6242,  1348,   585, -1356,
+   -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   970, 10478,
+   -1356,  8386,  1360, -1356, -1356, 10176,   592,   598, -1356,  1356,
+    1355,   827,  1366, -1356,   179, -1356, -1356, 10718,  1368,  1363,
+   -1356, -1356,  1369,   484,   663,   791,  1376,  1378, -1356,  1380,
+   -1356, 10252, -1356, -1356, -1356, -1356, -1356,  1382, -1356, 10252,
+   10252, 10252, -1356, -1356,  1386, -1356,  1389,  1392,  1393,   682,
+    8008,  8124, -1356, -1356,   370, -1356,  1396,  1397, -1356,  8459,
+     715,   725,  1395,   760,  6377, -1356, -1356,   641, -1356, -1356,
+     796,  1402,  1403,   217,  1453,   961, -1356, -1356, 10718, -1356,
+   10795, 10660, -1356, -1356, -1356,  1406,  1407, 10252, -1356, -1356,
+   -1356,  1405, -1356, -1356, -1356, -1356, -1356, -1356, 10176,   827,
+     287, -1356,  1388,   827,  1236,   361, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356, -1356,  1408, -1356, -1356, -1356, -1356, -1356,
+   -1356,  1411,  1412, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
+    1418, -1356,  1417, -1356, -1356, 10660,   272, 10718, 10660, -1356,
+    1422, 10718, -1356,   306,  1438,  1441, -1356, -1356,  1430,  1431,
+    1413,   918, -1356, -1356, -1356, -1356, -1356,  1506,  1811,  1433,
+     855,   946, 10872, -1356,   801,  1439, 10718,   791,   791,  1442,
+    1448,  1449,  1450, -1356, -1356,  8313,  1452, -1356,  1535, 10872,
+    1462, -1356, -1356, 10571, -1356,   803, -1356,  1460, 10660,  1463,
+   -1356, -1356,  1489, -1356,  1493, -1356,  1511,  1512, -1356,  1480,
+    1508, 10176, -1356, -1356, -1356,   827,   791,  1514,  1484,  1509,
+   -1356,  1317,  1317, -1356, -1356, -1356, -1356, -1356, 10660,   301,
+   -1356,   958, -1356, -1356,  7597, -1356, -1356,  1502, 10718, -1356,
+   10718,  7597,   217,  9953,   217,  9953,  1515, -1356,  1522, -1356,
+   -1356, -1356,  1520,   855, -1356,   811, -1356, -1356, 10718,  1526,
+    1527, -1356, 10872, 10872, -1356, -1356,  1055,   154, -1356, -1356,
+    1510, -1356,  1055, -1356, -1356,  1716,   791, -1356, -1356,   217,
+    9953,   217,  9953,  1532,  1517,   791, -1356, -1356, -1356, -1356,
+   -1356, 10571,  1528,  1055,  7673, 10718, 10482,  1531,  1055,  1537,
+    1716,  2045, -1356, -1356, -1356,  1545, -1356, -1356, -1356, -1356,
+    8867, -1356, -1356, -1356, 10349, -1356, 10571, -1356, -1356,  1529,
+   10256, -1356, -1356, 10482,   217,  2045,   217,  1558,  1559,   815,
+   -1356, 10349, -1356, -1356, -1356, 10256, -1356, -1356, -1356,   217,
+     217, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356
 };
 
@@ -1750,28 +1753,28 @@
 static const yytype_int16 yypgoto[] =
 {
-   -1281,  4254,  1590, -1281,  1409, -1281,    52,     0,  -229, -1281,
-     596,  -527,  -497,  -931,   -99,  4508, -1281,   358,   609,   563,
-     518,   591,  1104,  1105,  1110,  1117,  1112, -1281,   613,  -339,
-    5346,  -893,  -690,  -919, -1281,   401,  -634,   444, -1281,   753,
-   -1281,   449, -1224, -1281, -1281,   191, -1281, -1265,  -724,   305,
-   -1281, -1281, -1281, -1281,   129, -1170, -1281, -1281, -1281, -1281,
-   -1281, -1281,   382, -1175,    71, -1281,  -381, -1281,   560,   356,
-   -1281,   229, -1281,  -338, -1281, -1281, -1281,   632,  -691, -1281,
-   -1281,    11, -1000,    10,  2865, -1281, -1281, -1281,  -125, -1281,
-     275,   363,  -194,  1416,  4157, -1281, -1281,    24,    25,   374,
-    -202,  1621, -1281,  2138, -1281, -1281,   112,  2165, -1281,  2832,
-     139, -1281, -1281,  -416,  -434,  1276,  1278,   786,  1028,   400,
-   -1281, -1281,  1269,   793,  -513, -1281,  -522,   -57,  -636, -1281,
-   -1281,  -959,  -994,   122,   819,  1153,   135, -1281,  1441,   296,
-    -299,  -212,  -109,   749,   844, -1281,  1087, -1281,  2859,  1478,
-    -462,  1000, -1281, -1281,   778, -1281,  -233, -1281,   -72, -1281,
-   -1281, -1281, -1232,   504, -1281, -1281, -1281,  1259, -1281,    68,
-   -1281, -1281,  -850,   -96, -1280,   -93,  1665, -1281,  2401, -1281,
-     993, -1281,  -164,   689,  -177,  -176,  -170,     2,   -39,   -33,
-     -28,  1052,    48,    75,    93,  -100,  -167,  -166,  -153,  -148,
-    -277,  -569,  -500,  -490,  -543,  -300,  -514, -1281, -1281,  -506,
-    1174,  1177,  1181,  2149,  5126,  -572,  -549,  -544,  -523,  -484,
-   -1281,  -427,  -665,  -663,  -660,  -602,  -320,  -271, -1281, -1281,
-     102,   140,   -84, -1281,  3728,   128,  -603,  -447
+   -1356,  4068,  1513, -1356,  1381, -1356,    41,     0,  -254, -1356,
+     593,  -523,  -482,  -960,  -143,  5028, -1356,  -101,   576,   581,
+     386,   577,  1101,  1105,  1106,  1099,  1107, -1356,  -593,  -585,
+    4966,  -933,  -708,  -942, -1356,  -273,  -719,   379, -1356,  1404,
+   -1356,   457, -1092, -1356, -1356,   195, -1356,  -844, -1059,   308,
+   -1356, -1356, -1356, -1356,   124, -1118, -1356, -1356, -1356, -1356,
+   -1356, -1356,   382, -1355,    53, -1356,  -496, -1356,   558,   349,
+   -1356,   226, -1356,  -307, -1356, -1356, -1356,   610,  -832, -1356,
+   -1356,    13,  -961,   169,  2725, -1356, -1356, -1356,   -79, -1356,
+     189,   845,  -184,  1482,  3902, -1356, -1356,   192,   133,   657,
+    -251,  1620, -1356,  1796, -1356, -1356,   156,  2416, -1356,  2575,
+     798, -1356, -1356,  -404,  -428,  1252,  1253,   761,  1003,   302,
+   -1356, -1356,  1245,   764,  -253, -1356,   -24,  -132,  -469, -1356,
+   -1356,  -983,  -881,     4,   862,  1128,   -43, -1356,   561,  -100,
+    -262,  -193,  -152,   721,   826, -1356,  1071, -1356,  2692,   907,
+    -449,   971, -1356, -1356,   765, -1356,  -227, -1356,   -60, -1356,
+   -1356, -1356, -1248,   485, -1356, -1356, -1356,  1242, -1356,    45,
+   -1356, -1356,  -846,  -109, -1333,  -138,  3289, -1356,  1880, -1356,
+     969, -1356,  -161,   268,  -181,  -177,  -175,     2,   -39,   -35,
+     -33,   769,    30,    31,    69,  -146,  -162,  -151,  -147,  -140,
+    -277,  -521,  -506,  -484,  -575,  -313,  -516, -1356, -1356,  -528,
+    1156,  1157,  1163,  2484,  4688,  -570,  -557,  -534,  -533,  -478,
+   -1356,  -432,  -693,  -685,  -681,  -580,  -201,  -236, -1356, -1356,
+     265,   180,   -86, -1356,  3600,   232,  -625,  -376
 };
 
@@ -1779,2227 +1782,2277 @@
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -522
+#define YYTABLE_NINF -523
 static const yytype_int16 yytable[] =
 {
-      46,   111,    95,   147,   451,   438,   397,   398,   426,   148,
-      53,   113,   112,   399,   149,   790,   400,   401,   265,   258,
-     405,   711,   767,   604,    66,    67,   870,   706,   111,   111,
-     402,    46,   932,    95,   933,   403,   750,   934,   853,   841,
-     755,    53,    46,   918,    46,   717,   159,   617,  1185,   748,
-     511,  1091,   894,   110,    46,    66,    67,   381,   382,   845,
-      46,  1201,   191,    46,   846,   214,    46,   852,   224,   341,
-     612,    47,   819,   208,  1151,   504,   218,   217,   678,  1143,
-     111,   111,  1183,  1184,   406,   847,   397,   398,   210,   994,
-     150,   636,   408,   399,   844,   640,   400,   401,   687,   141,
-     405,   778,    47,   423,    46,  1398,   691,    46,   842,   200,
-     402,   932,    74,   933,    46,   403,   934,   151,   843,   950,
-     883,   883,   883,  1195,   974,   682,   684,   856,    30,   477,
-     885,   886,    30,   863,   289,   152,  1317,   166,  1461,   883,
-     104,   104,   407,    74,   147,    46,   161,   159,   904,  1134,
-     148,   535,   121,    46,   445,   149,  1135,  1465,    46,   201,
-     371,   167,    30,   977,   406,   857,   481,   483,   739,   860,
-     278,   104,   164,   466,   841,  1341,  -234,  -234,  1009,  1098,
-    1218,  1219,  1342,    46,    46,   120,   159,   482,  1014,   175,
-     877,  1418,  1419,    30,   880,    30,   676,  1262,   250,    46,
-     409,   754,   212,  1025,   409,  1318,   104,    46,  1481,   159,
-    1090,   161,  1461,   883,  1418,  1419,    46,   745,   140,    46,
-     769,   441,   957,    30,   147,  1263,   111,   535,   279,   439,
-     148,   150,   417,   142,   409,   149,   375,   164,   144,   259,
-     673,   111,   260,   842,   440,   111,  1185,  -234,  1259,    46,
-     111,    95,   376,   843,   212,  1465,   595,   169,   151,    53,
-    1465,  1420,   975,    46,    46,   487,   159,   409,   179,   841,
-      46,    30,   326,    66,    67,    60,   152,    46,  1037,   604,
-    1465,   759,   199,   711,  1429,   341,   823,  1465,   535,   845,
-     702,   477,   111,   854,   846,   609,  1185,   212,   665,  1507,
-     153,  1549,   471,  1201,   674,   883,    60,  1036,   604,   433,
-     617,   477,  1013,   604,  1016,   847,   760,   469,  1153,   477,
-      47,  1560,   673,   761,  1024,   830,   680,    46,  1564,   371,
-    1183,  1184,   685,   535,  1536,   434,  1538,  1343,   842,   573,
-     459,   861,  1191,   609,   523,   873,    46,    46,   843,   874,
-     535,   437,   925,  1491,   704,  1550,   856,   245,   212,   936,
-    1133,    74,  -290,    46,   114,   326,    74,    46,   879,  1192,
-    1200,   433,   108,   210,   574,  1091,   739,  1401,   652,   108,
-    1192,   949,  1565,    40,    41,   250,   674,   853,   -10,   104,
-      40,    41,  -112,  -112,    46,   530,   212,   434,   161,   108,
-     212,   482,  1180,  1181,    46,   489,   371,   157,  -112,   845,
-      40,    41,   506,   385,   846,   108,   248,   388,   870,  -517,
-    1185,   390,    46,   575,   164,  1040,    40,    41,    46,   386,
-      46,   738,  1209,   389,   584,   847,  1215,   391,   782,  1211,
-     585,   227,   392,   563,   564,   228,   915,   341,   232,   712,
-     234,   262,   739,   714,    46,  1456,   108,   243,   393,   111,
-    1230,  1231,  1213,  1201,   111,   713,   256,    40,    41,   715,
-    1201,   606,   157,   111,  -440,  1450,  1451,   712,    46,   565,
-     566,   175,  -112,   250,   328,   692,    46,   212,   371,  1405,
-      46,   585,    95,   928,    46,   788,   329,   111,   637,   111,
-      53,   108,   641,  -112,   210,  1120,  1149,   322,   559,   560,
-    1106,  1101,    40,    41,    66,    67,   338,  1117,   706,   652,
-     397,   398,   714,  1201,    60,   110,  -441,   399,    74,   478,
-     400,   401,   978,   274,  1090,   405,   111,  1258,   929,   652,
-    1347,   111,   652,  1037,   402,  1171,  1173,   895,    74,   403,
-     617,   276,   326,   326,   459,   504,    74,   459,  1018,   561,
-     562,    47,   830,   459,  1106,   477,   428,   906,   212,   284,
-     432,   766,   908,  1035,  1198,     8,     9,    10,    11,    12,
-      40,    41,  1198,   277,   227,   884,   884,   884,   783,   111,
-    1199,   766,   727,   789,   766,   330,    46,  1332,  1323,   406,
-     322,   454,    74,    30,   884,   331,   520,   954,    46,  1334,
-      46,   341,  1380,  1333,   530,   108,   530,   774,   212,   530,
-     875,   832,   530,   332,   876,  1335,    40,    41,   326,    46,
-     104,    33,   432,  1381,  1355,   494,   333,  -466,  1132,   738,
-     516,   471,  1357,  1358,  1359,    46,   108,   326,   137,   138,
-     334,   111,   830,   533,   534,   440,   528,    40,    41,   157,
-      46,   369,   111,    46,   111,   555,   383,   711,  -466,  1378,
-    -466,   896,  -291,   875,  -466,  1048,   370,  1116,   884,     8,
-       9,    10,    11,    12,   567,   568,  1035,   341,   241,    94,
-    1394,   478,   729,   586,   526,   409,  1095,    46,   730,    46,
-     604,   534,   897,   594,   651,  -105,   601,    30,   898,  -105,
-     374,   478,   111,   326,   905,   738,   907,   556,   111,   478,
-      94,   395,   557,   558,   227,   634,   232,   606,   108,   638,
-     111,   146,   338,    94,  1366,    33,  1128,   534,  1367,    40,
-      41,   212,   387,    46,    46,   746,  1428,   756,   210,   187,
-    1249,   747,    94,   757,  1253,    94,   871,    46,   577,   407,
-     409,   606,   210,   736,   872,    60,   424,  1349,   578,   212,
-     884,  1520,  1497,   673,   212,   425,   776,  1525,   409,  1497,
-     887,   702,   953,   958,  1055,   609,   777,   322,   322,   430,
-     773,   919,  1390,   959,  1251,   903,   774,   774,  1545,   461,
-     921,   727,    74,  1552,   448,   171,   774,   464,   762,   108,
-     763,   137,   236,   764,   227,   454,   770,  1002,   454,   459,
-      40,    41,  1015,  1003,   454,   681,   683,   499,   730,   500,
-     490,   830,  1546,  1499,    94,  1500,   114,   674,    46,  1175,
-     739,  1006,  1003,  1247,    74,   704,   237,    94,   251,   585,
-      46,   238,  1291,  1292,  1374,   589,   210,   409,   832,   467,
-     774,   494,   212,   322,   932,   494,   933,   468,  1375,   934,
-     774,  1008,   396,   187,   774,   528,   212,   528,  1377,  1382,
-     528,  1447,   322,   528,   774,   774,   108,  1444,   137,   138,
-    1547,   510,   506,   652,   338,   514,    94,    40,    41,  1466,
-     111,   652,   978,  1513,  1570,   774,   978,   978,    94,  1514,
-     585,    53,   289,   526,   793,   794,   795,   909,   526,   409,
-     739,   526,   912,    46,   409,    66,    67,   328,   409,     2,
-     204,     4,     5,     6,     7,   519,   727,    46,    94,   108,
-     531,   137,   138,   535,   415,    46,   727,  1196,   322,   569,
-      40,    41,   485,  1077,   250,   328,   409,   534,  1155,   828,
-     409,   727,   601,    46,  1167,   478,   409,   435,  1387,  1388,
-     212,   736,   417,   669,   409,   812,   751,   443,  1122,  1121,
-    1170,   752,   609,   111,  1182,     2,   204,     4,     5,     6,
-       7,   869,   652,    34,   570,    35,   601,   487,   328,   409,
-     111,   571,   878,   652,   575,   111,    36,   478,   181,   182,
-      39,   337,  1172,    74,   609,  -292,    94,    40,    41,  1438,
-    1003,  1339,     8,     9,    10,    11,    12,  1242,    36,   459,
-     172,   173,    39,  1444,  1445,  1137,   611,  1492,  1493,    40,
-      41,   104,  1235,   608,   409,   609,   527,   736,   440,    34,
-      30,    35,  1145,   610,   111,   766,    -3,  1145,   338,   854,
-     328,   609,  1446,   572,   652,   370,  -437,   111,   111,   111,
-     593,    53,     8,     9,    10,    11,    12,  1532,    33,  1458,
-     454,   800,   801,   802,   803,  1203,    67,   108,   596,   137,
-     138,   534,   111,   187,  1418,  1419,   160,   326,    40,    41,
-      30,   646,   940,   738,   940,   666,  1145,   667,   104,  1399,
-     494,   668,   192,  1399,   670,   215,  1077,   671,   225,  1210,
-    1212,  1214,  -293,    46,   798,   799,   890,  1106,    33,     8,
-       9,    10,    11,    12,   338,   672,   341,   993,    36,   675,
-     172,   173,    39,   703,   677,  -112,   695,  -112,   871,    40,
-      41,  -112,  1518,  1458,  1310,  1311,  1312,    30,   804,   805,
-     727,   727,   212,  1348,  1350,  1351,  -112,  -112,   796,   797,
-     577,   255,   409,    74,   718,   374,    60,   720,  -238,    94,
-     578,   758,   771,   611,   534,    33,   775,   779,   -12,   893,
-     833,   835,  1017,   837,   689,   848,   828,   160,   111,   -13,
-     900,   104,   892,   459,   920,   536,   537,   538,   922,   923,
-     372,  -414,   208,   218,   217,  1482,   927,   698,   727,   727,
-      46,   948,  -521,   962,   969,   652,   747,   210,   731,   539,
-     983,   540,  1369,   541,   542,    53,   160,   971,     2,   204,
-       4,     5,     6,     7,   976,   982,   984,   986,   987,    66,
-      67,   988,   989,   998,  1122,  1121,    36,  1010,  1011,   160,
-      39,  1012,   111,   111,   111,   527,   226,    40,    41,  1026,
-     527,   442,  1027,   527,  1028,  1029,   127,  1077,   128,   129,
-     130,   536,   537,   538,  1030,  1031,   828,    40,    41,   728,
-     454,  1032,  1043,   838,  1057,   609,  -402,   840,  -401,   611,
-    1092,  1442,    34,   610,    35,   539,  1558,   540,   439,   541,
-    1319,   935,  1102,    53,  1145,  1145,  1145,  1103,  1094,   652,
-     652,  1104,  1105,   440,  1109,  1110,  1111,  1203,    67,  1112,
-     494,  1123,   322,   935,  1113,  1119,   478,    74,    36,  1129,
-     774,   212,    39,   104,  1130,  1079,  1136,  1122,  1121,    40,
-      41,  1141,   397,   398,  1131,   992,  1144,    36,  1165,   399,
-    1328,    39,   400,   401,  1190,   104,   405,  1186,    40,    41,
-    1187,   766,  1077,  1188,   652,    42,   402,   652,   534,   372,
-    1189,   403,  1204,   869,   104,   145,   931,  1205,   703,  1207,
-     673,  1208,   727,  1216,   743,  1220,    46,    46,  1222,  1223,
-     727,   727,   727,    -3,   744,  1228,   111,   111,  1531,    36,
-    1233,   172,   173,    39,  1239,    74,    63,   115,   499,   516,
-      40,    41,   652,  1243,  1007,  1248,  1077,   652,  1250,  1077,
-     406,   917,   840,   611,  1252,   736,  1255,   212,  1256,  1260,
-     924,  1264,  1267,   104,   926,   111,  1269,    63,   727,  1271,
-    1122,  1121,  1272,  1273,   674,  1274,   372,   652,  1145,  1145,
-     158,  1275,  1277,   174,   454,   828,  1284,  1293,  1294,  1301,
-     139,  1330,  1304,    53,  1077,  1322,  1305,   104,  1307,  1077,
-      53,    36,   219,   181,   182,    39,  1336,  1203,    67,  1308,
-     147,  1316,    40,    41,  1203,    67,   148,  1483,   728,  1338,
-      60,   149,  1050,  1340,    46,   111,  1344,  1345,  1206,  1077,
-    1346,  1352,  1353,   174,   111,   736,   174,  1354,   183,   257,
-     652,   239,   242,  1356,  1362,   652,  1363,   840,   184,    46,
-      46,  1441,   159,    53,  1364,   534,  1365,  1372,  1376,   611,
-    1373,   213,  1383,   652,  1384,   652,  1312,  1203,    67,   652,
-    1395,  1392,   652,  1393,    46,  1402,   371,  1533,   240,  1405,
-     652,   327,   174,  1412,   652,  1413,  1541,  -403,  1416,   257,
-     348,  1427,  1077,  1435,  1505,    74,  1505,  1077,   478,  1431,
-     104,  1433,    74,   338,  1436,  1443,  1437,  1367,  1448,  1452,
-     935,  1453,  1454,   213,  1455,  1077,  1457,  1077,  1467,  1469,
-     404,  1077,  1475,   104,  1077,  1299,  1300,  1123,  1302,  1462,
-     104,  1505,  1077,  1505,  1306,   422,  1077,  1309,   427,   429,
-    1471,  1152,  1473,   158,  1477,   174,   703,  1479,  1480,  1485,
-    1486,  1487,  1498,   728,   703,    74,   213,  1508,  1512,  1510,
-     165,  1524,   170,   728,   446,   176,   177,   178,   449,   180,
-     450,  1516,   611,  1517,  1539,  1544,  1540,  1551,   728,   465,
-    1553,  1555,  1561,   104,   231,    63,  1568,   326,  1569,  1079,
-     479,  1050,  1221,   806,  1321,   807,   246,   247,  1100,   174,
-     486,   808,   463,  1519,   211,   810,   174,  1430,   429,   809,
-     122,   125,   126,  1571,   230,  1386,  1254,   213,  1403,  1501,
-    1123,     8,     9,    10,    11,    12,     8,     9,    10,    11,
+      47,   112,    96,   398,   148,   933,   266,   399,   149,   400,
+     150,   452,   176,   934,   113,   382,   383,   935,   259,   427,
+     791,   527,   401,   707,   406,   439,   512,   505,   712,   112,
+     112,   895,    47,   402,    96,   618,   853,   403,   768,   407,
+     975,   854,   111,    47,   404,    47,  1152,   160,   409,   871,
+     751,   820,   846,    48,   756,    47,  1092,  1144,   718,  1184,
+    1185,    47,   260,   192,    47,   261,   215,    47,   342,   225,
+    1091,   613,   995,   151,   152,   847,   848,   142,    31,   279,
+     218,   112,   112,   398,   933,    48,  1462,   399,   842,   400,
+    1399,   424,   934,   845,   201,  1196,   935,   779,   951,  1318,
+     574,  1202,   401,   843,   406,    47,   936,    31,    47,  1135,
+     679,   536,   153,   402,   937,    47,  1136,   403,   122,   407,
+    1508,   749,   482,   484,   404,   844,   408,   637,   936,   290,
+     688,   641,    31,    68,   857,   575,   950,   280,   692,  1099,
+     864,  1219,  1220,   605,   202,   148,    47,   121,   160,   149,
+     410,   150,   682,   684,    47,  1537,    75,  1539,   978,    47,
+    1462,   372,  1186,   683,   685,    68,   167,   446,  1319,    54,
+     114,   483,   141,   578,   438,   410,   478,   251,    31,   410,
+     105,   105,   517,   579,    47,    47,   467,   160,    75,    61,
+     168,    31,    67,  1482,   109,   534,   535,   211,  -234,  -234,
+      47,    54,   418,    31,   410,    41,    42,   556,    47,  1260,
+     160,   919,   105,    31,   151,   152,   677,    47,   746,  1008,
+      47,    61,   442,   842,    67,   148,   585,   112,   490,   149,
+    1201,   150,   586,   209,   483,   507,   219,   858,   843,   755,
+     527,   861,   112,   535,   674,   527,   112,   105,   527,   143,
+      47,   112,    96,   153,  1210,   596,   576,   760,   770,   675,
+     844,   488,   878,   410,    47,    47,   881,   160,    95,  -234,
+     777,    47,   410,   855,   145,   610,  1037,   165,    47,   535,
+     778,  1038,   846,   862,   342,   610,   666,   536,   740,  1342,
+     712,  1014,   472,   112,   703,   470,  1343,  1051,   618,  1263,
+      95,  1154,   813,    48,   176,   847,   848,  1184,  1185,   705,
+     162,   147,   536,    95,   681,  1344,  1419,  1420,   842,   154,
+     686,   638,   976,  1025,   824,   642,   674,  1264,    47,   188,
+     372,   170,    95,   843,   524,    95,   180,   536,   478,  1134,
+    1192,   675,   165,  1202,   200,   874,  1010,    47,    47,   875,
+    1419,  1420,  1216,   441,  -290,   844,  1015,   739,   478,   246,
+    1186,   831,   109,   857,    47,   761,   478,  1193,    47,   536,
+     109,  1026,   762,    41,    42,   162,   109,   327,   249,   653,
+    1092,    41,    42,    68,   926,   936,  1421,    41,    42,   440,
+     854,   886,   887,  1133,  1091,    47,  1402,  1492,   500,   605,
+     501,   783,   846,  -518,   880,    47,    75,   372,  1551,   905,
+    1186,    75,   251,   763,    95,   764,  1153,  1214,   765,    54,
+    1430,   771,   916,    47,  1193,   847,   848,    95,   605,    47,
+     105,    47,  1457,   605,  1550,  1566,  1212,  1521,   109,    61,
+     435,   871,    67,  1526,   479,   263,   342,  1451,  1452,    41,
+      42,   376,   397,   188,  1561,    47,   794,   795,   796,   876,
+     112,  1565,   -10,   877,  1546,   112,  1051,   377,   386,  1553,
+     327,  -112,  1381,   434,   112,   728,    95,   789,  1406,    47,
+     251,   329,   211,   958,   387,  -112,  -112,    47,    95,   372,
+    -441,    47,  -112,    96,  -467,    47,   740,  1041,   112,   535,
+     112,  -112,   435,  1202,   460,   896,  1107,   505,   979,  -442,
+    1202,   885,   885,   885,   707,   111,  1259,   398,    95,  1121,
+     653,   399,  1150,   400,  1102,  -467,   275,  -467,   909,   165,
+     885,  -467,   486,   277,  1186,   434,   401,   112,   618,   406,
+     653,   936,   112,   653,    48,   278,  1038,   402,   389,  1252,
+     391,   403,  1172,  1174,   407,   907,   109,   330,   404,   531,
+    1107,   767,   162,  1202,   390,   739,   392,    41,    42,   331,
+    1181,  1182,   740,    75,  1036,  1017,   607,   332,   784,  1466,
+     370,   767,   693,   790,   767,  1379,   393,   873,   586,  1118,
+     112,   140,   333,    75,  1019,  1348,    95,    47,   831,   936,
+     936,    75,   394,   888,   885,   334,   479,  1292,  1293,    47,
+     342,    47,   478,   211,   564,   565,   612,   557,   904,   884,
+     884,   884,   558,   559,    68,   587,   479,   410,  1231,  1232,
+      47,   472,  1498,   535,   479,   897,  1250,   713,   884,  1498,
+    1254,   739,   240,   243,    37,   876,    47,    75,    40,  1117,
+     566,   567,   112,   714,   955,    41,    42,   327,   327,   715,
+      54,    47,  1429,   112,    47,   112,   898,   335,   652,   713,
+     730,   105,   899,   188,   712,   716,   731,  1466,   737,   994,
+      61,    43,  1466,    67,   728,   929,   342,  1036,   831,   715,
+     384,   146,  1547,   371,  1199,  1049,   885,   959,    47,   610,
+      47,  1199,  1466,   375,   906,   930,   908,   960,  1333,  1466,
+    1200,   388,   884,   112,  1335,   507,  1096,  1324,   460,   112,
+     408,   460,   747,   704,  1334,   228,   535,   460,   748,   229,
+    1336,   112,   233,   327,   235,   109,     8,     9,    10,    11,
+      12,   244,  1056,  1129,    47,    47,    41,    42,   757,  1500,
+     285,  1501,   327,   590,   758,   410,   396,   775,    47,    95,
+    -291,    41,    42,   612,   441,    31,   431,     8,     9,    10,
+      11,    12,   954,  1382,  1350,   774,   920,   674,   531,   425,
+     531,   775,   775,   531,  -105,   703,   531,   521,  -105,   922,
+     833,   449,   675,    34,  1367,   775,    31,  1391,  1368,  1003,
+     705,  1016,  1356,   464,   884,  1004,  1548,   731,   426,   936,
+    1358,  1359,  1360,   910,   161,   410,  1248,  1447,   327,   728,
+     605,  -112,   586,  -112,    34,  1375,   936,  -112,   462,   728,
+     193,   775,   607,   216,  1459,  1376,   226,   933,   913,    47,
+     410,   775,  -112,  -112,   728,   934,   115,    75,    37,   935,
+    1176,    47,    40,   109,   465,   138,   139,   211,  1395,    41,
+      42,   872,   213,   109,    41,    42,   607,   831,   228,   468,
+    1378,   211,   560,   561,    41,    42,   775,   841,   979,   612,
+     479,   469,   979,   979,   491,   839,   737,   610,   511,    75,
+     158,  1156,    37,   410,   653,   611,    40,   562,   563,   936,
+     936,   112,   653,    41,    42,  1197,  1383,  1519,  1459,   290,
+    1183,  1448,   775,  1467,   213,   161,  1168,  1445,   410,   775,
+     535,  1514,   479,   515,    47,  1571,   520,  1515,   373,   744,
+     532,   586,  1300,  1301,  1171,  1303,   610,   536,    47,   745,
+     654,  1307,   570,  1078,  1310,  1173,    47,   610,   572,   257,
+     801,   802,   803,   804,   161,   158,  1236,   213,   410,   571,
+     740,   517,   737,   573,    47,   211,   932,   109,   704,   138,
+     139,   214,   568,   569,   537,   538,   539,   161,    41,    42,
+    1007,  1004,  1122,   460,   112,   251,   329,   410,   241,   443,
+     323,   775,  1009,   653,   418,   670,   410,  1340,   540,   339,
+     541,   112,   542,   543,   653,   941,   112,   941,   228,   242,
+     233,   338,   841,   612,   576,  1243,   329,   410,   213,  1388,
+    1389,   717,  -438,   214,   594,  1138,   464,   833,   597,   739,
+     488,   329,   410,  1439,  1004,    68,   855,   329,   610,   676,
+     740,   647,  1146,   728,   728,   767,   667,  1146,   668,   429,
+    1311,  1312,  1313,   433,   669,   112,   213,   671,    75,   750,
+     213,   754,  1445,  1446,   672,   653,   214,   673,   112,   112,
+     112,    54,   678,  1533,  1493,  1494,    37,   535,   173,   174,
+      40,   256,   105,   323,   455,  1400,   696,    41,    42,  1400,
+     721,    61,   719,   112,    67,  -238,  1146,   373,   228,  1419,
+    1420,   728,   728,   759,  1425,   772,  1078,   841,   776,  1211,
+    1213,  1215,   780,   371,   109,   433,   138,   237,   495,   612,
+    1349,  1351,  1352,  1107,    47,    41,    42,   214,   834,     2,
+     205,     4,     5,     6,     7,   342,   797,   798,  1123,   529,
+     836,   838,   158,   799,   800,   805,   806,   213,   849,   105,
+     -12,   238,  -292,   901,   -13,   893,   239,   441,  1370,     8,
+       9,    10,    11,    12,    37,   214,   182,   183,    40,   214,
+     894,   921,   923,   928,   373,    41,    42,   924,     8,     9,
+      10,    11,    12,   699,   949,  -415,   595,  -522,    31,   602,
+     748,  1483,   963,   460,    35,    68,    36,   970,   984,   112,
+     972,   698,   327,   410,   983,   977,   704,    31,   635,   699,
+     985,   700,   639,   892,   704,   339,    34,   218,    75,   987,
+     988,    47,   109,   989,   138,   139,   653,   990,   213,  1011,
+    -293,    54,   612,    41,    42,    34,   999,     8,     9,    10,
+      11,    12,   105,  1329,     2,   205,     4,     5,     6,     7,
+    1012,   479,  1013,   872,  1204,  1027,   214,    -3,  1122,  1058,
+    1093,   891,  1028,   112,   112,   112,    31,  1078,  1029,  1030,
+     323,   323,  1031,   227,   945,   728,  1032,   578,   213,   410,
+     948,  1080,  1033,   728,   728,   728,  1044,   579,   128,  1443,
+     129,   130,   131,  -403,    34,  -402,  1095,  1104,   455,    41,
+      42,   455,  1103,  1105,  1146,  1146,  1146,   455,  1106,    35,
+    1110,    36,  1111,  1559,   537,   538,   539,  1112,  1113,   115,
+     653,   653,  1114,  1120,     2,   205,     4,     5,     6,     7,
+    1130,   728,  1131,   729,   775,  1137,   211,   214,   540,   993,
+     541,  1132,   542,  1320,   495,  1145,   323,  1166,   495,   398,
+     737,  1122,  1142,   399,  1442,   400,  1189,  1187,   529,    68,
+     529,   767,  1078,   529,  1188,   323,   529,   460,   401,  1190,
+     406,  1223,   209,   219,  1191,   653,  1205,   339,   653,   402,
+    1206,  1208,    75,   403,   105,   407,  1209,   214,  1217,    35,
+     404,    36,  1221,  1224,   674,    54,  1532,    47,    47,    -3,
+    1229,   213,  1234,  1240,   500,  1249,   105,   112,   112,   675,
+     109,  1244,   138,   139,  1123,    61,  1078,  1251,    67,  1078,
+    1253,    41,    42,   653,  1256,   105,  1257,  1261,   653,   213,
+     737,   323,   441,  1265,   213,  1268,   175,    68,  1270,  1272,
+    1273,  1302,   829,  1274,  1207,   602,   112,   752,  1146,  1146,
+    1278,  1275,   753,  1276,  1122,   654,  1285,   172,   653,  1294,
+      75,  1295,  1061,  1323,  1078,  1305,  1306,  1308,   440,  1078,
+    1331,  1337,  1339,    54,   870,  1309,  1341,  1317,  1346,   602,
+    1345,  1347,    64,   116,   105,   879,   175,  1484,  1353,   175,
+    1354,   148,  1355,   479,  1357,   149,  1204,   150,  1363,  1078,
+     252,  1364,  1365,  1366,  1377,    47,   112,  1123,  1373,  1374,
+     214,  1384,  1385,  1313,    64,   112,  1393,  1394,   105,  1396,
+    1403,   653,   213,  1413,  1414,  1406,   653,   159,  -404,  1417,
+      47,    47,  1428,   160,  1432,   175,   213,  1434,   214,  1436,
+    1437,   339,   729,   214,   653,  1438,   653,  1534,  1444,   220,
+     653,  1449,  1453,   653,   654,    47,  1542,   372,  1454,  1455,
+    1456,   653,  1078,   455,   166,   653,   171,  1078,  1368,   177,
+     178,   179,    37,   181,   173,   174,    40,  1458,    37,  1463,
+     173,   174,    40,    41,    42,  1078,   258,  1078,   232,    41,
+      42,  1078,  1468,   495,  1078,  1470,   416,    68,   175,  1472,
+     247,   248,  1078,  1474,    68,  1080,  1078,  1476,  1478,   375,
+    1123,    37,  1480,   182,   183,    40,  1487,   339,  1481,   436,
+      75,   105,    41,    42,  1486,  1509,  1488,    75,   328,   444,
+     213,   214,  1511,    54,  1499,  1513,   258,   349,  1517,  1518,
+      54,  1540,  1525,  1545,   105,   214,  1552,  1554,   609,  1541,
+     610,   105,   175,   479,  1061,  1556,  1204,    68,   611,   175,
+     479,  1562,    37,  1204,   182,   183,    40,   405,  1569,  1570,
+    1222,   807,   810,    41,    42,  1018,   808,   729,   809,   829,
+      75,   811,   423,  1322,   212,   428,   430,   729,  1520,  1572,
+     159,  1431,  1404,    54,   231,  1255,  1387,  1502,   528,   698,
+    1392,   410,   729,  1228,   105,   694,   695,  1108,   942,   700,
+     723,   447,  1109,   479,  1141,   450,  1204,   451,   826,   965,
+    1057,     8,     9,    10,    11,    12,   466,   973,   175,   900,
+    1332,  1119,    64,   742,   816,   817,   212,   480,  1506,   214,
+    1506,   818,     0,     0,     0,   175,     0,   487,     0,   175,
+      31,     0,     0,     0,  1418,   430,     0,  1426,     0,     0,
+    1298,     0,     0,     0,     0,     0,     0,     0,     0,   829,
+       0,     0,   327,   455,     0,  1506,     0,  1506,    34,   212,
+       0,     0,     0,    37,     0,   182,   183,    40,    37,     0,
+     182,   183,    40,     0,    41,    42,    73,     0,   486,    41,
+      42,     0,  1465,     0,     0,     0,    37,  1469,   182,   183,
+      40,     0,   175,   495,  1124,   323,     0,    41,    42,     0,
+     184,     0,   213,   258,     0,  1530,   603,   410,    73,     0,
+     185,     0,   631,     0,     0,  1531,     0,  1491,     0,     0,
+     212,     0,     0,   184,     0,   636,   690,     0,     0,   636,
+       0,     0,   258,   185,     0,     0,     0,   601,   608,     0,
+       0,     0,     0,   221,     0,     0,   870,     0,     0,   632,
+     633,     8,     9,    10,    11,    12,     0,     0,   212,     0,
+     732,     0,   212,    37,     0,   182,   183,    40,     0,     0,
+       0,     0,     0,     0,    41,    42,     0,     0,   506,   480,
+      31,   729,   729,     0,     0,     0,   125,   125,   125,     0,
+       0,     0,     0,     0,   349,     0,     0,   528,     0,   480,
+     264,     0,   528,  1560,     0,   528,     0,   480,    34,  1560,
+     265,   214,     8,     9,    10,    11,    12,     0,     0,     0,
+    1560,     0,     0,     0,  1560,     0,     0,   455,   829,     0,
+       0,   352,     0,   724,     0,     0,   430,     0,     0,   729,
+     729,    31,     0,     0,     8,     9,    10,    11,    12,   212,
+     777,   738,   410,    64,     0,     0,     0,   125,   175,   125,
+     778,   430,     0,     0,     0,   430,     0,     0,     0,    34,
+       0,     0,     0,    31,    37,     0,   182,   183,    40,     0,
+       0,   213,     0,     0,   274,    41,    42,     0,     0,     0,
+       0,   175,     0,     0,   258,   349,     0,     0,     0,     0,
+       0,    34,     0,     0,     0,   448,    37,   175,   182,   183,
+      40,   609,     0,   610,     0,     0,     0,    41,    42,     0,
+       0,   611,   175,     0,     0,     0,    73,     0,     0,     0,
+     212,    73,     0,     0,     0,     8,     9,    10,    11,    12,
+     125,   819,     0,   698,     0,   410,   339,   212,   125,     0,
+     125,   125,     0,   700,     0,   125,     0,   125,   125,   636,
+     832,     0,   603,   918,    31,     0,     0,     0,     0,     0,
+    1124,     0,   925,   851,     0,     0,   927,   213,     0,     0,
+     212,  1330,     0,     8,     9,    10,    11,    12,     0,     0,
+     214,   603,    34,     0,     0,     0,   603,    37,     0,   182,
+     183,    40,   636,     0,     0,   349,   349,   349,    41,    42,
+       0,     0,    31,   729,     0,     0,     0,     0,     0,   175,
+       0,   729,   729,   729,   349,     0,   221,   125,     0,     0,
+       0,     0,     0,     0,  1530,     0,   410,     0,     0,     0,
+      34,     0,   724,     0,  1531,    37,     0,   182,   183,    40,
+       0,     0,     0,   480,     0,     0,    41,    42,   258,   738,
+       0,     0,   938,  1124,     0,     0,     0,     0,     0,   729,
+       0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
+       0,     0,   264,     0,     0,     0,   214,     0,     0,     0,
+       0,     0,   265,    73,     0,   480,     0,     0,   349,     0,
+       0,    31,     0,   212,     0,     0,     0,   964,   352,     0,
+     430,     0,     0,    73,     0,     0,     0,     0,   952,     0,
+     953,    73,     0,     0,     0,     0,     0,   956,   957,    34,
+       0,   212,   962,     0,   258,   738,   212,     0,     0,     0,
+     992,     0,     0,     0,   967,     0,     0,   352,     0,   971,
+     544,   545,   546,   547,   548,   549,   550,   551,   552,   553,
+       0,     0,     0,     0,     0,   352,  1124,    73,     0,     0,
+       0,   959,     0,   610,     0,  1000,     0,   724,     0,     0,
+       0,   960,     0,     0,   554,   175,     0,   724,     0,     0,
+     349,     0,   636,     0,     0,  1024,   636,   832,  1505,     0,
+    1505,     0,   724,     0,     0,     0,     0,     0,     0,   352,
+    1101,     0,  1035,     0,     0,     0,     0,     0,     0,     0,
+     601,     0,     0,     0,   212,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1505,     0,  1505,   212,     0,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,   506,     0,
+      26,    27,    28,     0,    64,   323,     0,     0,     0,    31,
+       0,     0,     0,     0,   352,     0,     0,  1045,  1046,  1047,
+    1048,     0,  1050,     0,     0,     0,   636,     0,     8,     9,
+      10,    11,    12,     0,     0,     0,    76,    34,  1094,     0,
+       0,     0,    37,     0,    38,    39,    40,     0,     0,     0,
+       0,     0,  1100,    41,    42,     0,     0,    31,     0,   352,
+     352,   352,  1116,     0,     0,     0,     0,     0,    76,     0,
+     430,   116,   212,     0,     0,     0,     0,     0,   352,    43,
+       0,   156,   125,   125,     0,    34,     0,     0,   349,    45,
+      37,  1115,     0,     0,    40,     0,   352,  1218,     0,     0,
+       0,    41,    42,   222,     0,     0,     0,    73,     0,     0,
+       0,     0,   125,   352,     0,   125,   125,     0,   125,     0,
+     125,   125,     0,   603,     0,   125,   125,    43,     0,     0,
+       0,  1143,     0,     0,     0,     0,   428,   146,  1151,     0,
+       0,   724,   724,  1155,   349,   349,     0,     0,  1159,    73,
+    1160,     0,   352,     0,  1162,  1163,  1164,     0,     0,  1167,
+       0,     0,     0,     0,  1203,     0,     0,     0,  1179,     0,
+       0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1194,  1195,     0,   352,
+       0,   354,     0,     0,     0,    78,     0,     0,     0,   724,
+     724,    31,     0,     0,   125,   636,     0,     0,     0,   125,
+     125,     0,     0,  1225,     0,   125,  1227,     0,     0,     0,
+       0,     0,   175,     0,     0,     0,     0,    78,     0,    34,
+       0,   352,     0,     0,    37,     0,     0,     0,    40,     0,
+       0,   352,     0,     0,   352,    41,    42,     0,     0,   221,
+       0,   352,     0,     0,  1242,     0,   352,     0,     0,     0,
+    1246,  1247,   223,   738,   212,     0,     0,     0,     0,     0,
+       0,   744,  1258,     0,     0,     0,     0,  1262,     0,     0,
+    1266,   745,  1267,     0,     0,  1269,    76,     0,     0,     0,
+       0,    76,   412,     0,     0,     0,     0,     0,  1277,   420,
+       0,     0,     0,     0,     0,     0,  1299,     0,     0,     0,
+       0,  1284,    85,  1286,  1287,  1288,  1289,     0,    73,     0,
+       0,     0,     0,   258,     0,     0,     0,     0,    64,  1296,
+       0,  1297,     0,     0,     0,   171,     0,  1386,     0,     0,
+       0,   724,     0,   738,    85,    55,    55,   116,     0,     0,
+     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1325,  1326,     0,     0,     0,     0,
+       0,   412,     0,   724,     0,     0,     0,    55,     0,   224,
+       0,   724,   724,   724,     0,     0,   222,     0,     0,     0,
+       0,     0,   349,   349,     0,     0,     0,     0,   175,     0,
+       0,     0,   352,     0,     0,     0,  1203,     0,     0,    55,
+       0,     0,    55,     0,     0,  1361,  1362,     0,     0,     0,
+       0,     0,     0,     0,     0,  1372,     0,   584,     0,   724,
+       0,     0,     0,     0,     0,   588,     0,     0,   591,     0,
+     116,     0,     0,   212,     0,    78,     0,     0,     0,     0,
+      78,     0,     0,    76,     0,   352,   352,     0,   352,   352,
+       0,     0,     0,     0,     0,     0,     0,   362,   354,     0,
+       0,     0,     0,    76,     0,     0,     0,  1405,    73,     0,
+       0,    76,     0,     0,     0,     0,     0,     0,     0,  1409,
+       0,  1410,  1411,  1412,     0,     0,  1503,     0,  1507,     0,
+     347,   412,     0,  1416,     0,   420,     0,   354,     0,     0,
+       0,     0,  1427,   352,   352,     0,     0,   349,     0,     0,
+       0,     0,     0,     0,     0,   354,     0,    76,  1440,     0,
+       0,     0,     0,  1536,     0,  1538,     0,     0,     0,   212,
+       0,     0,     0,   116,     0,   223,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    85,     0,     0,    55,  1203,    85,     0,   354,
+       0,     0,     0,  1203,     0,     0,     0,   352,  1567,     0,
+    1568,     0,     0,     0,  1489,  1490,     0,     0,     0,     0,
+     412,     0,     0,  1575,  1576,    55,     0,  1495,     0,   125,
+       0,     0,     0,     0,  1495,     0,     0,     0,     0,     0,
+       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
+     221,     0,     0,     0,     0,     0,  1203,   355,     0,     0,
+       0,     0,    78,  1555,   354,     0,     0,  1529,     0,     0,
+      78,  1535,    73,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   352,     0,   352,     0,     0,
+       0,     0,   224,     0,     0,     0,   355,     0,     0,     0,
+    1557,     0,  1558,     0,     0,     0,     0,     0,     0,   354,
+     354,   354,   584,   584,   355,     0,    78,   352,     0,     0,
+       0,     0,     0,     0,     0,   352,   352,   352,   354,     0,
+    1573,  1574,     0,     0,     0,     0,   352,   352,  1577,  1578,
+       0,     0,     0,     0,     0,     0,   354,     0,     0,     0,
+      73,     0,     0,   125,     0,     0,     0,    76,   355,    85,
+       0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   352,   362,     0,     0,     0,     0,    85,
+       0,     0,     0,     0,     0,     0,     0,    85,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    76,
+       0,   911,   354,     0,     0,   914,     0,   347,     0,     0,
+       0,     0,     0,   362,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   355,     0,     0,     0,     0,     0,     0,
+       0,   362,     0,    85,     0,     0,     0,     0,   412,   354,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,   352,     0,     0,     0,     0,    55,     0,   355,   355,
+     355,     0,    31,     0,     0,   362,     0,     0,     0,     0,
+       0,   354,     0,     0,     0,     0,     0,   355,     0,     0,
+       0,   354,     0,     0,   354,     0,     0,     0,     0,   222,
+      34,   354,     0,     0,     0,   355,   354,     0,   347,     0,
+      73,     0,     0,     0,     0,     0,    78,    73,     0,     0,
+       0,     0,   355,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   584,     0,     0,     0,     0,    78,     0,
+       0,   355,     0,     0,     0,   123,   126,   127,    76,     0,
+      73,     0,     0,   347,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   362,   362,   362,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   355,     0,
+       0,     0,     0,     0,   362,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   347,   347,
+     347,     0,   362,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    85,     0,     0,   253,   347,   254,   362,
+     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     355,     0,   354,   355,     0,     0,     0,     0,   223,     0,
+     355,     0,     0,     0,     0,   355,   412,     0,     0,     0,
+       0,     0,     0,     0,     0,    85,     0,     0,   362,     2,
+     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,   354,   354,     0,   354,   354,
+       0,   347,     0,     0,    31,   362,     0,     0,     0,   395,
+       0,     0,     0,     0,     0,     0,     0,    78,    76,   414,
+     415,     0,     0,     0,   419,     0,   421,   422,     0,     0,
+       0,     0,    34,     0,    35,  1157,    36,    37,     0,   173,
+     174,    40,     0,     0,     0,     0,     0,   362,    41,    42,
+       0,  1169,     0,   354,   354,     0,     0,   362,     0,     0,
+     362,     0,     0,     0,     0,   224,     0,   362,     0,     0,
+       0,     0,   362,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,  -294,   347,    26,    27,    28,     0,     0,     0,
+     347,   355,     0,    31,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   354,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  1237,     0,
+       0,    34,     0,     0,    85,     0,    37,     0,   336,   337,
+      40,     0,  -294,     0,     0,     0,     0,    41,    42,     0,
+       0,     0,     0,     0,   355,   355,     0,   355,   355,     0,
+     222,     0,     0,     0,     0,     0,     0,    55,     0,     0,
+       0,     0,     0,   643,     0,   338,     0,    78,     0,     0,
+       0,     0,    76,   634,     0,   164,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   354,     0,   354,     0,     0,
+       0,     0,     0,     0,   217,     0,     0,     0,     0,     0,
+       0,     0,   355,   355,     0,     0,     0,     0,   362,     0,
+     281,   282,     0,   283,     0,     0,     0,   354,     0,     0,
+       0,     0,     0,     0,    55,   354,   354,   354,     0,     0,
+       0,     0,     0,     0,     0,     0,   354,   354,     0,   284,
+     164,   347,     0,     0,     0,   285,   271,     0,     0,   286,
+      76,     0,   287,   288,   289,   290,    41,    42,     0,   291,
+     292,   362,   362,     0,   362,   362,   355,   293,     0,     0,
+       0,     0,     0,   354,     0,   164,     0,     0,     0,     0,
+       0,     0,   513,     0,    85,   368,     0,     0,     0,   374,
+       0,   296,   380,   298,   299,   300,   301,   347,   347,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   223,
+       0,     0,     0,     0,     0,     0,     0,    55,     0,   362,
+     362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    78,     0,     0,     0,     0,     0,     0,   164,     0,
+       0,     0,     0,     0,   355,     0,   355,     0,     0,     0,
+     217,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   354,     0,     0,     0,     0,     0,     0,   164,   461,
+       0,     0,     0,     0,     0,     0,   355,     0,     0,     0,
+       0,     0,     0,   362,   355,   355,   355,     0,     0,     0,
+       0,     0,   374,     0,     0,   355,   355,     0,     0,     0,
+     164,   821,   822,     0,     0,     0,     0,     0,     0,    78,
+      76,     0,     0,     0,     0,     0,     0,    76,     0,     0,
+       0,     0,     0,     0,   461,     0,   224,   164,     0,     0,
+       0,   856,   355,     0,   859,   860,     0,   863,     0,   865,
+     866,     0,     0,     0,   867,   868,     0,     0,    85,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    55,    55,
+       0,   362,     0,   362,     0,     0,     0,     0,     0,     0,
+      76,     0,     0,     0,   606,     0,     0,     0,     0,   630,
+       0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   362,     0,     0,   210,     0,     0,     0,
+      55,   362,   362,   362,     0,     0,   230,     0,   234,     0,
+     236,     0,   362,   362,     0,     0,     0,   245,     0,     0,
+     355,     0,     0,     0,     0,     0,    85,     0,   943,   944,
+       0,     0,     0,     0,   946,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   347,   347,     0,   210,   362,
+     234,   236,   245,     0,    55,   164,   164,     0,     0,    55,
+       0,     0,   368,     0,     0,     0,     0,     0,     0,    78,
+       0,     0,     0,     0,     0,     0,    78,     0,     0,     0,
+       0,     0,     0,   461,     0,     0,   461,     0,     0,     0,
+       0,   210,   461,    55,   474,     2,   205,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,   741,
+       0,    26,    27,    28,     0,     0,     0,     0,     0,    78,
+      31,   164,     0,     0,     0,     0,     0,   362,     0,     0,
+       0,     0,   155,   461,     0,   461,     0,     0,   461,     0,
+     164,   461,   210,     0,   234,   236,   245,     0,    34,     0,
+      35,     0,    36,   368,     0,    38,    39,     0,     0,     0,
+     347,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    85,     0,   250,     0,
+     210,     0,     0,    85,   210,     0,    55,     0,   255,     0,
+       0,     0,     0,     0,     0,    -3,     0,     0,     0,     0,
+     504,     0,     0,     0,     0,     0,   164,     0,     0,    55,
+       0,     0,     0,     0,     0,     0,    55,     0,   368,     0,
+     606,     0,     0,   837,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    85,     0,     0,     0,
+       0,     0,     0,     0,   155,     0,     0,     0,     0,   606,
+     210,     0,     0,     0,   606,     0,     0,     0,   385,     0,
+       0,     0,     0,   368,   368,   368,     0,     0,     0,    55,
+       0,   210,     0,     0,     0,     0,   234,   236,     0,     0,
+       0,   417,   368,     0,   245,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   432,     0,     0,     0,     0,
+       0,     0,  1034,     0,   437,     8,     9,    10,    11,    12,
+       0,     0,     0,     0,   445,     0,     0,   741,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   210,     0,     0,
+       0,     0,   281,   282,    31,   283,     0,     0,   461,   471,
+       0,     0,     0,     0,   481,   210,     0,     0,     0,     0,
+     210,     0,   210,     0,     0,     0,   368,   489,   961,     0,
+       0,   284,    34,   499,     0,   503,     0,   285,     0,   210,
+       0,   286,   210,   210,   287,   288,   289,   290,    41,    42,
+       0,   291,   292,   533,     0,     0,     0,     0,   210,   293,
+       0,     0,     0,   741,     0,     0,     0,     0,     0,     0,
+       0,     0,   210,     0,   294,     0,   378,     0,  1233,   210,
+       0,     0,     0,   296,   827,   298,   299,   300,   301,     0,
+       0,     0,     0,     0,     0,     0,   593,     0,     0,     0,
+       0,   598,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   368,     0,
+       0,     0,   630,     0,     0,   368,     0,     0,     0,   644,
+       0,     0,     0,   645,   646,     0,   648,     0,     0,     0,
+       0,     0,     0,   660,   661,     0,   662,   663,     0,   664,
+       0,   665,     0,     0,     0,     0,     0,  1177,     0,     0,
+       8,     9,    10,    11,    12,     0,     0,     0,   593,     0,
+       0,     0,     0,     0,     0,     0,   680,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   281,   282,    31,
+     283,     0,     0,     0,     0,   210,     0,     0,     0,     0,
+       0,   691,  1321,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   697,     0,     0,     0,   284,    34,   461,     0,
+       0,     0,   285,   210,     0,     0,   286,     0,   210,   287,
+     288,   289,   290,    41,    42,   733,   291,   292,     0,     0,
+       0,   736,     0,     0,   293,     0,   471,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
+     164,   378,     0,     0,     0,     0,     0,     0,   296,  1178,
+     298,   299,   300,   301,     0,     0,   368,     0,     0,     0,
+       0,     0,     0,   773,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   788,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   606,     0,     0,     0,     0,   210,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     210,     0,   368,   368,     0,     0,   815,     0,     0,     0,
+       0,     0,     0,     0,     0,   825,     0,     0,     0,     0,
+     504,     0,   828,     0,     0,   281,   282,   835,   283,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   850,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   284,     0,     0,     0,     0,     0,
+     285,     0,   461,     0,   286,     0,     0,   287,   288,   289,
+     290,    41,    42,     0,   291,   292,     0,     0,     0,   890,
+       0,   210,   293,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   210,     0,     0,   294,     0,   378,
+       0,     0,   379,     0,     0,     0,   296,   380,   298,   299,
+     300,   301,     0,   210,     0,   835,     0,     0,     0,     0,
+       0,   741,     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,   217,     0,     0,     0,     0,     0,     0,
+     250,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     968,   969,     0,     0,     0,    33,     0,     0,    34,     0,
+      35,     0,    36,    37,   986,    38,    39,    40,     0,     0,
+     210,   741,   341,   363,    41,    42,     0,     0,     0,     0,
+       0,  1001,     0,  1002,     0,     0,     0,  1006,     0,     0,
+       0,     0,     0,     0,     0,     0,   210,     0,     0,     0,
+      43,     0,    44,     0,     0,     0,   413,     0,     0,     0,
+      45,     0,     0,   413,     0,     0,     0,     0,     0,     0,
+     368,   368,     0,     0,   210,     0,     0,     0,     0,   217,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,  1039,     0,     0,   210,     0,     0,    31,
+    1040,     0,     0,     0,     0,     0,     0,   210,     0,     0,
+       0,     0,     0,  1042,     0,  1043,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   413,     0,    34,     0,  1055,
+       0,     0,   109,     0,    38,    39,  1059,     0,     0,     0,
+       0,     0,     0,    41,    42,     0,     0,     0,  1097,     0,
+       0,  1098,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   598,
+       0,    44,     0,     0,     0,     0,     0,     0,     0,   110,
+       0,   413,     0,     0,     0,   368,     0,     0,   210,   413,
+     589,     0,   413,   592,     0,     0,     0,     0,     0,     0,
+       0,     0,   363,     0,     0,     0,   622,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   640,     0,     0,   341,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   461,     0,   461,     0,     0,     0,     0,
+     281,   282,     0,   283,     0,   413,     0,     0,  1161,   413,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   210,     0,     0,     0,   284,
+     461,   321,   461,     0,     0,   649,     0,   138,   139,   286,
+     363,   345,   287,   650,   289,   290,    41,    42,     0,   291,
+     292,     0,     0,   381,   381,     0,     0,   293,     0,     0,
+     164,     0,     0,   413,   533,     0,     0,     0,     0,     0,
+       0,  1226,   294,     0,   651,     0,   652,   379,     0,     0,
+       0,   296,   380,   298,   299,   300,   301,     0,     0,     0,
+       0,     0,     0,     0,   413,     0,     0,   363,     0,     0,
+    1239,     0,     0,     0,     0,  1241,     0,     0,     0,     0,
+       0,     0,     0,  1245,     0,     0,     0,     0,     0,     0,
+       0,   210,     0,     0,   321,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   413,     0,     0,
+     341,   363,     0,     0,  1271,     0,     0,     0,     0,   485,
+       0,     0,     0,     0,     0,     0,  1279,     0,     0,  1280,
+       0,  1281,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1290,  1291,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   413,   413,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1304,     0,     0,
+       0,     0,     0,     0,     0,   830,   363,     0,   363,     0,
+       0,     0,     0,     0,     0,     0,     0,   622,     0,   622,
+     622,     0,     0,     0,  1327,     0,   622,     0,     0,   514,
+       0,   516,   519,     0,     0,     0,   869,   363,     0,   522,
+     523,     0,   363,     0,   516,   516,     0,     0,     0,     0,
+       0,   363,   363,   363,     0,     0,   516,     0,     0,     0,
+       0,     0,     0,     0,     0,   381,     0,     0,     0,     0,
+     363,     0,     0,     0,     0,   413,   912,     0,     0,   413,
+     915,     0,     0,     0,     0,     0,   917,     0,     0,     0,
+       0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   341,   363,   413,     0,   413,     0,
+       0,     0,   413,     0,     0,     0,     0,     0,     0,   281,
+     282,  1397,   283,  1398,     0,     0,     0,     0,   516,     0,
+       0,     0,     0,     0,     0,     0,  1407,     0,  1408,     0,
+       0,     0,     0,     0,   363,   622,     0,     0,   284,     0,
+       0,     0,     0,     0,   285,     0,  1415,     0,   286,     0,
+       0,   287,   288,   289,   290,    41,    42,   735,   291,   292,
+       0,     0,  1433,  1435,     0,     0,   293,   210,     0,     0,
+     341,   363,     0,     0,  1441,   413,   413,  1245,     0,     0,
+       0,   294,     0,   378,     0,     0,     0,     0,     0,   812,
+     296,   380,   298,   299,   300,   301,   769,     0,     0,  1464,
+       0,     0,     0,     0,     0,     0,     0,     0,  1471,   782,
+       0,  1473,     0,  1475,  1477,  1479,   769,   413,     0,   769,
+       0,     0,     0,     0,     0,     0,   363,     0,     0,     0,
+     792,   793,   830,   363,     0,     0,     0,   622,     0,   622,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   622,
+       0,     0,   814,     0,     0,  1510,     0,  1512,     0,     0,
+    1245,     0,   823,     0,     0,     0,     0,     0,     0,   345,
+       0,     0,     0,     0,   782,  1524,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   516,   516,   516,   516,   516,
+     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
+     516,   516,   516,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   830,     0,   889,     0,     0,     0,     0,     0,
+     413,     0,     0,   381,     0,     0,   413,     0,   516,     0,
+       0,     0,     0,     0,   413,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   622,   622,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   345,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   363,     0,     0,     0,     0,     0,
+     413,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,   413,
+    1158,    26,    27,    28,     0,     0,     0,     0,     0,   363,
+      31,   453,     0,     0,     0,   413,  1170,     0,   622,   622,
+    1175,     0,     0,     0,     0,     0,     0,   516,     0,     0,
+     363,   363,     0,     0,     0,     0,     0,     0,    34,   782,
+       0,   991,     0,     0,     0,    38,    39,   996,     0,   516,
+       0,     0,     0,     0,  1005,     0,     0,     0,     0,     0,
+       0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   454,     0,     0,     0,   711,     0,     0,     0,
+     110,   830,   413,  1238,     0,     0,     0,     0,  1022,  1023,
+       0,   345,     0,     0,   622,     0,     0,     0,   516,     0,
+       0,     0,     0,     0,     0,     0,   345,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     516,     0,     0,     0,     0,     0,     0,     0,     0,   363,
+       0,     0,     0,     0,     0,   516,  1053,     0,     0,     0,
+     381,     0,     0,  -517,     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,   341,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    33,     0,   363,
+      34,     0,    35,     0,    36,    37,   321,    38,    39,    40,
+       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
+       0,     0,  1139,  1140,     0,     0,     0,     0,     0,   381,
+       0,     0,     0,     0,     0,   996,     0,     0,  1149,     0,
+     769,     0,    43,     0,    44,     0,     0,     0,   363,   363,
+       0,     0,    45,     0,     0,     0,     0,     0,     0,     0,
+    1165,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1180,     0,     0,     0,     0,   516,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   381,     0,  1198,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   516,     0,     0,
+     996,   996,     0,     0,     0,     0,     0,     0,     0,   516,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1230,     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,
+     516,    26,    27,    28,    29,     0,     0,    30,     0,     0,
+      31,    32,     0,   363,     0,     0,     0,     0,   996,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    33,     0,   889,    34,     0,
+      35,     0,    36,    37,     0,    38,    39,    40,     0,     0,
+       0,     0,  1282,  1283,    41,    42,     0,     0,     0,     0,
+       0,     0,   281,   282,     0,   283,     0,     0,     0,     0,
+       0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
+      43,     0,    44,     0,     0,     0,  -521,     0,     0,     0,
+      45,   284,     0,     0,     0,     0,     0,   285,     0,     0,
+       0,   286,     0,   413,   287,   288,   289,   290,    41,    42,
+       0,   291,   292,     0,     0,     0,   516,     0,     0,   293,
+       0,     0,     0,     0,     0,     0,     0,     0,   413,   413,
+     516,   516,     0,   996,   294,     0,   378,     0,     0,     0,
+       0,   781,     0,   296,   380,   298,   299,   300,   301,     0,
+       0,     0,     0,   413,     0,     1,     2,   205,     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,   281,
+     282,    31,  1062,  1063,  1390,  1064,   769,     0,  1065,  1066,
+    1067,  1068,  1069,  1070,  1071,  1072,     0,     0,     0,  1073,
+       0,     0,     0,  1074,  1075,     0,    33,     0,   284,    34,
+       0,    35,     0,    36,   649,     0,    38,    39,   286,     0,
+       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
+       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   294,     0,  1076,     0,     0,   170,     0,     0,     0,
+     296,   297,   298,   299,   300,   301,     0,     0,     0,     0,
+    1077,     0,  1450,     0,  -129,     0,     0,     0,     0,     0,
+       1,     2,   205,     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,   281,   282,    31,   283,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     516,     0,     0,   281,   282,     0,   283,     0,     0,     0,
+       0,     0,     0,   284,    34,     0,    35,   516,    36,   285,
+       0,    38,    39,   286,  1516,     0,   287,   288,   289,   290,
+      41,    42,   284,   291,   292,     0,     0,     0,   285,     0,
+       0,   293,   286,     0,     0,   287,   288,   289,   290,    41,
+      42,     0,   291,   292,     0,     0,   294,     0,  1076,     0,
+     293,     0,     0,     0,     0,   296,   297,   298,   299,   300,
+     301,     0,     0,     0,     0,   294,   321,   378,     0,  -129,
+     993,     0,     0,     0,   296,   380,   298,   299,   300,   301,
+     516,   516,     1,     2,   205,     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,   281,   282,    31,   283,
+       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,   284,    34,     0,    35,    31,
+      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
+       0,     0,   109,     0,    38,    39,     0,     0,   294,     0,
+      44,     0,     0,    41,    42,     0,     0,   296,   297,   298,
+     299,   300,   301,     2,   205,     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,   281,   282,    31,   283,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,  -294,     0,     0,     0,   284,    34,     0,    35,     0,
+      36,   285,    31,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,     0,   294,     0,
+     343,  -294,     0,     0,     0,   781,     0,   296,   344,   298,
+     299,   300,   301,     2,   205,     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,   281,   282,    31,   283,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,  -295,     0,     0,     0,   284,    34,     0,    35,     0,
+      36,   285,    31,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,     0,   294,     0,
+     931,  -295,     0,     0,     0,   781,     0,   296,   344,   298,
+     299,   300,   301,     2,   205,     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,   281,   282,    31,   283,
+       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,   284,    34,     0,    35,    31,
+      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,    38,    39,     0,     0,   294,     0,
+     931,     0,     0,     0,     0,   781,     0,   296,   600,   298,
+     299,   300,   301,     2,   205,     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,   281,   282,    31,   283,
+       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,   284,    34,     0,    35,    31,
+      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,   206,    39,     0,     0,   294,     0,
+     343,     0,     0,     0,     0,     0,     0,   296,   344,   298,
+     299,   300,   301,     2,   205,     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,   281,   282,    31,   283,
+       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,   284,    34,     0,    35,     0,
+      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
+     931,     0,     0,     0,     0,     0,     0,   296,   344,   298,
+     299,   300,   301,     2,   205,     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,   281,   282,    31,   283,
+       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,   284,    34,     0,    35,     0,
+      36,   285,     0,   206,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
+    1020,     0,     0,     0,     0,     0,     0,   296,  1021,   298,
+     299,   300,   301,     2,   205,     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,   281,   282,    31,   283,
+       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,   284,    34,     0,    35,    31,
+      36,   285,     0,   206,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,   206,    39,     0,     0,   294,     0,
+     378,     0,     0,     0,     0,     0,     0,   296,   380,   298,
+     299,   300,   301,   204,     2,   205,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,   270,
+      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,   492,   493,   494,    34,     0,    35,
+      31,    36,    37,     0,   206,    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,   207,     0,     0,     0,     0,     0,     0,     0,   208,
+       1,     2,   205,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,  -294,     0,    26,    27,    28,
+      29,     0,     0,    30,     0,     0,    31,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
+       0,    38,    39,     0,     0,  -294,     1,     2,   205,     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,    44,    30,
+       0,     0,    31,     0,     0,     0,   110,     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,   204,
+       2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,  -294,  1227,    25,    26,    27,   693,    30,
-     694,  1107,   941,   722,    30,   213,   211,  1056,   478,   213,
-    1108,  1140,   825,  1118,   899,   478,   935,   964,  1331,   741,
-     972,   815,     0,     0,   816,   174,   257,    33,   817,   602,
-       0,   252,    33,   253,  1391,   630,     0,     0,     0,    37,
-      38,     0,   174,  -294,     0,     0,   174,  1424,   635,   211,
-       0,     0,   635,     0,     0,   257,     0,     8,     9,    10,
-      11,    12,     0,     0,     0,     0,     0,     0,   478,   776,
-       0,   409,     0,  1123,   935,   935,   337,     0,     0,   777,
-       0,     0,     0,     0,   109,    30,     0,     0,  1417,   653,
-       0,  1425,     0,     0,     0,  1217,   213,     0,     0,     0,
-       0,     0,   479,     0,     0,  1504,     0,  1504,     0,   174,
-     211,     0,     0,    33,   394,     0,     0,   348,     0,     0,
-       0,     0,   479,     0,   413,   414,     0,   728,   728,   418,
-     479,   420,   421,     0,     0,     0,  1464,     0,     0,     0,
-       0,  1468,  1504,     0,  1504,     0,     0,     0,   211,     0,
-       0,     0,   211,     0,     0,   958,   723,   609,     0,   429,
-       0,     0,     0,     0,     0,   959,     0,     0,   505,     0,
-     716,  1490,   322,     0,   737,   463,    63,   213,     0,     8,
-       9,    10,    11,    12,   429,   728,   728,     0,   429,     0,
-       0,     0,     0,     0,     0,     0,     0,     8,     9,    10,
-      11,    12,     0,   600,   607,     0,     0,    30,   749,    36,
-     753,   181,   182,    39,     0,   631,   632,   257,   348,     0,
-      40,    41,     0,     0,     0,    30,     0,   213,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,   211,
-      36,     0,   181,   182,    39,     0,   697,     0,   409,     0,
-       0,    40,    41,    33,   698,     0,   699,  1559,    36,     0,
-     181,   182,    39,  1559,   818,     0,     0,     0,     0,    40,
-      41,     0,     0,     0,  1559,   174,     0,   608,  1559,   609,
-       0,     0,   635,   831,   935,   602,     0,   610,     0,     0,
-       0,     0,     0,     0,     0,   697,   850,   409,     0,     0,
-       0,   935,     0,     0,     0,   699,     0,     0,   174,     0,
-       0,     0,     0,     0,   602,     0,     0,     0,     0,   602,
-     211,     0,     0,     0,   174,   635,     0,  1329,   348,   348,
-     348,     0,     0,     0,     0,  1385,     0,   211,     0,   174,
-      36,     0,   181,   182,    39,     0,     0,   348,     0,     0,
-     213,    40,    41,     0,     0,     0,     0,     0,     0,   728,
-       0,     0,   891,     0,     0,   723,     0,   728,   728,   728,
-     211,     0,     0,     0,   935,   935,   479,   697,   213,   409,
-       0,   257,   737,   213,     0,   937,     0,   699,     0,     0,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    72,     0,
-      25,    26,    27,     0,     0,   728,     0,     0,   479,    30,
-     452,   348,     0,   944,     0,     0,     0,     0,     0,   947,
-     963,     0,     0,   429,     0,    75,   174,     0,     0,    72,
-      36,     0,   181,   182,    39,     0,     0,    33,     0,     0,
-       0,    40,    41,     0,    37,    38,     0,   257,   737,     0,
-       0,     0,     0,   991,     0,     0,    75,     0,     0,     0,
-       0,   213,     0,     0,   220,     0,     0,  1529,     0,   409,
-       0,     0,     0,     0,     0,   213,     0,  1530,   485,     0,
-       0,   453,     0,   211,  1502,   710,  1506,     0,     0,   109,
-     723,   221,     0,     0,     0,     0,     0,     0,     0,     0,
-     723,     0,     0,   348,     0,   635,   820,   821,  1023,   635,
-     831,   211,     0,     0,     0,   723,   211,     0,     0,     0,
-       0,  1535,     0,  1537,     0,  1034,    36,     0,   181,   182,
-      39,     0,     0,     0,     0,     0,   855,    40,    41,   858,
-     859,     0,   862,     0,   864,   865,     0,     0,     0,   866,
-     867,     0,   351,   543,   544,   545,   546,   547,   548,   549,
-     550,   551,   552,   263,     0,     0,  1566,     0,  1567,   213,
-       0,     0,     0,   264,   951,     0,   952,    63,     0,   353,
-       0,  1574,  1575,   955,   956,     0,     0,   553,   961,     0,
-       0,     0,   174,     0,   653,     0,   411,     0,     0,   635,
-     966,  1060,     0,   419,   211,   970,     0,     0,     8,     9,
-      10,    11,    12,     0,     0,     0,     0,     0,   211,     0,
-       0,     0,     0,     0,     0,     0,   447,     0,     0,     0,
-       0,   999,     0,   942,   943,  1115,    30,     0,   505,   945,
-       0,     0,     0,   429,   115,     0,     0,    72,     0,     0,
-       0,     0,    72,     0,     0,     0,     0,     0,     0,     0,
-       0,   348,     0,     0,    33,     0,     0,     0,     0,    36,
-       0,   181,   182,    39,    75,   411,   600,     0,     0,    75,
-      40,    41,     0,     0,     0,     0,   124,   124,   124,     0,
-       0,     0,     0,   653,     0,     0,   602,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1529,     0,   409,   427,
-       0,     0,   211,     0,   723,   723,  1530,   348,   348,     0,
-       0,     0,     0,     0,     8,     9,    10,    11,    12,     0,
-       0,   583,     0,  1044,  1045,  1046,  1047,  1202,  1049,   587,
-       0,     0,   590,     0,     0,     0,     0,   220,     0,     0,
-       0,     0,    30,     0,  1093,     0,     0,   124,     0,   124,
-       0,   213,     0,     0,     0,     0,     0,     0,  1099,     0,
-       0,     0,   723,   723,   221,     0,     0,     0,   635,     0,
-      33,     0,     0,     0,   273,    36,     0,   181,   182,    39,
-       0,     0,     0,  1060,     0,     0,    40,    41,     0,     0,
-       0,     0,     0,     0,     0,   411,     0,  1114,     0,   419,
-       0,     0,     0,     0,    72,     0,     0,     0,     0,     0,
-       0,     0,   183,     0,     0,     0,     0,     0,     0,   351,
-       0,     0,   184,     0,    72,     0,   737,     0,     0,     0,
-     124,    75,    72,     0,     0,     0,     0,  1142,   124,     0,
-     124,   124,     0,     0,  1150,   124,   353,   124,   124,  1154,
-       0,    75,     0,     0,  1158,     0,  1159,     0,   351,    75,
-    1161,  1162,  1163,     0,     0,  1166,     0,     0,     0,  1298,
-       0,     0,     0,     0,  1178,     0,   351,     0,    72,   174,
-       0,     0,     0,     0,   411,   353,   257,     0,     0,  1297,
-       0,    63,  1193,  1194,   211,     0,     0,     0,     8,     9,
-      10,    11,    12,   353,   723,    75,   737,     0,     0,     0,
-     115,     0,     0,     0,     0,     0,     0,   124,     0,  1224,
-     351,     0,  1226,     0,     0,     0,    30,     0,     0,     0,
-     213,     0,     0,     0,     0,     0,   723,     0,     0,     0,
-       0,     0,     0,     0,   723,   723,   723,   353,     0,     0,
-       0,     0,     0,     0,    33,   348,   348,     0,     0,    36,
-    1241,   181,   182,    39,     0,     0,  1245,  1246,     0,  1202,
-      40,    41,     0,     0,     0,     0,   583,   583,  1257,     0,
-       0,     0,     0,  1261,     0,   351,  1265,     0,  1266,     0,
-       0,  1268,   723,     0,     0,     0,   263,     0,     0,     0,
-       0,     0,     0,   115,  1276,     0,   264,     0,     0,     0,
-       0,     0,   353,  1232,     0,     0,     0,  1283,     0,  1285,
-    1286,  1287,  1288,     0,     0,     0,   213,     0,     0,     0,
-     351,   351,   351,     0,     0,  1295,     0,  1296,     0,     0,
-       0,   170,     0,     0,     0,     0,     0,     0,     0,   351,
-       0,     0,     0,     0,     0,   174,     0,   353,   353,   353,
-       0,     0,     0,     0,     0,   910,     0,   351,     0,   913,
-    1324,  1325,     0,   211,     0,     0,   353,     0,    72,     0,
-     348,     0,    77,     0,   351,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
-       0,     0,   411,     0,     0,    75,   115,     0,     0,    84,
-       0,   353,     0,    77,     0,    54,    54,     0,     0,     0,
-      72,  1360,  1361,   351,     0,     0,     0,     0,     0,  1202,
-       0,  1371,     0,     0,     0,     0,  1202,  1320,     0,     0,
-      84,     0,     0,     0,     0,     0,    54,    75,   222,     0,
-     353,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     351,     0,     0,     0,     0,     0,     0,     0,     0,   211,
-       0,     0,     0,     0,     0,   223,     0,     0,    54,     0,
-       0,    54,     0,  1404,     0,     0,     0,   353,     0,  1202,
-       0,     0,     0,     0,     0,  1408,  1554,  1409,  1410,  1411,
-       0,     0,   351,     0,     0,     0,     0,     0,     0,  1415,
-       0,     0,   351,     0,     0,   351,     0,   583,  1426,     0,
-     220,     0,   351,     0,     0,     0,     0,   351,     0,   353,
-       0,     0,   124,   124,  1439,     0,   354,     0,     0,   353,
-       0,     0,   353,     0,     0,     0,     0,   221,     0,   353,
-       0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
-       0,     0,   124,   361,     0,   124,   124,     0,   124,   346,
-     124,   124,     0,     0,     0,   124,   124,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    72,
-    1488,  1489,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1494,     0,     0,     0,     0,     0,     0,
-    1494,     0,     0,     0,     0,     0,    75,     0,     0,     0,
+      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
+       0,     0,     0,     0,    44,    31,     0,     0,     0,     0,
+       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     411,    77,     0,     0,    54,     0,    77,     0,     0,     0,
-       0,     0,     0,  1528,     0,     0,     0,  1534,     0,     0,
-       0,     0,     0,     0,   124,     0,     0,     0,    84,   124,
-     124,     0,     0,    84,    54,   124,     0,     0,     0,     0,
-       0,     0,     0,   351,     0,     0,  1556,     0,  1557,     0,
+       0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
+     206,    39,     0,     2,   205,     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,   207,    31,     0,
+       0,     0,     0,     0,     0,   270,     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,   206,    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,
+     207,     0,     0,     0,     0,     0,     0,     0,   208,     2,
+     205,     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,   205,     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,   687,    31,     0,     0,
+       0,     0,     0,     0,   634,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,    35,   643,    36,
+     338,     0,    38,    39,     0,     0,     0,     0,   110,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1369,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   687,
+       0,     0,     0,     0,     0,     0,     0,   634,     2,   205,
+       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,  -294,     0,    26,    27,
+      28,    34,     0,    35,     0,    36,     0,    31,    38,    39,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1371,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+      37,     0,   336,   337,    40,   687,  -294,     0,     0,     0,
+       0,    41,    42,   634,     2,   205,     4,     5,     6,     7,
+       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,     0,     0,   110,     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,   206,    39,     0,     2,   205,     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,   269,    31,     0,     0,     0,     0,     0,     0,   629,
+       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,   205,     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,   687,    31,     0,     0,     0,     0,
+       0,     0,   634,     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,   205,     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,   599,    31,     0,
+       0,     0,     0,     0,     0,   634,     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,   206,    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,   281,   282,    31,   283,     0,     0,     0,     0,
+     207,     0,     0,     0,     0,     0,     0,     0,   270,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   284,    34,     0,     0,     0,     0,   285,     0,    38,
+      39,   286,     0,     0,   287,   288,   289,   290,    41,    42,
+       0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   294,     0,   525,     0,     0,   170,
+       0,     0,     0,   296,   297,   298,   299,   300,   301,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
+       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,   284,    34,     0,     0,    31,
+       0,   285,     0,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
+       0,     0,    37,     0,   336,   337,    40,     0,   294,     0,
+     599,    -3,     0,    41,    42,     0,     0,   296,   600,   298,
+     299,   300,   301,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,   338,     0,    26,    27,    28,     0,     0,     0,   110,
+     281,   282,    31,   283,     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,   284,
+      34,     0,     0,    31,   453,   649,     0,    38,    39,   286,
+       0,     0,   287,   288,   289,   290,    41,    42,     0,   291,
+     292,     0,     0,     0,     0,     0,     0,   293,     0,     0,
+       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
+       0,     0,   294,   -35,   766,     0,     0,     0,     0,     0,
+       0,   296,   297,   298,   299,   300,   301,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,   454,     0,    26,    27,    28,
+       0,     0,     0,   110,   281,   282,    31,   283,     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,   284,    34,    26,    27,    28,     0,   285,
+       0,    38,    39,   286,    31,     0,   287,   288,   289,   290,
+      41,    42,     0,   291,   292,     0,     0,     0,     0,     0,
+       0,   293,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,     0,     0,   294,     0,   295,    38,
+      39,     0,     0,     0,     0,   296,   297,   298,   299,   300,
+     301,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,   643,     0,   338,     0,   281,   282,
+      31,   283,     0,     0,   634,     0,     0,     0,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,   284,    34,    26,
+      27,    28,     0,   285,     0,    38,    39,   286,    31,     0,
+     287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
+       0,     0,     0,     0,     0,   293,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
+     294,     0,   156,    38,    39,     0,     0,     0,     0,   296,
+     297,   298,   299,   300,   301,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+     256,     0,   281,   282,    31,   283,     0,     0,   110,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   284,    34,     0,     0,     0,     0,   285,     0,    38,
+      39,   286,     0,     0,   287,   288,   289,   290,    41,    42,
+       0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   294,     0,   599,     0,     0,     0,
+       0,     0,     0,   296,   600,   298,   299,   300,   301,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
+       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,   284,    34,     0,     0,    31,
+       0,   285,     0,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
+       0,     0,    37,     0,    38,    39,    40,     0,   294,     0,
+     378,     0,     0,    41,    42,     0,     0,   296,   380,   298,
+     299,   300,   301,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
+       0,    44,     0,     0,     0,     0,     0,     0,     0,    45,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,    34,     0,    31,
+       0,     0,    37,     0,   206,    39,    40,     0,     0,     0,
+       0,     0,     0,    41,    42,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
+       0,     0,    37,     0,   336,   337,    40,     0,     0,    43,
+       0,   269,     0,    41,    42,     0,     0,     0,     0,   208,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   643,
+       0,   338,     0,     0,     0,     0,     0,     0,     0,   634,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
+      26,    27,    28,     0,     0,     0,     0,    34,     0,    31,
+       0,     0,     0,     0,    38,    39,     0,     0,  -294,     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,  -294,   643,
+       0,   338,     0,     0,     0,     0,     0,     0,     0,   110,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   643,
+       0,   338,     0,     0,     0,     0,     0,     0,     0,   634,
+       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,
+     453,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,  -294,
+       0,    26,    27,    28,     0,     0,     0,    34,     0,     0,
+      31,     0,     0,     0,    38,    39,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+       0,     0,     0,     0,     0,    38,    39,     0,     0,  -294,
+       0,   454,     0,     0,     0,   947,     0,     0,     0,   110,
+       0,     0,     0,     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,     0,     0,
+     110,     0,    31,   453,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
+      34,     0,     0,    31,     0,     0,     0,    38,    39,     0,
        0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-     353,    25,    26,    27,     0,     0,  1572,  1573,     0,  1156,
-      30,   452,     0,     0,  1576,  1577,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1168,   351,   351,     0,   351,
-     351,   222,     0,     0,     0,     0,     0,     0,    33,     0,
-       0,     0,     0,     0,     0,    37,    38,     0,     0,    72,
-       0,     0,     0,   353,   353,     0,   353,   353,   223,     8,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,    34,    26,    27,    28,     0,     0,     0,    38,    39,
+       0,    31,     0,     0,   454,     0,     0,     0,  1235,     0,
+       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
+       0,     0,     0,     0,     0,   156,   206,    39,     0,     0,
+       0,     0,     0,   110,     0,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+       0,     0,     0,   269,    31,     0,     0,     0,     0,     0,
+       0,   270,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,    34,    26,    27,    28,     0,     0,     0,    38,
+      39,     0,    31,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+      34,     0,    31,     0,     0,     0,   256,    38,    39,     0,
+       0,     0,     0,     0,   634,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
+       0,     0,     0,     0,   338,     0,     0,     0,     0,     0,
+       0,     0,   634,     0,     0,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,   454,    26,    27,    28,     0,     0,
+       0,     0,   110,     0,    31,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+       0,     0,    34,     0,    31,     0,     0,     0,     0,   206,
+      39,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,    34,    26,    27,    28,     0,     0,     0,    38,
+      39,     0,    31,     0,     0,     0,   269,     0,     0,     0,
+       0,     0,     0,     0,   629,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,   599,    38,    39,     0,
+       0,     0,     0,     0,   634,     0,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
+       0,     0,     0,     0,   338,    31,     0,     0,     0,     0,
+       0,     0,   110,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,    34,    26,    27,    28,     0,     0,     0,
+      38,    39,     0,    31,     0,     0,     2,   205,     4,     5,
+       6,     7,     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,    44,   206,    39,
+       0,    31,     0,   281,   282,   110,   283,  1063,     0,  1064,
+       0,     0,  1065,  1066,  1067,  1068,  1069,  1070,  1071,  1072,
+       0,     0,  1549,  1073,     0,     0,     0,  1074,  1075,    34,
+      33,    35,   284,    36,     0,     0,    38,    39,   649,     0,
+       0,     0,   286,   629,     0,   287,   288,   289,   290,    41,
+      42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
+     293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,  -413,     0,     0,   294,     0,   378,     0,     0,
+     170,     0,     0,     0,   296,   380,   298,   299,   300,   301,
+       0,     0,     0,     0,  1077,     0,   281,   282,  -129,   283,
+    1063,     0,  1064,     0,     0,  1065,  1066,  1067,  1068,  1069,
+    1070,  1071,  1072,     0,     0,     0,  1073,     0,     0,     0,
+    1074,  1075,     0,    33,     0,   284,     0,     0,     0,     0,
+       0,   649,     0,     0,     0,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
+     378,     0,     0,   170,     0,     0,     0,   296,   380,   298,
+     299,   300,   301,     0,     0,     0,     0,  1077,     0,     0,
+       0,  -129,     2,   205,     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,   281,
+     282,     0,   283,  1063,     0,  1064,  1419,  1420,  1065,  1066,
+    1067,  1068,  1069,  1070,  1071,  1072,     0,     0,  1549,  1073,
+       0,     0,     0,  1074,  1075,    34,    33,    35,   284,    36,
+       0,     0,    38,    39,   649,     0,     0,     0,   286,     0,
+       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
+       0,     0,     0,     0,  1328,     0,   293,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   294,     0,   378,     0,     0,   170,     0,     0,     0,
+     296,   380,   298,   299,   300,   301,     0,     0,   281,   282,
+    1077,   283,  1063,     0,  1064,  1419,  1420,  1065,  1066,  1067,
+    1068,  1069,  1070,  1071,  1072,     0,     0,     0,  1073,     0,
+       0,     0,  1074,  1075,     0,    33,     0,   284,     0,     0,
+       0,     0,     0,   649,     0,     0,     0,   286,     0,     0,
+     287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
+       0,     0,     0,     0,     0,   293,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     294,     0,   378,     0,     0,   170,     0,     0,     0,   296,
+     380,   298,   299,   300,   301,     0,     0,   281,   282,  1077,
+     283,  1063,     0,  1064,     0,     0,  1065,  1066,  1067,  1068,
+    1069,  1070,  1071,  1072,     0,     0,     0,  1073,     0,     0,
+       0,  1074,  1075,     0,    33,     0,   284,     0,     0,     0,
+       0,     0,   649,     0,     0,     0,   286,     0,     0,   287,
+     288,   289,   290,    41,    42,     0,   291,   292,     0,     0,
+       0,     0,     0,     0,   293,   281,   282,     0,   283,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
+       0,   378,     0,     0,   170,     0,     0,     0,   296,   380,
+     298,   299,   300,   301,   284,     0,     0,     0,  1077,     0,
+     285,     0,     0,     0,   286,     0,     0,   287,   288,   289,
+     290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
+       0,     0,   293,   281,   282,     0,   283,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   294,     0,   378,
+       0,     0,   281,   282,     0,   283,   296,   380,   298,   299,
+     300,   301,   284,     0,     0,     0,     0,     0,   285,     0,
+       0,     0,   286,     0,     0,   287,   288,   289,   290,    41,
+      42,   284,   291,   292,     0,     0,     0,   649,     0,     0,
+     293,   286,     0,     0,   287,   288,   289,   290,    41,    42,
+       0,   291,   292,     0,     0,   294,     0,   378,     0,   293,
+     281,   282,     0,   283,   296,   734,   298,   299,   300,   301,
+       0,     0,     0,     0,   294,     0,   785,     0,     0,   281,
+     282,     0,   283,   296,   380,   298,   299,   300,   301,   284,
+       0,     0,     0,     0,     0,   285,     0,     0,     0,   286,
+       0,     0,   287,   288,   289,   290,    41,    42,   284,   291,
+     292,     0,     0,     0,   285,     0,     0,   293,   286,     0,
+       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
+       0,     0,   294,     0,   378,     0,   293,   281,   282,     0,
+     283,   296,   827,   298,   299,   300,   301,     0,     0,     0,
+       0,   294,     0,     0,     0,     0,   281,   282,     0,   283,
+     296,   380,   298,   299,   300,   301,   284,     0,     0,     0,
+       0,     0,   285,     0,     0,     0,   286,     0,     0,   287,
+     288,   289,   290,    41,    42,   284,   291,   292,     0,     0,
+       0,   285,     0,     0,   293,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,   518,
+       0,     0,     0,   293,     0,     0,     0,     0,   296,   380,
+     298,   299,   300,   301,     0,     0,     0,     0,   521,     0,
+       0,     0,     0,     0,     0,     0,     0,   296,   380,   298,
+     299,   300,   301,   204,     2,   205,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
+       0,    36,     0,     0,   206,    39,   474,     2,   205,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,    35,     0,    36,     0,     0,    38,    39,     2,
+     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,    35,     0,    36,     0,     0,   206,
+      39
+};
+
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-1356))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
+static const yytype_int16 yycheck[] =
+{
+       0,     1,     0,   184,    43,   698,   115,   184,    43,   184,
+      43,   238,    55,   698,     1,   167,   168,   698,   104,   203,
+     543,   294,   184,   455,   185,   218,   280,   278,   456,    29,
+      30,   656,    32,   184,    32,   348,   611,   184,   520,   185,
+     759,   611,     1,    43,   184,    45,  1006,    45,   186,   629,
+     499,   579,   609,     0,   503,    55,   902,   999,   462,  1042,
+    1043,    61,   105,    61,    64,   108,    64,    67,   154,    67,
+     902,   348,   780,    43,    43,   609,   609,    32,    39,    51,
+      67,    81,    82,   264,   777,    32,  1419,   264,   609,   264,
+    1338,   200,   777,   609,    28,  1055,   777,   529,   723,    63,
+      95,  1062,   264,   609,   265,   105,   699,    39,   108,   110,
+     417,    82,    43,   264,   699,   115,   117,   264,   109,   265,
+    1475,   497,   260,   261,   264,   609,    64,   363,   721,    82,
+     437,   367,    39,     0,   612,   130,   721,   109,   445,   110,
+     618,  1074,  1075,   344,    78,   184,   146,    82,   146,   184,
+     111,   184,   425,   426,   154,  1510,     0,  1512,   111,   159,
+    1493,   159,  1043,   425,   426,    32,   107,   227,   132,     0,
+       1,   109,   109,   109,   217,   111,   255,   109,    39,   111,
+       0,     1,   283,   119,   184,   185,   246,   185,    32,     0,
+     131,    39,     0,  1441,    72,   296,   297,    64,    44,    45,
+     200,    32,   109,    39,   111,    83,    84,   308,   208,  1142,
+     208,   680,    32,    39,   184,   184,   409,   217,   495,   812,
+     220,    32,   220,   744,    32,   264,   110,   227,   271,   264,
+    1062,   264,   116,    64,   109,   278,    67,   613,   744,   501,
+     513,   617,   242,   344,   405,   518,   246,    67,   521,    11,
+     250,   251,   250,   184,   132,   341,   131,   511,   520,   405,
+     744,   109,   638,   111,   264,   265,   642,   265,     0,   115,
+     109,   271,   111,   109,   109,   111,   851,    45,   278,   380,
+     119,   851,   839,   109,   370,   111,   395,    82,   489,   110,
+     718,   819,   251,   293,   455,   250,   117,   890,   611,    85,
+      32,  1009,   575,   250,   347,   839,   839,  1290,  1291,   455,
+      45,    43,    82,    45,   423,  1257,    44,    45,   839,   112,
+     429,   364,   117,   839,   586,   368,   487,   113,   328,    61,
+     328,   114,    64,   839,   293,    67,   116,    82,   417,   109,
+      96,   487,   110,  1304,     3,   112,   815,   347,   348,   116,
+      44,    45,  1071,   220,     3,   839,   825,   489,   437,   116,
+    1241,   597,    72,   841,   364,   110,   445,   123,   368,    82,
+      72,   840,   117,    83,    84,   110,    72,   145,     0,   379,
+    1226,    83,    84,   250,   691,   978,   114,    83,    84,   220,
+     960,   644,   645,   978,  1226,   395,   109,    96,   129,   600,
+     131,   111,   959,     0,   640,   405,   250,   405,  1526,   662,
+    1291,   255,   109,   513,   146,   515,  1009,   119,   518,   250,
+     114,   521,   676,   423,   123,   959,   959,   159,   629,   429,
+     250,   431,  1415,   634,  1526,  1553,   132,  1496,    72,   250,
+     208,  1021,   250,  1502,   255,   131,   532,  1407,  1408,    83,
+      84,   116,   184,   185,  1546,   455,   557,   558,   559,   112,
+     460,  1553,   109,   116,  1523,   465,  1059,   132,   116,  1528,
+     238,   110,  1304,   208,   474,   471,   208,   111,   117,   479,
+     109,   110,   349,   736,   132,   115,   116,   487,   220,   487,
+     109,   491,   131,   491,    80,   495,   697,   873,   498,   600,
+     500,   131,   270,  1464,   239,   657,   938,   758,   762,   109,
+    1471,   643,   644,   645,   946,   474,  1141,   698,   250,   968,
+     520,   698,  1004,   698,   928,   111,   109,   113,   666,   297,
+     662,   117,   264,   109,  1415,   270,   698,   537,   851,   700,
+     540,  1134,   542,   543,   491,   109,  1116,   698,   116,  1134,
+     116,   698,  1030,  1031,   700,   664,    72,   110,   698,   294,
+     992,   520,   297,  1524,   132,   697,   132,    83,    84,   110,
+    1039,  1040,   773,   417,   851,   828,   344,   110,   537,  1423,
+     112,   540,   110,   542,   543,  1304,   116,   630,   116,   965,
+     590,    30,   110,   437,   830,   111,   328,   597,   834,  1192,
+    1193,   445,   132,   646,   736,   110,   417,  1192,  1193,   609,
+     696,   611,   691,   480,    90,    91,   348,   119,   661,   643,
+     644,   645,   124,   125,   491,   109,   437,   111,  1097,  1098,
+     630,   590,  1464,   734,   445,    80,  1132,   116,   662,  1471,
+    1136,   773,    81,    82,    72,   112,   646,   491,    76,   116,
+     126,   127,   652,   132,   733,    83,    84,   425,   426,   116,
+     491,   661,  1381,   663,   664,   665,   111,   110,   113,   116,
+     110,   491,   117,   405,  1102,   132,   116,  1521,   489,   780,
+     491,   109,  1526,   491,   680,   132,   772,   964,   924,   116,
+     115,   119,  1524,   109,   116,   888,   828,   109,   698,   111,
+     700,   116,  1546,   109,   663,   132,   665,   119,   116,  1553,
+     132,   109,   736,   713,   116,   758,   909,   132,   453,   719,
+      64,   456,   110,   455,   132,    68,   827,   462,   116,    72,
+     132,   731,    75,   501,    77,    72,    10,    11,    12,    13,
+      14,    84,   894,   970,   744,   745,    83,    84,   110,  1468,
+      72,  1470,   520,   109,   116,   111,   132,   116,   758,   491,
+       3,    83,    84,   495,   631,    39,   112,    10,    11,    12,
+      13,    14,   731,   132,   111,   110,   110,   938,   513,   109,
+     515,   116,   116,   518,   112,   946,   521,   109,   116,   110,
+     598,   132,   938,    67,   112,   116,    39,  1320,   116,   110,
+     946,   110,  1271,   242,   828,   116,  1525,   116,   109,  1402,
+    1279,  1280,  1281,   109,    45,   111,   110,  1402,   586,   815,
+    1021,   110,   116,   112,    67,   110,  1419,   116,   114,   825,
+      61,   116,   600,    64,  1419,   110,    67,  1530,   109,   839,
+     111,   116,   131,   132,   840,  1530,     1,   691,    72,  1530,
+    1034,   851,    76,    72,   114,    74,    75,   724,  1327,    83,
+      84,   629,    64,    72,    83,    84,   634,  1103,   211,   132,
+     110,   738,   121,   122,    83,    84,   116,   609,  1132,   611,
+     691,   132,  1136,  1137,   114,   109,   697,   111,   109,   733,
+      45,   109,    72,   111,   894,   119,    76,    88,    89,  1492,
+    1493,   901,   902,    83,    84,  1057,   110,  1492,  1493,    82,
+    1042,   110,   116,   110,   116,   146,   109,   116,   111,   116,
+    1021,   110,   733,   109,   924,   110,   109,   116,   159,   109,
+     112,   116,  1205,  1206,   109,  1208,   111,    82,   938,   119,
+     379,  1214,   120,   902,  1217,   109,   946,   111,   129,   104,
+     564,   565,   566,   567,   185,   110,   109,   159,   111,   128,
+    1161,  1062,   773,    94,   964,   832,   698,    72,   700,    74,
+      75,    64,    92,    93,    85,    86,    87,   208,    83,    84,
+     115,   116,   969,   718,   984,   109,   110,   111,    81,   220,
+     145,   116,   117,   993,   109,   110,   111,  1251,   109,   154,
+     111,  1001,   113,   114,  1004,   703,  1006,   705,   351,   114,
+     353,   111,   744,   745,   131,  1124,   110,   111,   220,    58,
+      59,   460,   109,   116,   109,   984,   465,   835,   112,  1161,
+     109,   110,   111,   115,   116,   902,   109,   110,   111,   109,
+    1241,   112,  1001,  1039,  1040,  1004,   110,  1006,   110,   204,
+      58,    59,    60,   208,   110,  1055,   258,   110,   902,   498,
+     262,   500,   116,   117,   110,  1065,   159,   110,  1068,  1069,
+    1070,   902,   112,  1505,   116,   117,    72,  1178,    74,    75,
+      76,   111,   902,   238,   239,  1339,   112,    83,    84,  1343,
+     131,   902,   116,  1093,   902,   114,  1055,   328,   441,    44,
+      45,  1097,  1098,   109,  1377,   112,  1065,   839,   110,  1068,
+    1069,  1070,   110,   109,    72,   270,    74,    75,   273,   851,
+    1263,  1264,  1265,  1555,  1124,    83,    84,   220,   112,     4,
+       5,     6,     7,     8,     9,  1221,   560,   561,   969,   294,
+     112,   112,   297,   562,   563,   568,   569,   349,   112,   969,
+     117,   109,     3,    29,   117,   117,   114,  1024,  1290,    10,
+      11,    12,    13,    14,    72,   258,    74,    75,    76,   262,
+     116,   110,   110,   114,   405,    83,    84,   112,    10,    11,
+      12,    13,    14,   117,   115,   110,   341,   115,    39,   344,
+     116,  1445,   115,   928,    69,  1062,    71,   109,   116,  1199,
+     110,   109,   970,   111,   110,   132,   938,    39,   363,   117,
+     110,   119,   367,   652,   946,   370,    67,  1204,  1062,   117,
+     110,  1221,    72,   110,    74,    75,  1226,   110,   430,   110,
+       3,  1062,   964,    83,    84,    67,   116,    10,    11,    12,
+      13,    14,  1062,  1239,     4,     5,     6,     7,     8,     9,
+     110,  1062,   110,  1021,  1062,   110,   349,   132,  1245,   115,
+      29,   111,   110,  1263,  1264,  1265,    39,  1226,   110,   110,
+     425,   426,   110,    33,   713,  1271,   110,   109,   480,   111,
+     719,   902,   110,  1279,  1280,  1281,   110,   119,    72,  1398,
+      74,    75,    76,   110,    67,   110,   131,   110,   453,    83,
+      84,   456,   112,   110,  1263,  1264,  1265,   462,   110,    69,
+     115,    71,   110,  1540,    85,    86,    87,   116,   112,   474,
+    1320,  1321,   112,   110,     4,     5,     6,     7,     8,     9,
+     110,  1327,   110,   471,   116,   116,  1203,   430,   109,   114,
+     111,   117,   113,   114,   499,   112,   501,   110,   503,  1530,
+    1161,  1338,   116,  1530,  1397,  1530,   110,   116,   513,  1226,
+     515,  1320,  1321,   518,   116,   520,   521,  1102,  1530,   110,
+    1531,   117,  1203,  1204,   112,  1375,   109,   532,  1378,  1530,
+     109,   109,  1226,  1530,  1204,  1531,   109,   480,   109,    69,
+    1530,    71,   112,   132,  1555,  1226,  1505,  1397,  1398,   115,
+     110,   603,   110,   110,   129,   114,  1226,  1407,  1408,  1555,
+      72,   115,    74,    75,  1245,  1226,  1375,   112,  1226,  1378,
+     132,    83,    84,  1423,   110,  1245,   116,   112,  1428,   631,
+    1241,   586,  1299,   116,   636,   112,    55,  1304,   110,   110,
+     110,    47,   597,   112,  1065,   600,  1446,   109,  1407,  1408,
+     110,   112,   114,   112,  1441,   894,   112,    53,  1458,   112,
+    1304,   112,   901,   115,  1423,   132,   132,   132,  1299,  1428,
+     110,   115,   117,  1304,   629,   132,   110,   132,   115,   634,
+     112,   112,     0,     1,  1304,   640,   105,  1446,   112,   108,
+     112,  1530,   112,  1304,   112,  1530,  1304,  1530,   112,  1458,
+      96,   112,   110,   110,   109,  1505,  1506,  1338,   112,   112,
+     603,   109,   109,    60,    32,  1515,   110,   110,  1338,   114,
+     132,  1521,   724,   112,   112,   117,  1526,    45,   110,   112,
+    1530,  1531,   110,  1531,    96,   154,   738,    96,   631,   109,
+     109,   696,   680,   636,  1544,   132,  1546,  1506,   115,    67,
+    1550,   112,   110,  1553,   993,  1555,  1515,  1555,   110,   110,
+     110,  1561,  1521,   718,    51,  1565,    53,  1526,   116,    56,
+      57,    58,    72,    60,    74,    75,    76,    42,    72,   117,
+      74,    75,    76,    83,    84,  1544,   104,  1546,    75,    83,
+      84,  1550,   132,   748,  1553,   132,   192,  1464,   217,   110,
+      87,    88,  1561,   110,  1471,  1226,  1565,    96,    96,   109,
+    1441,    72,   132,    74,    75,    76,   132,   772,   110,   215,
+    1464,  1441,    83,    84,   110,   110,   117,  1471,   146,   225,
+     832,   724,   110,  1464,   132,   115,   154,   155,   112,   112,
+    1471,   109,   132,   115,  1464,   738,   115,   110,   109,   132,
+     111,  1471,   271,  1464,  1093,   110,  1464,  1524,   119,   278,
+    1471,   132,    72,  1471,    74,    75,    76,   185,   110,   110,
+    1077,   570,   573,    83,    84,   830,   571,   815,   572,   834,
+    1524,   574,   200,  1226,    64,   203,   204,   825,  1493,  1565,
+     208,  1383,  1343,  1524,    74,  1137,  1314,  1471,   294,   109,
+    1321,   111,   840,  1093,  1524,   453,   453,   946,   705,   119,
+     465,   229,   948,  1524,   993,   233,  1524,   235,   590,   748,
+     894,    10,    11,    12,    13,    14,   244,   758,   347,   658,
+    1245,   966,   250,   491,   578,   578,   116,   255,  1473,   832,
+    1475,   578,    -1,    -1,    -1,   364,    -1,   265,    -1,   368,
+      39,    -1,    -1,    -1,  1375,   273,    -1,  1378,    -1,    -1,
+    1199,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   924,
+      -1,    -1,  1540,   928,    -1,  1510,    -1,  1512,    67,   159,
+      -1,    -1,    -1,    72,    -1,    74,    75,    76,    72,    -1,
+      74,    75,    76,    -1,    83,    84,     0,    -1,  1530,    83,
+      84,    -1,  1423,    -1,    -1,    -1,    72,  1428,    74,    75,
+      76,    -1,   431,   968,   969,   970,    -1,    83,    84,    -1,
+     109,    -1,  1024,   341,    -1,   109,   344,   111,    32,    -1,
+     119,    -1,   350,    -1,    -1,   119,    -1,  1458,    -1,    -1,
+     220,    -1,    -1,   109,    -1,   363,   442,    -1,    -1,   367,
+      -1,    -1,   370,   119,    -1,    -1,    -1,   344,   345,    -1,
+      -1,    -1,    -1,    67,    -1,    -1,  1021,    -1,    -1,   356,
+     357,    10,    11,    12,    13,    14,    -1,    -1,   258,    -1,
+     476,    -1,   262,    72,    -1,    74,    75,    76,    -1,    -1,
+      -1,    -1,    -1,    -1,    83,    84,    -1,    -1,   278,   417,
+      39,  1039,  1040,    -1,    -1,    -1,    26,    27,    28,    -1,
+      -1,    -1,    -1,    -1,   432,    -1,    -1,   513,    -1,   437,
+     109,    -1,   518,  1544,    -1,   521,    -1,   445,    67,  1550,
+     119,  1024,    10,    11,    12,    13,    14,    -1,    -1,    -1,
+    1561,    -1,    -1,    -1,  1565,    -1,    -1,  1102,  1103,    -1,
+      -1,   155,    -1,   471,    -1,    -1,   474,    -1,    -1,  1097,
+    1098,    39,    -1,    -1,    10,    11,    12,    13,    14,   349,
+     109,   489,   111,   491,    -1,    -1,    -1,    97,   597,    99,
+     119,   499,    -1,    -1,    -1,   503,    -1,    -1,    -1,    67,
+      -1,    -1,    -1,    39,    72,    -1,    74,    75,    76,    -1,
+      -1,  1203,    -1,    -1,   124,    83,    84,    -1,    -1,    -1,
+      -1,   630,    -1,    -1,   532,   533,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    -1,    -1,   229,    72,   646,    74,    75,
+      76,   109,    -1,   111,    -1,    -1,    -1,    83,    84,    -1,
+      -1,   119,   661,    -1,    -1,    -1,   250,    -1,    -1,    -1,
+     430,   255,    -1,    -1,    -1,    10,    11,    12,    13,    14,
+     180,   579,    -1,   109,    -1,   111,  1221,   447,   188,    -1,
+     190,   191,    -1,   119,    -1,   195,    -1,   197,   198,   597,
+     598,    -1,   600,   679,    39,    -1,    -1,    -1,    -1,    -1,
+    1245,    -1,   688,   611,    -1,    -1,   692,  1299,    -1,    -1,
+     480,  1239,    -1,    10,    11,    12,    13,    14,    -1,    -1,
+    1203,   629,    67,    -1,    -1,    -1,   634,    72,    -1,    74,
+      75,    76,   640,    -1,    -1,   643,   644,   645,    83,    84,
+      -1,    -1,    39,  1271,    -1,    -1,    -1,    -1,    -1,   758,
+      -1,  1279,  1280,  1281,   662,    -1,   350,   267,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
+      67,    -1,   680,    -1,   119,    72,    -1,    74,    75,    76,
+      -1,    -1,    -1,   691,    -1,    -1,    83,    84,   696,   697,
+      -1,    -1,   700,  1338,    -1,    -1,    -1,    -1,    -1,  1327,
+      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,    -1,    -1,  1299,    -1,    -1,    -1,
+      -1,    -1,   119,   417,    -1,   733,    -1,    -1,   736,    -1,
+      -1,    39,    -1,   603,    -1,    -1,    -1,   745,   432,    -1,
+     748,    -1,    -1,   437,    -1,    -1,    -1,    -1,   725,    -1,
+     727,   445,    -1,    -1,    -1,    -1,    -1,   734,   735,    67,
+      -1,   631,   739,    -1,   772,   773,   636,    -1,    -1,    -1,
+     778,    -1,    -1,    -1,   751,    -1,    -1,   471,    -1,   756,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+      -1,    -1,    -1,    -1,    -1,   489,  1441,   491,    -1,    -1,
+      -1,   109,    -1,   111,    -1,   782,    -1,   815,    -1,    -1,
+      -1,   119,    -1,    -1,   131,   924,    -1,   825,    -1,    -1,
+     828,    -1,   830,    -1,    -1,   833,   834,   835,  1473,    -1,
+    1475,    -1,   840,    -1,    -1,    -1,    -1,    -1,    -1,   533,
+     926,    -1,   850,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     827,    -1,    -1,    -1,   724,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1510,    -1,  1512,   738,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,   758,    -1,
+      30,    31,    32,    -1,   902,  1540,    -1,    -1,    -1,    39,
+      -1,    -1,    -1,    -1,   598,    -1,    -1,   884,   885,   886,
+     887,    -1,   889,    -1,    -1,    -1,   924,    -1,    10,    11,
+      12,    13,    14,    -1,    -1,    -1,     0,    67,   905,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
+      -1,    -1,   919,    83,    84,    -1,    -1,    39,    -1,   643,
+     644,   645,   960,    -1,    -1,    -1,    -1,    -1,    32,    -1,
+     968,   969,   832,    -1,    -1,    -1,    -1,    -1,   662,   109,
+      -1,   111,   582,   583,    -1,    67,    -1,    -1,   986,   119,
+      72,   958,    -1,    -1,    76,    -1,   680,  1073,    -1,    -1,
+      -1,    83,    84,    67,    -1,    -1,    -1,   691,    -1,    -1,
+      -1,    -1,   612,   697,    -1,   615,   616,    -1,   618,    -1,
+     620,   621,    -1,  1021,    -1,   625,   626,   109,    -1,    -1,
+      -1,   998,    -1,    -1,    -1,    -1,  1034,   119,  1005,    -1,
+      -1,  1039,  1040,  1010,  1042,  1043,    -1,    -1,  1015,   733,
+    1017,    -1,   736,    -1,  1021,  1022,  1023,    -1,    -1,  1026,
+      -1,    -1,    -1,    -1,  1062,    -1,    -1,    -1,  1035,    -1,
+      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1053,  1054,    -1,   773,
+      -1,   155,    -1,    -1,    -1,     0,    -1,    -1,    -1,  1097,
+    1098,    39,    -1,    -1,   704,  1103,    -1,    -1,    -1,   709,
+     710,    -1,    -1,  1080,    -1,   715,  1083,    -1,    -1,    -1,
+      -1,    -1,  1221,    -1,    -1,    -1,    -1,    32,    -1,    67,
+      -1,   815,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+      -1,   825,    -1,    -1,   828,    83,    84,    -1,    -1,   833,
+      -1,   835,    -1,    -1,  1121,    -1,   840,    -1,    -1,    -1,
+    1127,  1128,    67,  1161,  1024,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,  1139,    -1,    -1,    -1,    -1,  1144,    -1,    -1,
+    1147,   119,  1149,    -1,    -1,  1152,   250,    -1,    -1,    -1,
+      -1,   255,   188,    -1,    -1,    -1,    -1,    -1,  1165,   195,
+      -1,    -1,    -1,    -1,    -1,    -1,  1204,    -1,    -1,    -1,
+      -1,  1178,     0,  1180,  1181,  1182,  1183,    -1,   902,    -1,
+      -1,    -1,    -1,  1221,    -1,    -1,    -1,    -1,  1226,  1196,
+      -1,  1198,    -1,    -1,    -1,  1202,    -1,  1313,    -1,    -1,
+      -1,  1239,    -1,  1241,    32,     0,     1,  1245,    -1,    -1,
+     155,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1231,  1232,    -1,    -1,    -1,    -1,
+      -1,   267,    -1,  1271,    -1,    -1,    -1,    32,    -1,    67,
+      -1,  1279,  1280,  1281,    -1,    -1,   350,    -1,    -1,    -1,
+      -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,  1397,    -1,
+      -1,    -1,   986,    -1,    -1,    -1,  1304,    -1,    -1,    64,
+      -1,    -1,    67,    -1,    -1,  1282,  1283,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1292,    -1,   323,    -1,  1327,
+      -1,    -1,    -1,    -1,    -1,   331,    -1,    -1,   334,    -1,
+    1338,    -1,    -1,  1203,    -1,   250,    -1,    -1,    -1,    -1,
+     255,    -1,    -1,   417,    -1,  1039,  1040,    -1,  1042,  1043,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,   432,    -1,
+      -1,    -1,    -1,   437,    -1,    -1,    -1,  1344,  1062,    -1,
+      -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1356,
+      -1,  1358,  1359,  1360,    -1,    -1,  1472,    -1,  1474,    -1,
+     155,   397,    -1,  1370,    -1,   401,    -1,   471,    -1,    -1,
+      -1,    -1,  1379,  1097,  1098,    -1,    -1,  1415,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   489,    -1,   491,  1395,    -1,
+      -1,    -1,    -1,  1509,    -1,  1511,    -1,    -1,    -1,  1299,
+      -1,    -1,    -1,  1441,    -1,   350,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   250,    -1,    -1,   220,  1464,   255,    -1,   533,
+      -1,    -1,    -1,  1471,    -1,    -1,    -1,  1161,  1554,    -1,
+    1556,    -1,    -1,    -1,  1451,  1452,    -1,    -1,    -1,    -1,
+     486,    -1,    -1,  1569,  1570,   250,    -1,  1464,    -1,  1099,
+      -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1204,    -1,    -1,    -1,    -1,    -1,  1524,   432,    -1,    -1,
+      -1,    -1,   437,  1531,   598,    -1,    -1,  1504,    -1,    -1,
+     445,  1508,  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,
+      -1,    -1,   350,    -1,    -1,    -1,   471,    -1,    -1,    -1,
+    1537,    -1,  1539,    -1,    -1,    -1,    -1,    -1,    -1,   643,
+     644,   645,   578,   579,   489,    -1,   491,  1271,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1279,  1280,  1281,   662,    -1,
+    1567,  1568,    -1,    -1,    -1,    -1,  1290,  1291,  1575,  1576,
+      -1,    -1,    -1,    -1,    -1,    -1,   680,    -1,    -1,    -1,
+    1304,    -1,    -1,  1223,    -1,    -1,    -1,   691,   533,   417,
+      -1,    -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1327,   432,    -1,    -1,    -1,    -1,   437,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   445,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   733,
+      -1,   667,   736,    -1,    -1,   671,    -1,   432,    -1,    -1,
+      -1,    -1,    -1,   471,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   598,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   489,    -1,   491,    -1,    -1,    -1,    -1,   704,   773,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,  1415,    -1,    -1,    -1,    -1,   491,    -1,   643,   644,
+     645,    -1,    39,    -1,    -1,   533,    -1,    -1,    -1,    -1,
+      -1,   815,    -1,    -1,    -1,    -1,    -1,   662,    -1,    -1,
+      -1,   825,    -1,    -1,   828,    -1,    -1,    -1,    -1,   833,
+      67,   835,    -1,    -1,    -1,   680,   840,    -1,   533,    -1,
+    1464,    -1,    -1,    -1,    -1,    -1,   691,  1471,    -1,    -1,
+      -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     598,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   819,    -1,    -1,    -1,    -1,   733,    -1,
+      -1,   736,    -1,    -1,    -1,    26,    27,    28,   902,    -1,
+    1524,    -1,    -1,   598,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   643,   644,   645,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   773,    -1,
+      -1,    -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   643,   644,
+     645,    -1,   680,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   691,    -1,    -1,    97,   662,    99,   697,
+     815,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     825,    -1,   986,   828,    -1,    -1,    -1,    -1,   833,    -1,
+     835,    -1,    -1,    -1,    -1,   840,   932,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   733,    -1,    -1,   736,     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,  1039,  1040,    -1,  1042,  1043,
+      -1,   736,    -1,    -1,    39,   773,    -1,    -1,    -1,   180,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   902,  1062,   190,
+     191,    -1,    -1,    -1,   195,    -1,   197,   198,    -1,    -1,
+      -1,    -1,    67,    -1,    69,  1011,    71,    72,    -1,    74,
+      75,    76,    -1,    -1,    -1,    -1,    -1,   815,    83,    84,
+      -1,  1027,    -1,  1097,  1098,    -1,    -1,   825,    -1,    -1,
+     828,    -1,    -1,    -1,    -1,   833,    -1,   835,    -1,    -1,
+      -1,    -1,   840,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,   828,    30,    31,    32,    -1,    -1,    -1,
+     835,   986,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1161,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1104,    -1,
+      -1,    67,    -1,    -1,   902,    -1,    72,    -1,    74,    75,
+      76,    -1,    78,    -1,    -1,    -1,    -1,    83,    84,    -1,
+      -1,    -1,    -1,    -1,  1039,  1040,    -1,  1042,  1043,    -1,
+    1204,    -1,    -1,    -1,    -1,    -1,    -1,   902,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,    -1,  1062,    -1,    -1,
+      -1,    -1,  1226,   119,    -1,    45,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,
+      -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1097,  1098,    -1,    -1,    -1,    -1,   986,    -1,
+      37,    38,    -1,    40,    -1,    -1,    -1,  1271,    -1,    -1,
+      -1,    -1,    -1,    -1,   969,  1279,  1280,  1281,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1290,  1291,    -1,    66,
+     110,   986,    -1,    -1,    -1,    72,   116,    -1,    -1,    76,
+    1304,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,  1039,  1040,    -1,  1042,  1043,  1161,    94,    -1,    -1,
+      -1,    -1,    -1,  1327,    -1,   145,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,  1062,   155,    -1,    -1,    -1,   159,
+      -1,   118,   119,   120,   121,   122,   123,  1042,  1043,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1204,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1062,    -1,  1097,
+    1098,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1226,    -1,    -1,    -1,    -1,    -1,    -1,   208,    -1,
+      -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,    -1,
+     220,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1415,    -1,    -1,    -1,    -1,    -1,    -1,   238,   239,
+      -1,    -1,    -1,    -1,    -1,    -1,  1271,    -1,    -1,    -1,
+      -1,    -1,    -1,  1161,  1279,  1280,  1281,    -1,    -1,    -1,
+      -1,    -1,   262,    -1,    -1,  1290,  1291,    -1,    -1,    -1,
+     270,   582,   583,    -1,    -1,    -1,    -1,    -1,    -1,  1304,
+    1464,    -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,    -1,
+      -1,    -1,    -1,    -1,   294,    -1,  1204,   297,    -1,    -1,
+      -1,   612,  1327,    -1,   615,   616,    -1,   618,    -1,   620,
+     621,    -1,    -1,    -1,   625,   626,    -1,    -1,  1226,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1203,  1204,
+      -1,  1239,    -1,  1241,    -1,    -1,    -1,    -1,    -1,    -1,
+    1524,    -1,    -1,    -1,   344,    -1,    -1,    -1,    -1,   349,
+      -1,  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1271,    -1,    -1,    64,    -1,    -1,    -1,
+    1245,  1279,  1280,  1281,    -1,    -1,    74,    -1,    76,    -1,
+      78,    -1,  1290,  1291,    -1,    -1,    -1,    85,    -1,    -1,
+    1415,    -1,    -1,    -1,    -1,    -1,  1304,    -1,   709,   710,
+      -1,    -1,    -1,    -1,   715,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1290,  1291,    -1,   116,  1327,
+     118,   119,   120,    -1,  1299,   425,   426,    -1,    -1,  1304,
+      -1,    -1,   432,    -1,    -1,    -1,    -1,    -1,    -1,  1464,
+      -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,
+      -1,    -1,    -1,   453,    -1,    -1,   456,    -1,    -1,    -1,
+      -1,   159,   462,  1338,     3,     4,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    75,     0,    25,    26,
-      27,     0,   453,     0,   351,   351,   946,    30,     0,     0,
-     109,     0,     0,     0,     0,     0,     0,     0,    77,     0,
-       0,     0,  1236,     0,     0,     0,     0,     0,     0,     0,
-       0,   353,   353,   354,     0,    33,     0,     0,    77,     0,
-      36,     0,    37,    38,    39,    84,    77,     0,     0,     0,
-       0,    40,    41,     0,     0,     0,     0,     0,     0,     0,
-     361,     0,     0,     0,     0,    84,   346,     0,   351,     0,
-       0,     0,   354,    84,     0,     0,     0,    42,     0,   155,
-       0,     0,     0,     0,     0,     0,     0,    44,     0,     0,
-     354,     0,    77,     0,     0,   353,     0,     0,     0,   361,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   220,     0,     0,     0,     0,     0,   361,     0,    84,
-       0,     0,     0,     0,     0,    54,     0,     0,     0,     0,
-       0,     0,     0,    72,   354,     0,     0,     0,   221,     0,
-       0,     0,     0,     0,     0,     0,   351,     0,   351,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      75,   361,     0,     0,     0,     0,     0,   346,     0,     0,
-       0,     0,     0,   353,     0,   353,     0,     0,   351,     0,
-       0,     0,     0,     0,     0,     0,   351,   351,   351,     0,
-       0,     0,     0,     0,     0,     0,     0,   351,   351,   354,
-       0,     0,     0,     0,     0,   353,     0,     0,     0,     0,
-       0,    72,     0,   353,   353,   353,     0,     0,     0,     0,
-       0,     0,     0,     0,   353,   353,   361,     0,     0,     0,
-       0,     0,   346,     0,   351,     0,     0,     0,    75,     0,
-       0,     0,     0,     0,   354,   354,   354,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   353,     0,   354,     0,     0,     0,     0,     0,   124,
-       0,   361,   361,   361,     0,     0,     0,   346,   346,   346,
-       0,   354,     0,     0,     0,     0,     0,     0,     0,     0,
-     361,     0,    77,     0,     0,     0,   346,     0,   354,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   361,  1033,
-       0,     0,     8,     9,    10,    11,    12,     0,     0,    84,
-       0,     0,   351,     0,     0,   361,     0,     0,     0,     0,
-       0,     0,     0,     0,    77,     0,     0,   354,   280,   281,
-      30,   282,     0,     0,     0,     0,     0,     0,     0,   353,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    84,     0,     0,   361,     0,     0,   283,    33,     0,
-     346,    72,     0,   284,   354,     0,     0,   285,    72,     0,
-     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
-       0,     0,     0,   124,     0,   292,     0,     0,    75,     0,
-       0,   361,     0,     0,     0,    75,     0,     0,     0,     0,
-     293,     0,   377,     0,     0,     0,   354,     0,     0,   295,
-     826,   297,   298,   299,   300,     0,   354,     0,     0,   354,
-       0,    72,     0,     0,   222,     0,   354,     0,     0,     0,
-       0,   354,     0,   361,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   361,     0,     0,   361,     0,    75,     0,
-       0,   223,   346,   361,     0,     0,     0,     0,   361,   346,
-       0,     0,     0,     0,     0,  -516,     0,     0,     1,     2,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,   489,
+      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,  1524,
+      39,   501,    -1,    -1,    -1,    -1,    -1,  1415,    -1,    -1,
+      -1,    -1,    44,   513,    -1,   515,    -1,    -1,   518,    -1,
+     520,   521,   220,    -1,   222,   223,   224,    -1,    67,    -1,
+      69,    -1,    71,   533,    -1,    74,    75,    -1,    -1,    -1,
+    1415,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1464,    -1,    90,    -1,
+     258,    -1,    -1,  1471,   262,    -1,  1441,    -1,   100,    -1,
+      -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,    -1,
+     278,    -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,  1464,
+      -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,   598,    -1,
+     600,    -1,    -1,   603,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1524,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   156,    -1,    -1,    -1,    -1,   629,
+     328,    -1,    -1,    -1,   634,    -1,    -1,    -1,   170,    -1,
+      -1,    -1,    -1,   643,   644,   645,    -1,    -1,    -1,  1524,
+      -1,   349,    -1,    -1,    -1,    -1,   354,   355,    -1,    -1,
+      -1,   193,   662,    -1,   362,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   207,    -1,    -1,    -1,    -1,
+      -1,    -1,     7,    -1,   216,    10,    11,    12,    13,    14,
+      -1,    -1,    -1,    -1,   226,    -1,    -1,   697,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   405,    -1,    -1,
+      -1,    -1,    37,    38,    39,    40,    -1,    -1,   718,   251,
+      -1,    -1,    -1,    -1,   256,   423,    -1,    -1,    -1,    -1,
+     428,    -1,   430,    -1,    -1,    -1,   736,   269,   738,    -1,
+      -1,    66,    67,   275,    -1,   277,    -1,    72,    -1,   447,
+      -1,    76,   450,   451,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,   295,    -1,    -1,    -1,    -1,   466,    94,
+      -1,    -1,    -1,   773,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   480,    -1,   109,    -1,   111,    -1,  1099,   487,
+      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   338,    -1,    -1,    -1,
+      -1,   343,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   828,    -1,
+      -1,    -1,   832,    -1,    -1,   835,    -1,    -1,    -1,   371,
+      -1,    -1,    -1,   375,   376,    -1,   378,    -1,    -1,    -1,
+      -1,    -1,    -1,   385,   386,    -1,   388,   389,    -1,   391,
+      -1,   393,    -1,    -1,    -1,    -1,    -1,     7,    -1,    -1,
+      10,    11,    12,    13,    14,    -1,    -1,    -1,   410,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   418,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    39,
+      40,    -1,    -1,    -1,    -1,   603,    -1,    -1,    -1,    -1,
+      -1,   443,  1223,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   454,    -1,    -1,    -1,    66,    67,   928,    -1,
+      -1,    -1,    72,   631,    -1,    -1,    76,    -1,   636,    79,
+      80,    81,    82,    83,    84,   477,    86,    87,    -1,    -1,
+      -1,   483,    -1,    -1,    94,    -1,   488,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+     970,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
+     120,   121,   122,   123,    -1,    -1,   986,    -1,    -1,    -1,
+      -1,    -1,    -1,   525,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   541,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1021,    -1,    -1,    -1,    -1,   724,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     738,    -1,  1042,  1043,    -1,    -1,   578,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   587,    -1,    -1,    -1,    -1,
+     758,    -1,   594,    -1,    -1,    37,    38,   599,    40,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   610,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
+      72,    -1,  1102,    -1,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,   651,
+      -1,   819,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   832,    -1,    -1,   109,    -1,   111,
+      -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,
+     122,   123,    -1,   851,    -1,   687,    -1,    -1,    -1,    -1,
+      -1,  1161,    -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,  1203,    -1,    -1,    -1,    -1,    -1,    -1,
+     742,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     752,   753,    -1,    -1,    -1,    64,    -1,    -1,    67,    -1,
+      69,    -1,    71,    72,   766,    74,    75,    76,    -1,    -1,
+     938,  1241,   154,   155,    83,    84,    -1,    -1,    -1,    -1,
+      -1,   783,    -1,   785,    -1,    -1,    -1,   789,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   964,    -1,    -1,    -1,
+     109,    -1,   111,    -1,    -1,    -1,   188,    -1,    -1,    -1,
+     119,    -1,    -1,   195,    -1,    -1,    -1,    -1,    -1,    -1,
+    1290,  1291,    -1,    -1,   992,    -1,    -1,    -1,    -1,  1299,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,   855,    -1,    -1,  1024,    -1,    -1,    39,
+     862,    -1,    -1,    -1,    -1,    -1,    -1,  1035,    -1,    -1,
+      -1,    -1,    -1,   875,    -1,   877,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   267,    -1,    67,    -1,   891,
+      -1,    -1,    72,    -1,    74,    75,   898,    -1,    -1,    -1,
+      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,   910,    -1,
+      -1,   913,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   931,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+      -1,   323,    -1,    -1,    -1,  1415,    -1,    -1,  1116,   331,
+     332,    -1,   334,   335,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   344,    -1,    -1,    -1,   348,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   367,    -1,    -1,   370,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1473,    -1,  1475,    -1,    -1,    -1,    -1,
+      37,    38,    -1,    40,    -1,   397,    -1,    -1,  1020,   401,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1203,    -1,    -1,    -1,    66,
+    1510,   145,  1512,    -1,    -1,    72,    -1,    74,    75,    76,
+     432,   155,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,   167,   168,    -1,    -1,    94,    -1,    -1,
+    1540,    -1,    -1,   455,  1076,    -1,    -1,    -1,    -1,    -1,
+      -1,  1083,   109,    -1,   111,    -1,   113,   114,    -1,    -1,
+      -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   486,    -1,    -1,   489,    -1,    -1,
+    1112,    -1,    -1,    -1,    -1,  1117,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1125,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1299,    -1,    -1,   238,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   529,    -1,    -1,
+     532,   533,    -1,    -1,  1156,    -1,    -1,    -1,    -1,   263,
+      -1,    -1,    -1,    -1,    -1,    -1,  1168,    -1,    -1,  1171,
+      -1,  1173,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1187,  1188,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   578,   579,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1209,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   597,   598,    -1,   600,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   609,    -1,   611,
+     612,    -1,    -1,    -1,  1236,    -1,   618,    -1,    -1,   281,
+      -1,   283,   284,    -1,    -1,    -1,   628,   629,    -1,   291,
+     292,    -1,   634,    -1,   296,   297,    -1,    -1,    -1,    -1,
+      -1,   643,   644,   645,    -1,    -1,   308,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   379,    -1,    -1,    -1,    -1,
+     662,    -1,    -1,    -1,    -1,   667,   668,    -1,    -1,   671,
+     672,    -1,    -1,    -1,    -1,    -1,   678,    -1,    -1,    -1,
+      -1,    -1,   344,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   696,   697,   698,    -1,   700,    -1,
+      -1,    -1,   704,    -1,    -1,    -1,    -1,    -1,    -1,    37,
+      38,  1333,    40,  1335,    -1,    -1,    -1,    -1,   380,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1348,    -1,  1350,    -1,
+      -1,    -1,    -1,    -1,   736,   737,    -1,    -1,    66,    -1,
+      -1,    -1,    -1,    -1,    72,    -1,  1368,    -1,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,   481,    86,    87,
+      -1,    -1,  1384,  1385,    -1,    -1,    94,  1555,    -1,    -1,
+     772,   773,    -1,    -1,  1396,   777,   778,  1399,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,
+     118,   119,   120,   121,   122,   123,   520,    -1,    -1,  1421,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1430,   533,
+      -1,  1433,    -1,  1435,  1436,  1437,   540,   819,    -1,   543,
+      -1,    -1,    -1,    -1,    -1,    -1,   828,    -1,    -1,    -1,
+     554,   555,   834,   835,    -1,    -1,    -1,   839,    -1,   841,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   851,
+      -1,    -1,   576,    -1,    -1,  1477,    -1,  1479,    -1,    -1,
+    1482,    -1,   586,    -1,    -1,    -1,    -1,    -1,    -1,   593,
+      -1,    -1,    -1,    -1,   598,  1497,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   557,   558,   559,   560,   561,
+     562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
+     572,   573,   574,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   924,    -1,   648,    -1,    -1,    -1,    -1,    -1,
+     932,    -1,    -1,   657,    -1,    -1,   938,    -1,   600,    -1,
+      -1,    -1,    -1,    -1,   946,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   959,   960,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,    -1,    -1,
+     992,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,  1011,
+    1012,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,  1021,
+      39,    40,    -1,    -1,    -1,  1027,  1028,    -1,  1030,  1031,
+    1032,    -1,    -1,    -1,    -1,    -1,    -1,   699,    -1,    -1,
+    1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,    67,   773,
+      -1,   775,    -1,    -1,    -1,    74,    75,   781,    -1,   721,
+      -1,    -1,    -1,    -1,   788,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   734,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,
+     119,  1103,  1104,  1105,    -1,    -1,    -1,    -1,   832,   833,
+      -1,   835,    -1,    -1,  1116,    -1,    -1,    -1,   780,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     812,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1161,
+      -1,    -1,    -1,    -1,    -1,   827,   890,    -1,    -1,    -1,
+     894,    -1,    -1,     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,  1221,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,  1241,
+      67,    -1,    69,    -1,    71,    72,   970,    74,    75,    76,
+      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
+      -1,    -1,   986,   987,    -1,    -1,    -1,    -1,    -1,   993,
+      -1,    -1,    -1,    -1,    -1,   999,    -1,    -1,  1002,    -1,
+    1004,    -1,   109,    -1,   111,    -1,    -1,    -1,  1290,  1291,
+      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1024,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1035,    -1,    -1,    -1,    -1,   978,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1057,    -1,  1059,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1009,    -1,    -1,
+    1074,  1075,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1021,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1095,    -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,
+    1062,    30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,
+      39,    40,    -1,  1415,    -1,    -1,    -1,    -1,  1142,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    64,    -1,  1161,    67,    -1,
+      69,    -1,    71,    72,    -1,    74,    75,    76,    -1,    -1,
+      -1,    -1,  1176,  1177,    83,    84,    -1,    -1,    -1,    -1,
+      -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,  1134,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,
+     119,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+      -1,    76,    -1,  1505,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,  1178,    -1,    -1,    94,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1530,  1531,
+    1192,  1193,    -1,  1257,   109,    -1,   111,    -1,    -1,    -1,
+      -1,   116,    -1,   118,   119,   120,   121,   122,   123,    -1,
+      -1,    -1,    -1,  1555,    -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,  1318,    43,  1320,    -1,    46,    47,
+      48,    49,    50,    51,    52,    53,    -1,    -1,    -1,    57,
+      -1,    -1,    -1,    61,    62,    -1,    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,    94,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
+     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
+     128,    -1,  1406,    -1,   132,    -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,     0,    77,    25,    26,    27,    28,     0,     0,
-      29,     0,     0,    30,    31,     0,     0,     0,     0,     8,
-       9,    10,    11,    12,     0,     8,     9,    10,    11,    12,
-      84,     0,     0,     0,     0,     0,    54,     0,    32,     0,
-       0,    33,   163,    34,     0,    35,    36,    30,    37,    38,
-      39,     0,     0,    30,     0,     0,     0,    40,    41,     0,
-       0,   216,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-      36,    33,     0,    42,    39,    43,    36,   354,     0,     0,
-      39,    40,    41,    44,     0,     0,     0,    40,    41,     0,
-       0,     0,     0,    54,     0,     0,     0,   163,     0,     0,
-       0,     0,     0,   270,   361,     0,     0,    42,     0,     0,
-     346,     0,     0,   743,     0,     0,     0,   145,     0,     0,
-       0,     0,     0,   744,     0,     0,     0,     0,     0,     0,
-     354,   354,   163,   354,   354,     0,     0,     0,     0,     0,
-       0,     0,   367,     0,     0,     0,   373,     0,     0,     0,
-       0,     0,     0,    77,     0,     0,     0,   361,   361,     0,
-     361,   361,     0,     0,     0,     0,   346,   346,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      84,     0,     0,     0,     0,     0,    54,     0,   354,   354,
-       0,     0,     0,     0,     0,   163,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   216,     0,     0,
-       0,     0,     0,     0,     0,   361,   361,     0,     0,     0,
-       0,   280,   281,     0,   282,   163,   460,     8,     9,    10,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      33,    -1,    -1,    36,    37,    38,    39,    40,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1402,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,
+      -1,    -1,    -1,    66,    67,    -1,    69,  1419,    71,    72,
+      -1,    74,    75,    76,  1488,    -1,    79,    80,    81,    82,
+      83,    84,    66,    86,    87,    -1,    -1,    -1,    72,    -1,
+      -1,    94,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,   109,    -1,   111,    -1,
+      94,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
+     123,    -1,    -1,    -1,    -1,   109,  1540,   111,    -1,   132,
+     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
+    1492,  1493,     3,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,   373,
-     283,     0,   354,     0,     0,    30,   284,   163,     0,     0,
-     285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
-     290,   291,     0,     0,     0,     0,     0,     0,   292,   361,
-       0,   460,     0,    33,   163,     0,     0,     0,     0,     0,
-     205,    38,     0,   512,     0,   222,     0,     0,     0,     0,
-       0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    77,     0,     0,
-       0,     0,   223,     0,     0,     0,     0,    54,    54,     0,
-     354,   605,   354,     0,     0,   269,   629,     0,     0,     0,
-       0,     0,     0,     0,    84,     0,     0,     0,     0,     0,
-      54,     0,     0,     0,     0,     0,     0,   361,     0,   361,
-       0,     0,   354,     0,     0,     0,     0,     0,     0,    54,
-     354,   354,   354,     0,     0,     0,     0,     0,     0,     0,
-       0,   354,   354,     0,     0,     0,     0,     0,     0,   361,
-       0,     0,     0,     0,     0,    77,     0,   361,   361,   361,
-       0,     0,     0,     0,     0,     0,     0,     0,   361,   361,
-       0,     0,   163,   163,   346,   346,     0,     0,   354,   367,
-       0,     0,    84,    54,     0,     0,     0,     0,    54,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     460,     0,     0,   460,     0,   361,     0,     0,     0,   460,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    54,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   740,     0,     0,     0,
-     209,     0,     0,     0,     0,     0,     0,     0,   163,     0,
-     229,     0,   233,     0,   235,     0,     0,     0,     0,     0,
-     460,   244,   460,     0,     0,   460,   354,   163,   460,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     367,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   209,   361,   233,   235,   244,     0,     0,   346,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    77,     0,   154,     0,     0,
-       0,     0,    77,     0,     0,    54,     0,     0,     0,     0,
-       0,     0,     0,   163,     0,   209,     0,     0,     0,     0,
-       0,     0,    84,     0,     0,   367,     0,   605,    54,    84,
-     836,     0,     0,     0,     0,    54,     0,     0,     0,     0,
-       0,     0,     0,   249,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   254,     0,    77,   605,     0,     0,     0,
-       0,   605,     0,     0,     0,     0,     0,     0,     0,     0,
-     367,   367,   367,     0,     0,     0,   209,     0,   233,   235,
-     244,     0,    84,     0,     0,     0,     0,     0,    54,   367,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,  -294,   154,
-      25,    26,    27,     0,   209,     0,     0,     0,   209,    30,
-       0,     0,     0,   384,   740,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   503,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   460,   416,    33,     0,     0,
-       0,     0,     0,     0,    37,    38,     0,     0,  -294,     0,
-     431,     0,     0,   367,     0,   960,     0,     0,     0,   436,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   444,
-       0,     0,     0,     0,   209,     0,     0,     0,     0,   642,
-       0,   337,   280,   281,     0,   282,     0,     0,     0,   109,
-     740,     0,     0,     0,   470,   209,     0,     0,     0,   480,
-     233,   235,     0,     0,     0,     0,     0,     0,   244,     0,
-       0,   283,   488,     0,     0,     0,     0,   284,   498,     0,
-     502,   285,     0,     0,   286,   287,   288,   289,    40,    41,
-       0,   290,   291,     0,     0,     0,     0,     0,   532,   292,
-       0,     0,     0,     0,     0,   367,     0,     0,     0,   629,
-       0,   209,   367,     0,   293,     0,   377,     0,     0,   378,
-       0,     0,     0,   295,   379,   297,   298,   299,   300,   209,
-       0,     0,     0,     0,   209,     0,   209,     0,     0,     0,
-       0,   592,     0,     0,     0,     0,   597,     0,     0,     0,
-       0,     0,     0,   209,     0,     0,   209,   209,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   209,     0,   643,     0,     0,     0,   644,   645,
-       0,   647,     0,     0,     0,     0,   209,     0,   659,   660,
-       0,   661,   662,   209,   663,     0,   664,     0,     0,     0,
-       0,     0,     0,  1176,     0,   460,     8,     9,    10,    11,
-      12,     0,     0,   592,     0,     0,     0,     0,     0,     0,
-       0,   679,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   280,   281,    30,   282,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   690,   163,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   696,     0,     0,
-       0,   283,    33,   367,     0,     0,     0,   284,     0,     0,
-       0,   285,     0,     0,   286,   287,   288,   289,    40,    41,
-     732,   290,   291,     0,     0,     0,   735,     0,     0,   292,
-       0,   470,     0,     0,     0,     0,     0,     0,   605,     0,
-       0,     0,     0,     0,   293,     0,   377,     0,     0,   209,
-       0,     0,     0,   295,  1177,   297,   298,   299,   300,   367,
-     367,     0,     0,     0,     0,     0,     0,     0,   772,     0,
-       0,     0,     0,     0,     0,     0,     0,   209,   513,     0,
-     515,   518,   209,     0,   787,     0,     0,     0,   521,   522,
-       0,     0,     0,   515,   515,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   515,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   280,   281,     0,   282,   460,
-       0,   814,     0,     0,     0,     0,     0,     0,     0,     0,
-     824,     0,     0,     0,     0,     0,     0,   827,     0,     0,
-       0,   515,   834,     0,   283,     0,     0,     0,     0,     0,
-     284,     0,     0,   849,   285,     0,     0,   286,   287,   288,
-     289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
-     209,     0,   292,     0,     0,     0,     0,   515,   740,     0,
-       0,     0,     0,     0,   209,     0,     0,   293,     0,   377,
-       0,     0,     0,     0,   889,   811,   295,   379,   297,   298,
-     299,   300,     0,     0,   503,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     216,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     834,     0,     0,     0,     0,     8,     9,    10,    11,    12,
+      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,    94,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    83,    84,    -1,    -1,   118,   119,   120,
+     121,   122,   123,     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,    -1,    66,    67,    -1,    69,    -1,
+      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    78,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
+     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
+      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    78,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
+     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
+     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
+     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
+     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
+     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
+     121,   122,   123,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,   119,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    33,    34,    35,    67,    -1,    69,
+      39,    71,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
+      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,  -294,     0,    25,    26,    27,     0,   740,     0,
-       0,     0,     0,    30,     0,   209,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   209,     0,
-       0,     0,     0,     0,     0,   249,     0,     0,     0,     0,
-       0,    33,     0,     0,     0,   967,   968,   209,    37,    38,
-       0,     0,  -294,     0,     0,     0,     0,   367,   367,   985,
-       0,     0,     0,     0,     0,     0,   216,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1000,     0,  1001,     0,
-       0,     0,  1005,   642,     0,   337,     0,     0,     0,     0,
-       0,     0,     0,   633,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   515,   515,   515,   515,   515,   515,
-     515,   515,   515,   515,   515,   515,   515,   515,   515,   515,
-     515,   515,     0,     0,     0,     0,     0,     0,     0,     0,
-     280,   281,     0,   282,   209,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   515,  1038,     0,
-       0,     0,     0,     0,     0,  1039,     0,     0,     0,   283,
-     209,     0,     0,     0,     0,   284,     0,     0,  1041,   285,
-    1042,     0,   286,   287,   288,   289,    40,    41,     0,   290,
-     291,     0,   367,     0,  1054,     0,     0,   292,   209,     0,
-       0,  1058,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   293,  1096,   377,     0,  1097,     0,     0,   780,
-       0,   295,   379,   297,   298,   299,   300,     0,     0,     0,
-     209,     0,     0,     0,   597,     0,     0,     0,     0,     0,
-       0,   209,     0,     0,     0,     0,     0,     0,     0,     0,
-     460,     0,   460,     0,     0,     0,   515,     0,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,  -294,     0,     0,   515,     0,
-       0,     0,     0,     0,     0,     0,    30,   460,     0,   460,
-       0,   515,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,  -294,
-       0,    25,    26,    27,    33,     0,     0,   163,     0,     0,
-      30,     0,   209,  1160,     0,  -294,     0,     0,     0,   340,
-     362,     0,     0,     0,     0,     0,     0,   515,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    33,     0,
-       0,     0,     0,    36,     0,   335,   336,    39,     0,  -294,
-       0,     0,     0,   412,    40,    41,     0,     0,     0,   515,
-     412,     0,     0,     0,     0,     0,     0,     0,     0,   532,
-       0,     0,     0,     0,   515,     0,  1225,     0,     0,     0,
-     642,     0,   337,     0,     0,     0,     0,     0,     0,     0,
-     633,   280,   281,     0,   282,     0,     0,     0,     0,   209,
-       0,     0,     0,     0,     0,  1238,     0,     0,     0,     0,
-    1240,     0,     0,     0,     0,     0,     0,     0,  1244,     0,
-     283,     0,     0,     0,     0,     0,   648,     0,   137,   138,
-     285,     0,   412,   286,   649,   288,   289,    40,    41,     0,
-     290,   291,     0,     0,     0,     0,     0,     0,   292,  1270,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1278,     0,   293,  1279,   650,  1280,   651,   378,     0,
-       0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
-    1289,  1290,     0,     0,     0,     0,     0,     0,   412,     0,
-       0,     0,     0,     0,     0,   209,   412,   588,     0,   412,
-     591,     0,  1303,     0,     0,     0,     0,     0,     0,   362,
-       0,     0,     0,   621,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   515,     0,     0,     0,  1326,
-     320,     0,   639,     0,     0,   340,     0,     0,     0,     0,
-     344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   380,   380,     0,     0,   515,     0,     0,     0,
-       0,     0,   412,     0,     0,     0,   412,     0,   515,     2,
-     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,   362,     0,     0,
-       0,     0,     0,    30,     0,     0,     0,     0,     0,   515,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     412,     0,     0,   320,     0,     0,  1396,     0,  1397,     0,
-       0,    33,     0,    34,     0,    35,     0,     0,    37,    38,
-       0,  1406,     0,  1407,     0,     0,     0,     0,   484,     0,
-       0,   412,     0,     0,   362,     0,     0,     0,     0,     0,
-       0,  1414,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  -399,   686,     0,  1432,  1434,     0,
-       0,   515,     0,   633,     0,     0,     0,     0,     0,  1440,
-       0,     0,  1244,     0,   412,     0,     0,   340,   362,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1463,     0,     0,     0,     0,     0,
-       0,     0,     0,  1470,     0,   515,  1472,     0,  1474,  1476,
-    1478,     0,     0,     0,     0,     0,     0,     0,     0,   515,
-     515,     0,     0,   412,   412,     0,     0,     0,     0,     0,
-       0,   209,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   829,   362,   380,   362,     0,     0,     0,     0,
-    1509,     0,  1511,     0,   621,  1244,   621,   621,     0,     0,
-       0,     0,     0,   621,     0,     0,     0,     0,     0,     0,
-    1523,     0,     0,   868,   362,     0,     0,     0,     0,   362,
-       0,     0,     0,     0,     0,     0,     0,     0,   362,   362,
-     362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   362,     0,     0,
-       0,     0,   412,   911,     0,     0,   412,   914,     0,     0,
-       0,     0,     0,   916,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   340,   362,   412,     0,   412,   734,     0,     0,   412,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,     0,     0,     0,     0,     0,    30,
-       0,   362,   621,     0,     0,   768,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   781,     0,
-       0,     0,     0,     0,     0,   768,     0,    33,   768,     0,
-       0,     0,     0,     0,   205,    38,     0,   340,   362,   791,
-     792,     0,   412,   412,     0,     0,     0,     0,     0,   515,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   813,     0,     0,     0,     0,   515,     0,     0,     0,
-       0,   822,     0,     0,     0,     0,     0,     0,   344,   628,
-       0,     0,     0,   781,   412,     0,     0,     0,     0,     0,
-       0,     0,     0,   362,     0,     0,     0,     0,     0,   829,
-     362,     0,     0,     0,   621,     0,   621,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   621,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   888,     0,     0,     0,     0,     0,   515,
-     515,     0,   380,     0,     0,     0,     0,     0,     0,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,    28,     0,
-       0,    29,   344,     0,    30,    31,     0,     0,     0,   829,
-       0,     0,     0,     0,     0,     0,     0,   412,   280,   281,
-       0,   282,     0,   412,     0,     0,     0,     0,     0,    32,
-       0,   412,    33,     0,    34,     0,    35,    36,     0,    37,
-      38,    39,     0,     0,   621,   621,     0,   283,    40,    41,
-       0,     0,     0,   284,     0,     0,     0,   285,     0,     0,
-     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
-       0,   362,     0,     0,    42,   292,    43,   412,   781,     0,
-     990,     0,     0,     0,    44,     0,   995,     0,     0,     0,
-     293,     0,   377,  1004,     0,   992,   412,  1157,     0,   295,
-     379,   297,   298,   299,   300,     0,   362,     0,     0,     0,
-       0,     0,   412,  1169,     0,   621,   621,  1174,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   362,   362,     0,
-       0,     0,     0,     0,     0,     0,     0,  1021,  1022,     0,
-     344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   344,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   829,   412,
-    1237,     0,     0,     0,     0,  1052,     0,     0,     0,   380,
-       0,   621,     0,     0,     0,     0,     1,     2,   204,     4,
+      23,    24,    25,    26,    27,    28,    -1,    30,    31,    32,
+      33,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
+      -1,    74,    75,    -1,    -1,    78,     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,   111,    36,
+      -1,    -1,    39,    -1,    -1,    -1,   119,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    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,   111,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
+      74,    75,    -1,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,
+      -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,    28,     0,     0,    29,   280,
-     281,    30,  1061,  1062,     0,  1063,   362,     0,  1064,  1065,
-    1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,
-       0,     0,     0,  1073,  1074,     0,    32,     0,   283,    33,
-       0,    34,     0,    35,   648,   320,    37,    38,   285,     0,
-       0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
-       0,  1138,  1139,     0,     0,     0,   292,     0,   380,     0,
-       0,     0,   280,   281,   995,   282,   340,  1148,     0,   768,
-       0,   293,     0,  1075,     0,     0,   169,     0,     0,     0,
-     295,   296,   297,   298,   299,   300,   362,     0,     0,  1164,
-    1076,   283,     0,     0,  -129,     0,     0,   284,     0,     0,
-    1179,   285,     0,     0,   286,   287,   288,   289,    40,    41,
-       0,   290,   291,     0,     0,     0,     0,     0,     0,   292,
-       0,     0,   380,     0,  1197,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   293,   362,   362,     0,     0,   995,
-     995,     0,     0,   295,   379,   297,   298,   299,   300,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1229,     0,     0,     0,     0,     0,     0,     0,     1,     2,
-     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      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,    -1,    -1,   119,    -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,    -1,    -1,   119,    -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,    -1,    -1,   119,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
+      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    -1,    30,    31,
+      32,    67,    -1,    69,    -1,    71,    -1,    39,    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,    -1,    67,    -1,    -1,    -1,    -1,
+      72,    -1,    74,    75,    76,   111,    78,    -1,    -1,    -1,
+      -1,    83,    84,   119,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,   111,
+      30,    31,    32,    -1,    -1,    -1,    -1,   119,    -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,    -1,    -1,   119,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
+      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
+      74,    75,    -1,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
+      71,    -1,    -1,    74,    75,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
+      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
+      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      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,    94,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,   109,    -1,
+     111,   112,    -1,    83,    84,    -1,    -1,   118,   119,   120,
+     121,   122,   123,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,   111,    -1,    30,    31,    32,    -1,    -1,    -1,   119,
+      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,    94,    -1,    -1,
+      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
+      -1,    -1,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,
+      -1,   118,   119,   120,   121,   122,   123,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,    28,     0,     0,
-      29,   280,   281,    30,   282,     0,     0,   995,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     280,   281,     0,   282,     0,     0,   888,     0,     0,     0,
-     283,    33,     0,    34,     0,    35,   284,     0,    37,    38,
-     285,  1281,  1282,   286,   287,   288,   289,    40,    41,   283,
-     290,   291,     0,     0,     0,   284,     0,     0,   292,   285,
-     362,     0,   286,   287,   288,   289,    40,    41,     0,   290,
-     291,     0,     0,   293,     0,  1075,     0,   292,     0,     0,
-       0,     0,   295,   296,   297,   298,   299,   300,     0,     0,
-       0,     0,   293,     0,   377,     0,  -129,     0,     0,     0,
-       0,   295,   379,   297,   298,   299,   300,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   995,     0,     0,     0,     1,     2,   204,     4,
+      23,    24,    25,    26,    27,   111,    -1,    30,    31,    32,
+      -1,    -1,    -1,   119,    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,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    -1,    -1,   109,    -1,   111,    74,
+      75,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
+     123,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,   109,    -1,   111,    -1,    37,    38,
+      39,    40,    -1,    -1,   119,    -1,    -1,    -1,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    66,    67,    30,
+      31,    32,    -1,    72,    -1,    74,    75,    76,    39,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
+     109,    -1,   111,    74,    75,    -1,    -1,    -1,    -1,   118,
+     119,   120,   121,   122,   123,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+     111,    -1,    37,    38,    39,    40,    -1,    -1,   119,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
+      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
+      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      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,    94,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,   109,    -1,
+     111,    -1,    -1,    83,    84,    -1,    -1,   118,   119,   120,
+     121,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    67,    -1,    39,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
+      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,   109,
+      -1,   111,    -1,    83,    84,    -1,    -1,    -1,    -1,   119,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    67,    -1,    39,
+      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,    -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,    78,   109,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      40,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      -1,    30,    31,    32,    -1,    -1,    -1,    67,    -1,    -1,
+      39,    -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,
+      -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,   119,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,   111,    30,    31,    32,    -1,    -1,    -1,    -1,
+     119,    -1,    39,    40,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
+      67,    -1,    -1,    39,    -1,    -1,    -1,    74,    75,    -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,    -1,    -1,    74,    75,
+      -1,    39,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
+      -1,    -1,   119,    -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,    -1,    -1,   119,    -1,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,   119,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,
+      75,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      67,    -1,    39,    -1,    -1,    -1,   111,    74,    75,    -1,
+      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
+      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   119,    -1,    -1,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
+      -1,    -1,   119,    -1,    39,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,
+      75,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,
+      75,    -1,    39,    -1,    -1,    -1,   111,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,   111,    74,    75,    -1,
+      -1,    -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
+      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,   119,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,
+      74,    75,    -1,    39,    -1,    -1,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    67,    30,    31,    32,    -1,    -1,   111,    74,    75,
+      -1,    39,    -1,    37,    38,   119,    40,    41,    -1,    43,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
+      -1,    -1,    56,    57,    -1,    -1,    -1,    61,    62,    67,
+      64,    69,    66,    71,    -1,    -1,    74,    75,    72,    -1,
+      -1,    -1,    76,   119,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   110,    -1,    -1,   109,    -1,   111,    -1,    -1,
+     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
+      -1,    -1,    -1,    -1,   128,    -1,    37,    38,   132,    40,
+      41,    -1,    43,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
+      61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,
+      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
+     121,   122,   123,    -1,    -1,    -1,    -1,   128,    -1,    -1,
+      -1,   132,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    37,
+      38,    -1,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    -1,    -1,    56,    57,
+      -1,    -1,    -1,    61,    62,    67,    64,    69,    66,    71,
+      -1,    -1,    74,    75,    72,    -1,    -1,    -1,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    96,    -1,    94,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
+     118,   119,   120,   121,   122,   123,    -1,    -1,    37,    38,
+     128,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,
+      -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,
+      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
+     119,   120,   121,   122,   123,    -1,    -1,    37,    38,   128,
+      40,    41,    -1,    43,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,
+      -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,
+      -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
+      -1,    -1,    -1,    -1,    94,    37,    38,    -1,    40,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,
+     120,   121,   122,   123,    66,    -1,    -1,    -1,   128,    -1,
+      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
+      -1,    -1,    94,    37,    38,    -1,    40,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
+      -1,    -1,    37,    38,    -1,    40,   118,   119,   120,   121,
+     122,   123,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
+      -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    66,    86,    87,    -1,    -1,    -1,    72,    -1,    -1,
+      94,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,   109,    -1,   111,    -1,    94,
+      37,    38,    -1,    40,   118,   119,   120,   121,   122,   123,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    37,
+      38,    -1,    40,   118,   119,   120,   121,   122,   123,    66,
+      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    66,    86,
+      87,    -1,    -1,    -1,    72,    -1,    -1,    94,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,   109,    -1,   111,    -1,    94,    37,    38,    -1,
+      40,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
+      -1,   109,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
+     118,   119,   120,   121,   122,   123,    66,    -1,    -1,    -1,
+      -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    66,    86,    87,    -1,    -1,
+      -1,    72,    -1,    -1,    94,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,   109,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,   118,   119,
+     120,   121,   122,   123,    -1,    -1,    -1,    -1,   109,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
+     121,   122,   123,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
+      -1,    71,    -1,    -1,    74,    75,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-     412,     0,    25,    26,    27,    28,     0,     0,    29,   280,
-     281,    30,   282,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   412,   412,     0,     0,     0,
-       0,     0,     0,  1389,     0,   768,     0,     0,   283,    33,
-       0,    34,     0,    35,   284,     0,    37,    38,   285,     0,
-     412,   286,   287,   288,   289,    40,    41,     0,   290,   291,
-       0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   293,     0,    43,     0,     0,     0,     0,     0,     0,
-     295,   296,   297,   298,   299,   300,     0,     0,     2,   204,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,  1449,     0,    25,    26,    27,     0,     0,     0,     0,
-     280,   281,    30,   282,     0,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,     0,     0,   283,
-      33,     0,    34,    30,    35,   284,     0,    37,    38,   285,
-       0,     0,   286,   287,   288,   289,    40,    41,     0,   290,
-     291,     0,     0,     0,     0,     0,     0,   292,     0,     0,
-       0,    33,     0,     0,     0,     0,   108,     0,    37,    38,
-       0,     0,   293,  1515,   342,     0,     0,    40,    41,   780,
-       0,   295,   343,   297,   298,   299,   300,     2,   204,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,     0,     0,     0,   280,
-     281,    30,   282,     0,     0,   320,     0,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,  -295,     0,     0,     0,   283,    33,
-       0,    34,     0,    35,   284,    30,    37,    38,   285,     0,
-       0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
-       0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
-       0,   293,     0,   930,  -295,     0,     0,     0,   780,     0,
-     295,   343,   297,   298,   299,   300,     2,   204,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-       0,    25,    26,    27,     0,     0,     0,     0,   280,   281,
-      30,   282,     0,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,     0,   283,    33,     0,
-      34,    30,    35,   284,     0,    37,    38,   285,     0,     0,
-     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
-       0,     0,     0,     0,     0,   292,     0,     0,     0,    33,
-       0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
-     293,     0,   930,     0,     0,     0,     0,   780,     0,   295,
-     599,   297,   298,   299,   300,     2,   204,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,     0,     0,     0,   280,   281,    30,
-     282,     0,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-       0,    25,    26,    27,     0,     0,   283,    33,     0,    34,
-      30,    35,   284,     0,    37,    38,   285,     0,     0,   286,
-     287,   288,   289,    40,    41,     0,   290,   291,     0,     0,
-       0,     0,     0,     0,   292,     0,     0,     0,    33,     0,
-       0,     0,     0,     0,     0,   205,    38,     0,     0,   293,
-       0,   342,     0,     0,     0,     0,     0,     0,   295,   343,
-     297,   298,   299,   300,     2,   204,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
-      26,    27,     0,     0,     0,     0,   280,   281,    30,   282,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-       0,     0,     0,     0,     0,   283,    33,     0,    34,    30,
-      35,   284,     0,    37,    38,   285,     0,     0,   286,   287,
-     288,   289,    40,    41,     0,   290,   291,     0,     0,     0,
-       0,     0,     0,   292,     0,     0,     0,    33,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   293,     0,
-     930,     0,     0,     0,     0,     0,     0,   295,   343,   297,
-     298,   299,   300,     2,   204,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,     0,     0,     0,     0,   280,   281,    30,   282,     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,   283,    33,     0,    34,     0,    35,
-     284,     0,   205,    38,   285,     0,     0,   286,   287,   288,
-     289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
-       0,     0,   292,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   293,     0,  1019,
-       0,     0,     0,     0,     0,     0,   295,  1020,   297,   298,
-     299,   300,     2,   204,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
-       0,     0,     0,     0,   280,   281,    30,   282,     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,   283,    33,     0,    34,     0,    35,   284,
-       0,   205,    38,   285,     0,     0,   286,   287,   288,   289,
-      40,    41,     0,   290,   291,     0,     0,     0,     0,     0,
-       0,   292,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   293,     0,   377,     0,
-       0,     0,     0,     0,     0,   295,   379,   297,   298,   299,
-     300,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
-      28,     0,     0,    29,     0,     0,    30,    31,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    32,     0,     0,    33,     0,    34,     0,    35,    36,
-       0,    37,    38,    39,     0,     0,     0,     0,     0,     0,
-      40,    41,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    42,     0,    43,     0,
-       0,     0,  -520,     0,     0,     0,    44,   203,     2,   204,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,     0,    25,    26,    27,     0,     0,     0,     0,
-       0,     0,    30,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,   491,   492,   493,     0,     0,
-      33,    30,    34,     0,    35,    36,     0,   205,    38,    39,
-       0,     0,     0,     0,     0,     0,    40,    41,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
-       0,     0,    42,     0,   206,     0,     0,     0,     0,     0,
-       0,     0,   207,     1,     2,   204,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,  -294,     0,    25,
-      26,    27,    28,     0,     0,    29,     0,     0,    30,     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,    33,     0,    34,     0,
-      35,     0,     0,    37,    38,     0,     0,  -294,     0,     1,
-       2,   204,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,    28,     0,
-      43,    29,     0,     0,    30,     0,     0,     0,   109,     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,    34,     0,    35,     0,     0,    37,
-      38,     0,   203,     2,   204,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,     0,     0,     0,     0,     0,    43,    30,     0,     0,
-       0,     0,     0,     0,   109,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,    34,     0,    35,
-       0,     0,   205,    38,     2,   204,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
-      26,    27,     0,     0,     0,     0,     0,     0,    30,   206,
-       0,     0,     0,     0,     0,     0,     0,   269,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
-      35,    36,     0,   205,    38,    39,     0,     0,     0,     0,
-       0,     0,    40,    41,     0,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,    42,     0,
-     206,     0,     0,     0,    30,     0,     0,     0,   207,     2,
-     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    33,     0,    25,    26,    27,    36,     0,    37,
-      38,    39,     0,    30,     0,     0,     0,     0,    40,    41,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,    34,    42,    35,    43,     0,    37,    38,
-       0,     0,     0,     0,    44,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1368,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   686,     0,     0,     0,     0,
-       0,     0,     0,   633,     2,   204,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
-      26,    27,     0,     0,     0,     0,     0,     0,    30,     0,
-       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,    33,     0,    34,     0,
-      35,    30,     0,    37,    38,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1370,     0,     0,     0,    33,
-       0,     0,     0,     0,    36,     0,   335,   336,    39,     0,
-     686,     0,     0,     0,     0,    40,    41,     0,   633,     2,
-     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,   337,    25,    26,    27,     0,     0,     0,
-       0,   109,     0,    30,     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,    33,     0,    34,     0,    35,     0,     0,   205,    38,
-       2,   204,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
-       0,     0,     0,     0,    30,   268,     0,     0,     0,     0,
-       0,     0,     0,   628,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    33,     0,    34,     0,    35,     0,     0,    37,
-      38,     2,   204,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-       0,     0,     0,     0,     0,    30,   686,     0,     0,     0,
-       0,     0,     0,     0,   633,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,    34,     0,    35,     0,     0,
-      37,    38,     2,   204,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
-       0,     0,     0,     0,     0,     0,    30,   598,     0,     0,
-       0,     0,     0,     0,     0,   633,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    33,     0,    34,     0,    35,     0,
-       0,   205,    38,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,     0,     0,     0,   280,
-     281,    30,   282,     0,     0,     0,     0,     0,   206,     0,
-       0,     0,     0,     0,     0,     0,   269,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   283,    33,
-       0,     0,     0,     0,   284,     0,    37,    38,   285,     0,
-       0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
-       0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   293,     0,   524,     0,     0,   169,     0,     0,     0,
-     295,   296,   297,   298,   299,   300,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
-       0,     0,   280,   281,    30,   282,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,  -294,     0,    25,    26,    27,     0,     0,
-       0,   283,    33,     0,    30,     0,     0,   284,     0,    37,
-      38,   285,     0,     0,   286,   287,   288,   289,    40,    41,
-       0,   290,   291,     0,     0,     0,     0,     0,     0,   292,
-       0,     0,    33,     0,     0,     0,     0,    36,     0,   335,
-     336,    39,     0,  -294,   293,     0,   598,    -3,    40,    41,
-       0,     0,     0,   295,   599,   297,   298,   299,   300,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,   337,     0,    25,    26,
-      27,     0,     0,     0,   109,   280,   281,    30,   282,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,     0,     0,     0,   283,    33,     0,    30,     0,     0,
-     648,     0,    37,    38,   285,     0,     0,   286,   287,   288,
-     289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
-       0,     0,   292,     0,     0,    33,     0,     0,     0,     0,
-     108,     0,    37,    38,     0,     0,     0,   293,   -35,   765,
-       0,    40,    41,     0,     0,     0,   295,   296,   297,   298,
-     299,   300,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    43,
-       0,    25,    26,    27,     0,     0,     0,   109,   280,   281,
-      30,   282,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-       0,    25,    26,    27,     0,     0,     0,   283,    33,     0,
-      30,   452,     0,   284,     0,    37,    38,   285,     0,     0,
-     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
-       0,     0,     0,     0,     0,   292,     0,     0,    33,     0,
-       0,     0,     0,     0,     0,    37,    38,     0,     0,     0,
-     293,     0,   294,     0,     0,     0,     0,     0,     0,   295,
-     296,   297,   298,   299,   300,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,   453,     0,    25,    26,    27,     0,     0,     0,
-     109,   280,   281,    30,   282,     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,
-     283,    33,    25,    26,    27,     0,   284,     0,    37,    38,
-     285,    30,     0,   286,   287,   288,   289,    40,    41,     0,
-     290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,     0,     0,   293,     0,   155,    37,    38,     0,     0,
-       0,     0,   295,   296,   297,   298,   299,   300,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
-       0,   642,     0,   337,   280,   281,    30,   282,     0,     0,
-       0,   109,     0,     0,     0,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,   283,    33,    25,    26,    27,     0,   284,
-       0,    37,    38,   285,    30,     0,   286,   287,   288,   289,
-      40,    41,     0,   290,   291,     0,     0,     0,     0,     0,
-       0,   292,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    33,     0,     0,     0,   293,     0,   598,    37,
-      38,     0,     0,     0,     0,   295,   599,   297,   298,   299,
-     300,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,   642,     0,   337,   280,   281,    30,
-     282,     0,     0,     0,   633,     0,     0,     0,     0,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,   283,    33,    25,    26,
-      27,     0,   284,     0,    37,    38,   285,    30,   452,   286,
-     287,   288,   289,    40,    41,     0,   290,   291,     0,     0,
-       0,     0,     0,     0,   292,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,   293,
-       0,   377,    37,    38,     0,     0,     0,     0,   295,   379,
-     297,   298,   299,   300,   473,     2,   204,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,   453,
-      25,    26,    27,  1234,     0,     0,     0,   109,     0,    30,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
-      26,    27,     0,     0,     0,     0,     0,    33,    30,    34,
-       0,    35,     0,     0,    37,    38,     0,     0,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,    33,    25,    26,    27,
-       0,    36,     0,   205,    38,    39,    30,     0,     0,     0,
-       0,     0,    40,    41,    -3,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,    33,    25,    26,    27,    42,    36,
-     268,   335,   336,    39,    30,     0,     0,     0,   207,     0,
-      40,    41,     0,     0,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,    33,    25,    26,    27,   642,     0,   337,    37,
-      38,     0,    30,     0,     0,     0,   633,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-      33,     0,     0,     0,     0,    30,   255,    37,    38,     0,
-       0,     0,     0,     0,   109,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,    33,    25,    26,    27,     0,     0,     0,
-     205,    38,     0,    30,   155,     0,     0,     0,     0,     0,
-       0,     0,   109,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,    33,    25,    26,    27,     0,     0,   268,    37,    38,
-       0,    30,     0,     0,     0,   269,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,     0,    33,
-       0,     0,     0,     0,    30,   255,    37,    38,     0,     0,
-       0,     0,     0,   633,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,    33,    25,    26,    27,     0,     0,     0,    37,
-      38,     0,    30,   337,     0,     0,     0,     0,     0,     0,
-       0,   633,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-      33,    25,    26,    27,     0,     0,   453,   205,    38,     0,
-      30,     0,     0,     0,   109,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,     0,    33,     0,
-       0,     0,     0,    30,   268,    37,    38,     0,     0,     0,
-       0,     0,   628,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,    33,    25,    26,    27,     0,     0,     0,    37,    38,
-       0,    30,   598,     0,     0,     0,     0,     0,     0,     0,
-     633,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,     0,     0,     0,     0,   337,    37,    38,     0,     0,
-       0,     0,     0,   109,     2,   204,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
-      26,    27,     0,    43,     0,     0,     0,     0,    30,     0,
-       0,   109,     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,    34,     0,
-      35,     0,     0,    37,    38,   280,   281,     0,   282,  1062,
-       0,  1063,     0,     0,  1064,  1065,  1066,  1067,  1068,  1069,
-    1070,  1071,     0,     0,  1548,  1072,     0,     0,     0,  1073,
-    1074,     0,    32,     0,   283,     0,     0,     0,     0,  -412,
-     648,     0,     0,     0,   285,     0,     0,   286,   287,   288,
-     289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
-       0,     0,   292,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   293,     0,   377,
-       0,     0,   169,     0,     0,     0,   295,   379,   297,   298,
-     299,   300,     0,     0,     0,     0,  1076,     0,   280,   281,
-    -129,   282,  1062,     0,  1063,     0,     0,  1064,  1065,  1066,
-    1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,     0,
-       0,     0,  1073,  1074,     0,    32,     0,   283,     0,     0,
-       0,     0,     0,   648,     0,     0,     0,   285,     0,     0,
-     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
-       0,     0,     0,     0,     0,   292,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     293,     0,   377,     0,     0,   169,     0,     0,     0,   295,
-     379,   297,   298,   299,   300,     0,     0,     0,     0,  1076,
-       0,   280,   281,  -129,   282,  1062,     0,  1063,  1418,  1419,
-    1064,  1065,  1066,  1067,  1068,  1069,  1070,  1071,     0,     0,
-    1548,  1072,     0,     0,     0,  1073,  1074,     0,    32,     0,
-     283,     0,     0,     0,     0,     0,   648,     0,     0,     0,
-     285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
-     290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   293,     0,   377,     0,     0,   169,     0,
-       0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
-     280,   281,  1076,   282,  1062,     0,  1063,  1418,  1419,  1064,
-    1065,  1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,
-    1072,     0,     0,     0,  1073,  1074,     0,    32,     0,   283,
-       0,     0,     0,     0,     0,   648,     0,     0,     0,   285,
-       0,     0,   286,   287,   288,   289,    40,    41,     0,   290,
-     291,     0,     0,     0,     0,     0,     0,   292,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   293,     0,   377,     0,     0,   169,     0,     0,
-       0,   295,   379,   297,   298,   299,   300,     0,     0,   280,
-     281,  1076,   282,  1062,     0,  1063,     0,     0,  1064,  1065,
-    1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,
-       0,     0,     0,  1073,  1074,     0,    32,     0,   283,     0,
-       0,     0,     0,     0,   648,     0,     0,     0,   285,     0,
-       0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
-       0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   293,     0,   377,     0,     0,   169,     0,     0,     0,
-     295,   379,   297,   298,   299,   300,     0,     0,     0,     0,
-    1076,     2,   204,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-       0,     0,     0,     0,     0,    30,     0,   280,   281,     0,
-     282,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   280,   281,     0,   282,
-       0,     0,     0,    33,     0,    34,   283,    35,     0,     0,
-      37,    38,   284,     0,     0,     0,   285,     0,     0,   286,
-     287,   288,   289,    40,    41,   283,   290,   291,     0,     0,
-       0,   648,  1327,     0,   292,   285,     0,     0,   286,   287,
-     288,   289,    40,    41,     0,   290,   291,     0,     0,   293,
-       0,   377,     0,   292,   280,   281,     0,   282,   295,   733,
-     297,   298,   299,   300,     0,     0,     0,     0,   293,     0,
-     784,     0,     0,   280,   281,     0,   282,   295,   379,   297,
-     298,   299,   300,   283,     0,     0,     0,     0,     0,   284,
-       0,     0,     0,   285,     0,     0,   286,   287,   288,   289,
-      40,    41,   283,   290,   291,     0,     0,     0,   284,     0,
-       0,   292,   285,     0,     0,   286,   287,   288,   289,    40,
-      41,     0,   290,   291,     0,     0,   293,     0,   377,     0,
-     292,   280,   281,     0,   282,   295,   826,   297,   298,   299,
-     300,     0,     0,     0,     0,   517,     0,     0,     0,     0,
-       0,     0,     0,     0,   295,   379,   297,   298,   299,   300,
-     283,     0,     0,     0,     0,     0,   284,     0,     0,     0,
-     285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
-     290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   520,     0,     0,     0,     0,     0,     0,
-       0,     0,   295,   379,   297,   298,   299,   300,     2,   204,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    30,     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,
-      33,     0,    34,     0,    35,    36,     0,   172,   173,    39,
-       0,     0,     0,     0,     0,     0,    40,    41,   203,     2,
-     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
-       0,     0,     0,    30,     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,    33,     0,    34,     0,    35,     0,     0,   205,    38,
-     473,     2,   204,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-       0,     0,     0,     0,     0,    30,     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,    33,     0,    34,     0,    35,     0,     0,
-      37,    38,     2,   204,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
-       0,     0,     0,     0,     0,     0,    30,     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,    33,     0,    34,     0,    35,     0,
-       0,   205,    38
-};
-
-#define yypact_value_is_default(yystate) \
-  ((yystate) == (-1281))
-
-#define yytable_value_is_error(yytable_value) \
-  YYID (0)
-
-static const yytype_int16 yycheck[] =
-{
-       0,     1,     0,    42,   237,   217,   183,   183,   202,    42,
-       0,     1,     1,   183,    42,   542,   183,   183,   114,   103,
-     184,   455,   519,   343,     0,     0,   628,   454,    28,    29,
-     183,    31,   697,    31,   697,   183,   498,   697,   610,   608,
-     502,    31,    42,   679,    44,   461,    44,   347,  1042,   496,
-     279,   901,   655,     1,    54,    31,    31,   166,   167,   608,
-      60,  1061,    60,    63,   608,    63,    66,   610,    66,   153,
-     347,     0,   578,    63,  1005,   277,    66,    66,   416,   998,
-      80,    81,  1041,  1042,   184,   608,   263,   263,    63,   779,
-      42,   362,   185,   263,   608,   366,   263,   263,   436,    31,
-     264,   528,    31,   199,   104,  1337,   444,   107,   608,    27,
-     263,   776,     0,   776,   114,   263,   776,    42,   608,   722,
-     642,   643,   644,  1054,   758,   424,   425,   611,    38,   254,
-     643,   644,    38,   617,    81,    42,    62,   106,  1418,   661,
-       0,     1,    63,    31,   183,   145,    44,   145,   661,   109,
-     183,    81,   108,   153,   226,   183,   116,  1422,   158,    77,
-     158,   130,    38,   110,   264,   612,   259,   260,   488,   616,
-      50,    31,    44,   245,   743,   109,    43,    44,   814,   109,
-    1073,  1074,   116,   183,   184,    81,   184,   108,   824,    54,
-     637,    43,    44,    38,   641,    38,   408,    84,   108,   199,
-     110,   500,    63,   839,   110,   131,    66,   207,  1440,   207,
-     901,   109,  1492,   735,    43,    44,   216,   494,   108,   219,
-     519,   219,   735,    38,   263,   112,   226,    81,   108,   219,
-     263,   183,   108,    11,   110,   263,   115,   109,   108,   104,
-     404,   241,   107,   743,   219,   245,  1240,   114,  1141,   249,
-     250,   249,   131,   743,   115,  1520,   340,   113,   183,   249,
-    1525,   113,   116,   263,   264,   108,   264,   110,   115,   838,
-     270,    38,   144,   249,   249,     0,   183,   277,   850,   599,
-    1545,   510,     3,   717,   113,   369,   585,  1552,    81,   838,
-     454,   416,   292,   108,   838,   110,  1290,   158,   394,  1474,
-     111,  1525,   250,  1303,   404,   827,    31,   850,   628,   207,
-     610,   436,   818,   633,   827,   838,   109,   249,  1008,   444,
-     249,  1545,   486,   116,   838,   596,   422,   327,  1552,   327,
-    1289,  1290,   428,    81,  1509,   207,  1511,  1256,   838,    94,
-     238,   108,    95,   110,   292,   111,   346,   347,   838,   115,
-      81,   216,   690,    95,   454,  1525,   840,   115,   219,   698,
-     108,   249,     3,   363,     1,   237,   254,   367,   639,   122,
-    1061,   269,    71,   348,   129,  1225,   696,   108,   378,    71,
-     122,   720,  1552,    82,    83,   108,   486,   959,   108,   249,
-      82,    83,   114,   115,   394,   293,   257,   269,   296,    71,
-     261,   108,  1038,  1039,   404,   270,   404,    44,   130,   958,
-      82,    83,   277,   115,   958,    71,     0,   115,  1020,     0,
-    1414,   115,   422,   130,   296,   872,    82,    83,   428,   131,
-     430,   488,   131,   131,   109,   958,  1070,   131,   110,   131,
-     115,    67,   115,    89,    90,    71,   675,   531,    74,   115,
-      76,   130,   772,   115,   454,  1414,    71,    83,   131,   459,
-    1096,  1097,   118,  1463,   464,   131,   103,    82,    83,   131,
-    1470,   343,   109,   473,   108,  1406,  1407,   115,   478,   125,
-     126,   346,   109,   108,   109,   109,   486,   348,   486,   116,
-     490,   115,   490,   131,   494,   110,   109,   497,   363,   499,
-     490,    71,   367,   130,   479,   967,  1003,   144,   120,   121,
-     937,   927,    82,    83,   490,   490,   153,   964,   945,   519,
-     697,   697,   115,  1523,   249,   473,   108,   697,   416,   254,
-     697,   697,   761,   108,  1225,   699,   536,  1140,   131,   539,
-     110,   541,   542,  1115,   697,  1029,  1030,   656,   436,   697,
-     850,   108,   424,   425,   452,   757,   444,   455,   829,    87,
-      88,   490,   833,   461,   991,   690,   203,   663,   429,    71,
-     207,   519,   665,   850,   115,    10,    11,    12,    13,    14,
-      82,    83,   115,   108,   210,   642,   643,   644,   536,   589,
-     131,   539,   470,   541,   542,   109,   596,   115,   131,   699,
-     237,   238,   490,    38,   661,   109,   108,   732,   608,   115,
-     610,   695,  1303,   131,   512,    71,   514,   115,   479,   517,
-     111,   597,   520,   109,   115,   131,    82,    83,   500,   629,
-     490,    66,   269,   131,  1270,   272,   109,    79,   977,   696,
-     282,   589,  1278,  1279,  1280,   645,    71,   519,    73,    74,
-     109,   651,   923,   295,   296,   630,   293,    82,    83,   296,
-     660,   111,   662,   663,   664,   307,   114,  1101,   110,  1303,
-     112,    79,     3,   111,   116,   887,   108,   115,   735,    10,
-      11,    12,    13,    14,    91,    92,   963,   771,   113,     0,
-    1326,   416,   109,   108,   293,   110,   908,   697,   115,   699,
-    1020,   343,   110,   340,   112,   111,   343,    38,   116,   115,
-     108,   436,   712,   585,   662,   772,   664,   118,   718,   444,
-      31,   131,   123,   124,   350,   362,   352,   599,    71,   366,
-     730,    42,   369,    44,   111,    66,   969,   379,   115,    82,
-      83,   602,   108,   743,   744,   109,  1380,   109,   723,    60,
-    1131,   115,    63,   115,  1135,    66,   628,   757,   108,    63,
-     110,   633,   737,   488,   629,   490,   108,   110,   118,   630,
-     827,  1495,  1463,   937,   635,   108,   108,  1501,   110,  1470,
-     645,   945,   730,   108,   893,   110,   118,   424,   425,   111,
-     109,   109,  1319,   118,  1133,   660,   115,   115,  1522,   113,
-     109,   679,   690,  1527,   131,    52,   115,   113,   512,    71,
-     514,    73,    74,   517,   440,   452,   520,   109,   455,   717,
-      82,    83,   109,   115,   461,   424,   425,   128,   115,   130,
-     113,  1102,  1523,  1467,   145,  1469,   473,   937,   838,  1033,
-    1160,   114,   115,   109,   732,   945,   108,   158,    95,   115,
-     850,   113,  1191,  1192,   109,   108,   831,   110,   834,   131,
-     115,   498,   723,   500,  1529,   502,  1529,   131,   109,  1529,
-     115,   116,   183,   184,   115,   512,   737,   514,   109,   109,
-     517,   109,   519,   520,   115,   115,    71,   115,    73,    74,
-    1524,   108,   757,   893,   531,   108,   207,    82,    83,   109,
-     900,   901,  1131,   109,   109,   115,  1135,  1136,   219,   115,
-     115,   901,    81,   512,   556,   557,   558,   108,   517,   110,
-    1240,   520,   108,   923,   110,   901,   901,   109,   110,     4,
-       5,     6,     7,     8,     9,   108,   814,   937,   249,    71,
-     111,    73,    74,    81,   191,   945,   824,  1056,   585,   119,
-      82,    83,   263,   901,   108,   109,   110,   599,   108,   596,
-     110,   839,   599,   963,   108,   690,   110,   214,    57,    58,
-     831,   696,   108,   109,   110,   574,   108,   224,   968,   968,
-     108,   113,   110,   983,  1041,     4,     5,     6,     7,     8,
-       9,   628,   992,    68,   127,    70,   633,   108,   109,   110,
-    1000,   128,   639,  1003,   130,  1005,    71,   732,    73,    74,
-      75,   110,   108,   901,   110,     3,   327,    82,    83,   114,
-     115,  1250,    10,    11,    12,    13,    14,  1123,    71,   927,
-      73,    74,    75,   115,   116,   983,   347,   115,   116,    82,
-      83,   901,   108,   108,   110,   110,   293,   772,  1023,    68,
-      38,    70,  1000,   118,  1054,  1003,   131,  1005,   695,   108,
-     109,   110,  1401,    93,  1064,   108,   108,  1067,  1068,  1069,
-     108,  1061,    10,    11,    12,    13,    14,  1504,    66,  1418,
-     717,   563,   564,   565,   566,  1061,  1061,    71,   111,    73,
-      74,   733,  1092,   404,    43,    44,    44,   969,    82,    83,
-      38,   111,   702,  1160,   704,   109,  1054,   109,   968,  1338,
-     747,   109,    60,  1342,   109,    63,  1064,   109,    66,  1067,
-    1068,  1069,     3,  1123,   561,   562,   110,  1554,    66,    10,
-      11,    12,    13,    14,   771,   109,  1220,   779,    71,   108,
-      73,    74,    75,   454,   111,   109,   111,   111,  1020,    82,
-      83,   115,  1491,  1492,    57,    58,    59,    38,   567,   568,
-    1038,  1039,  1023,  1262,  1263,  1264,   130,   131,   559,   560,
-     108,   110,   110,  1061,   115,   108,   901,   130,   113,   490,
-     118,   108,   111,   494,   826,    66,   109,   109,   116,   115,
-     111,   111,   829,   111,   441,   111,   833,   145,  1198,   116,
-      28,  1061,   116,  1101,   109,    84,    85,    86,   109,   111,
-     158,   109,  1202,  1203,  1203,  1444,   113,   116,  1096,  1097,
-    1220,   114,   114,   114,   108,  1225,   115,  1202,   475,   108,
-     115,   110,  1289,   112,   113,  1225,   184,   109,     4,     5,
-       6,     7,     8,     9,   131,   109,   109,   116,   109,  1225,
-    1225,   109,   109,   115,  1244,  1244,    71,   109,   109,   207,
-      75,   109,  1262,  1263,  1264,   512,    32,    82,    83,   109,
-     517,   219,   109,   520,   109,   109,    71,  1225,    73,    74,
-      75,    84,    85,    86,   109,   109,   923,    82,    83,   470,
-     927,   109,   109,   108,   114,   110,   109,   608,   109,   610,
-      28,  1397,    68,   118,    70,   108,  1539,   110,  1298,   112,
-     113,   698,   111,  1303,  1262,  1263,  1264,   109,   130,  1319,
-    1320,   109,   109,  1298,   114,   109,   115,  1303,  1303,   111,
-     967,   968,   969,   720,   111,   109,  1061,  1225,    71,   109,
-     115,  1202,    75,  1203,   109,   901,   115,  1337,  1337,    82,
-      83,   115,  1529,  1529,   116,   113,   111,    71,   109,  1529,
-    1238,    75,  1529,  1529,   111,  1225,  1530,   115,    82,    83,
-     115,  1319,  1320,   109,  1374,   108,  1529,  1377,  1020,   327,
-     109,  1529,   108,  1020,  1244,   118,   697,   108,   699,   108,
-    1554,   108,  1270,   108,   108,   111,  1396,  1397,   116,   131,
-    1278,  1279,  1280,   114,   118,   109,  1406,  1407,  1504,    71,
-     109,    73,    74,    75,   109,  1303,     0,     1,   128,  1061,
-      82,    83,  1422,   114,   811,   113,  1374,  1427,   111,  1377,
-    1530,   678,   743,   744,   131,  1160,   109,  1298,   115,   111,
-     687,   115,   111,  1303,   691,  1445,   109,    31,  1326,   109,
-    1440,  1440,   109,   111,  1554,   111,   404,  1457,  1406,  1407,
-      44,   111,   109,    54,  1101,  1102,   111,   111,   111,    46,
-      29,   109,   131,  1463,  1422,   114,   131,  1337,   131,  1427,
-    1470,    71,    66,    73,    74,    75,   114,  1463,  1463,   131,
-    1529,   131,    82,    83,  1470,  1470,  1529,  1445,   679,   116,
-    1225,  1529,   889,   109,  1504,  1505,   111,   114,  1064,  1457,
-     111,   111,   111,   104,  1514,  1240,   107,   111,   108,   103,
-    1520,    80,    81,   111,   111,  1525,   111,   838,   118,  1529,
-    1530,  1396,  1530,  1523,   109,  1177,   109,   111,   108,   850,
-     111,    63,   108,  1543,   108,  1545,    59,  1523,  1523,  1549,
-     113,   109,  1552,   109,  1554,   131,  1554,  1505,    80,   116,
-    1560,   145,   153,   111,  1564,   111,  1514,   109,   111,   153,
-     154,   109,  1520,   108,  1472,  1463,  1474,  1525,  1303,    95,
-    1440,    95,  1470,  1220,   108,   114,   131,   115,   111,   109,
-     977,   109,   109,   115,   109,  1543,    41,  1545,   131,   131,
-     184,  1549,    95,  1463,  1552,  1204,  1205,  1244,  1207,   116,
-    1470,  1509,  1560,  1511,  1213,   199,  1564,  1216,   202,   203,
-     109,  1008,   109,   207,    95,   216,   937,   131,   109,   109,
-     131,   116,   131,   814,   945,  1523,   158,   109,   114,   109,
-      50,   131,    52,   824,   228,    55,    56,    57,   232,    59,
-     234,   111,   963,   111,   108,   114,   131,   114,   839,   243,
-     109,   109,   131,  1523,    74,   249,   109,  1539,   109,  1225,
-     254,  1058,  1076,   569,  1225,   570,    86,    87,   925,   270,
-     264,   571,   241,  1492,    63,   573,   277,  1382,   272,   572,
-      25,    26,    27,  1564,    73,  1313,  1136,   219,  1342,  1470,
-    1337,    10,    11,    12,    13,    14,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,  1092,    29,    30,    31,   452,    38,
-     452,   945,   704,   464,    38,   257,   115,   893,  1463,   261,
-     947,   992,   589,   965,   657,  1470,  1133,   747,  1244,   490,
-     757,   577,    -1,    -1,   577,   346,   340,    66,   577,   343,
-      -1,    96,    66,    98,  1320,   349,    -1,    -1,    -1,    73,
-      74,    -1,   363,    77,    -1,    -1,   367,  1376,   362,   158,
-      -1,    -1,   366,    -1,    -1,   369,    -1,    10,    11,    12,
-      13,    14,    -1,    -1,    -1,    -1,    -1,    -1,  1523,   108,
-      -1,   110,    -1,  1440,  1191,  1192,   110,    -1,    -1,   118,
-      -1,    -1,    -1,    -1,   118,    38,    -1,    -1,  1374,   378,
-      -1,  1377,    -1,    -1,    -1,  1072,   348,    -1,    -1,    -1,
-      -1,    -1,   416,    -1,    -1,  1472,    -1,  1474,    -1,   430,
-     219,    -1,    -1,    66,   179,    -1,    -1,   431,    -1,    -1,
-      -1,    -1,   436,    -1,   189,   190,    -1,  1038,  1039,   194,
-     444,   196,   197,    -1,    -1,    -1,  1422,    -1,    -1,    -1,
-      -1,  1427,  1509,    -1,  1511,    -1,    -1,    -1,   257,    -1,
-      -1,    -1,   261,    -1,    -1,   108,   470,   110,    -1,   473,
-      -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,   277,    -1,
-     459,  1457,  1539,    -1,   488,   464,   490,   429,    -1,    10,
-      11,    12,    13,    14,   498,  1096,  1097,    -1,   502,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
-      13,    14,    -1,   343,   344,    -1,    -1,    38,   497,    71,
-     499,    73,    74,    75,    -1,   355,   356,   531,   532,    -1,
-      82,    83,    -1,    -1,    -1,    38,    -1,   479,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,   348,
-      71,    -1,    73,    74,    75,    -1,   108,    -1,   110,    -1,
-      -1,    82,    83,    66,   116,    -1,   118,  1543,    71,    -1,
-      73,    74,    75,  1549,   578,    -1,    -1,    -1,    -1,    82,
-      83,    -1,    -1,    -1,  1560,   596,    -1,   108,  1564,   110,
-      -1,    -1,   596,   597,  1401,   599,    -1,   118,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   108,   610,   110,    -1,    -1,
-      -1,  1418,    -1,    -1,    -1,   118,    -1,    -1,   629,    -1,
-      -1,    -1,    -1,    -1,   628,    -1,    -1,    -1,    -1,   633,
-     429,    -1,    -1,    -1,   645,   639,    -1,  1238,   642,   643,
-     644,    -1,    -1,    -1,    -1,  1312,    -1,   446,    -1,   660,
-      71,    -1,    73,    74,    75,    -1,    -1,   661,    -1,    -1,
-     602,    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,  1270,
-      -1,    -1,   651,    -1,    -1,   679,    -1,  1278,  1279,  1280,
-     479,    -1,    -1,    -1,  1491,  1492,   690,   108,   630,   110,
-      -1,   695,   696,   635,    -1,   699,    -1,   118,    -1,    -1,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,     0,    -1,
-      29,    30,    31,    -1,    -1,  1326,    -1,    -1,   732,    38,
-      39,   735,    -1,   712,    -1,    -1,    -1,    -1,    -1,   718,
-     744,    -1,    -1,   747,    -1,     0,   757,    -1,    -1,    31,
-      71,    -1,    73,    74,    75,    -1,    -1,    66,    -1,    -1,
-      -1,    82,    83,    -1,    73,    74,    -1,   771,   772,    -1,
-      -1,    -1,    -1,   777,    -1,    -1,    31,    -1,    -1,    -1,
-      -1,   723,    -1,    -1,    66,    -1,    -1,   108,    -1,   110,
-      -1,    -1,    -1,    -1,    -1,   737,    -1,   118,  1529,    -1,
-      -1,   110,    -1,   602,  1471,   114,  1473,    -1,    -1,   118,
-     814,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     824,    -1,    -1,   827,    -1,   829,   581,   582,   832,   833,
-     834,   630,    -1,    -1,    -1,   839,   635,    -1,    -1,    -1,
-      -1,  1508,    -1,  1510,    -1,   849,    71,    -1,    73,    74,
-      75,    -1,    -1,    -1,    -1,    -1,   611,    82,    83,   614,
-     615,    -1,   617,    -1,   619,   620,    -1,    -1,    -1,   624,
-     625,    -1,   154,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   108,    -1,    -1,  1553,    -1,  1555,   831,
-      -1,    -1,    -1,   118,   724,    -1,   726,   901,    -1,   154,
-      -1,  1568,  1569,   733,   734,    -1,    -1,   130,   738,    -1,
-      -1,    -1,   923,    -1,   893,    -1,   187,    -1,    -1,   923,
-     750,   900,    -1,   194,   723,   755,    -1,    -1,    10,    11,
-      12,    13,    14,    -1,    -1,    -1,    -1,    -1,   737,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   228,    -1,    -1,    -1,
-      -1,   781,    -1,   708,   709,   959,    38,    -1,   757,   714,
-      -1,    -1,    -1,   967,   968,    -1,    -1,   249,    -1,    -1,
-      -1,    -1,   254,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   985,    -1,    -1,    66,    -1,    -1,    -1,    -1,    71,
-      -1,    73,    74,    75,   249,   266,   826,    -1,    -1,   254,
-      82,    83,    -1,    -1,    -1,    -1,    25,    26,    27,    -1,
-      -1,    -1,    -1,   992,    -1,    -1,  1020,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,  1033,
-      -1,    -1,   831,    -1,  1038,  1039,   118,  1041,  1042,    -1,
-      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    -1,
-      -1,   322,    -1,   883,   884,   885,   886,  1061,   888,   330,
-      -1,    -1,   333,    -1,    -1,    -1,    -1,   349,    -1,    -1,
-      -1,    -1,    38,    -1,   904,    -1,    -1,    96,    -1,    98,
-      -1,  1023,    -1,    -1,    -1,    -1,    -1,    -1,   918,    -1,
-      -1,    -1,  1096,  1097,   349,    -1,    -1,    -1,  1102,    -1,
-      66,    -1,    -1,    -1,   123,    71,    -1,    73,    74,    75,
-      -1,    -1,    -1,  1092,    -1,    -1,    82,    83,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   396,    -1,   957,    -1,   400,
-      -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,   431,
-      -1,    -1,   118,    -1,   436,    -1,  1160,    -1,    -1,    -1,
-     179,   416,   444,    -1,    -1,    -1,    -1,   997,   187,    -1,
-     189,   190,    -1,    -1,  1004,   194,   431,   196,   197,  1009,
-      -1,   436,    -1,    -1,  1014,    -1,  1016,    -1,   470,   444,
-    1020,  1021,  1022,    -1,    -1,  1025,    -1,    -1,    -1,  1203,
-      -1,    -1,    -1,    -1,  1034,    -1,   488,    -1,   490,  1220,
-      -1,    -1,    -1,    -1,   485,   470,  1220,    -1,    -1,  1198,
-      -1,  1225,  1052,  1053,  1023,    -1,    -1,    -1,    10,    11,
-      12,    13,    14,   488,  1238,   490,  1240,    -1,    -1,    -1,
-    1244,    -1,    -1,    -1,    -1,    -1,    -1,   266,    -1,  1079,
-     532,    -1,  1082,    -1,    -1,    -1,    38,    -1,    -1,    -1,
-    1202,    -1,    -1,    -1,    -1,    -1,  1270,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1278,  1279,  1280,   532,    -1,    -1,
-      -1,    -1,    -1,    -1,    66,  1289,  1290,    -1,    -1,    71,
-    1120,    73,    74,    75,    -1,    -1,  1126,  1127,    -1,  1303,
-      82,    83,    -1,    -1,    -1,    -1,   577,   578,  1138,    -1,
-      -1,    -1,    -1,  1143,    -1,   597,  1146,    -1,  1148,    -1,
-      -1,  1151,  1326,    -1,    -1,    -1,   108,    -1,    -1,    -1,
-      -1,    -1,    -1,  1337,  1164,    -1,   118,    -1,    -1,    -1,
-      -1,    -1,   597,  1098,    -1,    -1,    -1,  1177,    -1,  1179,
-    1180,  1181,  1182,    -1,    -1,    -1,  1298,    -1,    -1,    -1,
-     642,   643,   644,    -1,    -1,  1195,    -1,  1197,    -1,    -1,
-      -1,  1201,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   661,
-      -1,    -1,    -1,    -1,    -1,  1396,    -1,   642,   643,   644,
-      -1,    -1,    -1,    -1,    -1,   666,    -1,   679,    -1,   670,
-    1230,  1231,    -1,  1202,    -1,    -1,   661,    -1,   690,    -1,
-    1414,    -1,     0,    -1,   696,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   679,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   703,    -1,    -1,   690,  1440,    -1,    -1,     0,
-      -1,   696,    -1,    31,    -1,     0,     1,    -1,    -1,    -1,
-     732,  1281,  1282,   735,    -1,    -1,    -1,    -1,    -1,  1463,
-      -1,  1291,    -1,    -1,    -1,    -1,  1470,  1222,    -1,    -1,
-      31,    -1,    -1,    -1,    -1,    -1,    31,   732,    66,    -1,
-     735,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     772,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1298,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    63,    -1,
-      -1,    66,    -1,  1343,    -1,    -1,    -1,   772,    -1,  1523,
-      -1,    -1,    -1,    -1,    -1,  1355,  1530,  1357,  1358,  1359,
-      -1,    -1,   814,    -1,    -1,    -1,    -1,    -1,    -1,  1369,
-      -1,    -1,   824,    -1,    -1,   827,    -1,   818,  1378,    -1,
-     832,    -1,   834,    -1,    -1,    -1,    -1,   839,    -1,   814,
-      -1,    -1,   581,   582,  1394,    -1,   154,    -1,    -1,   824,
-      -1,    -1,   827,    -1,    -1,    -1,    -1,   832,    -1,   834,
-      -1,    -1,    -1,    -1,   839,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   611,   154,    -1,   614,   615,    -1,   617,   154,
-     619,   620,    -1,    -1,    -1,   624,   625,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   901,
-    1450,  1451,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1463,    -1,    -1,    -1,    -1,    -1,    -1,
-    1470,    -1,    -1,    -1,    -1,    -1,   901,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     931,   249,    -1,    -1,   219,    -1,   254,    -1,    -1,    -1,
-      -1,    -1,    -1,  1503,    -1,    -1,    -1,  1507,    -1,    -1,
-      -1,    -1,    -1,    -1,   703,    -1,    -1,    -1,   249,   708,
-     709,    -1,    -1,   254,   249,   714,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   985,    -1,    -1,  1536,    -1,  1538,    -1,
-      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-     985,    29,    30,    31,    -1,    -1,  1566,  1567,    -1,  1010,
-      38,    39,    -1,    -1,  1574,  1575,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1026,  1038,  1039,    -1,  1041,
-    1042,   349,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
-      -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,  1061,
-      -1,    -1,    -1,  1038,  1039,    -1,  1041,  1042,   349,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,  1061,    -1,    29,    30,
-      31,    -1,   110,    -1,  1096,  1097,   114,    38,    -1,    -1,
-     118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   416,    -1,
-      -1,    -1,  1103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1096,  1097,   431,    -1,    66,    -1,    -1,   436,    -1,
-      71,    -1,    73,    74,    75,   416,   444,    -1,    -1,    -1,
-      -1,    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     431,    -1,    -1,    -1,    -1,   436,   431,    -1,  1160,    -1,
-      -1,    -1,   470,   444,    -1,    -1,    -1,   108,    -1,   110,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,
-     488,    -1,   490,    -1,    -1,  1160,    -1,    -1,    -1,   470,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1203,    -1,    -1,    -1,    -1,    -1,   488,    -1,   490,
-      -1,    -1,    -1,    -1,    -1,   490,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1225,   532,    -1,    -1,    -1,  1203,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1238,    -1,  1240,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1225,   532,    -1,    -1,    -1,    -1,    -1,   532,    -1,    -1,
-      -1,    -1,    -1,  1238,    -1,  1240,    -1,    -1,  1270,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1278,  1279,  1280,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1289,  1290,   597,
-      -1,    -1,    -1,    -1,    -1,  1270,    -1,    -1,    -1,    -1,
-      -1,  1303,    -1,  1278,  1279,  1280,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1289,  1290,   597,    -1,    -1,    -1,
-      -1,    -1,   597,    -1,  1326,    -1,    -1,    -1,  1303,    -1,
-      -1,    -1,    -1,    -1,   642,   643,   644,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1326,    -1,   661,    -1,    -1,    -1,    -1,    -1,  1098,
-      -1,   642,   643,   644,    -1,    -1,    -1,   642,   643,   644,
-      -1,   679,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     661,    -1,   690,    -1,    -1,    -1,   661,    -1,   696,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   679,     7,
-      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,   690,
-      -1,    -1,  1414,    -1,    -1,   696,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   732,    -1,    -1,   735,    36,    37,
-      38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1414,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   732,    -1,    -1,   735,    -1,    -1,    65,    66,    -1,
-     735,  1463,    -1,    71,   772,    -1,    -1,    75,  1470,    -1,
-      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
-      -1,    -1,    -1,  1222,    -1,    93,    -1,    -1,  1463,    -1,
-      -1,   772,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,
-     108,    -1,   110,    -1,    -1,    -1,   814,    -1,    -1,   117,
-     118,   119,   120,   121,   122,    -1,   824,    -1,    -1,   827,
-      -1,  1523,    -1,    -1,   832,    -1,   834,    -1,    -1,    -1,
-      -1,   839,    -1,   814,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   824,    -1,    -1,   827,    -1,  1523,    -1,
-      -1,   832,   827,   834,    -1,    -1,    -1,    -1,   839,   834,
-      -1,    -1,    -1,    -1,    -1,     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,    -1,   901,    29,    30,    31,    32,    -1,    -1,
-      35,    -1,    -1,    38,    39,    -1,    -1,    -1,    -1,    10,
-      11,    12,    13,    14,    -1,    10,    11,    12,    13,    14,
-     901,    -1,    -1,    -1,    -1,    -1,   901,    -1,    63,    -1,
-      -1,    66,    44,    68,    -1,    70,    71,    38,    73,    74,
-      75,    -1,    -1,    38,    -1,    -1,    -1,    82,    83,    -1,
-      -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
-      71,    66,    -1,   108,    75,   110,    71,   985,    -1,    -1,
-      75,    82,    83,   118,    -1,    -1,    -1,    82,    83,    -1,
-      -1,    -1,    -1,   968,    -1,    -1,    -1,   109,    -1,    -1,
-      -1,    -1,    -1,   115,   985,    -1,    -1,   108,    -1,    -1,
-     985,    -1,    -1,   108,    -1,    -1,    -1,   118,    -1,    -1,
-      -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
-    1038,  1039,   144,  1041,  1042,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   154,    -1,    -1,    -1,   158,    -1,    -1,    -1,
-      -1,    -1,    -1,  1061,    -1,    -1,    -1,  1038,  1039,    -1,
-    1041,  1042,    -1,    -1,    -1,    -1,  1041,  1042,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1061,    -1,    -1,    -1,    -1,    -1,  1061,    -1,  1096,  1097,
-      -1,    -1,    -1,    -1,    -1,   207,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   219,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1096,  1097,    -1,    -1,    -1,
-      -1,    36,    37,    -1,    39,   237,   238,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,   261,
-      65,    -1,  1160,    -1,    -1,    38,    71,   269,    -1,    -1,
-      75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,  1160,
-      -1,   293,    -1,    66,   296,    -1,    -1,    -1,    -1,    -1,
-      73,    74,    -1,   108,    -1,  1203,    -1,    -1,    -1,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1225,    -1,    -1,
-      -1,    -1,  1203,    -1,    -1,    -1,    -1,  1202,  1203,    -1,
-    1238,   343,  1240,    -1,    -1,   118,   348,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1225,    -1,    -1,    -1,    -1,    -1,
-    1225,    -1,    -1,    -1,    -1,    -1,    -1,  1238,    -1,  1240,
-      -1,    -1,  1270,    -1,    -1,    -1,    -1,    -1,    -1,  1244,
-    1278,  1279,  1280,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1289,  1290,    -1,    -1,    -1,    -1,    -1,    -1,  1270,
-      -1,    -1,    -1,    -1,    -1,  1303,    -1,  1278,  1279,  1280,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1289,  1290,
-      -1,    -1,   424,   425,  1289,  1290,    -1,    -1,  1326,   431,
-      -1,    -1,  1303,  1298,    -1,    -1,    -1,    -1,  1303,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     452,    -1,    -1,   455,    -1,  1326,    -1,    -1,    -1,   461,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   488,    -1,    -1,    -1,
-      63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   500,    -1,
-      73,    -1,    75,    -1,    77,    -1,    -1,    -1,    -1,    -1,
-     512,    84,   514,    -1,    -1,   517,  1414,   519,   520,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     532,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   115,  1414,   117,   118,   119,    -1,    -1,  1414,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1463,    -1,    43,    -1,    -1,
-      -1,    -1,  1470,    -1,    -1,  1440,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   585,    -1,   158,    -1,    -1,    -1,    -1,
-      -1,    -1,  1463,    -1,    -1,   597,    -1,   599,  1463,  1470,
-     602,    -1,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    99,    -1,  1523,   628,    -1,    -1,    -1,
-      -1,   633,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     642,   643,   644,    -1,    -1,    -1,   219,    -1,   221,   222,
-     223,    -1,  1523,    -1,    -1,    -1,    -1,    -1,  1523,   661,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,   155,
-      29,    30,    31,    -1,   257,    -1,    -1,    -1,   261,    38,
-      -1,    -1,    -1,   169,   696,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   277,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   717,   192,    66,    -1,    -1,
-      -1,    -1,    -1,    -1,    73,    74,    -1,    -1,    77,    -1,
-     206,    -1,    -1,   735,    -1,   737,    -1,    -1,    -1,   215,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,
-      -1,    -1,    -1,    -1,   327,    -1,    -1,    -1,    -1,   108,
-      -1,   110,    36,    37,    -1,    39,    -1,    -1,    -1,   118,
-     772,    -1,    -1,    -1,   250,   348,    -1,    -1,    -1,   255,
-     353,   354,    -1,    -1,    -1,    -1,    -1,    -1,   361,    -1,
-      -1,    65,   268,    -1,    -1,    -1,    -1,    71,   274,    -1,
-     276,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,   294,    93,
-      -1,    -1,    -1,    -1,    -1,   827,    -1,    -1,    -1,   831,
-      -1,   404,   834,    -1,   108,    -1,   110,    -1,    -1,   113,
-      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,   422,
-      -1,    -1,    -1,    -1,   427,    -1,   429,    -1,    -1,    -1,
-      -1,   337,    -1,    -1,    -1,    -1,   342,    -1,    -1,    -1,
-      -1,    -1,    -1,   446,    -1,    -1,   449,   450,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   465,    -1,   370,    -1,    -1,    -1,   374,   375,
-      -1,   377,    -1,    -1,    -1,    -1,   479,    -1,   384,   385,
-      -1,   387,   388,   486,   390,    -1,   392,    -1,    -1,    -1,
-      -1,    -1,    -1,     7,    -1,   927,    10,    11,    12,    13,
-      14,    -1,    -1,   409,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   442,   969,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   453,    -1,    -1,
-      -1,    65,    66,   985,    -1,    -1,    -1,    71,    -1,    -1,
-      -1,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
-     476,    85,    86,    -1,    -1,    -1,   482,    -1,    -1,    93,
-      -1,   487,    -1,    -1,    -1,    -1,    -1,    -1,  1020,    -1,
-      -1,    -1,    -1,    -1,   108,    -1,   110,    -1,    -1,   602,
-      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,  1041,
-    1042,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   524,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   630,   280,    -1,
-     282,   283,   635,    -1,   540,    -1,    -1,    -1,   290,   291,
-      -1,    -1,    -1,   295,   296,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   307,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,  1101,
-      -1,   577,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     586,    -1,    -1,    -1,    -1,    -1,    -1,   593,    -1,    -1,
-      -1,   343,   598,    -1,    65,    -1,    -1,    -1,    -1,    -1,
-      71,    -1,    -1,   609,    75,    -1,    -1,    78,    79,    80,
-      81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
-     723,    -1,    93,    -1,    -1,    -1,    -1,   379,  1160,    -1,
-      -1,    -1,    -1,    -1,   737,    -1,    -1,   108,    -1,   110,
-      -1,    -1,    -1,    -1,   650,   116,   117,   118,   119,   120,
-     121,   122,    -1,    -1,   757,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1202,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     686,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    -1,  1240,    -1,
-      -1,    -1,    -1,    38,    -1,   818,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   831,    -1,
-      -1,    -1,    -1,    -1,    -1,   741,    -1,    -1,    -1,    -1,
-      -1,    66,    -1,    -1,    -1,   751,   752,   850,    73,    74,
-      -1,    -1,    77,    -1,    -1,    -1,    -1,  1289,  1290,   765,
-      -1,    -1,    -1,    -1,    -1,    -1,  1298,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   782,    -1,   784,    -1,
-      -1,    -1,   788,   108,    -1,   110,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   556,   557,   558,   559,   560,   561,
-     562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
-     572,   573,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      36,    37,    -1,    39,   937,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   599,   854,    -1,
-      -1,    -1,    -1,    -1,    -1,   861,    -1,    -1,    -1,    65,
-     963,    -1,    -1,    -1,    -1,    71,    -1,    -1,   874,    75,
-     876,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
-      86,    -1,  1414,    -1,   890,    -1,    -1,    93,   991,    -1,
-      -1,   897,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   108,   909,   110,    -1,   912,    -1,    -1,   115,
-      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
-    1023,    -1,    -1,    -1,   930,    -1,    -1,    -1,    -1,    -1,
-      -1,  1034,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1472,    -1,  1474,    -1,    -1,    -1,   698,    -1,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    -1,    -1,   720,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    38,  1509,    -1,  1511,
-      -1,   733,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,    29,    30,    31,    66,    -1,    -1,  1539,    -1,    -1,
-      38,    -1,  1115,  1019,    -1,    77,    -1,    -1,    -1,   153,
-     154,    -1,    -1,    -1,    -1,    -1,    -1,   779,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
-      -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,    77,
-      -1,    -1,    -1,   187,    82,    83,    -1,    -1,    -1,   811,
-     194,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1075,
-      -1,    -1,    -1,    -1,   826,    -1,  1082,    -1,    -1,    -1,
-     108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     118,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,  1202,
-      -1,    -1,    -1,    -1,    -1,  1111,    -1,    -1,    -1,    -1,
-    1116,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1124,    -1,
-      65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,
-      75,    -1,   266,    78,    79,    80,    81,    82,    83,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,  1155,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1167,    -1,   108,  1170,   110,  1172,   112,   113,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
-    1186,  1187,    -1,    -1,    -1,    -1,    -1,    -1,   322,    -1,
-      -1,    -1,    -1,    -1,    -1,  1298,   330,   331,    -1,   333,
-     334,    -1,  1208,    -1,    -1,    -1,    -1,    -1,    -1,   343,
-      -1,    -1,    -1,   347,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   977,    -1,    -1,    -1,  1235,
-     144,    -1,   366,    -1,    -1,   369,    -1,    -1,    -1,    -1,
-     154,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   166,   167,    -1,    -1,  1008,    -1,    -1,    -1,
-      -1,    -1,   396,    -1,    -1,    -1,   400,    -1,  1020,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,   431,    -1,    -1,
-      -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,  1061,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     454,    -1,    -1,   237,    -1,    -1,  1332,    -1,  1334,    -1,
-      -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
-      -1,  1347,    -1,  1349,    -1,    -1,    -1,    -1,   262,    -1,
-      -1,   485,    -1,    -1,   488,    -1,    -1,    -1,    -1,    -1,
-      -1,  1367,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,   110,    -1,  1383,  1384,    -1,
-      -1,  1133,    -1,   118,    -1,    -1,    -1,    -1,    -1,  1395,
-      -1,    -1,  1398,    -1,   528,    -1,    -1,   531,   532,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1420,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1429,    -1,  1177,  1432,    -1,  1434,  1435,
-    1436,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1191,
-    1192,    -1,    -1,   577,   578,    -1,    -1,    -1,    -1,    -1,
-      -1,  1554,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   596,   597,   378,   599,    -1,    -1,    -1,    -1,
-    1476,    -1,  1478,    -1,   608,  1481,   610,   611,    -1,    -1,
-      -1,    -1,    -1,   617,    -1,    -1,    -1,    -1,    -1,    -1,
-    1496,    -1,    -1,   627,   628,    -1,    -1,    -1,    -1,   633,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   642,   643,
-     644,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   661,    -1,    -1,
-      -1,    -1,   666,   667,    -1,    -1,   670,   671,    -1,    -1,
-      -1,    -1,    -1,   677,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   695,   696,   697,    -1,   699,   480,    -1,    -1,   703,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,
-      -1,   735,   736,    -1,    -1,   519,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   532,    -1,
-      -1,    -1,    -1,    -1,    -1,   539,    -1,    66,   542,    -1,
-      -1,    -1,    -1,    -1,    73,    74,    -1,   771,   772,   553,
-     554,    -1,   776,   777,    -1,    -1,    -1,    -1,    -1,  1401,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   575,    -1,    -1,    -1,    -1,  1418,    -1,    -1,    -1,
-      -1,   585,    -1,    -1,    -1,    -1,    -1,    -1,   592,   118,
-      -1,    -1,    -1,   597,   818,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   827,    -1,    -1,    -1,    -1,    -1,   833,
-     834,    -1,    -1,    -1,   838,    -1,   840,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   647,    -1,    -1,    -1,    -1,    -1,  1491,
-    1492,    -1,   656,    -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,    -1,    -1,    29,    30,    31,    32,    -1,
-      -1,    35,   696,    -1,    38,    39,    -1,    -1,    -1,   923,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   931,    36,    37,
-      -1,    39,    -1,   937,    -1,    -1,    -1,    -1,    -1,    63,
-      -1,   945,    66,    -1,    68,    -1,    70,    71,    -1,    73,
-      74,    75,    -1,    -1,   958,   959,    -1,    65,    82,    83,
-      -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
-      -1,   985,    -1,    -1,   108,    93,   110,   991,   772,    -1,
-     774,    -1,    -1,    -1,   118,    -1,   780,    -1,    -1,    -1,
-     108,    -1,   110,   787,    -1,   113,  1010,  1011,    -1,   117,
-     118,   119,   120,   121,   122,    -1,  1020,    -1,    -1,    -1,
-      -1,    -1,  1026,  1027,    -1,  1029,  1030,  1031,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1041,  1042,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   831,   832,    -1,
-     834,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   849,    -1,    -1,    -1,    -1,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1102,  1103,
-    1104,    -1,    -1,    -1,    -1,   889,    -1,    -1,    -1,   893,
-      -1,  1115,    -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,
-      -1,    -1,    29,    30,    31,    32,    -1,    -1,    35,    36,
-      37,    38,    39,    40,    -1,    42,  1160,    -1,    45,    46,
-      47,    48,    49,    50,    51,    52,    -1,    -1,    -1,    56,
-      -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    66,
-      -1,    68,    -1,    70,    71,   969,    73,    74,    75,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
-      -1,   985,   986,    -1,    -1,    -1,    93,    -1,   992,    -1,
-      -1,    -1,    36,    37,   998,    39,  1220,  1001,    -1,  1003,
-      -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
-     117,   118,   119,   120,   121,   122,  1240,    -1,    -1,  1023,
-     127,    65,    -1,    -1,   131,    -1,    -1,    71,    -1,    -1,
-    1034,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
-      -1,    -1,  1056,    -1,  1058,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   108,  1289,  1290,    -1,    -1,  1073,
-    1074,    -1,    -1,   117,   118,   119,   120,   121,   122,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1094,    -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,    -1,    -1,    29,    30,    31,    32,    -1,    -1,
-      35,    36,    37,    38,    39,    -1,    -1,  1141,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      36,    37,    -1,    39,    -1,    -1,  1160,    -1,    -1,    -1,
-      65,    66,    -1,    68,    -1,    70,    71,    -1,    73,    74,
-      75,  1175,  1176,    78,    79,    80,    81,    82,    83,    65,
-      85,    86,    -1,    -1,    -1,    71,    -1,    -1,    93,    75,
-    1414,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
-      86,    -1,    -1,   108,    -1,   110,    -1,    93,    -1,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
-      -1,    -1,   108,    -1,   110,    -1,   131,    -1,    -1,    -1,
-      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1256,    -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,
-    1504,    -1,    29,    30,    31,    32,    -1,    -1,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1529,  1530,    -1,    -1,    -1,
-      -1,    -1,    -1,  1317,    -1,  1319,    -1,    -1,    65,    66,
-      -1,    68,    -1,    70,    71,    -1,    73,    74,    75,    -1,
-    1554,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
-      -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
-     117,   118,   119,   120,   121,   122,    -1,    -1,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,  1405,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
-      36,    37,    38,    39,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    65,
-      66,    -1,    68,    38,    70,    71,    -1,    73,    74,    75,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
-      86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
-      -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,
-      -1,    -1,   108,  1487,   110,    -1,    -1,    82,    83,   115,
-      -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,
-      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
-      37,    38,    39,    -1,    -1,  1539,    -1,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    -1,    65,    66,
-      -1,    68,    -1,    70,    71,    38,    73,    74,    75,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
-      -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
-      -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   108,    -1,   110,    77,    -1,    -1,    -1,   115,    -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,    -1,
-      -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,
-      38,    39,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    -1,    -1,    65,    66,    -1,
-      68,    38,    70,    71,    -1,    73,    74,    75,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
-      -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    66,
-      -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,
-     108,    -1,   110,    -1,    -1,    -1,    -1,   115,    -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,    -1,    -1,
-      29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,
-      39,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-      -1,    29,    30,    31,    -1,    -1,    65,    66,    -1,    68,
-      38,    70,    71,    -1,    73,    74,    75,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    -1,    85,    86,    -1,    -1,
-      -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    66,    -1,
-      -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,   108,
-      -1,   110,    -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,    -1,    -1,    29,
-      30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,    39,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    65,    66,    -1,    68,    38,
-      70,    71,    -1,    73,    74,    75,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,
-      -1,    -1,    -1,    93,    -1,    -1,    -1,    66,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,
-     110,    -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,    -1,    -1,    29,    30,
-      31,    -1,    -1,    -1,    -1,    36,    37,    38,    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,    65,    66,    -1,    68,    -1,    70,
-      71,    -1,    73,    74,    75,    -1,    -1,    78,    79,    80,
-      81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
-      -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,
-      -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,    -1,    -1,    29,    30,    31,
-      -1,    -1,    -1,    -1,    36,    37,    38,    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,    65,    66,    -1,    68,    -1,    70,    71,
-      -1,    73,    74,    75,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
-      -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,    -1,
-      -1,    -1,    -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,    -1,    -1,    29,    30,    31,
-      32,    -1,    -1,    35,    -1,    -1,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    63,    -1,    -1,    66,    -1,    68,    -1,    70,    71,
-      -1,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,
-      82,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,    -1,
-      -1,    -1,   114,    -1,    -1,    -1,   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,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
-      -1,    -1,    38,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
-      66,    38,    68,    -1,    70,    71,    -1,    73,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
-      -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,
-      -1,    -1,   108,    -1,   110,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   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,    29,
-      30,    31,    32,    -1,    -1,    35,    -1,    -1,    38,    -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,    -1,    68,    -1,
-      70,    -1,    -1,    73,    74,    -1,    -1,    77,    -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,    -1,    -1,    29,    30,    31,    32,    -1,
-     110,    35,    -1,    -1,    38,    -1,    -1,    -1,   118,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,
-      74,    -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,    -1,    -1,    29,    30,
-      31,    -1,    -1,    -1,    -1,    -1,   110,    38,    -1,    -1,
-      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,
-      -1,    -1,    73,    74,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
-      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,   110,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,
-      70,    71,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    83,    -1,    -1,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    29,    30,    31,   108,    -1,
-     110,    -1,    -1,    -1,    38,    -1,    -1,    -1,   118,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    66,    -1,    29,    30,    31,    71,    -1,    73,
-      74,    75,    -1,    38,    -1,    -1,    -1,    -1,    82,    83,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    -1,    68,   108,    70,   110,    -1,    73,    74,
-      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
-      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,
-      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    -1,    66,    -1,    68,    -1,
-      70,    38,    -1,    73,    74,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    66,
-      -1,    -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,
-     110,    -1,    -1,    -1,    -1,    82,    83,    -1,   118,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,   110,    29,    30,    31,    -1,    -1,    -1,
-      -1,   118,    -1,    38,    -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,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
-      -1,    -1,    -1,    -1,    38,   110,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,
-      74,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    -1,    38,   110,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,
-      73,    74,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
-      -1,    -1,    -1,    -1,    -1,    -1,    38,   110,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,
-      -1,    73,    74,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
-      37,    38,    39,    -1,    -1,    -1,    -1,    -1,   110,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    66,
-      -1,    -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
-      -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   108,    -1,   110,    -1,    -1,   113,    -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,    -1,    -1,    29,    30,    31,    -1,    -1,
-      -1,    -1,    36,    37,    38,    39,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    29,    30,    31,    -1,    -1,
-      -1,    65,    66,    -1,    38,    -1,    -1,    71,    -1,    73,
-      74,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
-      -1,    -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    73,
-      74,    75,    -1,    77,   108,    -1,   110,   111,    82,    83,
-      -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,   110,    -1,    29,    30,
-      31,    -1,    -1,    -1,   118,    36,    37,    38,    39,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
-      31,    -1,    -1,    -1,    65,    66,    -1,    38,    -1,    -1,
-      71,    -1,    73,    74,    75,    -1,    -1,    78,    79,    80,
-      81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
-      -1,    -1,    93,    -1,    -1,    66,    -1,    -1,    -1,    -1,
-      71,    -1,    73,    74,    -1,    -1,    -1,   108,   109,   110,
-      -1,    82,    83,    -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,   110,
-      -1,    29,    30,    31,    -1,    -1,    -1,   118,    36,    37,
-      38,    39,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-      -1,    29,    30,    31,    -1,    -1,    -1,    65,    66,    -1,
-      38,    39,    -1,    71,    -1,    73,    74,    75,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
-      -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    66,    -1,
-      -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,    -1,
-     108,    -1,   110,    -1,    -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,   110,    -1,    29,    30,    31,    -1,    -1,    -1,
-     118,    36,    37,    38,    39,    -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,
-      65,    66,    29,    30,    31,    -1,    71,    -1,    73,    74,
-      75,    38,    -1,    78,    79,    80,    81,    82,    83,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
-      -1,    -1,    -1,   108,    -1,   110,    73,    74,    -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,    -1,    -1,    29,    30,    31,
-      -1,   108,    -1,   110,    36,    37,    38,    39,    -1,    -1,
-      -1,   118,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    65,    66,    29,    30,    31,    -1,    71,
-      -1,    73,    74,    75,    38,    -1,    78,    79,    80,    81,
-      82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
-      -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    66,    -1,    -1,    -1,   108,    -1,   110,    73,
-      74,    -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,    -1,    -1,
-      29,    30,    31,    -1,   108,    -1,   110,    36,    37,    38,
-      39,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    65,    66,    29,    30,
-      31,    -1,    71,    -1,    73,    74,    75,    38,    39,    78,
-      79,    80,    81,    82,    83,    -1,    85,    86,    -1,    -1,
-      -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,   108,
-      -1,   110,    73,    74,    -1,    -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,    -1,   110,
-      29,    30,    31,   114,    -1,    -1,    -1,   118,    -1,    38,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
-      30,    31,    -1,    -1,    -1,    -1,    -1,    66,    38,    68,
-      -1,    70,    -1,    -1,    73,    74,    -1,    -1,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    -1,    66,    29,    30,    31,
-      -1,    71,    -1,    73,    74,    75,    38,    -1,    -1,    -1,
-      -1,    -1,    82,    83,   113,    -1,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    66,    29,    30,    31,   108,    71,
-     110,    73,    74,    75,    38,    -1,    -1,    -1,   118,    -1,
-      82,    83,    -1,    -1,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    -1,    66,    29,    30,    31,   108,    -1,   110,    73,
-      74,    -1,    38,    -1,    -1,    -1,   118,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      66,    -1,    -1,    -1,    -1,    38,   110,    73,    74,    -1,
-      -1,    -1,    -1,    -1,   118,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    66,    29,    30,    31,    -1,    -1,    -1,
-      73,    74,    -1,    38,   110,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    66,    29,    30,    31,    -1,    -1,   110,    73,    74,
-      -1,    38,    -1,    -1,    -1,   118,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    66,
-      -1,    -1,    -1,    -1,    38,   110,    73,    74,    -1,    -1,
-      -1,    -1,    -1,   118,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    -1,    66,    29,    30,    31,    -1,    -1,    -1,    73,
-      74,    -1,    38,   110,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-      66,    29,    30,    31,    -1,    -1,   110,    73,    74,    -1,
-      38,    -1,    -1,    -1,   118,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,    -1,    66,    -1,
-      -1,    -1,    -1,    38,   110,    73,    74,    -1,    -1,    -1,
-      -1,    -1,   118,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    66,    29,    30,    31,    -1,    -1,    -1,    73,    74,
-      -1,    38,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
-      -1,    -1,    -1,    -1,    -1,   110,    73,    74,    -1,    -1,
-      -1,    -1,    -1,   118,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
-      30,    31,    -1,   110,    -1,    -1,    -1,    -1,    38,    -1,
-      -1,   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,    66,    -1,    68,    -1,
-      70,    -1,    -1,    73,    74,    36,    37,    -1,    39,    40,
-      -1,    42,    -1,    -1,    45,    46,    47,    48,    49,    50,
-      51,    52,    -1,    -1,    55,    56,    -1,    -1,    -1,    60,
-      61,    -1,    63,    -1,    65,    -1,    -1,    -1,    -1,   109,
-      71,    -1,    -1,    -1,    75,    -1,    -1,    78,    79,    80,
-      81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
-      -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,
-      -1,    -1,   113,    -1,    -1,    -1,   117,   118,   119,   120,
-     121,   122,    -1,    -1,    -1,    -1,   127,    -1,    36,    37,
-     131,    39,    40,    -1,    42,    -1,    -1,    45,    46,    47,
-      48,    49,    50,    51,    52,    -1,    -1,    -1,    56,    -1,
-      -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,    -1,
-      -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
-      -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,   117,
-     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,   127,
-      -1,    36,    37,   131,    39,    40,    -1,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    -1,    -1,
-      55,    56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,
-      65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
-      75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   108,    -1,   110,    -1,    -1,   113,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
-      36,    37,   127,    39,    40,    -1,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    -1,    -1,    -1,
-      56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,
-      -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
-      86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,
-      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    36,
-      37,   127,    39,    40,    -1,    42,    -1,    -1,    45,    46,
-      47,    48,    49,    50,    51,    52,    -1,    -1,    -1,    56,
-      -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,
-      -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
-      -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
-     117,   118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,
-     127,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    -1,    38,    -1,    36,    37,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,
-      -1,    -1,    -1,    66,    -1,    68,    65,    70,    -1,    -1,
-      73,    74,    71,    -1,    -1,    -1,    75,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    65,    85,    86,    -1,    -1,
-      -1,    71,    95,    -1,    93,    75,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    -1,    85,    86,    -1,    -1,   108,
-      -1,   110,    -1,    93,    36,    37,    -1,    39,   117,   118,
-     119,   120,   121,   122,    -1,    -1,    -1,    -1,   108,    -1,
-     110,    -1,    -1,    36,    37,    -1,    39,   117,   118,   119,
-     120,   121,   122,    65,    -1,    -1,    -1,    -1,    -1,    71,
-      -1,    -1,    -1,    75,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    65,    85,    86,    -1,    -1,    -1,    71,    -1,
-      -1,    93,    75,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    -1,    85,    86,    -1,    -1,   108,    -1,   110,    -1,
-      93,    36,    37,    -1,    39,   117,   118,   119,   120,   121,
-     122,    -1,    -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
-      65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
-      75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   108,    -1,    -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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    38,    -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,    -1,    68,    -1,    70,    71,    -1,    73,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    82,    83,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
-      -1,    -1,    -1,    38,    -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,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    -1,    38,    -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,    -1,    68,    -1,    70,    -1,    -1,
-      73,    74,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
-      -1,    -1,    -1,    -1,    -1,    -1,    38,    -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,    -1,    68,    -1,    70,    -1,
-      -1,    73,    74
+      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
+      75
 };
 
@@ -4010,160 +4063,160 @@
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    29,    30,    31,    32,    35,
-      38,    39,    63,    66,    68,    70,    71,    73,    74,    75,
-      82,    83,   108,   110,   118,   136,   139,   196,   210,   211,
+      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,   119,   137,   140,   197,   211,
      212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   229,   230,   231,   232,
-     233,   234,   235,   236,   238,   239,   240,   241,   242,   243,
-     244,   252,   253,   279,   280,   281,   289,   292,   298,   299,
-     301,   303,   304,   310,   315,   319,   320,   321,   322,   323,
-     324,   325,   326,   346,   363,   364,   365,   366,    71,   118,
-     138,   139,   213,   215,   223,   225,   235,   239,   241,   280,
-      81,   108,   308,   309,   310,   308,   308,    71,    73,    74,
-      75,   137,   138,   269,   270,   290,   291,    73,    74,   270,
-     108,   301,    11,   197,   108,   118,   315,   320,   321,   322,
-     324,   325,   326,   111,   133,   110,   216,   223,   225,   319,
-     323,   362,   363,   366,   367,   134,   106,   130,   273,   113,
-     134,   171,    73,    74,   136,   268,   134,   134,   134,   115,
-     134,    73,    74,   108,   118,   305,   314,   315,   316,   317,
-     318,   319,   323,   327,   328,   329,   330,   331,   337,     3,
-      27,    77,   237,     3,     5,    73,   110,   118,   215,   226,
-     230,   233,   242,   281,   319,   323,   366,   213,   215,   225,
-     235,   239,   241,   280,   319,   323,    32,   231,   231,   226,
-     233,   134,   231,   226,   231,   226,    74,   108,   113,   270,
-     281,   113,   270,   231,   226,   115,   134,   134,     0,   133,
-     108,   171,   308,   308,   133,   110,   223,   225,   364,   268,
-     268,   225,   130,   108,   118,   305,   315,   319,   110,   118,
-     366,   302,   228,   310,   108,   286,   108,   108,    50,   108,
-      36,    37,    39,    65,    71,    75,    78,    79,    80,    81,
-      85,    86,    93,   108,   110,   117,   118,   119,   120,   121,
-     122,   135,   139,   140,   141,   142,   147,   148,   149,   150,
+     222,   223,   224,   225,   226,   227,   228,   230,   231,   232,
+     233,   234,   235,   236,   237,   239,   240,   241,   242,   243,
+     244,   245,   253,   254,   280,   281,   282,   290,   293,   299,
+     300,   302,   304,   305,   311,   316,   320,   321,   322,   323,
+     324,   325,   326,   327,   347,   364,   365,   366,   367,    72,
+     119,   139,   140,   214,   216,   224,   226,   236,   240,   242,
+     281,    82,   109,   309,   310,   311,   309,   309,    72,    74,
+      75,    76,   138,   139,   270,   271,   291,   292,    74,    75,
+     271,   109,   302,    11,   198,   109,   119,   316,   321,   322,
+     323,   325,   326,   327,   112,   134,   111,   217,   224,   226,
+     320,   324,   363,   364,   367,   368,   135,   107,   131,   274,
+     114,   135,   172,    74,    75,   137,   269,   135,   135,   135,
+     116,   135,    74,    75,   109,   119,   306,   315,   316,   317,
+     318,   319,   320,   324,   328,   329,   330,   331,   332,   338,
+       3,    28,    78,   238,     3,     5,    74,   111,   119,   216,
+     227,   231,   234,   243,   282,   320,   324,   367,   214,   216,
+     226,   236,   240,   242,   281,   320,   324,    33,   232,   232,
+     227,   234,   135,   232,   227,   232,   227,    75,   109,   114,
+     271,   282,   114,   271,   232,   227,   116,   135,   135,     0,
+     134,   109,   172,   309,   309,   134,   111,   224,   226,   365,
+     269,   269,   226,   131,   109,   119,   306,   316,   320,   111,
+     119,   367,   303,   229,   311,   109,   287,   109,   109,    51,
+     109,    37,    38,    40,    66,    72,    76,    79,    80,    81,
+      82,    86,    87,    94,   109,   111,   118,   119,   120,   121,
+     122,   123,   136,   140,   141,   142,   143,   148,   149,   150,
      151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     162,   164,   223,   272,   288,   362,   367,   225,   109,   109,
-     109,   109,   109,   109,   109,    73,    74,   110,   223,   268,
-     346,   364,   110,   118,   162,   215,   216,   222,   225,   229,
-     230,   235,   238,   239,   241,   258,   259,   263,   264,   265,
-     266,   280,   346,   358,   359,   360,   361,   366,   367,   111,
-     108,   319,   323,   366,   108,   115,   131,   110,   113,   118,
-     162,   274,   274,   114,   133,   115,   131,   108,   115,   131,
-     115,   131,   115,   131,   308,   131,   315,   316,   317,   318,
-     328,   329,   330,   331,   225,   314,   327,    63,   307,   110,
-     308,   345,   346,   308,   308,   171,   133,   108,   308,   345,
-     308,   308,   225,   305,   108,   108,   224,   225,   223,   225,
-     111,   133,   223,   362,   367,   171,   133,   268,   273,   215,
-     230,   319,   323,   171,   133,   290,   225,   235,   131,   225,
-     225,   288,    39,   110,   223,   245,   246,   247,   248,   362,
-     366,   113,   254,   270,   113,   225,   290,   131,   131,   301,
-     133,   138,   267,     3,   134,   205,   206,   220,   222,   225,
-     133,   307,   108,   307,   162,   315,   225,   108,   133,   268,
-     113,    32,    33,    34,   223,   282,   283,   285,   133,   128,
-     130,   287,   133,   226,   232,   233,   268,   311,   312,   313,
-     108,   140,   108,   147,   108,   147,   149,   108,   147,   108,
-     108,   147,   147,   138,   110,   162,   167,   171,   223,   271,
-     362,   111,   133,   149,   149,    81,    84,    85,    86,   108,
-     110,   112,   113,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   130,   166,   149,   118,   123,   124,   120,
-     121,    87,    88,    89,    90,   125,   126,    91,    92,   119,
-     127,   128,    93,    94,   129,   130,   369,   108,   118,   341,
-     342,   343,   344,   345,   109,   115,   108,   345,   346,   108,
-     345,   346,   133,   108,   223,   364,   111,   133,   110,   118,
-     134,   223,   225,   357,   358,   366,   367,   134,   108,   110,
-     118,   315,   332,   333,   334,   335,   336,   337,   338,   339,
-     340,   346,   347,   348,   349,   350,   351,   352,   118,   366,
-     225,   134,   134,   118,   223,   225,   359,   268,   223,   346,
-     359,   268,   108,   133,   133,   133,   111,   133,    71,    79,
-     110,   112,   139,   270,   274,   275,   276,   277,   278,   133,
-     133,   133,   133,   133,   133,   305,   109,   109,   109,   109,
-     109,   109,   109,   314,   327,   108,   273,   111,   205,   133,
-     305,   167,   272,   167,   272,   305,   110,   205,   307,   171,
-     133,   205,   109,   247,   248,   111,   133,   108,   116,   118,
-     249,   251,   314,   315,   327,   345,   353,   354,   355,   356,
-     114,   246,   115,   131,   115,   131,   270,   245,   115,   368,
-     130,   255,   254,   225,   260,   261,   262,   265,   266,   109,
-     115,   171,   133,   118,   162,   133,   222,   225,   259,   358,
-     366,   299,   300,   108,   118,   332,   109,   115,   369,   270,
-     282,   108,   113,   270,   272,   282,   109,   115,   108,   140,
-     109,   116,   271,   271,   271,   110,   138,   144,   162,   272,
-     271,   111,   133,   109,   115,   109,   108,   118,   353,   109,
-     115,   162,   110,   138,   110,   143,   144,   133,   110,   138,
-     143,   162,   162,   149,   149,   149,   150,   150,   151,   151,
-     152,   152,   152,   152,   153,   153,   154,   155,   156,   157,
-     158,   116,   167,   162,   133,   342,   343,   344,   225,   341,
-     308,   308,   162,   272,   133,   267,   118,   133,   223,   346,
-     359,   225,   229,   111,   133,   111,   366,   111,   108,   133,
-     315,   333,   334,   335,   338,   348,   349,   350,   111,   133,
-     225,   332,   336,   347,   108,   308,   351,   369,   308,   308,
-     369,   108,   308,   351,   308,   308,   308,   308,   346,   223,
-     357,   367,   268,   111,   115,   111,   115,   369,   223,   359,
-     369,   256,   257,   258,   259,   256,   256,   268,   162,   133,
-     110,   270,   116,   115,   368,   274,    79,   110,   116,   278,
-      28,   207,   208,   268,   256,   138,   305,   138,   307,   108,
-     345,   346,   108,   345,   346,   140,   346,   171,   260,   109,
-     109,   109,   109,   111,   171,   205,   171,   113,   131,   131,
-     110,   315,   354,   355,   356,   160,   161,   225,   353,   250,
-     251,   250,   308,   308,   270,   308,   114,   270,   114,   161,
-     368,   134,   134,   138,   220,   134,   134,   256,   108,   118,
-     366,   134,   114,   225,   283,   284,   134,   133,   133,   108,
-     134,   109,   312,   167,   168,   116,   131,   110,   140,   198,
-     199,   200,   109,   115,   109,   133,   116,   109,   109,   109,
-     162,   225,   113,   149,   164,   162,   163,   165,   115,   134,
-     133,   133,   109,   115,   162,   133,   114,   160,   116,   260,
-     109,   109,   109,   341,   260,   109,   256,   223,   359,   110,
-     118,   162,   162,   225,   338,   260,   109,   109,   109,   109,
-     109,   109,   109,     7,   225,   332,   336,   347,   133,   133,
-     369,   133,   133,   109,   134,   134,   134,   134,   273,   134,
-     160,   161,   162,   306,   133,   274,   276,   114,   133,   209,
-     270,    39,    40,    42,    45,    46,    47,    48,    49,    50,
-      51,    52,    56,    60,    61,   110,   127,   138,   168,   169,
-     170,   171,   172,   173,   175,   176,   188,   190,   191,   196,
-     210,   304,    28,   134,   130,   273,   133,   133,   109,   134,
-     171,   245,   111,   109,   109,   109,   353,   249,   255,   114,
-     109,   115,   111,   111,   134,   225,   115,   369,   286,   109,
-     282,   213,   215,   223,   294,   295,   296,   297,   288,   109,
-     109,   116,   161,   108,   109,   116,   115,   138,   162,   162,
-     275,   115,   134,   165,   111,   138,   145,   146,   162,   144,
-     134,   145,   160,   164,   134,   108,   345,   346,   134,   134,
-     133,   134,   134,   134,   162,   109,   134,   108,   345,   346,
-     108,   351,   108,   351,   346,   224,     7,   118,   134,   162,
-     260,   260,   259,   263,   263,   264,   115,   115,   109,   109,
-     111,    95,   122,   134,   134,   145,   274,   162,   115,   131,
-     210,   214,   225,   229,   108,   108,   169,   108,   108,   131,
-     138,   131,   138,   118,   138,   168,   108,   171,   163,   163,
-     111,   142,   116,   131,   134,   133,   134,   209,   109,   162,
-     260,   260,   308,   109,   114,   108,   345,   346,   133,   109,
-     133,   134,   305,   114,   133,   134,   134,   109,   113,   198,
-     111,   161,   131,   198,   200,   109,   115,   134,   368,   163,
-     111,   134,    84,   112,   115,   134,   134,   111,   134,   109,
-     133,   109,   109,   111,   111,   111,   134,   109,   133,   133,
-     133,   162,   162,   134,   111,   134,   134,   134,   134,   133,
-     133,   161,   161,   111,   111,   134,   134,   270,   225,   167,
-     167,    46,   167,   133,   131,   131,   167,   131,   131,   167,
-      57,    58,    59,   192,   193,   194,   131,    62,   131,   113,
-     308,   173,   114,   131,   134,   134,   133,    95,   265,   266,
-     109,   295,   115,   131,   115,   131,   114,   293,   116,   140,
-     109,   109,   116,   165,   111,   114,   111,   110,   146,   110,
-     146,   146,   111,   111,   111,   260,   111,   260,   260,   260,
-     134,   134,   111,   111,   109,   109,   111,   115,    95,   259,
-      95,   134,   111,   111,   109,   109,   108,   109,   168,   189,
-     210,   131,   109,   108,   108,   171,   194,    57,    58,   162,
-     143,   169,   109,   109,   260,   113,   133,   133,   294,   140,
-     201,   108,   131,   201,   134,   116,   133,   133,   134,   134,
-     134,   134,   111,   111,   133,   134,   111,   169,    43,    44,
-     113,   179,   180,   181,   167,   169,   134,   109,   168,   113,
-     181,    95,   133,    95,   133,   108,   108,   131,   114,   134,
-     133,   268,   305,   114,   115,   116,   161,   109,   111,   162,
-     145,   145,   109,   109,   109,   109,   263,    41,   161,   177,
-     178,   306,   116,   133,   169,   179,   109,   131,   169,   131,
-     133,   109,   133,   109,   133,    95,   133,    95,   133,   131,
-     109,   294,   140,   138,   202,   109,   131,   116,   134,   134,
-     169,    95,   115,   116,   134,   203,   204,   210,   131,   168,
-     168,   203,   171,   195,   223,   362,   171,   195,   109,   133,
-     109,   133,   114,   109,   115,   162,   111,   111,   161,   177,
-     180,   182,   183,   133,   131,   180,   184,   185,   134,   108,
-     118,   305,   353,   138,   134,   171,   195,   171,   195,   108,
-     131,   138,   169,   174,   114,   180,   210,   168,    55,   174,
-     187,   114,   180,   109,   225,   109,   134,   134,   288,   169,
-     174,   131,   186,   187,   174,   187,   171,   171,   109,   109,
-     109,   186,   134,   134,   171,   171,   134,   134
+     161,   163,   165,   224,   273,   289,   363,   368,   226,   110,
+     110,   110,   110,   110,   110,   110,    74,    75,   111,   224,
+     269,   347,   365,   111,   119,   163,   216,   217,   223,   226,
+     230,   231,   236,   239,   240,   242,   259,   260,   264,   265,
+     266,   267,   281,   347,   359,   360,   361,   362,   367,   368,
+     112,   109,   320,   324,   367,   109,   116,   132,   111,   114,
+     119,   163,   275,   275,   115,   134,   116,   132,   109,   116,
+     132,   116,   132,   116,   132,   309,   132,   316,   317,   318,
+     319,   329,   330,   331,   332,   226,   315,   328,    64,   308,
+     111,   309,   346,   347,   309,   309,   172,   134,   109,   309,
+     346,   309,   309,   226,   306,   109,   109,   225,   226,   224,
+     226,   112,   134,   224,   363,   368,   172,   134,   269,   274,
+     216,   231,   320,   324,   172,   134,   291,   226,   236,   132,
+     226,   226,   289,    40,   111,   224,   246,   247,   248,   249,
+     363,   367,   114,   255,   271,   114,   226,   291,   132,   132,
+     302,   134,   139,   268,     3,   135,   206,   207,   221,   223,
+     226,   134,   308,   109,   308,   163,   316,   226,   109,   134,
+     269,   114,    33,    34,    35,   224,   283,   284,   286,   134,
+     129,   131,   288,   134,   227,   233,   234,   269,   312,   313,
+     314,   109,   141,   109,   148,   109,   148,   150,   109,   148,
+     109,   109,   148,   148,   139,   111,   163,   168,   172,   224,
+     272,   363,   112,   134,   150,   150,    82,    85,    86,    87,
+     109,   111,   113,   114,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   131,   167,   150,   119,   124,   125,
+     121,   122,    88,    89,    90,    91,   126,   127,    92,    93,
+     120,   128,   129,    94,    95,   130,   131,   370,   109,   119,
+     342,   343,   344,   345,   346,   110,   116,   109,   346,   347,
+     109,   346,   347,   134,   109,   224,   365,   112,   134,   111,
+     119,   135,   224,   226,   358,   359,   367,   368,   135,   109,
+     111,   119,   316,   333,   334,   335,   336,   337,   338,   339,
+     340,   341,   347,   348,   349,   350,   351,   352,   353,   119,
+     367,   226,   135,   135,   119,   224,   226,   360,   269,   224,
+     347,   360,   269,   109,   134,   134,   134,   112,   134,    72,
+      80,   111,   113,   140,   271,   275,   276,   277,   278,   279,
+     134,   134,   134,   134,   134,   134,   306,   110,   110,   110,
+     110,   110,   110,   110,   315,   328,   109,   274,   112,   206,
+     134,   306,   168,   273,   168,   273,   306,   111,   206,   308,
+     172,   134,   206,   110,   248,   249,   112,   134,   109,   117,
+     119,   250,   252,   315,   316,   328,   346,   354,   355,   356,
+     357,   115,   247,   116,   132,   116,   132,   271,   246,   116,
+     369,   131,   256,   255,   226,   261,   262,   263,   266,   267,
+     110,   116,   172,   134,   119,   163,   134,   223,   226,   260,
+     359,   367,   300,   301,   109,   119,   333,   110,   116,   370,
+     271,   283,   109,   114,   271,   273,   283,   110,   116,   109,
+     141,   110,   117,   272,   272,   272,   111,   139,   145,   163,
+     273,   272,   112,   134,   110,   116,   110,   109,   119,   354,
+     110,   116,   163,   111,   139,   111,   144,   145,   134,   111,
+     139,   144,   163,   163,   150,   150,   150,   151,   151,   152,
+     152,   153,   153,   153,   153,   154,   154,   155,   156,   157,
+     158,   159,   117,   168,   163,   134,   343,   344,   345,   226,
+     342,   309,   309,   163,   273,   134,   268,   119,   134,   224,
+     347,   360,   226,   230,   112,   134,   112,   367,   112,   109,
+     134,   316,   334,   335,   336,   339,   349,   350,   351,   112,
+     134,   226,   333,   337,   348,   109,   309,   352,   370,   309,
+     309,   370,   109,   309,   352,   309,   309,   309,   309,   347,
+     224,   358,   368,   269,   112,   116,   112,   116,   370,   224,
+     360,   370,   257,   258,   259,   260,   257,   257,   269,   163,
+     134,   111,   271,   117,   116,   369,   275,    80,   111,   117,
+     279,    29,   208,   209,   269,   257,   139,   306,   139,   308,
+     109,   346,   347,   109,   346,   347,   141,   347,   172,   261,
+     110,   110,   110,   110,   112,   172,   206,   172,   114,   132,
+     132,   111,   316,   355,   356,   357,   161,   162,   226,   354,
+     251,   252,   251,   309,   309,   271,   309,   115,   271,   115,
+     162,   369,   135,   135,   139,   221,   135,   135,   257,   109,
+     119,   367,   135,   115,   226,   284,   285,   135,   134,   134,
+     109,   135,   110,   313,   168,   169,   117,   132,   111,   141,
+     199,   200,   201,   110,   116,   110,   134,   117,   110,   110,
+     110,   163,   226,   114,   150,   165,   163,   164,   166,   116,
+     135,   134,   134,   110,   116,   163,   134,   115,   161,   117,
+     261,   110,   110,   110,   342,   261,   110,   257,   224,   360,
+     111,   119,   163,   163,   226,   339,   261,   110,   110,   110,
+     110,   110,   110,   110,     7,   226,   333,   337,   348,   134,
+     134,   370,   134,   134,   110,   135,   135,   135,   135,   274,
+     135,   161,   162,   163,   307,   134,   275,   277,   115,   134,
+     210,   271,    40,    41,    43,    46,    47,    48,    49,    50,
+      51,    52,    53,    57,    61,    62,   111,   128,   139,   169,
+     170,   171,   172,   173,   174,   176,   177,   189,   191,   192,
+     197,   211,   305,    29,   135,   131,   274,   134,   134,   110,
+     135,   172,   246,   112,   110,   110,   110,   354,   250,   256,
+     115,   110,   116,   112,   112,   135,   226,   116,   370,   287,
+     110,   283,   214,   216,   224,   295,   296,   297,   298,   289,
+     110,   110,   117,   162,   109,   110,   117,   116,   139,   163,
+     163,   276,   116,   135,   166,   112,   139,   146,   147,   163,
+     145,   135,   146,   161,   165,   135,   109,   346,   347,   135,
+     135,   134,   135,   135,   135,   163,   110,   135,   109,   346,
+     347,   109,   352,   109,   352,   347,   225,     7,   119,   135,
+     163,   261,   261,   260,   264,   264,   265,   116,   116,   110,
+     110,   112,    96,   123,   135,   135,   146,   275,   163,   116,
+     132,   211,   215,   226,   230,   109,   109,   170,   109,   109,
+     132,   139,   132,   139,   119,   139,   169,   109,   172,   164,
+     164,   112,   143,   117,   132,   135,   134,   135,   210,   110,
+     163,   261,   261,   309,   110,   115,   109,   346,   347,   134,
+     110,   134,   135,   306,   115,   134,   135,   135,   110,   114,
+     199,   112,   162,   132,   199,   201,   110,   116,   135,   369,
+     164,   112,   135,    85,   113,   116,   135,   135,   112,   135,
+     110,   134,   110,   110,   112,   112,   112,   135,   110,   134,
+     134,   134,   163,   163,   135,   112,   135,   135,   135,   135,
+     134,   134,   162,   162,   112,   112,   135,   135,   271,   226,
+     168,   168,    47,   168,   134,   132,   132,   168,   132,   132,
+     168,    58,    59,    60,   193,   194,   195,   132,    63,   132,
+     114,   309,   174,   115,   132,   135,   135,   134,    96,   266,
+     267,   110,   296,   116,   132,   116,   132,   115,   294,   117,
+     141,   110,   110,   117,   166,   112,   115,   112,   111,   147,
+     111,   147,   147,   112,   112,   112,   261,   112,   261,   261,
+     261,   135,   135,   112,   112,   110,   110,   112,   116,    96,
+     260,    96,   135,   112,   112,   110,   110,   109,   110,   169,
+     190,   211,   132,   110,   109,   109,   172,   195,    58,    59,
+     163,   144,   170,   110,   110,   261,   114,   134,   134,   295,
+     141,   202,   109,   132,   202,   135,   117,   134,   134,   135,
+     135,   135,   135,   112,   112,   134,   135,   112,   170,    44,
+      45,   114,   180,   181,   182,   168,   170,   135,   110,   169,
+     114,   182,    96,   134,    96,   134,   109,   109,   132,   115,
+     135,   134,   269,   306,   115,   116,   117,   162,   110,   112,
+     163,   146,   146,   110,   110,   110,   110,   264,    42,   162,
+     178,   179,   307,   117,   134,   170,   180,   110,   132,   170,
+     132,   134,   110,   134,   110,   134,    96,   134,    96,   134,
+     132,   110,   295,   141,   139,   203,   110,   132,   117,   135,
+     135,   170,    96,   116,   117,   135,   204,   205,   211,   132,
+     169,   169,   204,   172,   196,   224,   363,   172,   196,   110,
+     134,   110,   134,   115,   110,   116,   163,   112,   112,   162,
+     178,   181,   183,   184,   134,   132,   181,   185,   186,   135,
+     109,   119,   306,   354,   139,   135,   172,   196,   172,   196,
+     109,   132,   139,   170,   175,   115,   181,   211,   169,    56,
+     175,   188,   115,   181,   110,   226,   110,   135,   135,   289,
+     170,   175,   132,   187,   188,   175,   188,   172,   172,   110,
+     110,   110,   187,   135,   135,   172,   172,   135,   135
 };
 
@@ -5002,5 +5055,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 290 "parser.yy"
+#line 291 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -5011,5 +5064,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 296 "parser.yy"
+#line 297 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -5020,5 +5073,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 305 "parser.yy"
+#line 306 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5027,5 +5080,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 306 "parser.yy"
+#line 307 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5034,5 +5087,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 307 "parser.yy"
+#line 308 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5041,5 +5094,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 332 "parser.yy"
+#line 333 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5048,5 +5101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 333 "parser.yy"
+#line 334 "parser.yy"
     { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -5055,5 +5108,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 340 "parser.yy"
+#line 341 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5062,5 +5115,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 342 "parser.yy"
+#line 343 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5069,5 +5122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 344 "parser.yy"
+#line 345 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5076,5 +5129,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 346 "parser.yy"
+#line 347 "parser.yy"
     { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
     break;
@@ -5083,5 +5136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 356 "parser.yy"
+#line 357 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
     break;
@@ -5090,5 +5143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 358 "parser.yy"
+#line 359 "parser.yy"
     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5097,5 +5150,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 362 "parser.yy"
+#line 363 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     break;
@@ -5104,5 +5157,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 365 "parser.yy"
+#line 366 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     break;
@@ -5111,5 +5164,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 368 "parser.yy"
+#line 369 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
     break;
@@ -5118,5 +5171,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 370 "parser.yy"
+#line 371 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
     break;
@@ -5125,5 +5178,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 372 "parser.yy"
+#line 373 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5132,5 +5185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 374 "parser.yy"
+#line 375 "parser.yy"
     {
 			Token fn; fn.str = new std::string( "?{}" ); // location undefined
@@ -5142,5 +5195,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 383 "parser.yy"
+#line 384 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5149,5 +5202,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 388 "parser.yy"
+#line 389 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5156,5 +5209,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 391 "parser.yy"
+#line 392 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
     break;
@@ -5163,5 +5216,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 396 "parser.yy"
+#line 397 "parser.yy"
     { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
     break;
@@ -5170,5 +5223,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 398 "parser.yy"
+#line 399 "parser.yy"
     { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
     break;
@@ -5177,5 +5230,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 403 "parser.yy"
+#line 404 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5184,5 +5237,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 408 "parser.yy"
+#line 409 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5191,5 +5244,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 412 "parser.yy"
+#line 413 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5198,5 +5251,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 414 "parser.yy"
+#line 415 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     break;
@@ -5205,5 +5258,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 416 "parser.yy"
+#line 417 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5212,5 +5265,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 418 "parser.yy"
+#line 419 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     break;
@@ -5219,5 +5272,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 426 "parser.yy"
+#line 427 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -5226,5 +5279,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 428 "parser.yy"
+#line 429 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -5233,5 +5286,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 430 "parser.yy"
+#line 431 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5240,5 +5293,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 432 "parser.yy"
+#line 433 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5247,5 +5300,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 434 "parser.yy"
+#line 435 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -5254,5 +5307,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 436 "parser.yy"
+#line 437 "parser.yy"
     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5261,5 +5314,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 438 "parser.yy"
+#line 439 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5268,5 +5321,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 440 "parser.yy"
+#line 441 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5275,5 +5328,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 446 "parser.yy"
+#line 447 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5282,5 +5335,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 448 "parser.yy"
+#line 449 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     break;
@@ -5289,5 +5342,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 450 "parser.yy"
+#line 451 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }
     break;
@@ -5296,5 +5349,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 452 "parser.yy"
+#line 453 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
     break;
@@ -5303,5 +5356,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 454 "parser.yy"
+#line 455 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     break;
@@ -5310,5 +5363,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 456 "parser.yy"
+#line 457 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5317,5 +5370,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 458 "parser.yy"
+#line 459 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5324,5 +5377,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 460 "parser.yy"
+#line 461 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5331,5 +5384,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 462 "parser.yy"
+#line 463 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true ) ); }
     break;
@@ -5338,5 +5391,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 466 "parser.yy"
+#line 467 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
     break;
@@ -5345,5 +5398,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 467 "parser.yy"
+#line 468 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
     break;
@@ -5352,5 +5405,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 468 "parser.yy"
+#line 469 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
     break;
@@ -5359,5 +5412,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 469 "parser.yy"
+#line 470 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
     break;
@@ -5366,5 +5419,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 475 "parser.yy"
+#line 476 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5373,5 +5426,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 477 "parser.yy"
+#line 478 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5380,5 +5433,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 483 "parser.yy"
+#line 484 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5387,5 +5440,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 485 "parser.yy"
+#line 486 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5394,5 +5447,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 487 "parser.yy"
+#line 488 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5401,5 +5454,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 493 "parser.yy"
+#line 494 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5408,5 +5461,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 495 "parser.yy"
+#line 496 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5415,5 +5468,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 501 "parser.yy"
+#line 502 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5422,5 +5475,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 503 "parser.yy"
+#line 504 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5429,5 +5482,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 509 "parser.yy"
+#line 510 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5436,5 +5489,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 511 "parser.yy"
+#line 512 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5443,5 +5496,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 513 "parser.yy"
+#line 514 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5450,5 +5503,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 515 "parser.yy"
+#line 516 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5457,5 +5510,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 521 "parser.yy"
+#line 522 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5464,5 +5517,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 523 "parser.yy"
+#line 524 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5471,5 +5524,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 529 "parser.yy"
+#line 530 "parser.yy"
     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5478,5 +5531,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 535 "parser.yy"
+#line 536 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5485,5 +5538,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 541 "parser.yy"
+#line 542 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5492,5 +5545,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 547 "parser.yy"
+#line 548 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5499,5 +5552,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 553 "parser.yy"
+#line 554 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5506,5 +5559,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 559 "parser.yy"
+#line 560 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     break;
@@ -5513,5 +5566,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 561 "parser.yy"
+#line 562 "parser.yy"
     { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5520,5 +5573,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 563 "parser.yy"
+#line 564 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     break;
@@ -5527,5 +5580,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 574 "parser.yy"
+#line 575 "parser.yy"
     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5534,5 +5587,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 576 "parser.yy"
+#line 577 "parser.yy"
     { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5541,5 +5594,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 578 "parser.yy"
+#line 579 "parser.yy"
     { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5548,5 +5601,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 583 "parser.yy"
+#line 584 "parser.yy"
     { (yyval.en) = new NullExprNode; }
     break;
@@ -5555,5 +5608,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 591 "parser.yy"
+#line 592 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
     break;
@@ -5562,5 +5615,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 593 "parser.yy"
+#line 594 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
     break;
@@ -5569,5 +5622,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 595 "parser.yy"
+#line 596 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
     break;
@@ -5576,5 +5629,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 597 "parser.yy"
+#line 598 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5583,5 +5636,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 603 "parser.yy"
+#line 604 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5590,5 +5643,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 607 "parser.yy"
+#line 608 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
     break;
@@ -5597,5 +5650,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 608 "parser.yy"
+#line 609 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
     break;
@@ -5604,5 +5657,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 609 "parser.yy"
+#line 610 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
     break;
@@ -5611,5 +5664,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 610 "parser.yy"
+#line 611 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
     break;
@@ -5618,5 +5671,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 611 "parser.yy"
+#line 612 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
     break;
@@ -5625,5 +5678,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 612 "parser.yy"
+#line 613 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
     break;
@@ -5632,5 +5685,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 613 "parser.yy"
+#line 614 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
     break;
@@ -5639,5 +5692,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 614 "parser.yy"
+#line 615 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
     break;
@@ -5646,5 +5699,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 615 "parser.yy"
+#line 616 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
     break;
@@ -5653,5 +5706,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 616 "parser.yy"
+#line 617 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
     break;
@@ -5660,5 +5713,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 622 "parser.yy"
+#line 623 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5667,5 +5720,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 627 "parser.yy"
+#line 628 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5674,5 +5727,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 636 "parser.yy"
+#line 637 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
@@ -5681,5 +5734,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 643 "parser.yy"
+#line 644 "parser.yy"
     {
 			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
@@ -5692,5 +5745,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 652 "parser.yy"
+#line 653 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5701,5 +5754,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 659 "parser.yy"
+#line 660 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
     break;
@@ -5708,5 +5761,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 666 "parser.yy"
+#line 667 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
     break;
@@ -5715,5 +5768,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 672 "parser.yy"
+#line 673 "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;
@@ -5722,5 +5775,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 677 "parser.yy"
+#line 678 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5729,5 +5782,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 679 "parser.yy"
+#line 680 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -5736,5 +5789,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 681 "parser.yy"
+#line 682 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5743,5 +5796,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 688 "parser.yy"
+#line 689 "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;
@@ -5750,5 +5803,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 693 "parser.yy"
+#line 694 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
     break;
@@ -5757,5 +5810,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 699 "parser.yy"
+#line 700 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5764,5 +5817,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 701 "parser.yy"
+#line 702 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
     break;
@@ -5771,5 +5824,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 703 "parser.yy"
+#line 704 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5778,5 +5831,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 705 "parser.yy"
+#line 706 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
     break;
@@ -5785,5 +5838,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 710 "parser.yy"
+#line 711 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5792,5 +5845,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 712 "parser.yy"
+#line 713 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -5799,5 +5852,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 719 "parser.yy"
+#line 720 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5806,5 +5859,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 721 "parser.yy"
+#line 722 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5813,5 +5866,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 728 "parser.yy"
+#line 729 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5820,5 +5873,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 732 "parser.yy"
+#line 733 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -5827,5 +5880,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 733 "parser.yy"
+#line 734 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
@@ -5834,5 +5887,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 739 "parser.yy"
+#line 740 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -5841,5 +5894,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 743 "parser.yy"
+#line 744 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5848,5 +5901,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 748 "parser.yy"
+#line 749 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5855,5 +5908,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 754 "parser.yy"
+#line 755 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5862,5 +5915,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 756 "parser.yy"
+#line 757 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5869,5 +5922,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 761 "parser.yy"
+#line 762 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5876,5 +5929,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 767 "parser.yy"
+#line 768 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5883,5 +5936,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 769 "parser.yy"
+#line 770 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5890,5 +5943,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 771 "parser.yy"
+#line 772 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5897,5 +5950,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 773 "parser.yy"
+#line 774 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); }
     break;
@@ -5904,16 +5957,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 778 "parser.yy"
+#line 779 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
   case 180:
-
-/* Line 1806 of yacc.c  */
-#line 783 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
-    break;
-
-  case 181:
 
 /* Line 1806 of yacc.c  */
@@ -5922,8 +5968,15 @@
     break;
 
+  case 181:
+
+/* Line 1806 of yacc.c  */
+#line 785 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
+    break;
+
   case 182:
 
 /* Line 1806 of yacc.c  */
-#line 789 "parser.yy"
+#line 790 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5932,5 +5985,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 791 "parser.yy"
+#line 792 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
     break;
@@ -5939,5 +5992,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 793 "parser.yy"
+#line 794 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
     break;
@@ -5946,5 +5999,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 798 "parser.yy"
+#line 799 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -5953,5 +6006,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 800 "parser.yy"
+#line 801 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5960,5 +6013,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 805 "parser.yy"
+#line 806 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -5967,5 +6020,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 809 "parser.yy"
+#line 810 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5974,5 +6027,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 812 "parser.yy"
+#line 813 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
     break;
@@ -5981,5 +6034,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 816 "parser.yy"
+#line 817 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -5988,5 +6041,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 819 "parser.yy"
+#line 820 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
@@ -5995,5 +6048,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 823 "parser.yy"
+#line 824 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -6002,5 +6055,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 825 "parser.yy"
+#line 826 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6009,5 +6062,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 827 "parser.yy"
+#line 828 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6016,5 +6069,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 831 "parser.yy"
+#line 832 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6023,5 +6076,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 833 "parser.yy"
+#line 834 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
     break;
@@ -6030,5 +6083,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 840 "parser.yy"
+#line 841 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6037,5 +6090,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 842 "parser.yy"
+#line 843 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6044,5 +6097,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 844 "parser.yy"
+#line 845 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6054,5 +6107,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 855 "parser.yy"
+#line 856 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6061,5 +6114,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 857 "parser.yy"
+#line 858 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6068,5 +6121,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 859 "parser.yy"
+#line 860 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6075,5 +6128,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 861 "parser.yy"
+#line 862 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6082,5 +6135,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 866 "parser.yy"
+#line 867 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6089,5 +6142,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 868 "parser.yy"
+#line 869 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6096,5 +6149,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 870 "parser.yy"
+#line 871 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6103,5 +6156,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 872 "parser.yy"
+#line 873 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6110,5 +6163,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 877 "parser.yy"
+#line 878 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6120,5 +6173,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 891 "parser.yy"
+#line 892 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6130,5 +6183,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 896 "parser.yy"
+#line 897 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6137,5 +6190,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 898 "parser.yy"
+#line 899 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6147,5 +6200,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 907 "parser.yy"
+#line 908 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
     break;
@@ -6154,5 +6207,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 909 "parser.yy"
+#line 910 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
     break;
@@ -6161,5 +6214,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 911 "parser.yy"
+#line 912 "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;
@@ -6168,5 +6221,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 913 "parser.yy"
+#line 914 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
     break;
@@ -6175,5 +6228,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 915 "parser.yy"
+#line 916 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
     break;
@@ -6182,5 +6235,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 920 "parser.yy"
+#line 921 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6189,5 +6242,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 922 "parser.yy"
+#line 923 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6196,5 +6249,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 927 "parser.yy"
+#line 928 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6203,5 +6256,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 934 "parser.yy"
+#line 935 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6210,5 +6263,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 939 "parser.yy"
+#line 940 "parser.yy"
     { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6217,5 +6270,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 941 "parser.yy"
+#line 942 "parser.yy"
     { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
     break;
@@ -6224,5 +6277,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 946 "parser.yy"
+#line 947 "parser.yy"
     { (yyval.constant) = 0; }
     break;
@@ -6231,5 +6284,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 948 "parser.yy"
+#line 949 "parser.yy"
     { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -6238,5 +6291,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 950 "parser.yy"
+#line 951 "parser.yy"
     { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
     break;
@@ -6245,5 +6298,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 955 "parser.yy"
+#line 956 "parser.yy"
     { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6252,5 +6305,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 957 "parser.yy"
+#line 958 "parser.yy"
     { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
@@ -6259,5 +6312,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 964 "parser.yy"
+#line 965 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6266,5 +6319,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 971 "parser.yy"
+#line 972 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6273,5 +6326,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 976 "parser.yy"
+#line 977 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6280,16 +6333,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 983 "parser.yy"
+#line 984 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
   case 245:
-
-/* Line 1806 of yacc.c  */
-#line 997 "parser.yy"
-    {}
-    break;
-
-  case 246:
 
 /* Line 1806 of yacc.c  */
@@ -6298,8 +6344,15 @@
     break;
 
+  case 246:
+
+/* Line 1806 of yacc.c  */
+#line 999 "parser.yy"
+    {}
+    break;
+
   case 254:
 
 /* Line 1806 of yacc.c  */
-#line 1027 "parser.yy"
+#line 1028 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6311,5 +6364,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1034 "parser.yy"
+#line 1035 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6321,5 +6374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1039 "parser.yy"
+#line 1040 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6331,5 +6384,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1049 "parser.yy"
+#line 1050 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6341,5 +6394,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1054 "parser.yy"
+#line 1055 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6351,5 +6404,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1059 "parser.yy"
+#line 1060 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6361,5 +6414,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1067 "parser.yy"
+#line 1068 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6371,5 +6424,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1072 "parser.yy"
+#line 1073 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6381,5 +6434,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1077 "parser.yy"
+#line 1078 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6391,5 +6444,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1082 "parser.yy"
+#line 1083 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6401,5 +6454,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1087 "parser.yy"
+#line 1088 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6411,5 +6464,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1095 "parser.yy"
+#line 1096 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6420,5 +6473,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1118 "parser.yy"
+#line 1119 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6429,5 +6482,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1122 "parser.yy"
+#line 1123 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6438,5 +6491,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1129 "parser.yy"
+#line 1130 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6445,5 +6498,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1133 "parser.yy"
+#line 1134 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6452,5 +6505,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1138 "parser.yy"
+#line 1139 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6462,5 +6515,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1143 "parser.yy"
+#line 1144 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6472,5 +6525,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1148 "parser.yy"
+#line 1149 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6482,5 +6535,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1159 "parser.yy"
+#line 1160 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6492,5 +6545,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1164 "parser.yy"
+#line 1165 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6502,5 +6555,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1169 "parser.yy"
+#line 1170 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6512,5 +6565,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1174 "parser.yy"
+#line 1175 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6522,5 +6575,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1179 "parser.yy"
+#line 1180 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6532,5 +6585,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1188 "parser.yy"
+#line 1189 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6542,5 +6595,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1193 "parser.yy"
+#line 1194 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6552,5 +6605,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1210 "parser.yy"
+#line 1211 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6562,5 +6615,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1215 "parser.yy"
+#line 1216 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6572,5 +6625,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1237 "parser.yy"
+#line 1238 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6579,5 +6632,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1249 "parser.yy"
+#line 1250 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6586,5 +6639,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1260 "parser.yy"
+#line 1261 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
@@ -6593,5 +6646,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1262 "parser.yy"
+#line 1263 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
@@ -6600,5 +6653,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1264 "parser.yy"
+#line 1265 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
@@ -6607,5 +6660,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1266 "parser.yy"
+#line 1267 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
@@ -6614,5 +6667,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1268 "parser.yy"
+#line 1269 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
@@ -6621,5 +6674,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1270 "parser.yy"
+#line 1271 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6630,5 +6683,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1274 "parser.yy"
+#line 1275 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6640,5 +6693,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1283 "parser.yy"
+#line 1284 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6647,5 +6700,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1285 "parser.yy"
+#line 1286 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6654,5 +6707,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1296 "parser.yy"
+#line 1297 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6661,5 +6714,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1305 "parser.yy"
+#line 1306 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
@@ -6668,5 +6721,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1307 "parser.yy"
+#line 1308 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
@@ -6675,5 +6728,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1309 "parser.yy"
+#line 1310 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
@@ -6682,5 +6735,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1311 "parser.yy"
+#line 1312 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
@@ -6689,5 +6742,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1313 "parser.yy"
+#line 1314 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
     break;
@@ -6696,5 +6749,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1315 "parser.yy"
+#line 1316 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
@@ -6703,5 +6756,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1317 "parser.yy"
+#line 1318 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
     break;
@@ -6710,5 +6763,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1319 "parser.yy"
+#line 1320 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6717,5 +6770,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1324 "parser.yy"
+#line 1325 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
@@ -6724,5 +6777,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1326 "parser.yy"
+#line 1327 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
@@ -6731,5 +6784,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1328 "parser.yy"
+#line 1329 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
@@ -6738,5 +6791,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1330 "parser.yy"
+#line 1331 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
@@ -6745,5 +6798,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1332 "parser.yy"
+#line 1333 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
     break;
@@ -6752,5 +6805,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1334 "parser.yy"
+#line 1335 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
     break;
@@ -6759,5 +6812,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1336 "parser.yy"
+#line 1337 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
     break;
@@ -6766,5 +6819,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1338 "parser.yy"
+#line 1339 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
     break;
@@ -6773,5 +6826,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1340 "parser.yy"
+#line 1341 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
@@ -6780,5 +6833,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1342 "parser.yy"
+#line 1343 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
@@ -6787,5 +6840,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1344 "parser.yy"
+#line 1345 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
     break;
@@ -6794,240 +6847,240 @@
 
 /* Line 1806 of yacc.c  */
-#line 1346 "parser.yy"
+#line 1347 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     break;
 
-  case 334:
-
-/* Line 1806 of yacc.c  */
-#line 1353 "parser.yy"
+  case 333:
+
+/* Line 1806 of yacc.c  */
+#line 1349 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
+    break;
+
+  case 335:
+
+/* Line 1806 of yacc.c  */
+#line 1356 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 335:
-
-/* Line 1806 of yacc.c  */
-#line 1355 "parser.yy"
+  case 336:
+
+/* Line 1806 of yacc.c  */
+#line 1358 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 336:
-
-/* Line 1806 of yacc.c  */
-#line 1357 "parser.yy"
+  case 337:
+
+/* Line 1806 of yacc.c  */
+#line 1360 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 337:
-
-/* Line 1806 of yacc.c  */
-#line 1359 "parser.yy"
+  case 338:
+
+/* Line 1806 of yacc.c  */
+#line 1362 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 339:
-
-/* Line 1806 of yacc.c  */
-#line 1365 "parser.yy"
+  case 340:
+
+/* Line 1806 of yacc.c  */
+#line 1368 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 341:
-
-/* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
+  case 342:
+
+/* Line 1806 of yacc.c  */
+#line 1375 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 342:
-
-/* Line 1806 of yacc.c  */
-#line 1374 "parser.yy"
+  case 343:
+
+/* Line 1806 of yacc.c  */
+#line 1377 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 343:
-
-/* Line 1806 of yacc.c  */
-#line 1376 "parser.yy"
+  case 344:
+
+/* Line 1806 of yacc.c  */
+#line 1379 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 344:
-
-/* Line 1806 of yacc.c  */
-#line 1381 "parser.yy"
+  case 345:
+
+/* Line 1806 of yacc.c  */
+#line 1384 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
 
-  case 345:
-
-/* Line 1806 of yacc.c  */
-#line 1383 "parser.yy"
+  case 346:
+
+/* Line 1806 of yacc.c  */
+#line 1386 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 346:
-
-/* Line 1806 of yacc.c  */
-#line 1385 "parser.yy"
+  case 347:
+
+/* Line 1806 of yacc.c  */
+#line 1388 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 347:
-
-/* Line 1806 of yacc.c  */
-#line 1387 "parser.yy"
+  case 348:
+
+/* Line 1806 of yacc.c  */
+#line 1390 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 349:
-
-/* Line 1806 of yacc.c  */
-#line 1393 "parser.yy"
+  case 350:
+
+/* Line 1806 of yacc.c  */
+#line 1396 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 350:
-
-/* Line 1806 of yacc.c  */
-#line 1395 "parser.yy"
+  case 351:
+
+/* Line 1806 of yacc.c  */
+#line 1398 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1397 "parser.yy"
+  case 352:
+
+/* Line 1806 of yacc.c  */
+#line 1400 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 353:
-
-/* Line 1806 of yacc.c  */
-#line 1403 "parser.yy"
+  case 354:
+
+/* Line 1806 of yacc.c  */
+#line 1406 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 354:
-
-/* Line 1806 of yacc.c  */
-#line 1405 "parser.yy"
+  case 355:
+
+/* Line 1806 of yacc.c  */
+#line 1408 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 356:
-
-/* Line 1806 of yacc.c  */
-#line 1411 "parser.yy"
+  case 357:
+
+/* Line 1806 of yacc.c  */
+#line 1414 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 357:
-
-/* Line 1806 of yacc.c  */
-#line 1413 "parser.yy"
+  case 358:
+
+/* Line 1806 of yacc.c  */
+#line 1416 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 358:
-
-/* Line 1806 of yacc.c  */
-#line 1415 "parser.yy"
+  case 359:
+
+/* Line 1806 of yacc.c  */
+#line 1418 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 359:
-
-/* Line 1806 of yacc.c  */
-#line 1420 "parser.yy"
+  case 360:
+
+/* Line 1806 of yacc.c  */
+#line 1423 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 360:
-
-/* Line 1806 of yacc.c  */
-#line 1422 "parser.yy"
+  case 361:
+
+/* Line 1806 of yacc.c  */
+#line 1425 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 361:
-
-/* Line 1806 of yacc.c  */
-#line 1424 "parser.yy"
+  case 362:
+
+/* Line 1806 of yacc.c  */
+#line 1427 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 364:
-
-/* Line 1806 of yacc.c  */
-#line 1434 "parser.yy"
+  case 365:
+
+/* Line 1806 of yacc.c  */
+#line 1437 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 365:
-
-/* Line 1806 of yacc.c  */
-#line 1436 "parser.yy"
+  case 366:
+
+/* Line 1806 of yacc.c  */
+#line 1439 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); }
     break;
 
-  case 366:
-
-/* Line 1806 of yacc.c  */
-#line 1438 "parser.yy"
+  case 367:
+
+/* Line 1806 of yacc.c  */
+#line 1441 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); }
     break;
 
-  case 367:
-
-/* Line 1806 of yacc.c  */
-#line 1440 "parser.yy"
+  case 368:
+
+/* Line 1806 of yacc.c  */
+#line 1443 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
     break;
 
-  case 368:
-
-/* Line 1806 of yacc.c  */
-#line 1442 "parser.yy"
+  case 369:
+
+/* Line 1806 of yacc.c  */
+#line 1445 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 369:
-
-/* Line 1806 of yacc.c  */
-#line 1447 "parser.yy"
+  case 370:
+
+/* Line 1806 of yacc.c  */
+#line 1450 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
 
-  case 370:
-
-/* Line 1806 of yacc.c  */
-#line 1449 "parser.yy"
+  case 371:
+
+/* Line 1806 of yacc.c  */
+#line 1452 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
 
-  case 371:
-
-/* Line 1806 of yacc.c  */
-#line 1454 "parser.yy"
+  case 372:
+
+/* Line 1806 of yacc.c  */
+#line 1457 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
     break;
 
-  case 372:
-
-/* Line 1806 of yacc.c  */
-#line 1456 "parser.yy"
+  case 373:
+
+/* Line 1806 of yacc.c  */
+#line 1459 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 374:
-
-/* Line 1806 of yacc.c  */
-#line 1462 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 376:
+  case 375:
 
 /* Line 1806 of yacc.c  */
@@ -7036,58 +7089,58 @@
     break;
 
-  case 378:
-
-/* Line 1806 of yacc.c  */
-#line 1471 "parser.yy"
+  case 377:
+
+/* Line 1806 of yacc.c  */
+#line 1468 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 379:
+
+/* Line 1806 of yacc.c  */
+#line 1474 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
 
-  case 379:
-
-/* Line 1806 of yacc.c  */
-#line 1473 "parser.yy"
+  case 380:
+
+/* Line 1806 of yacc.c  */
+#line 1476 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
-  case 380:
-
-/* Line 1806 of yacc.c  */
-#line 1475 "parser.yy"
+  case 381:
+
+/* Line 1806 of yacc.c  */
+#line 1478 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
 
-  case 381:
-
-/* Line 1806 of yacc.c  */
-#line 1480 "parser.yy"
+  case 382:
+
+/* Line 1806 of yacc.c  */
+#line 1483 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 382:
-
-/* Line 1806 of yacc.c  */
-#line 1482 "parser.yy"
+  case 383:
+
+/* Line 1806 of yacc.c  */
+#line 1485 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
 
-  case 383:
-
-/* Line 1806 of yacc.c  */
-#line 1487 "parser.yy"
+  case 384:
+
+/* Line 1806 of yacc.c  */
+#line 1490 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
 
-  case 384:
-
-/* Line 1806 of yacc.c  */
-#line 1489 "parser.yy"
+  case 385:
+
+/* Line 1806 of yacc.c  */
+#line 1492 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
-    break;
-
-  case 385:
-
-/* Line 1806 of yacc.c  */
-#line 1492 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
@@ -7099,163 +7152,163 @@
     break;
 
-  case 388:
-
-/* Line 1806 of yacc.c  */
-#line 1501 "parser.yy"
+  case 387:
+
+/* Line 1806 of yacc.c  */
+#line 1498 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+    break;
+
+  case 389:
+
+/* Line 1806 of yacc.c  */
+#line 1504 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 389:
-
-/* Line 1806 of yacc.c  */
-#line 1503 "parser.yy"
+  case 390:
+
+/* Line 1806 of yacc.c  */
+#line 1506 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
-  case 390:
-
-/* Line 1806 of yacc.c  */
-#line 1508 "parser.yy"
+  case 391:
+
+/* Line 1806 of yacc.c  */
+#line 1511 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
-  case 392:
-
-/* Line 1806 of yacc.c  */
-#line 1517 "parser.yy"
+  case 393:
+
+/* Line 1806 of yacc.c  */
+#line 1520 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 393:
-
-/* Line 1806 of yacc.c  */
-#line 1519 "parser.yy"
+  case 394:
+
+/* Line 1806 of yacc.c  */
+#line 1522 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 394:
-
-/* Line 1806 of yacc.c  */
-#line 1521 "parser.yy"
+  case 395:
+
+/* Line 1806 of yacc.c  */
+#line 1524 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
     break;
 
-  case 395:
-
-/* Line 1806 of yacc.c  */
-#line 1526 "parser.yy"
+  case 396:
+
+/* Line 1806 of yacc.c  */
+#line 1529 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 396:
-
-/* Line 1806 of yacc.c  */
-#line 1528 "parser.yy"
+  case 397:
+
+/* Line 1806 of yacc.c  */
+#line 1531 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
-  case 397:
-
-/* Line 1806 of yacc.c  */
-#line 1533 "parser.yy"
+  case 398:
+
+/* Line 1806 of yacc.c  */
+#line 1536 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 398:
-
-/* Line 1806 of yacc.c  */
-#line 1535 "parser.yy"
+  case 399:
+
+/* Line 1806 of yacc.c  */
+#line 1538 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
-  case 399:
-
-/* Line 1806 of yacc.c  */
-#line 1542 "parser.yy"
+  case 400:
+
+/* Line 1806 of yacc.c  */
+#line 1545 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 403:
-
-/* Line 1806 of yacc.c  */
-#line 1550 "parser.yy"
+  case 404:
+
+/* Line 1806 of yacc.c  */
+#line 1553 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 404:
-
-/* Line 1806 of yacc.c  */
-#line 1552 "parser.yy"
+  case 405:
+
+/* Line 1806 of yacc.c  */
+#line 1555 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 405:
-
-/* Line 1806 of yacc.c  */
-#line 1554 "parser.yy"
+  case 406:
+
+/* Line 1806 of yacc.c  */
+#line 1557 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 407:
-
-/* Line 1806 of yacc.c  */
-#line 1562 "parser.yy"
+  case 408:
+
+/* Line 1806 of yacc.c  */
+#line 1565 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 408:
-
-/* Line 1806 of yacc.c  */
-#line 1564 "parser.yy"
+  case 409:
+
+/* Line 1806 of yacc.c  */
+#line 1567 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 409:
-
-/* Line 1806 of yacc.c  */
-#line 1566 "parser.yy"
+  case 410:
+
+/* Line 1806 of yacc.c  */
+#line 1569 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     break;
 
-  case 411:
-
-/* Line 1806 of yacc.c  */
-#line 1572 "parser.yy"
+  case 412:
+
+/* Line 1806 of yacc.c  */
+#line 1575 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 412:
-
-/* Line 1806 of yacc.c  */
-#line 1577 "parser.yy"
+  case 413:
+
+/* Line 1806 of yacc.c  */
+#line 1580 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 415:
-
-/* Line 1806 of yacc.c  */
-#line 1584 "parser.yy"
+  case 416:
+
+/* Line 1806 of yacc.c  */
+#line 1587 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 418:
-
-/* Line 1806 of yacc.c  */
-#line 1591 "parser.yy"
+  case 419:
+
+/* Line 1806 of yacc.c  */
+#line 1594 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 419:
-
-/* Line 1806 of yacc.c  */
-#line 1593 "parser.yy"
+  case 420:
+
+/* Line 1806 of yacc.c  */
+#line 1596 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 421:
-
-/* Line 1806 of yacc.c  */
-#line 1602 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
@@ -7270,19 +7323,26 @@
 
 /* Line 1806 of yacc.c  */
-#line 1607 "parser.yy"
+#line 1608 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
+    break;
+
+  case 424:
+
+/* Line 1806 of yacc.c  */
+#line 1610 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
 
-  case 428:
-
-/* Line 1806 of yacc.c  */
-#line 1617 "parser.yy"
+  case 429:
+
+/* Line 1806 of yacc.c  */
+#line 1620 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 430:
-
-/* Line 1806 of yacc.c  */
-#line 1623 "parser.yy"
+  case 431:
+
+/* Line 1806 of yacc.c  */
+#line 1626 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7291,8 +7351,8 @@
     break;
 
-  case 431:
-
-/* Line 1806 of yacc.c  */
-#line 1628 "parser.yy"
+  case 432:
+
+/* Line 1806 of yacc.c  */
+#line 1631 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7301,340 +7361,340 @@
     break;
 
-  case 433:
-
-/* Line 1806 of yacc.c  */
-#line 1637 "parser.yy"
+  case 434:
+
+/* Line 1806 of yacc.c  */
+#line 1640 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 434:
-
-/* Line 1806 of yacc.c  */
-#line 1646 "parser.yy"
+  case 435:
+
+/* Line 1806 of yacc.c  */
+#line 1649 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 435:
-
-/* Line 1806 of yacc.c  */
-#line 1648 "parser.yy"
+  case 436:
+
+/* Line 1806 of yacc.c  */
+#line 1651 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
-  case 447:
-
-/* Line 1806 of yacc.c  */
-#line 1673 "parser.yy"
+  case 448:
+
+/* Line 1806 of yacc.c  */
+#line 1676 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 451:
-
-/* Line 1806 of yacc.c  */
-#line 1681 "parser.yy"
+  case 452:
+
+/* Line 1806 of yacc.c  */
+#line 1684 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 452:
-
-/* Line 1806 of yacc.c  */
-#line 1686 "parser.yy"
+  case 453:
+
+/* Line 1806 of yacc.c  */
+#line 1689 "parser.yy"
     { (yyval.in) = 0; }
     break;
 
-  case 453:
-
-/* Line 1806 of yacc.c  */
-#line 1688 "parser.yy"
+  case 454:
+
+/* Line 1806 of yacc.c  */
+#line 1691 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
 
-  case 454:
-
-/* Line 1806 of yacc.c  */
-#line 1690 "parser.yy"
+  case 455:
+
+/* Line 1806 of yacc.c  */
+#line 1693 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
 
-  case 455:
-
-/* Line 1806 of yacc.c  */
-#line 1694 "parser.yy"
+  case 456:
+
+/* Line 1806 of yacc.c  */
+#line 1697 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
 
-  case 456:
-
-/* Line 1806 of yacc.c  */
-#line 1695 "parser.yy"
+  case 457:
+
+/* Line 1806 of yacc.c  */
+#line 1698 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
 
-  case 457:
-
-/* Line 1806 of yacc.c  */
-#line 1700 "parser.yy"
+  case 458:
+
+/* Line 1806 of yacc.c  */
+#line 1703 "parser.yy"
     { (yyval.in) = 0; }
     break;
 
-  case 459:
-
-/* Line 1806 of yacc.c  */
-#line 1702 "parser.yy"
+  case 460:
+
+/* Line 1806 of yacc.c  */
+#line 1705 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
 
-  case 460:
-
-/* Line 1806 of yacc.c  */
-#line 1703 "parser.yy"
+  case 461:
+
+/* Line 1806 of yacc.c  */
+#line 1706 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     break;
 
-  case 461:
-
-/* Line 1806 of yacc.c  */
-#line 1705 "parser.yy"
+  case 462:
+
+/* Line 1806 of yacc.c  */
+#line 1708 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
 
-  case 463:
-
-/* Line 1806 of yacc.c  */
-#line 1721 "parser.yy"
+  case 464:
+
+/* Line 1806 of yacc.c  */
+#line 1724 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     break;
 
-  case 465:
-
-/* Line 1806 of yacc.c  */
-#line 1727 "parser.yy"
+  case 466:
+
+/* Line 1806 of yacc.c  */
+#line 1730 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
     break;
 
-  case 466:
-
-/* Line 1806 of yacc.c  */
-#line 1735 "parser.yy"
+  case 467:
+
+/* Line 1806 of yacc.c  */
+#line 1738 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
-  case 467:
-
-/* Line 1806 of yacc.c  */
-#line 1737 "parser.yy"
+  case 468:
+
+/* Line 1806 of yacc.c  */
+#line 1740 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
     break;
 
-  case 468:
-
-/* Line 1806 of yacc.c  */
-#line 1740 "parser.yy"
+  case 469:
+
+/* Line 1806 of yacc.c  */
+#line 1743 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
 
-  case 469:
-
-/* Line 1806 of yacc.c  */
-#line 1742 "parser.yy"
+  case 470:
+
+/* Line 1806 of yacc.c  */
+#line 1745 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
 
-  case 470:
-
-/* Line 1806 of yacc.c  */
-#line 1744 "parser.yy"
+  case 471:
+
+/* Line 1806 of yacc.c  */
+#line 1747 "parser.yy"
     { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
     break;
 
-  case 471:
-
-/* Line 1806 of yacc.c  */
-#line 1746 "parser.yy"
+  case 472:
+
+/* Line 1806 of yacc.c  */
+#line 1749 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
     break;
 
-  case 473:
-
-/* Line 1806 of yacc.c  */
-#line 1770 "parser.yy"
+  case 474:
+
+/* Line 1806 of yacc.c  */
+#line 1773 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 474:
-
-/* Line 1806 of yacc.c  */
-#line 1772 "parser.yy"
+  case 475:
+
+/* Line 1806 of yacc.c  */
+#line 1775 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 475:
-
-/* Line 1806 of yacc.c  */
-#line 1774 "parser.yy"
+  case 476:
+
+/* Line 1806 of yacc.c  */
+#line 1777 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 477:
-
-/* Line 1806 of yacc.c  */
-#line 1780 "parser.yy"
+  case 478:
+
+/* Line 1806 of yacc.c  */
+#line 1783 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 478:
-
-/* Line 1806 of yacc.c  */
-#line 1782 "parser.yy"
+  case 479:
+
+/* Line 1806 of yacc.c  */
+#line 1785 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 479:
-
-/* Line 1806 of yacc.c  */
-#line 1787 "parser.yy"
+  case 480:
+
+/* Line 1806 of yacc.c  */
+#line 1790 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 481:
-
-/* Line 1806 of yacc.c  */
-#line 1793 "parser.yy"
+  case 482:
+
+/* Line 1806 of yacc.c  */
+#line 1796 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 482:
-
-/* Line 1806 of yacc.c  */
-#line 1798 "parser.yy"
+  case 483:
+
+/* Line 1806 of yacc.c  */
+#line 1801 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
 
-  case 483:
-
-/* Line 1806 of yacc.c  */
-#line 1800 "parser.yy"
+  case 484:
+
+/* Line 1806 of yacc.c  */
+#line 1803 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 485:
-
-/* Line 1806 of yacc.c  */
-#line 1806 "parser.yy"
+  case 486:
+
+/* Line 1806 of yacc.c  */
+#line 1809 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Type; }
     break;
 
-  case 486:
-
-/* Line 1806 of yacc.c  */
-#line 1808 "parser.yy"
+  case 487:
+
+/* Line 1806 of yacc.c  */
+#line 1811 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
 
-  case 487:
-
-/* Line 1806 of yacc.c  */
-#line 1810 "parser.yy"
+  case 488:
+
+/* Line 1806 of yacc.c  */
+#line 1813 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
 
-  case 488:
-
-/* Line 1806 of yacc.c  */
-#line 1815 "parser.yy"
+  case 489:
+
+/* Line 1806 of yacc.c  */
+#line 1818 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 489:
-
-/* Line 1806 of yacc.c  */
-#line 1817 "parser.yy"
+  case 490:
+
+/* Line 1806 of yacc.c  */
+#line 1820 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 490:
-
-/* Line 1806 of yacc.c  */
-#line 1822 "parser.yy"
+  case 491:
+
+/* Line 1806 of yacc.c  */
+#line 1825 "parser.yy"
     {
-			typedefTable.openContext( *(yyvsp[(2) - (5)].tok) );
-			(yyval.decl) = DeclarationNode::newContextUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) );
+			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
+			(yyval.decl) = DeclarationNode::newTraitUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) );
 		}
     break;
 
-  case 491:
-
-/* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
+  case 492:
+
+/* Line 1806 of yacc.c  */
+#line 1830 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
 
-  case 492:
-
-/* Line 1806 of yacc.c  */
-#line 1829 "parser.yy"
+  case 493:
+
+/* Line 1806 of yacc.c  */
+#line 1832 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 493:
-
-/* Line 1806 of yacc.c  */
-#line 1834 "parser.yy"
+  case 494:
+
+/* Line 1806 of yacc.c  */
+#line 1837 "parser.yy"
     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
-  case 495:
-
-/* Line 1806 of yacc.c  */
-#line 1837 "parser.yy"
+  case 496:
+
+/* Line 1806 of yacc.c  */
+#line 1840 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
     break;
 
-  case 496:
-
-/* Line 1806 of yacc.c  */
-#line 1839 "parser.yy"
+  case 497:
+
+/* Line 1806 of yacc.c  */
+#line 1842 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
 
-  case 497:
-
-/* Line 1806 of yacc.c  */
-#line 1844 "parser.yy"
+  case 498:
+
+/* Line 1806 of yacc.c  */
+#line 1847 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 498:
-
-/* Line 1806 of yacc.c  */
-#line 1846 "parser.yy"
+  case 499:
+
+/* Line 1806 of yacc.c  */
+#line 1849 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 499:
-
-/* Line 1806 of yacc.c  */
-#line 1848 "parser.yy"
+  case 500:
+
+/* Line 1806 of yacc.c  */
+#line 1851 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 500:
-
-/* Line 1806 of yacc.c  */
-#line 1853 "parser.yy"
+  case 501:
+
+/* Line 1806 of yacc.c  */
+#line 1856 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 501:
-
-/* Line 1806 of yacc.c  */
-#line 1855 "parser.yy"
+  case 502:
+
+/* Line 1806 of yacc.c  */
+#line 1858 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 502:
-
-/* Line 1806 of yacc.c  */
-#line 1860 "parser.yy"
+  case 503:
+
+/* Line 1806 of yacc.c  */
+#line 1863 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7643,8 +7703,8 @@
     break;
 
-  case 503:
-
-/* Line 1806 of yacc.c  */
-#line 1865 "parser.yy"
+  case 504:
+
+/* Line 1806 of yacc.c  */
+#line 1868 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7653,46 +7713,46 @@
     break;
 
-  case 504:
-
-/* Line 1806 of yacc.c  */
-#line 1873 "parser.yy"
+  case 505:
+
+/* Line 1806 of yacc.c  */
+#line 1876 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
-			(yyval.decl) = DeclarationNode::newContext( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );
+			(yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );
 		}
     break;
 
-  case 505:
-
-/* Line 1806 of yacc.c  */
-#line 1878 "parser.yy"
+  case 506:
+
+/* Line 1806 of yacc.c  */
+#line 1881 "parser.yy"
     {
-			typedefTable.enterContext( *(yyvsp[(2) - (8)].tok) );
+			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
 			typedefTable.enterScope();
 		}
     break;
 
-  case 506:
-
-/* Line 1806 of yacc.c  */
-#line 1883 "parser.yy"
+  case 507:
+
+/* Line 1806 of yacc.c  */
+#line 1886 "parser.yy"
     {
-			typedefTable.leaveContext();
+			typedefTable.leaveTrait();
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (11)].tok), TypedefTable::ID );
-			(yyval.decl) = DeclarationNode::newContext( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) );
+			(yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) );
 		}
     break;
 
-  case 508:
-
-/* Line 1806 of yacc.c  */
-#line 1893 "parser.yy"
+  case 509:
+
+/* Line 1806 of yacc.c  */
+#line 1896 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 511:
-
-/* Line 1806 of yacc.c  */
-#line 1903 "parser.yy"
+  case 512:
+
+/* Line 1806 of yacc.c  */
+#line 1906 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7701,8 +7761,8 @@
     break;
 
-  case 512:
-
-/* Line 1806 of yacc.c  */
-#line 1908 "parser.yy"
+  case 513:
+
+/* Line 1806 of yacc.c  */
+#line 1911 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7711,8 +7771,8 @@
     break;
 
-  case 513:
-
-/* Line 1806 of yacc.c  */
-#line 1913 "parser.yy"
+  case 514:
+
+/* Line 1806 of yacc.c  */
+#line 1916 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7721,8 +7781,8 @@
     break;
 
-  case 514:
-
-/* Line 1806 of yacc.c  */
-#line 1921 "parser.yy"
+  case 515:
+
+/* Line 1806 of yacc.c  */
+#line 1924 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7731,8 +7791,8 @@
     break;
 
-  case 515:
-
-/* Line 1806 of yacc.c  */
-#line 1926 "parser.yy"
+  case 516:
+
+/* Line 1806 of yacc.c  */
+#line 1929 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7741,15 +7801,15 @@
     break;
 
-  case 516:
-
-/* Line 1806 of yacc.c  */
-#line 1936 "parser.yy"
+  case 517:
+
+/* Line 1806 of yacc.c  */
+#line 1939 "parser.yy"
     {}
     break;
 
-  case 517:
-
-/* Line 1806 of yacc.c  */
-#line 1938 "parser.yy"
+  case 518:
+
+/* Line 1806 of yacc.c  */
+#line 1941 "parser.yy"
     {
 			if ( theTree ) {
@@ -7761,29 +7821,29 @@
     break;
 
-  case 519:
-
-/* Line 1806 of yacc.c  */
-#line 1950 "parser.yy"
+  case 520:
+
+/* Line 1806 of yacc.c  */
+#line 1953 "parser.yy"
     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
 
-  case 520:
-
-/* Line 1806 of yacc.c  */
-#line 1955 "parser.yy"
+  case 521:
+
+/* Line 1806 of yacc.c  */
+#line 1958 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 524:
-
-/* Line 1806 of yacc.c  */
-#line 1963 "parser.yy"
+  case 525:
+
+/* Line 1806 of yacc.c  */
+#line 1966 "parser.yy"
     {}
     break;
 
-  case 525:
-
-/* Line 1806 of yacc.c  */
-#line 1965 "parser.yy"
+  case 526:
+
+/* Line 1806 of yacc.c  */
+#line 1968 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -7792,8 +7852,8 @@
     break;
 
-  case 526:
-
-/* Line 1806 of yacc.c  */
-#line 1970 "parser.yy"
+  case 527:
+
+/* Line 1806 of yacc.c  */
+#line 1973 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7803,15 +7863,15 @@
     break;
 
-  case 527:
-
-/* Line 1806 of yacc.c  */
-#line 1976 "parser.yy"
+  case 528:
+
+/* Line 1806 of yacc.c  */
+#line 1979 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 529:
-
-/* Line 1806 of yacc.c  */
-#line 1986 "parser.yy"
+  case 530:
+
+/* Line 1806 of yacc.c  */
+#line 1989 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7821,8 +7881,8 @@
     break;
 
-  case 530:
-
-/* Line 1806 of yacc.c  */
-#line 1992 "parser.yy"
+  case 531:
+
+/* Line 1806 of yacc.c  */
+#line 1995 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7832,8 +7892,8 @@
     break;
 
-  case 531:
-
-/* Line 1806 of yacc.c  */
-#line 2001 "parser.yy"
+  case 532:
+
+/* Line 1806 of yacc.c  */
+#line 2004 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7843,8 +7903,8 @@
     break;
 
-  case 532:
-
-/* Line 1806 of yacc.c  */
-#line 2007 "parser.yy"
+  case 533:
+
+/* Line 1806 of yacc.c  */
+#line 2010 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7854,8 +7914,8 @@
     break;
 
-  case 533:
-
-/* Line 1806 of yacc.c  */
-#line 2013 "parser.yy"
+  case 534:
+
+/* Line 1806 of yacc.c  */
+#line 2016 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7865,8 +7925,8 @@
     break;
 
-  case 534:
-
-/* Line 1806 of yacc.c  */
-#line 2019 "parser.yy"
+  case 535:
+
+/* Line 1806 of yacc.c  */
+#line 2022 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7876,8 +7936,8 @@
     break;
 
-  case 535:
-
-/* Line 1806 of yacc.c  */
-#line 2025 "parser.yy"
+  case 536:
+
+/* Line 1806 of yacc.c  */
+#line 2028 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7887,8 +7947,8 @@
     break;
 
-  case 536:
-
-/* Line 1806 of yacc.c  */
-#line 2033 "parser.yy"
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2036 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7898,8 +7958,8 @@
     break;
 
-  case 537:
-
-/* Line 1806 of yacc.c  */
-#line 2039 "parser.yy"
+  case 538:
+
+/* Line 1806 of yacc.c  */
+#line 2042 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7909,8 +7969,8 @@
     break;
 
-  case 538:
-
-/* Line 1806 of yacc.c  */
-#line 2047 "parser.yy"
+  case 539:
+
+/* Line 1806 of yacc.c  */
+#line 2050 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7920,8 +7980,8 @@
     break;
 
-  case 539:
-
-/* Line 1806 of yacc.c  */
-#line 2053 "parser.yy"
+  case 540:
+
+/* Line 1806 of yacc.c  */
+#line 2056 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7931,54 +7991,33 @@
     break;
 
-  case 543:
-
-/* Line 1806 of yacc.c  */
-#line 2068 "parser.yy"
+  case 544:
+
+/* Line 1806 of yacc.c  */
+#line 2071 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 546:
-
-/* Line 1806 of yacc.c  */
-#line 2078 "parser.yy"
+  case 547:
+
+/* Line 1806 of yacc.c  */
+#line 2081 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 549:
-
-/* Line 1806 of yacc.c  */
-#line 2085 "parser.yy"
+  case 550:
+
+/* Line 1806 of yacc.c  */
+#line 2088 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 550:
-
-/* Line 1806 of yacc.c  */
-#line 2091 "parser.yy"
+  case 551:
+
+/* Line 1806 of yacc.c  */
+#line 2094 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 556:
-
-/* Line 1806 of yacc.c  */
-#line 2106 "parser.yy"
-    {}
-    break;
-
   case 557:
-
-/* Line 1806 of yacc.c  */
-#line 2107 "parser.yy"
-    {}
-    break;
-
-  case 558:
-
-/* Line 1806 of yacc.c  */
-#line 2108 "parser.yy"
-    {}
-    break;
-
-  case 559:
 
 /* Line 1806 of yacc.c  */
@@ -7987,12 +8026,26 @@
     break;
 
+  case 558:
+
+/* Line 1806 of yacc.c  */
+#line 2110 "parser.yy"
+    {}
+    break;
+
+  case 559:
+
+/* Line 1806 of yacc.c  */
+#line 2111 "parser.yy"
+    {}
+    break;
+
   case 560:
 
 /* Line 1806 of yacc.c  */
-#line 2144 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 562:
+#line 2112 "parser.yy"
+    {}
+    break;
+
+  case 561:
 
 /* Line 1806 of yacc.c  */
@@ -8004,5 +8057,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2149 "parser.yy"
+#line 2150 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8011,5 +8064,12 @@
 
 /* Line 1806 of yacc.c  */
-#line 2154 "parser.yy"
+#line 2152 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 565:
+
+/* Line 1806 of yacc.c  */
+#line 2157 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8018,82 +8078,75 @@
     break;
 
-  case 565:
-
-/* Line 1806 of yacc.c  */
-#line 2159 "parser.yy"
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2162 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 566:
-
-/* Line 1806 of yacc.c  */
-#line 2164 "parser.yy"
+  case 567:
+
+/* Line 1806 of yacc.c  */
+#line 2167 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 567:
-
-/* Line 1806 of yacc.c  */
-#line 2166 "parser.yy"
+  case 568:
+
+/* Line 1806 of yacc.c  */
+#line 2169 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 568:
-
-/* Line 1806 of yacc.c  */
-#line 2168 "parser.yy"
+  case 569:
+
+/* Line 1806 of yacc.c  */
+#line 2171 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 569:
-
-/* Line 1806 of yacc.c  */
-#line 2173 "parser.yy"
+  case 570:
+
+/* Line 1806 of yacc.c  */
+#line 2176 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 570:
-
-/* Line 1806 of yacc.c  */
-#line 2175 "parser.yy"
+  case 571:
+
+/* Line 1806 of yacc.c  */
+#line 2178 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2177 "parser.yy"
+  case 572:
+
+/* Line 1806 of yacc.c  */
+#line 2180 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2179 "parser.yy"
+  case 573:
+
+/* Line 1806 of yacc.c  */
+#line 2182 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2184 "parser.yy"
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2187 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2186 "parser.yy"
+  case 575:
+
+/* Line 1806 of yacc.c  */
+#line 2189 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 575:
-
-/* Line 1806 of yacc.c  */
-#line 2196 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 577:
+  case 576:
 
 /* Line 1806 of yacc.c  */
@@ -8105,135 +8158,135 @@
 
 /* Line 1806 of yacc.c  */
-#line 2204 "parser.yy"
+#line 2202 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2207 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2206 "parser.yy"
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2209 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 580:
-
-/* Line 1806 of yacc.c  */
-#line 2208 "parser.yy"
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2211 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2213 "parser.yy"
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2216 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2215 "parser.yy"
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2218 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2217 "parser.yy"
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2220 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2222 "parser.yy"
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2225 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2224 "parser.yy"
+  case 586:
+
+/* Line 1806 of yacc.c  */
+#line 2227 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 586:
-
-/* Line 1806 of yacc.c  */
-#line 2226 "parser.yy"
+  case 587:
+
+/* Line 1806 of yacc.c  */
+#line 2229 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2241 "parser.yy"
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2244 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 591:
-
-/* Line 1806 of yacc.c  */
-#line 2243 "parser.yy"
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2246 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
 
-  case 592:
-
-/* Line 1806 of yacc.c  */
-#line 2245 "parser.yy"
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2248 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 593:
-
-/* Line 1806 of yacc.c  */
-#line 2250 "parser.yy"
+  case 594:
+
+/* Line 1806 of yacc.c  */
+#line 2253 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 594:
-
-/* Line 1806 of yacc.c  */
-#line 2252 "parser.yy"
+  case 595:
+
+/* Line 1806 of yacc.c  */
+#line 2255 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 595:
-
-/* Line 1806 of yacc.c  */
-#line 2254 "parser.yy"
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2257 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2259 "parser.yy"
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2262 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2261 "parser.yy"
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2264 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2263 "parser.yy"
+  case 599:
+
+/* Line 1806 of yacc.c  */
+#line 2266 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 599:
-
-/* Line 1806 of yacc.c  */
-#line 2278 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 601:
+  case 600:
 
 /* Line 1806 of yacc.c  */
@@ -8245,93 +8298,93 @@
 
 /* Line 1806 of yacc.c  */
-#line 2283 "parser.yy"
+#line 2284 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2289 "parser.yy"
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2286 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2292 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 605:
-
-/* Line 1806 of yacc.c  */
-#line 2294 "parser.yy"
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2297 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2296 "parser.yy"
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2299 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 607:
-
-/* Line 1806 of yacc.c  */
-#line 2298 "parser.yy"
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2301 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2303 "parser.yy"
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2306 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2305 "parser.yy"
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2308 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2307 "parser.yy"
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2310 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2309 "parser.yy"
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2312 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2314 "parser.yy"
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2317 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2316 "parser.yy"
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2319 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2318 "parser.yy"
+  case 615:
+
+/* Line 1806 of yacc.c  */
+#line 2321 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 615:
-
-/* Line 1806 of yacc.c  */
-#line 2328 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 617:
+  case 616:
 
 /* Line 1806 of yacc.c  */
@@ -8343,5 +8396,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2333 "parser.yy"
+#line 2334 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8350,79 +8403,79 @@
 
 /* Line 1806 of yacc.c  */
-#line 2338 "parser.yy"
+#line 2336 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2341 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2340 "parser.yy"
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2343 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2342 "parser.yy"
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2345 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2347 "parser.yy"
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2350 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2349 "parser.yy"
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2352 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2351 "parser.yy"
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2354 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2353 "parser.yy"
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2356 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2358 "parser.yy"
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2361 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2360 "parser.yy"
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2363 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2362 "parser.yy"
+  case 629:
+
+/* Line 1806 of yacc.c  */
+#line 2365 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 629:
-
-/* Line 1806 of yacc.c  */
-#line 2393 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 631:
+  case 630:
 
 /* Line 1806 of yacc.c  */
@@ -8434,5 +8487,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2398 "parser.yy"
+#line 2399 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8441,5 +8494,12 @@
 
 /* Line 1806 of yacc.c  */
-#line 2403 "parser.yy"
+#line 2401 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2406 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8448,8 +8508,8 @@
     break;
 
-  case 634:
-
-/* Line 1806 of yacc.c  */
-#line 2408 "parser.yy"
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2411 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8458,687 +8518,687 @@
     break;
 
-  case 635:
-
-/* Line 1806 of yacc.c  */
-#line 2416 "parser.yy"
+  case 636:
+
+/* Line 1806 of yacc.c  */
+#line 2419 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 636:
-
-/* Line 1806 of yacc.c  */
-#line 2418 "parser.yy"
+  case 637:
+
+/* Line 1806 of yacc.c  */
+#line 2421 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 637:
-
-/* Line 1806 of yacc.c  */
-#line 2420 "parser.yy"
+  case 638:
+
+/* Line 1806 of yacc.c  */
+#line 2423 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 638:
-
-/* Line 1806 of yacc.c  */
-#line 2425 "parser.yy"
+  case 639:
+
+/* Line 1806 of yacc.c  */
+#line 2428 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 639:
-
-/* Line 1806 of yacc.c  */
-#line 2427 "parser.yy"
+  case 640:
+
+/* Line 1806 of yacc.c  */
+#line 2430 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 640:
-
-/* Line 1806 of yacc.c  */
-#line 2432 "parser.yy"
+  case 641:
+
+/* Line 1806 of yacc.c  */
+#line 2435 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 641:
-
-/* Line 1806 of yacc.c  */
-#line 2434 "parser.yy"
+  case 642:
+
+/* Line 1806 of yacc.c  */
+#line 2437 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 643:
-
-/* Line 1806 of yacc.c  */
-#line 2449 "parser.yy"
+  case 644:
+
+/* Line 1806 of yacc.c  */
+#line 2452 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 644:
-
-/* Line 1806 of yacc.c  */
-#line 2451 "parser.yy"
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2454 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2456 "parser.yy"
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2459 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2458 "parser.yy"
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2461 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2460 "parser.yy"
+  case 648:
+
+/* Line 1806 of yacc.c  */
+#line 2463 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2462 "parser.yy"
+  case 649:
+
+/* Line 1806 of yacc.c  */
+#line 2465 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 649:
-
-/* Line 1806 of yacc.c  */
-#line 2464 "parser.yy"
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2467 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2470 "parser.yy"
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2473 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2472 "parser.yy"
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2475 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2474 "parser.yy"
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2477 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2479 "parser.yy"
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2482 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
 
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2481 "parser.yy"
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2484 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2483 "parser.yy"
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2486 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2489 "parser.yy"
+  case 658:
+
+/* Line 1806 of yacc.c  */
+#line 2492 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 658:
-
-/* Line 1806 of yacc.c  */
-#line 2491 "parser.yy"
+  case 659:
+
+/* Line 1806 of yacc.c  */
+#line 2494 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2497 "parser.yy"
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2500 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
 
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2499 "parser.yy"
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2502 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
 
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2501 "parser.yy"
+  case 663:
+
+/* Line 1806 of yacc.c  */
+#line 2504 "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 2503 "parser.yy"
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2506 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
 
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2518 "parser.yy"
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2521 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2520 "parser.yy"
+  case 667:
+
+/* Line 1806 of yacc.c  */
+#line 2523 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2525 "parser.yy"
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2528 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 668:
-
-/* Line 1806 of yacc.c  */
-#line 2527 "parser.yy"
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2530 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2529 "parser.yy"
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2532 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2531 "parser.yy"
+  case 671:
+
+/* Line 1806 of yacc.c  */
+#line 2534 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 671:
-
-/* Line 1806 of yacc.c  */
-#line 2533 "parser.yy"
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2536 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2539 "parser.yy"
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2542 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2541 "parser.yy"
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2544 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2543 "parser.yy"
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2546 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2548 "parser.yy"
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2551 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
 
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2550 "parser.yy"
+  case 678:
+
+/* Line 1806 of yacc.c  */
+#line 2553 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 678:
-
-/* Line 1806 of yacc.c  */
-#line 2552 "parser.yy"
+  case 679:
+
+/* Line 1806 of yacc.c  */
+#line 2555 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 680:
-
-/* Line 1806 of yacc.c  */
-#line 2559 "parser.yy"
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2562 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2570 "parser.yy"
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2573 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 683:
-
-/* Line 1806 of yacc.c  */
-#line 2573 "parser.yy"
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2576 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2575 "parser.yy"
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2578 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
 
-  case 685:
-
-/* Line 1806 of yacc.c  */
-#line 2578 "parser.yy"
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2581 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2580 "parser.yy"
+  case 687:
+
+/* Line 1806 of yacc.c  */
+#line 2583 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
 
-  case 687:
-
-/* Line 1806 of yacc.c  */
-#line 2582 "parser.yy"
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2585 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
 
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2596 "parser.yy"
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2599 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2598 "parser.yy"
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2601 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2603 "parser.yy"
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2606 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 692:
-
-/* Line 1806 of yacc.c  */
-#line 2605 "parser.yy"
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2608 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2607 "parser.yy"
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2610 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2609 "parser.yy"
+  case 695:
+
+/* Line 1806 of yacc.c  */
+#line 2612 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 695:
-
-/* Line 1806 of yacc.c  */
-#line 2611 "parser.yy"
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2614 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2617 "parser.yy"
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2620 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2619 "parser.yy"
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2622 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2621 "parser.yy"
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2624 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2626 "parser.yy"
+  case 701:
+
+/* Line 1806 of yacc.c  */
+#line 2629 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 701:
-
-/* Line 1806 of yacc.c  */
-#line 2628 "parser.yy"
+  case 702:
+
+/* Line 1806 of yacc.c  */
+#line 2631 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 704:
-
-/* Line 1806 of yacc.c  */
-#line 2638 "parser.yy"
+  case 705:
+
+/* Line 1806 of yacc.c  */
+#line 2641 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 707:
-
-/* Line 1806 of yacc.c  */
-#line 2648 "parser.yy"
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2651 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 708:
-
-/* Line 1806 of yacc.c  */
-#line 2650 "parser.yy"
+  case 709:
+
+/* Line 1806 of yacc.c  */
+#line 2653 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 709:
-
-/* Line 1806 of yacc.c  */
-#line 2652 "parser.yy"
+  case 710:
+
+/* Line 1806 of yacc.c  */
+#line 2655 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 710:
-
-/* Line 1806 of yacc.c  */
-#line 2654 "parser.yy"
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2657 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 711:
-
-/* Line 1806 of yacc.c  */
-#line 2656 "parser.yy"
+  case 712:
+
+/* Line 1806 of yacc.c  */
+#line 2659 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 712:
-
-/* Line 1806 of yacc.c  */
-#line 2658 "parser.yy"
+  case 713:
+
+/* Line 1806 of yacc.c  */
+#line 2661 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 713:
-
-/* Line 1806 of yacc.c  */
-#line 2665 "parser.yy"
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2668 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 714:
-
-/* Line 1806 of yacc.c  */
-#line 2667 "parser.yy"
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2670 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2669 "parser.yy"
+  case 716:
+
+/* Line 1806 of yacc.c  */
+#line 2672 "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 2671 "parser.yy"
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2674 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2673 "parser.yy"
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2676 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 718:
-
-/* Line 1806 of yacc.c  */
-#line 2675 "parser.yy"
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2678 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2677 "parser.yy"
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2680 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2679 "parser.yy"
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2682 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2681 "parser.yy"
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2684 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2683 "parser.yy"
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2686 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2688 "parser.yy"
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2691 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2690 "parser.yy"
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2693 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2695 "parser.yy"
+  case 726:
+
+/* Line 1806 of yacc.c  */
+#line 2698 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
 
-  case 726:
-
-/* Line 1806 of yacc.c  */
-#line 2697 "parser.yy"
+  case 727:
+
+/* Line 1806 of yacc.c  */
+#line 2700 "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 2724 "parser.yy"
+  case 729:
+
+/* Line 1806 of yacc.c  */
+#line 2727 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 732:
-
-/* Line 1806 of yacc.c  */
-#line 2735 "parser.yy"
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2738 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 733:
-
-/* Line 1806 of yacc.c  */
-#line 2737 "parser.yy"
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2740 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 734:
-
-/* Line 1806 of yacc.c  */
-#line 2739 "parser.yy"
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2742 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 735:
-
-/* Line 1806 of yacc.c  */
-#line 2741 "parser.yy"
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2744 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 736:
-
-/* Line 1806 of yacc.c  */
-#line 2743 "parser.yy"
+  case 737:
+
+/* Line 1806 of yacc.c  */
+#line 2746 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 737:
-
-/* Line 1806 of yacc.c  */
-#line 2745 "parser.yy"
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2748 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 738:
-
-/* Line 1806 of yacc.c  */
-#line 2752 "parser.yy"
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2755 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 739:
-
-/* Line 1806 of yacc.c  */
-#line 2754 "parser.yy"
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2757 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2756 "parser.yy"
+  case 741:
+
+/* Line 1806 of yacc.c  */
+#line 2759 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2758 "parser.yy"
+  case 742:
+
+/* Line 1806 of yacc.c  */
+#line 2761 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 742:
-
-/* Line 1806 of yacc.c  */
-#line 2760 "parser.yy"
+  case 743:
+
+/* Line 1806 of yacc.c  */
+#line 2763 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 743:
-
-/* Line 1806 of yacc.c  */
-#line 2762 "parser.yy"
+  case 744:
+
+/* Line 1806 of yacc.c  */
+#line 2765 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 744:
-
-/* Line 1806 of yacc.c  */
-#line 2767 "parser.yy"
+  case 745:
+
+/* Line 1806 of yacc.c  */
+#line 2770 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 745:
-
-/* Line 1806 of yacc.c  */
-#line 2772 "parser.yy"
+  case 746:
+
+/* Line 1806 of yacc.c  */
+#line 2775 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
 
-  case 746:
-
-/* Line 1806 of yacc.c  */
-#line 2774 "parser.yy"
+  case 747:
+
+/* Line 1806 of yacc.c  */
+#line 2777 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
-  case 747:
-
-/* Line 1806 of yacc.c  */
-#line 2776 "parser.yy"
+  case 748:
+
+/* Line 1806 of yacc.c  */
+#line 2779 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
-  case 750:
-
-/* Line 1806 of yacc.c  */
-#line 2800 "parser.yy"
+  case 751:
+
+/* Line 1806 of yacc.c  */
+#line 2803 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 751:
-
-/* Line 1806 of yacc.c  */
-#line 2802 "parser.yy"
+  case 752:
+
+/* Line 1806 of yacc.c  */
+#line 2805 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9147,5 +9207,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9150 "Parser/parser.cc"
+#line 9210 "Parser/parser.cc"
       default: break;
     }
@@ -9378,5 +9438,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2805 "parser.yy"
+#line 2808 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/parser.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -59,88 +59,89 @@
      SIGNED = 277,
      UNSIGNED = 278,
-     BOOL = 279,
-     COMPLEX = 280,
-     IMAGINARY = 281,
-     TYPEOF = 282,
-     LABEL = 283,
-     ENUM = 284,
-     STRUCT = 285,
-     UNION = 286,
-     TYPE = 287,
-     FTYPE = 288,
-     DTYPE = 289,
-     CONTEXT = 290,
-     SIZEOF = 291,
-     OFFSETOF = 292,
-     ATTRIBUTE = 293,
-     EXTENSION = 294,
-     IF = 295,
-     ELSE = 296,
-     SWITCH = 297,
-     CASE = 298,
-     DEFAULT = 299,
-     DO = 300,
-     WHILE = 301,
-     FOR = 302,
-     BREAK = 303,
-     CONTINUE = 304,
-     GOTO = 305,
-     RETURN = 306,
-     CHOOSE = 307,
-     DISABLE = 308,
-     ENABLE = 309,
-     FALLTHRU = 310,
-     TRY = 311,
-     CATCH = 312,
-     CATCHRESUME = 313,
-     FINALLY = 314,
-     THROW = 315,
-     THROWRESUME = 316,
-     AT = 317,
-     ASM = 318,
-     ALIGNAS = 319,
-     ALIGNOF = 320,
-     ATOMIC = 321,
-     GENERIC = 322,
-     NORETURN = 323,
-     STATICASSERT = 324,
-     THREADLOCAL = 325,
-     IDENTIFIER = 326,
-     QUOTED_IDENTIFIER = 327,
-     TYPEDEFname = 328,
-     TYPEGENname = 329,
-     ATTR_IDENTIFIER = 330,
-     ATTR_TYPEDEFname = 331,
-     ATTR_TYPEGENname = 332,
-     INTEGERconstant = 333,
-     FLOATINGconstant = 334,
-     CHARACTERconstant = 335,
-     STRINGliteral = 336,
-     ZERO = 337,
-     ONE = 338,
-     ARROW = 339,
-     ICR = 340,
-     DECR = 341,
-     LS = 342,
-     RS = 343,
-     LE = 344,
-     GE = 345,
-     EQ = 346,
-     NE = 347,
-     ANDAND = 348,
-     OROR = 349,
-     ELLIPSIS = 350,
-     MULTassign = 351,
-     DIVassign = 352,
-     MODassign = 353,
-     PLUSassign = 354,
-     MINUSassign = 355,
-     LSassign = 356,
-     RSassign = 357,
-     ANDassign = 358,
-     ERassign = 359,
-     ORassign = 360,
-     ATassign = 361,
-     THEN = 362
+     VALIST = 279,
+     BOOL = 280,
+     COMPLEX = 281,
+     IMAGINARY = 282,
+     TYPEOF = 283,
+     LABEL = 284,
+     ENUM = 285,
+     STRUCT = 286,
+     UNION = 287,
+     OTYPE = 288,
+     FTYPE = 289,
+     DTYPE = 290,
+     TRAIT = 291,
+     SIZEOF = 292,
+     OFFSETOF = 293,
+     ATTRIBUTE = 294,
+     EXTENSION = 295,
+     IF = 296,
+     ELSE = 297,
+     SWITCH = 298,
+     CASE = 299,
+     DEFAULT = 300,
+     DO = 301,
+     WHILE = 302,
+     FOR = 303,
+     BREAK = 304,
+     CONTINUE = 305,
+     GOTO = 306,
+     RETURN = 307,
+     CHOOSE = 308,
+     DISABLE = 309,
+     ENABLE = 310,
+     FALLTHRU = 311,
+     TRY = 312,
+     CATCH = 313,
+     CATCHRESUME = 314,
+     FINALLY = 315,
+     THROW = 316,
+     THROWRESUME = 317,
+     AT = 318,
+     ASM = 319,
+     ALIGNAS = 320,
+     ALIGNOF = 321,
+     ATOMIC = 322,
+     GENERIC = 323,
+     NORETURN = 324,
+     STATICASSERT = 325,
+     THREADLOCAL = 326,
+     IDENTIFIER = 327,
+     QUOTED_IDENTIFIER = 328,
+     TYPEDEFname = 329,
+     TYPEGENname = 330,
+     ATTR_IDENTIFIER = 331,
+     ATTR_TYPEDEFname = 332,
+     ATTR_TYPEGENname = 333,
+     INTEGERconstant = 334,
+     FLOATINGconstant = 335,
+     CHARACTERconstant = 336,
+     STRINGliteral = 337,
+     ZERO = 338,
+     ONE = 339,
+     ARROW = 340,
+     ICR = 341,
+     DECR = 342,
+     LS = 343,
+     RS = 344,
+     LE = 345,
+     GE = 346,
+     EQ = 347,
+     NE = 348,
+     ANDAND = 349,
+     OROR = 350,
+     ELLIPSIS = 351,
+     MULTassign = 352,
+     DIVassign = 353,
+     MODassign = 354,
+     PLUSassign = 355,
+     MINUSassign = 356,
+     LSassign = 357,
+     RSassign = 358,
+     ANDassign = 359,
+     ERassign = 360,
+     ORassign = 361,
+     ATassign = 362,
+     THEN = 363
    };
 #endif
@@ -167,88 +168,89 @@
 #define SIGNED 277
 #define UNSIGNED 278
-#define BOOL 279
-#define COMPLEX 280
-#define IMAGINARY 281
-#define TYPEOF 282
-#define LABEL 283
-#define ENUM 284
-#define STRUCT 285
-#define UNION 286
-#define TYPE 287
-#define FTYPE 288
-#define DTYPE 289
-#define CONTEXT 290
-#define SIZEOF 291
-#define OFFSETOF 292
-#define ATTRIBUTE 293
-#define EXTENSION 294
-#define IF 295
-#define ELSE 296
-#define SWITCH 297
-#define CASE 298
-#define DEFAULT 299
-#define DO 300
-#define WHILE 301
-#define FOR 302
-#define BREAK 303
-#define CONTINUE 304
-#define GOTO 305
-#define RETURN 306
-#define CHOOSE 307
-#define DISABLE 308
-#define ENABLE 309
-#define FALLTHRU 310
-#define TRY 311
-#define CATCH 312
-#define CATCHRESUME 313
-#define FINALLY 314
-#define THROW 315
-#define THROWRESUME 316
-#define AT 317
-#define ASM 318
-#define ALIGNAS 319
-#define ALIGNOF 320
-#define ATOMIC 321
-#define GENERIC 322
-#define NORETURN 323
-#define STATICASSERT 324
-#define THREADLOCAL 325
-#define IDENTIFIER 326
-#define QUOTED_IDENTIFIER 327
-#define TYPEDEFname 328
-#define TYPEGENname 329
-#define ATTR_IDENTIFIER 330
-#define ATTR_TYPEDEFname 331
-#define ATTR_TYPEGENname 332
-#define INTEGERconstant 333
-#define FLOATINGconstant 334
-#define CHARACTERconstant 335
-#define STRINGliteral 336
-#define ZERO 337
-#define ONE 338
-#define ARROW 339
-#define ICR 340
-#define DECR 341
-#define LS 342
-#define RS 343
-#define LE 344
-#define GE 345
-#define EQ 346
-#define NE 347
-#define ANDAND 348
-#define OROR 349
-#define ELLIPSIS 350
-#define MULTassign 351
-#define DIVassign 352
-#define MODassign 353
-#define PLUSassign 354
-#define MINUSassign 355
-#define LSassign 356
-#define RSassign 357
-#define ANDassign 358
-#define ERassign 359
-#define ORassign 360
-#define ATassign 361
-#define THEN 362
+#define VALIST 279
+#define BOOL 280
+#define COMPLEX 281
+#define IMAGINARY 282
+#define TYPEOF 283
+#define LABEL 284
+#define ENUM 285
+#define STRUCT 286
+#define UNION 287
+#define OTYPE 288
+#define FTYPE 289
+#define DTYPE 290
+#define TRAIT 291
+#define SIZEOF 292
+#define OFFSETOF 293
+#define ATTRIBUTE 294
+#define EXTENSION 295
+#define IF 296
+#define ELSE 297
+#define SWITCH 298
+#define CASE 299
+#define DEFAULT 300
+#define DO 301
+#define WHILE 302
+#define FOR 303
+#define BREAK 304
+#define CONTINUE 305
+#define GOTO 306
+#define RETURN 307
+#define CHOOSE 308
+#define DISABLE 309
+#define ENABLE 310
+#define FALLTHRU 311
+#define TRY 312
+#define CATCH 313
+#define CATCHRESUME 314
+#define FINALLY 315
+#define THROW 316
+#define THROWRESUME 317
+#define AT 318
+#define ASM 319
+#define ALIGNAS 320
+#define ALIGNOF 321
+#define ATOMIC 322
+#define GENERIC 323
+#define NORETURN 324
+#define STATICASSERT 325
+#define THREADLOCAL 326
+#define IDENTIFIER 327
+#define QUOTED_IDENTIFIER 328
+#define TYPEDEFname 329
+#define TYPEGENname 330
+#define ATTR_IDENTIFIER 331
+#define ATTR_TYPEDEFname 332
+#define ATTR_TYPEGENname 333
+#define INTEGERconstant 334
+#define FLOATINGconstant 335
+#define CHARACTERconstant 336
+#define STRINGliteral 337
+#define ZERO 338
+#define ONE 339
+#define ARROW 340
+#define ICR 341
+#define DECR 342
+#define LS 343
+#define RS 344
+#define LE 345
+#define GE 346
+#define EQ 347
+#define NE 348
+#define ANDAND 349
+#define OROR 350
+#define ELLIPSIS 351
+#define MULTassign 352
+#define DIVassign 353
+#define MODassign 354
+#define PLUSassign 355
+#define MINUSassign 356
+#define LSassign 357
+#define RSassign 358
+#define ANDassign 359
+#define ERassign 360
+#define ORassign 361
+#define ATassign 362
+#define THEN 363
 
 
@@ -260,5 +262,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 110 "parser.yy"
+#line 111 "parser.yy"
 
 	Token tok;
@@ -277,5 +279,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 280 "Parser/parser.h"
+#line 282 "Parser/parser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/parser.yy	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Feb  1 18:22:42 2016
-// Update Count     : 1483
+// Last Modified On : Wed Mar  2 17:24:45 2016
+// Update Count     : 1495
 // 
 
@@ -74,8 +74,9 @@
 %token FORALL LVALUE									// CFA
 %token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED
+%token VALIST											// GCC
 %token BOOL COMPLEX IMAGINARY							// C99
 %token TYPEOF LABEL										// GCC
 %token ENUM STRUCT UNION
-%token TYPE FTYPE DTYPE CONTEXT							// CFA
+%token OTYPE FTYPE DTYPE TRAIT						// CFA
 %token SIZEOF OFFSETOF
 %token ATTRIBUTE EXTENSION								// GCC
@@ -171,5 +172,5 @@
 %type<decl> basic_declaration_specifier basic_type_name basic_type_specifier direct_type_name indirect_type_name
 
-%type<decl> context_declaration context_declaration_list context_declaring_list context_specifier
+%type<decl> trait_declaration trait_declaration_list trait_declaring_list trait_specifier
 
 %type<decl> declaration declaration_list declaration_list_opt declaration_qualifier_list
@@ -197,5 +198,5 @@
 %type<decl> new_array_parameter_1st_dimension
 
-%type<decl> new_context_declaring_list new_declaration new_field_declaring_list
+%type<decl> new_trait_declaring_list new_declaration new_field_declaring_list
 %type<decl> new_function_declaration new_function_return new_function_specifier
 
@@ -448,5 +449,5 @@
 		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); }
 	| OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
-	{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
+		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
 	| ATTR_IDENTIFIER
 		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); }
@@ -1020,5 +1021,5 @@
 	| new_function_declaration pop ';'
 	| type_declaring_list pop ';'
-	| context_specifier pop ';'
+	| trait_specifier pop ';'
 	;
 
@@ -1345,4 +1346,6 @@
 	| IMAGINARY											// C99
 		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
+	| VALIST											// GCC, __builtin_va_list
+		{ $$ = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
 	;
 
@@ -1803,5 +1806,5 @@
 
 type_class:												// CFA
-	TYPE
+	OTYPE
 		{ $$ = DeclarationNode::Type; }
 	| DTYPE
@@ -1821,10 +1824,10 @@
 	'|' no_attr_identifier_or_type_name '(' type_name_list ')'
 		{
-			typedefTable.openContext( *$2 );
-			$$ = DeclarationNode::newContextUse( $2, $4 );
-		}
-	| '|' '{' push context_declaration_list '}'
+			typedefTable.openTrait( *$2 );
+			$$ = DeclarationNode::newTraitUse( $2, $4 );
+		}
+	| '|' '{' push trait_declaration_list '}'
 		{ $$ = $4; }
-	| '|' '(' push type_parameter_list pop ')' '{' push context_declaration_list '}' '(' type_name_list ')'
+	| '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_name_list ')'
 		{ $$ = 0; }
 	;
@@ -1841,7 +1844,7 @@
 
 type_declaring_list:									// CFA
-	TYPE type_declarator
-		{ $$ = $2; }
-	| storage_class_list TYPE type_declarator
+	OTYPE type_declarator
+		{ $$ = $2; }
+	| storage_class_list OTYPE type_declarator
 		{ $$ = $3->addQualifiers( $1 ); }
 	| type_declaring_list ',' type_declarator
@@ -1869,35 +1872,35 @@
 	;
 
-context_specifier:										// CFA
-	CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
+trait_specifier:										// CFA
+	TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
 		{
 			typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
-			$$ = DeclarationNode::newContext( $2, $5, 0 );
-		}
-	| CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'
-		{
-			typedefTable.enterContext( *$2 );
+			$$ = DeclarationNode::newTrait( $2, $5, 0 );
+		}
+	| TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'
+		{
+			typedefTable.enterTrait( *$2 );
 			typedefTable.enterScope();
 		}
-	  context_declaration_list '}'
-		{
-			typedefTable.leaveContext();
+	  trait_declaration_list '}'
+		{
+			typedefTable.leaveTrait();
 			typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
-			$$ = DeclarationNode::newContext( $2, $5, $10 );
-		}
-	;
-
-context_declaration_list:								// CFA
-	context_declaration
-	| context_declaration_list push context_declaration
+			$$ = DeclarationNode::newTrait( $2, $5, $10 );
+		}
+	;
+
+trait_declaration_list:								// CFA
+	trait_declaration
+	| trait_declaration_list push trait_declaration
 		{ $$ = $1->appendList( $3 ); }
 	;
 
-context_declaration:									// CFA
-	new_context_declaring_list pop ';'
-	| context_declaring_list pop ';'
-	;
-
-new_context_declaring_list:								// CFA
+trait_declaration:									// CFA
+	new_trait_declaring_list pop ';'
+	| trait_declaring_list pop ';'
+	;
+
+new_trait_declaring_list:								// CFA
 	new_variable_specifier
 		{
@@ -1910,5 +1913,5 @@
 			$$ = $1;
 		}
-	| new_context_declaring_list pop ',' push identifier_or_type_name
+	| new_trait_declaring_list pop ',' push identifier_or_type_name
 		{
 			typedefTable.addToEnclosingScope2( *$5, TypedefTable::ID );
@@ -1917,5 +1920,5 @@
 	;
 
-context_declaring_list:									// CFA
+trait_declaring_list:									// CFA
 	type_specifier declarator
 		{
@@ -1923,5 +1926,5 @@
 			$$ = $2->addType( $1 );
 		}
-	| context_declaring_list pop ',' push declarator
+	| trait_declaring_list pop ',' push declarator
 		{
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
Index: src/ResolvExpr/AdjustExprType.cc
===================================================================
--- src/ResolvExpr/AdjustExprType.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/AdjustExprType.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 23:41:42 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat May 16 23:54:02 2015
-// Update Count     : 3
+// Last Modified On : Wed Mar  2 17:34:53 2016
+// Update Count     : 4
 // 
 
@@ -33,5 +33,5 @@
 		virtual Type* mutate( UnionInstType *aggregateUseType );
 		virtual Type* mutate( EnumInstType *aggregateUseType );
-		virtual Type* mutate( ContextInstType *aggregateUseType );
+		virtual Type* mutate( TraitInstType *aggregateUseType );
 		virtual Type* mutate( TypeInstType *aggregateUseType );
 		virtual Type* mutate( TupleType *tupleType );
@@ -87,5 +87,5 @@
 	}
 
-	Type *AdjustExprType::mutate( ContextInstType *aggregateUseType ) {
+	Type *AdjustExprType::mutate( TraitInstType *aggregateUseType ) {
 		return aggregateUseType;
 	}
Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/CommonType.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 06:59:27 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 07:04:50 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:35:34 2016
+// Update Count     : 3
 //
 
@@ -35,5 +35,5 @@
 		virtual void visit( UnionInstType *aggregateUseType );
 		virtual void visit( EnumInstType *aggregateUseType );
-		virtual void visit( ContextInstType *aggregateUseType );
+		virtual void visit( TraitInstType *aggregateUseType );
 		virtual void visit( TypeInstType *aggregateUseType );
 		virtual void visit( TupleType *tupleType );
@@ -186,5 +186,5 @@
 	}
 
-	void CommonType::visit( ContextInstType *aggregateUseType ) {
+	void CommonType::visit( TraitInstType *aggregateUseType ) {
 	}
 
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/ConversionCost.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 07:06:19 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 07:22:19 2015
-// Update Count     : 4
+// Last Modified On : Wed Mar  2 17:35:46 2016
+// Update Count     : 6
 //
 
@@ -206,5 +206,5 @@
 	}
 
-	void ConversionCost::visit(ContextInstType *inst) {
+	void ConversionCost::visit(TraitInstType *inst) {
 	}
 
@@ -249,5 +249,5 @@
 
 	void ConversionCost::visit(VarArgsType *varArgsType) {
-		if ( VarArgsType *destAsVarArgs = dynamic_cast< VarArgsType* >( dest ) ) {
+		if ( dynamic_cast< VarArgsType* >( dest ) ) {
 			cost = Cost::zero;
 		}
Index: src/ResolvExpr/ConversionCost.h
===================================================================
--- src/ResolvExpr/ConversionCost.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/ConversionCost.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 09:37:28 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 09:39:23 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:35:56 2016
+// Update Count     : 3
 //
 
@@ -37,5 +37,5 @@
 		virtual void visit(UnionInstType *aggregateUseType);
 		virtual void visit(EnumInstType *aggregateUseType);
-		virtual void visit(ContextInstType *aggregateUseType);
+		virtual void visit(TraitInstType *aggregateUseType);
 		virtual void visit(TypeInstType *aggregateUseType);
 		virtual void visit(TupleType *tupleType);
Index: src/ResolvExpr/PtrsAssignable.cc
===================================================================
--- src/ResolvExpr/PtrsAssignable.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/PtrsAssignable.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 11:44:11 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Mon Sep 21 14:34:58 2015
-// Update Count     : 7
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:36:05 2016
+// Update Count     : 8
 //
 
@@ -35,5 +35,5 @@
 		virtual void visit( UnionInstType *inst );
 		virtual void visit( EnumInstType *inst );
-		virtual void visit( ContextInstType *inst );
+		virtual void visit( TraitInstType *inst );
 		virtual void visit( TypeInstType *inst );
 		virtual void visit( TupleType *tupleType );
@@ -101,5 +101,5 @@
 	}
 
-	void PtrsAssignable::visit( ContextInstType *inst ) {
+	void PtrsAssignable::visit( TraitInstType *inst ) {
 		// I definitely don't think we should be doing anything here
 	}
Index: src/ResolvExpr/PtrsCastable.cc
===================================================================
--- src/ResolvExpr/PtrsCastable.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/PtrsCastable.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 11:48:00 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Mon Oct 05 14:49:12 2015
-// Update Count     : 7
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:36:18 2016
+// Update Count     : 8
 //
 
@@ -36,5 +36,5 @@
 		virtual void visit(UnionInstType *inst);
 		virtual void visit(EnumInstType *inst);
-		virtual void visit(ContextInstType *inst);
+		virtual void visit(TraitInstType *inst);
 		virtual void visit(TypeInstType *inst);
 		virtual void visit(TupleType *tupleType);
@@ -129,5 +129,5 @@
 	}
 
-	void PtrsCastable::visit(ContextInstType *inst) {
+	void PtrsCastable::visit(TraitInstType *inst) {
 		// I definitely don't think we should be doing anything here
 	}
Index: src/ResolvExpr/RenameVars.cc
===================================================================
--- src/ResolvExpr/RenameVars.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/RenameVars.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 12:05:18 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun  8 14:51:35 2015
-// Update Count     : 4
+// Last Modified On : Wed Mar  2 17:36:32 2016
+// Update Count     : 5
 //
 
@@ -86,5 +86,5 @@
 	}
 
-	void RenameVars::visit( ContextInstType *aggregateUseType ) {
+	void RenameVars::visit( TraitInstType *aggregateUseType ) {
 		typeBefore( aggregateUseType );
 		acceptAll( aggregateUseType->get_parameters(), *this );
Index: src/ResolvExpr/RenameVars.h
===================================================================
--- src/ResolvExpr/RenameVars.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/RenameVars.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 12:10:28 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 12:11:53 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:36:39 2016
+// Update Count     : 3
 //
 
@@ -40,5 +40,5 @@
 		virtual void visit( UnionInstType *aggregateUseType );
 		virtual void visit( EnumInstType *aggregateUseType );
-		virtual void visit( ContextInstType *aggregateUseType );
+		virtual void visit( TraitInstType *aggregateUseType );
 		virtual void visit( TypeInstType *aggregateUseType );
 		virtual void visit( TupleType *tupleType );
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/Unify.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 12:27:10 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Sep 02 14:43:22 2015
-// Update Count     : 36
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:37:05 2016
+// Update Count     : 37
 //
 
@@ -56,5 +56,5 @@
 		virtual void visit(UnionInstType *aggregateUseType);
 		virtual void visit(EnumInstType *aggregateUseType);
-		virtual void visit(ContextInstType *aggregateUseType);
+		virtual void visit(TraitInstType *aggregateUseType);
 		virtual void visit(TypeInstType *aggregateUseType);
 		virtual void visit(TupleType *tupleType);
@@ -541,5 +541,5 @@
 	}
 
-	void Unify::visit(ContextInstType *contextInst) {
+	void Unify::visit(TraitInstType *contextInst) {
 		handleRefType( contextInst, type2 );
 	}
Index: src/SymTab/AggregateTable.h
===================================================================
--- src/SymTab/AggregateTable.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/AggregateTable.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 16:17:26 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 16:19:29 2015
-// Update Count     : 4
+// Last Modified On : Wed Mar  2 17:31:00 2016
+// Update Count     : 5
 //
 
@@ -42,5 +42,5 @@
 	typedef StackTable< EnumDecl, AggregateTableConflictFunction< EnumDecl > > EnumTable;
 	typedef StackTable< UnionDecl, AggregateTableConflictFunction< UnionDecl > > UnionTable;
-	typedef StackTable< ContextDecl, AggregateTableConflictFunction< ContextDecl > > ContextTable;
+	typedef StackTable< TraitDecl, AggregateTableConflictFunction< TraitDecl > > TraitTable;
 } // namespace SymTab
 
Index: src/SymTab/FixFunction.cc
===================================================================
--- src/SymTab/FixFunction.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/FixFunction.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 16:19:49 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 16:22:54 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:31:10 2016
+// Update Count     : 3
 //
 
@@ -61,5 +61,5 @@
 	}
 
-	Type * FixFunction::mutate(ContextInstType *aggregateUseType) {
+	Type * FixFunction::mutate(TraitInstType *aggregateUseType) {
 		return aggregateUseType;
 	}
Index: src/SymTab/FixFunction.h
===================================================================
--- src/SymTab/FixFunction.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/FixFunction.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 17:02:08 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 17:03:43 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:34:06 2016
+// Update Count     : 3
 //
 
@@ -38,5 +38,5 @@
 		virtual Type* mutate(UnionInstType *aggregateUseType);
 		virtual Type* mutate(EnumInstType *aggregateUseType);
-		virtual Type* mutate(ContextInstType *aggregateUseType);
+		virtual Type* mutate(TraitInstType *aggregateUseType);
 		virtual Type* mutate(TypeInstType *aggregateUseType);
 		virtual Type* mutate(TupleType *tupleType);
Index: src/SymTab/ImplementationType.cc
===================================================================
--- src/SymTab/ImplementationType.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/ImplementationType.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 21:32:01 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 21:34:40 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:31:20 2016
+// Update Count     : 3
 //
 
@@ -37,5 +37,5 @@
 		virtual void visit(UnionInstType *aggregateUseType);
 		virtual void visit(EnumInstType *aggregateUseType);
-		virtual void visit(ContextInstType *aggregateUseType);
+		virtual void visit(TraitInstType *aggregateUseType);
 		virtual void visit(TypeInstType *aggregateUseType);
 		virtual void visit(TupleType *tupleType);
@@ -96,5 +96,5 @@
 	}
 
-	void ImplementationType::visit(ContextInstType *aggregateUseType) {
+	void ImplementationType::visit(TraitInstType *aggregateUseType) {
 	}
 
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/Indexer.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 21:37:33 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Aug 05 13:52:42 2015
-// Update Count     : 10
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:31:29 2016
+// Update Count     : 11
 //
 
@@ -143,5 +143,5 @@
 	}
 
-	void Indexer::visit( ContextDecl *aggregateDecl ) {
+	void Indexer::visit( TraitDecl *aggregateDecl ) {
 		enterScope();
 		acceptAll( aggregateDecl->get_parameters(), *this );
@@ -293,5 +293,5 @@
 
 
-	void Indexer::visit( ContextInstType *contextInst ) {
+	void Indexer::visit( TraitInstType *contextInst ) {
 		acceptAll( contextInst->get_parameters(), *this );
 		acceptAll( contextInst->get_members(), *this );
@@ -350,5 +350,5 @@
 	}
 
-	ContextDecl  * Indexer::lookupContext( const std::string &id ) const {
+	TraitDecl  * Indexer::lookupTrait( const std::string &id ) const {
 		return contextTable.lookup( id );
 	}
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/Indexer.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 21:38:55 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Thu Sep 17 16:05:38 2015
-// Update Count     : 5
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:34:14 2016
+// Update Count     : 6
 //
 
@@ -39,5 +39,5 @@
 		virtual void visit( UnionDecl *aggregateDecl );
 		virtual void visit( EnumDecl *aggregateDecl );
-		virtual void visit( ContextDecl *aggregateDecl );
+		virtual void visit( TraitDecl *aggregateDecl );
 
 		virtual void visit( CompoundStmt *compoundStmt );
@@ -67,5 +67,5 @@
 		virtual void visit( UntypedValofExpr *valofExpr );
 
-		virtual void visit( ContextInstType *contextInst );
+		virtual void visit( TraitInstType *contextInst );
 		virtual void visit( StructInstType *contextInst );
 		virtual void visit( UnionInstType *contextInst );
@@ -84,5 +84,5 @@
 		EnumDecl *lookupEnum( const std::string &id ) const;
 		UnionDecl *lookupUnion( const std::string &id ) const;
-		ContextDecl *lookupContext( const std::string &id ) const;
+		TraitDecl *lookupTrait( const std::string &id ) const;
   
 		void print( std::ostream &os, int indent = 0 ) const;
@@ -93,5 +93,5 @@
 		EnumTable enumTable;
 		UnionTable unionTable;
-		ContextTable contextTable;
+		TraitTable contextTable;
   
 		bool doDebug;					// display debugging trace
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/Validate.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 21:50:04 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jan 27 22:03:12 2016
-// Update Count     : 225
+// Last Modified On : Wed Mar  2 17:31:39 2016
+// Update Count     : 226
 //
 
@@ -101,5 +101,5 @@
 		virtual void visit( StructInstType *structInst );
 		virtual void visit( UnionInstType *unionInst );
-		virtual void visit( ContextInstType *contextInst );
+		virtual void visit( TraitInstType *contextInst );
 		virtual void visit( StructDecl *structDecl );
 		virtual void visit( UnionDecl *unionDecl );
@@ -137,5 +137,5 @@
 		virtual void visit( UnionDecl *structDecl );
 		virtual void visit( TypeDecl *typeDecl );
-		virtual void visit( ContextDecl *ctxDecl );
+		virtual void visit( TraitDecl *ctxDecl );
 		virtual void visit( FunctionDecl *functionDecl );
 
@@ -192,5 +192,5 @@
 		virtual Declaration *mutate( UnionDecl * unionDecl );
 		virtual Declaration *mutate( EnumDecl * enumDecl );
-		virtual Declaration *mutate( ContextDecl * contextDecl );
+		virtual Declaration *mutate( TraitDecl * contextDecl );
 
 		template<typename AggDecl>
@@ -404,7 +404,7 @@
 	}
 
-	void Pass2::visit( ContextInstType *contextInst ) {
+	void Pass2::visit( TraitInstType *contextInst ) {
 		Parent::visit( contextInst );
-		ContextDecl *ctx = indexer->lookupContext( contextInst->get_name() );
+		TraitDecl *ctx = indexer->lookupTrait( contextInst->get_name() );
 		if ( ! ctx ) {
 			throw SemanticError( "use of undeclared context " + contextInst->get_name() );
@@ -412,5 +412,5 @@
 		for ( std::list< TypeDecl * >::const_iterator i = ctx->get_parameters().begin(); i != ctx->get_parameters().end(); ++i ) {
 			for ( std::list< DeclarationWithType * >::const_iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) {
-				if ( ContextInstType *otherCtx = dynamic_cast< ContextInstType * >(*assert ) ) {
+				if ( TraitInstType *otherCtx = dynamic_cast< TraitInstType * >(*assert ) ) {
 					cloneAll( otherCtx->get_members(), contextInst->get_members() );
 				} else {
@@ -476,5 +476,5 @@
 			while ( ! toBeDone.empty() ) {
 				for ( std::list< DeclarationWithType * >::iterator assertion = toBeDone.begin(); assertion != toBeDone.end(); ++assertion ) {
-					if ( ContextInstType *ctx = dynamic_cast< ContextInstType * >( (*assertion )->get_type() ) ) {
+					if ( TraitInstType *ctx = dynamic_cast< TraitInstType * >( (*assertion )->get_type() ) ) {
 						for ( std::list< Declaration * >::const_iterator i = ctx->get_members().begin(); i != ctx->get_members().end(); ++i ) {
 							DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *i );
@@ -851,5 +851,5 @@
 	}
 
-	void AutogenerateRoutines::visit( ContextDecl *) {
+	void AutogenerateRoutines::visit( TraitDecl *) {
 		// ensure that we don't add assignment ops for types defined as part of the context
 	}
@@ -1075,5 +1075,5 @@
 	}
 
-		Declaration *EliminateTypedef::mutate( ContextDecl * contextDecl ) {
+		Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) {
 		Mutator::mutate( contextDecl );
 		return handleAggregate( contextDecl );
Index: src/SynTree/AggregateDecl.cc
===================================================================
--- src/SynTree/AggregateDecl.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/AggregateDecl.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 23:56:39 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 13 08:12:49 2015
-// Update Count     : 6
+// Last Modified On : Wed Mar  2 17:28:00 2016
+// Update Count     : 7
 //
 
@@ -64,5 +64,5 @@
 std::string EnumDecl::typeString() const { return "enum"; }
 
-std::string ContextDecl::typeString() const { return "context"; }
+std::string TraitDecl::typeString() const { return "context"; }
 
 // Local Variables: //
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/Declaration.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -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:22 2015
-// Update Count     : 32
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:28:11 2016
+// Update Count     : 33
 //
 
@@ -246,11 +246,11 @@
 };
 
-class ContextDecl : public AggregateDecl {
-	typedef AggregateDecl Parent;
-  public:
-	ContextDecl( const std::string &name ) : Parent( name ) {}
-	ContextDecl( const ContextDecl &other ) : Parent( other ) {}
-
-	virtual ContextDecl *clone() const { return new ContextDecl( *this ); }
+class TraitDecl : public AggregateDecl {
+	typedef AggregateDecl Parent;
+  public:
+	TraitDecl( const std::string &name ) : Parent( name ) {}
+	TraitDecl( const TraitDecl &other ) : Parent( other ) {}
+
+	virtual TraitDecl *clone() const { return new TraitDecl( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/Mutator.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 25 19:21:33 2015
-// Update Count     : 11
+// Last Modified On : Wed Mar  2 17:28:20 2016
+// Update Count     : 12
 //
 
@@ -63,5 +63,5 @@
 }
 
-Declaration *Mutator::mutate( ContextDecl *aggregateDecl ) {
+Declaration *Mutator::mutate( TraitDecl *aggregateDecl ) {
 	handleAggregateDecl( aggregateDecl );
 	return aggregateDecl;
@@ -387,5 +387,5 @@
 }
 
-Type *Mutator::mutate( ContextInstType *aggregateUseType ) {
+Type *Mutator::mutate( TraitInstType *aggregateUseType ) {
 	handleReferenceToType( aggregateUseType );
 	mutateAll( aggregateUseType->get_members(), *this );
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/Mutator.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Nov 19 22:26:16 2015
-// Update Count     : 8
+// Last Modified On : Wed Mar  2 17:33:11 2016
+// Update Count     : 9
 //
 #include <cassert>
@@ -31,5 +31,5 @@
 	virtual Declaration* mutate( UnionDecl *aggregateDecl );
 	virtual Declaration* mutate( EnumDecl *aggregateDecl );
-	virtual Declaration* mutate( ContextDecl *aggregateDecl );
+	virtual Declaration* mutate( TraitDecl *aggregateDecl );
 	virtual TypeDecl* mutate( TypeDecl *typeDecl );
 	virtual Declaration* mutate( TypedefDecl *typeDecl );
@@ -85,5 +85,5 @@
 	virtual Type* mutate( UnionInstType *aggregateUseType );
 	virtual Type* mutate( EnumInstType *aggregateUseType );
-	virtual Type* mutate( ContextInstType *aggregateUseType );
+	virtual Type* mutate( TraitInstType *aggregateUseType );
 	virtual Type* mutate( TypeInstType *aggregateUseType );
 	virtual Type* mutate( TupleType *tupleType );
Index: src/SynTree/ReferenceToType.cc
===================================================================
--- src/SynTree/ReferenceToType.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/ReferenceToType.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jun  7 08:31:48 2015
-// Update Count     : 4
+// Last Modified On : Wed Mar  2 17:28:51 2016
+// Update Count     : 5
 //
 
@@ -83,11 +83,11 @@
 std::string EnumInstType::typeString() const { return "enum"; }
 
-std::string ContextInstType::typeString() const { return "context"; }
+std::string TraitInstType::typeString() const { return "context"; }
 
-ContextInstType::ContextInstType( const ContextInstType &other ) : Parent( other ) {
+TraitInstType::TraitInstType( const TraitInstType &other ) : Parent( other ) {
 	cloneAll( other.members, members );
 }
 
-ContextInstType::~ContextInstType() {
+TraitInstType::~TraitInstType() {
 	deleteAll( members );
 }
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/SynTree.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 23 23:25:04 2015
-// Update Count     : 3
+// Last Modified On : Wed Mar  2 17:29:00 2016
+// Update Count     : 4
 //
 
@@ -30,5 +30,5 @@
 class UnionDecl;
 class EnumDecl;
-class ContextDecl;
+class TraitDecl;
 class NamedTypeDecl;
 class TypeDecl;
@@ -92,5 +92,5 @@
 class UnionInstType;
 class EnumInstType;
-class ContextInstType;
+class TraitInstType;
 class TypeInstType;
 class TupleType;
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/Type.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -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 Dec 18 14:46:18 2015
-// Update Count     : 18
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:29:08 2016
+// Update Count     : 21
 //
 
@@ -296,14 +296,14 @@
 };
 
-class ContextInstType : public ReferenceToType {
+class TraitInstType : public ReferenceToType {
 	typedef ReferenceToType Parent;
   public:
-	ContextInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {}
-	ContextInstType( const ContextInstType &other );
-	~ContextInstType();
+	TraitInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {}
+	TraitInstType( const TraitInstType &other );
+	~TraitInstType();
 
 	std::list< Declaration* >& get_members() { return members; }
 
-	virtual ContextInstType *clone() const { return new ContextInstType( *this ); }
+	virtual TraitInstType *clone() const { return new TraitInstType( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
@@ -402,6 +402,7 @@
 /// Represents the GCC built-in varargs type
 class VarArgsType : public Type {
+  public:
 	VarArgsType();
-	VarArgsType( Type::Qualifiers &tq );
+	VarArgsType( Type::Qualifiers tq );
 
 	virtual VarArgsType *clone() const { return new VarArgsType( *this ); }
Index: src/SynTree/TypeSubstitution.cc
===================================================================
--- src/SynTree/TypeSubstitution.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/TypeSubstitution.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 18 11:10:04 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:29:15 2016
+// Update Count     : 3
 //
 
@@ -190,5 +190,5 @@
 }
 
-Type * TypeSubstitution::mutate( ContextInstType *aggregateUseType ) {
+Type * TypeSubstitution::mutate( TraitInstType *aggregateUseType ) {
 	return handleType( aggregateUseType );
 }
Index: src/SynTree/TypeSubstitution.h
===================================================================
--- src/SynTree/TypeSubstitution.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/TypeSubstitution.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 18 11:12:30 2015
-// Update Count     : 1
+// Last Modified On : Wed Mar  2 17:33:19 2016
+// Update Count     : 2
 //
 
@@ -72,5 +72,5 @@
 	virtual Type* mutate(UnionInstType *aggregateUseType);
 	virtual Type* mutate(EnumInstType *aggregateUseType);
-	virtual Type* mutate(ContextInstType *aggregateUseType);
+	virtual Type* mutate(TraitInstType *aggregateUseType);
 	virtual Type* mutate(TupleType *tupleType);
 	virtual Type* mutate(VarArgsType *varArgsType);
Index: src/SynTree/VarArgsType.cc
===================================================================
--- src/SynTree/VarArgsType.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/VarArgsType.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Aaron B. Moss
 // Created On       : Thu Feb 25 16:34:00 2016
-// Last Modified By : Aaron B. Moss
-// Last Modified On : Thu Feb 25 16:34:00 2016
-// Update Count     : 1
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:10:40 2016
+// Update Count     : 2
 //
 
@@ -18,5 +18,5 @@
 VarArgsType::VarArgsType() : Type( Type::Qualifiers() ) {}
 
-VarArgsType::VarArgsType( Type::Qualifiers &tq ) : Type( tq ) {}
+VarArgsType::VarArgsType( Type::Qualifiers tq ) : Type( tq ) {}
 
 void VarArgsType::print( std::ostream &os, int indent ) const {
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/Visitor.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul 24 16:11:05 2015
-// Update Count     : 15
+// Last Modified On : Wed Mar  2 17:29:23 2016
+// Update Count     : 16
 //
 
@@ -56,5 +56,5 @@
 }
 
-void Visitor::visit( ContextDecl *aggregateDecl ) {
+void Visitor::visit( TraitDecl *aggregateDecl ) {
 	visit( static_cast< AggregateDecl* >( aggregateDecl ) );
 }
@@ -326,5 +326,5 @@
 }
 
-void Visitor::visit( ContextInstType *aggregateUseType ) {
+void Visitor::visit( TraitInstType *aggregateUseType ) {
 	visit( static_cast< ReferenceToType * >( aggregateUseType ) );
 	acceptAll( aggregateUseType->get_members(), *this );
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/Visitor.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jan 25 21:20:44 2016
-// Update Count     : 5
+// Last Modified On : Wed Mar  2 17:33:35 2016
+// Update Count     : 6
 //
 
@@ -31,5 +31,5 @@
 	virtual void visit( UnionDecl *aggregateDecl );
 	virtual void visit( EnumDecl *aggregateDecl );
-	virtual void visit( ContextDecl *aggregateDecl );
+	virtual void visit( TraitDecl *aggregateDecl );
 	virtual void visit( TypeDecl *typeDecl );
 	virtual void visit( TypedefDecl *typeDecl );
@@ -85,5 +85,5 @@
 	virtual void visit( UnionInstType *aggregateUseType );
 	virtual void visit( EnumInstType *aggregateUseType );
-	virtual void visit( ContextInstType *aggregateUseType );
+	virtual void visit( TraitInstType *aggregateUseType );
 	virtual void visit( TypeInstType *aggregateUseType );
 	virtual void visit( TupleType *tupleType );
Index: src/driver/Makefile.in
===================================================================
--- src/driver/Makefile.in	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/driver/Makefile.in	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -196,7 +196,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/driver/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/driver/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/driver/Makefile
+	  $(AUTOMAKE) --foreign src/driver/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: src/examples/Makefile.in
===================================================================
--- src/examples/Makefile.in	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/Makefile.in	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -189,7 +189,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/examples/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/examples/Makefile
+	  $(AUTOMAKE) --foreign src/examples/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: src/examples/abs.c
===================================================================
--- src/examples/abs.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/abs.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 18:26:16 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 09:32:04 2016
-// Update Count     : 44
+// Last Modified On : Wed Mar  2 15:07:26 2016
+// Update Count     : 51
 //
 
@@ -20,13 +20,13 @@
 	char ch = -65;
 	sout | "char\t\t\t"					| ch     | "\tabs " | abs( ch ) | endl;
-	sout | "signed int\t\t"				| -65    | "\tabs " | abs( -65 ) | endl;
-	sout | "signed long int\t\t" 		| -65l   | "\tabs " | abs( -65l ) | endl;
-	sout | "signed long long int\t"		| -65ll  | "\tabs " | abs( -65ll ) | endl;
-	sout | "float\t\t\t" 				| -65.0f | "\tabs " | abs( -65.0f ) | endl;
-	sout | "double\t\t\t"				| -65.0  | "\tabs " | abs( -65.0 ) | endl;
-	sout | "long double\t\t"			| -65.0l | "\tabs " | abs( -65.0l ) | endl;
-	sout | "float _Complex\t\t"			| -65.0F-2.0iF | "\tabs " | abs( -65.0F-2.0iF ) | endl;
-	sout | "double _Complex\t\t"		| -65.0D-2.0iD | "\tabs " | abs( -65.0D-2.0iD ) | endl;
-	sout | "long double _Complex\t"		| -65.0L-2.0iL | "\tabs " | abs( -65.0L-2.0iL ) | endl;
+	sout | "signed int\t\t"				| -65    | "\tabs" | abs( -65 ) | endl;
+	sout | "signed long int\t\t" 		| -65l   | "\tabs" | abs( -65l ) | endl;
+	sout | "signed long long int\t"		| -65ll  | "\tabs" | abs( -65ll ) | endl;
+	sout | "float\t\t\t" 				| -65.0f | "\tabs" | abs( -65.0f ) | endl;
+	sout | "double\t\t\t"				| -65.0  | "\tabs" | abs( -65.0 ) | endl;
+	sout | "long double\t\t"			| -65.0l | "\tabs" | abs( -65.0l ) | endl;
+	sout | "float _Complex\t\t"			| -65.0F-2.0iF | "\tabs" | abs( -65.0F-2.0iF ) | endl;
+	sout | "double _Complex\t\t"		| -65.0D-2.0iD | "\tabs" | abs( -65.0D-2.0iD ) | endl;
+	sout | "long double _Complex\t"		| -65.0L-2.0iL | "\tabs" | abs( -65.0L-2.0iL ) | endl;
 } // main
 
Index: src/examples/array.c
===================================================================
--- src/examples/array.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/array.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,11 +10,11 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:10:13 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 18:13:52 2016
+// Update Count     : 3
 //
 
 #include "array.h"
 
-/// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )
+/// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )
 /// [ array_iterator begin, array_iterator end ]
 /// get_iterators( array_type array )
@@ -25,5 +25,5 @@
 
 // The first element is always at index 0.
-forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
+forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
 elt_type * begin( array_type array ) {
 	return &array[ 0 ];
@@ -31,5 +31,5 @@
 
 // The end iterator should point one past the last element.
-forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
+forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
 elt_type * end( array_type array ) {
 	return &array[ last( array ) ] + 1;
Index: src/examples/array.h
===================================================================
--- src/examples/array.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/array.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jan 26 17:09:29 2016
-// Update Count     : 3
+// Last Modified On : Wed Mar  2 18:13:35 2016
+// Update Count     : 5
 //
 
@@ -21,10 +21,10 @@
 // An array has contiguous elements accessible in any order using integer indicies. The first
 // element has index 0.
-context array( type array_type, type elt_type ) {
+trait array( otype array_type, otype elt_type ) {
 	lvalue elt_type ?[?]( array_type, int );
 };
 
 // A bounded array is an array that carries its maximum index with it.
-context bounded_array( type array_type, type elt_type | array( array_type, elt_type ) ) {
+trait bounded_array( otype array_type, otype elt_type | array( array_type, elt_type ) ) {
 	int last( array_type );
 };
@@ -34,5 +34,5 @@
 typedef int array_iterator;
 
-/// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )
+/// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )
 /// [ array_iterator begin, array_iterator end ] get_iterators( array_type );
 
@@ -40,8 +40,8 @@
 // A bounded array can be iterated over by using a pointer to the element type. These functions
 // return iterators corresponding to the first element and the one-past-the-end element, STL-style.
-forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
+forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
 elt_type *begin( array_type );
 
-forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
+forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
 elt_type *end( array_type );
 
Index: src/examples/ato.c
===================================================================
--- src/examples/ato.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/ato.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -11,6 +11,6 @@
 // Created On       : Thu Feb  4 08:10:57 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 11:44:03 2016
-// Update Count     : 42
+// Last Modified On : Mon Feb 29 17:57:35 2016
+// Update Count     : 44
 // 
 
@@ -24,29 +24,29 @@
 int main( void ) {
 	int i = ato( "-123" );
-	sout | i | ' ' | "-123" | endl;
+	sout | i | "-123" | endl;
 	unsigned int ui = ato( "123" );
-	sout | ui | ' ' | "123" | endl;
+	sout | ui | "123" | endl;
 	long int li = ato( "-123" );
-	sout | li | ' ' | "-123" | endl;
+	sout | li | "-123" | endl;
 	unsigned long int uli = ato( "123" );
-	sout | uli | ' ' | "123" | endl;
+	sout | uli | "123" | endl;
 	long long int lli = ato( "-123" );
-	sout | lli | ' ' | "-123" | endl;
+	sout | lli | "-123" | endl;
 	unsigned long long int ulli = ato( "123" );
-	sout | ulli | ' ' | "123" | endl;
+	sout | ulli | "123" | endl;
 	float f = ato( "-123.456" );
-	sout | f | ' ' | "-123.456" | endl;
+	sout | f | "-123.456" | endl;
 	double d = ato( "-123.4567890123456" );
-	sout | d | ' ' | "-123.4567890123456" | endl;
+	sout | d | "-123.4567890123456" | endl;
 	long double ld = ato( "-123.45678901234567890123456789" );
-	sout | ld | ' ' | "-123.45678901234567890123456789" | endl;
+	sout | ld | "-123.45678901234567890123456789" | endl;
 	float _Complex fc = ato( "-123.456-123.456i" );
-	sout | fc | ' ' | "-123.456-123.456i" | endl;
+	sout | fc | "-123.456-123.456i" | endl;
 	double _Complex dc = ato( "-123.4567890123456+123.4567890123456i" );
-	sout | dc | ' ' | "-123.4567890123456+123.4567890123456i" | endl;
+	sout | dc | "-123.4567890123456+123.4567890123456i" | endl;
 	long double _Complex ldc = ato( "123.45678901234567890123456789-123.45678901234567890123456789i" );
-	sout | ldc | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
+	sout | ldc | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
 	long double _Complex ldc2 = ato( "123.45678901234-123.4567890i" );
-	sout | ldc2 | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
+	sout | ldc2 | "123.45678901234-123.4567890i" | endl;
 } // main
 
Index: src/examples/ctxts.c
===================================================================
--- src/examples/ctxts.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/ctxts.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,13 +10,13 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:11:19 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 18:10:21 2016
+// Update Count     : 3
 //
 
-context has_f( type T ) {
+trait has_f( type T ) {
 	T f( T );
 };
 
-context has_g( type U | has_f( U ) ) {
+trait has_g( type U | has_f( U ) ) {
 	U g( U );
 };
Index: src/examples/fstream_test.c
===================================================================
--- src/examples/fstream_test.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/fstream_test.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 11:45:43 2016
-// Update Count     : 43
+// Last Modified On : Wed Mar  2 15:12:21 2016
+// Update Count     : 51
 //
 
@@ -18,18 +18,15 @@
 int main( void ) {
 	int nombre;
-	sout | "Entrez un nombre, s'il vous plaît:\n";
+	sout | "Entrez un nombre, s'il vous plaît:" | endl;
 	sin  | &nombre;
-	sout | "Vous avez entré " | nombre | " stocké à l'adresse " | &nombre | endl;
-	sout | "nombre " | nombre | " est "
-		 | (nombre > 0 ? "plus grand que" :
-		   nombre == 0 ? "égal à" : "moins de")
-		 | " zéro" | endl;
+	sout | "Vous avez entré" | nombre | "stocké à l'adresse" | &nombre | endl;
+	sout | "nombre" | nombre | "est"
+		 | (nombre > 0 ? "plus grand que" : nombre == 0 ? "égal à" : "moins de")
+		 | "zéro" | endl;
 
-	sout | "Entrez trois nombres, s'il vous plaît:\n";
+	sout | "Entrez trois nombres, s'il vous plaît: " | endl;
 	int i, j, k;
 	sin  | &i | &j | &k;
-	sout | "Vous avez entré " | "i:" | i | " j:" | j | " k:" | k | endl;
-
-	sout | 3 | ' ' | 3.5 | ' ' | 'a' | ' ' | "abc" | endl;
+	sout | "Vous avez entré" | "i:" | i | "j:" | j | "k:" | k | endl;
 }
 
Index: src/examples/hello.c
===================================================================
--- src/examples/hello.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/hello.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:11:45 2016
-// Update Count     : 8
+// Last Modified On : Mon Feb 29 18:06:17 2016
+// Update Count     : 10
 //
 
@@ -17,5 +17,5 @@
 
 int main() {
-	sout | "Bonjour au monde!\n";
+	sout | "Bonjour au monde!" | endl;
 }
 
Index: src/examples/identity.c
===================================================================
--- src/examples/identity.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/identity.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:17:32 2016
-// Update Count     : 10
+// Last Modified On : Mon Feb 29 23:40:45 2016
+// Update Count     : 12
 //
 
Index: src/examples/index.h
===================================================================
--- src/examples/index.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/index.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,9 +10,9 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:17:31 2015
-// Update Count     : 1
+// Last Modified On : Wed Mar  2 18:10:46 2016
+// Update Count     : 2
 //
 
-context index( type T ) {
+trait index( type T ) {
 	T ?+?( T, T );
 	T ?-?( T, T );
Index: src/examples/it_out.c
===================================================================
--- src/examples/it_out.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/it_out.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,16 +10,16 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:41:23 2015
-// Update Count     : 4
+// Last Modified On : Wed Mar  2 18:11:00 2016
+// Update Count     : 5
 //
 
 typedef unsigned long streamsize_type;
 
-context ostream( dtype os_type ) {
+trait ostream( dtype os_type ) {
 	os_type *write( os_type *, const char *, streamsize_type );
 	int fail( os_type * );
 };
 
-context writeable( type T ) {
+trait writeable( type T ) {
 	forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, T );
 };
@@ -29,5 +29,5 @@
 forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, const char * );
 
-context istream( dtype is_type ) {
+trait istream( dtype is_type ) {
 	is_type *read( is_type *, char *, streamsize_type );
 	is_type *unread( is_type *, char );
@@ -36,5 +36,5 @@
 };
 
-context readable( type T ) {
+trait readable( type T ) {
 	forall( dtype is_type | istream( is_type ) ) is_type * ?<<?( is_type *, T );
 };
@@ -43,5 +43,5 @@
 forall( dtype is_type | istream( is_type ) ) is_type * ?>>?( is_type *, int* );
 
-context iterator( type iterator_type, type elt_type ) {
+trait iterator( type iterator_type, type elt_type ) {
 	iterator_type ?++( iterator_type* );
 	iterator_type ++?( iterator_type* );
Index: src/examples/minmax.c
===================================================================
--- src/examples/minmax.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/minmax.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:17:53 2016
-// Update Count     : 47
+// Last Modified On : Mon Feb 29 23:45:16 2016
+// Update Count     : 49
 //
 
@@ -23,26 +23,26 @@
 
 	sout | "char\t\t\t"					| 'z' | ' ' | 'a' | "\tmin " | min( 'z', 'a' ) | endl;
-	sout | "signed int\t\t"				| 4 | ' ' | 3 | "\tmin " | min( 4, 3 ) | endl;
-	sout | "unsigned int\t\t"			| 4u | ' ' | 3u | "\tmin " | min( 4u, 3u ) | endl;
-	sout | "signed long int\t\t" 		| 4l | ' ' | 3l | "\tmin " | min( 4l, 3l ) | endl;
-	sout | "unsigned long int\t" 		| 4ul | ' ' | 3ul | "\tmin " | min( 4ul, 3ul ) | endl;
-	sout | "signed long long int\t"		| 4ll | ' ' | 3ll | "\tmin " | min( 4ll, 3ll ) | endl;
-	sout | "unsigned long long int\t"	| 4ull | ' ' | 3ull | "\tmin " | min( 4ull, 3ull ) | endl;
-	sout | "float\t\t\t" 				| 4.0f | ' ' | 3.1f | "\tmin " | min( 4.0f, 3.1f ) | endl;
-	sout | "double\t\t\t"				| 4.0 | ' ' | 3.1 | "\tmin " | min( 4.0, 3.1 ) | endl;
-	sout | "long double\t\t"			| 4.0l | ' ' | 3.1l | "\tmin " | min( 4.0l, 3.1l ) | endl;
+	sout | "signed int\t\t"				| 4 | 3 | "\tmin" | min( 4, 3 ) | endl;
+	sout | "unsigned int\t\t"			| 4u | 3u | "\tmin" | min( 4u, 3u ) | endl;
+	sout | "signed long int\t\t" 		| 4l | 3l | "\tmin" | min( 4l, 3l ) | endl;
+	sout | "unsigned long int\t" 		| 4ul | 3ul | "\tmin" | min( 4ul, 3ul ) | endl;
+	sout | "signed long long int\t"		| 4ll | 3ll | "\tmin" | min( 4ll, 3ll ) | endl;
+	sout | "unsigned long long int\t"	| 4ull | 3ull | "\tmin" | min( 4ull, 3ull ) | endl;
+	sout | "float\t\t\t" 				| 4.0f | 3.1f | "\tmin" | min( 4.0f, 3.1f ) | endl;
+	sout | "double\t\t\t"				| 4.0 | 3.1 | "\tmin" | min( 4.0, 3.1 ) | endl;
+	sout | "long double\t\t"			| 4.0l | 3.1l | "\tmin" | min( 4.0l, 3.1l ) | endl;
 
 	sout | endl;
 
 	sout | "char\t\t\t"					| 'z' | ' ' | 'a' | "\tmax " | max( 'z', 'a' ) | endl;
-	sout | "signed int\t\t"				| 4 | ' ' | 3 | "\tmax " | max( 4, 3 ) | endl;
-	sout | "unsigned int\t\t"			| 4u | ' ' | 3u | "\tmax " | max( 4u, 3u ) | endl;
-	sout | "signed long int\t\t" 		| 4l | ' ' | 3l | "\tmax " | max( 4l, 3l ) | endl;
-	sout | "unsigned long int\t" 		| 4ul | ' ' | 3ul | "\tmax " | max( 4ul, 3ul ) | endl;
-	sout | "signed long long int\t"		| 4ll | ' ' | 3ll | "\tmax " | max( 4ll, 3ll ) | endl;
-	sout | "unsigned long long int\t"	| 4ull | ' ' | 3ull | "\tmax " | max( 4ull, 3ull ) | endl;
-	sout | "float\t\t\t" 				| 4.0f | ' ' | 3.1f | "\tmax " | max( 4.0f, 3.1f ) | endl;
-	sout | "double\t\t\t"				| 4.0 | ' ' | 3.1 | "\tmax " | max( 4.0, 3.1 ) | endl;
-	sout | "long double\t\t"			| 4.0l | ' ' | 3.1l | "\tmax " | max( 4.0l, 3.1l ) | endl;
+	sout | "signed int\t\t"				| 4 | 3 | "\tmax" | max( 4, 3 ) | endl;
+	sout | "unsigned int\t\t"			| 4u | 3u | "\tmax" | max( 4u, 3u ) | endl;
+	sout | "signed long int\t\t" 		| 4l | 3l | "\tmax" | max( 4l, 3l ) | endl;
+	sout | "unsigned long int\t" 		| 4ul | 3ul | "\tmax" | max( 4ul, 3ul ) | endl;
+	sout | "signed long long int\t"		| 4ll | 3ll | "\tmax" | max( 4ll, 3ll ) | endl;
+	sout | "unsigned long long int\t"	| 4ull | 3ull | "\tmax" | max( 4ull, 3ull ) | endl;
+	sout | "float\t\t\t" 				| 4.0f | 3.1f | "\tmax" | max( 4.0f, 3.1f ) | endl;
+	sout | "double\t\t\t"				| 4.0 | 3.1 | "\tmax" | max( 4.0, 3.1 ) | endl;
+	sout | "long double\t\t"			| 4.0l | 3.1l | "\tmax" | max( 4.0l, 3.1l ) | endl;
 } // main
 
Index: src/examples/prolog.c
===================================================================
--- src/examples/prolog.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/prolog.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:25:52 2015
-// Update Count     : 1
+// Last Modified On : Wed Mar  2 18:11:18 2016
+// Update Count     : 2
 //
 
@@ -25,9 +25,9 @@
 void is_integer( int x ) {}
 
-context ArithmeticType( type T ) {
+trait ArithmeticType( type T ) {
 	void is_arithmetic( T );
 };
 
-context IntegralType( type T | ArithmeticType( T ) ) {
+trait IntegralType( type T | ArithmeticType( T ) ) {
 	void is_integer( T );
 };
Index: src/examples/quad.c
===================================================================
--- src/examples/quad.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/quad.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:19:24 2016
-// Update Count     : 6
+// Last Modified On : Tue Mar  1 08:24:56 2016
+// Update Count     : 7
 //
 
@@ -28,5 +28,5 @@
 int main() {
 	int N = 2;
-	sout | "result of quad of " | N | " is " | quad( N ) | endl;
+	sout | "result of quad of" | N | "is" | quad( N ) | endl;
 }
 
Index: src/examples/read.c
===================================================================
--- src/examples/read.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
+++ src/examples/read.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -0,0 +1,60 @@
+//                               -*- Mode: C -*- 
+// 
+// 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.
+// 
+// read.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Mar  2 16:56:02 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 16:56:44 2016
+// Update Count     : 2
+// 
+
+#include <fstream>
+
+int main() {
+    char c;
+    short int si;
+    unsigned short int usi;
+    int i;
+    unsigned int ui;
+    long int li;
+    unsigned long int uli;
+    long long int lli;
+    unsigned long long int ulli;
+    float f;
+    double d;
+    long double ld;
+    float _Complex fc;
+    double _Complex dc;
+    long double _Complex ldc;
+    char s1[10], s2[10];
+
+    ifstream in;
+    open( &in, "read.data", "r" );
+
+    &in | &c
+	| &si | &usi | &i | &ui | &li | &uli | &lli | &ulli
+	| &f | &d | &ld
+	| &fc | &dc | &ldc
+	| str( s1 ) | str( s2, 10 );
+
+    sout | c | ' ' | endl
+	 | si | usi | i | ui | li | uli | lli | ulli | endl
+	 | f | d | ld | endl
+	 | f | "" | d | "" | ld | endl;
+
+    sepSet( sout, ", $" );
+    sout | fc | dc | ldc | endl
+	 | sepOn | s1 | sepOff | s2 | endl
+	 | s1 | "" | s2 | endl;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa read.c" //
+// End: //
Index: src/examples/read.data
===================================================================
--- src/examples/read.data	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
+++ src/examples/read.data	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -0,0 +1,1 @@
+A 1 2 3 4 5 6 7 8 1.1 1.2 1.3 1.1+2.3 1.1-2.3 1.1-2.3 abc xyz
Index: src/examples/sum.c
===================================================================
--- src/examples/sum.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/sum.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,11 +10,11 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Feb 16 23:49:31 2016
-// Update Count     : 189
+// Last Modified On : Wed Mar  2 18:12:01 2016
+// Update Count     : 194
 //
 
 #include <fstream>
 
-context sumable( type T ) {
+trait sumable( type T ) {
 	const T 0;
 	T ?+?( T, T );
@@ -47,6 +47,6 @@
 		a[i] = v;
 	} // for
-	sout | "sum from " | low | " to " | High | " is "
-		 | (int)sum( size, a ) | ", check " | (int)s | endl;
+	sout | "sum from" | low | "to" | High | "is"
+		 | (int)sum( size, a ) | "" | ", check" | (int)s | endl;
 
 	int s = 0, a[size], v = low;
@@ -55,6 +55,6 @@
 		a[i] = (int)v;
 	} // for
-	sout | "sum from " | low | " to " | High | " is "
-		 | sum( size, (int *)a ) | ", check " | (int)s | endl;
+	sout | "sum from" | low | "to" | High | "is"
+		 | sum( size, (int *)a ) | "" | ", check" | (int)s | endl;
 
 	float s = 0.0, a[size], v = low / 10.0;
@@ -63,6 +63,6 @@
 		a[i] = (float)v;
 	} // for
-	sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is "
-		 | sum( size, (float *)a ) | ", check " | (float)s | endl;
+	sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
+		 | sum( size, (float *)a ) | "" | ", check" | (float)s | endl;
 
 	double s = 0, a[size], v = low / 10.0;
@@ -71,6 +71,6 @@
 		a[i] = (double)v;
 	} // for
-	sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is "
-		 | sum( size, (double *)a ) | ", check " | (double)s | endl;
+	sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
+		 | sum( size, (double *)a ) | "" | ", check" | (double)s | endl;
 
 	struct S { int i, j; } 0 = { 0, 0 }, 1 = { 1, 1 };
@@ -79,5 +79,5 @@
 	S ++?( S *t ) { *t += 1; return *t; }
 	S ?++( S *t ) { S temp = *t; *t += 1; return temp; }
-	ofstream * ?|?( ofstream * os, S v ) { return os | v.i | ' ' | v.j; }
+	ofstream * ?|?( ofstream * os, S v ) { return os | v.i | v.j; }
 
 	S s = 0, a[size], v = { low, low };
@@ -86,6 +86,6 @@
 		a[i] = (S)v;
 	} // for
-	sout | "sum from " | low | " to " | High | " is "
-		 | sum( size, (S *)a ) | ", check " | (S)s | endl;
+	sout | "sum from" | low | "to" | High | "is"
+		 | sum( size, (S *)a ) | "" | ", check" | (S)s | endl;
 } // main
 
Index: src/examples/swap.c
===================================================================
--- src/examples/swap.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/swap.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:22:12 2016
-// Update Count     : 64
+// Last Modified On : Wed Mar  2 16:15:11 2016
+// Update Count     : 65
 //
 
@@ -54,15 +54,15 @@
 
 	float f1 = 1.5, f2 = 2.5;
-	sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\t\tswap ";
+	sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\tswap ";
 	swap( &f1, &f2 );
 	sout | '\t' | f1 | ' ' | f2 | endl;
 
 	double d1 = 1.5, d2 = 2.5;
-	sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\t\tswap ";
+	sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\tswap ";
 	swap( &d1, &d2 );
 	sout | '\t' | d1 | ' ' | d2 | endl;
 
 	long double ld1 = 1.5, ld2 = 2.5;
-	sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\t\tswap ";
+	sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\tswap ";
 	swap( &ld1, &ld2 );
 	sout | '\t' | ld1 | ' ' | ld2 | endl;
Index: src/examples/tests/vector_test.out.txt
===================================================================
--- src/examples/tests/vector_test.out.txt	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/tests/vector_test.out.txt	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -1,5 +1,5 @@
 enter N elements and C-d on a separate line:
 Array elements:
-1 2 3 4 5 
+1 2 3 4 5
 Array elements reversed:
-5 4 3 2 1 
+5 4 3 2 1
Index: src/libcfa/Makefile.in
===================================================================
--- src/libcfa/Makefile.in	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/Makefile.in	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -231,7 +231,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libcfa/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libcfa/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/libcfa/Makefile
+	  $(AUTOMAKE) --foreign src/libcfa/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: src/libcfa/builtins.cf
===================================================================
--- src/libcfa/builtins.cf	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/builtins.cf	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -390,11 +390,11 @@
 int __builtin_sprintf(char *, const char *, ...);
 int __builtin_sscanf(const char *, const char *, ...);
-int __builtin_vfprintf(struct _IO_FILE *, const char *, void **);
-int __builtin_vfscanf(struct _IO_FILE *, const char *, void **);
-int __builtin_vprintf(const char *, void **);
-int __builtin_vscanf(const char *, void **);
-int __builtin_vsnprintf(char *, unsigned long, const char *, void **);
-int __builtin_vsprintf(char *, const char *, void **);
-int __builtin_vsscanf(const char *, const char *, void **);
+int __builtin_vfprintf(struct _IO_FILE *, const char *, __builtin_va_list);
+int __builtin_vfscanf(struct _IO_FILE *, const char *, __builtin_va_list);
+int __builtin_vprintf(const char *, __builtin_va_list);
+int __builtin_vscanf(const char *, __builtin_va_list);
+int __builtin_vsnprintf(char *, unsigned long, const char *, __builtin_va_list);
+int __builtin_vsprintf(char *, const char *, __builtin_va_list);
+int __builtin_vsscanf(const char *, const char *, __builtin_va_list);
 int __builtin_isalnum(int);
 int __builtin_isalpha(int);
@@ -534,7 +534,7 @@
 void __builtin_unwind_init();
 void __builtin_update_setjmp_buf(void *, int);
-void __builtin_va_copy(void **, void **);
-void __builtin_va_end(void **);
-void __builtin_va_start(void **, ...);
+void __builtin_va_copy(__builtin_va_list, __builtin_va_list);
+void __builtin_va_end(__builtin_va_list);
+void __builtin_va_start(__builtin_va_list, ...);
 int __builtin_va_arg_pack();
 int __builtin_va_arg_pack_len();
@@ -563,10 +563,10 @@
 int __builtin___snprintf_chk(char *, unsigned long, int, unsigned long, const char *, ...);
 int __builtin___sprintf_chk(char *, int, unsigned long, const char *, ...);
-int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, void **);
-int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, void **);
+int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, __builtin_va_list);
+int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, __builtin_va_list);
 int __builtin___fprintf_chk(struct _IO_FILE *, int, const char *, ...);
 int __builtin___printf_chk(int, const char *, ...);
-int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, void **);
-int __builtin___vprintf_chk(int, const char *, void **);
+int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, __builtin_va_list);
+int __builtin___vprintf_chk(int, const char *, __builtin_va_list);
 void __cyg_profile_func_enter(void *, void *);
 void __cyg_profile_func_exit(void *, void *);
@@ -583,5 +583,4 @@
 const char * __builtin_FUNCTION();
 int __builtin_LINE();
-typedef void ** __builtin_va_list;
 extern const char *__PRETTY_FUNCTION__;
 typedef int wchar_t;
Index: src/libcfa/fstream
===================================================================
--- src/libcfa/fstream	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/fstream	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -7,9 +7,9 @@
 // fstream -- 
 //
-// Author           : Richard C. Bilson
+// Author           : Peter A. Buhr
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 14:02:01 2016
-// Update Count     : 22
+// Last Modified On : Wed Mar  2 15:08:14 2016
+// Update Count     : 78
 //
 
@@ -19,25 +19,33 @@
 #include "iostream"
 
-// implement context ostream
-struct ofstream;
+enum { separateSize = 16 };
+struct ofstream { void *file; int separate; char separator[separateSize]; };
 
-int fail( ofstream * os );
-int flush( ofstream * os );
-void open( ofstream ** os, const char * name, const char * mode );
-void close( ofstream * os );
-ofstream * write( ofstream * os, const char * data, streamsize_type size );
+_Bool sepPrt( ofstream * );
+void sepOn( ofstream * );
+void sepOff( ofstream * );
+void sepSet( ofstream *, const char * );
+const char * sepGet( ofstream * );
+void sepDisable( ofstream * );
+void sepEnable( ofstream * );
+int fail( ofstream * );
+int flush( ofstream * );
+void open( ofstream *, const char * name, const char * mode );
+void close( ofstream * );
+ofstream * write( ofstream *, const char * data, unsigned long int size );
+int prtfmt( ofstream *, const char fmt[], ... );
 
 extern ofstream * sout, * serr;
 
 // implement context istream
-struct ifstream;
+struct ifstream { void *file; };
 
 int fail( ifstream * is );
 int eof( ifstream * is );
-void open( ifstream ** is, const char * name, const char * mode );
+void open( ifstream * is, const char * name, const char * mode );
 void close( ifstream * is );
-ifstream * get( ifstream * is, int * data );
-ifstream * read( ifstream * is, char * data, streamsize_type size );
+ifstream * read( ifstream * is, char * data, unsigned long int size );
 ifstream * ungetc( ifstream * is, char c );
+int scanfmt( ifstream *, const char fmt[], ... );
 
 extern ifstream *sin;
@@ -49,2 +57,3 @@
 // tab-width: 4 //
 // End: //
+
Index: src/libcfa/fstream.c
===================================================================
--- src/libcfa/fstream.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/fstream.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -7,9 +7,9 @@
 // fstream.c -- 
 //
-// Author           : Richard C. Bilson
+// Author           : Peter A. Buhr
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 14:03:05 2016
-// Update Count     : 76
+// Last Modified On : Mon Feb 29 18:41:10 2016
+// Update Count     : 162
 //
 
@@ -17,40 +17,53 @@
 
 extern "C" {
-#include <stdio.h>
-#include <stdlib.h>
+#include <stdio.h>										// vfprintf, vfscanf
+#include <stdlib.h>										// exit
+#include <stdarg.h>										// varargs
+#include <string.h>										// strlen
+#include <float.h>										// DBL_DIG, LDBL_DIG
+#include <complex.h>									// creal, cimag
 }
-
-struct ofstream {
-	FILE *file;
-};
 
 #define IO_MSG "I/O error "
 
+_Bool sepPrt( ofstream * os ) { return os->separate == 1; }
+void sepOn( ofstream * os ) { if ( os->separate != 2 ) os->separate = 1; }
+void sepOff( ofstream * os ) { if ( os->separate != 2 ) os->separate = 0; }
+void sepSet( ofstream * os, const char * s ) {
+	strncpy( &(os->separator[0]), s, separateSize - 1 );
+	os->separator[separateSize - 1] = '\0';
+} // sepSet
+const char * sepGet( ofstream * os ) { return &(os->separator[0]); }
+void sepDisable( ofstream *os ) { os->separate = 2; }
+void sepEnable( ofstream *os ) { os->separate = 0; }
+
 int fail( ofstream * os ) {
-	return ferror( os->file );
+	return ferror( (FILE *)(os->file) );
 } // fail
 
 int flush( ofstream * os ) {
-	return fflush( os->file );
+	return fflush( (FILE *)(os->file) );
 } // flush
 
-void open( ofstream ** os, const char * name, const char * mode ) {
-	FILE *t = fopen( name, mode );
-	if ( t == 0 ) {										// do not change unless successful
+void open( ofstream * os, const char * name, const char * mode ) {
+	FILE *file = fopen( name, mode );
+	if ( file == 0 ) {									// do not change unless successful
 		perror( IO_MSG "open output" );
 		exit( EXIT_FAILURE );
 	} // if
-	(*os)->file = t;
+	os->file = file;
+	sepOff( os );
+	sepSet( os, " " );
 } // open
 
 void close( ofstream * os ) {
-	if ( os->file == stdout || os->file == stderr ) return;
+	if ( (FILE *)(os->file) == stdout || (FILE *)(os->file) == stderr ) return;
 
-	if ( fclose( os->file ) == EOF ) {
+	if ( fclose( (FILE *)(os->file) ) == EOF ) {
 		perror( IO_MSG "close output" );
 	} // if 
 } // close
 
-ofstream * write( ofstream * os, const char * data, streamsize_type size ) {
+ofstream * write( ofstream * os, const char * data, unsigned long int size ) {
 	if ( fail( os ) ) {
 		fprintf( stderr, "attempt write I/O on failed stream\n" );
@@ -58,5 +71,5 @@
 	} // if
 
-	if ( fwrite( data, 1, size, os->file ) != size ) {
+	if ( fwrite( data, 1, size, (FILE *)(os->file) ) != size ) {
 		perror( IO_MSG "write" );
 		exit( EXIT_FAILURE );
@@ -65,34 +78,55 @@
 } // write
 
-static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_) };
+int prtfmt( ofstream * os, const char fmt[], ... ) {
+    va_list args;
+
+    va_start( args, fmt );
+    int len = vfprintf( (FILE *)(os->file), fmt, args );
+	if ( len == EOF ) {
+		if ( ferror( (FILE *)(os->file) ) ) {
+			fprintf( stderr, "invalid write\n" );
+			exit( EXIT_FAILURE );
+		} // if
+	} // if
+    va_end( args );
+	return len;
+} // prtfmt
+
+
+static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 0, { ' ', '\0' } };
 ofstream *sout = &soutFile;
-static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_) };
+static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 0, { ' ', '\0' } };
 ofstream *serr = &serrFile;
+
 
 //---------------------------------------
 
-struct ifstream {
-	FILE *file;
-};
 
 int fail( ifstream * is ) {
-	return ferror( is->file );
+	return ferror( (FILE *)(is->file) );
 } // fail
 
 int eof( ifstream * is ) {
-	return feof( is->file );
+	return feof( (FILE *)(is->file) );
 } // eof
 
-ifstream * get( ifstream * is, int * data ) {
-	if ( fscanf( is->file, "%d", data ) == EOF ) {
-		if ( ferror( is->file ) ) {
-			fprintf( stderr, "invalid int read\n" );
-			exit( EXIT_FAILURE );
-		} // if
+void open( ifstream * is, const char * name, const char * mode ) {
+	FILE *t = fopen( name, mode );
+	if ( t == 0 ) {										// do not change unless successful
+		perror( IO_MSG "open input" );
+		exit( EXIT_FAILURE );
 	} // if
-	return is;
-} // read
+	is->file = t;
+} // open
 
-ifstream * read( ifstream * is, char * data, streamsize_type size ) {
+void close( ifstream * is ) {
+	if ( (FILE *)(is->file) == stdin ) return;
+
+	if ( fclose( (FILE *)(is->file) ) == EOF ) {
+		perror( IO_MSG "close input" );
+	} // if 
+} // close
+
+ifstream * read( ifstream * is, char * data, unsigned long int size ) {
 	if ( fail( is ) ) {
 		fprintf( stderr, "attempt read I/O on failed stream\n" );
@@ -100,5 +134,5 @@
 	} // if
 
-	if ( fread( data, size, 1, is->file ) == 0 ) {
+	if ( fread( data, size, 1, (FILE *)(is->file) ) == 0 ) {
 		perror( IO_MSG "read" );
 		exit( EXIT_FAILURE );
@@ -113,5 +147,5 @@
 	} // if
 
-	if ( ungetc( c, is->file ) == EOF ) {
+	if ( ungetc( c, (FILE *)(is->file) ) == EOF ) {
 		perror( IO_MSG "ungetc" );
 		exit( EXIT_FAILURE );
@@ -120,20 +154,19 @@
 } // ungetc
 
-void open( ifstream ** is, const char * name, const char * mode ) {
-	FILE *t = fopen( name, mode );
-	if ( t == 0 ) {										// do not change unless successful
-		perror( IO_MSG "open input" );
-		exit( EXIT_FAILURE );
+int scanfmt( ifstream * is, const char fmt[], ... ) {
+    va_list args;
+
+    va_start( args, fmt );
+    int len = vfscanf( (FILE *)(is->file), fmt, args );
+	if ( len == EOF ) {
+		if ( ferror( (FILE *)(is->file) ) ) {
+			fprintf( stderr, "invalid read\n" );
+			exit( EXIT_FAILURE );
+		} // if
 	} // if
-	(*is)->file = t;
-} // open
+    va_end( args );
+	return len;
+} // prtfmt
 
-void close( ifstream * is ) {
-	if ( is->file == stdin ) return;
-
-	if ( fclose( is->file ) == EOF ) {
-		perror( IO_MSG "close input" );
-	} // if 
-} // close
 
 static ifstream sinFile = { (FILE *)(&_IO_2_1_stdin_) };
Index: src/libcfa/iostream
===================================================================
--- src/libcfa/iostream	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/iostream	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -7,24 +7,33 @@
 // iostream -- 
 //
-// Author           : Richard C. Bilson
+// Author           : Peter A. Buhr
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 14:04:24 2016
-// Update Count     : 32
+// Last Modified On : Wed Mar  2 18:05:27 2016
+// Update Count     : 85
 //
 
-#ifndef IOSTREAM_H
-#define IOSTREAM_H
+#ifndef __IOSTREAM_H__
+#define __IOSTREAM_H__
 
 #include "iterator"
 
-typedef unsigned long streamsize_type;
-
-context ostream( dtype ostype ) {
+trait ostream( dtype ostype ) {
+	_Bool sepPrt( ostype * );
+	void sepOn( ostype * );
+	void sepOff( ostype * );
+	void sepSet( ostype *, const char * );
+	const char * sepGet( ostype * );
+	void sepDisable( ostype * );
+	void sepEnable( ostype * );
 	int fail( ostype * );
 	int flush( ostype * );
-	ostype * write( ostype *, const char *, streamsize_type );
+	void open( ostype * os, const char * name, const char * mode );
+	void close( ostype * os );
+	ostype * write( ostype *, const char *, unsigned long int );
+	int prtfmt( ostype *, const char fmt[], ... );
 };
-context writeable( type T ) {
+
+trait writeable( otype T ) {
 	forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T );
 };
@@ -33,4 +42,7 @@
 
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char );
+
+forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, short int );
+forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned short int );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, int );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned int );
@@ -39,44 +51,72 @@
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long int );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long long int );
+
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float ); // FIX ME: should not be required
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double );
+
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float _Complex );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double _Complex );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double _Complex );
+
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * );
 
-forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) retostype * ?|?( ostype *os, retostype * (* manip)(ostype*) );
+forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) );
 forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * );
+forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
+forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * );
 
 // writes the range [begin, end) to the given stream
-forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
+forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
 void write( iterator_type begin, iterator_type end, os_type *os );
 
-forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
+forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
 void write_reverse( iterator_type begin, iterator_type end, os_type *os );
 
 //---------------------------------------
 
-context istream( dtype istype ) {
+trait istream( dtype istype ) {
 	int fail( istype * );
 	int eof( istype * );
-	istype * get( istype *, int * );
-	istype * read( istype *, char *, streamsize_type );
+	void open( istype * is, const char * name, const char * mode );
+	void close( istype * is );
+	istype * read( istype *, char *, unsigned long int );
 	istype * ungetc( istype *, char );
+	int scanfmt( istype *, const char fmt[], ... );
 };
 
-context readable( type T ) {
+trait readable( otype T ) {
 	forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T );
 };
 
-forall( dtype istype | istream( istype ) )
-istype * ?|?( istype *, char * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char * );
 
-forall( dtype istype | istream( istype ) )
-istype * ?|?( istype *, int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, short int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned short int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long long int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long long int * );
 
-#endif // IOSTREAM_H
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double * );
+
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float _Complex * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double _Complex * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex * );
+
+struct _Istream_str1 { char * s; };
+_Istream_str1 str( char * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str1 );
+
+struct _Istream_str2 { char * s; int size; };
+_Istream_str2 str( char *, int size );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str2 );
+
+#endif // __IOSTREAM_H__
 
 // Local Variables: //
Index: src/libcfa/iostream.c
===================================================================
--- src/libcfa/iostream.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/iostream.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -7,9 +7,9 @@
 // iostream.c -- 
 //
-// Author           : Richard C. Bilson
+// Author           : Peter A. Buhr
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 14:19:56 2016
-// Update Count     : 76
+// Last Modified On : Wed Mar  2 18:06:35 2016
+// Update Count     : 208
 //
 
@@ -21,117 +21,177 @@
 #include <float.h>										// DBL_DIG, LDBL_DIG
 #include <complex.h>									// creal, cimag
+#include <ctype.h>										// isspace, ispunct
 }
 
 forall( dtype ostype | ostream( ostype ) )
 ostype * ?|?( ostype *os, char c ) {
-	return write( os, &c, 1 );
+	prtfmt( os, "%c", c );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, short int si ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%hd", si );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, unsigned short int usi ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%hu", usi );
+	return os;
 } // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
 ostype * ?|?( ostype *os, int i ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%d", i ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, unsigned int i ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%u", i ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, long int i ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%ld", i ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, long long int i ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%lld", i ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, unsigned long int i ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%lu", i ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, unsigned long long int i ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%llu", i ) );
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%d", i );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, unsigned int ui ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%u", ui );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, long int li ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%ld", li );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, unsigned long int uli ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%lu", uli );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, long long int lli ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%lld", lli );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, unsigned long long int ulli ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%llu", ulli );
+	return os;
 } // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
 ostype * ?|?( ostype *os, float f ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%g", f ) );
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%g", f );
+	return os;
 } // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
 ostype * ?|?( ostype *os, double d ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%.*lg", DBL_DIG, d ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, long double d ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%.*Lg", LDBL_DIG, d ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, float _Complex c ) {
-	return os | crealf( c ) | (cimagf( c ) < 0 ? "" : "+") | cimagf( c ) | 'i';
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, double _Complex c ) {
-	return os | creal( c ) | (cimag( c ) < 0 ? "" : "+") | cimag( c ) | 'i';
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, long double _Complex c ) {
-	return os | creall( c ) | (cimagl( c ) < 0 ? "" : "+") | cimagl( c ) | 'i';
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%.*lg", DBL_DIG, d );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, long double ld ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%.*Lg", LDBL_DIG, ld );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, float _Complex fc ) {
+	os | crealf( fc );
+	if ( cimagf( fc ) >= 0 ) os | '+';
+	os | "" | cimagf( fc ) | 'i';
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, double _Complex dc ) {
+	os | creal( dc );
+	if ( cimag( dc ) >= 0 ) os | '+';
+	os | "" | cimag( dc ) | 'i';
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, long double _Complex ldc ) {
+	os | creall( ldc );
+	if ( cimagl( ldc ) >= 0 ) os | '+';
+	os | "" | cimagl( ldc ) | 'i';
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, const char *cp ) {
+	int len = strlen( cp );
+	// null string => no separator
+  if ( len == 0 ) { sepOff( os ); return os; }
+	// first character NOT spacing or special punctuation => add left separator
+	if ( sepPrt( os ) && isspace( cp[0] ) == 0 && cp[0] != '.' && cp[0] != ',' ) {
+		prtfmt( os, "%s", sepGet( os ) );
+	} // if
+	// last character is spacing or special punctuation => turn off separator for next item
+	unsigned int posn = len - 1;
+	if ( isspace( cp[posn] ) || cp[posn] == ':' || cp[posn] == '$' ) {
+		sepOff( os );
+	} else {
+		sepOn( os );
+	} // if
+	return write( os, cp, len );
 } // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
 ostype * ?|?( ostype *os, const void *p ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%p", p ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, const char *cp ) {
-	return write( os, cp, strlen( cp ) );
-} // ?|?
-
-
-forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) 
-retostype * ?|?( ostype *os, retostype * (*manip)(ostype*) ) {
-  return manip( os );
-}
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%p", p );
+	return os;
+} // ?|?
+
+
+forall( dtype ostype | ostream( ostype ) ) 
+ostype * ?|?( ostype *os, ostype * (* manip)( ostype * ) ) {
+	return manip( os );
+} // ?|?
 
 forall( dtype ostype | ostream( ostype ) ) 
 ostype * endl( ostype * os ) {
-	os | "\n";
+	os | '\n';
 	flush( os );
+	sepOff( os );
 	return os;
 } // endl
 
+forall( dtype ostype | ostream( ostype ) ) 
+ostype * sepOn( ostype * os ) {
+	sepOn( os );
+	return os;
+} // sepOn
+
+forall( dtype ostype | ostream( ostype ) ) 
+ostype * sepOff( ostype * os ) {
+	sepOff( os );
+	return os;
+} // sepOff
+
 //---------------------------------------
 
-forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ),
-		dtype os_type | ostream( os_type ) )
-void write( iterator_type begin, iterator_type end, os_type *os ) {
-	void print( elt_type i ) { os | i | ' '; }
+forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
+void write( iteratortype begin, iteratortype end, ostype *os ) {
+	void print( elttype i ) { os | i; }
 	for_each( begin, end, print );
 } // ?|?
 
-forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ),
-		dtype os_type | ostream( os_type ) )
-void write_reverse( iterator_type begin, iterator_type end, os_type *os ) {
-	void print( elt_type i ) { os | i | ' '; }
+forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
+void write_reverse( iteratortype begin, iteratortype end, ostype *os ) {
+	void print( elttype i ) { os | i; }
 	for_each_reverse( begin, end, print );
 } // ?|?
@@ -140,12 +200,116 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype *is, char *cp ) {
-	return read( is, cp, 1 );
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype * ?|?( istype *is, int *ip ) {
-	return get( is, ip );
-} // ?|?
+istype * ?|?( istype * is, char * c ) {
+	scanfmt( is, "%c", c );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, short int * si ) {
+	scanfmt( is, "%hd", si );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, unsigned short int * usi ) {
+	scanfmt( is, "%hu", usi );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, int * i ) {
+	scanfmt( is, "%d", i );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, unsigned int * ui ) {
+	scanfmt( is, "%u", ui );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, long int * li ) {
+	scanfmt( is, "%ld", li );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, unsigned long int * ulli ) {
+	scanfmt( is, "%lu", ulli );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, long long int * lli ) {
+	scanfmt( is, "%lld", lli );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, unsigned long long int * ulli ) {
+	scanfmt( is, "%llu", ulli );
+	return is;
+} // ?|?
+
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, float * f ) {
+	scanfmt( is, "%f", f );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, double * d ) {
+	scanfmt( is, "%lf", d );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, long double * ld ) {
+	scanfmt( is, "%Lf", ld );
+	return is;
+} // ?|?
+
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, float _Complex * fc ) {
+	float re, im;
+	scanfmt( is, "%g%gi", &re, &im );
+	*fc = re + im * _Complex_I;
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, double _Complex * dc ) {
+	double re, im;
+	scanfmt( is, "%lf%lfi", &re, &im );
+	*dc = re + im * _Complex_I;
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, long double _Complex * ldc ) {
+	long double re, im;
+	scanfmt( is, "%Lf%Lfi", &re, &im );
+	*ldc = re + im * _Complex_I;
+	return is;
+} // ?|?
+
+_Istream_str1 str( char * s ) { _Istream_str1 s = { s }; return s; }
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, _Istream_str1 str ) {
+	scanfmt( is, "%s", str.s );
+	return is;
+} // str
+
+_Istream_str2 str( char * s, int size ) { _Istream_str2 s = { s, size }; return s; }
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, _Istream_str2 str ) {
+	char buf[16];
+	sprintf( buf, "%%%ds", str.size );
+	scanfmt( is, buf, str.s );
+	return is;
+} // str
 
 // Local Variables: //
Index: src/libcfa/iterator
===================================================================
--- src/libcfa/iterator	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/iterator	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jan 27 23:49:13 2016
-// Update Count     : 7
+// Last Modified On : Wed Mar  2 18:06:05 2016
+// Update Count     : 9
 //
 
@@ -18,5 +18,5 @@
 
 // An iterator can be used to traverse a data structure.
-context iterator( type iterator_type, type elt_type ) {
+trait iterator( otype iterator_type, otype elt_type ) {
 	// point to the next element
 //	iterator_type ?++( iterator_type * );
@@ -32,5 +32,5 @@
 };
 
-context iterator_for( type iterator_type, type collection_type, type elt_type | iterator( iterator_type, elt_type ) ) {
+trait iterator_for( otype iterator_type, otype collection_type, otype elt_type | iterator( iterator_type, elt_type ) ) {
 //	[ iterator_type begin, iterator_type end ] get_iterators( collection_type );
 	iterator_type begin( collection_type );
@@ -38,8 +38,8 @@
 };
 
-forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
+forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
 void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
 
-forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
+forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
 void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
 
Index: src/libcfa/iterator.c
===================================================================
--- src/libcfa/iterator.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/iterator.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,11 +10,11 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jan 26 17:16:07 2016
-// Update Count     : 26
+// Last Modified On : Wed Mar  2 18:08:11 2016
+// Update Count     : 27
 //
 
 #include "iterator"
 
-forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
+forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
 void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
 	for ( iterator_type i = begin; i != end; ++i ) {
@@ -23,5 +23,5 @@
 }
 
-forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
+forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
 void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
 	for ( iterator_type i = end; i != begin; ) {
Index: src/libcfa/prelude.cf
===================================================================
--- src/libcfa/prelude.cf	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/prelude.cf	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -1,2 +1,3 @@
+# 2 "prelude.cf"  // needed for error messages from this file
 //                               -*- Mode: C -*- 
 // 
@@ -8,6 +9,6 @@
 // Created On       : Sat Nov 29 07:23:41 2014
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jan  4 11:13:26 2016
-// Update Count     : 81
+// Last Modified On : Wed Mar  2 18:03:41 2016
+// Update Count     : 89
 //
 
@@ -63,21 +64,21 @@
 long double _Complex	?--( long double _Complex * ),		?--( volatile long double _Complex * );
 
-forall( type T ) T *			 ?++(		     T ** );
-forall( type T ) const T *		 ?++( const	     T ** );
-forall( type T ) volatile T *		 ?++(	    volatile T ** );
-forall( type T ) const volatile T *	 ?++( const volatile T ** );
-forall( type T ) T *			 ?--(		     T ** );
-forall( type T ) const T *		 ?--( const	     T ** );
-forall( type T ) volatile T *		 ?--(	    volatile T ** );
-forall( type T ) const volatile T *	 ?--( const volatile T ** );
-
-forall( type T ) lvalue T		 ?[?](		      T *,	    ptrdiff_t );
-forall( type T ) const lvalue T		 ?[?]( const	      T *,	    ptrdiff_t );
-forall( type T ) volatile lvalue T	 ?[?](       volatile T *,	    ptrdiff_t );
-forall( type T ) const volatile lvalue T ?[?]( const volatile T *,	    ptrdiff_t );
-forall( type T ) lvalue T		 ?[?](		ptrdiff_t,		  T * );
-forall( type T ) const lvalue T		 ?[?](		ptrdiff_t, const	  T * );
-forall( type T ) volatile lvalue T	 ?[?](		ptrdiff_t,	 volatile T * );
-forall( type T ) const volatile lvalue T ?[?](		ptrdiff_t, const volatile T * );
+forall( otype T ) T *			 ?++(		     T ** );
+forall( otype T ) const T *		 ?++( const	     T ** );
+forall( otype T ) volatile T *		 ?++(	    volatile T ** );
+forall( otype T ) const volatile T *	 ?++( const volatile T ** );
+forall( otype T ) T *			 ?--(		     T ** );
+forall( otype T ) const T *		 ?--( const	     T ** );
+forall( otype T ) volatile T *		 ?--(	    volatile T ** );
+forall( otype T ) const volatile T *	 ?--( const volatile T ** );
+
+forall( otype T ) lvalue T		 ?[?](		      T *,	    ptrdiff_t );
+forall( otype T ) const lvalue T	 ?[?]( const	      T *,	    ptrdiff_t );
+forall( otype T ) volatile lvalue T	 ?[?](       volatile T *,	    ptrdiff_t );
+forall( otype T ) const volatile lvalue T ?[?]( const volatile T *,	    ptrdiff_t );
+forall( otype T ) lvalue T		 ?[?](		ptrdiff_t,		  T * );
+forall( otype T ) const lvalue T	 ?[?](		ptrdiff_t, const	  T * );
+forall( otype T ) volatile lvalue T	 ?[?](		ptrdiff_t,	 volatile T * );
+forall( otype T ) const volatile lvalue T ?[?](		ptrdiff_t, const volatile T * );
 
 // ------------------------------------------------------------
@@ -101,17 +102,17 @@
 long double _Complex	++?( long double _Complex * ),		--?( long double _Complex * );
 
-forall( type T ) T *			 ++?(		     T ** );
-forall( type T ) const T *		 ++?( const	     T ** );
-forall( type T ) volatile T *		 ++?(	    volatile T ** );
-forall( type T ) const volatile T *	 ++?( const volatile T ** );
-forall( type T ) T *			 --?(		     T ** );
-forall( type T ) const T *		 --?( const	     T ** );
-forall( type T ) volatile T *		 --?(	    volatile T ** );
-forall( type T ) const volatile T *	 --?( const volatile T ** );
-
-forall( type T ) lvalue T		 *?(		     T * );
-forall( type T ) const lvalue T		 *?( const	     T * );
-forall( type T ) volatile lvalue T	 *?(       volatile  T * );
-forall( type T ) const volatile lvalue T *?( const volatile  T * );
+forall( otype T ) T *			 ++?(		     T ** );
+forall( otype T ) const T *		 ++?( const	     T ** );
+forall( otype T ) volatile T *		 ++?(	    volatile T ** );
+forall( otype T ) const volatile T *	 ++?( const volatile T ** );
+forall( otype T ) T *			 --?(		     T ** );
+forall( otype T ) const T *		 --?( const	     T ** );
+forall( otype T ) volatile T *		 --?(	    volatile T ** );
+forall( otype T ) const volatile T *	 --?( const volatile T ** );
+
+forall( otype T ) lvalue T		 *?(		     T * );
+forall( otype T ) const lvalue T		 *?( const	     T * );
+forall( otype T ) volatile lvalue T	 *?(       volatile  T * );
+forall( otype T ) const volatile lvalue T *?( const volatile  T * );
 forall( ftype FT ) lvalue FT		 *?( FT * );
 
@@ -183,17 +184,17 @@
 long double _Complex	?+?( long double _Complex, long double _Complex ),	?-?( long double _Complex, long double _Complex );
 
-forall( type T ) T *			?+?(		    T *,	  ptrdiff_t );
-forall( type T ) T *			?+?(	      ptrdiff_t,		T * );
-forall( type T ) const T *		?+?( const	    T *,	  ptrdiff_t );
-forall( type T ) const T *		?+?(	      ptrdiff_t, const		T * );
-forall( type T ) volatile T *		?+?(	   volatile T *,	  ptrdiff_t );
-forall( type T ) volatile T *		?+?(	      ptrdiff_t,       volatile T * );
-forall( type T ) const volatile T *	?+?( const volatile T *,	  ptrdiff_t );
-forall( type T ) const volatile T *	?+?(	      ptrdiff_t, const volatile T * );
-forall( type T ) T *			?-?(		    T *,	  ptrdiff_t );
-forall( type T ) const T *		?-?( const	    T *,	  ptrdiff_t );
-forall( type T ) volatile T *		?-?(	   volatile T *,	  ptrdiff_t );
-forall( type T ) const volatile T *	?-?( const volatile T *,	  ptrdiff_t );
-forall( type T ) ptrdiff_t		?-?( const volatile T *, const volatile T * );
+forall( otype T ) T *			?+?(		    T *,	  ptrdiff_t );
+forall( otype T ) T *			?+?(	      ptrdiff_t,		T * );
+forall( otype T ) const T *		?+?( const	    T *,	  ptrdiff_t );
+forall( otype T ) const T *		?+?(	      ptrdiff_t, const		T * );
+forall( otype T ) volatile T *		?+?(	   volatile T *,	  ptrdiff_t );
+forall( otype T ) volatile T *		?+?(	      ptrdiff_t,       volatile T * );
+forall( otype T ) const volatile T *	?+?( const volatile T *,	  ptrdiff_t );
+forall( otype T ) const volatile T *	?+?(	      ptrdiff_t, const volatile T * );
+forall( otype T ) T *			?-?(		    T *,	  ptrdiff_t );
+forall( otype T ) const T *		?-?( const	    T *,	  ptrdiff_t );
+forall( otype T ) volatile T *		?-?(	   volatile T *,	  ptrdiff_t );
+forall( otype T ) const volatile T *	?-?( const volatile T *,	  ptrdiff_t );
+forall( otype T ) ptrdiff_t		?-?( const volatile T *, const volatile T * );
 
 // ------------------------------------------------------------
@@ -431,20 +432,20 @@
 forall( ftype FT ) FT *			?=?( FT * volatile *, forall( ftype FT2 ) FT2 * );
 
-forall( type T ) T *			?+=?(		     T *	  *, ptrdiff_t );
-forall( type T ) T *			?+=?(		     T * volatile *, ptrdiff_t );
-forall( type T ) const T *		?+=?( const	     T *	  *, ptrdiff_t );
-forall( type T ) const T *		?+=?( const	     T * volatile *, ptrdiff_t );
-forall( type T ) volatile T *		?+=?(	    volatile T *	  *, ptrdiff_t );
-forall( type T ) volatile T *		?+=?(	    volatile T * volatile *, ptrdiff_t );
-forall( type T ) const volatile T *	?+=?( const volatile T *	  *, ptrdiff_t );
-forall( type T ) const volatile T *	?+=?( const volatile T * volatile *, ptrdiff_t );
-forall( type T ) T *			?-=?(		     T *	  *, ptrdiff_t );
-forall( type T ) T *			?-=?(		     T * volatile *, ptrdiff_t );
-forall( type T ) const T *		?-=?( const	     T *	  *, ptrdiff_t );
-forall( type T ) const T *		?-=?( const	     T * volatile *, ptrdiff_t );
-forall( type T ) volatile T *		?-=?(	    volatile T *	  *, ptrdiff_t );
-forall( type T ) volatile T *		?-=?(	    volatile T * volatile *, ptrdiff_t );
-forall( type T ) const volatile T *	?-=?( const volatile T *	  *, ptrdiff_t );
-forall( type T ) const volatile T *	?-=?( const volatile T * volatile *, ptrdiff_t );
+forall( otype T ) T *			?+=?(		     T *	  *, ptrdiff_t );
+forall( otype T ) T *			?+=?(		     T * volatile *, ptrdiff_t );
+forall( otype T ) const T *		?+=?( const	     T *	  *, ptrdiff_t );
+forall( otype T ) const T *		?+=?( const	     T * volatile *, ptrdiff_t );
+forall( otype T ) volatile T *		?+=?(	    volatile T *	  *, ptrdiff_t );
+forall( otype T ) volatile T *		?+=?(	    volatile T * volatile *, ptrdiff_t );
+forall( otype T ) const volatile T *	?+=?( const volatile T *	  *, ptrdiff_t );
+forall( otype T ) const volatile T *	?+=?( const volatile T * volatile *, ptrdiff_t );
+forall( otype T ) T *			?-=?(		     T *	  *, ptrdiff_t );
+forall( otype T ) T *			?-=?(		     T * volatile *, ptrdiff_t );
+forall( otype T ) const T *		?-=?( const	     T *	  *, ptrdiff_t );
+forall( otype T ) const T *		?-=?( const	     T * volatile *, ptrdiff_t );
+forall( otype T ) volatile T *		?-=?(	    volatile T *	  *, ptrdiff_t );
+forall( otype T ) volatile T *		?-=?(	    volatile T * volatile *, ptrdiff_t );
+forall( otype T ) const volatile T *	?-=?( const volatile T *	  *, ptrdiff_t );
+forall( otype T ) const volatile T *	?-=?( const volatile T * volatile *, ptrdiff_t );
 
 _Bool			?=?( _Bool *, _Bool ),					?=?( volatile _Bool *, _Bool );
Index: src/libcfa/stdlib
===================================================================
--- src/libcfa/stdlib	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/stdlib	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Feb  5 15:21:18 2016
-// Update Count     : 61
+// Last Modified On : Wed Mar  2 17:38:21 2016
+// Update Count     : 64
 //
 
@@ -20,19 +20,18 @@
 } // extern "C"
 
-forall( type T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
-forall( type T ) T * memset( T * ptr );					// remove when default value available
+forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
+forall( otype T ) T * memset( T * ptr );					// remove when default value available
 
-forall( type T ) T * malloc( void );
-forall( type T ) T * malloc( char fill );
-forall( type T ) T * malloc( size_t size );
-forall( type T ) T * malloc( T * ptr, size_t size );
-forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill );
-forall( type T ) T * calloc( size_t size );
-forall( type T ) T * realloc( T * ptr, size_t size );
-forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill );
+forall( otype T ) T * malloc( void );
+forall( otype T ) T * malloc( char fill );
+forall( otype T ) T * malloc( T * ptr, size_t size );
+forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );
+forall( otype T ) T * calloc( size_t size );
+forall( otype T ) T * realloc( T * ptr, size_t size );
+forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );
 
-forall( type T ) T * aligned_alloc( size_t alignment );
-forall( type T ) T * memalign( size_t alignment );		// deprecated
-forall( type T ) int posix_memalign( T ** ptr, size_t alignment );
+forall( otype T ) T * aligned_alloc( size_t alignment );
+forall( otype T ) T * memalign( size_t alignment );		// deprecated
+forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
 
 //---------------------------------------
@@ -66,13 +65,13 @@
 //---------------------------------------
 
-forall( type T | { int ?<?( T, T ); } )
+forall( otype T | { int ?<?( T, T ); } )
 T * bsearch( const T key, const T * arr, size_t dimension );
 
-forall( type T | { int ?<?( T, T ); } )
+forall( otype T | { int ?<?( T, T ); } )
 void qsort( const T * arr, size_t dimension );
 
 //---------------------------------------
 
-forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )
+forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
 [ T, T ] div( T t1, T t2 );
 
@@ -108,11 +107,11 @@
 //---------------------------------------
 
-forall( type T | { int ?<?( T, T ); } )
+forall( otype T | { int ?<?( T, T ); } )
 T min( const T t1, const T t2 );
 
-forall( type T | { int ?>?( T, T ); } )
+forall( otype T | { int ?>?( T, T ); } )
 T max( const T t1, const T t2 );
 
-forall( type T )
+forall( otype T )
 void swap( T * t1, T * t2 );
 
Index: src/libcfa/stdlib.c
===================================================================
--- src/libcfa/stdlib.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/stdlib.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:10:29 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 10 15:45:56 2016
-// Update Count     : 140
+// Last Modified On : Wed Mar  2 17:38:47 2016
+// Update Count     : 143
 //
 
@@ -27,22 +27,22 @@
 } // extern "C"
 
-forall( type T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill
+forall( otype T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill
 	printf( "memset1\n" );
     return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) );
 } // memset
-forall( type T ) T * memset( T * ptr ) {				// remove when default value available
+forall( otype T ) T * memset( T * ptr ) {				// remove when default value available
 	printf( "memset2\n" );
     return (T *)memset( ptr, 0, malloc_usable_size( ptr ) );
 } // memset
 
-forall( type T ) T * malloc( void ) {
+forall( otype T ) T * malloc( void ) {
 	printf( "malloc1\n" );
     return (T *)malloc( sizeof(T) );
 } // malloc
-forall( type T ) T * malloc( size_t size ) {
+forall( otype T ) T * malloc( size_t size ) {
 	printf( "malloc2\n" );
     return (T *)(void *)malloc( size );
 } // malloc
-forall( type T ) T * malloc( char fill ) {
+forall( otype T ) T * malloc( char fill ) {
 	printf( "malloc3\n" );
 	T * ptr = (T *)malloc( sizeof(T) );
@@ -50,14 +50,14 @@
 } // malloc
 
-forall( type T ) T * calloc( size_t size ) {
+forall( otype T ) T * calloc( size_t size ) {
 	printf( "calloc\n" );
     return (T *)calloc( size, sizeof(T) );
 } // calloc
 
-forall( type T ) T * realloc( T * ptr, size_t size ) {
+forall( otype T ) T * realloc( T * ptr, size_t size ) {
 	printf( "realloc1\n" );
     return (T *)(void *)realloc( (void *)ptr, size );
 } // realloc
-forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
+forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
 	printf( "realloc2\n" );
     char * nptr = (T *)(void *)realloc( (void *)ptr, size );
@@ -67,24 +67,24 @@
 } // realloc
 
-forall( type T ) T * malloc( T * ptr, size_t size ) {
+forall( otype T ) T * malloc( T * ptr, size_t size ) {
 	printf( "malloc4\n" );
     return (T *)realloc( ptr, size );
 } // malloc
-forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
+forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
 	printf( "malloc5\n" );
     return (T *)realloc( ptr, size, fill );
 } // malloc
 
-forall( type T ) T * aligned_alloc( size_t alignment ) {
+forall( otype T ) T * aligned_alloc( size_t alignment ) {
 	printf( "aligned_alloc\n" );
     return (T *)memalign( alignment, sizeof(T) );
 } // aligned_alloc
 
-forall( type T ) T * memalign( size_t alignment ) {
+forall( otype T ) T * memalign( size_t alignment ) {
 	printf( "memalign\n" );
     return (T *)memalign( alignment, sizeof(T) );
 } // memalign
 
-forall( type T ) int posix_memalign( T ** ptr, size_t alignment ) {
+forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ) {
 	printf( "posix_memalign\n" );
     return posix_memalign( (void **)ptr, alignment, sizeof(T) );
@@ -123,4 +123,5 @@
 	return ulli;
 }
+
 float ato( const char * ptr ) {
 	float f;
@@ -138,4 +139,5 @@
 	return ld;
 }
+
 float _Complex ato( const char * ptr ) {
 	float re, im;
@@ -172,4 +174,5 @@
 	return strtoull( sptr, eptr, base );
 }
+
 float strto( const char * sptr, char ** eptr ) {
 	return strtof( sptr, eptr );
@@ -181,4 +184,5 @@
 	return strtold( sptr, eptr );
 }
+
 float _Complex strto( const char * sptr, char ** eptr ) {
 	float re, im;
@@ -208,5 +212,5 @@
 //---------------------------------------
 
-forall( type T | { int ?<?( T, T ); } )
+forall( otype T | { int ?<?( T, T ); } )
 T * bsearch( const T key, const T * arr, size_t dimension ) {
 	int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; }
@@ -214,5 +218,5 @@
 } // bsearch
 
-forall( type T | { int ?<?( T, T ); } )
+forall( otype T | { int ?<?( T, T ); } )
 void qsort( const T * arr, size_t dimension ) {
 	int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; }
@@ -222,5 +226,5 @@
 //---------------------------------------
 
-forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )
+forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
 [ T, T ] div( T t1, T t2 ) { /* return [ t1 / t2, t1 % t2 ]; */ }
 
@@ -253,15 +257,15 @@
 //---------------------------------------
 
-forall( type T | { int ?<?( T, T ); } )
+forall( otype T | { int ?<?( T, T ); } )
 T min( const T t1, const T t2 ) {
 	return t1 < t2 ? t1 : t2;
 } // min
 
-forall( type T | { int ?>?( T, T ); } )
+forall( otype T | { int ?>?( T, T ); } )
 T max( const T t1, const T t2 ) {
 	return t1 > t2 ? t1 : t2;
 } // max
 
-forall( type T )
+forall( otype T )
 void swap( T * t1, T * t2 ) {
 	T temp = *t1;
