Changeset 36ebd03


Ignore:
Timestamp:
Mar 3, 2016, 1:28:56 PM (10 years ago)
Author:
Aaron Moss <a3moss@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, with_gc
Children:
3627356
Parents:
9d7b3ea (diff), 4040425 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

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

Files:
2 added
76 edited

Legend:

Unmodified
Added
Removed
  • configure

    r9d7b3ea r36ebd03  
    24092409
    24102410
     2411if test "x${CXXFLAGS}" = "x"; then
     2412   export CXXFLAGS="-std=c++11 -g -O2 ${CXXFLAGS}"
     2413else
     2414   export CXXFLAGS="-std=c++11 ${CXXFLAGS}"
     2415fi
     2416
    24112417am__api_version='1.11'
    24122418
  • configure.ac

    r9d7b3ea r36ebd03  
    77#AC_CONFIG_SRCDIR([src/main.cc])
    88AC_CONFIG_HEADERS([config.h])
     9
     10if test "x${CXXFLAGS}" = "x"; then
     11   export CXXFLAGS="-std=c++11 -g -O2 ${CXXFLAGS}"
     12else
     13   export CXXFLAGS="-std=c++11 ${CXXFLAGS}"
     14fi
    915
    1016AM_INIT_AUTOMAKE
  • doc/refrat/Makefile

    r9d7b3ea r36ebd03  
    11## Define the appropriate configuration variables.
    22
    3 TeXLIB = .::
     3Macros =
     4TeXLIB = .:${Macros}:
    45LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex
    56BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex
  • doc/refrat/refrat.tex

    r9d7b3ea r36ebd03  
    3333
    3434\makeatletter
    35 % index macros
     35\renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}}
     36\renewenvironment{itemize}{\begin{list}{\labelitemi}{\topsep=5pt\itemsep=5pt\parsep=0pt}}{\end{list}}
     37
     38%  Reduce size of chapter/section titles
     39\def\@makechapterhead#1{%
     40  \vspace*{50\p@}%
     41  {\parindent \z@ \raggedright \normalfont
     42    \ifnum \c@secnumdepth >\m@ne
     43        \large\bfseries \@chapapp\space \thechapter
     44        \par\nobreak
     45        \vskip 5\p@
     46    \fi
     47    \interlinepenalty\@M
     48    \Large \bfseries #1\par\nobreak
     49    \vskip 50\p@
     50  }}
     51\def\@makeschapterhead#1{%
     52  \vspace*{50\p@}%
     53  {\parindent \z@ \raggedright
     54    \normalfont
     55    \interlinepenalty\@M
     56    \Large \bfseries  #1\par\nobreak
     57    \vskip 50\p@
     58  }}
     59\renewcommand\section{\@startsection{section}{1}{\z@}{-3.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\large\bfseries}}
     60\renewcommand\subsection{\@startsection{subsection}{2}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
     61\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
     62\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{-1em}{\normalfont\normalsize\bfseries}}
     63
    3664\newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
    3765\newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
     
    6088%\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
    6189
    62 % text inline and lowercase index: \Index{Inline and index text}
    63 % text inline and as-in index: \Index{Inline and Index text}
    64 % text inline but index with different as-is text: \Index[index text]{inline text}
     90% inline text and lowercase index: \Index{inline and lowercase index text}
     91% inline text and as-in index: \Index[as-is index text]{inline text}
     92% inline text but index with different as-is text: \Index[index text]{inline text}
    6593\newcommand{\Index}{\@ifstar\@sIndex\@Index}
    6694\newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
     
    145173\linenumbers                                    % comment out to turn off line numbering
    146174
    147 \title{\CFA (\CFAA) Reference Manual and Rationale}
    148 \author{Glen Ditchfield \and Peter A. Buhr}
    149 \date{DRAFT\\\today}
     175\title{\Huge
     176\CFA (\CFAA) Reference Manual and Rationale
     177}% title
     178\author{\huge
     179Glen Ditchfield and Peter A. Buhr
     180}% author
     181\date{
     182DRAFT\\\today
     183}% date
    150184
    151185\pagenumbering{roman}
     
    159193\copyright\,2015 Glen Ditchfield \\ \\
    160194\noindent
    161 This work is licensed under the Creative Commons Attribution 4.0 International License. To view a
    162 copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}.
     195This work is licensed under the Creative Commons Attribution 4.0 International License.
     196To view a copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}.
    163197\vspace*{1in}
    164198
     
    173207\chapter*{Introduction}\addcontentsline{toc}{chapter}{Introduction}
    174208
    175 This document is a reference manual and rationale for \CFA, a polymorphic extension of the C
    176 programming language. It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and
    177 occasionally compares \CFA to {\CC} \cite{c++}.
    178 
    179 The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering
    180 differs). Unfortunately, this means the manual contains more ``forward references'' than usual,
    181 making it harder to follow if the reader does not have a copy of the {\c11} standard. For a simple
    182 introduction to \CFA, see the companion document ``An Overview of \CFA''
     209This document is a reference manual and rationale for \CFA, a polymorphic extension of the C programming language.
     210It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and occasionally compares \CFA to {\CC} \cite{c++}.
     211
     212The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering differs).
     213Unfortunately, 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.
     214For a simple introduction to \CFA, see the companion document ``An Overview of \CFA''
    183215\cite{Ditchfield96:Overview}.
    184216
    185217\begin{rationale}
    186 Commentary (like this) is quoted with quads. Commentary usually deals with subtle points, the
    187 rationale behind a rule, and design decisions.
     218Commentary (like this) is quoted with quads.
     219Commentary usually deals with subtle points, the rationale behind a rule, and design decisions.
    188220\end{rationale}
    189221
     
    194226\chapter{Terms, definitions, and symbols}
    195227
    196 Terms from the {\c11} standard used in this document have the same meaning as in the {\c11}
    197 standard.
     228Terms from the {\c11} standard used in this document have the same meaning as in the {\c11} standard.
    198229
    199230% No ``Conformance'' or ``Environment'' chapters yet.
     
    205236
    206237\section{Notation}
    207 The syntax notation used in this document is the same as in the {\c11} standard, with one exception:
    208 ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that
    209 these rules extend a previous definition, which occurs in this document or in the {\c11} standard.
     238The 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.
    210239
    211240
     
    215244\subsection{Scopes of identifiers}\index{scopes}
    216245
    217 \CFA's scope rules differ from C's in one major respect: a declaration of an identifier may
    218 overload\index{overloading} outer declarations of lexically identical identifiers in the same
    219 \Index{name space}, instead of hiding them. The outer declaration is hidden if the two declarations
    220 have \Index{compatible type}, or if one declares an array type and the other declares a pointer type
    221 and the element type and pointed-at type are compatible, or if one has function type and the other
    222 is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or
     246\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
     247\Index{name space}, instead of hiding them.
     248The 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
    223249\lstinline$typedef$\use{typedef} declaration and the other is not.  The outer declaration becomes
    224250\Index{visible} when the scope of the inner declaration terminates.
    225251\begin{rationale}
    226 Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same
    227 scope; a {\CC} program can not.
     252Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same scope;
     253a {\CC} program can not.
    228254\end{rationale}
    229255
     
    232258\index{linkage}
    233259
    234 \CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with
    235 external or internal linkage do not necessarily denote the same object or function. Instead, in the
    236 set of translation units and libraries that constitutes an entire program, any two instances of a
    237 particular identifier with \Index{external linkage} denote the same object or function if they have
    238 \Index{compatible type}s, or if one declares an array type and the other declares a pointer type and
    239 the element type and pointed-at type are compatible, or if one has function type and the other is a
    240 pointer to a compatible function type. Within one translation unit, each instance of an identifier
    241 with \Index{internal linkage} denotes the same object or function in the same circumstances.
     260\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.
     261Instead, 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
     262\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.
     263Within one translation unit, each instance of an identifier with \Index{internal linkage} denotes the same object or function in the same circumstances.
    242264Identifiers with \Index{no linkage} always denote unique entities.
    243265\begin{rationale}
    244 A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$; a C
    245 program cannot.
     266A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$;
     267a C program cannot.
    246268\end{rationale}
    247269
     
    253275\subsubsection{Semantics}
    254276
    255 \CFA provides a capability for generic types; using this capability a single "generic type
    256 generator" can be written that can represent multiple concrete type instantiations by substitution
    257 of the "type parameters" of the generic type for concrete types. Syntactically a generic type
    258 generator is represented by putting a forall specifier on a struct or union declaration, as defined
    259 in \VRef{forall}. An instantiation of the generic type is written by specifying the type parameters
    260 in parentheses after the name of the generic type generator:
     277\CFA provides a capability for generic types;
     278using 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.
     279Syntactically a generic type generator is represented by putting a forall specifier on a struct or union declaration, as defined in \VRef{forall}.
     280An instantiation of the generic type is written by specifying the type parameters in parentheses after the name of the generic type generator:
    261281\begin{lstlisting}
    262282forall( type T | sumable( T ) ) struct pair {
     
    267287\end{lstlisting}
    268288
    269 The type parameters in an instantiation of a generic type must satisfy any constraints in the forall
    270 specifier on the type generator declaration, e.g., \lstinline$sumable$. The instantiation then has
    271 the semantics that would result if the type parameters were substituted into the type generator
    272 declaration by macro substitution.
    273 
    274 Polymorphic functions may have generic types as parameters, and those generic types may use type
    275 parameters of the polymorphic function as type parameters of the generic type:
     289The 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$.
     290The instantiation then has the semantics that would result if the type parameters were substituted into the type generator declaration by macro substitution.
     291
     292Polymorphic 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:
    276293\begin{lstlisting}
    277294forall( type T ) void swap( pair(T) *p ) {
     
    285302\subsubsection{Constraints}
    286303
    287 To avoid unduly constraining implementors, the generic type generator definition must be visible at
    288 any point where it is instantiated.  Forward declarations of generic type generators are not
    289 forbidden, but the definition must be visible to instantiate the generic type.  Equivalently,
    290 instantiations of generic types are not allowed to be incomplete types.
     304To 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.
    291305
    292306\examples
     
    295309
    296310forall( type T ) struct B {
    297         A(T) *a;  // legal, but cannot instantiate B(T)
     311        A(T) *a;                        // legal, but cannot instantiate B(T)
    298312};
    299313
    300 B(T) x; // illegal, *x.a is of an incomplete generic type
    301 
     314B(T) x;                                 // illegal, *x.a is of an incomplete generic type
     315 
    302316forall( type T ) struct A {
    303317        B( T ) *b;
    304318};
    305319
    306 B( T ) y; // legal, *x.a is now of a complete generic type
    307 
     320B( T ) y;                               // legal, *x.a is now of a complete generic type
    308321
    309322// box.h:
     
    313326       
    314327// main.c:
    315         box( int ) *b = make_box( 42 ); // illegal, def'n of box not visible
    316         use_box( b ); // illegal
     328        box( int ) *b = make_box( 42 ); // illegal, definition of box not visible
     329        use_box( b );           // illegal
    317330\end{lstlisting}
    318331
     
    320333\section{Conversions}
    321334\CFA defines situations where values of one type are automatically converted to another type.
    322 These conversions are called \define{implicit conversion}s. The programmer can request
     335These conversions are called \define{implicit conversion}s.
     336The programmer can request
    323337\define{explicit conversion}s using cast expressions.
    324338
     
    330344\subsubsection{Safe arithmetic conversions}
    331345
    332 In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most
    333 binary arithmetic operators to convert the operands to a common type and determine the type of the
    334 operator's result. In \CFA, these conversions play a role in overload resolution, and
    335 collectively are called the \define{safe arithmetic conversion}s.
    336 
    337 Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion
    338 rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$. Let
    339 \(unsigned_{mr}\) be the unsigned integer type with maximal rank.
     346In 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.
     347In \CFA, these conversions play a role in overload resolution, and collectively are called the \define{safe arithmetic conversion}s.
     348
     349Let \(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$.
     350Let \(unsigned_{mr}\) be the unsigned integer type with maximal rank.
    340351
    341352The following conversions are \emph{direct} safe arithmetic conversions.
     
    343354\item
    344355The \Index{integer promotion}s.
    345 
    346 \item
    347 For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\)
    348 to \(unsigned_r\).
    349 
    350 \item
    351 For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists
    352 and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\).
    353 
     356\item
     357For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\) to \(unsigned_r\).
     358\item
     359For 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}\).
    354360\item
    355361Conversion from \(unsigned_{mr}\) to \lstinline$float$.
    356 
    357362\item
    358363Conversion from an enumerated type to its compatible integer type.
    359 
    360 \item
    361 Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to
    362 \lstinline$long double$.
    363 
    364 \item
    365 Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$,
    366 and from \lstinline$double _Complex$ to \lstinline$long double _Complex$.
    367 
     364\item
     365Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to \lstinline$long double$.
     366\item
     367Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$, and from \lstinline$double _Complex$ to \lstinline$long double _Complex$.
    368368\begin{sloppypar}
    369369\item
    370 Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from
    371 \lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the
    372 implementation supports imaginary types.
     370Conversion 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.
    373371\end{sloppypar}
    374372\end{itemize}
    375373
    376 If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion
    377 and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then
    378 the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic
    379 conversion.
    380 
    381 \begin{rationale}
    382 Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the
    383 usual arithmetic conversions, and \CFA does not include them as safe conversions.
     374If 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.
     375
     376\begin{rationale}
     377Note 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.
    384378\end{rationale}
    385379
     
    393387
    394388If an expression's type is a pointer to a structure or union type that has a member that is an
    395 \Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly
    396 converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's
    397 type. The result of the conversion is a pointer to the member.
     389\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.
     390The result of the conversion is a pointer to the member.
    398391
    399392\examples
     
    402395        int x, y;
    403396};
    404 void move_by(struct point * p1, struct point * p2) {@\impl{move_by}@
     397void move_by( struct point * p1, struct point * p2 ) {@\impl{move_by}@
    405398        p1->x += p2.x;
    406399        p1->y += p2.y;
    407400}
    408 
    409401struct color_point {
    410402        enum { RED, BLUE, GREEN } color;
    411403        struct point;
    412404} cp1, cp2;
    413 move_to(&cp1, &cp2);
     405move_to( &cp1, &cp2 );
    414406\end{lstlisting}
    415407Thanks to implicit conversion, the two arguments that \lstinline$move_by()$ receives are pointers to
     
    419411\subsubsection{Specialization}
    420412A function or value whose type is polymorphic may be implicitly converted to one whose type is
    421 \Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}. Any
    422 value that is legal for the inferred parameter may be used, including other inferred parameters.
    423 
    424 If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters
    425 in its type, then an object or function must be visible at the point of the specialization that has
    426 the same identifier as the assertion parameter and has a type that is compatible\index{compatible
    427   type} with or can be specialized to the type of the assertion parameter.  The assertion parameter
    428 is bound to that object or function.
    429 
    430 The type of the specialization is the type of the original with the bound inferred parameters and
    431 the bound assertion parameters replaced by their bound values.
     413\Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}.
     414Any value that is legal for the inferred parameter may be used, including other inferred parameters.
     415
     416If, 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
     417  type} with or can be specialized to the type of the assertion parameter.  The assertion parameter is bound to that object or function.
     418
     419The 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.
    432420
    433421\examples
     
    438426can be specialized to (among other things)
    439427\begin{lstlisting}
    440 forall( type T ) void (*)( T, T );              // U bound to T 
    441 forall( type T ) void (*)( T, real );   // U bound to real 
    442 forall( type U ) void (*)( real, U );   // T bound to real 
     428forall( type T ) void (*)( T, T );              // U bound to T
     429forall( type T ) void (*)( T, real );   // U bound to real
     430forall( type U ) void (*)( real, U );   // T bound to real
    443431void f( real, real );                                   // both bound to real
    444432\end{lstlisting}
     
    446434The type
    447435\begin{lstlisting}
    448 forall( type T | T ?+?( T, T )) T (*)( T );
     436forall( type T | T ?+?( T, T ) ) T (*)( T );
    449437\end{lstlisting}
    450438can be specialized to (among other things)
    451439\begin{lstlisting}
    452 int (*)( int );                                         // T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int )
     440int (*)( int );         // T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int )
    453441\end{lstlisting}
    454442
     
    465453from a pointer to any non-\lstinline$void$ type to a pointer to \lstinline$void$;
    466454\item
    467 from a pointer to any type to a pointer to a more qualified version of the type\index{qualified
    468 type};
    469 \item
    470 from a pointer to a structure or union type to a pointer to the type of a member of the structure or
    471 union that is an \Index{anonymous structure} or an \Index{anonymous union};
    472 \item
    473 within the scope of an initialized \Index{type declaration}, conversions between a type and its
    474 implementation or between a pointer to a type and a pointer to its implementation.
     455from a pointer to any type to a pointer to a more qualified version of the type\index{qualified type};
     456\item
     457from 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};
     458\item
     459within 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.
    475460\end{itemize}
    476461
    477462Conversions that are not safe conversions are \define{unsafe conversion}s.
    478463\begin{rationale}
    479 As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type. This is
    480 clearly dangerous, and {\CC} does not have this implicit conversion.
    481 \CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a
    482 superset of C as possible, but discourages it by making it unsafe.
     464As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type.
     465This is clearly dangerous, and {\CC} does not have this implicit conversion.
     466\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.
    483467\end{rationale}
    484468
     
    486470\subsection{Conversion cost}
    487471
    488 The \define{conversion cost} of a safe\index{safe conversion}
    489 conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion
    490 costs.} is a measure of how desirable or undesirable it is. It is defined as follows.
     472The \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.
     473It is defined as follows.
    491474\begin{itemize}
    492475\item
     
    497480
    498481\item
    499 The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions
    500 needed to make up the conversion.
     482The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions needed to make up the conversion.
    501483\end{itemize}
    502484
     
    506488\begin{itemize}
    507489\item
    508 The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1. The cost of an
    509 implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms
    510 of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and
    511 then to \lstinline$double$.
    512 
    513 \item
    514 If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an
    515 implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2:
    516 \lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$. Otherwise,
     490The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1.
     491The 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$.
     492
     493\item
     494If \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:
     495\lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$.
     496Otherwise,
    517497\lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1.
    518498
    519499\item
    520 If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost
    521 of \lstinline$unsigned$ to \lstinline$long$ is 1. Otherwise, the conversion is an unsafe
    522 conversion, and its conversion cost is undefined.
     500If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost of \lstinline$unsigned$ to \lstinline$long$ is 1.
     501Otherwise, the conversion is an unsafe conversion, and its conversion cost is undefined.
    523502\end{itemize}
    524503
     
    538517\subsection{Identifiers}
    539518
    540 \CFA allows operator \Index{overloading} by associating operators with special function
    541 identifiers. Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status
    542 for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them
    543 as overloadable identifiers. Programmers can use these identifiers to declare functions and objects
    544 that implement operators and constants for their own types.
     519\CFA allows operator \Index{overloading} by associating operators with special function identifiers.
     520Furthermore, 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.
     521Programmers can use these identifiers to declare functions and objects that implement operators and constants for their own types.
    545522
    546523
     
    554531\end{syntax}
    555532
    556 \index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0}
    557 and ``\lstinline$1$''\impl{1} are identifiers. No other tokens defined by the rules for integer
    558 constants are considered to be identifiers.
    559 \begin{rationale}
    560 Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C. All scalar
    561 types can be incremented and decremented, which is defined in terms of adding or subtracting 1. The
    562 operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any
    563 scalar arguments, and are defined in terms of comparison against 0. A \nonterm{constant-expression}
    564 that evaluates to 0 is effectively compatible with every pointer type.
    565 
    566 In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to
    567 any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to
    568 0 as a special case. However, user-defined arithmetic types often need the equivalent of a 1 or 0
    569 for their functions or operators, polymorphic functions often need 0 and 1 constants of a type
    570 matching their polymorphic parameters, and user-defined pointer-like types may need a null value.
    571 Defining special constants for a user-defined type is more efficient than defining a conversion to
    572 the type from \lstinline$_Bool$.
    573 
    574 Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers
    575 have special status in C. A facility that let programmers declare specific
    576 constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement.
    577 Some facility for defining the creation of values of programmer-defined types from arbitrary integer
    578 tokens would be needed. The complexity of such a feature doesn't seem worth the gain.
     533\index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0} and ``\lstinline$1$''\impl{1} are identifiers.
     534No other tokens defined by the rules for integer constants are considered to be identifiers.
     535\begin{rationale}
     536Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C.
     537All scalar types can be incremented and decremented, which is defined in terms of adding or subtracting 1.
     538The operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any scalar arguments, and are defined in terms of comparison against 0.
     539A \nonterm{constant-expression} that evaluates to 0 is effectively compatible with every pointer type.
     540
     541In 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
     5420 as a special case.
     543However, 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.
     544Defining special constants for a user-defined type is more efficient than defining a conversion to the type from \lstinline$_Bool$.
     545
     546Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers have special status in C.
     547A facility that let programmers declare specific constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement.
     548Some facility for defining the creation of values of programmer-defined types from arbitrary integer tokens would be needed.
     549The complexity of such a feature doesn't seem worth the gain.
    579550\end{rationale}
    580551
     
    582553\subsubsection{Operator identifiers}
    583554
    584 \index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the
    585 programmer-definable operator identifiers and the operations they are associated with. Functions
    586 that are declared with (or pointed at by function pointers that are declared with) these identifiers
    587 can be called by expressions that use the operator tokens and syntax, or the operator identifiers
    588 and ``function call'' syntax. The relationships between operators and function calls are discussed
    589 in descriptions of the operators.
     555\index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the programmer-definable operator identifiers and the operations they are associated with.
     556Functions 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.
     557The relationships between operators and function calls are discussed in descriptions of the operators.
    590558
    591559\begin{table}[hbt]
     
    644612
    645613\begin{rationale}
    646 Operator identifiers are made up of the characters of the operator token, with question marks added
    647 to mark the positions of the arguments of operators. The question marks serve as mnemonic devices;
    648 programmers can not create new operators by arbitrarily mixing question marks and other
    649 non-alphabetic characters. Note that prefix and postfix versions of the increment and decrement
    650 operators are distinguished by the position of the question mark.
    651 \end{rationale}
    652 
    653 \begin{rationale}
    654 The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs.  For
    655 instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a
    656 \CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not
    657 as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''.
     614Operator identifiers are made up of the characters of the operator token, with question marks added to mark the positions of the arguments of operators.
     615The question marks serve as mnemonic devices;
     616programmers can not create new operators by arbitrarily mixing question marks and other non-alphabetic characters.
     617Note that prefix and postfix versions of the increment and decrement operators are distinguished by the position of the question mark.
     618\end{rationale}
     619
     620\begin{rationale}
     621The 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
     622\CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''.
    658623\end{rationale}
    659624
     
    663628\item
    664629The logical operators ``\lstinline$&&$'' and ``\lstinline$||$'', and the conditional operator
    665 ``\lstinline$?:$''. These operators do not always evaluate their operands, and hence can not be
    666 properly defined by functions unless some mechanism like call-by-name is added to the language.
    667 Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by
    668 checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$''
    669 for user-defined types is enough to allow them to be used in logical expressions.
    670 
    671 \item
    672 The comma operator\index{comma expression}. It is a control-flow operator like those above.
     630``\lstinline$?:$''.
     631These 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.
     632Note 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.
     633
     634\item
     635The comma operator\index{comma expression}.
     636It is a control-flow operator like those above.
    673637Changing its meaning seems pointless and confusing.
    674638
    675639\item
    676 The ``address of'' operator. It would seem useful to define a unary ``\lstinline$&$'' operator that
    677 returns values of some programmer-defined pointer-like type. The problem lies with the type of the
    678 operator. Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type
    679 \lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$. The expression
    680 might be treated as a call to the unary function ``\lstinline$&?$''. Now what is the type of the
    681 function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by
    682 value, and there is no way to create a useful pointer-like result from a value. Hence the parameter
    683 must have type \lstinline$T *$. But then the expression must be rewritten as ``\lstinline$p = &?( &x )$''
     640The ``address of'' operator.
     641It would seem useful to define a unary ``\lstinline$&$'' operator that returns values of some programmer-defined pointer-like type.
     642The problem lies with the type of the operator.
     643Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type
     644\lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$.
     645The expression might be treated as a call to the unary function ``\lstinline$&?$''.
     646Now 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.
     647Hence the parameter must have type \lstinline$T *$.
     648But then the expression must be rewritten as ``\lstinline$p = &?( &x )$''
    684649---which doesn't seem like progress!
    685650
    686 The rule for address-of expressions would have to be something like ``keep applying address-of
    687 functions until you get one that takes a pointer argument, then use the built-in operator and
    688 stop''. It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$.
    689 
    690 \item
    691 The \lstinline$sizeof$ operator. It is already defined for every object type, and intimately tied
    692 into the language's storage allocation model. Redefining it seems pointless.
    693 
    694 \item
    695 The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''. These are not really infix
    696 operators, since their right ``operand'' is not a value or object.
    697 
    698 \item
    699 Cast operators\index{cast expression}. Anything that can be done with an explicit cast can be done
    700 with a function call. The difference in syntax is small.
     651The 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''.
     652It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$.
     653
     654\item
     655The \lstinline$sizeof$ operator.
     656It is already defined for every object type, and intimately tied into the language's storage allocation model.
     657Redefining it seems pointless.
     658
     659\item
     660The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''.
     661These are not really infix operators, since their right ``operand'' is not a value or object.
     662
     663\item
     664Cast operators\index{cast expression}.
     665Anything that can be done with an explicit cast can be done with a function call.
     666The difference in syntax is small.
    701667\end{itemize}
    702668\end{rationale}
     
    705671\section{Expressions}
    706672
    707 \CFA allows operators and identifiers to be overloaded. Hence, each expression can have a number
    708 of \define{interpretation}s, each of which has a different type. The interpretations that are
    709 potentially executable are called \define{valid interpretation}s. The set of interpretations
    710 depends on the kind of expression and on the interpretations of the subexpressions that it contains.
    711 The rules for determining the valid interpretations of an expression are discussed below for each
    712 kind of expression. Eventually the context of the outermost expression chooses one interpretation
    713 of that expression.
    714 
    715 An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or
    716 function denoted by every identifier in the expression. An expression can have some interpretations
    717 that are ambiguous and others that are unambiguous. An expression that is chosen to be executed
    718 shall not be ambiguous.
    719 
    720 The \define{best valid interpretations} are the valid interpretations that use the fewest
    721 unsafe\index{unsafe conversion} conversions. Of these, the best are those where the functions and
    722 objects involved are the least polymorphic\index{less polymorphic}. Of these, the best have the
    723 lowest total \Index{conversion cost}, including all implicit conversions in the argument
    724 expressions. Of these, the best have the highest total conversion cost for the implicit conversions
    725 (if any) applied to the argument expressions. If there is no single best valid interpretation, or if
    726 the best valid interpretation is ambiguous, then the resulting interpretation is
    727 ambiguous\index{ambiguous interpretation}.
    728 
    729 \begin{rationale}
    730 \CFA's rules for selecting the best interpretation are designed to allow overload resolution to
    731 mimic C's operator semantics. In C, the ``usual arithmetic conversions'' are applied to the
    732 operands of binary operators if necessary to convert the operands to types with a common real type.
    733 In \CFA, those conversions are ``safe''. The ``fewest unsafe conversions'' rule ensures that the
    734 usual conversions are done, if possible. The ``lowest total expression cost'' rule chooses the
    735 proper common type. The odd-looking ``highest argument conversion cost'' rule ensures that, when
    736 unary expressions must be converted, conversions of function results are preferred to conversion of
    737 function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$.
    738 
    739 The ``least polymorphic'' rule reduces the number of polymorphic function calls, since such
    740 functions are presumably more expensive than monomorphic functions and since the more specific
    741 function is presumably more appropriate. It also gives preference to monomorphic values (such as the
     673\CFA allows operators and identifiers to be overloaded.
     674Hence, each expression can have a number of \define{interpretation}s, each of which has a different type.
     675The interpretations that are potentially executable are called \define{valid interpretation}s.
     676The set of interpretations depends on the kind of expression and on the interpretations of the subexpressions that it contains.
     677The rules for determining the valid interpretations of an expression are discussed below for each kind of expression.
     678Eventually the context of the outermost expression chooses one interpretation of that expression.
     679
     680An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or function denoted by every identifier in the expression.
     681An expression can have some interpretations that are ambiguous and others that are unambiguous.
     682An expression that is chosen to be executed shall not be ambiguous.
     683
     684The \define{best valid interpretations} are the valid interpretations that use the fewest unsafe\index{unsafe conversion} conversions.
     685Of these, the best are those where the functions and objects involved are the least polymorphic\index{less polymorphic}.
     686Of these, the best have the lowest total \Index{conversion cost}, including all implicit conversions in the argument expressions.
     687Of these, the best have the highest total conversion cost for the implicit conversions
     688(if any) applied to the argument expressions.
     689If there is no single best valid interpretation, or if the best valid interpretation is ambiguous, then the resulting interpretation is ambiguous\index{ambiguous interpretation}.
     690
     691\begin{rationale}
     692\CFA's rules for selecting the best interpretation are designed to allow overload resolution to mimic C's operator semantics.
     693In 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.
     694In \CFA, those conversions are ``safe''.
     695The ``fewest unsafe conversions'' rule ensures that the usual conversions are done, if possible.
     696The ``lowest total expression cost'' rule chooses the proper common type.
     697The 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$.
     698
     699The ``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.
     700It also gives preference to monomorphic values (such as the
    742701\lstinline$int$ \lstinline$0$) over polymorphic values (such as the \Index{null pointer}
    743 \lstinline$0$\use{0}). However, interpretations that call polymorphic functions are preferred to
    744 interpretations that perform unsafe conversions, because those conversions potentially lose accuracy
    745 or violate strong typing.
     702\lstinline$0$\use{0}).
     703However, interpretations that call polymorphic functions are preferred to interpretations that perform unsafe conversions, because those conversions potentially lose accuracy or violate strong typing.
    746704
    747705There are two notable differences between \CFA's overload resolution rules and the rules for
    748 {\CC} defined in \cite{c++}. First, the result type of a function plays a role. In {\CC}, a
    749 function call must be completely resolved based on the arguments to the call in most circumstances.
    750 In \CFA, a function call may have several interpretations, each with a different result type, and
    751 the interpretations of the containing context choose among them. Second, safe conversions are used
    752 to choose among interpretations of all sorts of functions; in {\CC}, the ``usual arithmetic
    753 conversions'' are a separate set of rules that apply only to the built-in operators.
    754 \end{rationale}
    755 
    756 Expressions involving certain operators\index{operator identifiers} are considered to be equivalent
    757 to function calls. A transformation from ``operator'' syntax to ``function call'' syntax is defined
    758 by \define{rewrite rules}. Each operator has a set of predefined functions that overload its
    759 identifier. Overload resolution determines which member of the set is executed in a given
    760 expression. The functions have \Index{internal linkage} and are implicitly declared with \Index{file
    761 scope}. The predefined functions and rewrite rules are discussed below for each of these
    762 operators.
    763 \begin{rationale}
    764 Predefined functions and constants have internal linkage because that simplifies optimization in
    765 traditional compile-and-link environments. For instance, ``\lstinline$an_int + an_int$'' is
    766 equivalent to ``\lstinline$?+?(an_int, an_int)$''. If integer addition has not been redefined in
    767 the current scope, a compiler can generate code to perform the addition directly. If predefined
    768 functions had external linkage, this optimization would be difficult.
    769 \end{rationale}
    770 
    771 \begin{rationale}
    772 Since each subsection describes the interpretations of an expression in terms of the interpretations
    773 of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that
    774 uses one bottom-up pass over an expression tree. Such an algorithm was first described (for Ada) by
    775 Baker~\cite{Bak:overload}. It is extended here to handle polymorphic functions and arithmetic
    776 conversions. The overload resolution rules and the predefined functions have been chosen so that, in
    777 programs that do not introduce overloaded declarations, expressions will have the same meaning in C
    778 and in \CFA.
    779 \end{rationale}
    780 
    781 \begin{rationale}
    782 Expression syntax is quoted from the {\c11} standard. The syntax itself defines the precedence and
    783 associativity of operators. The sections are arranged in decreasing order of precedence, with all
    784 operators in a section having the same precedence.
     706{\CC} defined in \cite{c++}.
     707First, the result type of a function plays a role.
     708In {\CC}, a function call must be completely resolved based on the arguments to the call in most circumstances.
     709In \CFA, a function call may have several interpretations, each with a different result type, and the interpretations of the containing context choose among them.
     710Second, safe conversions are used to choose among interpretations of all sorts of functions;
     711in {\CC}, the ``usual arithmetic conversions'' are a separate set of rules that apply only to the built-in operators.
     712\end{rationale}
     713
     714Expressions involving certain operators\index{operator identifiers} are considered to be equivalent to function calls.
     715A transformation from ``operator'' syntax to ``function call'' syntax is defined by \define{rewrite rules}.
     716Each operator has a set of predefined functions that overload its identifier.
     717Overload resolution determines which member of the set is executed in a given expression.
     718The functions have \Index{internal linkage} and are implicitly declared with \Index{file scope}.
     719The predefined functions and rewrite rules are discussed below for each of these operators.
     720\begin{rationale}
     721Predefined functions and constants have internal linkage because that simplifies optimization in traditional compile-and-link environments.
     722For instance, ``\lstinline$an_int + an_int$'' is equivalent to ``\lstinline$?+?(an_int, an_int)$''.
     723If integer addition has not been redefined in the current scope, a compiler can generate code to perform the addition directly.
     724If predefined functions had external linkage, this optimization would be difficult.
     725\end{rationale}
     726
     727\begin{rationale}
     728Since 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.
     729Such an algorithm was first described (for Ada) by Baker~\cite{Bak:overload}.
     730It is extended here to handle polymorphic functions and arithmetic conversions.
     731The 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.
     732\end{rationale}
     733
     734\begin{rationale}
     735Expression syntax is quoted from the {\c11} standard.
     736The syntax itself defines the precedence and associativity of operators.
     737The sections are arranged in decreasing order of precedence, with all operators in a section having the same precedence.
    785738\end{rationale}
    786739
     
    801754const int 1;@\use{1}@
    802755const int 0;@\use{0}@
    803 forall( dtype DT ) DT *const 0;
    804 forall( ftype FT ) FT *const 0;
     756forall( dtype DT ) DT * const 0;
     757forall( ftype FT ) FT * const 0;
    805758\end{lstlisting}
    806759
    807760\semantics
    808 The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible}
    809 declarations of the identifier.
    810 
    811 A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type
    812 and value defined by {\c11}. The predefined integer identifiers ``\lstinline$1$'' and
    813 ``\lstinline$0$'' have the integer values 1 and 0, respectively. The other two predefined
    814 ``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when
    815 specialized\index{specialization} with a data type or function type respectively, produce a null
    816 pointer of that type.
     761The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible} declarations of the identifier.
     762
     763A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type and value defined by {\c11}.
     764The predefined integer identifiers ``\lstinline$1$'' and ``\lstinline$0$'' have the integer values 1 and 0, respectively.
     765The 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.
    817766
    818767A parenthesised expression has the same interpretations as the contained \nonterm{expression}.
    819768
    820769\examples
    821 The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null
    822 pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe
    823 conversion from \lstinline$void *$ to \lstinline$const void *$. In each case, the null pointer
    824 conversion is better\index{best valid interpretations} than the unsafe conversion of the integer
     770The 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 *$.
     771In each case, the null pointer conversion is better\index{best valid interpretations} than the unsafe conversion of the integer
    825772\lstinline$0$ to a pointer.
    826773
     
    828775Note that the predefined identifiers have addresses.
    829776
    830 \CFA does not have C's concept of ``null pointer constants'', which are not typed values but
    831 special strings of tokens. The C token ``\lstinline$0$'' is an expression of type \lstinline$int$
    832 with the value ``zero'', and it \emph{also} is a null pointer constant. Similarly,
    833 ``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer,
    834 and it also is a null pointer constant. However, in C, ``\lstinline$(void *)(void *)0$'' is
    835 \emph{not} a null pointer constant, even though it is null-valued, a pointer, and constant! The
    836 semantics of C expressions contain many special cases to deal with subexpressions that are null
    837 pointer constants.
    838 
    839 \CFA handles these cases through overload resolution. The declaration
    840 \begin{lstlisting}
    841 forall( dtype DT ) DT *const 0;
    842 \end{lstlisting}
    843 means that \lstinline$0$ is a polymorphic object, and contains a value that can have \emph{any}
    844 pointer-to-object type or pointer-to-incomplete type. The only such value is the null pointer.
    845 Therefore the type \emph{alone} is enough to identify a null pointer. Where C defines an operator
    846 with a special case for the null pointer constant, \CFA defines predefined functions with a
    847 polymorphic object parameter.
     777\CFA does not have C's concept of ``null pointer constants'', which are not typed values but special strings of tokens.
     778The C token ``\lstinline$0$'' is an expression of type \lstinline$int$ with the value ``zero'', and it \emph{also} is a null pointer constant.
     779Similarly,
     780``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer, and it also is a null pointer constant.
     781However, in C, ``\lstinline$(void *)(void *)0$'' is
     782\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.
     783
     784\CFA handles these cases through overload resolution.
     785The declaration
     786\begin{lstlisting}
     787forall( dtype DT ) DT * const 0;
     788\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.
     789The only such value is the null pointer.
     790Therefore the type \emph{alone} is enough to identify a null pointer.
     791Where C defines an operator with a special case for the null pointer constant, \CFA defines predefined functions with a polymorphic object parameter.
    848792\end{rationale}
    849793
     
    851795\subsubsection{Generic selection}
    852796
    853 \constraints The best interpretation of the controlling expression shall be
    854 unambiguous\index{ambiguous interpretation}, and shall have type compatible with at most one of the
    855 types named in its generic association list. If a generic selection has no \lstinline$default$
    856 generic association, the best interpretation of its controlling expression shall have type
    857 compatible with exactly one of the types named in its generic association list.
     797\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.
     798If 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.
    858799
    859800\semantics
     
    883824\rewriterules
    884825\begin{lstlisting}
    885 a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type */@\use{?[?]}@
     826a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type@\use{?[?]}@
    886827a[b] @\rewrite@ ?[?]( a, b ) // otherwise
    887 a( ${\em arguments }$ ) @\rewrite@ ?()( a, ${\em arguments} )$@\use{?()}@
     828a( @\emph{arguments}@ ) @\rewrite@ ?()( a, @\emph{arguments}@ )@\use{?()}@
    888829a++ @\rewrite@ ?++(&( a ))@\use{?++}@
    889830a-- @\rewrite@ ?--(&( a ))@\use{?--}@
     
    913854\end{lstlisting}
    914855\semantics
    915 The interpretations of subscript expressions are the interpretations of the corresponding function
    916 call expressions.
     856The interpretations of subscript expressions are the interpretations of the corresponding function call expressions.
    917857\begin{rationale}
    918858C defines subscripting as pointer arithmetic in a way that makes \lstinline$a[i]$ and
    919 \lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the
    920 number of overloadings of \lstinline$?[?]$.
    921 
    922 Subscript expressions are rewritten as function calls that pass the first parameter by value. This
    923 is somewhat unfortunate, since array-like types tend to be large. The alternative is to use the
    924 rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''. However, C semantics forbid
    925 this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which
    926 does not have an address.
     859\lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline$?[?]$.
     860
     861Subscript expressions are rewritten as function calls that pass the first parameter by value.
     862This is somewhat unfortunate, since array-like types tend to be large.
     863The alternative is to use the rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''.
     864However, C semantics forbid this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which does not have an address.
    927865
    928866The repetitive form of the predefined identifiers shows up a deficiency\index{deficiencies!pointers
    929  to qualified types} of \CFA's type system. Type qualifiers are not included in type values, so
    930 polymorphic functions that take pointers to arbitrary types often come in one flavor for each
    931 possible qualification of the pointed-at type.
     867 to qualified types} of \CFA's type system.
     868Type 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.
    932869\end{rationale}
    933870
     
    936873
    937874\semantics
    938 A \define{function designator} is an interpretation of an expression that has function type. The
    939 \nonterm{postfix-expression} in a function call may have some interpretations that are function
    940 designators and some that are not.
    941 
    942 For those interpretations of the \nonterm{postfix-expression} that are not function designators, the
    943 expression is rewritten and becomes a call of a function named ``\lstinline$?()$''. The valid
    944 interpretations of the rewritten expression are determined in the manner described below.
    945 
    946 Each combination of function designators and argument interpretations is considered. For those
    947 interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function}
    948 designators, the combination has a \Index{valid interpretation} if the function designator accepts
    949 the number of arguments given, and each argument interpretation matches the corresponding explicit
    950 parameter:
     875A \define{function designator} is an interpretation of an expression that has function type.
     876The
     877\nonterm{postfix-expression} in a function call may have some interpretations that are function designators and some that are not.
     878
     879For 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$?()$''.
     880The valid interpretations of the rewritten expression are determined in the manner described below.
     881
     882Each combination of function designators and argument interpretations is considered.
     883For 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:
    951884\begin{itemize}
    952 \item
    953 if the argument corresponds to a parameter in the function designator's prototype, the argument
    954 interpretation must have the same type as the corresponding parameter, or be implicitly convertible
    955 to the parameter's type
    956 \item
    957 if the function designator's type does not include a prototype or if the argument corresponds to
     885\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
     886\item if the function designator's type does not include a prototype or if the argument corresponds to
    958887``\lstinline$...$'' in a prototype, a \Index{default argument promotion} is applied to it.
    959888\end{itemize}
     
    961890
    962891For those combinations where the interpretation of the \nonterm{postfix-expression} is a
    963 \Index{polymorphic function} designator and the function designator accepts the number of arguments
    964 given, there shall be at least one set of \define{implicit argument}s for the implicit parameters
    965 such that
     892\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
    966893\begin{itemize}
    967894\item
    968 If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the
    969 implicit argument must be an object type; if it uses \lstinline$dtype$, the implicit argument must
    970 be an object type or an incomplete type; and if it uses \lstinline$ftype$, the implicit argument
    971 must be a function type.
    972 
    973 \item
    974 if an explicit parameter's type uses any implicit parameters, then the corresponding explicit
    975 argument must have a type that is (or can be safely converted\index{safe conversion} to) the type
    976 produced by substituting the implicit arguments for the implicit parameters in the explicit
    977 parameter type.
    978 
    979 \item
    980 the remaining explicit arguments must match the remaining explicit parameters, as described for
    981 monomorphic function designators.
    982 
    983 \item
    984 for each \Index{assertion parameter} in the function designator's type, there must be an object or
    985 function with the same identifier that is visible at the call site and whose type is compatible with
    986 or can be specialized to the type of the assertion declaration.
     895If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the implicit argument must be an object type;
     896if it uses \lstinline$dtype$, the implicit argument must be an object type or an incomplete type;
     897and if it uses \lstinline$ftype$, the implicit argument must be a function type.
     898
     899\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.
     900
     901\item the remaining explicit arguments must match the remaining explicit parameters, as described for monomorphic function designators.
     902
     903\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.
    987904\end{itemize}
    988 There is a valid interpretation for each such set of implicit parameters. The type of each valid
    989 interpretation is the return type of the function designator with implicit parameter values
    990 substituted for the implicit arguments.
    991 
    992 A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or
    993 any of the argument interpretations is ambiguous.
    994 
    995 Every valid interpretation whose return type is not compatible with any other valid interpretation's
    996 return type is an interpretation of the function call expression.
    997 
    998 Every set of valid interpretations that have mutually compatible\index{compatible type} result types
    999 also produces an interpretation of the function call expression. The type of the interpretation is
    1000 the \Index{composite type} of the types of the valid interpretations, and the value of the
    1001 interpretation is that of the \Index{best valid interpretation}.
    1002 \begin{rationale}
    1003 One desirable property of a polymorphic programming language is \define{generalizability}: the
    1004 ability to replace an abstraction with a more general but equivalent abstraction without requiring
    1005 changes in any of the uses of the original\cite{Cormack90}. For instance, it should be possible to
    1006 replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( type T ) T f( T );$''
    1007 without affecting any calls of \lstinline$f$.
     905There is a valid interpretation for each such set of implicit parameters.
     906The type of each valid interpretation is the return type of the function designator with implicit parameter values substituted for the implicit arguments.
     907
     908A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or any of the argument interpretations is ambiguous.
     909
     910Every valid interpretation whose return type is not compatible with any other valid interpretation's return type is an interpretation of the function call expression.
     911
     912Every set of valid interpretations that have mutually compatible\index{compatible type} result types also produces an interpretation of the function call expression.
     913The 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}.
     914\begin{rationale}
     915One 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}.
     916For 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$.
    1008917
    1009918\CFA\index{deficiencies!generalizability} does not fully possess this property, because
     
    1015924float f;
    1016925double d;
    1017 f = g( f, f );  // (1)
    1018 f = g( i, f );  // (2) (safe conversion to float)
    1019 f = g( d, f );  // (3) (unsafe conversion to float)
    1020 \end{lstlisting}
    1021 If \lstinline$g$ was replaced by ``\lstinline$forall( type T ) T g( T, T );$'', the first and second
    1022 calls would be unaffected, but the third would change: \lstinline$f$ would be converted to
     926f = g( f, f );          // (1)
     927f = g( i, f );          // (2) (safe conversion to float)
     928f = g( d, f );          // (3) (unsafe conversion to float)
     929\end{lstlisting}
     930If \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
    1023931\lstinline$double$, and the result would be a \lstinline$double$.
    1024932
    1025 Another example is the function ``\lstinline$void h( int *);$''. This function can be passed a
    1026 \lstinline$void *$ argument, but the generalization ``\lstinline$forall( type T ) void h( T *);$''
    1027 can not. In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an
    1028 object type. If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any}
    1029 object type, which is undesirable.
     933Another example is the function ``\lstinline$void h( int *);$''.
     934This function can be passed a
     935\lstinline$void *$ argument, but the generalization ``\lstinline$forall( type T ) void h( T *);$'' can not.
     936In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an object type.
     937If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any} object type, which is undesirable.
    1030938\end{rationale}
    1031939
     
    1045953For that interpretation, the function call is treated as ``\lstinline$?()( sin_dx, 12.9 )$''.
    1046954\begin{lstlisting}
    1047 int f( long );          // (1) 
    1048 int f( int, int );      // (2) 
     955int f( long );          // (1)
     956int f( int, int );      // (2)
    1049957int f( int *);          // (3)
    1050 
    1051958int i = f( 5 );         // calls (1)
    1052959\end{lstlisting}
    1053 Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit
    1054 \lstinline$int$ to \lstinline$long$ conversion. The other functions do not, since the second
    1055 requires two arguments, and since there is no implicit conversion from \lstinline$int$ to
    1056 \lstinline$int *$ that could be used with the third function.
     960Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit \lstinline$int$ to \lstinline$long$ conversion.
     961The 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.
    1057962
    1058963\begin{lstlisting}
     
    1064969
    1065970\begin{lstlisting}
    1066 forall( type T, type U ) void g( T, U );        // (4) 
    1067 forall( type T ) void g( T, T );                        // (5) 
    1068 forall( type T ) void g( T, long );                     // (6) 
    1069 void g( long, long );                                           // (7) 
     971forall( type T, type U ) void g( T, U );        // (4)
     972forall( type T ) void g( T, T );                        // (5)
     973forall( type T ) void g( T, long );                     // (6)
     974void g( long, long );                                           // (7)
    1070975double d;
    1071976int i;
    1072977int *p;
    1073 
    1074 g( d, d );                      // calls (5)
    1075 g( d, i );                      // calls (6)
    1076 g( i, i );                      // calls (7)
     978g( d, d );                      // calls (5)
     979g( d, i );                      // calls (6)
     980g( i, i );                      // calls (7)
    1077981g( i, p );                      // calls (4)
    1078982\end{lstlisting}
    1079 The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are
    1080 discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is
    1081 chosen because it is less polymorphic than (4).
    1082 
    1083 For the second call, (7) is again discarded. Of the remaining interpretations for (4), (5), and (6)
    1084 (with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least
    1085 polymorphic.
    1086 
    1087 The third call has valid interpretations for all of the functions; (7) is chosen since it is not
    1088 polymorphic at all.
    1089 
    1090 The fourth call has no interpretation for (5), because its arguments must have compatible type. (4)
    1091 is chosen because it does not involve unsafe conversions.
     983The 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).
     984
     985For the second call, (7) is again discarded.
     986Of the remaining interpretations for (4), (5), and (6) (with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least polymorphic.
     987
     988The third call has valid interpretations for all of the functions;
     989(7) is chosen since it is not polymorphic at all.
     990
     991The fourth call has no interpretation for (5), because its arguments must have compatible type. (4) is chosen because it does not involve unsafe conversions.
    1092992\begin{lstlisting}
    1093993forall( type T ) T min( T, T );
     
    1098998}
    1099999forall( type U | min_max( U ) ) void shuffle( U, U );
    1100 shuffle(9, 10);
    1101 \end{lstlisting}
    1102 The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the
    1103 only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and
     1000shuffle( 9, 10 );
     1001\end{lstlisting}
     1002The 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
    11041003\lstinline$min$ must be specialized with \lstinline$T$ bound to \lstinline$double$.
    11051004\begin{lstlisting}
    1106 extern void q( int );           // (8) 
    1107 extern void q( void * );        // (9) 
     1005extern void q( int );           // (8)
     1006extern void q( void * );        // (9)
    11081007extern void r();
    11091008q( 0 );
    11101009r( 0 );
    11111010\end{lstlisting}
    1112 The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of
    1113 the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9). The former is
    1114 chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}. For
    1115 the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has
    1116 \emph{no} declared parameter types.
     1011The \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).
     1012The former is chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}.
     1013For the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has \emph{no} declared parameter types.
    11171014
    11181015
    11191016\subsubsection{Structure and union members}
    11201017
    1121 \semantics In the member selection expression ``\lstinline$s$.\lstinline$m$'', there shall be at
    1122 least one interpretation of \lstinline$s$ whose type is a structure type or union type containing a
    1123 member named \lstinline$m$. If two or more interpretations of \lstinline$s$ have members named
    1124 \lstinline$m$ with mutually compatible types, then the expression has an \Index{ambiguous
    1125 interpretation} whose type is the composite type of the types of the members. If an interpretation
    1126 of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other
    1127 \lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type. The
    1128 expression has no other interpretations.
     1018\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$.
     1019If two or more interpretations of \lstinline$s$ have members named
     1020\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.
     1021If an interpretation of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other
     1022\lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type.
     1023The expression has no other interpretations.
    11291024
    11301025The expression ``\lstinline$p->m$'' has the same interpretations as the expression
     
    11361031\predefined
    11371032\begin{lstlisting}
    1138 _Bool ?++( volatile _Bool * ),
    1139         ?++( _Atomic volatile _Bool * );
    1140 char ?++( volatile char * ),
    1141         ?++( _Atomic volatile char * );
    1142 signed char ?++( volatile signed char * ),
    1143         ?++( _Atomic volatile signed char * );
    1144 unsigned char ?++( volatile signed char * ),
    1145         ?++( _Atomic volatile signed char * );
    1146 short int ?++( volatile short int * ),
    1147         ?++( _Atomic volatile short int * );
    1148 unsigned short int ?++( volatile unsigned short int * ),
    1149         ?++( _Atomic volatile unsigned short int * );
    1150 int ?++( volatile int * ),
    1151         ?++( _Atomic volatile int * );
    1152 unsigned int ?++( volatile unsigned int * ),
    1153         ?++( _Atomic volatile unsigned int * );
    1154 long int ?++( volatile long int * ),
    1155         ?++( _Atomic volatile long int * );
    1156 long unsigned int ?++( volatile long unsigned int * ),
    1157         ?++( _Atomic volatile long unsigned int * );
    1158 long long int ?++( volatile long long int * ),
    1159         ?++( _Atomic volatile long long int * );
    1160 long long unsigned ?++( volatile long long unsigned int * ),
    1161         ?++( _Atomic volatile long long unsigned int * );
    1162 float ?++( volatile float * ),
    1163         ?++( _Atomic volatile float * );
    1164 double ?++( volatile double * ),
    1165         ?++( _Atomic volatile double * );
    1166 long double ?++( volatile long double * ),
    1167         ?++( _Atomic volatile long double * );
    1168 
    1169 forall( type T ) T * ?++( T * restrict volatile * ),
    1170         * ?++( T * _Atomic restrict volatile * );
    1171 
    1172 forall( type T ) _Atomic T * ?++( _Atomic T * restrict volatile * ),
    1173         * ?++( _Atomic T * _Atomic restrict volatile * );
    1174 
    1175 forall( type T ) const T * ?++( const T * restrict volatile * ),
    1176         * ?++( const T * _Atomic restrict volatile * );
    1177 
    1178 forall( type T ) volatile T * ?++( volatile T * restrict volatile * ),
    1179         * ?++( volatile T * _Atomic restrict volatile * );
    1180 
    1181 forall( type T ) restrict T * ?++( restrict T * restrict volatile * ),
    1182         * ?++( restrict T * _Atomic restrict volatile * );
    1183 
     1033_Bool ?++( volatile _Bool * ), ?++( _Atomic volatile _Bool * );
     1034char ?++( volatile char * ), ?++( _Atomic volatile char * );
     1035signed char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * );
     1036unsigned char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * );
     1037short int ?++( volatile short int * ), ?++( _Atomic volatile short int * );
     1038unsigned short int ?++( volatile unsigned short int * ), ?++( _Atomic volatile unsigned short int * );
     1039int ?++( volatile int * ), ?++( _Atomic volatile int * );
     1040unsigned int ?++( volatile unsigned int * ), ?++( _Atomic volatile unsigned int * );
     1041long int ?++( volatile long int * ), ?++( _Atomic volatile long int * );
     1042long unsigned int ?++( volatile long unsigned int * ), ?++( _Atomic volatile long unsigned int * );
     1043long long int ?++( volatile long long int * ), ?++( _Atomic volatile long long int * );
     1044long long unsigned ?++( volatile long long unsigned int * ), ?++( _Atomic volatile long long unsigned int * );
     1045float ?++( volatile float * ), ?++( _Atomic volatile float * );
     1046double ?++( volatile double * ), ?++( _Atomic volatile double * );
     1047long double ?++( volatile long double * ), ?++( _Atomic volatile long double * );
     1048
     1049forall( type T ) T * ?++( T * restrict volatile * ), * ?++( T * _Atomic restrict volatile * );
     1050forall( type T ) _Atomic T * ?++( _Atomic T * restrict volatile * ), * ?++( _Atomic T * _Atomic restrict volatile * );
     1051forall( type T ) const T * ?++( const T * restrict volatile * ), * ?++( const T * _Atomic restrict volatile * );
     1052forall( type T ) volatile T * ?++( volatile T * restrict volatile * ), * ?++( volatile T * _Atomic restrict volatile * );
     1053forall( type T ) restrict T * ?++( restrict T * restrict volatile * ), * ?++( restrict T * _Atomic restrict volatile * );
    11841054forall( type T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ),
    11851055        * ?++( _Atomic const T * _Atomic restrict volatile * );
    1186 
    11871056forall( type T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ),
    11881057        * ?++( _Atomic restrict T * _Atomic restrict volatile * );
    1189 
    11901058forall( type T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ),
    11911059        * ?++( _Atomic volatile T * _Atomic restrict volatile * );
    1192 
    11931060forall( type T ) const restrict T * ?++( const restrict T * restrict volatile * ),
    11941061        * ?++( const restrict T * _Atomic restrict volatile * );
    1195 
    11961062forall( type T ) const volatile T * ?++( const volatile T * restrict volatile * ),
    11971063        * ?++( const volatile T * _Atomic restrict volatile * );
    1198 
    11991064forall( type T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ),
    12001065        * ?++( restrict volatile T * _Atomic restrict volatile * );
    1201 
    12021066forall( type T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ),
    12031067        * ?++( _Atomic const restrict T * _Atomic restrict volatile * );
    1204 
    12051068forall( type T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ),
    12061069        * ?++( _Atomic const volatile T * _Atomic restrict volatile * );
    1207 
    12081070forall( type T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ),
    12091071        * ?++( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1210 
    12111072forall( type T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ),
    12121073        * ?++( const restrict volatile T * _Atomic restrict volatile * );
    1213 
    12141074forall( type T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ),
    12151075        * ?++( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    12161076
    1217 _Bool ?--( volatile _Bool * ),
    1218         ?--( _Atomic volatile _Bool * );
    1219 char ?--( volatile char * ),
    1220         ?--( _Atomic volatile char * );
    1221 signed char ?--( volatile signed char * ),
    1222         ?--( _Atomic volatile signed char * );
    1223 unsigned char ?--( volatile signed char * ),
    1224         ?--( _Atomic volatile signed char * );
    1225 short int ?--( volatile short int * ),
    1226         ?--( _Atomic volatile short int * );
    1227 unsigned short int ?--( volatile unsigned short int * ),
    1228         ?--( _Atomic volatile unsigned short int * );
    1229 int ?--( volatile int * ),
    1230         ?--( _Atomic volatile int * );
    1231 unsigned int ?--( volatile unsigned int * ),
    1232         ?--( _Atomic volatile unsigned int * );
    1233 long int ?--( volatile long int * ),
    1234         ?--( _Atomic volatile long int * );
    1235 long unsigned int ?--( volatile long unsigned int * ),
    1236         ?--( _Atomic volatile long unsigned int * );
    1237 long long int ?--( volatile long long int * ),
    1238         ?--( _Atomic volatile long long int * );
    1239 long long unsigned ?--( volatile long long unsigned int * ),
    1240         ?--( _Atomic volatile long long unsigned int * );
    1241 float ?--( volatile float * ),
    1242         ?--( _Atomic volatile float * );
    1243 double ?--( volatile double * ),
    1244         ?--( _Atomic volatile double * );
    1245 long double ?--( volatile long double * ),
    1246         ?--( _Atomic volatile long double * );
    1247 
    1248 forall( type T ) T * ?--( T * restrict volatile * ),
    1249         * ?--( T * _Atomic restrict volatile * );
    1250 
    1251 forall( type T ) _Atomic T * ?--( _Atomic T * restrict volatile * ),
    1252         * ?--( _Atomic T * _Atomic restrict volatile * );
    1253 
    1254 forall( type T ) const T * ?--( const T * restrict volatile * ),
    1255         * ?--( const T * _Atomic restrict volatile * );
    1256 
    1257 forall( type T ) volatile T * ?--( volatile T * restrict volatile * ),
    1258         * ?--( volatile T * _Atomic restrict volatile * );
    1259 
    1260 forall( type T ) restrict T * ?--( restrict T * restrict volatile * ),
    1261         * ?--( restrict T * _Atomic restrict volatile * );
    1262 
     1077_Bool ?--( volatile _Bool * ), ?--( _Atomic volatile _Bool * );
     1078char ?--( volatile char * ), ?--( _Atomic volatile char * );
     1079signed char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * );
     1080unsigned char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * );
     1081short int ?--( volatile short int * ), ?--( _Atomic volatile short int * );
     1082unsigned short int ?--( volatile unsigned short int * ), ?--( _Atomic volatile unsigned short int * );
     1083int ?--( volatile int * ), ?--( _Atomic volatile int * );
     1084unsigned int ?--( volatile unsigned int * ), ?--( _Atomic volatile unsigned int * );
     1085long int ?--( volatile long int * ), ?--( _Atomic volatile long int * );
     1086long unsigned int ?--( volatile long unsigned int * ), ?--( _Atomic volatile long unsigned int * );
     1087long long int ?--( volatile long long int * ), ?--( _Atomic volatile long long int * );
     1088long long unsigned ?--( volatile long long unsigned int * ), ?--( _Atomic volatile long long unsigned int * );
     1089float ?--( volatile float * ), ?--( _Atomic volatile float * );
     1090double ?--( volatile double * ), ?--( _Atomic volatile double * );
     1091long double ?--( volatile long double * ), ?--( _Atomic volatile long double * );
     1092
     1093forall( type T ) T * ?--( T * restrict volatile * ), * ?--( T * _Atomic restrict volatile * );
     1094forall( type T ) _Atomic T * ?--( _Atomic T * restrict volatile * ), * ?--( _Atomic T * _Atomic restrict volatile * );
     1095forall( type T ) const T * ?--( const T * restrict volatile * ), * ?--( const T * _Atomic restrict volatile * );
     1096forall( type T ) volatile T * ?--( volatile T * restrict volatile * ), * ?--( volatile T * _Atomic restrict volatile * );
     1097forall( type T ) restrict T * ?--( restrict T * restrict volatile * ), * ?--( restrict T * _Atomic restrict volatile * );
    12631098forall( type T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ),
    12641099        * ?--( _Atomic const T * _Atomic restrict volatile * );
    1265 
    12661100forall( type T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ),
    12671101        * ?--( _Atomic restrict T * _Atomic restrict volatile * );
    1268 
    12691102forall( type T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ),
    12701103        * ?--( _Atomic volatile T * _Atomic restrict volatile * );
    1271 
    12721104forall( type T ) const restrict T * ?--( const restrict T * restrict volatile * ),
    12731105        * ?--( const restrict T * _Atomic restrict volatile * );
    1274 
    12751106forall( type T ) const volatile T * ?--( const volatile T * restrict volatile * ),
    12761107        * ?--( const volatile T * _Atomic restrict volatile * );
    1277 
    12781108forall( type T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ),
    12791109        * ?--( restrict volatile T * _Atomic restrict volatile * );
    1280 
    12811110forall( type T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ),
    12821111        * ?--( _Atomic const restrict T * _Atomic restrict volatile * );
    1283 
    12841112forall( type T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ),
    12851113        * ?--( _Atomic const volatile T * _Atomic restrict volatile * );
    1286 
    12871114forall( type T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ),
    12881115        * ?--( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1289 
    12901116forall( type T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ),
    12911117        * ?--( const restrict volatile T * _Atomic restrict volatile * );
    1292 
    12931118forall( type T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ),
    12941119        * ?--( _Atomic const restrict volatile T * _Atomic restrict volatile * );
     
    13081133
    13091134\begin{rationale}
    1310 Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a
    1311 pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald
    1312 has pointed out, this forces the modified operand of such expressions to be an lvalue. This
    1313 partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues.
    1314 \end{rationale}
    1315 
    1316 \begin{rationale}
    1317 In C, a semantic rule requires that pointer operands of increment and decrement be pointers to
    1318 object types. Hence, \lstinline$void *$ objects cannot be incremented. In \CFA, the restriction
    1319 follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as
    1320 opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the
    1321 type parameter \lstinline$T$.
     1135Note 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.
     1136This partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues.
     1137\end{rationale}
     1138
     1139\begin{rationale}
     1140In C, a semantic rule requires that pointer operands of increment and decrement be pointers to object types.
     1141Hence, \lstinline$void *$ objects cannot be incremented.
     1142In \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$.
    13221143\end{rationale}
    13231144
    13241145\semantics
    1325 First, each interpretation of the operand of an increment or decrement expression is considered
    1326 separately. For each interpretation that is a bit-field or is declared with the
    1327 \lstinline$register$\index{register@{\lstinline$register$}} \index{Itorage-class specifier}, the
    1328 expression has one valid interpretation, with the type of the operand, and the expression is
    1329 ambiguous if the operand is.
    1330 
    1331 For the remaining interpretations, the expression is rewritten, and the interpretations of the
    1332 expression are the interpretations of the corresponding function call. Finally, all interpretations
    1333 of the expression produced for the different interpretations of the operand are combined to produce
    1334 the interpretations of the expression as a whole; where interpretations have compatible result
    1335 types, the best interpretations are selected in the manner described for function call expressions.
     1146First, each interpretation of the operand of an increment or decrement expression is considered separately.
     1147For each interpretation that is a bit-field or is declared with the
     1148\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.
     1149
     1150For the remaining interpretations, the expression is rewritten, and the interpretations of the expression are the interpretations of the corresponding function call.
     1151Finally, 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.
    13361152
    13371153\examples
     
    13461162\lstinline$vs++$ calls the \lstinline$?++$ function with the \lstinline$volatile short *$ parameter.
    13471163\lstinline$s++$ does the same, applying the safe conversion from \lstinline$short int *$ to
    1348 \lstinline$volatile short int *$. Note that there is no conversion that adds an \lstinline$_Atomic$
    1349 qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid
    1350 interpretation.
     1164\lstinline$volatile short int *$.
     1165Note 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.
    13511166\end{sloppypar}
    13521167
    1353 There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$,
    1354 and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$
    1355 has no valid interpretations.
    1356 
    1357 The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the
    1358 \lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the
    1359 \lstinline$volatile$ qualifier.
    1360 
    1361 \begin{lstlisting}
    1362 char * const restrict volatile * restrict volatile pqpc; pqpc++
    1363 char * * restrict volatile ppc; ppc++;
    1364 \end{lstlisting}
    1365 Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$,
    1366 the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function
    1367 with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring
    1368 \lstinline$T$ to be \lstinline$char *$.
    1369 
    1370 \begin{sloppypar}
    1371 \lstinline$ppc++$ calls the same function, again inferring \lstinline$T$ to be \lstinline$char *$,
    1372 and using the safe conversions from \lstinline$T$ to \lstinline$T const restrict volatile$.
    1373 \end{sloppypar}
    1374 
    1375 \begin{rationale}
    1376 Increment and decrement expressions show up a deficiency of \CFA's type system. There is no such
    1377 thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}.
    1378 Therefore, there is no way to define a function that alters them, and hence no way to define
    1379 increment and decrement functions for them. As a result, the semantics of increment and decrement
    1380 expressions must treat them specially. This holds true for all of the operators that may modify
    1381 such objects.
    1382 \end{rationale}
    1383 
    1384 \begin{rationale}
    1385 The polymorphic overloadings for pointer increment and decrement can be understood by considering
    1386 increasingly complex types.
     1168There 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.
     1169
     1170The 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.
     1171\begin{lstlisting}
     1172char * const restrict volatile * restrict volatile pqpc;
     1173pqpc++
     1174char * * restrict volatile ppc;
     1175ppc++;
     1176\end{lstlisting}
     1177Since \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 *$.
     1178
     1179\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$.
     1180
     1181\begin{rationale}
     1182Increment and decrement expressions show up a deficiency of \CFA's type system.
     1183There is no such thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}.
     1184Therefore, there is no way to define a function that alters them, and hence no way to define increment and decrement functions for them.
     1185As a result, the semantics of increment and decrement expressions must treat them specially.
     1186This holds true for all of the operators that may modify such objects.
     1187\end{rationale}
     1188
     1189\begin{rationale}
     1190The polymorphic overloadings for pointer increment and decrement can be understood by considering increasingly complex types.
    13871191\begin{enumerate}
    13881192\item
    1389 ``\lstinline$char * p; p++;$''. The argument to \lstinline$?++$ has type \lstinline$char * *$, and
    1390 the result has type \lstinline$char *$. The expression would be valid if \lstinline$?++$ were
    1391 declared by
     1193``\lstinline$char * p; p++;$''.
     1194The argument to \lstinline$?++$ has type \lstinline$char * *$, and the result has type \lstinline$char *$.
     1195The expression would be valid if \lstinline$?++$ were declared by
    13921196\begin{lstlisting}
    13931197forall( type T ) T * ?++( T * * );
    1394 \end{lstlisting}
    1395 with \lstinline$T$ inferred to be \lstinline$char$.
    1396 
    1397 \item
    1398 ``\lstinline$char *restrict volatile qp; qp++$''. The result again has type \lstinline$char *$, but
    1399 the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the
    1400 hypothetical function declared in point 1. Hence the actual predefined function is
     1198\end{lstlisting} with \lstinline$T$ inferred to be \lstinline$char$.
     1199
     1200\item
     1201``\lstinline$char *restrict volatile qp; qp++$''.
     1202The 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.
     1203Hence the actual predefined function is
    14011204\begin{lstlisting}
    14021205forall( type T ) T * ?++( T * restrict volatile * );
    1403 \end{lstlisting}
    1404 which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add
    1405 \lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so
    1406 constant pointers cannot be incremented.)
    1407 
    1408 \item
    1409 ``\lstinline$char *_Atomic ap; ap++$''. The result again has type \lstinline$char *$, but no safe
    1410 conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable. A
    1411 separate overloading of \lstinline$?++$ is required.
    1412 
    1413 \item
    1414 ``\lstinline$char const volatile * pq; pq++$''. Here the result has type
     1206\end{lstlisting} which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add
     1207\lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so constant pointers cannot be incremented.)
     1208
     1209\item
     1210``\lstinline$char *_Atomic ap; ap++$''.
     1211The result again has type \lstinline$char *$, but no safe conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable.
     1212A separate overloading of \lstinline$?++$ is required.
     1213
     1214\item
     1215``\lstinline$char const volatile * pq; pq++$''.
     1216Here the result has type
    14151217\lstinline$char const volatile *$, so a new overloading is needed:
    14161218\begin{lstlisting}
    14171219forall( type T ) T const volatile * ?++( T const volatile *restrict volatile * );
    14181220\end{lstlisting}
    1419 One overloading is needed for each combination of qualifiers in the pointed-at
    1420 type\index{deficiencies!pointers to qualified types}.
     1221One overloading is needed for each combination of qualifiers in the pointed-at type\index{deficiencies!pointers to qualified types}.
    14211222 
    14221223\item
    1423 ``\lstinline$float *restrict * prp; prp++$''. The \lstinline$restrict$ qualifier is handled just
    1424 like \lstinline$const$ and \lstinline$volatile$ in the previous case:
     1224``\lstinline$float *restrict * prp; prp++$''.
     1225The \lstinline$restrict$ qualifier is handled just like \lstinline$const$ and \lstinline$volatile$ in the previous case:
    14251226\begin{lstlisting}
    14261227forall( type T ) T restrict * ?++( T restrict *restrict volatile * );
    1427 \end{lstlisting}
    1428 with \lstinline$T$ inferred to be \lstinline$float *$. This looks odd, because {\c11} contains a
    1429 constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$
    1430 is not syntactically a pointer type. \CFA loosens the constraint.
     1228\end{lstlisting} with \lstinline$T$ inferred to be \lstinline$float *$.
     1229This 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.
    14311230\end{enumerate}
    14321231\end{rationale}
     
    14361235
    14371236\semantics
    1438 A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the
    1439 compound literal.
     1237A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the compound literal.
    14401238
    14411239
     
    14551253\rewriterules
    14561254\begin{lstlisting}
    1457 *a      @\rewrite@ *?(a) @\use{*?}@
    1458 +a      @\rewrite@ +?(a) @\use{+?}@
    1459 -a      @\rewrite@ -?(a) @\use{-?}@
    1460 ~a      @\rewrite@ ~?(a) @\use{~?}@
    1461 !a      @\rewrite@ !?(a) @\use{"!?}@
    1462 ++a     @\rewrite@ ++?(&(a)) @\use{++?}@
    1463 --a     @\rewrite@ --?(&(a)) @\use{--?}@
     1255*a      @\rewrite@ *?( a ) @\use{*?}@
     1256+a      @\rewrite@ +?( a ) @\use{+?}@
     1257-a      @\rewrite@ -?( a ) @\use{-?}@
     1258~a      @\rewrite@ ~?( a ) @\use{~?}@
     1259!a      @\rewrite@ !?( a ) @\use{"!?}@
     1260++a     @\rewrite@ ++?(&( a )) @\use{++?}@
     1261--a     @\rewrite@ --?(&( a )) @\use{--?}@
    14641262\end{lstlisting}
    14651263
     
    14691267\predefined
    14701268\begin{lstlisting}
    1471 _Bool ++?( volatile _Bool * ),
    1472         ++?( _Atomic volatile _Bool * );
    1473 char ++?( volatile char * ),
    1474         ++?( _Atomic volatile char * );
    1475 signed char ++?( volatile signed char * ),
    1476         ++?( _Atomic volatile signed char * );
    1477 unsigned char ++?( volatile signed char * ),
    1478         ++?( _Atomic volatile signed char * );
    1479 short int ++?( volatile short int * ),
    1480         ++?( _Atomic volatile short int * );
    1481 unsigned short int ++?( volatile unsigned short int * ),
    1482         ++?( _Atomic volatile unsigned short int * );
    1483 int ++?( volatile int * ),
    1484         ++?( _Atomic volatile int * );
    1485 unsigned int ++?( volatile unsigned int * ),
    1486         ++?( _Atomic volatile unsigned int * );
    1487 long int ++?( volatile long int * ),
    1488         ++?( _Atomic volatile long int * );
    1489 long unsigned int ++?( volatile long unsigned int * ),
    1490         ++?( _Atomic volatile long unsigned int * );
    1491 long long int ++?( volatile long long int * ),
    1492         ++?( _Atomic volatile long long int * );
    1493 long long unsigned ++?( volatile long long unsigned int * ),
    1494         ++?( _Atomic volatile long long unsigned int * );
    1495 float ++?( volatile float * ),
    1496         ++?( _Atomic volatile float * );
    1497 double ++?( volatile double * ),
    1498         ++?( _Atomic volatile double * );
    1499 long double ++?( volatile long double * ),
    1500         ++?( _Atomic volatile long double * );
    1501 
    1502 forall( type T ) T * ++?( T * restrict volatile * ),
    1503         * ++?( T * _Atomic restrict volatile * );
    1504 
    1505 forall( type T ) _Atomic T * ++?( _Atomic T * restrict volatile * ),
    1506         * ++?( _Atomic T * _Atomic restrict volatile * );
    1507 
    1508 forall( type T ) const T * ++?( const T * restrict volatile * ),
    1509         * ++?( const T * _Atomic restrict volatile * );
    1510 
    1511 forall( type T ) volatile T * ++?( volatile T * restrict volatile * ),
    1512         * ++?( volatile T * _Atomic restrict volatile * );
    1513 
    1514 forall( type T ) restrict T * ++?( restrict T * restrict volatile * ),
    1515         * ++?( restrict T * _Atomic restrict volatile * );
    1516 
     1269_Bool ++?( volatile _Bool * ), ++?( _Atomic volatile _Bool * );
     1270char ++?( volatile char * ), ++?( _Atomic volatile char * );
     1271signed char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * );
     1272unsigned char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * );
     1273short int ++?( volatile short int * ), ++?( _Atomic volatile short int * );
     1274unsigned short int ++?( volatile unsigned short int * ), ++?( _Atomic volatile unsigned short int * );
     1275int ++?( volatile int * ), ++?( _Atomic volatile int * );
     1276unsigned int ++?( volatile unsigned int * ), ++?( _Atomic volatile unsigned int * );
     1277long int ++?( volatile long int * ), ++?( _Atomic volatile long int * );
     1278long unsigned int ++?( volatile long unsigned int * ), ++?( _Atomic volatile long unsigned int * );
     1279long long int ++?( volatile long long int * ), ++?( _Atomic volatile long long int * );
     1280long long unsigned ++?( volatile long long unsigned int * ), ++?( _Atomic volatile long long unsigned int * );
     1281float ++?( volatile float * ), ++?( _Atomic volatile float * );
     1282double ++?( volatile double * ), ++?( _Atomic volatile double * );
     1283long double ++?( volatile long double * ), ++?( _Atomic volatile long double * );
     1284
     1285forall( type T ) T * ++?( T * restrict volatile * ), * ++?( T * _Atomic restrict volatile * );
     1286forall( type T ) _Atomic T * ++?( _Atomic T * restrict volatile * ), * ++?( _Atomic T * _Atomic restrict volatile * );
     1287forall( type T ) const T * ++?( const T * restrict volatile * ), * ++?( const T * _Atomic restrict volatile * );
     1288forall( type T ) volatile T * ++?( volatile T * restrict volatile * ), * ++?( volatile T * _Atomic restrict volatile * );
     1289forall( type T ) restrict T * ++?( restrict T * restrict volatile * ), * ++?( restrict T * _Atomic restrict volatile * );
    15171290forall( type T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ),
    15181291        * ++?( _Atomic const T * _Atomic restrict volatile * );
    1519 
    15201292forall( type T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ),
    15211293        * ++?( _Atomic volatile T * _Atomic restrict volatile * );
    1522 
    15231294forall( type T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ),
    15241295        * ++?( _Atomic restrict T * _Atomic restrict volatile * );
    1525 
    15261296forall( type T ) const volatile T * ++?( const volatile T * restrict volatile * ),
    15271297        * ++?( const volatile T * _Atomic restrict volatile * );
    1528 
    15291298forall( type T ) const restrict T * ++?( const restrict T * restrict volatile * ),
    15301299        * ++?( const restrict T * _Atomic restrict volatile * );
    1531 
    15321300forall( type T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ),
    15331301        * ++?( restrict volatile T * _Atomic restrict volatile * );
    1534 
    15351302forall( type T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ),
    15361303        * ++?( _Atomic const volatile T * _Atomic restrict volatile * );
    1537 
    15381304forall( type T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ),
    15391305        * ++?( _Atomic const restrict T * _Atomic restrict volatile * );
    1540 
    15411306forall( type T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ),
    15421307        * ++?( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1543 
    15441308forall( type T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ),
    15451309        * ++?( const restrict volatile T * _Atomic restrict volatile * );
    1546 
    15471310forall( type T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ),
    15481311        * ++?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    15491312
    1550 _Bool --?( volatile _Bool * ),
    1551         --?( _Atomic volatile _Bool * );
    1552 char --?( volatile char * ),
    1553         --?( _Atomic volatile char * );
    1554 signed char --?( volatile signed char * ),
    1555         --?( _Atomic volatile signed char * );
    1556 unsigned char --?( volatile signed char * ),
    1557         --?( _Atomic volatile signed char * );
    1558 short int --?( volatile short int * ),
    1559         --?( _Atomic volatile short int * );
    1560 unsigned short int --?( volatile unsigned short int * ),
    1561         --?( _Atomic volatile unsigned short int * );
    1562 int --?( volatile int * ),
    1563         --?( _Atomic volatile int * );
    1564 unsigned int --?( volatile unsigned int * ),
    1565         --?( _Atomic volatile unsigned int * );
    1566 long int --?( volatile long int * ),
    1567         --?( _Atomic volatile long int * );
    1568 long unsigned int --?( volatile long unsigned int * ),
    1569         --?( _Atomic volatile long unsigned int * );
    1570 long long int --?( volatile long long int * ),
    1571         --?( _Atomic volatile long long int * );
    1572 long long unsigned --?( volatile long long unsigned int * ),
    1573         --?( _Atomic volatile long long unsigned int * );
    1574 float --?( volatile float * ),
    1575         --?( _Atomic volatile float * );
    1576 double --?( volatile double * ),
    1577         --?( _Atomic volatile double * );
    1578 long double --?( volatile long double * ),
    1579         --?( _Atomic volatile long double * );
    1580 
    1581 forall( type T ) T * --?( T * restrict volatile * ),
    1582         * --?( T * _Atomic restrict volatile * );
    1583 
    1584 forall( type T ) _Atomic T * --?( _Atomic T * restrict volatile * ),
    1585         * --?( _Atomic T * _Atomic restrict volatile * );
    1586 
    1587 forall( type T ) const T * --?( const T * restrict volatile * ),
    1588         * --?( const T * _Atomic restrict volatile * );
    1589 
    1590 forall( type T ) volatile T * --?( volatile T * restrict volatile * ),
    1591         * --?( volatile T * _Atomic restrict volatile * );
    1592 
    1593 forall( type T ) restrict T * --?( restrict T * restrict volatile * ),
    1594         * --?( restrict T * _Atomic restrict volatile * );
    1595 
     1313_Bool --?( volatile _Bool * ), --?( _Atomic volatile _Bool * );
     1314char --?( volatile char * ), --?( _Atomic volatile char * );
     1315signed char --?( volatile signed char * ), --?( _Atomic volatile signed char * );
     1316unsigned char --?( volatile signed char * ), --?( _Atomic volatile signed char * );
     1317short int --?( volatile short int * ), --?( _Atomic volatile short int * );
     1318unsigned short int --?( volatile unsigned short int * ), --?( _Atomic volatile unsigned short int * );
     1319int --?( volatile int * ), --?( _Atomic volatile int * );
     1320unsigned int --?( volatile unsigned int * ), --?( _Atomic volatile unsigned int * );
     1321long int --?( volatile long int * ), --?( _Atomic volatile long int * );
     1322long unsigned int --?( volatile long unsigned int * ), --?( _Atomic volatile long unsigned int * );
     1323long long int --?( volatile long long int * ), --?( _Atomic volatile long long int * );
     1324long long unsigned --?( volatile long long unsigned int * ), --?( _Atomic volatile long long unsigned int * );
     1325float --?( volatile float * ), --?( _Atomic volatile float * );
     1326double --?( volatile double * ), --?( _Atomic volatile double * );
     1327long double --?( volatile long double * ), --?( _Atomic volatile long double * );
     1328
     1329forall( type T ) T * --?( T * restrict volatile * ), * --?( T * _Atomic restrict volatile * );
     1330forall( type T ) _Atomic T * --?( _Atomic T * restrict volatile * ), * --?( _Atomic T * _Atomic restrict volatile * );
     1331forall( type T ) const T * --?( const T * restrict volatile * ), * --?( const T * _Atomic restrict volatile * );
     1332forall( type T ) volatile T * --?( volatile T * restrict volatile * ), * --?( volatile T * _Atomic restrict volatile * );
     1333forall( type T ) restrict T * --?( restrict T * restrict volatile * ), * --?( restrict T * _Atomic restrict volatile * );
    15961334forall( type T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ),
    15971335        * --?( _Atomic const T * _Atomic restrict volatile * );
    1598 
    15991336forall( type T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ),
    16001337        * --?( _Atomic volatile T * _Atomic restrict volatile * );
    1601 
    16021338forall( type T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ),
    16031339        * --?( _Atomic restrict T * _Atomic restrict volatile * );
    1604 
    16051340forall( type T ) const volatile T * --?( const volatile T * restrict volatile * ),
    16061341        * --?( const volatile T * _Atomic restrict volatile * );
    1607 
    16081342forall( type T ) const restrict T * --?( const restrict T * restrict volatile * ),
    16091343        * --?( const restrict T * _Atomic restrict volatile * );
    1610 
    16111344forall( type T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ),
    16121345        * --?( restrict volatile T * _Atomic restrict volatile * );
    1613 
    16141346forall( type T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ),
    16151347        * --?( _Atomic const volatile T * _Atomic restrict volatile * );
    1616 
    16171348forall( type T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ),
    16181349        * --?( _Atomic const restrict T * _Atomic restrict volatile * );
    1619 
    16201350forall( type T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ),
    16211351        * --?( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1622 
    16231352forall( type T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ),
    16241353        * --?( const restrict volatile T * _Atomic restrict volatile * );
    1625 
    16261354forall( type T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ),
    16271355        * --?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
     
    16451373
    16461374\semantics
    1647 The interpretations of prefix increment and decrement expressions are
    1648 determined in the same way as the interpretations of postfix increment and
    1649 decrement expressions.
     1375The interpretations of prefix increment and decrement expressions are determined in the same way as the interpretations of postfix increment and decrement expressions.
    16501376
    16511377
     
    16701396forall( type T ) const restrict volatile lvalue T *?( const restrict volatile T * );
    16711397forall( type T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * );
    1672 
    16731398forall( ftype FT ) FT *?( FT * );
    16741399\end{lstlisting}
     
    16821407\lstinline$T$ is the type of the operand.
    16831408
    1684 The interpretations of an indirection expression are the interpretations of the corresponding
    1685 function call.
     1409The interpretations of an indirection expression are the interpretations of the corresponding function call.
    16861410
    16871411
     
    16901414\predefined
    16911415\begin{lstlisting}
    1692 int
    1693         +?( int ),
    1694         -?( int ),
    1695         ~?( int );
    1696 unsigned int
    1697         +?( unsigned int ),
    1698         -?( unsigned int ),
    1699          ~?( unsigned int );
    1700 long int
    1701         +?( long int ),
    1702         -?( long int ),
    1703         ~?( long int );
    1704 long unsigned int
    1705         +?( long unsigned int ),
    1706         -?( long unsigned int ),
    1707         ~?( long unsigned int );
    1708 long long int
    1709         +?( long long int ),
    1710         -?( long long int ),
    1711         ~?( long long int );
    1712 long long unsigned int
    1713         +?( long long unsigned int ),
    1714         -?( long long unsigned int ),
    1715         ~?( long long unsigned int );
    1716 float
    1717         +?( float ),
    1718         -?( float );
    1719 double
    1720         +?( double ),
    1721         -?( double );
    1722 long double
    1723         +?( long double ),
    1724         -?( long double );
    1725 _Complex float
    1726         +?( _Complex float ),
    1727         -?( _Complex float );
    1728 _Complex double
    1729         +?( _Complex double ),
    1730         -?( _Complex double );
    1731 _Complex long double
    1732         +?( _Complex long double ),
    1733         -?( _Complex long double );
    1734 
    1735 int !?( int ),
    1736         !?( unsigned int ),
    1737         !?( long ),
    1738         !?( long unsigned int ),
    1739         !?( long long int ),
    1740         !?( long long unsigned int ),
    1741         !?( float ),
    1742         !?( double ),
    1743         !?( long double ),
    1744         !?( _Complex float ),
    1745         !?( _Complex double ),
    1746         !?( _Complex long double );
    1747 
     1416int     +?( int ), -?( int ), ~?( int );
     1417unsigned int +?( unsigned int ), -?( unsigned int ), ~?( unsigned int );
     1418long int +?( long int ), -?( long int ), ~?( long int );
     1419long unsigned int +?( long unsigned int ), -?( long unsigned int ), ~?( long unsigned int );
     1420long long int +?( long long int ), -?( long long int ), ~?( long long int );
     1421long long unsigned int +?( long long unsigned int ), -?( long long unsigned int ), ~?( long long unsigned int );
     1422float +?( float ), -?( float );
     1423double +?( double ), -?( double );
     1424long double +?( long double ), -?( long double );
     1425_Complex float +?( _Complex float ), -?( _Complex float );
     1426_Complex double +?( _Complex double ), -?( _Complex double );
     1427_Complex long double +?( _Complex long double ), -?( _Complex long double );
     1428int !?( int ), !?( unsigned int ), !?( long ), !?( long unsigned int ),
     1429        !?( long long int ), !?( long long unsigned int ),
     1430        !?( float ), !?( double ), !?( long double ),
     1431        !?( _Complex float ), !?( _Complex double ), !?( _Complex long double );
    17481432forall( dtype DT ) int !?( const restrict volatile DT * );
    17491433forall( dtype DT ) int !?( _Atomic const restrict volatile DT * );
    17501434forall( ftype FT ) int !?( FT * );
    17511435\end{lstlisting}
    1752 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    1753 rank of \lstinline$int$ there exist
     1436For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    17541437% Don't use predefined: keep this out of prelude.cf.
    17551438\begin{lstlisting}
     
    17591442
    17601443\semantics
    1761 The interpretations of a unary arithmetic expression are the interpretations of the corresponding
    1762 function call.
     1444The interpretations of a unary arithmetic expression are the interpretations of the corresponding function call.
    17631445
    17641446\examples
     
    17661448long int li;
    17671449void eat_double( double );@\use{eat_double}@
    1768 
    1769 eat_double(-li ); // @\rewrite@ eat_double( -?( li ) );
     1450eat_double(-li ); // @\rewrite@ eat_double( -?( li ) );
    17701451\end{lstlisting}
    17711452The valid interpretations of ``\lstinline$-li$'' (assuming no extended integer types exist) are
    17721453\begin{center}
    1773 \begin{tabular}{llc}
    1774 interpretation & result type & expression conversion cost \\
     1454\begin{tabular}{llc} interpretation & result type & expression conversion cost \\
    17751455\hline
    17761456\lstinline$-?( (int)li )$                                       & \lstinline$int$                                       & (unsafe) \\
     
    17881468\end{tabular}
    17891469\end{center}
    1790 The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument
    1791 conversion and the cost of the entire expression, are
     1470The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument conversion and the cost of the entire expression, are
    17921471\begin{center}
    1793 \begin{tabular}{lcc}
    1794 interpretation & argument cost & expression cost \\
     1472\begin{tabular}{lcc} interpretation & argument cost & expression cost \\
    17951473\hline
    17961474\lstinline$eat_double( (double)-?( (int)li) )$                                  & 7                     & (unsafe) \\
     
    18081486\end{tabular}
    18091487\end{center}
    1810 Each has result type \lstinline$void$, so the best must be selected. The interpretations involving
    1811 unsafe conversions are discarded. The remainder have equal expression conversion costs, so the
     1488Each has result type \lstinline$void$, so the best must be selected.
     1489The interpretations involving unsafe conversions are discarded.
     1490The remainder have equal expression conversion costs, so the
    18121491``highest argument conversion cost'' rule is invoked, and the chosen interpretation is
    18131492\lstinline$eat_double( (double)-?(li) )$.
     
    18201499\lstinline$dtype$, or \lstinline$ftype$.
    18211500
    1822 When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall
    1823 have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall
    1824 be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one
    1825 interpretation, of type \lstinline$size_t$.
     1501When 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$.
    18261502
    18271503When \lstinline$sizeof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
    1828 \nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand. When
    1829 the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the
    1830 expression is not a constant expression.
     1504\nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand.
     1505When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression.
    18311506
    18321507When \lstinline$_Alignof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
    1833 \nonterm{type-parameter}, it yields the alignment requirement of the type that implements the
    1834 operand. When the operand is an opaque type or an inferred type parameter\index{inferred
    1835 parameter}, the expression is not a constant expression.
     1508\nonterm{type-parameter}, it yields the alignment requirement of the type that implements the operand.
     1509When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression.
    18361510\begin{rationale}
    18371511\begin{lstlisting}
    18381512type Pair = struct { int first, second; };
    18391513size_t p_size = sizeof(Pair);           // constant expression
    1840 
    18411514extern type Rational;@\use{Rational}@
    18421515size_t c_size = sizeof(Rational);       // non-constant expression
    1843 
    18441516forall(type T) T f(T p1, T p2) {
    18451517        size_t t_size = sizeof(T);              // non-constant expression
     
    18471519}
    18481520\end{lstlisting}
    1849 ``\lstinline$sizeof Rational$'', although not statically known, is fixed. Within \lstinline$f()$,
     1521``\lstinline$sizeof Rational$'', although not statically known, is fixed.
     1522Within \lstinline$f()$,
    18501523``\lstinline$sizeof(T)$'' is fixed for each call of \lstinline$f()$, but may vary from call to call.
    18511524\end{rationale}
     
    18671540
    18681541In a \Index{cast expression} ``\lstinline$($\nonterm{type-name}\lstinline$)e$'', if
    1869 \nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is
    1870 the only interpretation of the cast expression; otherwise, \lstinline$e$ shall have some
    1871 interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast
    1872 expression is the cast of the interpretation that can be converted at the lowest cost. The cast
    1873 expression's interpretation is ambiguous\index{ambiguous interpretation} if more than one
    1874 interpretation can be converted at the lowest cost or if the selected interpretation is ambiguous.
    1875 
    1876 \begin{rationale}
    1877 Casts can be used to eliminate ambiguity in expressions by selecting interpretations of
    1878 subexpressions, and to specialize polymorphic functions and values.
     1542\nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is the only interpretation of the cast expression;
     1543otherwise, \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.
     1544The 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.
     1545
     1546\begin{rationale}
     1547Casts can be used to eliminate ambiguity in expressions by selecting interpretations of subexpressions, and to specialize polymorphic functions and values.
    18791548\end{rationale}
    18801549
     
    18991568\predefined
    19001569\begin{lstlisting}
    1901 int?*?( int, int ),
    1902         ?/?( int, int ),
    1903         ?%?( int, int );
    1904 unsigned int?*?( unsigned int, unsigned int ),
    1905         ?/?( unsigned int, unsigned int ),
    1906         ?%?( unsigned int, unsigned int );
    1907 long int?*?( long int, long int ),
    1908         ?/?( long, long ),
    1909         ?%?( long, long );
     1570int?*?( int, int ), ?/?( int, int ), ?%?( int, int );
     1571unsigned int?*?( unsigned int, unsigned int ), ?/?( unsigned int, unsigned int ), ?%?( unsigned int, unsigned int );
     1572long int?*?( long int, long int ), ?/?( long, long ), ?%?( long, long );
    19101573long unsigned int?*?( long unsigned int, long unsigned int ),
    1911         ?/?( long unsigned int, long unsigned int ),
    1912         ?%?( long unsigned int, long unsigned int );
    1913 long long int?*?( long long int, long long int ),
    1914         ?/?( long long int, long long int ),
     1574        ?/?( long unsigned int, long unsigned int ), ?%?( long unsigned int, long unsigned int );
     1575long long int?*?( long long int, long long int ), ?/?( long long int, long long int ),
    19151576        ?%?( long long int, long long int );
    19161577long long unsigned int ?*?( long long unsigned int, long long unsigned int ),
    1917         ?/?( long long unsigned int, long long unsigned int ),
    1918         ?%?( long long unsigned int, long long unsigned int );
    1919 float?*?( float, float ),
    1920         ?/?( float, float );
    1921 double?*?( double, double ),
    1922         ?/?( double, double );
    1923 long double?*?( long double, long double ),
    1924         ?/?( long double, long double );
    1925 _Complex float?*?( float, _Complex float ),
    1926         ?/?( float, _Complex float ),
    1927         ?*?( _Complex float, float ),
    1928         ?/?( _Complex float, float ),
    1929         ?*?( _Complex float, _Complex float ),
    1930         ?/?( _Complex float, _Complex float );
    1931 _Complex double?*?( double, _Complex double ),
    1932         ?/?( double, _Complex double ),
    1933         ?*?( _Complex double, double ),
    1934         ?/?( _Complex double, double ),
    1935         ?*?( _Complex double, _Complex double ),
    1936         ?/?( _Complex double, _Complex double );
    1937 _Complex long double?*?( long double, _Complex long double ),
    1938         ?/?( long double, _Complex long double ),
    1939         ?*?( _Complex long double, long double ),
    1940         ?/?( _Complex long double, long double ),
    1941         ?*?( _Complex long double, _Complex long double ),
    1942         ?/?( _Complex long double, _Complex long double );
    1943 \end{lstlisting}
    1944 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    1945 rank of \lstinline$int$ there exist
     1578        ?/?( long long unsigned int, long long unsigned int ), ?%?( long long unsigned int, long long unsigned int );
     1579float?*?( float, float ), ?/?( float, float );
     1580double?*?( double, double ), ?/?( double, double );
     1581long double?*?( long double, long double ), ?/?( long double, long double );
     1582_Complex float?*?( float, _Complex float ), ?/?( float, _Complex float ),
     1583        ?*?( _Complex float, float ), ?/?( _Complex float, float ),
     1584        ?*?( _Complex float, _Complex float ), ?/?( _Complex float, _Complex float );
     1585_Complex double?*?( double, _Complex double ), ?/?( double, _Complex double ),
     1586        ?*?( _Complex double, double ), ?/?( _Complex double, double ),
     1587        ?*?( _Complex double, _Complex double ), ?/?( _Complex double, _Complex double );
     1588_Complex long double?*?( long double, _Complex long double ), ?/?( long double, _Complex long double ),
     1589        ?*?( _Complex long double, long double ), ?/?( _Complex long double, long double ),
     1590        ?*?( _Complex long double, _Complex long double ), ?/?( _Complex long double, _Complex long double );
     1591\end{lstlisting}
     1592For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    19461593% Don't use predefined: keep this out of prelude.cf.
    19471594\begin{lstlisting}
     
    19511598\begin{rationale}
    19521599{\c11} does not include conversions from the \Index{real type}s to \Index{complex type}s in the
    1953 \Index{usual arithmetic conversion}s.  Instead it specifies conversion of the result of binary
    1954 operations on arguments from mixed type domains. \CFA's predefined operators match that pattern.
     1600\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.
    19551601\end{rationale}
    19561602
    19571603\semantics
    1958 The interpretations of multiplicative expressions are the interpretations of the corresponding
    1959 function call.
     1604The interpretations of multiplicative expressions are the interpretations of the corresponding function call.
    19601605
    19611606\examples
     
    19661611eat_double( li % i );
    19671612\end{lstlisting}
    1968 ``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''. The valid interpretations
    1969 of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and
    1970 the cost of converting the result to \lstinline$double$ (assuming no extended integer types are
    1971 present ) are
     1613``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''.
     1614The 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
    19721615\begin{center}
    1973 \begin{tabular}{lcc}
    1974 interpretation & argument cost & result cost \\
     1616\begin{tabular}{lcc} interpretation & argument cost & result cost \\
    19751617\hline
    19761618\lstinline$ ?%?( (int)li, i )$                                                                          & (unsafe)      & 6     \\
    19771619\lstinline$ ?%?( (unsigned)li,(unsigned)i )$                                            & (unsafe)      & 5     \\
    1978 \lstinline$ ?%?(li,(long)i )$                                                                           & 1                     & 4     \\
     1620\lstinline$ ?%?( li, (long)i )$                                                                         & 1                     & 4     \\
    19791621\lstinline$ ?%?( (long unsigned)li,(long unsigned)i )$                          & 3                     & 3     \\
    19801622\lstinline$ ?%?( (long long)li,(long long)i )$                                          & 5                     & 2     \\
     
    19831625\end{center}
    19841626The best interpretation of \lstinline$eat_double( li, i )$ is
    1985 \lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the
    1986 lowest total cost.
    1987 
    1988 \begin{rationale}
    1989 {\c11} defines most arithmetic operations to apply an \Index{integer promotion} to any argument that
    1990 belongs to a type that has an \Index{integer conversion rank} less than that of \lstinline$int$.If
     1627\lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the lowest total cost.
     1628
     1629\begin{rationale}
     1630{\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
    19911631\lstinline$s$ is a \lstinline$short int$, ``\lstinline$s *s$'' does not have type \lstinline$short int$;
    1992 it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches
    1993 that pattern; it does not predefine ``\lstinline$short ?*?( short, short )$''.
    1994 
    1995 These ``missing'' operators limit polymorphism. Consider
     1632it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches that pattern;
     1633it does not predefine ``\lstinline$short ?*?( short, short )$''.
     1634
     1635These ``missing'' operators limit polymorphism.
     1636Consider
    19961637\begin{lstlisting}
    19971638forall( type T | T ?*?( T, T ) ) T square( T );
     
    20011642Since \CFA does not define a multiplication operator for \lstinline$short int$,
    20021643\lstinline$square( s )$ is treated as \lstinline$square( (int)s )$, and the result has type
    2003 \lstinline$int$. This is mildly surprising, but it follows the {\c11} operator pattern.
     1644\lstinline$int$.
     1645This is mildly surprising, but it follows the {\c11} operator pattern.
    20041646
    20051647A more troubling example is
     
    20101652\end{lstlisting}
    20111653This has no valid interpretations, because \CFA has no conversion from ``array of
    2012 \lstinline$short int$'' to ``array of \lstinline$int$''. The alternatives in such situations
    2013 include
     1654\lstinline$short int$'' to ``array of \lstinline$int$''.
     1655The alternatives in such situations include
    20141656\begin{itemize}
    20151657\item
     
    20201662\lstinline$product$.
    20211663\item
    2022 Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to
    2023 the operator's argument type.
     1664Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to the operator's argument type.
    20241665\end{itemize}
    20251666\end{rationale}
     
    20431684\predefined
    20441685\begin{lstlisting}
    2045 int?+?( int, int ),
    2046         ?-?( int, int );
    2047 unsigned int?+?( unsigned int, unsigned int ),
    2048         ?-?( unsigned int, unsigned int );
    2049 long int?+?( long int, long int ),
    2050         ?-?( long int, long int );
    2051 long unsigned int?+?( long unsigned int, long unsigned int ),
    2052         ?-?( long unsigned int, long unsigned int );
    2053 long long int?+?( long long int, long long int ),
    2054         ?-?( long long int, long long int );
     1686int?+?( int, int ), ?-?( int, int );
     1687unsigned int?+?( unsigned int, unsigned int ), ?-?( unsigned int, unsigned int );
     1688long int?+?( long int, long int ), ?-?( long int, long int );
     1689long unsigned int?+?( long unsigned int, long unsigned int ), ?-?( long unsigned int, long unsigned int );
     1690long long int?+?( long long int, long long int ), ?-?( long long int, long long int );
    20551691long long unsigned int ?+?( long long unsigned int, long long unsigned int ),
    20561692        ?-?( long long unsigned int, long long unsigned int );
    2057 float?+?( float, float ),
    2058         ?-?( float, float );
    2059 double?+?( double, double ),
    2060         ?-?( double, double );
    2061 long double?+?( long double, long double ),
    2062         ?-?( long double, long double );
    2063 _Complex float?+?( _Complex float, float ),
    2064         ?-?( _Complex float, float ),
    2065         ?+?( float, _Complex float ),
    2066         ?-?( float, _Complex float ),
    2067         ?+?( _Complex float, _Complex float ),
    2068         ?-?( _Complex float, _Complex float );
    2069 _Complex double?+?( _Complex double, double ),
    2070         ?-?( _Complex double, double ),
    2071         ?+?( double, _Complex double ),
    2072         ?-?( double, _Complex double ),
    2073         ?+?( _Complex double, _Complex double ),
    2074         ?-?( _Complex double, _Complex double );
    2075 _Complex long double?+?( _Complex long double, long double ),
    2076         ?-?( _Complex long double, long double ),
    2077         ?+?( long double, _Complex long double ),
    2078         ?-?( long double, _Complex long double ),
    2079         ?+?( _Complex long double, _Complex long double ),
    2080         ?-?( _Complex long double, _Complex long double );
    2081 
    2082 forall( type T ) T
    2083         * ?+?( T *, ptrdiff_t ),
    2084         * ?+?( ptrdiff_t, T * ),
    2085         * ?-?( T *, ptrdiff_t );
    2086 
    2087 forall( type T ) _Atomic T
    2088         * ?+?( _Atomic T *, ptrdiff_t ),
    2089         * ?+?( ptrdiff_t, _Atomic T * ),
     1693float?+?( float, float ), ?-?( float, float );
     1694double?+?( double, double ), ?-?( double, double );
     1695long double?+?( long double, long double ), ?-?( long double, long double );
     1696_Complex float?+?( _Complex float, float ), ?-?( _Complex float, float ),
     1697        ?+?( float, _Complex float ), ?-?( float, _Complex float ),
     1698        ?+?( _Complex float, _Complex float ), ?-?( _Complex float, _Complex float );
     1699_Complex double?+?( _Complex double, double ), ?-?( _Complex double, double ),
     1700        ?+?( double, _Complex double ), ?-?( double, _Complex double ),
     1701        ?+?( _Complex double, _Complex double ), ?-?( _Complex double, _Complex double );
     1702_Complex long double?+?( _Complex long double, long double ), ?-?( _Complex long double, long double ),
     1703        ?+?( long double, _Complex long double ), ?-?( long double, _Complex long double ),
     1704        ?+?( _Complex long double, _Complex long double ), ?-?( _Complex long double, _Complex long double );
     1705
     1706forall( type T ) T * ?+?( T *, ptrdiff_t ), * ?+?( ptrdiff_t, T * ), * ?-?( T *, ptrdiff_t );
     1707forall( type T ) _Atomic T * ?+?( _Atomic T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic T * ),
    20901708        * ?-?( _Atomic T *, ptrdiff_t );
    2091 
    2092 forall( type T ) const T
    2093         * ?+?( const T *, ptrdiff_t ),
    2094         * ?+?( ptrdiff_t, const T * ),
     1709forall( type T ) const T * ?+?( const T *, ptrdiff_t ), * ?+?( ptrdiff_t, const T * ),
    20951710        * ?-?( const T *, ptrdiff_t );
    2096 
    2097 forall( type T ) restrict T
    2098         * ?+?( restrict T *, ptrdiff_t ),
    2099         * ?+?( ptrdiff_t, restrict T * ),
     1711forall( type T ) restrict T * ?+?( restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict T * ),
    21001712        * ?-?( restrict T *, ptrdiff_t );
    2101 
    2102 forall( type T ) volatile T
    2103         * ?+?( volatile T *, ptrdiff_t ),
    2104         * ?+?( ptrdiff_t, volatile T * ),
     1713forall( type T ) volatile T * ?+?( volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, volatile T * ),
    21051714        * ?-?( volatile T *, ptrdiff_t );
    2106 
    2107 forall( type T ) _Atomic const T
    2108         * ?+?( _Atomic const T *, ptrdiff_t ),
    2109         * ?+?( ptrdiff_t, _Atomic const T * ),
     1715forall( type T ) _Atomic const T * ?+?( _Atomic const T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic const T * ),
    21101716        * ?-?( _Atomic const T *, ptrdiff_t );
    2111 
    2112 forall( type T ) _Atomic restrict T
    2113         * ?+?( _Atomic restrict T *, ptrdiff_t ),
    2114         * ?+?( ptrdiff_t, _Atomic restrict T * ),
     1717forall( type T ) _Atomic restrict T * ?+?( _Atomic restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic restrict T * ),
    21151718        * ?-?( _Atomic restrict T *, ptrdiff_t );
    2116 
    2117 forall( type T ) _Atomic volatile T
    2118         * ?+?( _Atomic volatile T *, ptrdiff_t ),
    2119         * ?+?( ptrdiff_t, _Atomic volatile T * ),
     1719forall( type T ) _Atomic volatile T * ?+?( _Atomic volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic volatile T * ),
    21201720        * ?-?( _Atomic volatile T *, ptrdiff_t );
    2121 
    2122 forall( type T ) const restrict T
    2123         * ?+?( const restrict T *, ptrdiff_t ),
    2124         * ?+?( ptrdiff_t, const restrict T * ),
     1721forall( type T ) const restrict T * ?+?( const restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, const restrict T * ),
    21251722        * ?-?( const restrict T *, ptrdiff_t );
    2126 
    2127 forall( type T ) const volatile T
    2128         * ?+?( const volatile T *, ptrdiff_t ),
    2129         * ?+?( ptrdiff_t, const volatile T * ),
     1723forall( type T ) const volatile T * ?+?( const volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, const volatile T * ),
    21301724        * ?-?( const volatile T *, ptrdiff_t );
    2131 
    2132 forall( type T ) restrict volatile T
    2133         * ?+?( restrict volatile T *, ptrdiff_t ),
    2134         * ?+?( ptrdiff_t, restrict volatile T * ),
     1725forall( type T ) restrict volatile T * ?+?( restrict volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict volatile T * ),
    21351726        * ?-?( restrict volatile T *, ptrdiff_t );
    2136 
    2137 forall( type T ) _Atomic const restrict T
    2138         * ?+?( _Atomic const restrict T *, ptrdiff_t ),
     1727forall( type T ) _Atomic const restrict T * ?+?( _Atomic const restrict T *, ptrdiff_t ),
    21391728        * ?+?( ptrdiff_t, _Atomic const restrict T * ),
    21401729        * ?-?( _Atomic const restrict T *, ptrdiff_t );
    2141 
    21421730forall( type T ) ptrdiff_t
    21431731        * ?-?( const restrict volatile T *, const restrict volatile T * ),
    21441732        * ?-?( _Atomic const restrict volatile T *, _Atomic const restrict volatile T * );
    21451733\end{lstlisting}
    2146 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2147 rank of \lstinline$int$ there exist
     1734For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    21481735% Don't use predefined: keep this out of prelude.cf.
    21491736\begin{lstlisting}
     
    21521739
    21531740\semantics
    2154 The interpretations of additive expressions are the interpretations of the corresponding function
    2155 calls.
    2156 
    2157 \begin{rationale}
    2158 \lstinline$ptrdiff_t$ is an implementation-defined identifier defined in \lstinline$<stddef.h>$ that
    2159 is synonymous with a signed integral type that is large enough to hold the difference between two
    2160 pointers. It seems reasonable to use it for pointer addition as well. (This is technically a
    2161 difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral}
    2162 argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition.
    2163 The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an
    2164 argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an
    2165 unsigned type.
     1741The interpretations of additive expressions are the interpretations of the corresponding function calls.
     1742
     1743\begin{rationale}
     1744\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.
     1745It 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.
     1746The {\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.
    21661747\end{rationale}
    21671748
     
    21841765\predefined
    21851766\begin{lstlisting}
    2186 int ?<<?( int, int ),
    2187          ?>>?( int, int );
    2188 unsigned int ?<<?( unsigned int, int ),
    2189          ?>>?( unsigned int, int );
    2190 long int ?<<?( long int, int ),
    2191          ?>>?( long int, int );
    2192 long unsigned int ?<<?( long unsigned int, int ),
    2193          ?>>?( long unsigned int, int );
    2194 long long int ?<<?( long long int, int ),
    2195          ?>>?( long long int, int );
    2196 long long unsigned int ?<<?( long long unsigned int, int ),
    2197          ?>>?( long long unsigned int, int);
    2198 \end{lstlisting}
    2199 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2200 rank of \lstinline$int$ there exist
     1767int ?<<?( int, int ), ?>>?( int, int );
     1768unsigned int ?<<?( unsigned int, int ), ?>>?( unsigned int, int );
     1769long int ?<<?( long int, int ), ?>>?( long int, int );
     1770long unsigned int ?<<?( long unsigned int, int ), ?>>?( long unsigned int, int );
     1771long long int ?<<?( long long int, int ), ?>>?( long long int, int );
     1772long long unsigned int ?<<?( long long unsigned int, int ), ?>>?( long long unsigned int, int);
     1773\end{lstlisting}
     1774For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    22011775% Don't use predefined: keep this out of prelude.cf.
    22021776\begin{lstlisting}
     
    22051779
    22061780\begin{rationale}
    2207 The bitwise shift operators break the usual pattern: they do not convert both operands to a common
    2208 type. The right operand only undergoes \Index{integer promotion}.
     1781The bitwise shift operators break the usual pattern: they do not convert both operands to a common type.
     1782The right operand only undergoes \Index{integer promotion}.
    22091783\end{rationale}
    22101784
    22111785\semantics
    2212 The interpretations of a bitwise shift expression are the interpretations of the corresponding
    2213 function calls.
     1786The interpretations of a bitwise shift expression are the interpretations of the corresponding function calls.
    22141787
    22151788
     
    22351808\predefined
    22361809\begin{lstlisting}
    2237 int ?<?( int, int ),
    2238         ?<=?( int, int ),
    2239         ?>?( int, int ),
    2240         ?>=?( int, int );
    2241 int ?<?( unsigned int, unsigned int ),
    2242         ?<=?( unsigned int, unsigned int ),
    2243         ?>?( unsigned int, unsigned int ),
    2244         ?>=?( unsigned int, unsigned int );
    2245 int ?<?( long int, long int ),
    2246         ?<=?( long int, long int ),
    2247         ?>?( long int, long int ),
    2248         ?>=?( long int, long int );
    2249 int ?<?( long unsigned int, long unsigned ),
    2250         ?<=?( long unsigned int, long unsigned ),
    2251         ?>?( long unsigned int, long unsigned ),
    2252         ?>=?( long unsigned int, long unsigned );
    2253 int ?<?( long long int, long long int ),
    2254         ?<=?( long long int, long long int ),
    2255         ?>?( long long int, long long int ),
    2256         ?>=?( long long int, long long int );
    2257 int ?<?( long long unsigned int, long long unsigned ),
    2258         ?<=?( long long unsigned int, long long unsigned ),
    2259         ?>?( long long unsigned int, long long unsigned ),
    2260         ?>=?( long long unsigned int, long long unsigned );
    2261 int ?<?( float, float ),
    2262         ?<=?( float, float ),
    2263         ?>?( float, float ),
    2264         ?>=?( float, float );
    2265 int ?<?( double, double ),
    2266         ?<=?( double, double ),
    2267         ?>?( double, double ),
    2268         ?>=?( double, double );
    2269 int ?<?( long double, long double ),
    2270         ?<=?( long double, long double ),
    2271         ?>?( long double, long double ),
    2272         ?>=?( long double, long double );
    2273 
    2274 forall( dtype DT ) int
    2275         ?<?( const restrict volatile DT *, const restrict volatile DT * ),
     1810int ?<?( int, int ), ?<=?( int, int ),
     1811        ?>?( int, int ), ?>=?( int, int );
     1812int ?<?( unsigned int, unsigned int ), ?<=?( unsigned int, unsigned int ),
     1813        ?>?( unsigned int, unsigned int ), ?>=?( unsigned int, unsigned int );
     1814int ?<?( long int, long int ), ?<=?( long int, long int ),
     1815        ?>?( long int, long int ), ?>=?( long int, long int );
     1816int ?<?( long unsigned int, long unsigned ), ?<=?( long unsigned int, long unsigned ),
     1817        ?>?( long unsigned int, long unsigned ), ?>=?( long unsigned int, long unsigned );
     1818int ?<?( long long int, long long int ), ?<=?( long long int, long long int ),
     1819        ?>?( long long int, long long int ), ?>=?( long long int, long long int );
     1820int ?<?( long long unsigned int, long long unsigned ), ?<=?( long long unsigned int, long long unsigned ),
     1821        ?>?( long long unsigned int, long long unsigned ), ?>=?( long long unsigned int, long long unsigned );
     1822int ?<?( float, float ), ?<=?( float, float ),
     1823        ?>?( float, float ), ?>=?( float, float );
     1824int ?<?( double, double ), ?<=?( double, double ),
     1825        ?>?( double, double ), ?>=?( double, double );
     1826int ?<?( long double, long double ), ?<=?( long double, long double ),
     1827        ?>?( long double, long double ), ?>=?( long double, long double );
     1828forall( dtype DT ) int ?<?( const restrict volatile DT *, const restrict volatile DT * ),
    22761829        ?<?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ),
    22771830        ?<=?( const restrict volatile DT *, const restrict volatile DT * ),
     
    22821835        ?>=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * );
    22831836\end{lstlisting}
    2284 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2285 rank of \lstinline$int$ there exist
     1837For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    22861838% Don't use predefined: keep this out of prelude.cf.
    22871839\begin{lstlisting}
     
    22931845
    22941846\semantics
    2295 The interpretations of a relational expression are the interpretations of the corresponding function
    2296 call.
     1847The interpretations of a relational expression are the interpretations of the corresponding function call.
    22971848
    22981849
     
    23141865\predefined
    23151866\begin{lstlisting}
    2316 int ?==?( int, int ),
    2317         ?!=?( int, int ),
    2318         ?==?( unsigned int, unsigned int ),
    2319         ?!=?( unsigned int, unsigned int ),
    2320         ?==?( long int, long int ),
    2321         ?!=?( long int, long int ),
    2322         ?==?( long unsigned int, long unsigned int ),
    2323         ?!=?( long unsigned int, long unsigned int ),
    2324         ?==?( long long int, long long int ),
    2325         ?!=?( long long int, long long int ),
    2326         ?==?( long long unsigned int, long long unsigned int ),
    2327         ?!=?( long long unsigned int, long long unsigned int ),
    2328         ?==?( float, float ),
    2329         ?!=?( float, float ),
    2330         ?==?( _Complex float, float ),
    2331         ?!=?( _Complex float, float ),
    2332         ?==?( float, _Complex float ),
    2333         ?!=?( float, _Complex float ),
    2334         ?==?( _Complex float, _Complex float ),
    2335         ?!=?( _Complex float, _Complex float ),
    2336         ?==?( double, double ),
    2337         ?!=?( double, double ),
    2338         ?==?( _Complex double, double ),
    2339         ?!=?( _Complex double, double ),
    2340         ?==?( double, _Complex double ),
    2341         ?!=?( double, _Complex double ),
    2342         ?==?( _Complex double, _Complex double ),
    2343         ?!=?( _Complex double, _Complex double ),
    2344         ?==?( long double, long double ),
    2345         ?!=?( long double, long double ),
    2346         ?==?( _Complex long double, long double ),
    2347         ?!=?( _Complex long double, long double ),
    2348         ?==?( long double, _Complex long double ),
    2349         ?!=?( long double, _Complex long double ),
    2350         ?==?( _Complex long double, _Complex long double ),
    2351         ?!=?( _Complex long double, _Complex long double );
    2352 
     1867int ?==?( int, int ), ?!=?( int, int ),
     1868        ?==?( unsigned int, unsigned int ), ?!=?( unsigned int, unsigned int ),
     1869        ?==?( long int, long int ), ?!=?( long int, long int ),
     1870        ?==?( long unsigned int, long unsigned int ), ?!=?( long unsigned int, long unsigned int ),
     1871        ?==?( long long int, long long int ), ?!=?( long long int, long long int ),
     1872        ?==?( long long unsigned int, long long unsigned int ), ?!=?( long long unsigned int, long long unsigned int ),
     1873        ?==?( float, float ), ?!=?( float, float ),
     1874        ?==?( _Complex float, float ), ?!=?( _Complex float, float ),
     1875        ?==?( float, _Complex float ), ?!=?( float, _Complex float ),
     1876        ?==?( _Complex float, _Complex float ), ?!=?( _Complex float, _Complex float ),
     1877        ?==?( double, double ), ?!=?( double, double ),
     1878        ?==?( _Complex double, double ), ?!=?( _Complex double, double ),
     1879        ?==?( double, _Complex double ), ?!=?( double, _Complex double ),
     1880        ?==?( _Complex double, _Complex double ), ?!=?( _Complex double, _Complex double ),
     1881        ?==?( long double, long double ), ?!=?( long double, long double ),
     1882        ?==?( _Complex long double, long double ), ?!=?( _Complex long double, long double ),
     1883        ?==?( long double, _Complex long double ), ?!=?( long double, _Complex long double ),
     1884        ?==?( _Complex long double, _Complex long double ), ?!=?( _Complex long double, _Complex long double );
    23531885forall( dtype DT ) int
    23541886        ?==?( const restrict volatile DT *, const restrict volatile DT * ),
     
    23751907        ?==?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * ),
    23761908        ?!=?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * );
    2377 
    23781909forall( ftype FT ) int
    2379         ?==?( FT *, FT * ),
    2380         ?!=?( FT *, FT * ),
    2381         ?==?( FT *, forall( ftype FT2) FT2 * ),
    2382         ?!=?( FT *, forall( ftype FT2) FT2 * ),
    2383         ?==?( forall( ftype FT2) FT2*, FT * ),
    2384         ?!=?( forall( ftype FT2) FT2*, FT * ),
    2385         ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ),
    2386         ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * );
    2387 \end{lstlisting}
    2388 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2389 rank of \lstinline$int$ there exist
     1910        ?==?( FT *, FT * ), ?!=?( FT *, FT * ),
     1911        ?==?( FT *, forall( ftype FT2) FT2 * ), ?!=?( FT *, forall( ftype FT2) FT2 * ),
     1912        ?==?( forall( ftype FT2) FT2*, FT * ), ?!=?( forall( ftype FT2) FT2*, FT * ),
     1913        ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ), ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * );
     1914\end{lstlisting}
     1915For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    23901916% Don't use predefined: keep this out of prelude.cf.
    23911917\begin{lstlisting}
     
    23951921
    23961922\begin{rationale}
    2397 The polymorphic equality operations come in three styles: comparisons between pointers of compatible
    2398 types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and
    2399 between the \Index{null pointer} constant and pointers to any type. In the last case, a special
    2400 constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA
    2401 type system.
     1923The 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.
     1924In the last case, a special constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA type system.
    24021925\end{rationale}
    24031926
    24041927\semantics
    2405 The interpretations of an equality expression are the interpretations of the corresponding function
    2406 call.
     1928The interpretations of an equality expression are the interpretations of the corresponding function call.
    24071929
    24081930\begin{sloppypar}
    2409 The result of an equality comparison between two pointers to predefined functions or predefined
    2410 values is implementation-defined.
     1931The result of an equality comparison between two pointers to predefined functions or predefined values is implementation-defined.
    24111932\end{sloppypar}
    24121933\begin{rationale}
    2413 The implementation-defined status of equality comparisons allows implementations to use one library
    2414 routine to implement many predefined functions. These optimization are particularly important when
    2415 the predefined functions are polymorphic, as is the case for most pointer operations
     1934The implementation-defined status of equality comparisons allows implementations to use one library routine to implement many predefined functions.
     1935These optimization are particularly important when the predefined functions are polymorphic, as is the case for most pointer operations
    24161936\end{rationale}
    24171937
     
    24391959long long unsigned int ?&?( long long unsigned int, long long unsigned int );
    24401960\end{lstlisting}
    2441 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2442 rank of \lstinline$int$ there exist
     1961For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    24431962% Don't use predefined: keep this out of prelude.cf.
    24441963\begin{lstlisting}
     
    24471966
    24481967\semantics
    2449 The interpretations of a bitwise AND expression are the interpretations of the corresponding
    2450 function call.
     1968The interpretations of a bitwise AND expression are the interpretations of the corresponding function call.
    24511969
    24521970
     
    24731991long long unsigned int ?^?( long long unsigned int, long long unsigned int );
    24741992\end{lstlisting}
    2475 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2476 rank of \lstinline$int$ there exist
     1993For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    24771994% Don't use predefined: keep this out of prelude.cf.
    24781995\begin{lstlisting}
     
    24811998
    24821999\semantics
    2483 The interpretations of a bitwise exclusive OR expression are the interpretations of the
    2484 corresponding function call.
     2000The interpretations of a bitwise exclusive OR expression are the interpretations of the corresponding function call.
    24852001
    24862002
     
    25072023long long unsigned int ?|?( long long unsigned int, long long unsigned int );
    25082024\end{lstlisting}
    2509 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2510 rank of \lstinline$int$ there exist
     2025For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    25112026% Don't use predefined: keep this out of prelude.cf.
    25122027\begin{lstlisting}
     
    25152030
    25162031\semantics
    2517 The interpretations of a bitwise inclusive OR expression are the interpretations of the
    2518 corresponding function call.
     2032The interpretations of a bitwise inclusive OR expression are the interpretations of the corresponding function call.
    25192033
    25202034
     
    25282042
    25292043\semantics The operands of the expression ``\lstinline$a && b$'' are treated as
    2530 ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be
    2531 unambiguous. The expression has only one interpretation, which is of type \lstinline$int$.
    2532 \begin{rationale}
    2533 When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has
    2534 not been redefined for those types, the compiler can optimize away the function calls.
     2044``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be unambiguous.
     2045The expression has only one interpretation, which is of type \lstinline$int$.
     2046\begin{rationale}
     2047When 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.
    25352048
    25362049A common C idiom omits comparisons to \lstinline$0$ in the controlling expressions of loops and
    2537 \lstinline$if$ statements. For instance, the loop below iterates as long as \lstinline$rp$ points
    2538 at a \lstinline$Rational$ value that is non-zero.
     2050\lstinline$if$ statements.
     2051For instance, the loop below iterates as long as \lstinline$rp$ points at a \lstinline$Rational$ value that is non-zero.
    25392052
    25402053\begin{lstlisting}
     
    25432056extern int ?!=?( Rational, Rational );
    25442057Rational *rp;
    2545 
    25462058while ( rp && *rp ) { ... }
    25472059\end{lstlisting}
    2548 The logical expression calls the \lstinline$Rational$ inequality operator, passing
    2549 it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result. In
    2550 contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$
    2551 conversion to \lstinline$*rp$ in the equivalent situation. The conversion to \lstinline$int$ would
    2552 produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was
    2553 not written with this situation in mind.
     2060The 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.
     2061In contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$ conversion to \lstinline$*rp$ in the equivalent situation.
     2062The 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.
    25542063\end{rationale}
    25552064
     
    25652074\semantics
    25662075
    2567 The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$''
    2568 and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous. The expression has only one
    2569 interpretation, which is of type \lstinline$int$.
     2076The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous.
     2077The expression has only one interpretation, which is of type \lstinline$int$.
    25702078
    25712079
     
    25802088
    25812089\semantics
    2582 In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and
    2583 third operands both have an interpretation with \lstinline$void$ type, then the expression has an
    2584 interpretation with type \lstinline$void$, equivalent to
     2090In 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
    25852091\begin{lstlisting}
    25862092( int)(( a)!=0) ? ( void)( b) : ( void)( c)
    25872093\end{lstlisting}
    25882094
    2589 If the second and third operands both have interpretations with non-\lstinline$void$ types, the
    2590 expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'',
    2591 with \lstinline$cond$ declared as
     2095If 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
    25922096\begin{lstlisting}
    25932097forall( type T ) T cond( int, T, T );
    2594  
    2595 forall( dtype D ) void
    2596         * cond( int, D *, void * ),
    2597         * cond( int, void *, D * );
    2598        
    2599 forall( dtype D ) _atomic void
    2600         * cond( int, _Atomic D *, _Atomic void * ),
    2601         * cond( int, _Atomic void *, _Atomic D * );
    2602 
    2603 forall( dtype D ) const void
    2604         * cond( int, const D *, const void * ),
    2605         * cond( int, const void *, const D * );
    2606 
    2607 forall( dtype D ) restrict void
    2608         * cond( int, restrict D *, restrict void * ),
    2609         * cond( int, restrict void *, restrict D * );
    2610 
    2611 forall( dtype D ) volatile void
    2612         * cond( int, volatile D *, volatile void * ),
    2613         * cond( int, volatile void *, volatile D * );
    2614 
    2615 forall( dtype D ) _Atomic const void
    2616         * cond( int, _Atomic const D *, _Atomic const void * ),
    2617         * cond( int, _Atomic const void *, _Atomic const D * );
    2618 
    2619 forall( dtype D ) _Atomic restrict void
    2620         * cond( int, _Atomic restrict D *, _Atomic restrict void * ),
    2621         * cond( int, _Atomic restrict void *, _Atomic restrict D * );
    2622 
    2623 forall( dtype D ) _Atomic volatile void
    2624         * cond( int, _Atomic volatile D *, _Atomic volatile void * ),
    2625         * cond( int, _Atomic volatile void *, _Atomic volatile D * );
    2626 
    2627 forall( dtype D ) const restrict void
    2628         * cond( int, const restrict D *, const restrict void * ),
    2629         * cond( int, const restrict void *, const restrict D * );
    2630 
    2631 forall( dtype D ) const volatile void
    2632         * cond( int, const volatile D *, const volatile void * ),
    2633         * cond( int, const volatile void *, const volatile D * );
    2634 
    2635 forall( dtype D ) restrict volatile void
    2636         * cond( int, restrict volatile D *, restrict volatile void * ),
    2637         * cond( int, restrict volatile void *, restrict volatile D * );
    2638 
    2639 forall( dtype D ) _Atomic const restrict void
    2640         * cond( int, _Atomic const restrict D *, _Atomic const restrict void * ),
     2098forall( dtype D ) void * cond( int, D *, void * ), * cond( int, void *, D * );
     2099forall( dtype D ) _atomic void * cond(
     2100        int, _Atomic D *, _Atomic void * ), * cond( int, _Atomic void *, _Atomic D * );
     2101forall( dtype D ) const void * cond(
     2102        int, const D *, const void * ), * cond( int, const void *, const D * );
     2103forall( dtype D ) restrict void * cond(
     2104        int, restrict D *, restrict void * ), * cond( int, restrict void *, restrict D * );
     2105forall( dtype D ) volatile void * cond(
     2106        int, volatile D *, volatile void * ), * cond( int, volatile void *, volatile D * );
     2107forall( dtype D ) _Atomic const void * cond(
     2108        int, _Atomic const D *, _Atomic const void * ), * cond( int, _Atomic const void *, _Atomic const D * );
     2109forall( dtype D ) _Atomic restrict void * cond(
     2110        int, _Atomic restrict D *, _Atomic restrict void * ), * cond( int, _Atomic restrict void *, _Atomic restrict D * );
     2111forall( dtype D ) _Atomic volatile void * cond(
     2112        int, _Atomic volatile D *, _Atomic volatile void * ), * cond( int, _Atomic volatile void *, _Atomic volatile D * );
     2113forall( dtype D ) const restrict void * cond(
     2114        int, const restrict D *, const restrict void * ), * cond( int, const restrict void *, const restrict D * );
     2115forall( dtype D ) const volatile void * cond(
     2116        int, const volatile D *, const volatile void * ), * cond( int, const volatile void *, const volatile D * );
     2117forall( dtype D ) restrict volatile void * cond(
     2118        int, restrict volatile D *, restrict volatile void * ), * cond( int, restrict volatile void *, restrict volatile D * );
     2119forall( dtype D ) _Atomic const restrict void * cond(
     2120        int, _Atomic const restrict D *, _Atomic const restrict void * ),
    26412121        * cond( int, _Atomic const restrict void *, _Atomic const restrict D * );
    2642 
    2643 forall( dtype D ) _Atomic const volatile void
    2644         * cond( int, _Atomic const volatile D *, _Atomic const volatile void * ),
     2122forall( dtype D ) _Atomic const volatile void * cond(
     2123        int, _Atomic const volatile D *, _Atomic const volatile void * ),
    26452124        * cond( int, _Atomic const volatile void *, _Atomic const volatile D * );
    2646 
    2647 forall( dtype D ) _Atomic restrict volatile void
    2648         * cond( int, _Atomic restrict volatile D *,
    2649          _Atomic restrict volatile void * ),
    2650         * cond( int, _Atomic restrict volatile void *,
    2651          _Atomic restrict volatile D * );
    2652 
    2653 forall( dtype D ) const restrict volatile void
    2654         * cond( int, const restrict volatile D *,
    2655          const restrict volatile void * ),
    2656         * cond( int, const restrict volatile void *,
    2657          const restrict volatile D * );
    2658 
    2659 forall( dtype D ) _Atomic const restrict volatile void
    2660         * cond( int, _Atomic const restrict volatile D *,
    2661          _Atomic const restrict volatile void * ),
    2662         * cond( int, _Atomic const restrict volatile void *,
    2663          _Atomic const restrict volatile D * );
    2664 \end{lstlisting}
    2665 
    2666 \begin{rationale}
    2667 The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and
    2668 third operands have arithmetic type, and to combine the qualifiers of the second and third operands
    2669 if they are pointers.
     2125forall( dtype D ) _Atomic restrict volatile void * cond(
     2126        int, _Atomic restrict volatile D *, _Atomic restrict volatile void * ),
     2127        * cond( int, _Atomic restrict volatile void *, _Atomic restrict volatile D * );
     2128forall( dtype D ) const restrict volatile void * cond(
     2129        int, const restrict volatile D *, const restrict volatile void * ),
     2130        * cond( int, const restrict volatile void *, const restrict volatile D * );
     2131forall( dtype D ) _Atomic const restrict volatile void * cond(
     2132        int, _Atomic const restrict volatile D *, _Atomic const restrict volatile void * ),
     2133        * cond( int, _Atomic const restrict volatile void *, _Atomic const restrict volatile D * );
     2134\end{lstlisting}
     2135
     2136\begin{rationale}
     2137The 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.
    26702138\end{rationale}
    26712139
     
    26852153rand() ? cip : vip;
    26862154\end{lstlisting}
    2687 The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second
    2688 and third operands to add \lstinline$volatile$ and \lstinline$const$ qualifiers, respectively.
     2155The 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.
    26892156
    26902157\begin{lstlisting}
     
    27082175
    27092176\rewriterules
    2710 Let ``\(\leftarrow\)'' be any of the assignment operators. Then
     2177Let ``\(\leftarrow\)'' be any of the assignment operators.
     2178Then
    27112179\use{?=?}\use{?*=?}\use{?/=?}\use{?%=?}\use{?+=?}\use{?-=?}
    27122180\use{?>>=?}\use{?&=?}\use{?^=?}\use{?"|=?}%use{?<<=?}
     
    27162184
    27172185\semantics
    2718 Each interpretation of the left operand of an assignment expression is considered separately. For
    2719 each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class
    2720 specifier, the expression has one valid interpretation, with the type of the left operand. The
    2721 right operand is cast to that type, and the assignment expression is ambiguous if either operand is.
    2722 For the remaining interpretations, the expression is rewritten, and the interpretations of the
    2723 assignment expression are the interpretations of the corresponding function call. Finally, all
    2724 interpretations of the expression produced for the different interpretations of the left operand are
    2725 combined to produce the interpretations of the expression as a whole; where interpretations have
    2726 compatible result types, the best interpretations are selected in the manner described for function
    2727 call expressions.
     2186Each interpretation of the left operand of an assignment expression is considered separately.
     2187For 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.
     2188The right operand is cast to that type, and the assignment expression is ambiguous if either operand is.
     2189For the remaining interpretations, the expression is rewritten, and the interpretations of the assignment expression are the interpretations of the corresponding function call.
     2190Finally, 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;
     2191where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions.
    27282192
    27292193
     
    27902254        ?=?( volatile _Complex long double *, _Complex long double ),
    27912255        ?=?( _Atomic volatile _Complex long double *, _Atomic _Complex long double );
    2792 
    27932256forall( ftype FT ) FT
    27942257        * ?=?( FT * volatile *, FT * ),
    27952258        * ?=?( FT * volatile *, forall( ftype F ) F * );
    2796 
    27972259forall( ftype FT ) FT const
    27982260        * ?=?( FT const * volatile *, FT const * ),
    27992261        * ?=?( FT const * volatile *, forall( ftype F ) F * );
    2800 
    28012262forall( ftype FT ) FT volatile
    28022263        * ?=?( FT volatile * volatile *, FT * ),
    28032264        * ?=?( FT volatile * volatile *, forall( ftype F ) F * );
    2804 
    28052265forall( ftype FT ) FT const
    28062266        * ?=?( FT const volatile * volatile *, FT const * ),
    28072267        * ?=?( FT const volatile * volatile *, forall( ftype F ) F * );
    2808 
    28092268forall( dtype DT ) DT
    28102269        * ?=?( DT * restrict volatile *, DT * ),
     
    28142273        * ?=?( DT * _Atomic restrict volatile *, void * ),
    28152274        * ?=?( DT * _Atomic restrict volatile *, forall( dtype D ) D * );
    2816 
    28172275forall( dtype DT ) DT _Atomic
    28182276        * ?=?( _Atomic DT * restrict volatile *, DT _Atomic * ),
     
    28222280        * ?=?( _Atomic DT * _Atomic restrict volatile *, void * ),
    28232281        * ?=?( _Atomic DT * _Atomic restrict volatile *, forall( dtype D ) D * );
    2824 
    28252282forall( dtype DT ) DT const
    28262283        * ?=?( DT const * restrict volatile *, DT const * ),
     
    28302287        * ?=?( DT const * _Atomic restrict volatile *, void const * ),
    28312288        * ?=?( DT const * _Atomic restrict volatile *, forall( dtype D ) D * );
    2832 
    28332289forall( dtype DT ) DT restrict
    28342290        * ?=?( restrict DT * restrict volatile *, DT restrict * ),
     
    28382294        * ?=?( restrict DT * _Atomic restrict volatile *, void * ),
    28392295        * ?=?( restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * );
    2840 
    28412296forall( dtype DT ) DT volatile
    28422297        * ?=?( DT volatile * restrict volatile *, DT volatile * ),
     
    28462301        * ?=?( DT volatile * _Atomic restrict volatile *, void volatile * ),
    28472302        * ?=?( DT volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
    2848 
    28492303forall( dtype DT ) DT _Atomic const
    28502304        * ?=?( DT _Atomic const * restrict volatile *, DT _Atomic const * ),
     
    28542308        * ?=?( DT _Atomic const * _Atomic restrict volatile *, void const * ),
    28552309        * ?=?( DT _Atomic const * _Atomic restrict volatile *, forall( dtype D ) D * );
    2856 
    28572310forall( dtype DT ) DT _Atomic restrict
    28582311        * ?=?( _Atomic restrict DT * restrict volatile *, DT _Atomic restrict * ),
     
    28622315        * ?=?( _Atomic restrict DT * _Atomic restrict volatile *, void * ),
    28632316        * ?=?( _Atomic restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * );
    2864 
    28652317forall( dtype DT ) DT _Atomic volatile
    28662318        * ?=?( DT _Atomic volatile * restrict volatile *, DT _Atomic volatile * ),
     
    28702322        * ?=?( DT _Atomic volatile * _Atomic restrict volatile *, void volatile * ),
    28712323        * ?=?( DT _Atomic volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
    2872 
    28732324forall( dtype DT ) DT const restrict
    28742325        * ?=?( DT const restrict * restrict volatile *, DT const restrict * ),
     
    28782329        * ?=?( DT const restrict * _Atomic restrict volatile *, void const * ),
    28792330        * ?=?( DT const restrict * _Atomic restrict volatile *, forall( dtype D ) D * );
    2880 
    28812331forall( dtype DT ) DT const volatile
    28822332        * ?=?( DT const volatile * restrict volatile *, DT const volatile * ),
     
    28862336        * ?=?( DT const volatile * _Atomic restrict volatile *, void const volatile * ),
    28872337        * ?=?( DT const volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
    2888 
    28892338forall( dtype DT ) DT restrict volatile
    28902339        * ?=?( DT restrict volatile * restrict volatile *, DT restrict volatile * ),
     
    28942343        * ?=?( DT restrict volatile * _Atomic restrict volatile *, void volatile * ),
    28952344        * ?=?( DT restrict volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
    2896 
    28972345forall( dtype DT ) DT _Atomic const restrict
    28982346        * ?=?( DT _Atomic const restrict * restrict volatile *,
     
    29082356        * ?=?( DT _Atomic const restrict * _Atomic restrict volatile *,
    29092357         forall( dtype D ) D * );
    2910 
    29112358forall( dtype DT ) DT _Atomic const volatile
    29122359        * ?=?( DT _Atomic const volatile * restrict volatile *,
     
    29222369        * ?=?( DT _Atomic const volatile * _Atomic restrict volatile *,
    29232370         forall( dtype D ) D * );
    2924 
    29252371forall( dtype DT ) DT _Atomic restrict volatile
    29262372        * ?=?( DT _Atomic restrict volatile * restrict volatile *,
     
    29362382        * ?=?( DT _Atomic restrict volatile * _Atomic restrict volatile *,
    29372383         forall( dtype D ) D * );
    2938 
    29392384forall( dtype DT ) DT const restrict volatile
    29402385        * ?=?( DT const restrict volatile * restrict volatile *,
     
    29502395        * ?=?( DT const restrict volatile * _Atomic restrict volatile *,
    29512396         forall( dtype D ) D * );
    2952 
    29532397forall( dtype DT ) DT _Atomic const restrict volatile
    29542398        * ?=?( DT _Atomic const restrict volatile * restrict volatile *,
     
    29642408        * ?=?( DT _Atomic const restrict volatile * _Atomic restrict volatile *,
    29652409         forall( dtype D ) D * );
    2966 
    29672410forall( dtype DT ) void
    29682411        * ?=?( void * restrict volatile *, DT * );
    2969 
    29702412forall( dtype DT ) void const
    29712413        * ?=?( void const * restrict volatile *, DT const * );
    2972 
    29732414forall( dtype DT ) void volatile
    29742415        * ?=?( void volatile * restrict volatile *, DT volatile * );
    2975 
    29762416forall( dtype DT ) void const volatile
    29772417        * ?=?( void const volatile * restrict volatile *, DT const volatile * );
    29782418\end{lstlisting}
    29792419\begin{rationale}
    2980 The pattern of overloadings for simple assignment resembles that of pointer increment and decrement,
    2981 except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter,
    2982 instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete
    2983 type.
     2420The 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.
    29842421\end{rationale}
    29852422
     
    30062443
    30072444\semantics
    3008 The structure assignment functions provide member-wise assignment; each non-array member and each
    3009 element of each array member of the right argument is assigned to the corresponding member or
    3010 element of the left argument using the assignment function defined for its type. All other
    3011 assignment functions have the same effect as the corresponding C assignment expression.
    3012 \begin{rationale}
    3013 Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that
    3014 is, bitwise copy---even if some of the union members have programmer-defined assignment functions.
     2445The structure assignment functions provide member-wise assignment;
     2446each 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.
     2447All other assignment functions have the same effect as the corresponding C assignment expression.
     2448\begin{rationale}
     2449Note 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.
    30152450\end{rationale}
    30162451
     
    30252460        * ?+=?( T * _Atomic restrict volatile *, ptrdiff_t ),
    30262461        * ?-=?( T * _Atomic restrict volatile *, ptrdiff_t );
    3027 
    30282462forall( type T ) T _Atomic
    30292463        * ?+=?( T _Atomic * restrict volatile *, ptrdiff_t ),
     
    30312465        * ?+=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t ),
    30322466        * ?-=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t );
    3033 
    30342467forall( type T ) T const
    30352468        * ?+=?( T const * restrict volatile *, ptrdiff_t ),
     
    30372470        * ?+=?( T const * _Atomic restrict volatile *, ptrdiff_t ),
    30382471        * ?-=?( T const * _Atomic restrict volatile *, ptrdiff_t );
    3039 
    30402472forall( type T ) T restrict
    30412473        * ?+=?( T restrict * restrict volatile *, ptrdiff_t ),
     
    30432475        * ?+=?( T restrict * _Atomic restrict volatile *, ptrdiff_t ),
    30442476        * ?-=?( T restrict * _Atomic restrict volatile *, ptrdiff_t );
    3045 
    30462477forall( type T ) T volatile
    30472478        * ?+=?( T volatile * restrict volatile *, ptrdiff_t ),
     
    30492480        * ?+=?( T volatile * _Atomic restrict volatile *, ptrdiff_t ),
    30502481        * ?-=?( T volatile * _Atomic restrict volatile *, ptrdiff_t );
    3051 
    30522482forall( type T ) T _Atomic const
    30532483        * ?+=?( T _Atomic const restrict volatile *, ptrdiff_t ),
     
    30552485        * ?+=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t ),
    30562486        * ?-=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t );
    3057 
    30582487forall( type T ) T _Atomic restrict
    30592488        * ?+=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ),
     
    30612490        * ?+=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t ),
    30622491        * ?-=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t );
    3063 
    30642492forall( type T ) T _Atomic volatile
    30652493        * ?+=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ),
     
    30672495        * ?+=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t ),
    30682496        * ?-=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t );
    3069 
    30702497forall( type T ) T const restrict
    30712498        * ?+=?( T const restrict * restrict volatile *, ptrdiff_t ),
     
    30732500        * ?+=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t ),
    30742501        * ?-=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t );
    3075 
    30762502forall( type T ) T const volatile
    30772503        * ?+=?( T const volatile * restrict volatile *, ptrdiff_t ),
     
    30792505        * ?+=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t ),
    30802506        * ?-=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t );
    3081 
    30822507forall( type T ) T restrict volatile
    30832508        * ?+=?( T restrict volatile * restrict volatile *, ptrdiff_t ),
     
    30852510        * ?+=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
    30862511        * ?-=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
    3087 
    30882512forall( type T ) T _Atomic const restrict
    30892513        * ?+=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ),
     
    30912515        * ?+=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t ),
    30922516        * ?-=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t );
    3093 
    30942517forall( type T ) T _Atomic const volatile
    30952518        * ?+=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ),
     
    30972520        * ?+=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t ),
    30982521        * ?-=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t );
    3099 
    31002522forall( type T ) T _Atomic restrict volatile
    31012523        * ?+=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ),
     
    31032525        * ?+=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
    31042526        * ?-=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
    3105 
    31062527forall( type T ) T const restrict volatile
    31072528        * ?+=?( T const restrict volatile * restrict volatile *, ptrdiff_t ),
     
    31092530        * ?+=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
    31102531        * ?-=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
    3111 
    31122532forall( type T ) T _Atomic const restrict volatile
    31132533        * ?+=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ),
     
    33212741\semantics
    33222742In the comma expression ``\lstinline$a, b$'', the first operand is interpreted as
    3323 ``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}. The
    3324 interpretations of the expression are the interpretations of the second operand.
     2743``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}.
     2744The interpretations of the expression are the interpretations of the second operand.
    33252745
    33262746
     
    33372757
    33382758\constraints
    3339 If an identifier has \Index{no linkage}, there shall be no more than one declaration of the
    3340 identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the
    3341 same name space, except that:
     2759If 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:
    33422760\begin{itemize}
    3343 \item
    3344 a typedef name may be redefined to denote the same type as it currently does, provided that type is
    3345 not a variably modified type;
    3346 \item
    3347 tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard.
     2761\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;
     2762\item tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard.
    33482763\end{itemize}
    33492764\begin{rationale}
    3350 This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow
    3351 overloading.
    3352 \end{rationale}
    3353 
    3354 An identifier declared by a type declaration shall not be redeclared as a parameter in a function
    3355 definition whose declarator includes an identifier list.
    3356 \begin{rationale}
    3357 This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters. This
    3358 avoids an ambiguity between old-style function declarations and new-style function prototypes:
     2765This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow overloading.
     2766\end{rationale}
     2767
     2768An identifier declared by a type declaration shall not be redeclared as a parameter in a function definition whose declarator includes an identifier list.
     2769\begin{rationale}
     2770This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters.
     2771This avoids an ambiguity between old-style function declarations and new-style function prototypes:
    33592772\begin{lstlisting}
    33602773void f( Complex,        // ... 3000 characters ...
    33612774void g( Complex,        // ... 3000 characters ...
    3362 int Complex; { ... }
    3363 \end{lstlisting}
    3364 Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the
    3365 second.
     2775int Complex;
     2776{ ... }
     2777\end{lstlisting}
     2778Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the second.
    33662779\end{rationale}
    33672780
     
    33822795
    33832796\semantics
    3384 \CFA extends the {\c11} definition of \define{anonymous structure} to include structure
    3385 specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union
    3386 specifiers with tags.
     2797\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.
    33872798\begin{rationale}
    33882799This extension imitates an extension in the Plan 9 C compiler \cite{Thompson90new}.
     
    34012812cp.x = 0;
    34022813cp.color = RED;
    3403 
    34042814struct literal {@\impl{literal}@
    34052815        enum { NUMBER, STRING } tag;
    34062816        union {
    3407          double n;
    3408          char *s;
     2817                double n;
     2818                char *s;
    34092819        };
    34102820};
     
    34282838\begin{comment}
    34292839\constraints
    3430 If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier}
    3431 declares a structure or union tag, the types of the members of the structure or union shall not use
    3432 any of the type identifiers declared by the \nonterm{type-parameter-list}.
    3433 \begin{rationale}
    3434 This sort of declaration is illegal because the scope of the type identifiers ends at the end of the
    3435 declaration, but the scope of the structure tag does not.
    3436 \begin{lstlisting}
    3437 forall( type T ) struct Pair { T a, b; } mkPair( T, T ); // illegal
    3438 \end{lstlisting}
    3439 If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the
    3440 members' type be?
     2840If 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}.
     2841\begin{rationale}
     2842This 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.
     2843\begin{lstlisting}
     2844forall( type T ) struct Pair { T a, b;
     2845} mkPair( T, T ); // illegal
     2846\end{lstlisting}
     2847If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the members' type be?
    34412848\end{rationale}
    34422849\end{comment}
    34432850
    34442851\semantics
    3445 The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type
    3446 identifiers, function and object identifiers with \Index{no linkage}.
     2852The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type identifiers, function and object identifiers with \Index{no linkage}.
    34472853
    34482854If, in the declaration ``\lstinline$T D$'', \lstinline$T$ contains \nonterm{forall-specifier}s and
     
    34502856\begin{lstlisting}
    34512857D( @\normalsize\nonterm{parameter-type-list}@ )
    3452 \end{lstlisting}
    3453 then a type identifier declared by one of the \nonterm{forall-specifier}s is an \define{inferred
    3454 parameter} of the function declarator if and only if it is not an inferred parameter of a function
    3455 declarator in \lstinline$D$, and it is used in the type of a parameter in the following
     2858\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
    34562859\nonterm{type-parameter-list} or it and an inferred parameter are used as arguments of a
    3457 \Index{specification} in one of the \nonterm{forall-specifier}s. The identifiers declared by
    3458 assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s
    3459 of that function declarator.
     2860\Index{specification} in one of the \nonterm{forall-specifier}s.
     2861The identifiers declared by assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s of that function declarator.
    34602862
    34612863\begin{comment}
    34622864\begin{rationale}
    3463 Since every inferred parameter is used by some parameter, inference can be understood as a single
    3464 bottom-up pass over the expression tree, that only needs to apply local reasoning at each node.
     2865Since 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.
    34652866
    34662867If this restriction were lifted, it would be possible to write
    34672868\begin{lstlisting}
    3468 forall( type T ) T * alloc( void );@\use{alloc}@
    3469 int *p = alloc();
     2869forall( type T ) T * alloc( void );@\use{alloc}@ int *p = alloc();
    34702870\end{lstlisting}
    34712871Here \lstinline$alloc()$ would receive \lstinline$int$ as an inferred argument, and return an
    3472 \lstinline$int *$. In general, if a call to \lstinline$alloc()$ is a subexpression of an expression
    3473 involving polymorphic functions and overloaded identifiers, there could be considerable distance
    3474 between the call and the subexpression that causes \lstinline$T$ to be bound.
     2872\lstinline$int *$.
     2873In 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.
    34752874
    34762875With the current restriction, \lstinline$alloc()$ must be given an argument that determines
     
    34822881\end{comment}
    34832882
    3484 If a function declarator is part of a function definition, its inferred parameters and assertion
    3485 parameters have \Index{block scope}; otherwise, identifiers declared by assertions have a
     2883If a function declarator is part of a function definition, its inferred parameters and assertion parameters have \Index{block scope};
     2884otherwise, identifiers declared by assertions have a
    34862885\define{declaration scope}, which terminates at the end of the \nonterm{declaration}.
    34872886
    34882887A function type that has at least one inferred parameter is a \define{polymorphic function} type.
    3489 Function types with no inferred parameters are \define{monomorphic function} types. One function
    3490 type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the
    3491 same number of inferred parameters and fewer of its explicit parameters have types that depend on an
    3492 inferred parameter.
    3493 
    3494 The names of inferred parameters and the order of identifiers in forall specifiers are not relevant
    3495 to polymorphic function type compatibility. Let $f$ and $g$ be two polymorphic function types with
    3496 the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$
    3497 and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s. Let $f'$
    3498 be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$. Then $f$ and $g$ are
    3499 \Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if
    3500 for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same
    3501 identifier and compatible type, and vice versa.
     2888Function types with no inferred parameters are \define{monomorphic function} types.
     2889One 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.
     2890
     2891The names of inferred parameters and the order of identifiers in forall specifiers are not relevant to polymorphic function type compatibility.
     2892Let $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.
     2893Let $f'$ be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$.
     2894Then $f$ and $g$ are
     2895\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.
    35022896
    35032897\examples
     
    35132907forall( type T ) T (*pfT )( T ) = fT;
    35142908\end{lstlisting}
    3515 \lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not
    3516 polymorphic, but the function it points at is.
     2909\lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not polymorphic, but the function it points at is.
    35172910\begin{lstlisting}
    35182911int (*fvpfi( void ))( int ) {
     
    35232916}
    35242917\end{lstlisting}
    3525 \lstinline$fvpfi()$ and \lstinline$fvpfT()$ are functions taking no arguments and returning pointers
    3526 to functions. \lstinline$fvpfT()$ is monomorphic, but the function that its return value points
    3527 at is polymorphic.
     2918\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.
    35282919\begin{lstlisting}
    35292920forall( type T ) int ( *fTpfi( T ) )( int );
     
    35312922forall( type T, type U ) U ( *fTpfU( T ) )( U );
    35322923\end{lstlisting}
    3533 \lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function
    3534 taking an integer and returning an integer. It could return \lstinline$pfi$. \lstinline$fTpfT()$
    3535 is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning
    3536 \lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$. For instance,
    3537 in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and
    3538 the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and
     2924\lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function taking an integer and returning an integer.
     2925It could return \lstinline$pfi$. \lstinline$fTpfT()$ is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning
     2926\lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$.
     2927For 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
    35392928``\lstinline$fTpfT("yes")("no")$'' are legal, but ``\lstinline$fTpfT(17)("no")$'' is illegal.
    3540 \lstinline$fTpfU()$ is polymorphic ( in type \lstinline$T$), and returns a pointer to a function that
    3541 is polymorphic ( in type \lstinline$U$). ``\lstinline$f5(17)("no")$'' is a legal expression of type
     2929\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
    35422930\lstinline$char *$.
    35432931\begin{lstlisting}
     
    35452933forall( type U, type V, type W ) U * g( V *, U, W * const );
    35462934\end{lstlisting}
    3547 The functions \lstinline$f()$ and \lstinline$g()$ have compatible types. Let \(f\) and \(g\) be
    3548 their types; then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\)
    3549 = \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$. Replacing every \(f_i\)
    3550 by \(g_i\) in \(f\) gives
     2935The functions \lstinline$f()$ and \lstinline$g()$ have compatible types.
     2936Let \(f\) and \(g\) be their types;
     2937then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\)
     2938= \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$.
     2939Replacing every \(f_i\) by \(g_i\) in \(f\) gives
    35512940\begin{lstlisting}
    35522941forall( type V, type U, type W ) U * f( V *, U, W * const );
    3553 \end{lstlisting}
    3554 which has a return type and parameter list that is compatible with \(g\).
    3555 \begin{rationale}
    3556 The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave
    3557 room for inferred parameters of ordinary types in case parameterized types get added one day.
     2942\end{lstlisting} which has a return type and parameter list that is compatible with \(g\).
     2943\begin{rationale}
     2944The 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.
    35582945
    35592946Even without parameterized types, I might try to allow
    35602947\begin{lstlisting}
    35612948forall( int n ) int sum( int vector[n] );
    3562 \end{lstlisting}
    3563 but C currently rewrites array parameters as pointer parameters, so the effects of such a change
    3564 require more thought.
    3565 \end{rationale}
    3566 
    3567 \begin{rationale}
    3568 A polymorphic declaration must do two things: it must introduce type parameters, and it must apply
    3569 assertions to those types. Adding this to existing C declaration syntax and semantics was delicate,
    3570 and not entirely successful.
    3571 
    3572 C depends on declaration-before-use, so a forall specifier must introduce type names before they can
    3573 be used in the declaration specifiers. This could be done by making the forall specifier part of
    3574 the declaration specifiers, or by making it a new introductory clause of declarations.
    3575 
    3576 Assertions are also part of polymorphic function types, because it must be clear which functions
    3577 have access to the assertion parameters declared by the assertions. All attempts to put assertions
    3578 inside an introductory clause produced complex semantics and confusing code. Building them into the
    3579 declaration specifiers could be done by placing them in the function's parameter list, or in a
    3580 forall specifier that is a declaration specifier. Assertions are also used with type parameters of
    3581 specifications, and by type declarations. For consistency's sake it seems best to attach assertions
    3582 to the type declarations in forall specifiers, which means that forall specifiers must be
    3583 declaration specifiers.
     2949\end{lstlisting} but C currently rewrites array parameters as pointer parameters, so the effects of such a change require more thought.
     2950\end{rationale}
     2951
     2952\begin{rationale}
     2953A polymorphic declaration must do two things: it must introduce type parameters, and it must apply assertions to those types.
     2954Adding this to existing C declaration syntax and semantics was delicate, and not entirely successful.
     2955
     2956C depends on declaration-before-use, so a forall specifier must introduce type names before they can be used in the declaration specifiers.
     2957This could be done by making the forall specifier part of the declaration specifiers, or by making it a new introductory clause of declarations.
     2958
     2959Assertions are also part of polymorphic function types, because it must be clear which functions have access to the assertion parameters declared by the assertions.
     2960All attempts to put assertions inside an introductory clause produced complex semantics and confusing code.
     2961Building 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.
     2962Assertions are also used with type parameters of specifications, and by type declarations.
     2963For 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.
    35842964\end{rationale}
    35852965%HERE
     
    35952975
    35962976\constraints
    3597 \lstinline$restrict$\index{register@{\lstinline$restrict$}} Types other than type parameters and
    3598 pointer types whose referenced type is an object type shall not be restrict-qualified.
     2977\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.
    35992978
    36002979\semantics
    3601 An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not
    3602 establish any special semantics in that case.
    3603 
    3604 \begin{rationale}
    3605 \CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be
    3606 passed to polymorphic functions.
    3607 \end{rationale}
    3608 
    3609 \lstinline$lvalue$ may be used to qualify the return type of a function type. Let \lstinline$T$ be
    3610 an unqualified version of a type; then the result of calling a function with return type
     2980An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not establish any special semantics in that case.
     2981
     2982\begin{rationale}
     2983\CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be passed to polymorphic functions.
     2984\end{rationale}
     2985
     2986\lstinline$lvalue$ may be used to qualify the return type of a function type.
     2987Let \lstinline$T$ be an unqualified version of a type;
     2988then the result of calling a function with return type
    36112989\lstinline$lvalue T$ is a \Index{modifiable lvalue} of type \lstinline$T$.
    3612 \lstinline$const$\use{const} and \lstinline$volatile$\use{volatile} qualifiers may also be added to
    3613 indicate that the function result is a constant or volatile lvalue.
    3614 \begin{rationale}
    3615 The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the
    3616 return type of a function if the \lstinline$lvalue$ qualifier is also used.
    3617 \end{rationale}
    3618 
    3619 An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue; the
    3620 result of the expression is an lvalue.
    3621 
    3622 \begin{rationale}
    3623 \lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to
    3624 object of type \lstinline$T$) type. Reference types have four uses in {\CC}.
     2990\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.
     2991\begin{rationale}
     2992The \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.
     2993\end{rationale}
     2994
     2995An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue;
     2996the result of the expression is an lvalue.
     2997
     2998\begin{rationale}
     2999\lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to object of type \lstinline$T$) type.
     3000Reference types have four uses in {\CC}.
    36253001\begin{itemize}
    36263002\item
     
    36293005
    36303006\item
    3631 A reference can be used to define an alias for a complicated lvalue expression, as a way of getting
    3632 some of the functionality of the Pascal \lstinline$with$ statement. The following {\CC} code gives
    3633 an example.
     3007A 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.
     3008The following {\CC} code gives an example.
    36343009\begin{lstlisting}
    36353010{
     
    36413016
    36423017\item
    3643 A reference parameter can be used to allow a function to modify an argument without forcing the
    3644 caller to pass the address of the argument. This is most useful for user-defined assignment
    3645 operators. In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and
    3646 the two expressions
     3018A reference parameter can be used to allow a function to modify an argument without forcing the caller to pass the address of the argument.
     3019This is most useful for user-defined assignment operators.
     3020In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and the two expressions
    36473021\begin{lstlisting}
    36483022a = b;
    36493023operator=( a, b );
    3650 \end{lstlisting}
    3651 are equivalent. If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first
    3652 parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''. It cannot have type
     3024\end{lstlisting} are equivalent.
     3025If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''.
     3026It cannot have type
    36533027\lstinline$T$, because then assignment couldn't alter the variable, and it can't have type
    36543028``\lstinline$T *$'', because the assignment would have to be written ``\lstinline$&a = b;$''.
    36553029
    3656 In the case of user-defined operators, this could just as well be handled by using pointer types and
    3657 by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to
    3658 ``\lstinline$operator=(&( a), b )$''. Reference parameters of ``normal'' functions are Bad Things,
    3659 because they remove a useful property of C function calls: an argument can only be modified by a
    3660 function if it is preceded by ``\lstinline$&$''.
     3030In 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
     3031``\lstinline$operator=(&( a), b )$''.
     3032Reference 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$&$''.
    36613033
    36623034\item
     
    36683040void fiddle( const Thing & );
    36693041\end{lstlisting}
    3670 If the second form is used, then constructors and destructors are not invoked to create a temporary
    3671 variable at the call site ( and it is bad style for the caller to make any assumptions about such
    3672 things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by
    3673 aliases. The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too
    3674 large or their constructors or destructors are too expensive. An implementation may switch between
    3675 them without causing trouble for well-behaved clients. This leaves the implementor to define ``too
    3676 large'' and ``too expensive''.
     3042If 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.
     3043The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too large or their constructors or destructors are too expensive.
     3044An implementation may switch between them without causing trouble for well-behaved clients.
     3045This leaves the implementor to define ``too large'' and ``too expensive''.
    36773046
    36783047I propose to push this job onto the compiler by allowing it to implement
    36793048\begin{lstlisting}
    36803049void fiddle( const volatile Thing );
    3681 \end{lstlisting}
    3682 with call-by-reference. Since it knows all about the size of \lstinline$Thing$s and the parameter
    3683 passing mechanism, it should be able to come up with a better definition of ``too large'', and may
    3684 be able to make a good guess at ``too expensive''.
     3050\end{lstlisting} with call-by-reference.
     3051Since 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''.
    36853052\end{itemize}
    36863053
    3687 In summary, since references are only really necessary for returning lvalues, I'll only provide
    3688 lvalue functions.
     3054In summary, since references are only really necessary for returning lvalues, I'll only provide lvalue functions.
    36893055\end{rationale}
    36903056
     
    36933059\subsection{Initialization}
    36943060
    3695 An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the
    3696 object being initialized. An expression used in an \nonterm{initializer-list} is treated as being
    3697 cast to the type of the aggregate member that it initializes. In either case the cast must have a
    3698 single unambiguous \Index{interpretation}.
     3061An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the object being initialized.
     3062An expression used in an \nonterm{initializer-list} is treated as being cast to the type of the aggregate member that it initializes.
     3063In either case the cast must have a single unambiguous \Index{interpretation}.
    36993064
    37003065
     
    37173082\end{syntax}
    37183083\begin{rationale}
    3719 The declarations allowed in a specification are much the same as those allowed in a structure,
    3720 except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed.
     3084The 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.
    37213085\end{rationale}
    37223086
    37233087\semantics
    3724 A \define{specification definition} defines a name for a \define{specification}: a parameterized
    3725 collection of object and function declarations.
     3088A \define{specification definition} defines a name for a \define{specification}: a parameterized collection of object and function declarations.
    37263089
    37273090The declarations in a specification consist of the declarations in the
    37283091\nonterm{spec-declaration-list} and declarations produced by any assertions in the
    3729 \nonterm{spec-parameter-list}. If the collection contains two declarations that declare the same
    3730 identifier and have compatible types, they are combined into one declaration with the composite type
    3731 constructed from the two types.
     3092\nonterm{spec-parameter-list}.
     3093If 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.
    37323094
    37333095
     
    37473109
    37483110\constraints
    3749 The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name
    3750 of a specification. The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for
    3751 each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}. If the
    3752 \nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type
    3753 name of an \Index{object type}; if it uses \lstinline$dtype$, the argument shall be the type name of
    3754 an object type or an \Index{incomplete type}; and if it uses \lstinline$ftype$, the argument shall
    3755 be the type name of a \Index{function type}.
     3111The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name of a specification.
     3112The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}.
     3113If the
     3114\nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type name of an \Index{object type};
     3115if it uses \lstinline$dtype$, the argument shall be the type name of an object type or an \Index{incomplete type};
     3116and if it uses \lstinline$ftype$, the argument shall be the type name of a \Index{function type}.
    37563117
    37573118\semantics
     
    37593120\define{assertion parameters}.
    37603121
    3761 The assertion parameters produced by an assertion that applies the name of a specification to type
    3762 arguments are found by taking the declarations specified in the specification and treating each of
    3763 the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument.
    3764 
    3765 The collection of assertion parameters produced by the \nonterm{assertion-list} are found by
    3766 combining the declarations produced by each assertion. If the collection contains two declarations
    3767 that declare the same identifier and have compatible types, they are combined into one declaration
    3768 with the \Index{composite type} constructed from the two types.
     3122The 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.
     3123
     3124The collection of assertion parameters produced by the \nonterm{assertion-list} are found by combining the declarations produced by each assertion.
     3125If 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.
    37693126
    37703127\examples
     
    37743131        return val + val;
    37753132}
    3776 
    37773133context summable( type T ) {@\impl{summable}@
    37783134        T ?+=?( T *, T );@\use{?+=?}@
     
    37883144context sum_list( type List, type Element | summable( Element ) | list_of( List, Element ) ) {};
    37893145\end{lstlisting}
    3790 \lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added
    3791 up. The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion
    3792 parameters
     3146\lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added up.
     3147The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion parameters
    37933148\begin{lstlisting}
    37943149int ?+=?( int *, int );
     
    38253180
    38263181\constraints
    3827 If a type declaration has block scope, and the declared identifier has external or internal linkage,
    3828 the declaration shall have no initializer for the identifier.
     3182If a type declaration has block scope, and the declared identifier has external or internal linkage, the declaration shall have no initializer for the identifier.
    38293183
    38303184\semantics
    3831 A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type
    3832 name} for a type incompatible with all other types.
    3833 
    3834 An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}. Identifiers declared
    3835 with type-class \lstinline$type$\use{type} are \Index{object type}s; those declared with type-class
    3836 \lstinline$dtype$\use{dtype} are \Index{incomplete type}s; and those declared with type-class
    3837 \lstinline$ftype$\use{ftype} are \Index{function type}s. The identifier has \Index{block scope} that
    3838 terminates at the end of the \nonterm{spec-declaration-list} or polymorphic function that contains
    3839 the \nonterm{type-parameter}.
    3840 
    3841 A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}.  The declared
    3842 identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after
    3843 the end of the initializer. The type in the initializer is called the \define{implementation
    3844   type}. Within the scope of the declaration, \Index{implicit conversion}s can be performed between
    3845 the defined type and the implementation type, and between pointers to the defined type and pointers
    3846 to the implementation type.
    3847 
    3848 A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or
    3849 with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}. If a
    3850 \Index{translation unit} or \Index{block} contains one or more such declarations for an identifier,
    3851 it must contain exactly one definition of the identifier ( but not in an enclosed block, which would
    3852 define a new type known only within that block).
     3185A \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.
     3186
     3187An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}.
     3188Identifiers declared with type-class \lstinline$type$\use{type} are \Index{object type}s;
     3189those declared with type-class
     3190\lstinline$dtype$\use{dtype} are \Index{incomplete type}s;
     3191and those declared with type-class
     3192\lstinline$ftype$\use{ftype} are \Index{function type}s.
     3193The 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}.
     3194
     3195A \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.
     3196The type in the initializer is called the \define{implementation
     3197  type}.
     3198Within 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.
     3199
     3200A 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}.
     3201If a
     3202\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).
    38533203\begin{rationale}
    38543204Incomplete type declarations allow compact mutually-recursive types.
    38553205\begin{lstlisting}
    3856 type t1; // Incomplete type declaration.
     3206type t1; // incomplete type declaration
    38573207type t2 = struct { t1 * p; ... };
    38583208type t1 = struct { t2 * p; ... };
    38593209\end{lstlisting}
    3860 Without them, mutual recursion could be handled by declaring mutually recursive structures, then
    3861 initializing the types to those structures.
     3210Without them, mutual recursion could be handled by declaring mutually recursive structures, then initializing the types to those structures.
    38623211\begin{lstlisting}
    38633212struct s1;
     
    38653214type t1 = struct s1 { struct s2 * p; ... };
    38663215\end{lstlisting}
    3867 This introduces extra names, and may force the programmer to cast between the types and their
    3868 implementations.
     3216This introduces extra names, and may force the programmer to cast between the types and their implementations.
    38693217\end{rationale}
    38703218
    38713219A type declaration without an initializer and with \Index{storage-class specifier}
    3872 \lstinline$extern$\use{extern} is an \define{opaque type declaration}. Opaque types are
    3873 \Index{object type}s. An opaque type is not a \nonterm{constant-expression}; neither is a structure
    3874 or union that has a member whose type is not a \nonterm{constant-expression}.  Every other
    3875 \Index{object type} is a \nonterm{constant-expression}. Objects with static storage duration shall
    3876 be declared with a type that is a \nonterm{constant-expression}.
    3877 \begin{rationale}
    3878 Type declarations can declare identifiers with external linkage, whereas typedef declarations
    3879 declare identifiers that only exist within a translation unit. These opaque types can be used in
    3880 declarations, but the implementation of the type is not visible.
    3881 
    3882 Static objects can not have opaque types because space for them would have to be allocated at
    3883 program start-up. This is a deficiency\index{deficiencies!static opaque objects}, but I don't want
    3884 to deal with ``module initialization'' code just now.
    3885 \end{rationale}
    3886 
    3887 An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a
    3888 value of \Index{type-class} \lstinline$dtype$. An object type\index{object types} which is not a
    3889 qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$. A
     3220\lstinline$extern$\use{extern} is an \define{opaque type declaration}.
     3221Opaque types are
     3222\Index{object type}s.
     3223An opaque type is not a \nonterm{constant-expression};
     3224neither is a structure or union that has a member whose type is not a \nonterm{constant-expression}.  Every other
     3225\Index{object type} is a \nonterm{constant-expression}.
     3226Objects with static storage duration shall be declared with a type that is a \nonterm{constant-expression}.
     3227\begin{rationale}
     3228Type declarations can declare identifiers with external linkage, whereas typedef declarations declare identifiers that only exist within a translation unit.
     3229These opaque types can be used in declarations, but the implementation of the type is not visible.
     3230
     3231Static objects can not have opaque types because space for them would have to be allocated at program start-up.
     3232This is a deficiency\index{deficiencies!static opaque objects}, but I don't want to deal with ``module initialization'' code just now.
     3233\end{rationale}
     3234
     3235An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a value of \Index{type-class} \lstinline$dtype$.
     3236An 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$.
     3237A
    38903238\Index{function type} is a value of type-class \lstinline$ftype$.
    38913239\begin{rationale}
    3892 Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which
    3893 omits the identifier being declared.
    3894 
    3895 Object types are precisely the types that can be instantiated. Type qualifiers are not included in
    3896 type values because the compiler needs the information they provide at compile time to detect
    3897 illegal statements or to produce efficient machine instructions. For instance, the code that a
    3898 compiler must generate to manipulate an object that has volatile-qualified type may be different
    3899 from the code to manipulate an ordinary object.
    3900 
    3901 Type qualifiers are a weak point of C's type system. Consider the standard library function
    3902 \lstinline$strchr()$ which, given a string and a character, returns a pointer to the first
    3903 occurrence of the character in the string.
     3240Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which omits the identifier being declared.
     3241
     3242Object types are precisely the types that can be instantiated.
     3243Type 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.
     3244For 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.
     3245
     3246Type qualifiers are a weak point of C's type system.
     3247Consider the standard library function
     3248\lstinline$strchr()$ which, given a string and a character, returns a pointer to the first occurrence of the character in the string.
    39043249\begin{lstlisting}
    39053250char *strchr( const char *s, int c ) {@\impl{strchr}@
    39063251        char real_c = c; // done because c was declared as int.
    39073252        for ( ; *s != real_c; s++ )
    3908          if ( *s == '\0' ) return NULL;
     3253                if ( *s == '\0' ) return NULL;
    39093254        return ( char * )s;
    39103255}
    39113256\end{lstlisting}
    3912 The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be
    3913 used to search a constant string, but the return type must be \lstinline$char *$, because the result
    3914 might be used to modify a non-constant string. Hence the body must perform a cast, and ( even worse)
    3915 \lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings. What is needed
    3916 is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has
    3917 exactly the same qualifiers. Polymorphic functions do not provide a fix for this
    3918 deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of
    3919 type values. Instead, overloading can be used to define \lstinline$strchr()$ for each combination
    3920 of qualifiers.
    3921 \end{rationale}
    3922 
    3923 \begin{rationale}
    3924 Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a
    3925 type declaration, or as the type of a structure or union member. This prevents the declaration of
    3926 types that contain each other.
     3257The 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.
     3258Hence the body must perform a cast, and ( even worse)
     3259\lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings.
     3260What is needed is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has exactly the same qualifiers.
     3261Polymorphic functions do not provide a fix for this deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of type values.
     3262Instead, overloading can be used to define \lstinline$strchr()$ for each combination of qualifiers.
     3263\end{rationale}
     3264
     3265\begin{rationale}
     3266Since \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.
     3267This prevents the declaration of types that contain each other.
    39273268\begin{lstlisting}
    39283269type t1;
    3929 type t2 = t1; // illegal: incomplete type t1.
     3270type t2 = t1; // illegal: incomplete type t1
    39303271type t1 = t2;
    39313272\end{lstlisting}
    39323273
    3933 The initializer in a file-scope declaration must be a constant expression. This means type
    3934 declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque
     3274The initializer in a file-scope declaration must be a constant expression.
     3275This means type declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque
    39353276 types}.
    39363277\begin{lstlisting}
    3937 extern type Huge; // extended-precision integer type.
     3278extern type Huge; // extended-precision integer type
    39383279type Rational = struct {
    39393280        Huge numerator, denominator;    // illegal
     
    39443285\end{lstlisting}
    39453286Without this restriction, \CFA might require ``module initialization'' code ( since
    3946 \lstinline$Rational$ has external linkage, it must be created before any other translation unit
    3947 instantiates it), and would force an ordering on the initialization of the translation unit that
    3948 defines \lstinline$Huge$ and the translation that declares \lstinline$Rational$.
    3949 
    3950 A benefit of the restriction is that it prevents the declaration in separate translation units of
    3951 types that contain each other, which would be hard to prevent otherwise.
     3287\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$.
     3288
     3289A 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.
    39523290\begin{lstlisting}
    39533291//  File a.c:
     
    39623300\begin{rationale}
    39633301Since a \nonterm{type-declaration} is a \nonterm{declaration} and not a
    3964 \nonterm{struct-declaration}, type declarations can not be structure members. The form of
     3302\nonterm{struct-declaration}, type declarations can not be structure members.
     3303The form of
    39653304\nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline$type$.
    3966 Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued
    3967 expressions. It also side-steps the problem of type-valued expressions producing different values
    3968 in different declarations.
    3969 
    3970 Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit
    3971 type parameters. This may be too restrictive, but it attempts to make compilation simpler. Recall
    3972 that when traditional C scanners read in an identifier, they look it up in the symbol table to
    3973 determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token
    3974 depending on what they find. A type parameter would add a type name to the current scope. The
    3975 scope manipulations involved in parsing the declaration of a function that takes function pointer
    3976 parameters and returns a function pointer may just be too complicated.
    3977 
    3978 Explicit type parameters don't seem to be very useful, anyway, because their scope would not include
    3979 the return type of the function. Consider the following attempt to define a type-safe memory
    3980 allocation function.
     3305Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued expressions.
     3306It also side-steps the problem of type-valued expressions producing different values in different declarations.
     3307
     3308Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit type parameters.
     3309This may be too restrictive, but it attempts to make compilation simpler.
     3310Recall 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.
     3311A type parameter would add a type name to the current scope.
     3312The 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.
     3313
     3314Explicit type parameters don't seem to be very useful, anyway, because their scope would not include the return type of the function.
     3315Consider the following attempt to define a type-safe memory allocation function.
    39813316\begin{lstlisting}
    39823317#include <stdlib.h>
    39833318T * new( type T ) { return ( T * )malloc( sizeof( T) ); };
    3984 @\ldots@
    3985 int * ip = new( int );
    3986 \end{lstlisting}
    3987 This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the
    3988 function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the
    3989 meaning of \lstinline$T$ in the scope that contains \lstinline$new$; it could be undefined, or a
    3990 type name, or a function or variable name. Nothing good can result from such a situation.
     3319@\ldots@ int * ip = new( int );
     3320\end{lstlisting}
     3321This 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$;
     3322it could be undefined, or a type name, or a function or variable name.
     3323Nothing good can result from such a situation.
    39913324\end{rationale}
    39923325
     
    40033336f2( v2 );
    40043337\end{lstlisting}
    4005 \lstinline$V1$ is passed by value, so \lstinline$f1()$'s assignment to \lstinline$a[0]$ does not
    4006 modify v1.  \lstinline$V2$ is converted to a pointer, so \lstinline$f2()$ modifies
    4007 \lstinline$v2[0]$.
     3338\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]$.
    40083339
    40093340A translation unit containing the declarations
    40103341\begin{lstlisting}
    4011 extern type Complex;@\use{Complex}@ // opaque type declaration.
     3342extern type Complex;@\use{Complex}@ // opaque type declaration
    40123343extern float abs( Complex );@\use{abs}@
    4013 \end{lstlisting}
    4014 can contain declarations of complex numbers, which can be passed to \lstinline$abs$. Some other
    4015 translation unit must implement \lstinline$Complex$ and \lstinline$abs$. That unit might contain
    4016 the declarations
     3344\end{lstlisting} can contain declarations of complex numbers, which can be passed to \lstinline$abs$.
     3345Some other translation unit must implement \lstinline$Complex$ and \lstinline$abs$.
     3346That unit might contain the declarations
    40173347\begin{lstlisting}
    40183348type Complex = struct { float re, im; };@\impl{Complex}@
     
    40223352}
    40233353\end{lstlisting}
    4024 Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can
    4025 be retrieved.
     3354Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can be retrieved.
    40263355
    40273356\begin{lstlisting}
     
    40343363
    40353364\begin{rationale}
    4036 Within the scope of a type definition, an instance of the type can be viewed as having that type or
    4037 as having the implementation type. In the \lstinline$Time_of_day$ example, the difference is
    4038 important. Different languages have treated the distinction between the abstraction and the
    4039 implementation in different ways.
     3365Within the scope of a type definition, an instance of the type can be viewed as having that type or as having the implementation type.
     3366In the \lstinline$Time_of_day$ example, the difference is important.
     3367Different languages have treated the distinction between the abstraction and the implementation in different ways.
    40403368\begin{itemize}
    40413369\item
    4042 Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies. Two
    4043 primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views.
    4044 \item
    4045 The Simula class \cite{Simula87} is essentially a record type. Since the only operations on a
    4046 record are member selection and assignment, which can not be overloaded, there is never any
    4047 ambiguity as to whether the abstraction or the implementation view is being used. In {\CC}
    4048 \cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be
    4049 overloaded. A ``scope resolution'' operator can be used inside the class to specify whether the
    4050 abstract or implementation version of the operation should be used.
    4051 \item
    4052 An Ada derived type definition \cite{ada} creates a new type from an old type, and also implicitly
    4053 declares derived subprograms that correspond to the existing subprograms that use the old type as a
    4054 parameter type or result type. The derived subprograms are clones of the existing subprograms with
    4055 the old type replaced by the derived type. Literals and aggregates of the old type are also cloned.
     3370Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies.
     3371Two primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views.
     3372\item
     3373The Simula class \cite{Simula87} is essentially a record type.
     3374Since 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.
     3375In {\CC}
     3376\cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be overloaded.
     3377A ``scope resolution'' operator can be used inside the class to specify whether the abstract or implementation version of the operation should be used.
     3378\item
     3379An 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.
     3380The derived subprograms are clones of the existing subprograms with the old type replaced by the derived type.
     3381Literals and aggregates of the old type are also cloned.
    40563382In other words, the abstract view provides exactly the same operations as the implementation view.
    40573383This allows the abstract view to be used in all cases.
    40583384
    4059 The derived subprograms can be replaced by programmer-specified subprograms. This is an exception
    4060 to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope. In this
    4061 case, explicit conversions between the derived type and the old type can be used.
     3385The derived subprograms can be replaced by programmer-specified subprograms.
     3386This is an exception to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope.
     3387In this case, explicit conversions between the derived type and the old type can be used.
    40623388\end{itemize}
    4063 \CFA's rules are like Clu's, except that implicit conversions and
    4064 conversion costs allow it to do away with most uses of \lstinline$up$ and \lstinline$down$.
     3389\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$.
    40653390\end{rationale}
    40663391
     
    40703395A declaration\index{type declaration} of a type identifier \lstinline$T$ with type-class
    40713396\lstinline$type$ implicitly declares a \define{default assignment} function
    4072 \lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the
    4073 identifier \lstinline$T$.
    4074 \begin{rationale}
    4075 Assignment is central to C's imperative programming style, and every existing C object type has
    4076 assignment defined for it ( except for array types, which are treated as pointer types for purposes
    4077 of assignment). Without this rule, nearly every inferred type parameter would need an accompanying
    4078 assignment assertion parameter. If a type parameter should not have an assignment operation,
    4079 \lstinline$dtype$ should be used. If a type should not have assignment defined, the user can define
    4080 an assignment function that causes a run-time error, or provide an external declaration but no
    4081 definition and thus cause a link-time error.
    4082 \end{rationale}
    4083 
    4084 A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation
    4085 type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment
    4086 function. A definition\index{type definition} of a type identifier \lstinline$T$ with implementation
    4087 type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and
    4088 \define{default object}s as declared by the assertion declarations. The default objects and
    4089 functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. Their
    4090 values are determined as follows:
     3397\lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$.
     3398\begin{rationale}
     3399Assignment 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).
     3400Without this rule, nearly every inferred type parameter would need an accompanying assignment assertion parameter.
     3401If a type parameter should not have an assignment operation,
     3402\lstinline$dtype$ should be used.
     3403If 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.
     3404\end{rationale}
     3405
     3406A 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.
     3407A 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
     3408\define{default object}s as declared by the assertion declarations.
     3409The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$.
     3410Their values are determined as follows:
    40913411\begin{itemize}
    40923412\item
    4093 If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name
    4094 as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced
    4095 by \lstinline$T$ is compatible with the type of the default object, then the default object is
    4096 initialized with that object. Otherwise the scope of the declaration of \lstinline$T$ must contain
    4097 a definition of the default object.
     3413If 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.
     3414Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default object.
    40983415
    40993416\item
    4100 If at the definition of \lstinline$T$ there is visible a declaration of a function with the same
    4101 name as the default function, and if the type of that function with all occurrence of \lstinline$I$
    4102 replaced by \lstinline$T$ is compatible with the type of the default function, then the default
    4103 function calls that function after converting its arguments and returns the converted result.
    4104 
    4105 Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that
    4106 at the definition of \lstinline$T$ there is visible a declaration of a function with the same name
    4107 as the default function, and the type of that function with all occurrences of the anonymous
    4108 member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the
    4109 default function, then the default function calls that function after converting its arguments and
    4110 returns the result.
    4111 
    4112 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default
    4113 function.
     3417If 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.
     3418
     3419Otherwise, 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.
     3420
     3421Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default function.
    41143422\end{itemize}
    41153423\begin{rationale}
    4116 Note that a pointer to a default function will not compare as equal to a pointer to the inherited
    4117 function.
    4118 \end{rationale}
    4119 
    4120 A function or object with the same type and name as a default function or object that is declared
    4121 within the scope of the definition of \lstinline$T$ replaces the default function or object.
     3424Note that a pointer to a default function will not compare as equal to a pointer to the inherited function.
     3425\end{rationale}
     3426
     3427A 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.
    41223428
    41233429\examples
     
    41253431context s( type T ) {
    41263432        T a, b;
    4127 }
    4128 struct impl { int left, right; } a = { 0, 0 };
     3433} struct impl { int left, right; } a = { 0, 0 };
    41293434type Pair | s( Pair ) = struct impl;
    41303435Pair b = { 1, 1 };
    41313436\end{lstlisting}
    41323437The definition of \lstinline$Pair$ implicitly defines two objects \lstinline$a$ and \lstinline$b$.
    4133 \lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$. The definition of
    4134 \lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value
    4135 from.
     3438\lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$.
     3439The definition of
     3440\lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value from.
    41363441\begin{lstlisting}
    41373442context ss( type T ) {
     
    41523457void munge( Doodad * );
    41533458\end{lstlisting}
    4154 The assignment function inherits \lstinline$struct doodad$'s assignment function because the types
    4155 match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout.
     3459The assignment function inherits \lstinline$struct doodad$'s assignment function because the types match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout.
    41563460\lstinline$munge()$ inherits \lstinline$Whatsit$'s \lstinline$munge()$ because the types match when
    4157 \lstinline$Whatsit$ is replaced by \lstinline$Doodad$ in the parameter list. \lstinline$clone()$
    4158 does \emph{not} inherit \lstinline$Whatsit$'s \lstinline$clone()$: replacement in the parameter
    4159 list yields ``\lstinline$Whatsit clone( Doodad )$'', which is not compatible with
    4160 \lstinline$Doodad$'s \lstinline$clone()$'s type. Hence the definition of
     3461\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
     3462\lstinline$Doodad$'s \lstinline$clone()$'s type.
     3463Hence the definition of
    41613464``\lstinline$Doodad clone( Doodad )$'' is necessary.
    41623465
     
    41733476
    41743477\begin{rationale}
    4175 The \emph{class} construct of object-oriented programming languages performs three independent
    4176 functions. It \emph{encapsulates} a data structure; it defines a \emph{subtype} relationship, whereby
    4177 instances of one class may be used in contexts that require instances of another; and it allows one
    4178 class to \emph{inherit} the implementation of another.
    4179 
    4180 In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided
    4181 by specifications and assertions. Inheritance is provided by default functions and objects.
     3478The \emph{class} construct of object-oriented programming languages performs three independent functions.
     3479It \emph{encapsulates} a data structure;
     3480it defines a \emph{subtype} relationship, whereby instances of one class may be used in contexts that require instances of another;
     3481and it allows one class to \emph{inherit} the implementation of another.
     3482
     3483In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided by specifications and assertions.
     3484Inheritance is provided by default functions and objects.
    41823485\end{rationale}
    41833486
     
    41903493\end{syntax}
    41913494
    4192 Many statements contain expressions, which may have more than one interpretation. The following
    4193 sections describe how the \CFA translator selects an interpretation. In all cases the result of the
    4194 selection shall be a single unambiguous \Index{interpretation}.
     3495Many statements contain expressions, which may have more than one interpretation.
     3496The following sections describe how the \CFA translator selects an interpretation.
     3497In all cases the result of the selection shall be a single unambiguous \Index{interpretation}.
    41953498
    41963499
     
    42393542switch ( E ) ...
    42403543choose ( E ) ...
    4241 \end{lstlisting}
    4242 may have more than one interpretation, but it shall have only one interpretation with an integral type.
     3544\end{lstlisting} may have more than one interpretation, but it shall have only one interpretation with an integral type.
    42433545An \Index{integer promotion} is performed on the expression if necessary.
    42443546The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type.
     
    42843586while ( E ) ...
    42853587do ... while ( E );
    4286 \end{lstlisting}
    4287 is treated as ``\lstinline$( int )((E)!=0)$''.
     3588\end{lstlisting} is treated as ``\lstinline$( int )((E)!=0)$''.
    42883589
    42893590The statement
    42903591\begin{lstlisting}
    42913592for ( a; b; c ) @\ldots@
    4292 \end{lstlisting}
    4293 is treated as
     3593\end{lstlisting} is treated as
    42943594\begin{lstlisting}
    42953595for ( ( void )( a ); ( int )(( b )!=0); ( void )( c ) ) ...
     
    44133713
    44143714The implementation shall define the macro names \lstinline$__LINE__$, \lstinline$__FILE__$,
    4415 \lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard. It shall not define the
    4416 macro name \lstinline$__STDC__$.
    4417 
    4418 In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the
    4419 decimal constant 1.
     3715\lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard.
     3716It shall not define the macro name \lstinline$__STDC__$.
     3717
     3718In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the decimal constant 1.
    44203719
    44213720
     
    44273726
    44283727\section{C types}
    4429 This section gives example specifications for some groups of types that are important in the C
    4430 language, in terms of the predefined operations that can be applied to those types.
     3728This 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.
    44313729
    44323730
    44333731\subsection{Scalar, arithmetic, and integral types}
    44343732
    4435 The pointer, integral, and floating-point types are all \define{scalar types}. All of these types
    4436 can be logically negated and compared. The assertion ``\lstinline$scalar( Complex )$'' should be read
    4437 as ``type \lstinline$Complex$ is scalar''.
     3733The pointer, integral, and floating-point types are all \define{scalar types}.
     3734All of these types can be logically negated and compared.
     3735The assertion ``\lstinline$scalar( Complex )$'' should be read as ``type \lstinline$Complex$ is scalar''.
    44383736\begin{lstlisting}
    44393737context scalar( type T ) {@\impl{scalar}@
     
    44433741\end{lstlisting}
    44443742
    4445 The integral and floating-point types are \define{arithmetic types}, which support the basic
    4446 arithmetic operators. The use of an assertion in the \nonterm{spec-parameter-list} declares that,
    4447 in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are
    4448 available ). This is equivalent to inheritance of specifications.
     3743The integral and floating-point types are \define{arithmetic types}, which support the basic arithmetic operators.
     3744The 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 ).
     3745This is equivalent to inheritance of specifications.
    44493746\begin{lstlisting}
    44503747context arithmetic( type T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@
     
    44773774
    44783775Modifiable scalar lvalues are scalars and are modifiable lvalues, and assertions in the
    4479 \nonterm{spec-parameter-list} reflect those relationships. This is equivalent to multiple
    4480 inheritance of specifications. Scalars can also be incremented and decremented.
     3776\nonterm{spec-parameter-list} reflect those relationships.
     3777This is equivalent to multiple inheritance of specifications.
     3778Scalars can also be incremented and decremented.
    44813779\begin{lstlisting}
    44823780context m_l_scalar( type T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@
     
    44863784\end{lstlisting}
    44873785
    4488 Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic. Note that this
    4489 results in the ``inheritance'' of \lstinline$scalar$ along both paths.
     3786Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic.
     3787Note that this results in the ``inheritance'' of \lstinline$scalar$ along both paths.
    44903788\begin{lstlisting}
    44913789context m_l_arithmetic( type T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@
     
    44933791        T ?+=?( T *, T ), ?-=?( T *, T );
    44943792};
    4495 
    44963793context m_l_integral( type T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@
    44973794        T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );@\use{m_l_arithmetic}@
     
    45033800\subsection{Pointer and array types}
    45043801
    4505 Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a
    4506 constant pointer to the first element of the array, and the subscript expression
     3802Array 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
    45073803``\lstinline$a[i]$'' is equivalent to the dereferencing expression ``\lstinline$(*( a+( i )))$''.
    45083804Technically, pointer arithmetic and pointer comparisons other than ``\lstinline$==$'' and
    4509 ``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not
    4510 enforce those restrictions. Consequently, there is no need for a separate ``array type''
    4511 specification.
    4512 
    4513 Pointer types are scalar types. Like other scalar types, they have ``\lstinline$+$'' and
     3805``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not enforce those restrictions.
     3806Consequently, there is no need for a separate ``array type'' specification.
     3807
     3808Pointer types are scalar types.
     3809Like other scalar types, they have ``\lstinline$+$'' and
    45143810``\lstinline$-$'' operators, but the types do not match the types of the operations in
    45153811\lstinline$arithmetic$, so these operators cannot be consolidated in \lstinline$scalar$.
     
    45193815        ptrdiff_t ?-?( P, P );
    45203816};
    4521 
    45223817context m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@
    45233818        P ?+=?( P *, long int ), ?-=?( P *, long int );
     
    45273822\end{lstlisting}
    45283823
    4529 Specifications that define the dereference operator ( or subscript operator ) require two
    4530 parameters, one for the pointer type and one for the pointed-at ( or element ) type. Different
    4531 specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not
    4532 included in types. The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as
     3824Specifications 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.
     3825Different specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not included in types.
     3826The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as
    45333827``\lstinline$Safe_pointer$ acts like a pointer to \lstinline$int$''.
    45343828\begin{lstlisting}
    45353829context ptr_to( type P | pointer( P ), type T ) {@\impl{ptr_to}@@\use{pointer}@
    4536         lvalue T *?( P ); lvalue T ?[?]( P, long int );
     3830        lvalue T *?( P );
     3831        lvalue T ?[?]( P, long int );
    45373832};
    4538 
    45393833context ptr_to_const( type P | pointer( P ), type T ) {@\impl{ptr_to_const}@
    4540         const lvalue T *?( P ); const lvalue T ?[?]( P, long int );@\use{pointer}@
     3834        const lvalue T *?( P );
     3835        const lvalue T ?[?]( P, long int );@\use{pointer}@
    45413836};
    4542 
    45433837context ptr_to_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_volatile}@
    4544         volatile lvalue T *?( P ); volatile lvalue T ?[?]( P, long int );@\use{pointer}@
     3838        volatile lvalue T *?( P );
     3839        volatile lvalue T ?[?]( P, long int );@\use{pointer}@
    45453840};
    4546 \end{lstlisting}
    4547 \begin{lstlisting}
    45483841context ptr_to_const_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_const_volatile}@
    45493842        const volatile lvalue T *?( P );@\use{pointer}@
     
    45523845\end{lstlisting}
    45533846
    4554 Assignment to pointers is more complicated than is the case with other types, because the target's
    4555 type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to
    4556 a ``\lstinline$const T *$'', a ``\lstinline$volatile T *$'', and a ``\lstinline$const volatile T *$''.
     3847Assignment 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 *$''.
    45573848Again, the pointed-at type is passed in, so that assertions can connect these specifications to the
    45583849``\lstinline$ptr_to$'' specifications.
     
    45623853        T * ?=?( T **, P );
    45633854};
    4564 
    45653855context 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}@) {
    45663856        P ?=?( P *, const T * );
    45673857        const T * ?=?( const T **, P );
    45683858};
    4569 
    45703859context 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}@
    45713860        P ?=?( P *, volatile T * );
    45723861        volatile T * ?=?( volatile T **, P );
    45733862};
    4574 
    45753863context 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}@
    45763864                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}@
     
    45803868\end{lstlisting}
    45813869
    4582 Note the regular manner in which type qualifiers appear in those specifications. An alternative
    4583 specification can make use of the fact that qualification of the pointed-at type is part of a
    4584 pointer type to capture that regularity.
     3870Note the regular manner in which type qualifiers appear in those specifications.
     3871An 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.
    45853872\begin{lstlisting}
    45863873context 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 ) ) {
     
    45903877\end{lstlisting}
    45913878The assertion ``\lstinline$| m_l_ptr_like( Safe_ptr, const int * )$'' should be read as
    4592 ``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''. This specification has two
    4593 defects, compared to the original four: there is no automatic assertion that dereferencing a
     3879``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''.
     3880This specification has two defects, compared to the original four: there is no automatic assertion that dereferencing a
    45943881\lstinline$MyP$ produces an lvalue of the type that \lstinline$CP$ points at, and the
    4595 ``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed
    4596 to \lstinline$CP$ really is a pointer type.
     3882``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed to \lstinline$CP$ really is a pointer type.
    45973883
    45983884
    45993885\section{Relationships between operations}
    46003886
    4601 Different operators often have related meanings; for instance, in C, ``\lstinline$+$'',
     3887Different operators often have related meanings;
     3888for instance, in C, ``\lstinline$+$'',
    46023889``\lstinline$+=$'', and the two versions of ``\lstinline$++$'' perform variations of addition.
    4603 Languages like {\CC} and Ada allow programmers to define operators for new types, but do not
    4604 require that these relationships be preserved, or even that all of the operators be implemented.
    4605 Completeness and consistency is left to the good taste and discretion of the programmer. It is
    4606 possible to encourage these attributes by providing generic operator functions, or member functions
    4607 of abstract classes, that are defined in terms of other, related operators.
    4608 
    4609 In \CFA, polymorphic functions provide the equivalent of these generic operators, and
    4610 specifications explicitly define the minimal implementation that a programmer should provide. This
    4611 section shows a few examples.
     3890Languages 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.
     3891Completeness and consistency is left to the good taste and discretion of the programmer.
     3892It 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.
     3893
     3894In \CFA, polymorphic functions provide the equivalent of these generic operators, and specifications explicitly define the minimal implementation that a programmer should provide.
     3895This section shows a few examples.
    46123896
    46133897
    46143898\subsection{Relational and equality operators}
    46153899
    4616 The different comparison operators have obvious relationships, but there is no obvious subset of the
    4617 operations to use in the implementation of the others. However, it is usually convenient to
    4618 implement a single comparison function that returns a negative integer, 0, or a positive integer if
    4619 its first argument is respectively less than, equal to, or greater than its second argument; the
    4620 library function \lstinline$strcmp$ is an example.
    4621 
    4622 C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation,
    4623 returns 1 if its operand compares equal to 0, and 0 otherwise.
     3900The different comparison operators have obvious relationships, but there is no obvious subset of the operations to use in the implementation of the others.
     3901However, 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;
     3902the library function \lstinline$strcmp$ is an example.
     3903
     3904C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation, returns 1 if its operand compares equal to 0, and 0 otherwise.
    46243905\begin{lstlisting}
    46253906context comparable( type T ) {
     
    46273908        int compare( T, T );
    46283909}
    4629 
    46303910forall( type T | comparable( T ) ) int ?<?( T l, T r ) {
    46313911        return compare( l, r ) < 0;
    46323912}
    46333913// ... similarly for <=, ==, >=, >, and !=.
    4634 
    46353914forall( type T | comparable( T ) ) int !?( T operand ) {
    46363915        return !compare( operand, 0 );
     
    46413920\subsection{Arithmetic and integer operations}
    46423921
    4643 A complete arithmetic type would provide the arithmetic operators and the corresponding assignment
    4644 operators. Of these, the assignment operators are more likely to be implemented directly, because
    4645 it is usually more efficient to alter the contents of an existing object than to create and return a
    4646 new one. Similarly, a complete integral type would provide integral operations based on integral
    4647 assignment operations.
     3922A complete arithmetic type would provide the arithmetic operators and the corresponding assignment operators.
     3923Of 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.
     3924Similarly, a complete integral type would provide integral operations based on integral assignment operations.
    46483925\begin{lstlisting}
    46493926context arith_base( type T ) {
     
    46513928        T ?+=?( T *, T ), ?-=?( T *, T ), ?*=?( T *, T ), ?/=?( T *, T );
    46523929}
    4653 
    46543930forall( type T | arith_base( T ) ) T ?+?( T l, T r ) {
    46553931        return l += r;
    46563932}
    4657 
    46583933forall( type T | arith_base( T ) ) T ?++( T * operand ) {
    46593934        T temporary = *operand;
     
    46613936        return temporary;
    46623937}
    4663 
    46643938forall( type T | arith_base( T ) ) T ++?( T * operand ) {
    46653939        return *operand += 1;
    46663940}
    46673941// ... similarly for -, --, *, and /.
    4668 
    46693942context int_base( type T ) {
    46703943        T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );
    46713944        T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );
    46723945}
    4673 
    46743946forall( type T | int_base( T ) ) T ?&?( T l, T r ) {
    46753947        return l &= r;
     
    46783950\end{lstlisting}
    46793951
    4680 Note that, although an arithmetic type would certainly provide comparison functions, and an integral
    4681 type would provide arithmetic operations, there does not have to be any relationship among
    4682 \lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$. Note also that these
    4683 declarations provide guidance and assistance, but they do not define an absolutely minimal set of
    4684 requirements. A truly minimal implementation of an arithmetic type might only provide
     3952Note 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
     3953\lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$.
     3954Note also that these declarations provide guidance and assistance, but they do not define an absolutely minimal set of requirements.
     3955A truly minimal implementation of an arithmetic type might only provide
    46853956\lstinline$0$, \lstinline$1$, and \lstinline$?-=?$, which would be used by polymorphic
    46863957\lstinline$?+=?$, \lstinline$?*=?$, and \lstinline$?/=?$ functions.
     
    46923963Review index entries.
    46933964
    4694 Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers. This gets
    4695 into \lstinline$noalias$ territory. Qualifying anything (``\lstinline$short restrict rs$'') means
    4696 pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers.
    4697 
    4698 Enumerated types. Constants are not ints. Overloading. Definition should be ``representable as an
    4699 integer type'', not ``as an int''. C11 usual conversions freely convert to and from ordinary
    4700 integer types via assignment, which works between any integer types. Does enum Color ?*?( enum
     3965Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers.
     3966This gets into \lstinline$noalias$ territory.
     3967Qualifying anything (``\lstinline$short restrict rs$'') means pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers.
     3968
     3969Enumerated types.
     3970Constants are not ints.
     3971Overloading.
     3972Definition should be ``representable as an integer type'', not ``as an int''.
     3973C11 usual conversions freely convert to and from ordinary integer types via assignment, which works between any integer types.
     3974Does enum Color ?*?( enum
    47013975Color, enum Color ) really make sense? ?++ does, but it adds (int)1.
    47023976
    4703 Operators on {,signed,unsigned} char and other small types. ?<? harmless; ?*? questionable for
    4704 chars. Generic selections make these choices visible. Safe conversion operators? Predefined
     3977Operators on {,signed,unsigned} char and other small types. ?<? harmless;
     3978?*? questionable for chars.
     3979Generic selections make these choices visible.
     3980Safe conversion operators? Predefined
    47053981``promotion'' function?
    47063982
    4707 \lstinline$register$ assignment might be handled as assignment to a temporary with copying back and
    4708 forth, but copying must not be done by assignment.
     3983\lstinline$register$ assignment might be handled as assignment to a temporary with copying back and forth, but copying must not be done by assignment.
    47093984
    47103985Don't use ptrdiff\_t by name in the predefineds.
    47113986
    4712 Polymorphic objects. Polymorphic typedefs and type declarations.
     3987Polymorphic objects.
     3988Polymorphic typedefs and type declarations.
    47133989
    47143990
     
    47193995\addcontentsline{toc}{chapter}{\indexname} % add index name to table of contents
    47203996\begin{theindex}
    4721 Italic page numbers give the location of the main entry for the referenced term. Plain page numbers
    4722 denote uses of the indexed term. Entries for grammar non-terminals are italicized. A typewriter
    4723 font is used for grammar terminals and program identifiers.
     3997Italic page numbers give the location of the main entry for the referenced term.
     3998Plain page numbers denote uses of the indexed term.
     3999Entries for grammar non-terminals are italicized.
     4000A typewriter font is used for grammar terminals and program identifiers.
    47244001\indexspace
    47254002\input{refrat.ind}
  • src/CodeGen/CodeGenerator.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 25 21:22:00 2016
    13 // Update Count     : 242
     12// Last Modified On : Wed Mar  2 17:32:16 2016
     13// Update Count     : 243
    1414//
    1515
     
    170170        }
    171171 
    172         void CodeGenerator::visit( ContextDecl *aggregateDecl ) {}
     172        void CodeGenerator::visit( TraitDecl *aggregateDecl ) {}
    173173 
    174174        void CodeGenerator::visit( TypedefDecl *typeDecl ) {
  • src/CodeGen/CodeGenerator.h

    r9d7b3ea r36ebd03  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Aug 12 14:27:14 2015
    13 // Update Count     : 27
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:32:24 2016
     13// Update Count     : 28
    1414//
    1515
     
    3838                virtual void visit( UnionDecl *aggregateDecl );
    3939                virtual void visit( EnumDecl *aggregateDecl );
    40                 virtual void visit( ContextDecl *aggregateDecl );
     40                virtual void visit( TraitDecl *aggregateDecl );
    4141                virtual void visit( TypedefDecl *typeDecl );
    4242                virtual void visit( TypeDecl *typeDecl );
  • src/Makefile.am

    r9d7b3ea r36ebd03  
    1111## Created On       : Sun May 31 08:51:46 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Thu Jan 28 16:50:26 2016
    14 ## Update Count     : 55
     13## Last Modified On : Fri Feb 26 17:19:16 2016
     14## Update Count     : 57
    1515###############################################################################
    1616
     
    4646driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL
    4747
    48 CXXFLAGS = -g   # remove default -O2 to allow better debugging
     48CXXFLAGS = -g -std=c++11                # remove default -O2 to allow better debugging
    4949
    5050MAINTAINERCLEANFILES += ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
  • src/Makefile.in

    r9d7b3ea r36ebd03  
    247247CXX = @CXX@
    248248CXXDEPMODE = @CXXDEPMODE@
    249 CXXFLAGS = -g   # remove default -O2 to allow better debugging
     249CXXFLAGS = -g -std=c++11                # remove default -O2 to allow better debugging
    250250CYGPATH_W = @CYGPATH_W@
    251251DEFS = @DEFS@
     
    411411          esac; \
    412412        done; \
    413         echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
     413        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
    414414        $(am__cd) $(top_srcdir) && \
    415           $(AUTOMAKE) --gnu src/Makefile
     415          $(AUTOMAKE) --foreign src/Makefile
    416416.PRECIOUS: Makefile
    417417Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
  • src/Parser/DeclarationNode.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 14 14:46:32 2015
    13 // Update Count     : 126
     12// Last Modified On : Wed Mar  2 17:26:24 2016
     13// Update Count     : 134
    1414//
    1515
     
    3434const char *DeclarationNode::storageName[] = { "extern", "static", "auto", "register", "inline", "fortran", "_Noreturn", "_Thread_local", "" };
    3535const char *DeclarationNode::qualifierName[] = { "const", "restrict", "volatile", "lvalue", "_Atomic" };
    36 const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary" };
     36const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary", };
    3737const char *DeclarationNode::modifierName[]  = { "signed", "unsigned", "short", "long" };
    3838const char *DeclarationNode::aggregateName[] = { "struct", "union", "context" };
    3939const char *DeclarationNode::typeClassName[] = { "type", "dtype", "ftype" };
     40const char *DeclarationNode::builtinTypeName[] = { "__builtin_va_list" };
    4041
    4142UniqueName DeclarationNode::anonymous( "__anonymous" );
     
    147148        newnode->type = new TypeData( TypeData::Basic );
    148149        newnode->type->basic->typeSpec.push_back( bt );
     150        return newnode;
     151}
     152
     153DeclarationNode *DeclarationNode::newBuiltinType( BuiltinType bt ) {
     154        DeclarationNode *newnode = new DeclarationNode;
     155        newnode->type = new TypeData( TypeData::Builtin );
     156        newnode->type->builtin->type = bt;
    149157        return newnode;
    150158}
     
    215223        DeclarationNode *newnode = new DeclarationNode;
    216224        newnode->name = assign_strptr( name );
    217         // do something with the constant
     225        newnode->enumeratorValue = constant;
    218226        return newnode;
    219227}
     
    243251}
    244252
    245 DeclarationNode *DeclarationNode::newContext( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {
     253DeclarationNode *DeclarationNode::newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {
    246254        DeclarationNode *newnode = new DeclarationNode;
    247255        newnode->type = new TypeData( TypeData::Aggregate );
    248         newnode->type->aggregate->kind = Context;
     256        newnode->type->aggregate->kind = Trait;
    249257        newnode->type->aggregate->params = params;
    250258        newnode->type->aggregate->fields = asserts;
     
    253261}
    254262
    255 DeclarationNode *DeclarationNode::newContextUse( std::string *name, ExpressionNode *params ) {
     263DeclarationNode *DeclarationNode::newTraitUse( std::string *name, ExpressionNode *params ) {
    256264        DeclarationNode *newnode = new DeclarationNode;
    257265        newnode->type = new TypeData( TypeData::AggregateInst );
    258266        newnode->type->aggInst->aggregate = new TypeData( TypeData::Aggregate );
    259         newnode->type->aggInst->aggregate->aggregate->kind = Context;
     267        newnode->type->aggInst->aggregate->aggregate->kind = Trait;
    260268        newnode->type->aggInst->aggregate->aggregate->name = assign_strptr( name );
    261269        newnode->type->aggInst->params = params;
     
    794802                        errors.append( e );
    795803                } // try
    796                 cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
     804                cur = dynamic_cast<DeclarationNode *>( cur->get_link() );
    797805        } // while
    798806        if ( ! errors.isEmpty() ) {
     
    881889                          ret = new UnionInstType( type->buildQualifiers(), type->aggregate->name );
    882890                          break;
    883                         case DeclarationNode::Context:
    884                           ret = new ContextInstType( type->buildQualifiers(), type->aggregate->name );
     891                        case DeclarationNode::Trait:
     892                          ret = new TraitInstType( type->buildQualifiers(), type->aggregate->name );
    885893                          break;
    886894                        default:
  • src/Parser/ParseNode.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Feb  1 13:32:32 2016
    13 // Update Count     : 184
     12// Last Modified On : Wed Mar  2 17:26:35 2016
     13// Update Count     : 190
    1414//
    1515
     
    329329        enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary };
    330330        enum Modifier  { Signed, Unsigned, Short, Long };
    331         enum Aggregate { Struct, Union, Context };
     331        enum Aggregate { Struct, Union, Trait };
    332332        enum TypeClass { Type, Dtype, Ftype };
     333        enum BuiltinType { Valist };
    333334
    334335        static const char *storageName[]; 
     
    338339        static const char *aggregateName[];
    339340        static const char *typeClassName[];
     341        static const char *builtinTypeName[];
    340342
    341343        static DeclarationNode *newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle = false );
     
    352354        static DeclarationNode *newFromTypeGen( std::string *, ExpressionNode *params );
    353355        static DeclarationNode *newTypeParam( TypeClass, std::string *);
    354         static DeclarationNode *newContext( std::string *name, DeclarationNode *params, DeclarationNode *asserts );
    355         static DeclarationNode *newContextUse( std::string *name, ExpressionNode *params );
     356        static DeclarationNode *newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts );
     357        static DeclarationNode *newTraitUse( std::string *name, ExpressionNode *params );
    356358        static DeclarationNode *newTypeDecl( std::string *name, DeclarationNode *typeParams );
    357359        static DeclarationNode *newPointer( DeclarationNode *qualifiers );
     
    363365        static DeclarationNode *newAttr( std::string *, ExpressionNode *expr );
    364366        static DeclarationNode *newAttr( std::string *, DeclarationNode *type );
     367        static DeclarationNode *newBuiltinType( BuiltinType );
    365368
    366369        DeclarationNode *addQualifiers( DeclarationNode *);
     
    401404        LinkageSpec::Type get_linkage() const { return linkage; }
    402405        DeclarationNode *extractAggregate() const;
     406        ExpressionNode *get_enumeratorValue() const { return enumeratorValue; }
    403407
    404408        DeclarationNode();
     
    413417        std::list< std::string > attributes;
    414418        ExpressionNode *bitfieldWidth;
     419        ExpressionNode *enumeratorValue;
    415420        InitializerNode *initializer;
    416421        bool hasEllipsis;
  • src/Parser/TypeData.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Sat May 16 15:12:51 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 14 14:57:23 2015
    13 // Update Count     : 32
     12// Last Modified On : Wed Mar  2 17:26:45 2016
     13// Update Count     : 49
    1414//
    1515
     
    2323#include "SynTree/Expression.h"
    2424#include "SynTree/Statement.h"
     25#include "SynTree/Initializer.h"
    2526
    2627TypeData::TypeData( Kind k ) : kind( k ), base( 0 ), forall( 0 ) {
     
    8485                typeexpr->expr = 0;
    8586                break;
     87          case Builtin:
     88                builtin = new Builtin_t;
     89                break;
    8690          case Attr:
    8791                attr = new Attr_t;
     
    149153                delete typeexpr->expr;
    150154                delete typeexpr;
     155                break;
     156          case Builtin:
     157                delete builtin;
    151158                break;
    152159          case Attr:
     
    221228                newtype->typeexpr->expr = maybeClone( typeexpr->expr );
    222229                break;
     230          case Builtin:
     231                newtype->builtin->type = builtin->type;
     232                break;
    223233          case Attr:
    224234                newtype->attr->expr = maybeClone( attr->expr );
     
    396406                        attr->type->print( os, indent + 2 );
    397407                } // if
     408                break;
     409          case Builtin:
     410                os << "gcc builtin type";
    398411                break;
    399412          default:
     
    506519          case Typeof:
    507520                return buildTypeof();
     521          case Builtin:
     522                return new VarArgsType( buildQualifiers() );
    508523          case Attr:
    509524                return buildAttr();
     
    805820                buildForall( aggregate->params, at->get_parameters() );
    806821                break;
    807           case DeclarationNode::Context:
    808                 at = new ContextDecl( aggregate->name );
     822          case DeclarationNode::Trait:
     823                at = new TraitDecl( aggregate->name );
    809824                buildList( aggregate->params, at->get_parameters() );
    810825                break;
     
    845860                        ret = new UnionInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
    846861                        break;
    847                   case DeclarationNode::Context:
    848                         ret = new ContextInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
     862                  case DeclarationNode::Trait:
     863                        ret = new TraitInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
    849864                        break;
    850865                  default:
     
    883898        EnumDecl *ret = new EnumDecl( enumeration->name );
    884899        buildList( enumeration->constants, ret->get_members() );
     900        std::list< Declaration * >::iterator members = ret->get_members().begin();
     901        for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast<DeclarationNode *>( cur->get_link() ), ++members ) {
     902                if ( cur->get_enumeratorValue() != NULL ) {
     903                        ObjectDecl *member = dynamic_cast<ObjectDecl *>(*members);
     904                        member->set_init( new SingleInit( maybeBuild< Expression >( cur->get_enumeratorValue() ) ) );
     905                } // if
     906        } // for
    885907        return ret;
    886908}
  • src/Parser/TypeData.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Sat May 16 15:18:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jan 14 23:31:15 2016
    13 // Update Count     : 17
     12// Last Modified On : Fri Feb 26 14:21:38 2016
     13// Update Count     : 19
    1414//
    1515
     
    2424struct TypeData {
    2525        enum Kind { Unknown, Basic, Pointer, Array, Function, Aggregate, AggregateInst,
    26                                 Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Attr } kind;
     26                                Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Builtin, Attr } kind;
    2727
    2828        TypeData( Kind k = Unknown );
     
    9898        };
    9999
     100        struct Builtin_t {
     101                DeclarationNode::BuiltinType type;
     102        };
     103
    100104        struct Attr_t {
    101105                std::string name;
     
    116120                Typeof_t * typeexpr;
    117121                Attr_t * attr;
     122                Builtin_t * builtin;
    118123        };
    119124
  • src/Parser/TypedefTable.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Sat May 16 15:20:13 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Jun 26 07:30:16 2015
    13 // Update Count     : 19
     12// Last Modified On : Wed Mar  2 17:25:55 2016
     13// Update Count     : 20
    1414//
    1515
     
    6161
    6262void TypedefTable::addToScope( const std::string &identifier, kind_t kind, int scope ) {
    63         if ( currentContext != "" && scope == contextScope ) {
     63        if ( currentTrait != "" && scope == contextScope ) {
    6464                DeferredEntry entry = { identifier, kind };
    65                 contexts[currentContext].push_back( entry );
     65                contexts[currentTrait].push_back( entry );
    6666        } else {
    6767                debugPrint( "Adding " << identifier << " as kind " << kind << " scope " << scope << " from scope " << currentScope << endl );
     
    112112}
    113113
    114 void TypedefTable::openContext( const std::string &contextName ) {
     114void TypedefTable::openTrait( const std::string &contextName ) {
    115115        map< string, deferListType >::iterator i = contexts.find( contextName );
    116116        if ( i != contexts.end() ) {
     
    150150}
    151151
    152 void TypedefTable::enterContext( const std::string &contextName ) {
    153         currentContext = contextName;
     152void TypedefTable::enterTrait( const std::string &contextName ) {
     153        currentTrait = contextName;
    154154        contextScope = currentScope;
    155155}
    156156
    157 void TypedefTable::leaveContext() {
    158         currentContext = "";
     157void TypedefTable::leaveTrait() {
     158        currentTrait = "";
    159159}
    160160
  • src/Parser/TypedefTable.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Sat May 16 15:24:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jun 25 22:52:15 2015
    13 // Update Count     : 11
     12// Last Modified On : Wed Mar  2 17:26:54 2016
     13// Update Count     : 12
    1414//
    1515
     
    4040
    4141        int currentScope;
    42         std::string currentContext;
     42        std::string currentTrait;
    4343        int contextScope;
    4444       
     
    7979       
    8080        // dump the definitions from a pre-defined context into the current scope
    81         void openContext( const std::string &contextName );
     81        void openTrait( const std::string &contextName );
    8282       
    8383        void enterScope();
    8484        void leaveScope();
    85         void enterContext( const std::string &contextName );
    86         void leaveContext();
     85        void enterTrait( const std::string &contextName );
     86        void leaveTrait();
    8787
    8888        void print() const;
  • src/Parser/lex.cc

    r9d7b3ea r36ebd03  
    382382        (yy_c_buf_p) = yy_cp;
    383383
    384 #define YY_NUM_RULES 179
    385 #define YY_END_OF_BUFFER 180
     384#define YY_NUM_RULES 180
     385#define YY_END_OF_BUFFER 181
    386386/* This struct is not used in this scanner,
    387387   but its presence is necessary. */
     
    391391        flex_int32_t yy_nxt;
    392392        };
    393 static yyconst flex_int16_t yy_accept[876] =
     393static yyconst flex_int16_t yy_accept[888] =
    394394    {   0,
    395         0,    0,    0,    0,    0,    0,  114,  114,  117,  117,
    396       180,  178,    7,    9,    8,  137,  116,  101,  142,  145,
    397       113,  124,  125,  140,  138,  128,  139,  131,  141,  106,
    398       107,  108,  129,  130,  147,  149,  148,  150,  178,  101,
    399       122,  178,  123,  143,  101,  103,  101,  101,  101,  101,
    400       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    401       101,  126,  146,  127,  144,    7,  178,    4,    4,  179,
    402       104,  179,  105,  114,  115,  121,  117,  118,    7,    9,
    403         0,    8,  154,  173,  101,    0,  166,  136,  159,  167,
    404       164,  151,  162,  152,  163,  161,    0,  111,    3,    0,
    405 
    406       165,  111,  109,    0,    0,  109,  109,    0,    0,  109,
    407       108,  108,  108,    0,  108,  134,  135,  133,  155,  157,
    408       153,  158,  156,    0,    0,    0,    0,    0,    0,    0,
    409         0,    0,    0,    0,    0,    0,    0,    0,  102,  172,
    410         0,  116,  113,  101,    0,    0,  169,    0,  101,  101,
    411       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    412       101,  101,  101,  101,  101,   39,  101,  101,  101,  101,
    413       101,  101,  101,  101,  101,  101,   57,  101,  101,  101,
    414       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    415       101,  101,  168,  160,    7,    0,    0,    0,    2,    0,
    416 
    417         5,  104,    0,    0,    0,  114,    0,  120,  119,  119,
    418         0,    0,    0,  117,    0,    0,    0,    0,    0,    0,
    419         0,    0,    0,    0,    0,    0,    0,    0,    0,  132,
    420       111,  111,    0,  111,  111,  111,    0,    6,  111,  109,
    421         0,    0,    0,  111,    0,  109,  109,  109,  109,    0,
    422       110,    0,    0,  108,  108,  108,  108,    0,  170,  171,
    423         0,  176,  174,    0,    0,    0,  102,    0,    0,    0,
    424         0,    0,    0,    0,    0,  101,   17,  101,  101,  101,
    425       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    426       101,  101,  101,  101,  101,   14,  101,  101,  101,  101,
    427 
    428       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    429       101,  101,  101,  101,   51,  101,  101,  101,   64,  101,
    430       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    431       101,   88,  101,  101,  101,  101,  101,  101,  101,    0,
    432         0,    0,    0,    0,    0,    0,    0,  119,    0,    0,
    433         0,    0,    0,  119,    0,    0,  177,    0,    0,    0,
    434         0,    0,    0,    0,  111,    0,  111,    0,  111,    0,
    435         0,  111,  111,  109,  109,    0,    0,  110,  110,    0,
    436       110,    0,  110,  108,  108,    0,    0,    0,    0,    0,
    437         0,    0,    0,    0,    0,  175,  101,  101,  101,  101,
    438 
    439       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    440       101,  101,  101,  101,  101,  101,  101,  101,  101,   21,
    441       101,   24,  101,   27,  101,  101,  101,  101,  101,  101,
    442       101,   42,  101,   44,  101,  101,  101,  101,  101,  101,
    443       101,   56,  101,   67,  101,  101,  101,  101,  101,  101,
    444       101,  101,  101,  101,  101,   89,  101,  101,   96,  101,
    445       101,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    446         0,    0,    0,    0,    0,  119,    0,    0,    0,    0,
    447         0,  111,  111,    0,    0,    0,    0,    0,  110,  110,
    448         0,  112,    0,  110,  110,    0,    0,    0,    0,    0,
    449 
    450         0,    0,    0,    0,    0,    0,    0,    0,  101,  101,
    451        22,  101,  101,  101,  101,  101,  101,  101,   15,  101,
    452       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    453       101,  101,  101,   23,   25,  101,   32,  101,  101,  101,
    454       101,  101,   41,  101,  101,  101,  101,   49,  101,  101,
    455        54,  101,  101,  101,  101,  101,   76,  101,  101,  101,
    456       101,  101,   86,  101,  101,   94,  101,  101,  100,    0,
     395        0,    0,    0,    0,    0,    0,  115,  115,  118,  118,
     396      181,  179,    7,    9,    8,  138,  117,  102,  143,  146,
     397      114,  125,  126,  141,  139,  129,  140,  132,  142,  107,
     398      108,  109,  130,  131,  148,  150,  149,  151,  179,  102,
     399      123,  179,  124,  144,  102,  104,  102,  102,  102,  102,
     400      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     401      102,  102,  127,  147,  128,  145,    7,  179,    4,    4,
     402      180,  105,  180,  106,  115,  116,  122,  118,  119,    7,
     403        9,    0,    8,  155,  174,  102,    0,  167,  137,  160,
     404      168,  165,  152,  163,  153,  164,  162,    0,  112,    3,
     405
     406        0,  166,  112,  110,    0,    0,  110,  110,    0,    0,
     407      110,  109,  109,  109,    0,  109,  135,  136,  134,  156,
     408      158,  154,  159,  157,    0,    0,    0,    0,    0,    0,
     409        0,    0,    0,    0,    0,    0,    0,    0,    0,  103,
     410      173,    0,  117,  114,  102,    0,    0,  170,    0,  102,
     411      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     412      102,  102,  102,  102,  102,  102,   38,  102,  102,  102,
     413      102,  102,  102,  102,  102,  102,  102,   56,  102,  102,
     414      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     415      102,  102,  102,  102,  169,  161,    7,    0,    0,    0,
     416
     417        2,    0,    5,  105,    0,    0,    0,  115,    0,  121,
     418      120,  120,    0,    0,    0,  118,    0,    0,    0,    0,
    457419        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    458         0,    0,    0,    0,    0,    0,    0,    0,  112,    0,
    459         0,  110,  112,  112,  112,  112,  112,  110,    0,    0,
    460 
    461         0,    0,    0,    0,    0,    0,    0,    0,  101,    0,
    462       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    463       101,  101,  101,  101,  101,  101,   59,  101,  101,  101,
    464       101,  101,  101,  101,  101,   28,  101,  101,  101,  101,
    465        40,   43,   46,  101,  101,   52,  101,   61,   68,  101,
    466       101,   75,   77,   80,   81,   83,   84,  101,  101,   91,
    467       101,  101,    0,    1,    0,    0,    0,    0,    0,    0,
    468       104,    0,    0,    0,  119,    0,    0,    0,    0,  112,
    469       112,  112,  112,    0,    0,    0,    0,    0,    0,    0,
    470         0,    0,  101,  101,   18,  101,  101,  101,  101,  101,
    471 
    472       101,  101,   16,  101,  101,  101,   33,  101,  101,  101,
    473       101,  101,  101,  101,  101,  101,  101,  101,   35,  101,
    474        37,   38,  101,   48,   53,  101,  101,  101,   90,  101,
    475       101,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    476         0,    0,    0,    0,   10,   11,   29,   55,  101,  101,
    477       101,  101,  101,  101,  101,  101,  101,  101,  101,   60,
    478        62,   65,  101,  101,   78,   92,  101,  101,   36,   47,
    479        71,   72,  101,   95,   97,    0,    0,    0,    0,    0,
    480         0,    0,    0,    0,    0,    0,    0,  101,   69,  101,
    481       101,   12,  101,  101,   30,   34,  101,  101,  101,   66,
    482 
    483       101,  101,  101,  101,  101,  101,    0,    0,    0,    0,
    484         0,    0,    0,    0,    0,    0,    0,    0,    0,   58,
    485       101,  101,  101,  101,  101,  101,  101,   50,   63,   73,
    486        79,   93,   98,  101,  101,    0,    0,    0,    0,    0,
    487         0,    0,    0,  101,  101,   13,   19,  101,   31,  101,
    488       101,  101,   26,   87,    0,    0,  101,  101,  101,  101,
    489       101,   74,   99,  101,   85,   20,  101,   45,   82,  101,
    490       101,  101,  101,   70,    0
     420        0,  133,  112,  112,    0,  112,  112,  112,    0,    6,
     421      112,  110,    0,    0,    0,  112,    0,  110,  110,  110,
     422      110,    0,  111,    0,    0,  109,  109,  109,  109,    0,
     423      171,  172,    0,  177,  175,    0,    0,    0,  103,    0,
     424        0,    0,    0,    0,    0,    0,    0,  102,   17,  102,
     425      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     426      102,  102,  102,  102,  102,  102,  102,   14,  102,  102,
     427
     428      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     429      102,  102,  102,  102,  102,  102,   50,  102,  102,  102,
     430       63,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     431      102,  102,  102,  102,  102,   89,  102,  102,  102,  102,
     432      102,  102,  102,    0,    0,    0,    0,    0,    0,    0,
     433        0,  120,    0,    0,    0,    0,    0,  120,    0,    0,
     434      178,    0,    0,    0,    0,    0,    0,    0,  112,    0,
     435      112,    0,  112,    0,    0,  112,  112,  110,  110,    0,
     436        0,  111,  111,    0,  111,    0,  111,  109,  109,    0,
     437        0,    0,    0,    0,    0,    0,    0,    0,    0,  176,
     438
     439      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     440      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     441      102,  102,  102,   21,  102,   24,  102,   27,  102,  102,
     442      102,  102,  102,  102,  102,   41,  102,   43,  102,  102,
     443      102,  102,  102,  102,  102,   55,  102,   66,  102,  102,
     444      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     445      102,  102,  102,  102,   97,  102,  102,    0,    0,    0,
     446        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     447        0,  120,    0,    0,    0,    0,    0,  112,  112,    0,
     448        0,    0,    0,    0,  111,  111,    0,  113,    0,  111,
     449
     450      111,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     451        0,    0,    0,    0,  102,  102,   22,  102,  102,  102,
     452      102,  102,  102,  102,   15,  102,  102,  102,  102,  102,
     453      102,  102,  102,  102,  102,  102,  102,  102,  102,   23,
     454       25,  102,   32,  102,  102,  102,  102,   40,  102,  102,
     455      102,  102,   48,  102,  102,   53,  102,  102,   70,  102,
     456      102,  102,   76,  102,  102,  102,  102,  102,   86,   88,
     457      102,  102,   94,  102,  102,  101,    0,    0,    0,    0,
     458        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     459        0,    0,    0,    0,    0,  113,    0,    0,  111,  113,
     460
     461      113,  113,  113,  113,  111,    0,    0,    0,    0,    0,
     462        0,    0,    0,    0,    0,  102,    0,  102,  102,  102,
     463      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     464      102,  102,  102,   58,  102,  102,  102,  102,  102,  102,
     465      102,  102,   28,  102,  102,  102,   39,   42,   45,  102,
     466      102,   51,  102,   60,   67,  102,  102,   75,   77,   80,
     467       81,   83,   84,  102,  102,   91,  102,  102,    0,    1,
     468        0,    0,    0,    0,    0,    0,  105,    0,    0,    0,
     469      120,    0,    0,    0,    0,  113,  113,  113,  113,    0,
     470        0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
     471
     472       18,  102,  102,  102,  102,  102,  102,  102,   16,  102,
     473      102,  102,   33,  102,  102,  102,  102,  102,  102,  102,
     474      102,  102,  102,  102,  102,   36,   37,  102,   47,   52,
     475      102,  102,  102,   90,  102,  102,    0,    0,    0,    0,
     476        0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
     477       11,   29,   54,  102,  102,  102,  102,  102,  102,  102,
     478      102,  102,  102,  102,   59,   61,   64,  102,  102,   78,
     479       92,  102,  102,   35,   46,   71,   72,  102,   95,   98,
     480        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     481        0,    0,  102,   68,  102,  102,   12,  102,  102,   30,
     482
     483       34,  102,  102,  102,   65,  102,  102,  102,  102,  102,
     484      102,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     485        0,    0,    0,    0,   57,  102,  102,  102,  102,  102,
     486      102,  102,   49,   62,   73,   79,   93,   99,  102,  102,
     487        0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
     488       13,   19,  102,  102,   31,  102,  102,  102,   26,   87,
     489        0,    0,  102,  102,  102,  102,  102,  102,   74,  100,
     490      102,   85,   20,  102,  102,   44,   82,  102,  102,  102,
     491      102,  102,  102,  102,   96,   69,    0
    491492    } ;
    492493
     
    536537    } ;
    537538
    538 static yyconst flex_int16_t yy_base[1050] =
     539static yyconst flex_int16_t yy_base[1062] =
    539540    {   0,
    540         0,   83, 2238, 2237,   93,    0,  175,  176,  177,  178,
    541      2252, 2782,  189, 2782,  195,   54, 2782, 2197,   59,  171,
    542      2782, 2782, 2782,   55,  186, 2782,  189,  187,  202,  214,
    543       272,    0, 2213, 2782,  214, 2213,  150,  340,  153,  222,
    544      2782,  157, 2782,  215,  224, 2782,  207,  181,  221,  249,
    545       235,  289,  155,  255,  218,  206,  266,  256,  323,  259,
    546       192, 2782,  223, 2782, 2210,  377,  342, 2782, 2220, 2782,
    547      2187,  234, 2782,    0, 2782,  421,    0, 2782,  393, 2782,
    548       399,  405, 2782,  492, 2184,  241, 2782, 2782, 2782, 2782,
    549      2782, 2201, 2782, 2200, 2782, 2782, 2211,  552, 2782, 2226,
    550 
    551      2782,  413,  393,  437,  493,  377,  318,  195,  430,  382,
    552         0,  384,  321,  196,  427, 2782, 2782, 2782, 2194, 2782,
    553      2782, 2782, 2193, 2192,  252,  302, 2206,  342,  435,  422,
    554       381,  455,  400,  494, 2185,  440, 2133,  469, 2163, 2782,
    555       276, 2782, 2782,  520, 2159, 2157, 2782, 2128,  414,  463,
    556       470,  325,  254,  479,  432,  274,  480,  423,  483,  498,
    557       492,  503,  499,  509,  341,  455,  484,  377,  510,  512,
    558       517,  518,  529,  530,  531,  537, 2154,  541,  536,  544,
    559       557,  546,  566,  569,  538,  552,  548,  554,  588,  571,
    560       570,  580, 2782, 2782,  645,  651, 2202,  657, 2782,  663,
    561 
    562      2782, 2152,  593, 2147, 2144,    0,  631, 2782, 2782,  669,
    563      2141, 2140, 2139,    0, 2160,  629,  635,  639,  678,  677,
    564       666,  670,  671,  674, 2138,  681,  682, 2115, 2114, 2782,
    565         0,  597,  702,  678,  676, 2111, 2160, 2782,  693,    0,
    566       710,  723,  743,  762,  788,  707, 2782, 2119, 2094,    0,
    567       776, 2138,  768,  723, 2782, 2113, 2086,  809, 2782, 2782,
    568      2118, 2782, 2782,  705,  710, 2098, 2097,  724, 2091, 2088,
    569      2087,    0, 2086,    0, 2056,  709,  682,  707,  712,  710,
    570       724,  647,  750,  671,  786,  751,  748,  731,  778,  787,
    571       789,  788,  792,  790,  758, 2084,  796,  806,  800,  813,
    572 
    573       798,  810,  802,  816,  822,  819,  815,  826,  830,  829,
    574       831,  832,  833,  837,  839,  841,  846,  843, 2081,  848,
    575       850,  849,  851,  852,  854,  853,  857,  855,  858,  863,
    576       868, 2080,  867,  912,  871,  878,  872,  879,  882,  937,
    577       939, 2076, 2074, 2071,    0, 2070,    0,  927,  931, 2069,
    578         0, 2067,    0, 2064,    0, 2084, 2782,  913,  926, 2064,
    579      2060,    0, 2057,    0, 2782,  942,  960,  953, 2782,  966,
    580       981, 1005, 2053, 2782, 2782,  955,  968,  995,  968, 1028,
    581       892, 1014,  970, 2782, 2782, 2049, 2047, 2045,    0, 2042,
    582         0, 2040,    0, 2038,    0, 2782,  909,  944,  982,  943,
    583 
    584      1006,  911, 1012,  923, 1013, 1019, 1009, 1016, 1023, 1024,
    585      1020,  972, 1030, 1028,  989, 1026, 1034, 1027, 1039, 2038,
    586      1044, 2035, 1048, 2034, 1049, 1051, 1052, 1053, 1056, 1057,
    587      1055, 2033, 1059, 2031,  946, 1063, 1066, 1067, 1068, 1071,
    588      1069, 2028, 1075, 2025, 1077, 1080, 1079, 1082, 1084, 1086,
    589      1087, 1090, 1097, 1107, 1088, 1108, 1093, 1098, 2024, 1096,
    590      1111, 1164, 2020,    0, 2018,    0, 2015,    0, 2012,    0,
    591      1151, 2011,    0, 2010,    0, 2008, 2005, 2002,    0, 2001,
    592         0, 1156, 2000, 1162, 1148, 1182, 1149, 1126, 1147, 2782,
    593      1201, 1215, 1241, 2010, 1983, 1992, 1991,    0, 1990,    0,
    594 
    595      1988,    0, 1985,    0, 1982,    0, 1981,    0, 1161, 1149,
    596      1983, 1179, 1140, 1180, 1117, 1182, 1192, 1199, 1181, 1163,
    597      1196, 1200, 1201, 1220, 1198, 1221, 1224,  604, 1226, 1227,
    598      1231, 1233, 1234, 1981, 1244, 1236, 1978, 1240, 1241, 1246,
    599      1247, 1243, 1975, 1250, 1251, 1253, 1254, 1974, 1255, 1267,
    600      1973, 1264, 1271, 1256, 1263, 1257, 1971, 1275, 1277, 1279,
    601      1260, 1281, 1290, 1285, 1288, 1968, 1289, 1291, 1967, 2015,
    602      1961,    0, 1958,    0, 1957,    0, 1956,    0, 1954,    0,
    603      1921,    0, 1919,    0, 1918,    0, 1336, 1342, 1369, 1353,
    604      1915, 2782, 1359, 1307, 1359, 1309, 1912, 2782, 1911,    0,
    605 
    606      1910,    0, 1908,    0, 1905,    0,    0,    0, 1905,    0,
    607      1347, 1295, 1292, 1323, 1337, 1338, 1296, 1349, 1351, 1355,
    608      1353, 1348, 1363, 1364, 1371, 1373, 1380, 1375, 1403, 1381,
    609      1385, 1389, 1094, 1387, 1390, 1904, 1391, 1393, 1397, 1401,
    610      1903, 1901, 1898, 1394, 1400, 1897, 1404, 1896, 1894, 1402,
    611      1408, 1891, 1890, 1889, 1887, 1884, 1880, 1417, 1412, 1876,
    612      1420, 1418, 1921, 2782, 1853,    0, 1852,    0,    0,    0,
    613      1854,    0,    0,    0, 2782,    0,    0,    0,    0, 1463,
    614      1849, 2782, 2782, 1469, 1846,    0, 1845,    0,    0,    0,
    615         0, 1844, 1407, 1446, 1845, 1406, 1423, 1300, 1431, 1449,
    616 
    617      1455, 1447, 1842, 1457, 1448, 1459, 1464, 1460, 1490, 1474,
    618      1470, 1494, 1480, 1475, 1484, 1485, 1486, 1482, 1841, 1487,
    619      1840, 1838, 1489, 1835, 1834, 1491, 1493, 1497, 1833, 1498,
    620      1500,    0,    0,    0, 1828, 1825, 1824, 1548,    0, 1823,
    621      1821, 1818, 1817, 1816, 1817, 1814, 1813, 1812, 1505, 1510,
    622      1502, 1501, 1504, 1508, 1513, 1517, 1526, 1528, 1559, 1810,
    623      1533, 1807, 1534, 1535, 1544, 1545, 1538, 1539, 1806, 1805,
    624      1803, 1800, 1540, 1799, 1798, 1793, 1786, 1784, 1783, 1780,
    625      1779, 1778, 1776, 1759, 1750, 1749, 1746, 1546, 1742, 1549,
    626      1550, 1552, 1554, 1557, 1558, 1739, 1556, 1589, 1566, 1732,
    627 
    628      1565, 1572, 1577, 1579, 1567, 1578, 1727, 1726, 1705, 1704,
    629      1703, 1696, 1694, 1693, 1650, 1649, 1647, 1645, 1644, 1646,
    630      1571, 1584, 1582, 1581, 1586, 1593, 1595, 1645, 1644, 1597,
    631      1642, 1641, 1598, 1599, 1602, 1636, 1635, 1633, 1422, 1421,
    632      1205, 1201,  946, 1605, 1610,  910, 1603, 1607,  768, 1613,
    633      1618, 1619,  723,  605,  503,  370, 1609, 1620, 1623, 1624,
    634      1625,  338,  337, 1627,  290,  251, 1630,  200,  196, 1631,
    635      1632, 1637, 1633,  136, 2782, 1707, 1720, 1733, 1743, 1753,
    636      1766, 1776, 1789, 1802, 1815, 1823, 1833, 1840, 1847, 1854,
    637      1861, 1868, 1875, 1882, 1889, 1896, 1909, 1916, 1920, 1928,
    638 
    639      1931, 1938, 1945, 1952, 1955, 1962, 1968, 1981, 1994, 2001,
    640      2008, 2015, 2022, 2025, 2032, 2035, 2042, 2045, 2052, 2055,
    641      2062, 2065, 2072, 2075, 2082, 2085, 2092, 2100, 2107, 2114,
    642      2121, 2128, 2131, 2138, 2141, 2148, 2151, 2158, 2164, 2177,
    643      2184, 2191, 2194, 2201, 2204, 2211, 2214, 2221, 2224, 2231,
    644      2234, 2241, 2244, 2251, 2258, 2261, 2268, 2271, 2278, 2285,
    645      2292, 2295, 2302, 2305, 2312, 2315, 2322, 2325, 2332, 2335,
    646      2342, 2348, 2361, 2368, 2375, 2378, 2385, 2388, 2395, 2398,
    647      2405, 2408, 2415, 2418, 2425, 2428, 2435, 2438, 2445, 2448,
    648      2455, 2462, 2465, 2472, 2475, 2482, 2485, 2492, 2495, 2498,
    649 
    650      2504, 2511, 2520, 2527, 2534, 2537, 2544, 2547, 2550, 2556,
    651      2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, 2591, 2594,
    652      2601, 2604, 2607, 2610, 2613, 2623, 2630, 2633, 2636, 2639,
    653      2646, 2653, 2660, 2663, 2670, 2677, 2684, 2691, 2698, 2705,
    654      2712, 2719, 2726, 2733, 2740, 2747, 2754, 2761, 2768
     541        0,   83, 2268, 2265,   93,    0,  175,  176,  177,  178,
     542     2279, 2798,  189, 2798,  195,   54, 2798, 2226,   59,  171,
     543     2798, 2798, 2798,   55,  186, 2798,  189,  187,  202,  214,
     544      272,    0, 2244, 2798,  214, 2243,  150,  340,  153,  222,
     545     2798,  157, 2798,  215,  224, 2798,  207,  181,  221,  249,
     546      235,  289,  155,  255,  218,  231,  206,  266,  256,  323,
     547      259,  192, 2798,  252, 2798, 2238,  377,  342, 2798, 2249,
     548     2798, 2218,  241, 2798,    0, 2798,  421,    0, 2798,  393,
     549     2798,  399,  405, 2798,  492, 2216,  276, 2798, 2798, 2798,
     550     2798, 2798, 2231, 2798, 2228, 2798, 2798, 2240,  552, 2798,
     551
     552     2257, 2798,  413,  393,  437,  493,  377,  318,  195,  430,
     553      382,    0,  384,  321,  196,  427, 2798, 2798, 2798, 2226,
     554     2798, 2798, 2798, 2223, 2220,  304,  342, 2235,  381,  435,
     555      422,  400,  455,  440,  494, 2216,  469, 2165,  497, 2193,
     556     2798,  432, 2798, 2798,  521, 2187, 2186, 2798, 2159,  470,
     557      414,  436,  325,  254,  463,  480,  486,  563,  274,  482,
     558      484,  487,  495,  234,  489,  341,  488,  490,  377,  507,
     559      497,  501,  503,  514,  515,  506,  529, 2186,  531,  537,
     560      505,  518,  536,  534,  538,  559,  575,  571,  577,  574,
     561      599,  590,  581,  592, 2798, 2798,  662,  668, 2232,  674,
     562
     563     2798,  680, 2798, 2180,  583, 2176, 2175,    0,  671, 2798,
     564     2798,  686, 2173, 2170, 2167,    0, 2189,  568,  615,  618,
     565      695,  694,  627,  654,  628,  683, 2186,  686,  687, 2163,
     566     2160, 2798,    0,  680,  712,  703,  682, 2157, 2208, 2798,
     567      711,    0,  702,  756,  762,  795,  774,  604, 2798, 2167,
     568     2141,    0,  803, 2167,  780,  684, 2798, 2143, 2118,  804,
     569     2798, 2798, 2148, 2798, 2798,  724,  728, 2126, 2126,  694,
     570     2122, 2120, 2117,    0, 2114,    0, 2085,  679,  682,  696,
     571      423,  722,  757,  703,  758,  741,  799,  764,  725,  789,
     572      697,  774,  788,  792,  760,  784,  795, 2115,  809,  797,
     573
     574      816,  196,  804,  812,  817,  823,  829,  632,  831,  832,
     575      836,  819,  837,  833,  840,  844,  847,  843,  853,  851,
     576     2113,  854,  855,  856,  859,  857,  858,  860,  861,  867,
     577      863,  866,  868,  873,  874, 2110,  877,  716,  882,  883,
     578      884,  888,  894,  947,  944, 2104, 2103, 2102,    0, 2100,
     579        0,  934,  939, 2097,    0, 2094,    0, 2093,    0, 2113,
     580     2798,  934,  935, 2092, 2087,    0, 2086,    0, 2798,  947,
     581      967,  958, 2798,  973,  988, 1012, 2085, 2798, 2798,  932,
     582      962,  999,  975, 1033,  912, 1020,  956, 2798, 2798, 2083,
     583     2080, 2079,    0, 2078,    0, 2076,    0, 2073,    0, 2798,
     584
     585      956,  936,  978,  950,  994, 1010, 1016,  973, 1019, 1020,
     586     1024, 1012, 1029, 1030, 1026, 1027, 1032, 1038, 1044, 1031,
     587     1051, 1049, 1041, 2072, 1055, 2068, 1054, 2066, 1057, 1058,
     588     1059,  974, 1061, 1064, 1065, 2064, 1070, 2061, 1063, 1071,
     589     1073, 1075, 1076, 1081, 1077, 2059, 1082, 2057, 1084, 1087,
     590     1089, 1092, 1094, 1095, 1100, 1090, 1098, 1106, 1115, 1102,
     591     1103, 1116, 1104, 1118, 2054, 1119, 1123, 1169, 2048,    0,
     592     2047,    0, 2046,    0, 2044,    0, 1164, 2041,    0, 2038,
     593        0, 2037, 2036, 2034,    0, 2031,    0, 1171, 2028, 1177,
     594     1137, 1197, 1164, 1112, 1131, 2798, 1216, 1230, 1256, 2039,
     595
     596     2014, 2024, 2021,    0, 2018,    0, 2017,    0, 2016,    0,
     597     2014,    0, 2011,    0, 1159, 1164, 2011, 1160, 1178, 1182,
     598     1133, 1194, 1208, 1185,  541, 1199, 1197, 1215, 1193, 1209,
     599     1211, 1225, 1210, 1254, 1235, 1237, 1239, 1241, 1242, 2010,
     600     1252, 1248, 2009, 1249, 1253, 1255, 1251, 2007, 1258, 1261,
     601     1262, 1264, 2004, 1265, 1271, 2001, 1263, 1273, 2000, 1269,
     602     1275, 1277, 1999, 1281, 1283, 1285, 1284, 1286, 1296, 1997,
     603     1295, 1287, 1994, 1299, 1300, 1991, 2039, 1986,    0, 1984,
     604        0, 1981,    0, 1980,    0, 1979,    0, 1977,    0, 1974,
     605        0, 1973,    0, 1336, 1346, 1369, 1357, 1972, 2798, 1375,
     606
     607     1311, 1347, 1313, 1970, 2798, 1937,    0, 1935,    0, 1934,
     608        0, 1931,    0,    0,    0, 1931,    0, 1353, 1354, 1305,
     609     1302, 1335, 1363, 1366, 1367, 1364,  586, 1370, 1365, 1374,
     610     1368, 1376, 1369, 1385, 1380, 1166, 1392, 1394, 1327, 1395,
     611     1396, 1399, 1930, 1398, 1400, 1401, 1929, 1927, 1924, 1403,
     612     1402, 1921, 1409, 1920, 1919, 1406, 1404, 1917, 1914, 1913,
     613     1912, 1910, 1907, 1416, 1417, 1906, 1419, 1405, 1954, 2798,
     614     1900,    0, 1897,    0,    0,    0, 1896,    0,    0,    0,
     615     2798,    0,    0,    0,    0, 1459, 1889, 2798, 2798, 1465,
     616     1885,    0, 1869,    0,    0,    0,    0, 1868, 1424, 1442,
     617
     618     1870, 1444, 1447, 1443, 1451, 1453, 1455, 1457, 1868, 1459,
     619     1460, 1476, 1461, 1463, 1494, 1477, 1478, 1504, 1483, 1482,
     620     1481, 1488, 1490, 1491, 1492, 1865, 1864, 1493, 1863, 1861,
     621     1497, 1496, 1499, 1858, 1500, 1502,    0,    0,    0, 1854,
     622     1853, 1851, 1550,    0, 1848, 1847, 1846, 1844, 1841, 1843,
     623     1842, 1840, 1837, 1507, 1513, 1505, 1514, 1509, 1515, 1528,
     624     1506, 1531, 1533, 1562, 1836, 1536, 1835, 1537, 1541, 1544,
     625     1549, 1542, 1543, 1833, 1830, 1829, 1828, 1550, 1826, 1823,
     626     1819, 1818, 1816, 1813, 1812, 1811, 1809, 1802, 1800, 1799,
     627     1796, 1795, 1551, 1797, 1554, 1556, 1555, 1559, 1560, 1561,
     628
     629     1795, 1565, 1592, 1568, 1778, 1569, 1576, 1577, 1584, 1570,
     630     1572, 1766, 1765, 1762, 1755, 1752, 1745, 1743, 1742, 1721,
     631     1720, 1719, 1712, 1710, 1712, 1582, 1587, 1595, 1590, 1589,
     632     1597, 1585, 1670, 1669, 1601, 1666, 1665, 1605, 1606, 1609,
     633     1660, 1659, 1655, 1654, 1651, 1650, 1649, 1593, 1610, 1611,
     634     1412, 1614, 1612, 1620, 1337, 1621, 1623, 1627, 1000,  928,
     635      896,  778, 1628, 1629, 1631, 1632, 1633, 1635,  709,  628,
     636     1637,  373,  338, 1639, 1640,  337,  257, 1641, 1643, 1645,
     637     1647, 1646, 1649, 1651,  200,  136, 2798, 1723, 1736, 1749,
     638     1759, 1769, 1782, 1792, 1805, 1818, 1831, 1839, 1849, 1856,
     639
     640     1863, 1870, 1877, 1884, 1891, 1898, 1905, 1912, 1925, 1932,
     641     1936, 1944, 1947, 1954, 1961, 1968, 1971, 1978, 1984, 1997,
     642     2010, 2017, 2024, 2031, 2038, 2041, 2048, 2051, 2058, 2061,
     643     2068, 2071, 2078, 2081, 2088, 2091, 2098, 2101, 2108, 2116,
     644     2123, 2130, 2137, 2144, 2147, 2154, 2157, 2164, 2167, 2174,
     645     2180, 2193, 2200, 2207, 2210, 2217, 2220, 2227, 2230, 2237,
     646     2240, 2247, 2250, 2257, 2260, 2267, 2274, 2277, 2284, 2287,
     647     2294, 2301, 2308, 2311, 2318, 2321, 2328, 2331, 2338, 2341,
     648     2348, 2351, 2358, 2364, 2377, 2384, 2391, 2394, 2401, 2404,
     649     2411, 2414, 2421, 2424, 2431, 2434, 2441, 2444, 2451, 2454,
     650
     651     2461, 2464, 2471, 2478, 2481, 2488, 2491, 2498, 2501, 2508,
     652     2511, 2514, 2520, 2527, 2536, 2543, 2550, 2553, 2560, 2563,
     653     2566, 2572, 2579, 2582, 2585, 2588, 2591, 2594, 2597, 2600,
     654     2607, 2610, 2617, 2620, 2623, 2626, 2629, 2639, 2646, 2649,
     655     2652, 2655, 2662, 2669, 2676, 2679, 2686, 2693, 2700, 2707,
     656     2714, 2721, 2728, 2735, 2742, 2749, 2756, 2763, 2770, 2777,
     657     2784
    655658    } ;
    656659
    657 static yyconst flex_int16_t yy_def[1050] =
     660static yyconst flex_int16_t yy_def[1062] =
    658661    {   0,
    659       875,    1,  876,  876,  875,    5,  877,  877,  878,  878,
    660       875,  875,  875,  875,  875,  875,  875,  879,  875,  875,
    661       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    662       875,   31,  875,  875,  875,  875,  875,  875,  880,  879,
    663       875,  875,  875,  875,  879,  875,  879,  879,  879,  879,
    664       879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
    665       879,  875,  875,  875,  875,  875,  881,  875,  875,  875,
    666       882,  875,  875,  883,  875,  875,  884,  875,  875,  875,
    667       875,  875,  875,  875,  879,  875,  875,  875,  875,  875,
    668       875,  875,  875,  875,  875,  875,  875,  875,  875,  885,
    669 
    670       875,   98,   30,  875,  875,  875,  875,  886,   30,  875,
    671        31,  875,  875,   31,  875,  875,  875,  875,  875,  875,
    672       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    673       875,  875,  875,  875,  875,  875,  875,  875,  887,  875,
    674       875,  875,  875,  879,  888,  889,  875,  875,  879,  879,
    675       879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
    676       879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
    677       879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
    678       879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
    679       879,  879,  875,  875,  875,  881,  881,  881,  875,  881,
    680 
    681       875,  882,  875,  890,  891,  883,  875,  875,  875,  875,
    682       892,  893,  894,  884,  875,  875,  875,  875,  875,  875,
    683       875,  875,  875,  875,  875,  875,  875,  895,  896,  875,
    684        98,  875,  875,  875,  875,   98,  897,  875,  875,  103,
    685       103,  875,  875,  875,  875,  875,  875,  875,  875,  898,
    686       899,  900,  875,  875,  875,  875,  875,  875,  875,  875,
    687       875,  875,  875,  875,  875,  875,  887,  875,  901,  902,
    688       903,  904,  905,  906,  875,  907,  907,  907,  907,  907,
    689       907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
    690       907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
    691 
    692       907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
    693       907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
    694       907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
    695       907,  907,  907,  907,  907,  907,  907,  907,  907,  908,
    696       909,  910,  911,  912,  913,  914,  915,  875,  875,  916,
    697       917,  918,  919,  920,  921,  875,  875,  875,  875,  875,
    698       922,  923,  924,  925,  875,  875,  875,  875,  875,  875,
    699       875,  367,  372,  875,  875,  926,  927,  928,  875,  875,
    700       875,  928,  875,  875,  875,  929,  930,  931,  932,  933,
    701       934,  935,  936,  937,  938,  875,  939,  939,  939,  939,
    702 
    703       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
    704       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
    705       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
    706       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
    707       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
    708       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
    709       939,  940,  941,  942,  943,  944,  945,  946,  947,  948,
    710       875,  949,  950,  951,  952,  953,  953,  954,  955,  956,
    711       957,  875,  482,  875,  958,  875,  958,  875,  875,  875,
    712       875,  875,  875,  875,  875,  959,  960,  961,  962,  963,
    713 
    714       964,  965,  966,  967,  968,  969,  970,  971,  972,  972,
    715       972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
    716       972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
    717       972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
    718       972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
    719       972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
    720       972,  972,  972,  972,  972,  972,  972,  972,  972,  973,
    721       974,  975,  976,  977,  978,  979,  980,  981,  982,  983,
    722       984,  985,  986,  987,  988,  989,  875,  875,  875,  875,
    723       990,  875,  589,  875,  875,  875,  593,  875,  991,  992,
    724 
    725       993,  994,  995,  996,  997,  998,  999, 1000, 1001, 1002,
    726      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    727      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    728      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    729      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    730      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    731      1001, 1001, 1003,  875, 1004, 1005, 1006, 1007, 1008, 1009,
    732      1010, 1011, 1012, 1013,  875, 1014, 1015, 1016, 1017,  875,
    733       680,  875,  875,  875, 1018, 1019, 1020, 1021, 1022, 1023,
    734      1024, 1025, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    735 
    736      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    737      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    738      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    739      1026, 1027, 1028, 1029, 1030, 1031, 1032,  875, 1033, 1018,
    740      1020, 1034, 1035, 1025, 1026, 1026, 1026, 1026, 1026, 1026,
    741      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    742      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    743      1026, 1026, 1026, 1026, 1026, 1036, 1037, 1030, 1038, 1031,
    744      1039, 1032, 1040, 1041, 1034, 1042, 1035, 1026, 1026, 1026,
    745      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    746 
    747      1026, 1026, 1026, 1026, 1026, 1026, 1043, 1036, 1044, 1037,
    748      1045, 1038, 1046, 1039, 1047, 1040, 1048, 1041, 1042, 1026,
    749      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    750      1026, 1026, 1026, 1026, 1026, 1049, 1043, 1044, 1045, 1046,
    751      1020, 1047, 1048, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    752      1026, 1026, 1026, 1026, 1049, 1020, 1026, 1026, 1026, 1026,
    753      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    754      1026, 1026, 1026, 1026,    0,  875,  875,  875,  875,  875,
    755       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    756       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    757 
    758       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    759       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    760       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    761       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    762       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    763       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    764       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    765       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    766       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    767       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    768 
    769       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    770       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    771       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    772       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    773       875,  875,  875,  875,  875,  875,  875,  875,  875
     662      887,    1,  888,  888,  887,    5,  889,  889,  890,  890,
     663      887,  887,  887,  887,  887,  887,  887,  891,  887,  887,
     664      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     665      887,   31,  887,  887,  887,  887,  887,  887,  892,  891,
     666      887,  887,  887,  887,  891,  887,  891,  891,  891,  891,
     667      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     668      891,  891,  887,  887,  887,  887,  887,  893,  887,  887,
     669      887,  894,  887,  887,  895,  887,  887,  896,  887,  887,
     670      887,  887,  887,  887,  887,  891,  887,  887,  887,  887,
     671      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     672
     673      897,  887,   99,   30,  887,  887,  887,  887,  898,   30,
     674      887,   31,  887,  887,   31,  887,  887,  887,  887,  887,
     675      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     676      887,  887,  887,  887,  887,  887,  887,  887,  887,  899,
     677      887,  887,  887,  887,  891,  900,  901,  887,  887,  891,
     678      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     679      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     680      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     681      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     682      891,  891,  891,  891,  887,  887,  887,  893,  893,  893,
     683
     684      887,  893,  887,  894,  887,  902,  903,  895,  887,  887,
     685      887,  887,  904,  905,  906,  896,  887,  887,  887,  887,
     686      887,  887,  887,  887,  887,  887,  887,  887,  887,  907,
     687      908,  887,   99,  887,  887,  887,  887,   99,  909,  887,
     688      887,  104,  104,  887,  887,  887,  887,  887,  887,  887,
     689      887,  910,  911,  912,  887,  887,  887,  887,  887,  887,
     690      887,  887,  887,  887,  887,  887,  887,  887,  899,  887,
     691      913,  914,  915,  916,  917,  918,  887,  919,  919,  919,
     692      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
     693      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
     694
     695      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
     696      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
     697      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
     698      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
     699      919,  919,  919,  920,  921,  922,  923,  924,  925,  926,
     700      927,  887,  887,  928,  929,  930,  931,  932,  933,  887,
     701      887,  887,  887,  887,  934,  935,  936,  937,  887,  887,
     702      887,  887,  887,  887,  887,  371,  376,  887,  887,  938,
     703      939,  940,  887,  887,  887,  940,  887,  887,  887,  941,
     704      942,  943,  944,  945,  946,  947,  948,  949,  950,  887,
     705
     706      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
     707      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
     708      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
     709      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
     710      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
     711      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
     712      951,  951,  951,  951,  951,  951,  951,  952,  953,  954,
     713      955,  956,  957,  958,  959,  960,  887,  961,  962,  963,
     714      964,  965,  965,  966,  967,  968,  969,  887,  488,  887,
     715      970,  887,  970,  887,  887,  887,  887,  887,  887,  887,
     716
     717      887,  971,  972,  973,  974,  975,  976,  977,  978,  979,
     718      980,  981,  982,  983,  984,  984,  984,  984,  984,  984,
     719      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
     720      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
     721      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
     722      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
     723      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
     724      984,  984,  984,  984,  984,  984,  985,  986,  987,  988,
     725      989,  990,  991,  992,  993,  994,  995,  996,  997,  998,
     726      999, 1000, 1001,  887,  887,  887,  887, 1002,  887,  596,
     727
     728      887,  887,  887,  600,  887, 1003, 1004, 1005, 1006, 1007,
     729     1008, 1009, 1010, 1011, 1012, 1013, 1014, 1013, 1013, 1013,
     730     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
     731     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
     732     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
     733     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
     734     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1015,  887,
     735     1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025,
     736      887, 1026, 1027, 1028, 1029,  887,  686,  887,  887,  887,
     737     1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1038,
     738
     739     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     740     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     741     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     742     1038, 1038, 1038, 1038, 1038, 1038, 1039, 1040, 1041, 1042,
     743     1043, 1044,  887, 1045, 1030, 1032, 1046, 1047, 1037, 1038,
     744     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     745     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     746     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     747     1048, 1049, 1042, 1050, 1043, 1051, 1044, 1052, 1053, 1046,
     748     1054, 1047, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     749
     750     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     751     1038, 1055, 1048, 1056, 1049, 1057, 1050, 1058, 1051, 1059,
     752     1052, 1060, 1053, 1054, 1038, 1038, 1038, 1038, 1038, 1038,
     753     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     754     1061, 1055, 1056, 1057, 1058, 1032, 1059, 1060, 1038, 1038,
     755     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     756     1061, 1032, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     757     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     758     1038, 1038, 1038, 1038, 1038, 1038,    0,  887,  887,  887,
     759      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     760
     761      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     762      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     763      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     764      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     765      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     766      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     767      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     768      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     769      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     770      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     771
     772      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     773      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     774      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     775      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     776      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     777      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     778      887
    774779    } ;
    775780
    776 static yyconst flex_int16_t yy_nxt[2867] =
     781static yyconst flex_int16_t yy_nxt[2883] =
    777782    {   0,
    778783       12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
     
    782787       18,   18,   40,   18,   18,   18,   18,   18,   40,   18,
    783788       41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
    784        51,   52,   53,   18,   54,   18,   55,   18,   18,   18,
    785        18,   56,   57,   58,   59,   60,   61,   18,   18,   18,
    786        62,   63,   64,   65,   66,   83,   91,   84,   84,   66,
    787        87,   88,   67,   70,   70,   70,   70,   70,   70,   70,
    788 
    789        70,   70,   70,   71,   70,   70,   70,   70,   70,   70,
    790        70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
    791        70,   70,   70,   70,   70,   70,   70,   70,   71,   71,
     789       51,   52,   53,   18,   54,   18,   55,   18,   18,   56,
     790       18,   57,   58,   59,   60,   61,   62,   18,   18,   18,
     791       63,   64,   65,   66,   67,   84,   92,   85,   85,   67,
     792       88,   89,   68,   71,   71,   71,   71,   71,   71,   71,
     793
     794       71,   71,   71,   72,   71,   71,   71,   71,   71,   71,
    792795       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
    793        71,   71,   71,   70,   72,   70,   70,   71,   73,   71,
    794        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
    795        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
    796        71,   71,   71,   70,   70,   70,   70,   75,   75,   78,
    797        78,  122,  123,   89,  140,   78,   78,   86,   75,   75,
    798        79,   80,   81,   81,   81,   79,   81,   80,   82,   82,
    799 
    800        82,   81,   90,   92,  141,  145,   86,   97,   94,   98,
    801        98,   98,   98,   98,   98,  250,  875,   93,   99,   84,
    802        95,   96,   84,  100,  176,  117,   76,   76,   76,   76,
    803       142,  146,   86,  101,  102,  143,  103,  103,  103,  103,
    804       104,  104,  118,   86,  119,  120,  147,   86,  148,  252,
    805       258,   86,  160,  105,  193,  192,  106,   86,   86,  149,
    806       150,  151,  107,  108,  152,  153,  181,  154,  109,   86,
    807       155,  156,   86,   86,  105,   86,  144,  161,  157,  158,
    808       110,  159,  204,  261,  162,  262,   86,  179,  107,  228,
    809       163,  108,  102,  180,  111,  111,  111,  111,  111,  111,
    810 
    811        86,  168,   86,  169,  194,   86,   86,   86,  205,  164,
    812        86,  105,  170,  165,  112,  229,  177,   86,  166,  186,
    813       113,  281,  167,  178,  269,   86,  114,  187,  191,  182,
    814       183,  142,  105,  261,  188,  262,  143,  284,  115,  184,
    815        86,   86,  185,  198,  199,  171,  113,  124,  198,  189,
    816       270,  125,  126,  172,  127,  173,  128,  129,  174,  130,
    817       248,  131,  175,  256,  200,  200,  200,  200,  200,  200,
    818       132,  133,  134,  261,   86,  262,   86,  144,  195,   80,
    819        81,   81,   81,  195,  249,  280,  196,  257,   86,   86,
    820       135,  190,   86,  136,   79,   80,   81,   81,   81,   79,
    821 
    822        81,   80,   81,   81,   81,   81,   81,   80,   82,   82,
    823        82,   81,  261,  305,  262,  240,  240,  240,  240,  246,
    824       137,  138,  207,  208,  875,  247,  254,  207,   86,  209,
    825       247,  261,  255,  262,  209,   98,   98,   98,   98,   98,
    826        98,  263,  875,  210,  210,  210,  210,  241,  246,  308,
    827       875,  247,  263,  261,  209,  262,  247,  102,  255,  104,
    828       104,  104,  104,  104,  104,   86,  261,  239,  262,  211,
    829       875,  261,  209,  262,   86,  255,  105,  209,  209,  875,
    830       276,  209,  209,   86,  253,  264,  261,  277,  262,  209,
    831       296,  242,  209,  254,  209,  212,  209,  105,  213,  215,
    832 
    833       261,  255,  262,  216,  217,  283,   86,  875,  218,  219,
    834       243,  220,  243,  221,   86,  244,  244,  244,  244,  244,
    835       244,   86,  222,  223,  224,  261,  265,  262,  142,  306,
    836        86,   86,  278,  143,   86,   86,  285,  286,  287,  279,
    837       288,  289,  225,   86,  290,  226,  291,  245,  282,   86,
    838        86,  292,  293,  294,   86,  295,  297,  875,  298,  301,
    839        86,   86,  307,   86,  299,  300,  309,  303,   86,   86,
    840       304,   86,  302,  227,  231,  231,  231,  231,  231,  231,
    841        86,   86,   86,  312,  310,  311,  313,   86,   86,   86,
    842       232,  233,   86,  234,  235,   86,  142,   86,  314,   86,
    843 
    844       321,  315,  330,   86,  320,   86,  236,  318,   86,  316,
    845       317,  232,  233,  232,  319,  325,  234,   86,  235,  322,
    846        86,   86,   86,  331,  333,  328,  332,  629,  326,  323,
    847       324,   86,  207,  208,  337,  335,  338,  207,  365,   86,
    848       329,  342,  334,  336,  339,  327,  195,   80,   81,   81,
    849        81,  195,  198,  199,  196,   86,   86,  198,  198,  199,
    850       356,  365,  357,  198,  340,  199,  356,  343,  357,  340,
    851       356,  341,  357,  200,  200,  200,  200,  200,  200,  200,
    852       200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
    853       200,  348,  348,  348,  348,  357,  357,  356,   86,  357,
    854 
    855       358,  356,  356,  357,  357,  356,  359,  357,  356,  356,
    856       357,  357,  356,  356,  357,  357,  369,  365,  403,  366,
    857       369,  366,   86,  349,  367,  367,  367,  367,  367,  367,
    858       875,  232,  233,   86,  234,  235,  261,  369,  262,  369,
    859       365,  261,  405,  262,  369,  104,  104,  104,  104,  104,
    860       104,  398,  232,  233,  232,  374,  368,  234,   86,  235,
    861        86,   86,  105,   86,  371,  244,  244,  244,  244,  244,
    862       244,  384,  386,  397,   86,   86,  399,  253,  401,  400,
    863       402,  374,   86,  105,  372,  372,  372,  372,  372,  372,
    864       104,  104,  104,  104,  104,  104,  377,  384,  387,   86,
    865 
    866       232,   86,   86,  234,  235,  243,  404,  243,  411,   86,
    867       244,  244,  244,  244,  244,  244,  373,  410,  379,   86,
    868       380,  232,  253,  232,  381,  409,  234,  419,  235,   86,
    869       382,  111,  111,  111,  111,  111,  111,   86,   86,   86,
    870        86,   86,  383,   86,  412,  415,  380,   86,  416,   86,
    871       381,   86,  406,   86,  413,  414,  417,   86,  407,  408,
    872       422,   86,  421,  258,   86,  420,   86,   86,  418,  424,
    873        86,  423,  428,   86,  426,  427,  430,   86,  429,  425,
    874        86,   86,   86,   86,   86,  431,  432,  433,   86,  437,
    875        86,  435,   86,  438,   86,  439,  434,   86,  436,   86,
    876 
    877        86,   86,   86,   86,   86,   86,   86,  443,   86,   86,
    878       444,  441,  440,  446,   86,  442,  445,  451,   86,   86,
    879       142,  450,   86,   86,  447,  449,  448,  456,  452,   86,
    880        86,  459,  453,   86,  494,  460,  454,  455,  340,  199,
    881       457,  199,  458,  340,  356,  341,  357,  197,  461,  209,
    882       209,  209,  209,  348,  348,  348,  348,  356,  495,  357,
    883        86,   86,   86,   86,  367,  367,  367,  367,  367,  367,
    884       366,  509,  366,  514,   86,  367,  367,  367,  367,  367,
    885       367,  471,  482,  482,  482,  482,  482,  482,  231,  231,
    886       231,  231,  231,  231,   86,   86,  516,   86,  232,  486,
    887 
    888       875,  234,  235,  240,  240,  240,  240,  104,  104,  487,
    889       489,  510,  486,  512,  483,  377,  490,  545,  490,  232,
    890       370,  232,  488,   86,  234,  486,  235,  372,  372,  372,
    891       372,  372,  372,   86,  875,  371,  489,  379,  486,  380,
    892        86,  525,  490,  381,  490,  491,  529,  491,  511,  382,
    893       492,  492,  492,  492,  492,  492,  379,   86,  380,  373,
    894        86,  383,  381,   86,   86,  380,  513,   86,  496,  381,
    895        86,   86,  515,  517,   86,   86,  519,   86,   86,   86,
    896       383,   86,  493,  518,  380,   86,  526,  521,  381,  520,
    897        86,  522,  523,  524,  527,   86,  531,  532,  530,   86,
    898 
    899        86,  528,   86,   86,   86,  533,   86,   86,   86,  534,
    900        86,  535,  538,  541,   86,  543,  539,   86,   86,   86,
    901        86,  536,   86,  542,  537,  544,   86,  540,   86,  551,
    902        86,   86,  547,   86,  549,   86,  546,   86,   86,   86,
    903       548,   86,  550,  552,   86,   86,  558,   86,   86,   86,
    904       555,  553,  554,  556,  560,  561,  559,  557,   86,   86,
    905       567,  566,   86,  716,  563,  562,  199,  564,   86,  568,
    906       486,  569,  570,  209,  209,  209,  209,  565,  482,  482,
    907       482,  482,  482,  482,  372,  372,  372,  372,  372,  372,
    908       616,   86,  486,  486,  232,  592,  486,  234,  235,  588,
    909 
    910        86,  588,  487,  591,  589,  589,  589,  589,  589,  589,
    911       483,  614,   86,  612,   86,  232,  484,  232,  486,  486,
    912       234,  592,  235,  492,  492,  492,  492,  492,  492,  611,
    913        86,   86,   86,   86,  621,  620,  590,  593,  593,  593,
    914       593,  593,  593,   86,  615,  613,  617,   86,  618,   86,
    915        86,   86,   86,  594,  626,  875,  595,  596,  491,  856,
    916       491,  619,  622,  492,  492,  492,  492,  492,  492,  597,
    917       623,   86,   86,  624,  594,   86,  594,   86,   86,  595,
    918       625,  596,   86,  627,   86,   86,  630,   86,  628,  635,
    919       634,   86,   86,  633,   86,   86,  636,   86,   86,  632,
    920 
    921       631,   86,   86,  641,   86,   86,   86,   86,   86,  638,
    922       642,   86,  639,  640,   86,   86,  644,  637,   86,  643,
    923       645,  646,   86,  647,  648,  652,   86,  651,   86,  650,
    924        86,  649,   86,  656,  653,  658,   86,  655,  654,   86,
    925        86,   86,   86,   86,  657,  659,   86,   86,  682,  660,
    926       682,   86,  696,  695,  700,  662,  749,  661,  482,  482,
    927       482,  482,  482,  482,  589,  589,  589,  589,  589,  589,
    928       588,  682,  588,  682,   86,  589,  589,  589,  589,  589,
    929       589,  593,  593,  593,  593,  593,  593,  697,   86,   86,
    930       587,  680,  680,  680,  680,  680,  680,  683,   86,   86,
    931 
    932        86,  683,   86,  693,   86,  698,   86,  594,  701,  703,
    933       595,  596,  699,  597,   86,   86,  694,  704,  683,  702,
    934       683,  705,   86,  681,   86,  683,   86,  712,  594,  706,
    935       594,   86,   86,  595,  710,  596,   86,  707,   86,  708,
    936        86,   86,   86,  711,   86,   86,  709,  713,   86,  715,
    937       718,   86,   86,   86,   86,   86,  714,   86,   86,   86,
    938       717,  722,  726,   86,  719,  723,  727,  720,   86,   86,
    939       721,   86,  725,  729,   86,  875,  875,  728,  724,  745,
    940       730,  748,   86,  747,  731,  680,  680,  680,  680,  680,
    941       680,  593,  593,  593,  593,  593,  593,   86,   86,   86,
    942 
    943        86,  594,  750,  751,  595,  596,   86,  746,   86,  752,
    944        86,   86,  755,  759,  754,   86,  753,  681,  757,  756,
    945       762,   86,  594,  684,  594,   86,   86,  595,  760,  596,
    946       761,   86,  758,   86,  763,   86,   86,   86,   86,  764,
    947        86,   86,   86,  765,   86,   86,  766,  769,   86,   86,
    948       767,   86,   86,   86,  768,   86,   86,  774,  790,   86,
    949       775,   86,  771,  770,   86,  792,  772,  791,   86,  773,
    950       680,  680,  680,  680,  680,  680,  788,   86,  789,   86,
    951       796,  794,  793,  798,   86,   86,   86,  799,  800,   86,
    952        86,   86,  797,  801,  795,   86,   86,   86,  802,  803,
    953 
    954        86,   86,  738,   86,  804,   86,  823,   86,   86,   86,
    955        86,  825,  826,  805,  806,  828,   86,   86,   86,  822,
    956       829,  821,   86,   86,  820,  827,  831,  824,   86,   86,
    957        86,  832,   86,   86,  834,   86,  846,   86,  830,  833,
    958        86,  847,  845,  844,   86,  835,   86,  849,   86,   86,
    959        86,  851,  852,   86,   86,  848,   86,  859,   86,  853,
    960        86,   86,  854,  850,   86,  857,  858,  861,  860,   86,
    961        86,   86,  862,  863,   86,   86,   86,  866,   86,  868,
    962       864,   86,   86,   86,   86,  867,  865,  875,   86,  875,
    963       855,  871,   86,   86,  874,   86,   86,   86,  875,  875,
    964 
    965       869,  843,  870,  875,  842,  872,  873,   68,   68,   68,
    966        68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
    967        74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
    968        74,   74,   74,   77,   77,   77,   77,   77,   77,   77,
    969        77,   77,   77,   77,   77,   77,   85,  875,  840,   85,
    970       875,   85,   85,   85,   85,   85,  139,  839,  875,  838,
    971       139,  139,  139,  139,  139,  139,  197,  197,  197,  197,
    972       197,  197,  197,  197,  197,  197,  197,  197,  197,  202,
    973       875,  837,  202,   86,  202,  202,  202,  202,  202,  206,
    974        86,  206,  206,   86,  206,  206,  206,  206,  206,  206,
    975 
    976       875,  206,  214,  819,  875,  214,  214,  214,  214,  214,
    977       214,  214,  214,  818,  214,  237,  237,  237,  237,  237,
    978       237,  237,  237,  237,  237,  237,  237,  237,  251,  251,
    979       816,  251,  875,  814,  875,  251,  267,  812,  875,  267,
    980       810,  267,  267,  267,  267,  267,  271,  808,  271,   86,
    981        86,   86,  271,  273,   86,  273,   86,   86,   86,  273,
    982       344,   86,  344,   86,   86,   86,  344,  346,   86,  346,
    983       875,  787,  785,  346,  350,  875,  350,  875,  782,  780,
    984       350,  352,  778,  352,   86,   86,   86,  352,  354,   86,
    985       354,   86,   86,   86,  354,  361,   86,  361,  744,  741,
    986 
    987       740,  361,  363,  738,  363,  203,  734,  733,  363,  237,
    988       237,  237,  237,  237,  237,  237,  237,  237,  237,  237,
    989       237,  237,  376,  664,  376,  378,  378,   86,  378,  378,
    990       378,   86,  378,  251,  251,   86,  251,  388,   86,  388,
    991        86,   86,   86,  388,  390,   86,  390,   86,   86,   86,
    992       390,  392,   86,  392,   86,   86,   86,  392,  271,  691,
    993       271,  394,  690,  394,  688,  686,  684,  394,  273,  591,
    994       273,   85,  679,  678,   85,  676,   85,   85,   85,   85,
    995        85,  197,  197,  197,  197,  197,  197,  197,  197,  197,
    996       197,  197,  197,  197,  462,  462,  462,  462,  462,  462,
    997 
    998       462,  462,  462,  462,  462,  462,  462,  463,  674,  463,
    999       672,  670,  668,  463,  465,  666,  465,  664,   86,   86,
    1000       465,  467,   86,  467,   86,   86,   86,  467,  344,   86,
    1001       344,  469,   86,  469,   86,  610,  608,  469,  346,  606,
    1002       346,  472,  604,  472,  602,  600,  496,  472,  350,  598,
    1003       350,  474,  598,  474,  587,  586,  584,  474,  352,  477,
    1004       352,  476,  477,  476,  582,  580,  578,  476,  354,  576,
    1005       354,  478,  574,  478,  572,   86,   86,  478,  361,   86,
    1006       361,  480,   86,  480,   86,   86,   86,  480,  363,   86,
    1007       363,  485,  508,  485,  506,  485,  504,  485,  376,  502,
    1008 
    1009       376,  500,  376,  498,  376,  378,  378,  484,  378,  378,
    1010       378,  481,  378,  497,  479,  497,  357,  357,  477,  497,
    1011       499,  475,  499,  473,  470,  468,  499,  501,  466,  501,
    1012       464,   86,   86,  501,  388,   86,  388,  503,  396,  503,
    1013       395,  393,  391,  503,  390,  389,  390,  505,  268,  505,
    1014       263,  262,  385,  505,  392,  385,  392,  507,  250,  507,
    1015       375,  375,  238,  507,  394,  370,  394,   85,  364,  362,
    1016        85,  360,   85,   85,   85,   85,   85,  462,  462,  462,
    1017       462,  462,  462,  462,  462,  462,  462,  462,  462,  462,
    1018       571,  356,  571,  355,  353,  351,  571,  463,  347,  463,
    1019 
    1020       573,  345,  573,  203,  199,   86,  573,  465,  275,  465,
    1021       575,  274,  575,  272,  268,  263,  575,  467,  266,  467,
    1022       577,  263,  577,  261,  260,  259,  577,  469,  238,  469,
    1023       579,  230,  579,   84,   84,   86,  579,  472,  203,  472,
    1024       581,  201,  581,   84,  121,  116,  581,  474,   86,  474,
    1025       476,  875,  476,   69,   69,  875,  476,  583,  875,  583,
    1026       875,  875,  875,  583,  478,  875,  478,  585,  875,  585,
    1027       875,  875,  875,  585,  480,  875,  480,  485,  875,  485,
    1028       875,  485,  875,  485,  378,  875,  378,  875,  875,  875,
    1029       378,  599,  875,  599,  875,  875,  875,  599,  497,  875,
    1030 
    1031       497,  601,  875,  601,  875,  875,  875,  601,  499,  875,
    1032       499,  603,  875,  603,  875,  875,  875,  603,  501,  875,
    1033       501,  605,  875,  605,  875,  875,  875,  605,  503,  875,
    1034       503,  607,  875,  607,  875,  875,  875,  607,  505,  875,
    1035       505,  609,  875,  609,  875,  875,  875,  609,  507,  875,
    1036       507,   85,  875,  875,   85,  875,   85,   85,   85,   85,
    1037        85,  663,  663,  663,  663,  663,  663,  663,  663,  663,
    1038       663,  663,  663,  663,  665,  875,  665,  875,  875,  875,
    1039       665,  571,  875,  571,  667,  875,  667,  875,  875,  875,
    1040       667,  573,  875,  573,  669,  875,  669,  875,  875,  875,
    1041 
    1042       669,  575,  875,  575,  671,  875,  671,  875,  875,  875,
    1043       671,  577,  875,  577,  673,  875,  673,  875,  875,  875,
    1044       673,  579,  875,  579,  675,  875,  675,  875,  875,  875,
    1045       675,  581,  875,  581,  677,  875,  677,  875,  875,  875,
    1046       677,  583,  875,  583,   85,  875,   85,  875,  875,  875,
    1047        85,  585,  875,  585,  485,  875,  485,  875,  875,  875,
    1048       485,  685,  875,  685,  875,  875,  875,  685,  599,  875,
    1049       599,  687,  875,  687,  875,  875,  875,  687,  601,  875,
    1050       601,  689,  875,  689,  875,  875,  875,  689,  603,  875,
    1051       603,  139,  875,  139,  875,  875,  875,  139,  605,  875,
    1052 
    1053       605,  692,  875,  692,  607,  875,  607,   85,  875,  875,
    1054        85,  875,   85,   85,   85,   85,   85,  609,  875,  609,
    1055       663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
    1056       663,  663,  663,  732,  875,  732,  875,  875,  875,  732,
    1057       665,  875,  665,  202,  875,  202,  875,  875,  875,  202,
    1058       667,  875,  667,  735,  875,  735,  669,  875,  669,  202,
    1059       875,  875,  202,  875,  202,  202,  202,  202,  202,  671,
    1060       875,  671,  736,  875,  736,  673,  875,  673,  675,  875,
    1061       675,  737,  875,  737,  677,  875,  677,   85,  875,   85,
    1062       739,  875,  739,  875,  875,  875,  739,  685,  875,  685,
    1063 
    1064       267,  875,  267,  875,  875,  875,  267,  687,  875,  687,
    1065       742,  875,  742,  689,  875,  689,  139,  875,  139,  743,
    1066       875,  743,  875,  875,  875,  743,   85,  875,  875,   85,
    1067       875,   85,   85,   85,   85,   85,  776,  875,  776,  732,
    1068       875,  732,  202,  875,  202,  777,  875,  777,  875,  875,
    1069       875,  777,  779,  875,  779,  875,  875,  875,  779,  781,
    1070       875,  781,  875,  875,  875,  781,  783,  875,  783,  784,
    1071       875,  784,  875,  875,  875,  784,  786,  875,  786,  875,
    1072       875,  875,  786,  807,  875,  807,  875,  875,  875,  807,
    1073       809,  875,  809,  875,  875,  875,  809,  811,  875,  811,
    1074 
    1075       875,  875,  875,  811,  813,  875,  813,  875,  875,  875,
    1076       813,  815,  875,  815,  875,  875,  875,  815,  817,  875,
    1077       817,  875,  875,  875,  817,  609,  875,  609,  875,  875,
    1078       875,  609,  836,  875,  836,  875,  875,  875,  836,  671,
    1079       875,  671,  875,  875,  875,  671,  675,  875,  675,  875,
    1080       875,  875,  675,   85,  875,   85,  875,  875,  875,   85,
    1081       841,  875,  841,  875,  875,  875,  841,  139,  875,  139,
    1082       875,  875,  875,  139,  202,  875,  202,  875,  875,  875,
    1083       202,   11,  875,  875,  875,  875,  875,  875,  875,  875,
    1084       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1085 
    1086       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1087       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1088       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1089       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1090       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1091       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1092       875,  875,  875,  875,  875,  875
     796       71,   71,   71,   71,   71,   71,   71,   71,   72,   72,
     797       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
     798       72,   72,   72,   71,   73,   71,   71,   72,   74,   72,
     799       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
     800       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
     801       72,   72,   72,   71,   71,   71,   71,   76,   76,   79,
     802       79,  123,  124,   90,  141,   79,   79,   87,   76,   76,
     803       80,   81,   82,   82,   82,   80,   82,   81,   83,   83,
     804
     805       83,   82,   91,   93,  142,  146,   87,   98,   95,   99,
     806       99,   99,   99,   99,   99,  252,  887,   94,  100,   85,
     807       96,   97,   85,  101,  177,  118,   77,   77,   77,   77,
     808      143,  147,   87,  102,  103,  144,  104,  104,  104,  104,
     809      105,  105,  119,   87,  120,  121,  148,   87,  149,  254,
     810      260,   87,  161,  106,  427,  194,  107,   87,   87,  150,
     811      151,  152,  108,  109,  153,  154,  183,  155,  110,   87,
     812      156,  157,   87,   87,  106,   87,  145,  162,  158,  159,
     813      111,  160,   87,  195,  163,   87,   87,  180,  108,  206,
     814      164,  109,  103,  181,  112,  112,  112,  112,  112,  112,
     815
     816       87,  169,  305,  170,  182,   87,   87,   87,   87,  165,
     817       87,  106,  171,  166,  113,  207,  178,   87,  167,  188,
     818      114,  283,  168,  179,  230,   87,  115,  189,  193,  184,
     819      185,  143,  106,  196,  190,  263,  144,  264,  116,  186,
     820       87,  298,  187,  200,  201,  172,  114,  125,  200,  191,
     821      231,  126,  127,  173,  128,  174,  129,  130,  175,  131,
     822      250,  132,  176,  258,  202,  202,  202,  202,  202,  202,
     823      133,  134,  135,  263,   87,  264,   87,  145,  197,   81,
     824       82,   82,   82,  197,  251,  282,  198,  259,   87,   87,
     825      136,  192,   87,  137,   80,   81,   82,   82,   82,   80,
     826
     827       82,   81,   82,   82,   82,   82,   82,   81,   83,   83,
     828       83,   82,  263,  307,  264,  242,  242,  242,  242,  248,
     829      138,  139,  209,  210,   87,  249,  256,  209,   87,  211,
     830      249,  263,  257,  264,  211,   99,   99,   99,   99,   99,
     831       99,  265,  887,  212,  212,  212,  212,  243,  248,  310,
     832      887,  249,  265,  263,  211,  264,  249,  103,  257,  105,
     833      105,  105,  105,  105,  105,   87,  263,  241,  264,  213,
     834      887,  263,  211,  264,   87,  257,  106,  211,  211,  887,
     835      271,  211,  211,  280,  255,  266,  263,   87,  264,  211,
     836      404,  244,  211,  256,  211,  214,  211,  106,  215,  217,
     837
     838      263,  257,  264,  218,  219,  281,  272,  887,  220,  221,
     839      245,  222,  245,  223,   87,  246,  246,  246,  246,  246,
     840      246,   87,  224,  225,  226,  263,  267,  264,  263,  143,
     841      264,   87,  284,   87,  144,   87,  278,   87,   87,   87,
     842       87,   87,  227,  279,  300,  228,   87,  247,   87,  286,
     843      306,  303,   87,  285,   87,  299,   87,   87,   87,  301,
     844      302,  323,  308,  311,  304,   87,   87,  314,  309,   87,
     845      313,  315,   87,  229,  233,  233,  233,  233,  233,  233,
     846       87,  312,   87,  316,  318,   87,  317,   87,   87,   87,
     847      234,  235,   87,  236,  237,  627,  324,  320,  325,  360,
     848
     849      329,  361,  319,  328,  321,  322,  238,  143,  326,  327,
     850       87,  234,  235,  234,   87,  331,  236,  330,  237,  287,
     851      288,  289,   87,  290,  291,   87,   87,  292,   87,  293,
     852      332,  346,   87,  335,  294,  295,  296,   87,  297,  333,
     853      709,   87,  334,   87,  337,  341,  360,  342,  361,  360,
     854       87,  361,  378,  338,  339,  336,  343,  347,  360,  360,
     855      361,  361,  340,  197,   81,   82,   82,   82,  197,  200,
     856      201,  198,  209,  210,  200,  200,  201,  209,  378,   87,
     857      200,  344,  201,   87,  362,  360,  344,  361,  345,  434,
     858      202,  202,  202,  202,  202,  202,  202,  202,  202,  202,
     859
     860      202,  202,  202,  202,  202,  202,  202,  202,  352,  352,
     861      352,  352,  361,  361,  360,  363,  361,  360,  360,  361,
     862      361,  369,  887,  369,  143,  360,  360,  361,  361,  370,
     863       87,  370,  388,   87,  371,  371,  371,  371,  371,  371,
     864      353,  373,  390,  401,  369,  373,  369,   87,   87,  234,
     865      235,  402,  236,  237,   87,  263,  375,  264,  388,  263,
     866       87,  264,  373,  416,  373,  403,  372,   87,  391,  373,
     867      234,  235,  234,   87,  407,  236,   87,  237,  105,  105,
     868      105,  105,  105,  105,  246,  246,  246,  246,  246,  246,
     869      405,  245,   87,  245,  414,  106,  246,  246,  246,  246,
     870
     871      246,  246,  105,  105,  105,  105,  105,  105,   87,   87,
     872      255,   87,  409,  406,  408,   87,  106,  376,  376,  376,
     873      376,  376,  376,  381,  421,   87,  112,  112,  112,  112,
     874      112,  112,  887,  234,  255,   87,  236,  237,  413,   87,
     875       87,  417,  418,   87,  419,  383,   87,  384,   87,  377,
     876       87,  385,  420,  425,  234,   87,  234,  386,  260,  236,
     877       87,  237,  422,   87,  423,  410,  415,   87,   87,  387,
     878       87,  411,  412,  384,   87,  428,  426,  385,  424,  432,
     879       87,  429,   87,   87,   87,  433,  438,   87,   87,  430,
     880      431,   87,  436,  437,   87,   87,  441,  439,   87,  440,
     881
     882      442,  435,   87,  443,   87,   87,   87,   87,   87,   87,
     883       87,   87,   87,  445,   87,  447,  448,   87,   87,   87,
     884      444,  449,  446,  451,   87,   87,  450,  456,   87,  455,
     885      452,  454,  453,   87,   87,   87,  457,  462,  461,   87,
     886      458,  459,  460,  465,  466,   87,  201,  464,  344,  201,
     887      887,  463,  199,  344,  500,  345,  211,  211,  211,  211,
     888      467,  352,  352,  352,  352,  360,  360,  361,  361,  371,
     889      371,  371,  371,  371,  371,  370,  492,  370,  501,   87,
     890      371,  371,  371,  371,  371,  371,  493,   87,  477,  488,
     891      488,  488,  488,  488,  488,  233,  233,  233,  233,  233,
     892
     893      233,   87,  492,  516,  496,  234,  492,   87,  236,  237,
     894      242,  242,  242,  242,  105,  105,  494,  495,  515,  381,
     895      518,  489,  495,  496,   87,   87,  234,  374,  234,   87,
     896      496,  236,  492,  237,  376,  376,  376,  376,  376,  376,
     897      887,  383,  375,  384,  517,   87,  522,  385,  545,  496,
     898      497,   87,  497,  386,  519,  498,  498,  498,  498,  498,
     899      498,   87,  383,   87,  384,  387,  377,   87,  385,  384,
     900       87,   87,  520,  385,  502,   87,  521,   87,   87,  523,
     901       87,   87,   87,   87,  524,  526,  387,  499,  532,   87,
     902      384,  525,   87,  527,  385,   87,  531,  528,  529,  530,
     903
     904       87,  535,   87,  536,  533,   87,   87,  539,   87,   87,
     905       87,  534,   87,  537,   87,   87,   87,  541,  546,  538,
     906      540,   87,   87,  544,   87,  548,   87,   87,   87,  542,
     907      547,  543,   87,   87,  550,   87,  549,  556,   87,  552,
     908       87,   87,  554,   87,  551,   87,   87,  559,  553,   87,
     909      557,   87,  555,   87,   87,   87,  492,   87,  558,  565,
     910      564,  560,  566,  561,  567,  562,   87,   87,  563,   87,
     911       87,  201,  573,  568,   87,  571,  570,  577,  569,  599,
     912      574,  492,  492,  576,   87,  572,  211,  211,  211,  211,
     913      718,  493,  575,  488,  488,  488,  488,  488,  488,  376,
     914
     915      376,  376,  376,  376,  376,  599,  623,  492,  492,  234,
     916       87,   87,  236,  237,  595,   87,  595,   87,  598,  596,
     917      596,  596,  596,  596,  596,  489,  620,  618,  619,   87,
     918      234,  490,  234,   87,  492,  236,   87,  237,  498,  498,
     919      498,  498,  498,  498,   87,   87,  622,  626,   87,  621,
     920       87,  597,  600,  600,  600,  600,  600,  600,  624,   87,
     921       87,   87,   87,  629,  625,  631,   87,  633,  601,  632,
     922      628,  602,  603,  497,  635,  497,   87,  636,  498,  498,
     923      498,  498,  498,  498,  604,  630,   87,  634,   87,  601,
     924       87,  601,   87,   87,  602,  637,  603,  642,  641,   87,
     925
     926       87,  640,   87,   87,   87,   87,   87,  639,  643,   87,
     927      638,  647,   87,   87,   87,   87,   87,  644,  648,  645,
     928       87,  646,   87,  654,   87,  650,   87,  653,   87,  649,
     929      651,  652,   87,  655,   87,   87,   87,   87,   87,  657,
     930      659,  664,  656,  661,  660,  658,   87,   87,  666,  663,
     931       87,   87,  688,   87,  688,  665,   87,  662,  488,  488,
     932      488,  488,  488,  488,  668,  702,  703,  667,  596,  596,
     933      596,  596,  596,  596,  595,  688,  595,  688,   87,  596,
     934      596,  596,  596,  596,  596,  689,   87,  721,   87,  689,
     935      594,  686,  686,  686,  686,  686,  686,  600,  600,  600,
     936
     937      600,  600,  600,  704,   87,   87,  689,  601,  689,  699,
     938      602,  603,  701,  689,   87,   87,   87,   87,   87,   87,
     939       87,   87,  700,  687,  706,   87,  707,   87,  601,  604,
     940      601,   87,  708,  602,  710,  603,   87,  705,  711,  716,
     941      712,  713,  715,   87,  714,   87,   87,   87,  717,   87,
     942       87,   87,   87,   87,   87,   87,   87,   87,  719,  724,
     943       87,  727,  732,   87,  722,  720,  731,   87,   87,  723,
     944       87,  736,  725,  726,  728,   87,  733,  730,  734,  735,
     945      729,  686,  686,  686,  686,  686,  686,  600,  600,  600,
     946      600,  600,  600,   87,   87,   87,  750,  601,   87,  754,
     947
     948      602,  603,   87,  751,   87,  753,   87,  756,   87,  757,
     949       87,   87,   87,  687,   87,  762,  759,  764,  601,  690,
     950      601,  752,  755,  602,  760,  603,  758,   87,   87,   87,
     951      767,  765,   87,   87,   87,  763,  761,  768,  766,   87,
     952      770,   87,   87,   87,   87,   87,  769,   87,   87,  771,
     953       87,   87,  774,   87,  772,   87,   87,   87,   87,  779,
     954       87,  795,  780,  773,   87,   87,   87,  775,  776,  777,
     955      797,  778,  686,  686,  686,  686,  686,  686,  793,   87,
     956      796,  794,   87,  800,   87,  801,  803,   87,   87,  798,
     957      804,  805,   87,   87,   87,   87,  799,  802,  807,  806,
     958
     959       87,   87,   87,  808,  743,   87,   87,   87,  809,  828,
     960       87,   87,   87,   87,  830,  831,   87,  810,  833,   87,
     961       87,   87,  834,   87,  811,  827,  826,   87,   87,  825,
     962      836,  837,  829,   87,  832,   87,   87,  839,   87,  840,
     963       87,   87,  835,   87,  838,  850,   87,  887,   87,  851,
     964      852,  855,   87,  856,  849,  857,   87,   87,  853,  858,
     965       87,   87,   87,   87,  854,   87,  859,  864,  865,  860,
     966      863,   87,   87,  866,   87,  868,  867,  869,   87,   87,
     967       87,  870,   87,   87,   87,  873,   87,  875,   87,  876,
     968       87,   87,   87,  874,   87,  872,   87,   87,   87,  871,
     969
     970       87,  880,   87,  887,  862,  887,  879,  881,  887,  887,
     971      877,  878,  886,  887,  861,  884,   87,   87,  882,  883,
     972       87,   87,  885,   69,   69,   69,   69,   69,   69,   69,
     973       69,   69,   69,   69,   69,   69,   75,   75,   75,   75,
     974       75,   75,   75,   75,   75,   75,   75,   75,   75,   78,
     975       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
     976       78,   78,   86,   87,  887,   86,  887,   86,   86,   86,
     977       86,   86,  140,  848,  887,  847,  140,  140,  140,  140,
     978      140,  140,  199,  199,  199,  199,  199,  199,  199,  199,
     979      199,  199,  199,  199,  199,  204,  887,  845,  204,  887,
     980
     981      204,  204,  204,  204,  204,  208,  844,  208,  208,  887,
     982      208,  208,  208,  208,  208,  208,  843,  208,  216,  887,
     983      842,  216,  216,  216,  216,  216,  216,  216,  216,   87,
     984      216,  239,  239,  239,  239,  239,  239,  239,  239,  239,
     985      239,  239,  239,  239,  253,  253,   87,  253,   87,  887,
     986      824,  253,  269,  887,  823,  269,  821,  269,  269,  269,
     987      269,  269,  273,  887,  273,  819,  887,  817,  273,  275,
     988      887,  275,  815,  813,   87,  275,  348,   87,  348,   87,
     989       87,   87,  348,  350,   87,  350,   87,   87,   87,  350,
     990      354,   87,  354,   87,   87,  887,  354,  356,  792,  356,
     991
     992      790,  887,  887,  356,  358,  787,  358,  785,  783,   87,
     993      358,  365,   87,  365,   87,   87,   87,  365,  367,   87,
     994      367,   87,  749,  746,  367,  239,  239,  239,  239,  239,
     995      239,  239,  239,  239,  239,  239,  239,  239,  380,  745,
     996      380,  382,  382,  743,  382,  382,  382,  205,  382,  253,
     997      253,  739,  253,  392,  738,  392,  670,   87,   87,  392,
     998      394,   87,  394,   87,   87,   87,  394,  396,   87,  396,
     999       87,   87,   87,  396,  273,   87,  273,  398,   87,  398,
     1000       87,   87,   87,  398,  275,  697,  275,   86,  696,  694,
     1001       86,  692,   86,   86,   86,   86,   86,  199,  199,  199,
     1002
     1003      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
     1004      468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
     1005      468,  468,  468,  469,  690,  469,  598,  685,  684,  469,
     1006      471,  682,  471,  680,  678,  676,  471,  473,  674,  473,
     1007      672,  670,   87,  473,  348,   87,  348,  475,   87,  475,
     1008       87,   87,   87,  475,  350,   87,  350,  478,   87,  478,
     1009       87,   87,   87,  478,  354,  617,  354,  480,  615,  480,
     1010      613,  611,  609,  480,  356,  607,  356,  482,  502,  482,
     1011      605,  605,  594,  482,  358,  593,  358,  484,  591,  484,
     1012      483,  483,  589,  484,  365,  587,  365,  486,  585,  486,
     1013
     1014      583,  581,  579,  486,  367,   87,  367,  491,   87,  491,
     1015       87,  491,   87,  491,  380,   87,  380,   87,  380,   87,
     1016      380,  382,  382,   87,  382,  382,  382,  514,  382,  503,
     1017      512,  503,  510,  508,  506,  503,  505,  504,  505,  490,
     1018      487,  485,  505,  507,  361,  507,  361,  483,  481,  507,
     1019      392,  479,  392,  509,  476,  509,  474,  472,  470,  509,
     1020      394,   87,  394,  511,   87,  511,   87,  400,  399,  511,
     1021      396,  397,  396,  513,  395,  513,  393,  270,  265,  513,
     1022      398,  264,  398,   86,  389,  389,   86,  252,   86,   86,
     1023       86,   86,   86,  468,  468,  468,  468,  468,  468,  468,
     1024
     1025      468,  468,  468,  468,  468,  468,  578,  379,  578,  379,
     1026      240,  374,  578,  469,  368,  469,  580,  366,  580,  364,
     1027      360,  359,  580,  471,  357,  471,  582,  355,  582,  351,
     1028      349,  205,  582,  473,  201,  473,  584,   87,  584,  277,
     1029      276,  274,  584,  475,  270,  475,  586,  265,  586,  268,
     1030      265,  263,  586,  478,  262,  478,  588,  261,  588,  240,
     1031      232,   85,  588,  480,   85,  480,  482,   87,  482,  205,
     1032      203,   85,  482,  590,  122,  590,  117,   87,  887,  590,
     1033      484,   70,  484,  592,   70,  592,  887,  887,  887,  592,
     1034      486,  887,  486,  491,  887,  491,  887,  491,  887,  491,
     1035
     1036      382,  887,  382,  887,  887,  887,  382,  606,  887,  606,
     1037      887,  887,  887,  606,  503,  887,  503,  608,  887,  608,
     1038      887,  887,  887,  608,  505,  887,  505,  610,  887,  610,
     1039      887,  887,  887,  610,  507,  887,  507,  612,  887,  612,
     1040      887,  887,  887,  612,  509,  887,  509,  614,  887,  614,
     1041      887,  887,  887,  614,  511,  887,  511,  616,  887,  616,
     1042      887,  887,  887,  616,  513,  887,  513,   86,  887,  887,
     1043       86,  887,   86,   86,   86,   86,   86,  669,  669,  669,
     1044      669,  669,  669,  669,  669,  669,  669,  669,  669,  669,
     1045      671,  887,  671,  887,  887,  887,  671,  578,  887,  578,
     1046
     1047      673,  887,  673,  887,  887,  887,  673,  580,  887,  580,
     1048      675,  887,  675,  887,  887,  887,  675,  582,  887,  582,
     1049      677,  887,  677,  887,  887,  887,  677,  584,  887,  584,
     1050      679,  887,  679,  887,  887,  887,  679,  586,  887,  586,
     1051      681,  887,  681,  887,  887,  887,  681,  588,  887,  588,
     1052      683,  887,  683,  887,  887,  887,  683,  590,  887,  590,
     1053       86,  887,   86,  887,  887,  887,   86,  592,  887,  592,
     1054      491,  887,  491,  887,  887,  887,  491,  691,  887,  691,
     1055      887,  887,  887,  691,  606,  887,  606,  693,  887,  693,
     1056      887,  887,  887,  693,  608,  887,  608,  695,  887,  695,
     1057
     1058      887,  887,  887,  695,  610,  887,  610,  140,  887,  140,
     1059      887,  887,  887,  140,  612,  887,  612,  698,  887,  698,
     1060      614,  887,  614,   86,  887,  887,   86,  887,   86,   86,
     1061       86,   86,   86,  616,  887,  616,  669,  669,  669,  669,
     1062      669,  669,  669,  669,  669,  669,  669,  669,  669,  737,
     1063      887,  737,  887,  887,  887,  737,  671,  887,  671,  204,
     1064      887,  204,  887,  887,  887,  204,  673,  887,  673,  740,
     1065      887,  740,  675,  887,  675,  204,  887,  887,  204,  887,
     1066      204,  204,  204,  204,  204,  677,  887,  677,  741,  887,
     1067      741,  679,  887,  679,  681,  887,  681,  742,  887,  742,
     1068
     1069      683,  887,  683,   86,  887,   86,  744,  887,  744,  887,
     1070      887,  887,  744,  691,  887,  691,  269,  887,  269,  887,
     1071      887,  887,  269,  693,  887,  693,  747,  887,  747,  695,
     1072      887,  695,  140,  887,  140,  748,  887,  748,  887,  887,
     1073      887,  748,   86,  887,  887,   86,  887,   86,   86,   86,
     1074       86,   86,  781,  887,  781,  737,  887,  737,  204,  887,
     1075      204,  782,  887,  782,  887,  887,  887,  782,  784,  887,
     1076      784,  887,  887,  887,  784,  786,  887,  786,  887,  887,
     1077      887,  786,  788,  887,  788,  789,  887,  789,  887,  887,
     1078      887,  789,  791,  887,  791,  887,  887,  887,  791,  812,
     1079
     1080      887,  812,  887,  887,  887,  812,  814,  887,  814,  887,
     1081      887,  887,  814,  816,  887,  816,  887,  887,  887,  816,
     1082      818,  887,  818,  887,  887,  887,  818,  820,  887,  820,
     1083      887,  887,  887,  820,  822,  887,  822,  887,  887,  887,
     1084      822,  616,  887,  616,  887,  887,  887,  616,  841,  887,
     1085      841,  887,  887,  887,  841,  677,  887,  677,  887,  887,
     1086      887,  677,  681,  887,  681,  887,  887,  887,  681,   86,
     1087      887,   86,  887,  887,  887,   86,  846,  887,  846,  887,
     1088      887,  887,  846,  140,  887,  140,  887,  887,  887,  140,
     1089      204,  887,  204,  887,  887,  887,  204,   11,  887,  887,
     1090
     1091      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1092      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1093      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1094      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1095      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1096      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1097      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1098      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1099      887,  887
    10931100    } ;
    10941101
    1095 static yyconst flex_int16_t yy_chk[2867] =
     1102static yyconst flex_int16_t yy_chk[2883] =
    10961103    {   0,
    10971104        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     
    11141121        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
    11151122        5,    5,    5,    5,    5,    5,    5,    7,    8,    9,
    1116        10,   37,   37,   20,   39,    9,   10,  874,    7,    8,
     1123       10,   37,   37,   20,   39,    9,   10,  886,    7,    8,
    11171124       13,   13,   13,   13,   13,   13,   15,   15,   15,   15,
    11181125
    11191126       15,   15,   20,   25,   39,   42,   53,   28,   27,   28,
    1120        28,   28,   28,   28,   28,  108,  114,   25,   29,   25,
     1127       28,   28,   28,   28,   28,  109,  115,   25,   29,   25,
    11211128       27,   27,   27,   29,   53,   35,    7,    8,    9,   10,
    11221129       40,   42,   48,   29,   30,   40,   30,   30,   30,   30,
    1123        30,   30,   35,   61,   35,   35,   44,  869,   44,  108,
    1124       114,  868,   48,   30,   63,   61,   30,   56,   47,   45,
    1125        45,   45,   30,   30,   45,   45,   56,   45,   30,   55,
     1130       30,   30,   35,   62,   35,   35,   44,  302,   44,  109,
     1131      115,  885,   48,   30,  302,   62,   30,   57,   47,   45,
     1132       45,   45,   30,   30,   45,   45,   57,   45,   30,   55,
    11261133       45,   45,   49,   40,   30,   45,   40,   49,   45,   47,
    1127        30,   47,   72,  125,   49,  125,   51,   55,   30,   86,
     1134       30,   47,   56,   64,   49,  164,   51,   55,   30,   73,
    11281135       49,   30,   31,   55,   31,   31,   31,   31,   31,   31,
    11291136
    1130        50,   51,  866,   51,   63,  153,   54,   58,   72,   50,
    1131        60,   31,   51,   50,   31,   86,   54,   57,   50,   58,
    1132        31,  153,   50,   54,  141,  156,   31,   58,   60,   57,
    1133        57,   59,   31,  126,   58,  126,   59,  156,   31,   57,
    1134        52,  865,   57,   67,   67,   52,   31,   38,   67,   59,
    1135       141,   38,   38,   52,   38,   52,   38,   38,   52,   38,
    1136       107,   38,   52,  113,   67,   67,   67,   67,   67,   67,
    1137        38,   38,   38,  128,   59,  128,  152,   59,   66,   66,
    1138        66,   66,   66,   66,  107,  152,   66,  113,  863,  862,
    1139        38,   59,  165,   38,   79,   79,   79,   79,   79,   79,
    1140 
    1141        81,   81,   81,   81,   81,   81,   82,   82,   82,   82,
    1142        82,   82,  131,  165,  131,  103,  103,  103,  103,  106,
    1143        38,   38,   76,   76,  856,  106,  112,   76,  168,   76,
    1144       110,  133,  112,  133,   76,  102,  102,  102,  102,  102,
    1145       102,  130,  103,   76,   76,   76,   76,  103,  110,  168,
    1146       109,  106,  129,  130,   76,  130,  110,  104,  112,  104,
    1147       104,  104,  104,  104,  104,  149,  129,  102,  129,   76,
    1148       103,  136,   76,  136,  158,  115,  104,   76,   76,  109,
    1149       149,   76,   76,  155,  109,  132,  132,  149,  132,   76,
    1150       158,  104,   76,  115,   76,   76,   76,  104,   76,   84,
    1151 
    1152       138,  115,  138,   84,   84,  155,  166,  109,   84,   84,
    1153       105,   84,  105,   84,  150,  105,  105,  105,  105,  105,
    1154       105,  151,   84,   84,   84,  134,  134,  134,  144,  166,
    1155       154,  157,  150,  144,  159,  167,  157,  157,  157,  151,
    1156       157,  157,   84,  161,  157,   84,  157,  105,  154,  160,
    1157       163,  157,  157,  157,  162,  157,  159,  855,  160,  162,
    1158       164,  169,  167,  170,  161,  161,  169,  163,  171,  172,
    1159       164,  144,  162,   84,   98,   98,   98,   98,   98,   98,
    1160       173,  174,  175,  171,  169,  170,  172,  179,  176,  185,
    1161        98,   98,  178,   98,   98,  180,  189,  182,  173,  187,
    1162 
    1163       180,  174,  185,  186,  179,  188,   98,  178,  181,  175,
    1164       176,   98,   98,   98,  178,  182,   98,  183,   98,  181,
    1165       184,  191,  190,  186,  188,  184,  187,  528,  183,  181,
    1166       181,  192,  207,  207,  191,  190,  191,  207,  232,  189,
    1167       184,  203,  189,  190,  192,  183,  195,  195,  195,  195,
    1168       195,  195,  196,  196,  195,  528,  854,  196,  198,  198,
    1169       216,  232,  216,  198,  200,  200,  217,  203,  217,  200,
    1170       218,  200,  218,  196,  196,  196,  196,  196,  196,  198,
    1171       198,  198,  198,  198,  198,  200,  200,  200,  200,  200,
    1172       200,  210,  210,  210,  210,  219,  220,  221,  282,  221,
    1173 
    1174       222,  222,  223,  222,  223,  224,  224,  224,  220,  219,
    1175       220,  219,  226,  227,  226,  227,  234,  235,  282,  233,
    1176       234,  233,  284,  210,  233,  233,  233,  233,  233,  233,
    1177       241,  239,  239,  277,  239,  239,  264,  234,  264,  234,
    1178       235,  265,  284,  265,  234,  242,  242,  242,  242,  242,
    1179       242,  277,  239,  239,  239,  246,  233,  239,  278,  239,
    1180       276,  280,  242,  279,  241,  243,  243,  243,  243,  243,
    1181       243,  254,  268,  276,  853,  281,  278,  242,  280,  279,
    1182       281,  246,  288,  242,  244,  244,  244,  244,  244,  244,
    1183       253,  253,  253,  253,  253,  253,  251,  254,  268,  287,
    1184 
    1185       244,  283,  286,  244,  244,  245,  283,  245,  288,  295,
    1186       245,  245,  245,  245,  245,  245,  244,  287,  251,  849,
    1187       251,  244,  253,  244,  251,  286,  244,  295,  244,  289,
    1188       251,  258,  258,  258,  258,  258,  258,  285,  290,  292,
    1189       291,  294,  251,  293,  289,  291,  251,  297,  292,  301,
    1190       251,  299,  285,  303,  290,  290,  293,  298,  285,  285,
    1191       299,  302,  298,  258,  300,  297,  307,  304,  294,  301,
    1192       306,  300,  304,  305,  303,  303,  306,  308,  305,  302,
    1193       310,  309,  311,  312,  313,  307,  308,  309,  314,  313,
    1194       315,  311,  316,  314,  318,  315,  310,  317,  312,  320,
    1195 
    1196       322,  321,  323,  324,  326,  325,  328,  318,  327,  329,
    1197       320,  316,  315,  322,  330,  317,  321,  327,  333,  331,
    1198       334,  326,  335,  337,  323,  325,  324,  333,  328,  336,
    1199       338,  337,  329,  339,  381,  338,  330,  331,  340,  340,
    1200       335,  341,  336,  340,  358,  340,  358,  341,  339,  348,
    1201       348,  348,  348,  349,  349,  349,  349,  359,  381,  359,
    1202       397,  846,  402,  334,  366,  366,  366,  366,  366,  366,
    1203       368,  397,  368,  402,  404,  368,  368,  368,  368,  368,
    1204       368,  348,  367,  367,  367,  367,  367,  367,  370,  370,
    1205       370,  370,  370,  370,  400,  398,  404,  435,  367,  376,
    1206 
    1207       843,  367,  367,  371,  371,  371,  371,  371,  371,  376,
    1208       379,  398,  377,  400,  367,  378,  379,  435,  383,  367,
    1209       370,  367,  377,  412,  367,  376,  367,  372,  372,  372,
    1210       372,  372,  372,  399,  382,  371,  383,  378,  377,  378,
    1211       415,  412,  379,  378,  383,  380,  415,  380,  399,  378,
    1212       380,  380,  380,  380,  380,  380,  382,  401,  382,  372,
    1213       407,  378,  382,  403,  405,  378,  401,  408,  382,  378,
    1214       406,  411,  403,  405,  409,  410,  407,  416,  418,  414,
    1215       382,  413,  380,  406,  382,  417,  413,  409,  382,  408,
    1216       419,  410,  410,  411,  414,  421,  417,  418,  416,  423,
    1217 
    1218       425,  414,  426,  427,  428,  419,  431,  429,  430,  421,
    1219       433,  423,  427,  429,  436,  431,  427,  437,  438,  439,
    1220       441,  425,  440,  430,  426,  433,  443,  428,  445,  441,
    1221       447,  446,  437,  448,  439,  449,  436,  450,  451,  455,
    1222       438,  452,  440,  443,  457,  633,  450,  460,  453,  458,
    1223       447,  445,  446,  448,  452,  453,  451,  449,  454,  456,
    1224       458,  457,  461,  633,  455,  454,  462,  456,  515,  460,
    1225       488,  461,  462,  471,  471,  471,  471,  456,  482,  482,
    1226       482,  482,  482,  482,  484,  484,  484,  484,  484,  484,
    1227       515,  513,  485,  487,  482,  489,  488,  482,  482,  486,
    1228 
    1229       510,  486,  485,  487,  486,  486,  486,  486,  486,  486,
    1230       482,  513,  509,  510,  520,  482,  484,  482,  485,  487,
    1231       482,  489,  482,  491,  491,  491,  491,  491,  491,  509,
    1232       512,  514,  519,  516,  520,  519,  486,  492,  492,  492,
    1233       492,  492,  492,  517,  514,  512,  516,  521,  517,  525,
    1234       518,  522,  523,  492,  525,  842,  492,  492,  493,  841,
    1235       493,  518,  521,  493,  493,  493,  493,  493,  493,  492,
    1236       522,  524,  526,  523,  492,  527,  492,  529,  530,  492,
    1237       524,  492,  531,  526,  532,  533,  529,  536,  527,  535,
    1238       533,  538,  539,  532,  542,  535,  536,  540,  541,  531,
    1239 
    1240       530,  544,  545,  542,  546,  547,  549,  554,  556,  539,
    1241       544,  561,  540,  541,  555,  552,  546,  538,  550,  545,
    1242       547,  549,  553,  550,  552,  556,  558,  555,  559,  554,
    1243       560,  553,  562,  561,  558,  563,  564,  560,  559,  565,
    1244       567,  563,  568,  613,  562,  564,  612,  617,  594,  565,
    1245       596,  698,  613,  612,  617,  568,  698,  567,  587,  587,
    1246       587,  587,  587,  587,  588,  588,  588,  588,  588,  588,
    1247       590,  594,  590,  596,  614,  590,  590,  590,  590,  590,
    1248       590,  593,  593,  593,  593,  593,  593,  614,  615,  616,
    1249       587,  589,  589,  589,  589,  589,  589,  595,  611,  622,
    1250 
    1251       618,  595,  619,  611,  621,  615,  620,  589,  618,  620,
    1252       589,  589,  616,  593,  623,  624,  611,  621,  595,  619,
    1253       595,  622,  625,  589,  626,  595,  628,  629,  589,  623,
    1254       589,  627,  630,  589,  627,  589,  631,  624,  634,  625,
    1255       632,  635,  637,  628,  638,  644,  626,  630,  639,  632,
    1256       635,  645,  640,  650,  629,  647,  631,  696,  693,  651,
    1257       634,  640,  650,  659,  637,  644,  651,  638,  658,  662,
    1258       639,  661,  647,  659,  697,  840,  839,  658,  645,  693,
    1259       661,  697,  699,  696,  662,  680,  680,  680,  680,  680,
    1260       680,  684,  684,  684,  684,  684,  684,  694,  702,  705,
    1261 
    1262       700,  680,  699,  700,  680,  680,  701,  694,  704,  701,
    1263       706,  708,  705,  709,  704,  707,  702,  680,  707,  706,
    1264       712,  711,  680,  684,  680,  710,  714,  680,  710,  680,
    1265       711,  713,  708,  718,  713,  715,  716,  717,  720,  714,
    1266       723,  709,  726,  715,  727,  712,  716,  720,  728,  730,
    1267       717,  731,  752,  751,  718,  753,  749,  730,  751,  754,
    1268       731,  750,  726,  723,  755,  753,  727,  752,  756,  728,
    1269       738,  738,  738,  738,  738,  738,  749,  757,  750,  758,
    1270       757,  755,  754,  759,  761,  763,  764,  761,  763,  767,
    1271       768,  773,  758,  764,  756,  765,  766,  788,  765,  766,
    1272 
    1273       790,  791,  738,  792,  767,  793,  792,  797,  794,  795,
    1274       759,  794,  795,  768,  773,  798,  801,  799,  805,  791,
    1275       799,  790,  821,  802,  788,  797,  802,  793,  803,  806,
    1276       804,  803,  824,  823,  805,  822,  823,  825,  801,  804,
    1277       798,  824,  822,  821,  826,  806,  827,  826,  830,  833,
    1278       834,  830,  833,  835,  847,  825,  844,  847,  848,  834,
    1279       857,  845,  835,  827,  850,  844,  845,  850,  848,  851,
    1280       852,  858,  851,  852,  859,  860,  861,  859,  864,  861,
    1281       857,  867,  870,  871,  873,  860,  858,  838,  872,  837,
    1282       836,  870,  832,  831,  873,  829,  828,  820,  819,  818,
    1283 
    1284       864,  817,  867,  816,  815,  871,  872,  876,  876,  876,
    1285       876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
    1286       877,  877,  877,  877,  877,  877,  877,  877,  877,  877,
    1287       877,  877,  877,  878,  878,  878,  878,  878,  878,  878,
    1288       878,  878,  878,  878,  878,  878,  879,  814,  813,  879,
    1289       812,  879,  879,  879,  879,  879,  880,  811,  810,  809,
    1290       880,  880,  880,  880,  880,  880,  881,  881,  881,  881,
    1291       881,  881,  881,  881,  881,  881,  881,  881,  881,  882,
    1292       808,  807,  882,  800,  882,  882,  882,  882,  882,  883,
    1293       796,  883,  883,  789,  883,  883,  883,  883,  883,  883,
    1294 
    1295       787,  883,  884,  786,  785,  884,  884,  884,  884,  884,
    1296       884,  884,  884,  784,  884,  885,  885,  885,  885,  885,
    1297       885,  885,  885,  885,  885,  885,  885,  885,  886,  886,
    1298       783,  886,  782,  781,  780,  886,  887,  779,  778,  887,
    1299       777,  887,  887,  887,  887,  887,  888,  776,  888,  775,
    1300       774,  772,  888,  889,  771,  889,  770,  769,  762,  889,
    1301       890,  760,  890,  748,  747,  746,  890,  891,  745,  891,
    1302       744,  743,  742,  891,  892,  741,  892,  740,  737,  736,
    1303       892,  893,  735,  893,  729,  725,  724,  893,  894,  722,
    1304       894,  721,  719,  703,  894,  895,  695,  895,  692,  687,
    1305 
    1306       685,  895,  896,  681,  896,  671,  667,  665,  896,  897,
    1307       897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
    1308       897,  897,  898,  663,  898,  899,  899,  660,  899,  899,
    1309       899,  657,  899,  900,  900,  656,  900,  901,  655,  901,
    1310       654,  653,  652,  901,  902,  649,  902,  648,  646,  643,
    1311       902,  903,  642,  903,  641,  636,  609,  903,  904,  605,
    1312       904,  905,  603,  905,  601,  599,  597,  905,  906,  591,
    1313       906,  907,  585,  583,  907,  581,  907,  907,  907,  907,
    1314       907,  908,  908,  908,  908,  908,  908,  908,  908,  908,
    1315       908,  908,  908,  908,  909,  909,  909,  909,  909,  909,
    1316 
    1317       909,  909,  909,  909,  909,  909,  909,  910,  579,  910,
    1318       577,  575,  573,  910,  911,  571,  911,  570,  569,  566,
    1319       911,  912,  557,  912,  551,  548,  543,  912,  913,  537,
    1320       913,  914,  534,  914,  511,  507,  505,  914,  915,  503,
    1321       915,  916,  501,  916,  499,  497,  496,  916,  917,  495,
    1322       917,  918,  494,  918,  483,  480,  478,  918,  919,  477,
    1323       919,  920,  476,  920,  474,  472,  469,  920,  921,  467,
    1324       921,  922,  465,  922,  463,  459,  444,  922,  923,  442,
    1325       923,  924,  434,  924,  432,  424,  422,  924,  925,  420,
    1326       925,  926,  394,  926,  392,  926,  390,  926,  927,  388,
    1327 
    1328       927,  387,  927,  386,  927,  928,  928,  373,  928,  928,
    1329       928,  363,  928,  929,  361,  929,  360,  356,  354,  929,
    1330       930,  352,  930,  350,  346,  344,  930,  931,  343,  931,
    1331       342,  332,  319,  931,  932,  296,  932,  933,  275,  933,
    1332       273,  271,  270,  933,  934,  269,  934,  935,  267,  935,
    1333       266,  261,  257,  935,  936,  256,  936,  937,  252,  937,
    1334       249,  248,  237,  937,  938,  236,  938,  939,  229,  228,
    1335       939,  225,  939,  939,  939,  939,  939,  940,  940,  940,
    1336       940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
    1337       941,  215,  941,  213,  212,  211,  941,  942,  205,  942,
    1338 
    1339       943,  204,  943,  202,  197,  177,  943,  944,  148,  944,
    1340       945,  146,  945,  145,  139,  137,  945,  946,  135,  946,
    1341       947,  127,  947,  124,  123,  119,  947,  948,  100,  948,
    1342       949,   97,  949,   94,   92,   85,  949,  950,   71,  950,
    1343       951,   69,  951,   65,   36,   33,  951,  952,   18,  952,
    1344       953,   11,  953,    4,    3,    0,  953,  954,    0,  954,
    1345         0,    0,    0,  954,  955,    0,  955,  956,    0,  956,
    1346         0,    0,    0,  956,  957,    0,  957,  958,    0,  958,
    1347         0,  958,    0,  958,  959,    0,  959,    0,    0,    0,
    1348       959,  960,    0,  960,    0,    0,    0,  960,  961,    0,
    1349 
    1350       961,  962,    0,  962,    0,    0,    0,  962,  963,    0,
    1351       963,  964,    0,  964,    0,    0,    0,  964,  965,    0,
    1352       965,  966,    0,  966,    0,    0,    0,  966,  967,    0,
    1353       967,  968,    0,  968,    0,    0,    0,  968,  969,    0,
    1354       969,  970,    0,  970,    0,    0,    0,  970,  971,    0,
    1355       971,  972,    0,    0,  972,    0,  972,  972,  972,  972,
    1356       972,  973,  973,  973,  973,  973,  973,  973,  973,  973,
    1357       973,  973,  973,  973,  974,    0,  974,    0,    0,    0,
    1358       974,  975,    0,  975,  976,    0,  976,    0,    0,    0,
    1359       976,  977,    0,  977,  978,    0,  978,    0,    0,    0,
    1360 
    1361       978,  979,    0,  979,  980,    0,  980,    0,    0,    0,
    1362       980,  981,    0,  981,  982,    0,  982,    0,    0,    0,
    1363       982,  983,    0,  983,  984,    0,  984,    0,    0,    0,
    1364       984,  985,    0,  985,  986,    0,  986,    0,    0,    0,
    1365       986,  987,    0,  987,  988,    0,  988,    0,    0,    0,
    1366       988,  989,    0,  989,  990,    0,  990,    0,    0,    0,
    1367       990,  991,    0,  991,    0,    0,    0,  991,  992,    0,
    1368       992,  993,    0,  993,    0,    0,    0,  993,  994,    0,
    1369       994,  995,    0,  995,    0,    0,    0,  995,  996,    0,
    1370       996,  997,    0,  997,    0,    0,    0,  997,  998,    0,
    1371 
    1372       998,  999,    0,  999, 1000,    0, 1000, 1001,    0,    0,
    1373      1001,    0, 1001, 1001, 1001, 1001, 1001, 1002,    0, 1002,
    1374      1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
    1375      1003, 1003, 1003, 1004,    0, 1004,    0,    0,    0, 1004,
    1376      1005,    0, 1005, 1006,    0, 1006,    0,    0,    0, 1006,
    1377      1007,    0, 1007, 1008,    0, 1008, 1009,    0, 1009, 1010,
    1378         0,    0, 1010,    0, 1010, 1010, 1010, 1010, 1010, 1011,
    1379         0, 1011, 1012,    0, 1012, 1013,    0, 1013, 1014,    0,
    1380      1014, 1015,    0, 1015, 1016,    0, 1016, 1017,    0, 1017,
    1381      1018,    0, 1018,    0,    0,    0, 1018, 1019,    0, 1019,
    1382 
    1383      1020,    0, 1020,    0,    0,    0, 1020, 1021,    0, 1021,
    1384      1022,    0, 1022, 1023,    0, 1023, 1024,    0, 1024, 1025,
    1385         0, 1025,    0,    0,    0, 1025, 1026,    0,    0, 1026,
    1386         0, 1026, 1026, 1026, 1026, 1026, 1027,    0, 1027, 1028,
    1387         0, 1028, 1029,    0, 1029, 1030,    0, 1030,    0,    0,
    1388         0, 1030, 1031,    0, 1031,    0,    0,    0, 1031, 1032,
    1389         0, 1032,    0,    0,    0, 1032, 1033,    0, 1033, 1034,
    1390         0, 1034,    0,    0,    0, 1034, 1035,    0, 1035,    0,
    1391         0,    0, 1035, 1036,    0, 1036,    0,    0,    0, 1036,
    1392      1037,    0, 1037,    0,    0,    0, 1037, 1038,    0, 1038,
    1393 
    1394         0,    0,    0, 1038, 1039,    0, 1039,    0,    0,    0,
    1395      1039, 1040,    0, 1040,    0,    0,    0, 1040, 1041,    0,
    1396      1041,    0,    0,    0, 1041, 1042,    0, 1042,    0,    0,
    1397         0, 1042, 1043,    0, 1043,    0,    0,    0, 1043, 1044,
    1398         0, 1044,    0,    0,    0, 1044, 1045,    0, 1045,    0,
    1399         0,    0, 1045, 1046,    0, 1046,    0,    0,    0, 1046,
    1400      1047,    0, 1047,    0,    0,    0, 1047, 1048,    0, 1048,
    1401         0,    0,    0, 1048, 1049,    0, 1049,    0,    0,    0,
    1402      1049,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1403       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1404 
    1405       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1406       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1407       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1408       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1409       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1410       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1411       875,  875,  875,  875,  875,  875
     1137       50,   51,  164,   51,   56,  154,   54,   59,  877,   50,
     1138       61,   31,   51,   50,   31,   73,   54,   58,   50,   59,
     1139       31,  154,   50,   54,   87,  159,   31,   59,   61,   58,
     1140       58,   60,   31,   64,   59,  126,   60,  126,   31,   58,
     1141       52,  159,   58,   68,   68,   52,   31,   38,   68,   60,
     1142       87,   38,   38,   52,   38,   52,   38,   38,   52,   38,
     1143      108,   38,   52,  114,   68,   68,   68,   68,   68,   68,
     1144       38,   38,   38,  127,   60,  127,  153,   60,   67,   67,
     1145       67,   67,   67,   67,  108,  153,   67,  114,  876,  873,
     1146       38,   60,  166,   38,   80,   80,   80,   80,   80,   80,
     1147
     1148       82,   82,   82,   82,   82,   82,   83,   83,   83,   83,
     1149       83,   83,  129,  166,  129,  104,  104,  104,  104,  107,
     1150       38,   38,   77,   77,  872,  107,  113,   77,  169,   77,
     1151      111,  132,  113,  132,   77,  103,  103,  103,  103,  103,
     1152      103,  131,  104,   77,   77,   77,   77,  104,  111,  169,
     1153      110,  107,  130,  131,   77,  131,  111,  105,  113,  105,
     1154      105,  105,  105,  105,  105,  151,  130,  103,  130,   77,
     1155      104,  134,   77,  134,  281,  116,  105,   77,   77,  110,
     1156      142,   77,   77,  151,  110,  133,  133,  152,  133,   77,
     1157      281,  105,   77,  116,   77,   77,   77,  105,   77,   85,
     1158
     1159      137,  116,  137,   85,   85,  152,  142,  110,   85,   85,
     1160      106,   85,  106,   85,  155,  106,  106,  106,  106,  106,
     1161      106,  150,   85,   85,   85,  135,  135,  135,  139,  145,
     1162      139,  156,  155,  160,  145,  161,  150,  157,  162,  167,
     1163      165,  168,   85,  150,  161,   85,  163,  106,  171,  157,
     1164      165,  163,  172,  156,  173,  160,  181,  176,  170,  162,
     1165      162,  181,  167,  170,  163,  174,  175,  172,  168,  182,
     1166      171,  173,  145,   85,   99,   99,   99,   99,   99,   99,
     1167      177,  170,  179,  174,  176,  184,  175,  183,  180,  185,
     1168       99,   99,  525,   99,   99,  525,  182,  179,  183,  218,
     1169
     1170      185,  218,  177,  184,  179,  180,   99,  191,  183,  183,
     1171      186,   99,   99,   99,  158,  186,   99,  185,   99,  158,
     1172      158,  158,  188,  158,  158,  190,  187,  158,  189,  158,
     1173      186,  205,  193,  189,  158,  158,  158,  627,  158,  187,
     1174      627,  192,  188,  194,  190,  193,  219,  193,  219,  220,
     1175      191,  220,  248,  191,  192,  189,  194,  205,  223,  225,
     1176      223,  225,  192,  197,  197,  197,  197,  197,  197,  198,
     1177      198,  197,  209,  209,  198,  200,  200,  209,  248,  870,
     1178      200,  202,  202,  308,  224,  224,  202,  224,  202,  308,
     1179      198,  198,  198,  198,  198,  198,  200,  200,  200,  200,
     1180
     1181      200,  200,  202,  202,  202,  202,  202,  202,  212,  212,
     1182      212,  212,  221,  222,  226,  226,  226,  228,  229,  228,
     1183      229,  234,  243,  237,  338,  222,  221,  222,  221,  235,
     1184      278,  235,  256,  279,  235,  235,  235,  235,  235,  235,
     1185      212,  236,  270,  278,  234,  236,  237,  280,  291,  241,
     1186      241,  279,  241,  241,  284,  266,  243,  266,  256,  267,
     1187      869,  267,  236,  291,  236,  280,  235,  338,  270,  236,
     1188      241,  241,  241,  282,  284,  241,  289,  241,  244,  244,
     1189      244,  244,  244,  244,  245,  245,  245,  245,  245,  245,
     1190      282,  247,  286,  247,  289,  244,  247,  247,  247,  247,
     1191
     1192      247,  247,  255,  255,  255,  255,  255,  255,  283,  285,
     1193      244,  295,  286,  283,  285,  288,  244,  246,  246,  246,
     1194      246,  246,  246,  253,  295,  292,  260,  260,  260,  260,
     1195      260,  260,  862,  246,  255,  296,  246,  246,  288,  293,
     1196      290,  292,  292,  294,  293,  253,  297,  253,  300,  246,
     1197      287,  253,  294,  300,  246,  303,  246,  253,  260,  246,
     1198      299,  246,  296,  304,  297,  287,  290,  301,  305,  253,
     1199      312,  287,  287,  253,  306,  303,  301,  253,  299,  306,
     1200      307,  304,  309,  310,  314,  307,  312,  311,  313,  305,
     1201      305,  315,  310,  311,  318,  316,  315,  313,  317,  314,
     1202
     1203      316,  309,  320,  317,  319,  322,  323,  324,  326,  327,
     1204      325,  328,  329,  318,  331,  320,  322,  332,  330,  333,
     1205      317,  323,  319,  325,  334,  335,  324,  330,  337,  329,
     1206      326,  328,  327,  339,  340,  341,  331,  337,  335,  342,
     1207      332,  333,  334,  341,  342,  343,  345,  340,  344,  344,
     1208      861,  339,  345,  344,  385,  344,  352,  352,  352,  352,
     1209      343,  353,  353,  353,  353,  362,  363,  362,  363,  370,
     1210      370,  370,  370,  370,  370,  372,  380,  372,  385,  860,
     1211      372,  372,  372,  372,  372,  372,  380,  402,  352,  371,
     1212      371,  371,  371,  371,  371,  374,  374,  374,  374,  374,
     1213
     1214      374,  404,  380,  402,  387,  371,  381,  401,  371,  371,
     1215      375,  375,  375,  375,  375,  375,  381,  383,  401,  382,
     1216      404,  371,  387,  383,  408,  432,  371,  374,  371,  403,
     1217      387,  371,  381,  371,  376,  376,  376,  376,  376,  376,
     1218      386,  382,  375,  382,  403,  405,  408,  382,  432,  383,
     1219      384,  859,  384,  382,  405,  384,  384,  384,  384,  384,
     1220      384,  406,  386,  412,  386,  382,  376,  407,  386,  382,
     1221      409,  410,  406,  382,  386,  411,  407,  415,  416,  409,
     1222      413,  414,  420,  417,  410,  412,  386,  384,  417,  418,
     1223      386,  411,  423,  413,  386,  419,  416,  414,  414,  415,
     1224
     1225      422,  419,  421,  420,  418,  427,  425,  423,  429,  430,
     1226      431,  418,  433,  421,  439,  434,  435,  427,  433,  422,
     1227      425,  437,  440,  431,  441,  435,  442,  443,  445,  429,
     1228      434,  430,  444,  447,  439,  449,  437,  445,  450,  441,
     1229      451,  456,  443,  452,  440,  453,  454,  450,  442,  457,
     1230      447,  455,  444,  460,  461,  463,  494,  458,  449,  456,
     1231      455,  451,  457,  452,  458,  453,  459,  462,  454,  464,
     1232      466,  468,  463,  459,  467,  462,  461,  468,  460,  495,
     1233      464,  491,  494,  467,  521,  462,  477,  477,  477,  477,
     1234      636,  491,  466,  488,  488,  488,  488,  488,  488,  490,
     1235
     1236      490,  490,  490,  490,  490,  495,  521,  491,  493,  488,
     1237      515,  518,  488,  488,  492,  516,  492,  636,  493,  492,
     1238      492,  492,  492,  492,  492,  488,  518,  515,  516,  519,
     1239      488,  490,  488,  520,  493,  488,  524,  488,  497,  497,
     1240      497,  497,  497,  497,  529,  522,  520,  524,  527,  519,
     1241      526,  492,  498,  498,  498,  498,  498,  498,  522,  523,
     1242      530,  533,  531,  527,  523,  529,  528,  531,  498,  530,
     1243      526,  498,  498,  499,  533,  499,  532,  534,  499,  499,
     1244      499,  499,  499,  499,  498,  528,  535,  532,  536,  498,
     1245      537,  498,  538,  539,  498,  535,  498,  541,  539,  542,
     1246
     1247      544,  538,  547,  541,  545,  534,  546,  537,  542,  549,
     1248      536,  547,  550,  551,  557,  552,  554,  544,  549,  545,
     1249      560,  546,  555,  557,  558,  551,  561,  555,  562,  550,
     1250      552,  554,  564,  558,  565,  567,  566,  568,  572,  561,
     1251      564,  569,  560,  566,  565,  562,  571,  569,  572,  568,
     1252      574,  575,  601,  621,  603,  571,  620,  567,  594,  594,
     1253      594,  594,  594,  594,  575,  620,  621,  574,  595,  595,
     1254      595,  595,  595,  595,  597,  601,  597,  603,  639,  597,
     1255      597,  597,  597,  597,  597,  602,  622,  639,  855,  602,
     1256      594,  596,  596,  596,  596,  596,  596,  600,  600,  600,
     1257
     1258      600,  600,  600,  622,  618,  619,  602,  596,  602,  618,
     1259      596,  596,  619,  602,  623,  626,  629,  624,  625,  631,
     1260      633,  628,  618,  596,  624,  630,  625,  632,  596,  600,
     1261      596,  635,  626,  596,  628,  596,  634,  623,  629,  634,
     1262      630,  631,  633,  637,  632,  638,  640,  641,  635,  644,
     1263      642,  645,  646,  651,  650,  657,  668,  656,  637,  642,
     1264      653,  646,  657,  851,  640,  638,  656,  664,  665,  641,
     1265      667,  668,  644,  645,  650,  699,  664,  653,  665,  667,
     1266      651,  686,  686,  686,  686,  686,  686,  690,  690,  690,
     1267      690,  690,  690,  700,  704,  702,  699,  686,  703,  704,
     1268
     1269      686,  686,  705,  700,  706,  703,  707,  706,  708,  707,
     1270      710,  711,  713,  686,  714,  713,  710,  715,  686,  690,
     1271      686,  702,  705,  686,  711,  686,  708,  712,  716,  717,
     1272      718,  716,  721,  720,  719,  714,  712,  719,  717,  722,
     1273      721,  723,  724,  725,  728,  715,  720,  732,  731,  722,
     1274      733,  735,  725,  736,  723,  718,  756,  761,  754,  735,
     1275      758,  756,  736,  724,  755,  757,  759,  728,  731,  732,
     1276      758,  733,  743,  743,  743,  743,  743,  743,  754,  760,
     1277      757,  755,  762,  761,  763,  762,  764,  766,  768,  759,
     1278      766,  768,  769,  772,  773,  770,  760,  763,  770,  769,
     1279
     1280      771,  778,  793,  771,  743,  795,  797,  796,  772,  797,
     1281      798,  799,  800,  764,  799,  800,  802,  773,  803,  804,
     1282      806,  810,  804,  811,  778,  796,  795,  807,  808,  793,
     1283      807,  808,  798,  826,  802,  809,  832,  810,  827,  811,
     1284      830,  829,  806,  803,  809,  827,  828,  848,  831,  828,
     1285      829,  831,  835,  832,  826,  835,  838,  839,  830,  838,
     1286      840,  849,  850,  853,  830,  852,  839,  850,  852,  840,
     1287      849,  854,  856,  853,  857,  856,  854,  857,  858,  863,
     1288      864,  858,  865,  866,  867,  865,  868,  867,  871,  868,
     1289      874,  875,  878,  866,  879,  864,  880,  882,  881,  863,
     1290
     1291      883,  878,  884,  847,  846,  845,  875,  879,  844,  843,
     1292      871,  874,  884,  842,  841,  882,  837,  836,  880,  881,
     1293      834,  833,  883,  888,  888,  888,  888,  888,  888,  888,
     1294      888,  888,  888,  888,  888,  888,  889,  889,  889,  889,
     1295      889,  889,  889,  889,  889,  889,  889,  889,  889,  890,
     1296      890,  890,  890,  890,  890,  890,  890,  890,  890,  890,
     1297      890,  890,  891,  825,  824,  891,  823,  891,  891,  891,
     1298      891,  891,  892,  822,  821,  820,  892,  892,  892,  892,
     1299      892,  892,  893,  893,  893,  893,  893,  893,  893,  893,
     1300      893,  893,  893,  893,  893,  894,  819,  818,  894,  817,
     1301
     1302      894,  894,  894,  894,  894,  895,  816,  895,  895,  815,
     1303      895,  895,  895,  895,  895,  895,  814,  895,  896,  813,
     1304      812,  896,  896,  896,  896,  896,  896,  896,  896,  805,
     1305      896,  897,  897,  897,  897,  897,  897,  897,  897,  897,
     1306      897,  897,  897,  897,  898,  898,  801,  898,  794,  792,
     1307      791,  898,  899,  790,  789,  899,  788,  899,  899,  899,
     1308      899,  899,  900,  787,  900,  786,  785,  784,  900,  901,
     1309      783,  901,  782,  781,  780,  901,  902,  779,  902,  777,
     1310      776,  775,  902,  903,  774,  903,  767,  765,  753,  903,
     1311      904,  752,  904,  751,  750,  749,  904,  905,  748,  905,
     1312
     1313      747,  746,  745,  905,  906,  742,  906,  741,  740,  734,
     1314      906,  907,  730,  907,  729,  727,  726,  907,  908,  709,
     1315      908,  701,  698,  693,  908,  909,  909,  909,  909,  909,
     1316      909,  909,  909,  909,  909,  909,  909,  909,  910,  691,
     1317      910,  911,  911,  687,  911,  911,  911,  677,  911,  912,
     1318      912,  673,  912,  913,  671,  913,  669,  666,  663,  913,
     1319      914,  662,  914,  661,  660,  659,  914,  915,  658,  915,
     1320      655,  654,  652,  915,  916,  649,  916,  917,  648,  917,
     1321      647,  643,  616,  917,  918,  612,  918,  919,  610,  608,
     1322      919,  606,  919,  919,  919,  919,  919,  920,  920,  920,
     1323
     1324      920,  920,  920,  920,  920,  920,  920,  920,  920,  920,
     1325      921,  921,  921,  921,  921,  921,  921,  921,  921,  921,
     1326      921,  921,  921,  922,  604,  922,  598,  592,  590,  922,
     1327      923,  588,  923,  586,  584,  582,  923,  924,  580,  924,
     1328      578,  577,  576,  924,  925,  573,  925,  926,  570,  926,
     1329      563,  559,  556,  926,  927,  553,  927,  928,  548,  928,
     1330      543,  540,  517,  928,  929,  513,  929,  930,  511,  930,
     1331      509,  507,  505,  930,  931,  503,  931,  932,  502,  932,
     1332      501,  500,  489,  932,  933,  486,  933,  934,  484,  934,
     1333      483,  482,  480,  934,  935,  478,  935,  936,  475,  936,
     1334
     1335      473,  471,  469,  936,  937,  465,  937,  938,  448,  938,
     1336      446,  938,  438,  938,  939,  436,  939,  428,  939,  426,
     1337      939,  940,  940,  424,  940,  940,  940,  398,  940,  941,
     1338      396,  941,  394,  392,  391,  941,  942,  390,  942,  377,
     1339      367,  365,  942,  943,  364,  943,  360,  358,  356,  943,
     1340      944,  354,  944,  945,  350,  945,  348,  347,  346,  945,
     1341      946,  336,  946,  947,  321,  947,  298,  277,  275,  947,
     1342      948,  273,  948,  949,  272,  949,  271,  269,  268,  949,
     1343      950,  263,  950,  951,  259,  258,  951,  254,  951,  951,
     1344      951,  951,  951,  952,  952,  952,  952,  952,  952,  952,
     1345
     1346      952,  952,  952,  952,  952,  952,  953,  251,  953,  250,
     1347      239,  238,  953,  954,  231,  954,  955,  230,  955,  227,
     1348      217,  215,  955,  956,  214,  956,  957,  213,  957,  207,
     1349      206,  204,  957,  958,  199,  958,  959,  178,  959,  149,
     1350      147,  146,  959,  960,  140,  960,  961,  138,  961,  136,
     1351      128,  125,  961,  962,  124,  962,  963,  120,  963,  101,
     1352       98,   95,  963,  964,   93,  964,  965,   86,  965,   72,
     1353       70,   66,  965,  966,   36,  966,   33,   18,   11,  966,
     1354      967,    4,  967,  968,    3,  968,    0,    0,    0,  968,
     1355      969,    0,  969,  970,    0,  970,    0,  970,    0,  970,
     1356
     1357      971,    0,  971,    0,    0,    0,  971,  972,    0,  972,
     1358        0,    0,    0,  972,  973,    0,  973,  974,    0,  974,
     1359        0,    0,    0,  974,  975,    0,  975,  976,    0,  976,
     1360        0,    0,    0,  976,  977,    0,  977,  978,    0,  978,
     1361        0,    0,    0,  978,  979,    0,  979,  980,    0,  980,
     1362        0,    0,    0,  980,  981,    0,  981,  982,    0,  982,
     1363        0,    0,    0,  982,  983,    0,  983,  984,    0,    0,
     1364      984,    0,  984,  984,  984,  984,  984,  985,  985,  985,
     1365      985,  985,  985,  985,  985,  985,  985,  985,  985,  985,
     1366      986,    0,  986,    0,    0,    0,  986,  987,    0,  987,
     1367
     1368      988,    0,  988,    0,    0,    0,  988,  989,    0,  989,
     1369      990,    0,  990,    0,    0,    0,  990,  991,    0,  991,
     1370      992,    0,  992,    0,    0,    0,  992,  993,    0,  993,
     1371      994,    0,  994,    0,    0,    0,  994,  995,    0,  995,
     1372      996,    0,  996,    0,    0,    0,  996,  997,    0,  997,
     1373      998,    0,  998,    0,    0,    0,  998,  999,    0,  999,
     1374     1000,    0, 1000,    0,    0,    0, 1000, 1001,    0, 1001,
     1375     1002,    0, 1002,    0,    0,    0, 1002, 1003,    0, 1003,
     1376        0,    0,    0, 1003, 1004,    0, 1004, 1005,    0, 1005,
     1377        0,    0,    0, 1005, 1006,    0, 1006, 1007,    0, 1007,
     1378
     1379        0,    0,    0, 1007, 1008,    0, 1008, 1009,    0, 1009,
     1380        0,    0,    0, 1009, 1010,    0, 1010, 1011,    0, 1011,
     1381     1012,    0, 1012, 1013,    0,    0, 1013,    0, 1013, 1013,
     1382     1013, 1013, 1013, 1014,    0, 1014, 1015, 1015, 1015, 1015,
     1383     1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1016,
     1384        0, 1016,    0,    0,    0, 1016, 1017,    0, 1017, 1018,
     1385        0, 1018,    0,    0,    0, 1018, 1019,    0, 1019, 1020,
     1386        0, 1020, 1021,    0, 1021, 1022,    0,    0, 1022,    0,
     1387     1022, 1022, 1022, 1022, 1022, 1023,    0, 1023, 1024,    0,
     1388     1024, 1025,    0, 1025, 1026,    0, 1026, 1027,    0, 1027,
     1389
     1390     1028,    0, 1028, 1029,    0, 1029, 1030,    0, 1030,    0,
     1391        0,    0, 1030, 1031,    0, 1031, 1032,    0, 1032,    0,
     1392        0,    0, 1032, 1033,    0, 1033, 1034,    0, 1034, 1035,
     1393        0, 1035, 1036,    0, 1036, 1037,    0, 1037,    0,    0,
     1394        0, 1037, 1038,    0,    0, 1038,    0, 1038, 1038, 1038,
     1395     1038, 1038, 1039,    0, 1039, 1040,    0, 1040, 1041,    0,
     1396     1041, 1042,    0, 1042,    0,    0,    0, 1042, 1043,    0,
     1397     1043,    0,    0,    0, 1043, 1044,    0, 1044,    0,    0,
     1398        0, 1044, 1045,    0, 1045, 1046,    0, 1046,    0,    0,
     1399        0, 1046, 1047,    0, 1047,    0,    0,    0, 1047, 1048,
     1400
     1401        0, 1048,    0,    0,    0, 1048, 1049,    0, 1049,    0,
     1402        0,    0, 1049, 1050,    0, 1050,    0,    0,    0, 1050,
     1403     1051,    0, 1051,    0,    0,    0, 1051, 1052,    0, 1052,
     1404        0,    0,    0, 1052, 1053,    0, 1053,    0,    0,    0,
     1405     1053, 1054,    0, 1054,    0,    0,    0, 1054, 1055,    0,
     1406     1055,    0,    0,    0, 1055, 1056,    0, 1056,    0,    0,
     1407        0, 1056, 1057,    0, 1057,    0,    0,    0, 1057, 1058,
     1408        0, 1058,    0,    0,    0, 1058, 1059,    0, 1059,    0,
     1409        0,    0, 1059, 1060,    0, 1060,    0,    0,    0, 1060,
     1410     1061,    0, 1061,    0,    0,    0, 1061,  887,  887,  887,
     1411
     1412      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1413      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1414      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1415      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1416      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1417      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1418      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1419      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1420      887,  887
    14121421    } ;
    14131422
    14141423/* Table of booleans, true if rule could match eol. */
    1415 static yyconst flex_int32_t yy_rule_can_match_eol[180] =
     1424static yyconst flex_int32_t yy_rule_can_match_eol[181] =
    14161425    {   0,
    141714261, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     
    14201429    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14211430    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1422     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0,
    1423     1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     1431    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
     1432    0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14241433    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14251434    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1426         };
     1435    0,     };
    14271436
    14281437static yy_state_type yy_last_accepting_state;
     
    14521461 * Created On       : Sat Sep 22 08:58:10 2001
    14531462 * Last Modified By : Peter A. Buhr
    1454  * Last Modified On : Tue Feb  2 15:06:54 2016
    1455  * Update Count     : 426
     1463 * Last Modified On : Wed Mar  2 18:07:20 2016
     1464 * Update Count     : 434
    14561465 */
    14571466#line 20 "lex.ll"
     
    15111520
    15121521
    1513 #line 1514 "Parser/lex.cc"
     1522#line 1523 "Parser/lex.cc"
    15141523
    15151524#define INITIAL 0
     
    17061715
    17071716                                   /* line directives */
    1708 #line 1709 "Parser/lex.cc"
     1717#line 1718 "Parser/lex.cc"
    17091718
    17101719        if ( !(yy_init) )
     
    17601769                                {
    17611770                                yy_current_state = (int) yy_def[yy_current_state];
    1762                                 if ( yy_current_state >= 876 )
     1771                                if ( yy_current_state >= 888 )
    17631772                                        yy_c = yy_meta[(unsigned int) yy_c];
    17641773                                }
     
    17661775                        ++yy_cp;
    17671776                        }
    1768                 while ( yy_base[yy_current_state] != 2782 );
     1777                while ( yy_base[yy_current_state] != 2798 );
    17691778
    17701779yy_find_action:
     
    20032012YY_RULE_SETUP
    20042013#line 203 "lex.ll"
    2005 { KEYWORD_RETURN(CONTEXT); }                    // CFA
     2014{ KEYWORD_RETURN(CONTINUE); }
    20062015        YY_BREAK
    20072016case 36:
    20082017YY_RULE_SETUP
    20092018#line 204 "lex.ll"
    2010 { KEYWORD_RETURN(CONTINUE); }
     2019{ KEYWORD_RETURN(DEFAULT); }
    20112020        YY_BREAK
    20122021case 37:
    20132022YY_RULE_SETUP
    20142023#line 205 "lex.ll"
    2015 { KEYWORD_RETURN(DEFAULT); }
     2024{ KEYWORD_RETURN(DISABLE); }                    // CFA
    20162025        YY_BREAK
    20172026case 38:
    20182027YY_RULE_SETUP
    20192028#line 206 "lex.ll"
    2020 { KEYWORD_RETURN(DISABLE); }                    // CFA
     2029{ KEYWORD_RETURN(DO); }
    20212030        YY_BREAK
    20222031case 39:
    20232032YY_RULE_SETUP
    20242033#line 207 "lex.ll"
    2025 { KEYWORD_RETURN(DO); }
     2034{ KEYWORD_RETURN(DOUBLE); }
    20262035        YY_BREAK
    20272036case 40:
    20282037YY_RULE_SETUP
    20292038#line 208 "lex.ll"
    2030 { KEYWORD_RETURN(DOUBLE); }
     2039{ KEYWORD_RETURN(DTYPE); }                              // CFA
    20312040        YY_BREAK
    20322041case 41:
    20332042YY_RULE_SETUP
    20342043#line 209 "lex.ll"
    2035 { KEYWORD_RETURN(DTYPE); }                              // CFA
     2044{ KEYWORD_RETURN(ELSE); }
    20362045        YY_BREAK
    20372046case 42:
    20382047YY_RULE_SETUP
    20392048#line 210 "lex.ll"
    2040 { KEYWORD_RETURN(ELSE); }
     2049{ KEYWORD_RETURN(ENABLE); }                             // CFA
    20412050        YY_BREAK
    20422051case 43:
    20432052YY_RULE_SETUP
    20442053#line 211 "lex.ll"
    2045 { KEYWORD_RETURN(ENABLE); }                             // CFA
     2054{ KEYWORD_RETURN(ENUM); }
    20462055        YY_BREAK
    20472056case 44:
    20482057YY_RULE_SETUP
    20492058#line 212 "lex.ll"
    2050 { KEYWORD_RETURN(ENUM); }
     2059{ KEYWORD_RETURN(EXTENSION); }                  // GCC
    20512060        YY_BREAK
    20522061case 45:
    20532062YY_RULE_SETUP
    20542063#line 213 "lex.ll"
    2055 { KEYWORD_RETURN(EXTENSION); }                  // GCC
     2064{ KEYWORD_RETURN(EXTERN); }
    20562065        YY_BREAK
    20572066case 46:
    20582067YY_RULE_SETUP
    20592068#line 214 "lex.ll"
    2060 { KEYWORD_RETURN(EXTERN); }
     2069{ KEYWORD_RETURN(FALLTHRU); }                   // CFA
    20612070        YY_BREAK
    20622071case 47:
    20632072YY_RULE_SETUP
    20642073#line 215 "lex.ll"
    2065 { KEYWORD_RETURN(FALLTHRU); }                   // CFA
     2074{ KEYWORD_RETURN(FINALLY); }                    // CFA
    20662075        YY_BREAK
    20672076case 48:
    20682077YY_RULE_SETUP
    20692078#line 216 "lex.ll"
    2070 { KEYWORD_RETURN(FINALLY); }                    // CFA
     2079{ KEYWORD_RETURN(FLOAT); }
    20712080        YY_BREAK
    20722081case 49:
    20732082YY_RULE_SETUP
    20742083#line 217 "lex.ll"
    2075 { KEYWORD_RETURN(FLOAT); }
     2084{ KEYWORD_RETURN(FLOAT); }                              // GCC
    20762085        YY_BREAK
    20772086case 50:
    20782087YY_RULE_SETUP
    20792088#line 218 "lex.ll"
    2080 { KEYWORD_RETURN(FLOAT); }                              // GCC
     2089{ KEYWORD_RETURN(FOR); }
    20812090        YY_BREAK
    20822091case 51:
    20832092YY_RULE_SETUP
    20842093#line 219 "lex.ll"
    2085 { KEYWORD_RETURN(FOR); }
     2094{ KEYWORD_RETURN(FORALL); }                             // CFA
    20862095        YY_BREAK
    20872096case 52:
    20882097YY_RULE_SETUP
    20892098#line 220 "lex.ll"
    2090 { KEYWORD_RETURN(FORALL); }                             // CFA
     2099{ KEYWORD_RETURN(FORTRAN); }
    20912100        YY_BREAK
    20922101case 53:
    20932102YY_RULE_SETUP
    20942103#line 221 "lex.ll"
    2095 { KEYWORD_RETURN(FORTRAN); }
     2104{ KEYWORD_RETURN(FTYPE); }                              // CFA
    20962105        YY_BREAK
    20972106case 54:
    20982107YY_RULE_SETUP
    20992108#line 222 "lex.ll"
    2100 { KEYWORD_RETURN(FTYPE); }                              // CFA
     2109{ KEYWORD_RETURN(GENERIC); }                    // C11
    21012110        YY_BREAK
    21022111case 55:
    21032112YY_RULE_SETUP
    21042113#line 223 "lex.ll"
    2105 { KEYWORD_RETURN(GENERIC); }                    // C11
     2114{ KEYWORD_RETURN(GOTO); }
    21062115        YY_BREAK
    21072116case 56:
    21082117YY_RULE_SETUP
    21092118#line 224 "lex.ll"
    2110 { KEYWORD_RETURN(GOTO); }
     2119{ KEYWORD_RETURN(IF); }
    21112120        YY_BREAK
    21122121case 57:
    21132122YY_RULE_SETUP
    21142123#line 225 "lex.ll"
    2115 { KEYWORD_RETURN(IF); }
     2124{ KEYWORD_RETURN(IMAGINARY); }                  // C99
    21162125        YY_BREAK
    21172126case 58:
    21182127YY_RULE_SETUP
    21192128#line 226 "lex.ll"
    2120 { KEYWORD_RETURN(IMAGINARY); }                  // C99
     2129{ KEYWORD_RETURN(IMAGINARY); }                  // GCC
    21212130        YY_BREAK
    21222131case 59:
     
    21282137YY_RULE_SETUP
    21292138#line 228 "lex.ll"
    2130 { KEYWORD_RETURN(IMAGINARY); }                  // GCC
     2139{ KEYWORD_RETURN(INLINE); }                             // C99
    21312140        YY_BREAK
    21322141case 61:
    21332142YY_RULE_SETUP
    21342143#line 229 "lex.ll"
    2135 { KEYWORD_RETURN(INLINE); }                             // C99
     2144{ KEYWORD_RETURN(INLINE); }                             // GCC
    21362145        YY_BREAK
    21372146case 62:
     
    21432152YY_RULE_SETUP
    21442153#line 231 "lex.ll"
    2145 { KEYWORD_RETURN(INLINE); }                             // GCC
     2154{ KEYWORD_RETURN(INT); }
    21462155        YY_BREAK
    21472156case 64:
    21482157YY_RULE_SETUP
    21492158#line 232 "lex.ll"
    2150 { KEYWORD_RETURN(INT); }
     2159{ KEYWORD_RETURN(INT); }                                // GCC
    21512160        YY_BREAK
    21522161case 65:
    21532162YY_RULE_SETUP
    21542163#line 233 "lex.ll"
    2155 { KEYWORD_RETURN(INT); }                                // GCC
     2164{ KEYWORD_RETURN(LABEL); }                              // GCC
    21562165        YY_BREAK
    21572166case 66:
    21582167YY_RULE_SETUP
    21592168#line 234 "lex.ll"
    2160 { KEYWORD_RETURN(LABEL); }                              // GCC
     2169{ KEYWORD_RETURN(LONG); }
    21612170        YY_BREAK
    21622171case 67:
    21632172YY_RULE_SETUP
    21642173#line 235 "lex.ll"
    2165 { KEYWORD_RETURN(LONG); }
     2174{ KEYWORD_RETURN(LVALUE); }                             // CFA
    21662175        YY_BREAK
    21672176case 68:
    21682177YY_RULE_SETUP
    21692178#line 236 "lex.ll"
    2170 { KEYWORD_RETURN(LVALUE); }                             // CFA
     2179{ KEYWORD_RETURN(NORETURN); }                   // C11
    21712180        YY_BREAK
    21722181case 69:
    21732182YY_RULE_SETUP
    21742183#line 237 "lex.ll"
    2175 { KEYWORD_RETURN(NORETURN); }                   // C11
     2184{ KEYWORD_RETURN(OFFSETOF); }           // GCC
    21762185        YY_BREAK
    21772186case 70:
    21782187YY_RULE_SETUP
    21792188#line 238 "lex.ll"
    2180 { KEYWORD_RETURN(OFFSETOF); }           // GCC
     2189{ KEYWORD_RETURN(OTYPE); }                              // CFA
    21812190        YY_BREAK
    21822191case 71:
     
    22682277YY_RULE_SETUP
    22692278#line 256 "lex.ll"
     2279{ KEYWORD_RETURN(TRAIT); }                              // CFA
     2280        YY_BREAK
     2281case 89:
     2282YY_RULE_SETUP
     2283#line 257 "lex.ll"
    22702284{ KEYWORD_RETURN(TRY); }                                // CFA
    2271         YY_BREAK
    2272 case 89:
    2273 YY_RULE_SETUP
    2274 #line 257 "lex.ll"
    2275 { KEYWORD_RETURN(TYPE); }                               // CFA
    22762285        YY_BREAK
    22772286case 90:
     
    23082317YY_RULE_SETUP
    23092318#line 264 "lex.ll"
     2319{ KEYWORD_RETURN(VALIST); }                     // GCC
     2320        YY_BREAK
     2321case 97:
     2322YY_RULE_SETUP
     2323#line 265 "lex.ll"
    23102324{ KEYWORD_RETURN(VOID); }
    23112325        YY_BREAK
    2312 case 97:
    2313 YY_RULE_SETUP
    2314 #line 265 "lex.ll"
     2326case 98:
     2327YY_RULE_SETUP
     2328#line 266 "lex.ll"
    23152329{ KEYWORD_RETURN(VOLATILE); }
    2316         YY_BREAK
    2317 case 98:
    2318 YY_RULE_SETUP
    2319 #line 266 "lex.ll"
    2320 { KEYWORD_RETURN(VOLATILE); }                   // GCC
    23212330        YY_BREAK
    23222331case 99:
     
    23282337YY_RULE_SETUP
    23292338#line 268 "lex.ll"
     2339{ KEYWORD_RETURN(VOLATILE); }                   // GCC
     2340        YY_BREAK
     2341case 101:
     2342YY_RULE_SETUP
     2343#line 269 "lex.ll"
    23302344{ KEYWORD_RETURN(WHILE); }
    23312345        YY_BREAK
    23322346/* identifier */
    2333 case 101:
    2334 YY_RULE_SETUP
    2335 #line 271 "lex.ll"
     2347case 102:
     2348YY_RULE_SETUP
     2349#line 272 "lex.ll"
    23362350{ IDENTIFIER_RETURN(); }
    23372351        YY_BREAK
    2338 case 102:
    2339 YY_RULE_SETUP
    2340 #line 272 "lex.ll"
     2352case 103:
     2353YY_RULE_SETUP
     2354#line 273 "lex.ll"
    23412355{ ATTRIBUTE_RETURN(); }
    23422356        YY_BREAK
    2343 case 103:
    2344 YY_RULE_SETUP
    2345 #line 273 "lex.ll"
     2357case 104:
     2358YY_RULE_SETUP
     2359#line 274 "lex.ll"
    23462360{ BEGIN BKQUOTE; }
    23472361        YY_BREAK
    2348 case 104:
    2349 YY_RULE_SETUP
    2350 #line 274 "lex.ll"
     2362case 105:
     2363YY_RULE_SETUP
     2364#line 275 "lex.ll"
    23512365{ IDENTIFIER_RETURN(); }
    23522366        YY_BREAK
    2353 case 105:
    2354 YY_RULE_SETUP
    2355 #line 275 "lex.ll"
     2367case 106:
     2368YY_RULE_SETUP
     2369#line 276 "lex.ll"
    23562370{ BEGIN 0; }
    23572371        YY_BREAK
    23582372/* numeric constants */
    2359 case 106:
    2360 YY_RULE_SETUP
    2361 #line 278 "lex.ll"
     2373case 107:
     2374YY_RULE_SETUP
     2375#line 279 "lex.ll"
    23622376{ NUMERIC_RETURN(ZERO); }                               // CFA
    23632377        YY_BREAK
    2364 case 107:
    2365 YY_RULE_SETUP
    2366 #line 279 "lex.ll"
     2378case 108:
     2379YY_RULE_SETUP
     2380#line 280 "lex.ll"
    23672381{ NUMERIC_RETURN(ONE); }                                // CFA
    2368         YY_BREAK
    2369 case 108:
    2370 YY_RULE_SETUP
    2371 #line 280 "lex.ll"
    2372 { NUMERIC_RETURN(INTEGERconstant); }
    23732382        YY_BREAK
    23742383case 109:
     
    23852394YY_RULE_SETUP
    23862395#line 283 "lex.ll"
    2387 { NUMERIC_RETURN(FLOATINGconstant); }
     2396{ NUMERIC_RETURN(INTEGERconstant); }
    23882397        YY_BREAK
    23892398case 112:
     
    23922401{ NUMERIC_RETURN(FLOATINGconstant); }
    23932402        YY_BREAK
     2403case 113:
     2404YY_RULE_SETUP
     2405#line 285 "lex.ll"
     2406{ NUMERIC_RETURN(FLOATINGconstant); }
     2407        YY_BREAK
    23942408/* character constant, allows empty value */
    2395 case 113:
    2396 YY_RULE_SETUP
    2397 #line 287 "lex.ll"
     2409case 114:
     2410YY_RULE_SETUP
     2411#line 288 "lex.ll"
    23982412{ BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
    23992413        YY_BREAK
    2400 case 114:
    2401 YY_RULE_SETUP
    2402 #line 288 "lex.ll"
     2414case 115:
     2415YY_RULE_SETUP
     2416#line 289 "lex.ll"
    24032417{ *strtext += std::string( yytext ); }
    24042418        YY_BREAK
    2405 case 115:
    2406 /* rule 115 can match eol */
    2407 YY_RULE_SETUP
    2408 #line 289 "lex.ll"
     2419case 116:
     2420/* rule 116 can match eol */
     2421YY_RULE_SETUP
     2422#line 290 "lex.ll"
    24092423{ BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
    24102424        YY_BREAK
    24112425/* ' stop highlighting */
    24122426/* string constant */
    2413 case 116:
    2414 YY_RULE_SETUP
    2415 #line 293 "lex.ll"
     2427case 117:
     2428YY_RULE_SETUP
     2429#line 294 "lex.ll"
    24162430{ BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
    24172431        YY_BREAK
    2418 case 117:
    2419 YY_RULE_SETUP
    2420 #line 294 "lex.ll"
     2432case 118:
     2433YY_RULE_SETUP
     2434#line 295 "lex.ll"
    24212435{ *strtext += std::string( yytext ); }
    24222436        YY_BREAK
    2423 case 118:
    2424 /* rule 118 can match eol */
    2425 YY_RULE_SETUP
    2426 #line 295 "lex.ll"
     2437case 119:
     2438/* rule 119 can match eol */
     2439YY_RULE_SETUP
     2440#line 296 "lex.ll"
    24272441{ BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
    24282442        YY_BREAK
    24292443/* " stop highlighting */
    24302444/* common character/string constant */
    2431 case 119:
    2432 YY_RULE_SETUP
    2433 #line 299 "lex.ll"
     2445case 120:
     2446YY_RULE_SETUP
     2447#line 300 "lex.ll"
    24342448{ rm_underscore(); *strtext += std::string( yytext ); }
    24352449        YY_BREAK
    2436 case 120:
    2437 /* rule 120 can match eol */
    2438 YY_RULE_SETUP
    2439 #line 300 "lex.ll"
     2450case 121:
     2451/* rule 121 can match eol */
     2452YY_RULE_SETUP
     2453#line 301 "lex.ll"
    24402454{}                                              // continuation (ALSO HANDLED BY CPP)
    24412455        YY_BREAK
    2442 case 121:
    2443 YY_RULE_SETUP
    2444 #line 301 "lex.ll"
     2456case 122:
     2457YY_RULE_SETUP
     2458#line 302 "lex.ll"
    24452459{ *strtext += std::string( yytext ); } // unknown escape character
    24462460        YY_BREAK
    24472461/* punctuation */
    2448 case 122:
    2449 YY_RULE_SETUP
    2450 #line 304 "lex.ll"
    2451 { ASCIIOP_RETURN(); }
    2452         YY_BREAK
    24532462case 123:
    24542463YY_RULE_SETUP
     
    24792488YY_RULE_SETUP
    24802489#line 310 "lex.ll"
     2490{ ASCIIOP_RETURN(); }
     2491        YY_BREAK
     2492case 129:
     2493YY_RULE_SETUP
     2494#line 311 "lex.ll"
    24812495{ ASCIIOP_RETURN(); }                                   // also operator
    2482         YY_BREAK
    2483 case 129:
    2484 YY_RULE_SETUP
    2485 #line 311 "lex.ll"
    2486 { ASCIIOP_RETURN(); }
    24872496        YY_BREAK
    24882497case 130:
     
    24942503YY_RULE_SETUP
    24952504#line 313 "lex.ll"
     2505{ ASCIIOP_RETURN(); }
     2506        YY_BREAK
     2507case 132:
     2508YY_RULE_SETUP
     2509#line 314 "lex.ll"
    24962510{ ASCIIOP_RETURN(); }                                   // also operator
    24972511        YY_BREAK
    2498 case 132:
    2499 YY_RULE_SETUP
    2500 #line 314 "lex.ll"
     2512case 133:
     2513YY_RULE_SETUP
     2514#line 315 "lex.ll"
    25012515{ NAMEDOP_RETURN(ELLIPSIS); }
    25022516        YY_BREAK
    25032517/* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
    2504 case 133:
    2505 YY_RULE_SETUP
    2506 #line 317 "lex.ll"
     2518case 134:
     2519YY_RULE_SETUP
     2520#line 318 "lex.ll"
    25072521{ RETURN_VAL('['); }
    25082522        YY_BREAK
    2509 case 134:
    2510 YY_RULE_SETUP
    2511 #line 318 "lex.ll"
     2523case 135:
     2524YY_RULE_SETUP
     2525#line 319 "lex.ll"
    25122526{ RETURN_VAL(']'); }
    25132527        YY_BREAK
    2514 case 135:
    2515 YY_RULE_SETUP
    2516 #line 319 "lex.ll"
     2528case 136:
     2529YY_RULE_SETUP
     2530#line 320 "lex.ll"
    25172531{ RETURN_VAL('{'); }
    25182532        YY_BREAK
    2519 case 136:
    2520 YY_RULE_SETUP
    2521 #line 320 "lex.ll"
     2533case 137:
     2534YY_RULE_SETUP
     2535#line 321 "lex.ll"
    25222536{ RETURN_VAL('}'); }
    25232537        YY_BREAK
    25242538/* operators */
    2525 case 137:
    2526 YY_RULE_SETUP
    2527 #line 323 "lex.ll"
    2528 { ASCIIOP_RETURN(); }
    2529         YY_BREAK
    25302539case 138:
    25312540YY_RULE_SETUP
     
    25952604case 151:
    25962605YY_RULE_SETUP
    2597 #line 338 "lex.ll"
     2606#line 337 "lex.ll"
     2607{ ASCIIOP_RETURN(); }
     2608        YY_BREAK
     2609case 152:
     2610YY_RULE_SETUP
     2611#line 339 "lex.ll"
    25982612{ NAMEDOP_RETURN(ICR); }
    25992613        YY_BREAK
    2600 case 152:
    2601 YY_RULE_SETUP
    2602 #line 339 "lex.ll"
     2614case 153:
     2615YY_RULE_SETUP
     2616#line 340 "lex.ll"
    26032617{ NAMEDOP_RETURN(DECR); }
    26042618        YY_BREAK
    2605 case 153:
    2606 YY_RULE_SETUP
    2607 #line 340 "lex.ll"
     2619case 154:
     2620YY_RULE_SETUP
     2621#line 341 "lex.ll"
    26082622{ NAMEDOP_RETURN(EQ); }
    26092623        YY_BREAK
    2610 case 154:
    2611 YY_RULE_SETUP
    2612 #line 341 "lex.ll"
     2624case 155:
     2625YY_RULE_SETUP
     2626#line 342 "lex.ll"
    26132627{ NAMEDOP_RETURN(NE); }
    26142628        YY_BREAK
    2615 case 155:
    2616 YY_RULE_SETUP
    2617 #line 342 "lex.ll"
     2629case 156:
     2630YY_RULE_SETUP
     2631#line 343 "lex.ll"
    26182632{ NAMEDOP_RETURN(LS); }
    26192633        YY_BREAK
    2620 case 156:
    2621 YY_RULE_SETUP
    2622 #line 343 "lex.ll"
     2634case 157:
     2635YY_RULE_SETUP
     2636#line 344 "lex.ll"
    26232637{ NAMEDOP_RETURN(RS); }
    26242638        YY_BREAK
    2625 case 157:
    2626 YY_RULE_SETUP
    2627 #line 344 "lex.ll"
     2639case 158:
     2640YY_RULE_SETUP
     2641#line 345 "lex.ll"
    26282642{ NAMEDOP_RETURN(LE); }
    26292643        YY_BREAK
    2630 case 158:
    2631 YY_RULE_SETUP
    2632 #line 345 "lex.ll"
     2644case 159:
     2645YY_RULE_SETUP
     2646#line 346 "lex.ll"
    26332647{ NAMEDOP_RETURN(GE); }
    26342648        YY_BREAK
    2635 case 159:
    2636 YY_RULE_SETUP
    2637 #line 346 "lex.ll"
     2649case 160:
     2650YY_RULE_SETUP
     2651#line 347 "lex.ll"
    26382652{ NAMEDOP_RETURN(ANDAND); }
    26392653        YY_BREAK
    2640 case 160:
    2641 YY_RULE_SETUP
    2642 #line 347 "lex.ll"
     2654case 161:
     2655YY_RULE_SETUP
     2656#line 348 "lex.ll"
    26432657{ NAMEDOP_RETURN(OROR); }
    26442658        YY_BREAK
    2645 case 161:
    2646 YY_RULE_SETUP
    2647 #line 348 "lex.ll"
     2659case 162:
     2660YY_RULE_SETUP
     2661#line 349 "lex.ll"
    26482662{ NAMEDOP_RETURN(ARROW); }
    26492663        YY_BREAK
    2650 case 162:
    2651 YY_RULE_SETUP
    2652 #line 349 "lex.ll"
     2664case 163:
     2665YY_RULE_SETUP
     2666#line 350 "lex.ll"
    26532667{ NAMEDOP_RETURN(PLUSassign); }
    26542668        YY_BREAK
    2655 case 163:
    2656 YY_RULE_SETUP
    2657 #line 350 "lex.ll"
     2669case 164:
     2670YY_RULE_SETUP
     2671#line 351 "lex.ll"
    26582672{ NAMEDOP_RETURN(MINUSassign); }
    26592673        YY_BREAK
    2660 case 164:
    2661 YY_RULE_SETUP
    2662 #line 351 "lex.ll"
     2674case 165:
     2675YY_RULE_SETUP
     2676#line 352 "lex.ll"
    26632677{ NAMEDOP_RETURN(MULTassign); }
    26642678        YY_BREAK
    2665 case 165:
    2666 YY_RULE_SETUP
    2667 #line 352 "lex.ll"
     2679case 166:
     2680YY_RULE_SETUP
     2681#line 353 "lex.ll"
    26682682{ NAMEDOP_RETURN(DIVassign); }
    26692683        YY_BREAK
    2670 case 166:
    2671 YY_RULE_SETUP
    2672 #line 353 "lex.ll"
     2684case 167:
     2685YY_RULE_SETUP
     2686#line 354 "lex.ll"
    26732687{ NAMEDOP_RETURN(MODassign); }
    26742688        YY_BREAK
    2675 case 167:
    2676 YY_RULE_SETUP
    2677 #line 354 "lex.ll"
     2689case 168:
     2690YY_RULE_SETUP
     2691#line 355 "lex.ll"
    26782692{ NAMEDOP_RETURN(ANDassign); }
    26792693        YY_BREAK
    2680 case 168:
    2681 YY_RULE_SETUP
    2682 #line 355 "lex.ll"
     2694case 169:
     2695YY_RULE_SETUP
     2696#line 356 "lex.ll"
    26832697{ NAMEDOP_RETURN(ORassign); }
    26842698        YY_BREAK
    2685 case 169:
    2686 YY_RULE_SETUP
    2687 #line 356 "lex.ll"
     2699case 170:
     2700YY_RULE_SETUP
     2701#line 357 "lex.ll"
    26882702{ NAMEDOP_RETURN(ERassign); }
    26892703        YY_BREAK
    2690 case 170:
    2691 YY_RULE_SETUP
    2692 #line 357 "lex.ll"
     2704case 171:
     2705YY_RULE_SETUP
     2706#line 358 "lex.ll"
    26932707{ NAMEDOP_RETURN(LSassign); }
    26942708        YY_BREAK
    2695 case 171:
    2696 YY_RULE_SETUP
    2697 #line 358 "lex.ll"
     2709case 172:
     2710YY_RULE_SETUP
     2711#line 359 "lex.ll"
    26982712{ NAMEDOP_RETURN(RSassign); }
    26992713        YY_BREAK
    2700 case 172:
    2701 YY_RULE_SETUP
    2702 #line 360 "lex.ll"
     2714case 173:
     2715YY_RULE_SETUP
     2716#line 361 "lex.ll"
    27032717{ NAMEDOP_RETURN(ATassign); }
    27042718        YY_BREAK
    27052719/* CFA, operator identifier */
    2706 case 173:
    2707 YY_RULE_SETUP
    2708 #line 363 "lex.ll"
     2720case 174:
     2721YY_RULE_SETUP
     2722#line 364 "lex.ll"
    27092723{ IDENTIFIER_RETURN(); }                                // unary
    2710         YY_BREAK
    2711 case 174:
    2712 YY_RULE_SETUP
    2713 #line 364 "lex.ll"
    2714 { IDENTIFIER_RETURN(); }
    27152724        YY_BREAK
    27162725case 175:
     
    27222731YY_RULE_SETUP
    27232732#line 366 "lex.ll"
     2733{ IDENTIFIER_RETURN(); }
     2734        YY_BREAK
     2735case 177:
     2736YY_RULE_SETUP
     2737#line 367 "lex.ll"
    27242738{ IDENTIFIER_RETURN(); }                // binary
    27252739        YY_BREAK
     
    27502764          an argument list.
    27512765        */
    2752 case 177:
    2753 YY_RULE_SETUP
    2754 #line 393 "lex.ll"
     2766case 178:
     2767YY_RULE_SETUP
     2768#line 394 "lex.ll"
    27552769{
    27562770        // 1 or 2 character unary operator ?
     
    27652779        YY_BREAK
    27662780/* unknown characters */
    2767 case 178:
    2768 YY_RULE_SETUP
    2769 #line 405 "lex.ll"
     2781case 179:
     2782YY_RULE_SETUP
     2783#line 406 "lex.ll"
    27702784{ printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
    27712785        YY_BREAK
    2772 case 179:
    2773 YY_RULE_SETUP
    2774 #line 407 "lex.ll"
     2786case 180:
     2787YY_RULE_SETUP
     2788#line 408 "lex.ll"
    27752789ECHO;
    27762790        YY_BREAK
    2777 #line 2778 "Parser/lex.cc"
     2791#line 2792 "Parser/lex.cc"
    27782792case YY_STATE_EOF(INITIAL):
    27792793case YY_STATE_EOF(COMMENT):
     
    30723086                        {
    30733087                        yy_current_state = (int) yy_def[yy_current_state];
    3074                         if ( yy_current_state >= 876 )
     3088                        if ( yy_current_state >= 888 )
    30753089                                yy_c = yy_meta[(unsigned int) yy_c];
    30763090                        }
     
    31003114                {
    31013115                yy_current_state = (int) yy_def[yy_current_state];
    3102                 if ( yy_current_state >= 876 )
     3116                if ( yy_current_state >= 888 )
    31033117                        yy_c = yy_meta[(unsigned int) yy_c];
    31043118                }
    31053119        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
    3106         yy_is_jam = (yy_current_state == 875);
     3120        yy_is_jam = (yy_current_state == 887);
    31073121
    31083122        return yy_is_jam ? 0 : yy_current_state;
     
    37503764#define YYTABLES_NAME "yytables"
    37513765
    3752 #line 407 "lex.ll"
     3766#line 408 "lex.ll"
    37533767
    37543768
  • src/Parser/lex.ll

    r9d7b3ea r36ebd03  
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Tue Feb  2 15:06:54 2016
    13  * Update Count     : 426
     12 * Last Modified On : Wed Mar  2 18:07:20 2016
     13 * Update Count     : 434
    1414 */
    1515
     
    137137%%
    138138                                   /* line directives */
    139 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["][^\n]*"\n" {
     139^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" {
    140140        /* " stop highlighting */
    141141        char *end_num;
     
    201201__const                 { KEYWORD_RETURN(CONST); }                              // GCC
    202202__const__               { KEYWORD_RETURN(CONST); }                              // GCC
    203 context                 { KEYWORD_RETURN(CONTEXT); }                    // CFA
    204203continue                { KEYWORD_RETURN(CONTINUE); }
    205204default                 { KEYWORD_RETURN(DEFAULT); }
     
    237236_Noreturn               { KEYWORD_RETURN(NORETURN); }                   // C11
    238237__builtin_offsetof { KEYWORD_RETURN(OFFSETOF); }                // GCC
     238otype                   { KEYWORD_RETURN(OTYPE); }                              // CFA
    239239register                { KEYWORD_RETURN(REGISTER); }
    240240restrict                { KEYWORD_RETURN(RESTRICT); }                   // C99
     
    254254throw                   { KEYWORD_RETURN(THROW); }                              // CFA
    255255throwResume             { KEYWORD_RETURN(THROWRESUME); }                // CFA
     256trait                   { KEYWORD_RETURN(TRAIT); }                              // CFA
    256257try                             { KEYWORD_RETURN(TRY); }                                // CFA
    257 type                    { KEYWORD_RETURN(TYPE); }                               // CFA
    258258typedef                 { KEYWORD_RETURN(TYPEDEF); }
    259259typeof                  { KEYWORD_RETURN(TYPEOF); }                             // GCC
     
    262262union                   { KEYWORD_RETURN(UNION); }
    263263unsigned                { KEYWORD_RETURN(UNSIGNED); }
     264__builtin_va_list { KEYWORD_RETURN(VALIST); }                   // GCC
    264265void                    { KEYWORD_RETURN(VOID); }
    265266volatile                { KEYWORD_RETURN(VOLATILE); }
  • src/Parser/parser.cc

    r9d7b3ea r36ebd03  
    138138     SIGNED = 277,
    139139     UNSIGNED = 278,
    140      BOOL = 279,
    141      COMPLEX = 280,
    142      IMAGINARY = 281,
    143      TYPEOF = 282,
    144      LABEL = 283,
    145      ENUM = 284,
    146      STRUCT = 285,
    147      UNION = 286,
    148      TYPE = 287,
    149      FTYPE = 288,
    150      DTYPE = 289,
    151      CONTEXT = 290,
    152      SIZEOF = 291,
    153      OFFSETOF = 292,
    154      ATTRIBUTE = 293,
    155      EXTENSION = 294,
    156      IF = 295,
    157      ELSE = 296,
    158      SWITCH = 297,
    159      CASE = 298,
    160      DEFAULT = 299,
    161      DO = 300,
    162      WHILE = 301,
    163      FOR = 302,
    164      BREAK = 303,
    165      CONTINUE = 304,
    166      GOTO = 305,
    167      RETURN = 306,
    168      CHOOSE = 307,
    169      DISABLE = 308,
    170      ENABLE = 309,
    171      FALLTHRU = 310,
    172      TRY = 311,
    173      CATCH = 312,
    174      CATCHRESUME = 313,
    175      FINALLY = 314,
    176      THROW = 315,
    177      THROWRESUME = 316,
    178      AT = 317,
    179      ASM = 318,
    180      ALIGNAS = 319,
    181      ALIGNOF = 320,
    182      ATOMIC = 321,
    183      GENERIC = 322,
    184      NORETURN = 323,
    185      STATICASSERT = 324,
    186      THREADLOCAL = 325,
    187      IDENTIFIER = 326,
    188      QUOTED_IDENTIFIER = 327,
    189      TYPEDEFname = 328,
    190      TYPEGENname = 329,
    191      ATTR_IDENTIFIER = 330,
    192      ATTR_TYPEDEFname = 331,
    193      ATTR_TYPEGENname = 332,
    194      INTEGERconstant = 333,
    195      FLOATINGconstant = 334,
    196      CHARACTERconstant = 335,
    197      STRINGliteral = 336,
    198      ZERO = 337,
    199      ONE = 338,
    200      ARROW = 339,
    201      ICR = 340,
    202      DECR = 341,
    203      LS = 342,
    204      RS = 343,
    205      LE = 344,
    206      GE = 345,
    207      EQ = 346,
    208      NE = 347,
    209      ANDAND = 348,
    210      OROR = 349,
    211      ELLIPSIS = 350,
    212      MULTassign = 351,
    213      DIVassign = 352,
    214      MODassign = 353,
    215      PLUSassign = 354,
    216      MINUSassign = 355,
    217      LSassign = 356,
    218      RSassign = 357,
    219      ANDassign = 358,
    220      ERassign = 359,
    221      ORassign = 360,
    222      ATassign = 361,
    223      THEN = 362
     140     VALIST = 279,
     141     BOOL = 280,
     142     COMPLEX = 281,
     143     IMAGINARY = 282,
     144     TYPEOF = 283,
     145     LABEL = 284,
     146     ENUM = 285,
     147     STRUCT = 286,
     148     UNION = 287,
     149     OTYPE = 288,
     150     FTYPE = 289,
     151     DTYPE = 290,
     152     TRAIT = 291,
     153     SIZEOF = 292,
     154     OFFSETOF = 293,
     155     ATTRIBUTE = 294,
     156     EXTENSION = 295,
     157     IF = 296,
     158     ELSE = 297,
     159     SWITCH = 298,
     160     CASE = 299,
     161     DEFAULT = 300,
     162     DO = 301,
     163     WHILE = 302,
     164     FOR = 303,
     165     BREAK = 304,
     166     CONTINUE = 305,
     167     GOTO = 306,
     168     RETURN = 307,
     169     CHOOSE = 308,
     170     DISABLE = 309,
     171     ENABLE = 310,
     172     FALLTHRU = 311,
     173     TRY = 312,
     174     CATCH = 313,
     175     CATCHRESUME = 314,
     176     FINALLY = 315,
     177     THROW = 316,
     178     THROWRESUME = 317,
     179     AT = 318,
     180     ASM = 319,
     181     ALIGNAS = 320,
     182     ALIGNOF = 321,
     183     ATOMIC = 322,
     184     GENERIC = 323,
     185     NORETURN = 324,
     186     STATICASSERT = 325,
     187     THREADLOCAL = 326,
     188     IDENTIFIER = 327,
     189     QUOTED_IDENTIFIER = 328,
     190     TYPEDEFname = 329,
     191     TYPEGENname = 330,
     192     ATTR_IDENTIFIER = 331,
     193     ATTR_TYPEDEFname = 332,
     194     ATTR_TYPEGENname = 333,
     195     INTEGERconstant = 334,
     196     FLOATINGconstant = 335,
     197     CHARACTERconstant = 336,
     198     STRINGliteral = 337,
     199     ZERO = 338,
     200     ONE = 339,
     201     ARROW = 340,
     202     ICR = 341,
     203     DECR = 342,
     204     LS = 343,
     205     RS = 344,
     206     LE = 345,
     207     GE = 346,
     208     EQ = 347,
     209     NE = 348,
     210     ANDAND = 349,
     211     OROR = 350,
     212     ELLIPSIS = 351,
     213     MULTassign = 352,
     214     DIVassign = 353,
     215     MODassign = 354,
     216     PLUSassign = 355,
     217     MINUSassign = 356,
     218     LSassign = 357,
     219     RSassign = 358,
     220     ANDassign = 359,
     221     ERassign = 360,
     222     ORassign = 361,
     223     ATassign = 362,
     224     THEN = 363
    224225   };
    225226#endif
     
    246247#define SIGNED 277
    247248#define UNSIGNED 278
    248 #define BOOL 279
    249 #define COMPLEX 280
    250 #define IMAGINARY 281
    251 #define TYPEOF 282
    252 #define LABEL 283
    253 #define ENUM 284
    254 #define STRUCT 285
    255 #define UNION 286
    256 #define TYPE 287
    257 #define FTYPE 288
    258 #define DTYPE 289
    259 #define CONTEXT 290
    260 #define SIZEOF 291
    261 #define OFFSETOF 292
    262 #define ATTRIBUTE 293
    263 #define EXTENSION 294
    264 #define IF 295
    265 #define ELSE 296
    266 #define SWITCH 297
    267 #define CASE 298
    268 #define DEFAULT 299
    269 #define DO 300
    270 #define WHILE 301
    271 #define FOR 302
    272 #define BREAK 303
    273 #define CONTINUE 304
    274 #define GOTO 305
    275 #define RETURN 306
    276 #define CHOOSE 307
    277 #define DISABLE 308
    278 #define ENABLE 309
    279 #define FALLTHRU 310
    280 #define TRY 311
    281 #define CATCH 312
    282 #define CATCHRESUME 313
    283 #define FINALLY 314
    284 #define THROW 315
    285 #define THROWRESUME 316
    286 #define AT 317
    287 #define ASM 318
    288 #define ALIGNAS 319
    289 #define ALIGNOF 320
    290 #define ATOMIC 321
    291 #define GENERIC 322
    292 #define NORETURN 323
    293 #define STATICASSERT 324
    294 #define THREADLOCAL 325
    295 #define IDENTIFIER 326
    296 #define QUOTED_IDENTIFIER 327
    297 #define TYPEDEFname 328
    298 #define TYPEGENname 329
    299 #define ATTR_IDENTIFIER 330
    300 #define ATTR_TYPEDEFname 331
    301 #define ATTR_TYPEGENname 332
    302 #define INTEGERconstant 333
    303 #define FLOATINGconstant 334
    304 #define CHARACTERconstant 335
    305 #define STRINGliteral 336
    306 #define ZERO 337
    307 #define ONE 338
    308 #define ARROW 339
    309 #define ICR 340
    310 #define DECR 341
    311 #define LS 342
    312 #define RS 343
    313 #define LE 344
    314 #define GE 345
    315 #define EQ 346
    316 #define NE 347
    317 #define ANDAND 348
    318 #define OROR 349
    319 #define ELLIPSIS 350
    320 #define MULTassign 351
    321 #define DIVassign 352
    322 #define MODassign 353
    323 #define PLUSassign 354
    324 #define MINUSassign 355
    325 #define LSassign 356
    326 #define RSassign 357
    327 #define ANDassign 358
    328 #define ERassign 359
    329 #define ORassign 360
    330 #define ATassign 361
    331 #define THEN 362
     249#define VALIST 279
     250#define BOOL 280
     251#define COMPLEX 281
     252#define IMAGINARY 282
     253#define TYPEOF 283
     254#define LABEL 284
     255#define ENUM 285
     256#define STRUCT 286
     257#define UNION 287
     258#define OTYPE 288
     259#define FTYPE 289
     260#define DTYPE 290
     261#define TRAIT 291
     262#define SIZEOF 292
     263#define OFFSETOF 293
     264#define ATTRIBUTE 294
     265#define EXTENSION 295
     266#define IF 296
     267#define ELSE 297
     268#define SWITCH 298
     269#define CASE 299
     270#define DEFAULT 300
     271#define DO 301
     272#define WHILE 302
     273#define FOR 303
     274#define BREAK 304
     275#define CONTINUE 305
     276#define GOTO 306
     277#define RETURN 307
     278#define CHOOSE 308
     279#define DISABLE 309
     280#define ENABLE 310
     281#define FALLTHRU 311
     282#define TRY 312
     283#define CATCH 313
     284#define CATCHRESUME 314
     285#define FINALLY 315
     286#define THROW 316
     287#define THROWRESUME 317
     288#define AT 318
     289#define ASM 319
     290#define ALIGNAS 320
     291#define ALIGNOF 321
     292#define ATOMIC 322
     293#define GENERIC 323
     294#define NORETURN 324
     295#define STATICASSERT 325
     296#define THREADLOCAL 326
     297#define IDENTIFIER 327
     298#define QUOTED_IDENTIFIER 328
     299#define TYPEDEFname 329
     300#define TYPEGENname 330
     301#define ATTR_IDENTIFIER 331
     302#define ATTR_TYPEDEFname 332
     303#define ATTR_TYPEGENname 333
     304#define INTEGERconstant 334
     305#define FLOATINGconstant 335
     306#define CHARACTERconstant 336
     307#define STRINGliteral 337
     308#define ZERO 338
     309#define ONE 339
     310#define ARROW 340
     311#define ICR 341
     312#define DECR 342
     313#define LS 343
     314#define RS 344
     315#define LE 345
     316#define GE 346
     317#define EQ 347
     318#define NE 348
     319#define ANDAND 349
     320#define OROR 350
     321#define ELLIPSIS 351
     322#define MULTassign 352
     323#define DIVassign 353
     324#define MODassign 354
     325#define PLUSassign 355
     326#define MINUSassign 356
     327#define LSassign 357
     328#define RSassign 358
     329#define ANDassign 359
     330#define ERassign 360
     331#define ORassign 361
     332#define ATassign 362
     333#define THEN 363
    332334
    333335
     
    339341
    340342/* Line 293 of yacc.c  */
    341 #line 110 "parser.yy"
     343#line 111 "parser.yy"
    342344
    343345        Token tok;
     
    356358
    357359/* Line 293 of yacc.c  */
    358 #line 359 "Parser/parser.cc"
     360#line 361 "Parser/parser.cc"
    359361} YYSTYPE;
    360362# define YYSTYPE_IS_TRIVIAL 1
     
    368370
    369371/* Line 343 of yacc.c  */
    370 #line 371 "Parser/parser.cc"
     372#line 373 "Parser/parser.cc"
    371373
    372374#ifdef short
     
    585587
    586588/* YYFINAL -- State number of the termination state.  */
    587 #define YYFINAL  248
     589#define YYFINAL  249
    588590/* YYLAST -- Last index in YYTABLE.  */
    589 #define YYLAST   11042
     591#define YYLAST   11290
    590592
    591593/* YYNTOKENS -- Number of terminals.  */
    592 #define YYNTOKENS  132
     594#define YYNTOKENS  133
    593595/* YYNNTS -- Number of nonterminals.  */
    594596#define YYNNTS  238
    595597/* YYNRULES -- Number of rules.  */
    596 #define YYNRULES  751
     598#define YYNRULES  752
    597599/* YYNRULES -- Number of states.  */
    598 #define YYNSTATES  1578
     600#define YYNSTATES  1579
    599601
    600602/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
    601603#define YYUNDEFTOK  2
    602 #define YYMAXUTOK   362
     604#define YYMAXUTOK   363
    603605
    604606#define YYTRANSLATE(YYX)                                                \
     
    611613       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    612614       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    613        2,     2,     2,   117,     2,     2,     2,   124,   119,     2,
    614      108,   109,   118,   120,   115,   121,   112,   123,     2,     2,
    615        2,     2,     2,     2,     2,     2,     2,     2,   116,   131,
    616      125,   130,   126,   129,     2,     2,     2,     2,     2,     2,
     615       2,     2,     2,   118,     2,     2,     2,   125,   120,     2,
     616     109,   110,   119,   121,   116,   122,   113,   124,     2,     2,
     617       2,     2,     2,     2,     2,     2,     2,     2,   117,   132,
     618     126,   131,   127,   130,     2,     2,     2,     2,     2,     2,
    617619       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    618620       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    619        2,   110,     2,   111,   127,     2,     2,     2,     2,     2,
     621       2,   111,     2,   112,   128,     2,     2,     2,     2,     2,
    620622       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    621623       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    622        2,     2,     2,   113,   128,   114,   122,     2,     2,     2,
     624       2,     2,     2,   114,   129,   115,   123,     2,     2,     2,
    623625       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    624626       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     
    644646      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
    645647      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
    646      105,   106,   107
     648     105,   106,   107,   108
    647649};
    648650
     
    685687    1156,  1158,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
    686688    1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,  1193,  1195,
    687     1197,  1199,  1201,  1203,  1205,  1208,  1211,  1215,  1219,  1221,
    688     1225,  1227,  1230,  1233,  1236,  1241,  1246,  1251,  1256,  1258,
    689     1261,  1264,  1268,  1270,  1273,  1276,  1278,  1281,  1284,  1288,
    690     1290,  1293,  1296,  1298,  1300,  1305,  1308,  1314,  1322,  1325,
    691     1328,  1331,  1333,  1336,  1339,  1343,  1346,  1350,  1352,  1355,
    692     1359,  1362,  1365,  1370,  1371,  1373,  1376,  1379,  1381,  1382,
    693     1384,  1387,  1390,  1396,  1403,  1406,  1409,  1414,  1415,  1418,
    694     1419,  1421,  1423,  1425,  1431,  1437,  1443,  1445,  1451,  1457,
    695     1467,  1469,  1475,  1476,  1478,  1480,  1486,  1488,  1490,  1496,
    696     1502,  1504,  1508,  1512,  1517,  1519,  1521,  1523,  1525,  1528,
    697     1530,  1534,  1538,  1540,  1543,  1545,  1549,  1551,  1553,  1555,
    698     1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1574,  1576,
    699     1578,  1580,  1583,  1584,  1587,  1590,  1592,  1597,  1598,  1600,
    700     1603,  1607,  1612,  1615,  1618,  1620,  1623,  1625,  1628,  1634,
    701     1640,  1648,  1655,  1657,  1660,  1663,  1667,  1669,  1672,  1675,
    702     1680,  1683,  1688,  1689,  1694,  1697,  1699,  1701,  1703,  1704,
    703     1707,  1713,  1719,  1733,  1735,  1737,  1741,  1745,  1748,  1752,
    704     1756,  1759,  1764,  1766,  1773,  1783,  1784,  1796,  1798,  1802,
    705     1806,  1810,  1812,  1814,  1820,  1823,  1829,  1830,  1832,  1834,
    706     1838,  1839,  1841,  1843,  1845,  1847,  1848,  1855,  1858,  1860,
    707     1863,  1868,  1871,  1875,  1879,  1883,  1888,  1894,  1900,  1906,
    708     1913,  1915,  1917,  1919,  1923,  1924,  1930,  1931,  1933,  1935,
    709     1938,  1945,  1947,  1951,  1952,  1954,  1959,  1961,  1963,  1965,
    710     1967,  1970,  1972,  1975,  1978,  1980,  1984,  1987,  1991,  1995,
    711     1998,  2003,  2008,  2012,  2021,  2025,  2028,  2030,  2033,  2040,
    712     2049,  2053,  2056,  2060,  2064,  2069,  2074,  2078,  2080,  2082,
    713     2084,  2089,  2096,  2100,  2103,  2107,  2111,  2116,  2121,  2125,
    714     2128,  2130,  2133,  2136,  2138,  2142,  2145,  2149,  2153,  2156,
    715     2161,  2166,  2170,  2177,  2186,  2190,  2193,  2195,  2198,  2201,
    716     2204,  2208,  2212,  2215,  2220,  2225,  2229,  2236,  2245,  2249,
    717     2252,  2254,  2257,  2260,  2262,  2264,  2267,  2271,  2275,  2278,
    718     2283,  2290,  2299,  2301,  2304,  2307,  2309,  2312,  2315,  2319,
    719     2323,  2325,  2330,  2335,  2339,  2345,  2354,  2358,  2361,  2365,
    720     2367,  2373,  2379,  2386,  2393,  2395,  2398,  2401,  2403,  2406,
    721     2409,  2413,  2417,  2419,  2424,  2429,  2433,  2439,  2448,  2452,
    722     2454,  2457,  2459,  2462,  2469,  2475,  2482,  2490,  2498,  2500,
    723     2503,  2506,  2508,  2511,  2514,  2518,  2522,  2524,  2529,  2534,
    724     2538,  2547,  2551,  2553,  2555,  2558,  2560,  2562,  2565,  2569,
    725     2572,  2576,  2579,  2583,  2587,  2590,  2595,  2599,  2602,  2606,
    726     2609,  2614,  2618,  2621,  2628,  2635,  2642,  2650,  2652,  2655,
    727     2657,  2659,  2661,  2664,  2668,  2671,  2675,  2678,  2682,  2686,
    728     2691,  2694,  2698,  2703,  2706,  2712,  2718,  2725,  2732,  2733,
    729     2735,  2736
     689    1197,  1199,  1201,  1203,  1205,  1207,  1210,  1213,  1217,  1221,
     690    1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,  1258,
     691    1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,  1286,
     692    1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1316,  1324,
     693    1327,  1330,  1333,  1335,  1338,  1341,  1345,  1348,  1352,  1354,
     694    1357,  1361,  1364,  1367,  1372,  1373,  1375,  1378,  1381,  1383,
     695    1384,  1386,  1389,  1392,  1398,  1405,  1408,  1411,  1416,  1417,
     696    1420,  1421,  1423,  1425,  1427,  1433,  1439,  1445,  1447,  1453,
     697    1459,  1469,  1471,  1477,  1478,  1480,  1482,  1488,  1490,  1492,
     698    1498,  1504,  1506,  1510,  1514,  1519,  1521,  1523,  1525,  1527,
     699    1530,  1532,  1536,  1540,  1542,  1545,  1547,  1551,  1553,  1555,
     700    1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1573,  1576,
     701    1578,  1580,  1582,  1585,  1586,  1589,  1592,  1594,  1599,  1600,
     702    1602,  1605,  1609,  1614,  1617,  1620,  1622,  1625,  1627,  1630,
     703    1636,  1642,  1650,  1657,  1659,  1662,  1665,  1669,  1671,  1674,
     704    1677,  1682,  1685,  1690,  1691,  1696,  1699,  1701,  1703,  1705,
     705    1706,  1709,  1715,  1721,  1735,  1737,  1739,  1743,  1747,  1750,
     706    1754,  1758,  1761,  1766,  1768,  1775,  1785,  1786,  1798,  1800,
     707    1804,  1808,  1812,  1814,  1816,  1822,  1825,  1831,  1832,  1834,
     708    1836,  1840,  1841,  1843,  1845,  1847,  1849,  1850,  1857,  1860,
     709    1862,  1865,  1870,  1873,  1877,  1881,  1885,  1890,  1896,  1902,
     710    1908,  1915,  1917,  1919,  1921,  1925,  1926,  1932,  1933,  1935,
     711    1937,  1940,  1947,  1949,  1953,  1954,  1956,  1961,  1963,  1965,
     712    1967,  1969,  1972,  1974,  1977,  1980,  1982,  1986,  1989,  1993,
     713    1997,  2000,  2005,  2010,  2014,  2023,  2027,  2030,  2032,  2035,
     714    2042,  2051,  2055,  2058,  2062,  2066,  2071,  2076,  2080,  2082,
     715    2084,  2086,  2091,  2098,  2102,  2105,  2109,  2113,  2118,  2123,
     716    2127,  2130,  2132,  2135,  2138,  2140,  2144,  2147,  2151,  2155,
     717    2158,  2163,  2168,  2172,  2179,  2188,  2192,  2195,  2197,  2200,
     718    2203,  2206,  2210,  2214,  2217,  2222,  2227,  2231,  2238,  2247,
     719    2251,  2254,  2256,  2259,  2262,  2264,  2266,  2269,  2273,  2277,
     720    2280,  2285,  2292,  2301,  2303,  2306,  2309,  2311,  2314,  2317,
     721    2321,  2325,  2327,  2332,  2337,  2341,  2347,  2356,  2360,  2363,
     722    2367,  2369,  2375,  2381,  2388,  2395,  2397,  2400,  2403,  2405,
     723    2408,  2411,  2415,  2419,  2421,  2426,  2431,  2435,  2441,  2450,
     724    2454,  2456,  2459,  2461,  2464,  2471,  2477,  2484,  2492,  2500,
     725    2502,  2505,  2508,  2510,  2513,  2516,  2520,  2524,  2526,  2531,
     726    2536,  2540,  2549,  2553,  2555,  2557,  2560,  2562,  2564,  2567,
     727    2571,  2574,  2578,  2581,  2585,  2589,  2592,  2597,  2601,  2604,
     728    2608,  2611,  2616,  2620,  2623,  2630,  2637,  2644,  2652,  2654,
     729    2657,  2659,  2661,  2663,  2666,  2670,  2673,  2677,  2680,  2684,
     730    2688,  2693,  2696,  2700,  2705,  2708,  2714,  2720,  2727,  2734,
     731    2735,  2737,  2738
    730732};
    731733
     
    733735static const yytype_int16 yyrhs[] =
    734736{
    735      298,     0,    -1,    -1,    -1,    78,    -1,    79,    -1,    80,
    736       -1,    71,    -1,    75,    -1,   139,    -1,    71,    -1,    75,
    737       -1,    71,    -1,   139,    -1,    82,    -1,    83,    -1,    81,
    738       -1,   140,    81,    -1,    71,    -1,   139,    -1,   108,   167,
    739      109,    -1,   108,   171,   109,    -1,   141,    -1,   142,   110,
    740      133,   162,   134,   111,    -1,   142,   108,   143,   109,    -1,
    741      142,   112,   138,    -1,   142,   112,   110,   133,   145,   134,
    742      111,    -1,   142,    84,   138,    -1,   142,    84,   110,   133,
    743      145,   134,   111,    -1,   142,    85,    -1,   142,    86,    -1,
    744      108,   271,   109,   113,   275,   368,   114,    -1,   142,   113,
    745      143,   114,    -1,   144,    -1,   143,   115,   144,    -1,    -1,
    746      162,    -1,   138,   116,   162,    -1,   110,   133,   162,   134,
    747      111,   116,   162,    -1,   110,   133,   162,   115,   165,   134,
    748      111,   116,   162,    -1,   146,    -1,   145,   115,   146,    -1,
    749      138,    -1,   138,   112,   146,    -1,   138,   112,   110,   133,
    750      145,   134,   111,    -1,   138,    84,   146,    -1,   138,    84,
    751      110,   133,   145,   134,   111,    -1,   142,    -1,   135,    -1,
    752      140,    -1,    85,   147,    -1,    86,   147,    -1,    39,   149,
    753       -1,   148,   149,    -1,   117,   149,    -1,   118,   149,    -1,
    754       36,   147,    -1,    36,   108,   271,   109,    -1,    37,   108,
    755      271,   115,   138,   109,    -1,    75,    -1,    75,   108,   272,
    756      109,    -1,    75,   108,   144,   109,    -1,    65,   147,    -1,
    757       65,   108,   271,   109,    -1,    93,   138,    -1,   119,    -1,
    758      120,    -1,   121,    -1,   122,    -1,   147,    -1,   108,   271,
    759      109,   149,    -1,   108,   271,   109,   164,    -1,   149,    -1,
    760      150,   118,   149,    -1,   150,   123,   149,    -1,   150,   124,
    761      149,    -1,   150,    -1,   151,   120,   150,    -1,   151,   121,
    762      150,    -1,   151,    -1,   152,    87,   151,    -1,   152,    88,
    763      151,    -1,   152,    -1,   153,   125,   152,    -1,   153,   126,
    764      152,    -1,   153,    89,   152,    -1,   153,    90,   152,    -1,
    765      153,    -1,   154,    91,   153,    -1,   154,    92,   153,    -1,
    766      154,    -1,   155,   119,   154,    -1,   155,    -1,   156,   127,
    767      155,    -1,   156,    -1,   157,   128,   156,    -1,   157,    -1,
    768      158,    93,   157,    -1,   158,    -1,   159,    94,   158,    -1,
    769      159,    -1,   159,   129,   167,   116,   160,    -1,   159,   129,
    770      116,   160,    -1,   159,   129,   167,   116,   164,    -1,   160,
    771       -1,   160,    -1,   147,   130,   162,    -1,   147,   166,   162,
    772       -1,   164,   369,    -1,    -1,   162,    -1,   110,   111,    -1,
    773      110,   133,   162,   134,   111,    -1,   110,   133,   115,   165,
    774      134,   111,    -1,   110,   133,   162,   115,   165,   134,   111,
    775       -1,   163,    -1,   165,   115,   163,    -1,    96,    -1,    97,
    776       -1,    98,    -1,    99,    -1,   100,    -1,   101,    -1,   102,
    777       -1,   103,    -1,   104,    -1,   105,    -1,   162,    -1,   167,
    778      115,   162,    -1,    -1,   167,    -1,   170,    -1,   171,    -1,
    779      175,    -1,   176,    -1,   188,    -1,   190,    -1,   191,    -1,
    780      196,    -1,   127,   142,   113,   143,   114,   131,    -1,   138,
    781      116,   308,   169,    -1,   113,   114,    -1,   113,   133,   133,
    782      207,   172,   134,   114,    -1,   173,    -1,   172,   133,   173,
    783       -1,   210,    -1,    39,   210,    -1,   304,    -1,   169,   134,
    784       -1,   169,    -1,   174,   169,    -1,   168,   131,    -1,    40,
    785      108,   167,   109,   169,    -1,    40,   108,   167,   109,   169,
    786       41,   169,    -1,    42,   108,   167,   109,   181,    -1,    42,
    787      108,   167,   109,   113,   133,   203,   182,   114,    -1,    52,
    788      108,   167,   109,   181,    -1,    52,   108,   167,   109,   113,
    789      133,   203,   184,   114,    -1,   161,    -1,   161,    95,   161,
    790       -1,   306,    -1,   177,    -1,   178,   115,   177,    -1,    43,
    791      178,   116,    -1,    44,   116,    -1,   179,    -1,   180,   179,
    792       -1,   180,   169,    -1,    -1,   183,    -1,   180,   174,    -1,
    793      183,   180,   174,    -1,    -1,   185,    -1,   180,   187,    -1,
    794      180,   174,   186,    -1,   185,   180,   187,    -1,   185,   180,
    795      174,   186,    -1,    -1,   187,    -1,    55,    -1,    55,   131,
    796       -1,    46,   108,   167,   109,   169,    -1,    45,   169,    46,
    797      108,   167,   109,   131,    -1,    47,   108,   133,   189,   109,
    798      169,    -1,   168,   134,   131,   168,   131,   168,    -1,   210,
    799      168,   131,   168,    -1,    50,   138,   131,    -1,    50,   118,
    800      167,   131,    -1,    49,   131,    -1,    49,   138,   131,    -1,
    801       48,   131,    -1,    48,   138,   131,    -1,    51,   168,   131,
    802       -1,    60,   163,   131,    -1,    61,   163,   131,    -1,    61,
    803      163,    62,   162,   131,    -1,    56,   171,   192,    -1,    56,
    804      171,   194,    -1,    56,   171,   192,   194,    -1,   193,    -1,
    805       57,   108,    95,   109,   171,    -1,   193,    57,   108,    95,
    806      109,   171,    -1,    58,   108,    95,   109,   171,    -1,   193,
    807       58,   108,    95,   109,   171,    -1,    57,   108,   133,   133,
    808      195,   134,   109,   171,   134,    -1,   193,    57,   108,   133,
    809      133,   195,   134,   109,   171,   134,    -1,    58,   108,   133,
    810      133,   195,   134,   109,   171,   134,    -1,   193,    58,   108,
    811      133,   133,   195,   134,   109,   171,   134,    -1,    59,   171,
    812       -1,   223,    -1,   223,   305,    -1,   223,   353,    -1,   362,
    813      138,    -1,   362,    -1,    63,   197,   108,   140,   109,   131,
    814       -1,    63,   197,   108,   140,   116,   198,   109,   131,    -1,
    815       63,   197,   108,   140,   116,   198,   116,   198,   109,   131,
    816       -1,    63,   197,   108,   140,   116,   198,   116,   198,   116,
    817      201,   109,   131,    -1,    63,   197,    50,   108,   140,   116,
    818      116,   198,   116,   201,   116,   202,   109,   131,    -1,    -1,
    819       11,    -1,    -1,   199,    -1,   200,    -1,   199,   115,   200,
    820       -1,   140,   108,   161,   109,    -1,   110,   161,   111,   140,
    821      108,   161,   109,    -1,    -1,   140,    -1,   201,   115,   140,
    822       -1,   138,    -1,   202,   115,   138,    -1,   134,    -1,   204,
    823       -1,   210,    -1,   204,   133,   210,    -1,   134,    -1,   206,
    824       -1,   220,    -1,   206,   133,   220,    -1,    -1,   208,    -1,
    825       28,   209,   131,    -1,   208,    28,   209,   131,    -1,   270,
    826       -1,   209,   115,   270,    -1,   211,    -1,   220,    -1,   212,
    827      134,   131,    -1,   217,   134,   131,    -1,   214,   134,   131,
    828       -1,   289,   134,   131,    -1,   292,   134,   131,    -1,   213,
    829      273,    -1,   229,   213,   273,    -1,   212,   134,   115,   133,
    830      268,   273,    -1,   363,   268,   307,    -1,   366,   268,   307,
    831       -1,   225,   366,   268,   307,    -1,   215,    -1,   225,   215,
    832       -1,   229,   215,    -1,   229,   225,   215,    -1,   214,   134,
    833      115,   133,   268,    -1,   110,   111,   268,   108,   133,   256,
    834      134,   109,    -1,   366,   268,   108,   133,   256,   134,   109,
    835       -1,   216,   268,   108,   133,   256,   134,   109,    -1,   110,
    836      133,   258,   134,   111,    -1,   110,   133,   258,   134,   115,
    837      133,   259,   134,   111,    -1,     3,   213,    -1,     3,   215,
    838       -1,   217,   134,   115,   133,   138,    -1,     3,   223,   305,
    839       -1,   218,   134,   115,   133,   305,    -1,   225,     3,   223,
    840      305,    -1,   223,     3,   305,    -1,   223,     3,   225,   305,
    841       -1,     3,   138,   130,   162,    -1,   219,   134,   115,   133,
    842      138,   130,   162,    -1,   221,   134,   131,    -1,   218,   134,
    843      131,    -1,   219,   134,   131,    -1,   238,   134,   131,    -1,
    844      222,   305,   307,   273,    -1,   221,   115,   308,   305,   307,
    845      273,    -1,   234,    -1,   238,    -1,   240,    -1,   279,    -1,
    846      235,    -1,   239,    -1,   241,    -1,   280,    -1,    -1,   225,
    847       -1,   226,    -1,   225,   226,    -1,   227,    -1,   310,    -1,
    848       10,    -1,    12,    -1,    11,    -1,    14,    -1,    66,    -1,
    849       -1,    13,   108,   228,   282,   109,    -1,   230,    -1,   225,
    850      230,    -1,   229,   225,   230,    -1,   231,    -1,   230,   231,
    851       -1,   232,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
    852       -1,     8,    -1,     9,    -1,    68,    -1,    70,    -1,    16,
     737     299,     0,    -1,    -1,    -1,    79,    -1,    80,    -1,    81,
     738      -1,    72,    -1,    76,    -1,   140,    -1,    72,    -1,    76,
     739      -1,    72,    -1,   140,    -1,    83,    -1,    84,    -1,    82,
     740      -1,   141,    82,    -1,    72,    -1,   140,    -1,   109,   168,
     741     110,    -1,   109,   172,   110,    -1,   142,    -1,   143,   111,
     742     134,   163,   135,   112,    -1,   143,   109,   144,   110,    -1,
     743     143,   113,   139,    -1,   143,   113,   111,   134,   146,   135,
     744     112,    -1,   143,    85,   139,    -1,   143,    85,   111,   134,
     745     146,   135,   112,    -1,   143,    86,    -1,   143,    87,    -1,
     746     109,   272,   110,   114,   276,   369,   115,    -1,   143,   114,
     747     144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
     748     163,    -1,   139,   117,   163,    -1,   111,   134,   163,   135,
     749     112,   117,   163,    -1,   111,   134,   163,   116,   166,   135,
     750     112,   117,   163,    -1,   147,    -1,   146,   116,   147,    -1,
     751     139,    -1,   139,   113,   147,    -1,   139,   113,   111,   134,
     752     146,   135,   112,    -1,   139,    85,   147,    -1,   139,    85,
     753     111,   134,   146,   135,   112,    -1,   143,    -1,   136,    -1,
     754     141,    -1,    86,   148,    -1,    87,   148,    -1,    40,   150,
     755      -1,   149,   150,    -1,   118,   150,    -1,   119,   150,    -1,
     756      37,   148,    -1,    37,   109,   272,   110,    -1,    38,   109,
     757     272,   116,   139,   110,    -1,    76,    -1,    76,   109,   273,
     758     110,    -1,    76,   109,   145,   110,    -1,    66,   148,    -1,
     759      66,   109,   272,   110,    -1,    94,   139,    -1,   120,    -1,
     760     121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   272,
     761     110,   150,    -1,   109,   272,   110,   165,    -1,   150,    -1,
     762     151,   119,   150,    -1,   151,   124,   150,    -1,   151,   125,
     763     150,    -1,   151,    -1,   152,   121,   151,    -1,   152,   122,
     764     151,    -1,   152,    -1,   153,    88,   152,    -1,   153,    89,
     765     152,    -1,   153,    -1,   154,   126,   153,    -1,   154,   127,
     766     153,    -1,   154,    90,   153,    -1,   154,    91,   153,    -1,
     767     154,    -1,   155,    92,   154,    -1,   155,    93,   154,    -1,
     768     155,    -1,   156,   120,   155,    -1,   156,    -1,   157,   128,
     769     156,    -1,   157,    -1,   158,   129,   157,    -1,   158,    -1,
     770     159,    94,   158,    -1,   159,    -1,   160,    95,   159,    -1,
     771     160,    -1,   160,   130,   168,   117,   161,    -1,   160,   130,
     772     117,   161,    -1,   160,   130,   168,   117,   165,    -1,   161,
     773      -1,   161,    -1,   148,   131,   163,    -1,   148,   167,   163,
     774      -1,   165,   370,    -1,    -1,   163,    -1,   111,   112,    -1,
     775     111,   134,   163,   135,   112,    -1,   111,   134,   116,   166,
     776     135,   112,    -1,   111,   134,   163,   116,   166,   135,   112,
     777      -1,   164,    -1,   166,   116,   164,    -1,    97,    -1,    98,
     778      -1,    99,    -1,   100,    -1,   101,    -1,   102,    -1,   103,
     779      -1,   104,    -1,   105,    -1,   106,    -1,   163,    -1,   168,
     780     116,   163,    -1,    -1,   168,    -1,   171,    -1,   172,    -1,
     781     176,    -1,   177,    -1,   189,    -1,   191,    -1,   192,    -1,
     782     197,    -1,   128,   143,   114,   144,   115,   132,    -1,   139,
     783     117,   309,   170,    -1,   114,   115,    -1,   114,   134,   134,
     784     208,   173,   135,   115,    -1,   174,    -1,   173,   134,   174,
     785      -1,   211,    -1,    40,   211,    -1,   305,    -1,   170,   135,
     786      -1,   170,    -1,   175,   170,    -1,   169,   132,    -1,    41,
     787     109,   168,   110,   170,    -1,    41,   109,   168,   110,   170,
     788      42,   170,    -1,    43,   109,   168,   110,   182,    -1,    43,
     789     109,   168,   110,   114,   134,   204,   183,   115,    -1,    53,
     790     109,   168,   110,   182,    -1,    53,   109,   168,   110,   114,
     791     134,   204,   185,   115,    -1,   162,    -1,   162,    96,   162,
     792      -1,   307,    -1,   178,    -1,   179,   116,   178,    -1,    44,
     793     179,   117,    -1,    45,   117,    -1,   180,    -1,   181,   180,
     794      -1,   181,   170,    -1,    -1,   184,    -1,   181,   175,    -1,
     795     184,   181,   175,    -1,    -1,   186,    -1,   181,   188,    -1,
     796     181,   175,   187,    -1,   186,   181,   188,    -1,   186,   181,
     797     175,   187,    -1,    -1,   188,    -1,    56,    -1,    56,   132,
     798      -1,    47,   109,   168,   110,   170,    -1,    46,   170,    47,
     799     109,   168,   110,   132,    -1,    48,   109,   134,   190,   110,
     800     170,    -1,   169,   135,   132,   169,   132,   169,    -1,   211,
     801     169,   132,   169,    -1,    51,   139,   132,    -1,    51,   119,
     802     168,   132,    -1,    50,   132,    -1,    50,   139,   132,    -1,
     803      49,   132,    -1,    49,   139,   132,    -1,    52,   169,   132,
     804      -1,    61,   164,   132,    -1,    62,   164,   132,    -1,    62,
     805     164,    63,   163,   132,    -1,    57,   172,   193,    -1,    57,
     806     172,   195,    -1,    57,   172,   193,   195,    -1,   194,    -1,
     807      58,   109,    96,   110,   172,    -1,   194,    58,   109,    96,
     808     110,   172,    -1,    59,   109,    96,   110,   172,    -1,   194,
     809      59,   109,    96,   110,   172,    -1,    58,   109,   134,   134,
     810     196,   135,   110,   172,   135,    -1,   194,    58,   109,   134,
     811     134,   196,   135,   110,   172,   135,    -1,    59,   109,   134,
     812     134,   196,   135,   110,   172,   135,    -1,   194,    59,   109,
     813     134,   134,   196,   135,   110,   172,   135,    -1,    60,   172,
     814      -1,   224,    -1,   224,   306,    -1,   224,   354,    -1,   363,
     815     139,    -1,   363,    -1,    64,   198,   109,   141,   110,   132,
     816      -1,    64,   198,   109,   141,   117,   199,   110,   132,    -1,
     817      64,   198,   109,   141,   117,   199,   117,   199,   110,   132,
     818      -1,    64,   198,   109,   141,   117,   199,   117,   199,   117,
     819     202,   110,   132,    -1,    64,   198,    51,   109,   141,   117,
     820     117,   199,   117,   202,   117,   203,   110,   132,    -1,    -1,
     821      11,    -1,    -1,   200,    -1,   201,    -1,   200,   116,   201,
     822      -1,   141,   109,   162,   110,    -1,   111,   162,   112,   141,
     823     109,   162,   110,    -1,    -1,   141,    -1,   202,   116,   141,
     824      -1,   139,    -1,   203,   116,   139,    -1,   135,    -1,   205,
     825      -1,   211,    -1,   205,   134,   211,    -1,   135,    -1,   207,
     826      -1,   221,    -1,   207,   134,   221,    -1,    -1,   209,    -1,
     827      29,   210,   132,    -1,   209,    29,   210,   132,    -1,   271,
     828      -1,   210,   116,   271,    -1,   212,    -1,   221,    -1,   213,
     829     135,   132,    -1,   218,   135,   132,    -1,   215,   135,   132,
     830      -1,   290,   135,   132,    -1,   293,   135,   132,    -1,   214,
     831     274,    -1,   230,   214,   274,    -1,   213,   135,   116,   134,
     832     269,   274,    -1,   364,   269,   308,    -1,   367,   269,   308,
     833      -1,   226,   367,   269,   308,    -1,   216,    -1,   226,   216,
     834      -1,   230,   216,    -1,   230,   226,   216,    -1,   215,   135,
     835     116,   134,   269,    -1,   111,   112,   269,   109,   134,   257,
     836     135,   110,    -1,   367,   269,   109,   134,   257,   135,   110,
     837      -1,   217,   269,   109,   134,   257,   135,   110,    -1,   111,
     838     134,   259,   135,   112,    -1,   111,   134,   259,   135,   116,
     839     134,   260,   135,   112,    -1,     3,   214,    -1,     3,   216,
     840      -1,   218,   135,   116,   134,   139,    -1,     3,   224,   306,
     841      -1,   219,   135,   116,   134,   306,    -1,   226,     3,   224,
     842     306,    -1,   224,     3,   306,    -1,   224,     3,   226,   306,
     843      -1,     3,   139,   131,   163,    -1,   220,   135,   116,   134,
     844     139,   131,   163,    -1,   222,   135,   132,    -1,   219,   135,
     845     132,    -1,   220,   135,   132,    -1,   239,   135,   132,    -1,
     846     223,   306,   308,   274,    -1,   222,   116,   309,   306,   308,
     847     274,    -1,   235,    -1,   239,    -1,   241,    -1,   280,    -1,
     848     236,    -1,   240,    -1,   242,    -1,   281,    -1,    -1,   226,
     849      -1,   227,    -1,   226,   227,    -1,   228,    -1,   311,    -1,
     850      10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
     851      -1,    13,   109,   229,   283,   110,    -1,   231,    -1,   226,
     852     231,    -1,   230,   226,   231,    -1,   232,    -1,   231,   232,
     853      -1,   233,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
     854      -1,     8,    -1,     9,    -1,    69,    -1,    71,    -1,    16,
    853855      -1,    21,    -1,    20,    -1,    18,    -1,    19,    -1,    17,
    854       -1,    22,    -1,    23,    -1,    15,    -1,    24,    -1,    25,
    855       -1,    26,    -1,   235,    -1,   229,   235,    -1,   234,   231,
    856       -1,   234,   231,   225,    -1,   234,   231,   235,    -1,   236,
    857       -1,   224,   237,   224,    -1,   233,    -1,   225,   233,    -1,
    858      236,   226,    -1,   236,   233,    -1,    27,   108,   272,   109,
    859       -1,    27,   108,   167,   109,    -1,    77,   108,   272,   109,
    860       -1,    77,   108,   167,   109,    -1,   239,    -1,   229,   239,
    861       -1,   238,   231,    -1,   238,   231,   225,    -1,   242,    -1,
    862      225,   242,    -1,   239,   226,    -1,   241,    -1,   229,   241,
    863       -1,   240,   231,    -1,   240,   231,   225,    -1,    73,    -1,
    864      225,    73,    -1,   241,   226,    -1,   243,    -1,   253,    -1,
    865      244,   113,   245,   114,    -1,   244,   270,    -1,   244,   270,
    866      113,   245,   114,    -1,   244,   108,   288,   109,   113,   245,
    867      114,    -1,   244,   281,    -1,    30,   308,    -1,    31,   308,
    868       -1,   246,    -1,   245,   246,    -1,   247,   131,    -1,    39,
    869      247,   131,    -1,   248,   131,    -1,    39,   248,   131,    -1,
    870      362,    -1,   362,   270,    -1,   247,   115,   270,    -1,   247,
    871      115,    -1,   223,   249,    -1,   248,   115,   308,   249,    -1,
    872       -1,   251,    -1,   314,   250,    -1,   327,   250,    -1,   353,
    873       -1,    -1,   251,    -1,   116,   161,    -1,    29,   308,    -1,
    874      252,   113,   254,   368,   114,    -1,   252,   270,   113,   254,
    875      368,   114,    -1,   252,   270,    -1,   270,   255,    -1,   254,
    876      115,   270,   255,    -1,    -1,   130,   161,    -1,    -1,   257,
    877       -1,   259,    -1,   258,    -1,   258,   134,   115,   133,   259,
    878       -1,   259,   134,   115,   133,    95,    -1,   258,   134,   115,
    879      133,    95,    -1,   263,    -1,   259,   134,   115,   133,   263,
    880       -1,   258,   134,   115,   133,   263,    -1,   258,   134,   115,
    881      133,   259,   134,   115,   133,   263,    -1,   264,    -1,   259,
    882      134,   115,   133,   264,    -1,    -1,   261,    -1,   262,    -1,
    883      262,   134,   115,   133,    95,    -1,   266,    -1,   265,    -1,
    884      262,   134,   115,   133,   266,    -1,   262,   134,   115,   133,
    885      265,    -1,   265,    -1,   358,   268,   369,    -1,   366,   268,
    886      369,    -1,   225,   366,   268,   369,    -1,   215,    -1,   266,
    887       -1,   358,    -1,   366,    -1,   225,   366,    -1,   367,    -1,
    888      222,   332,   369,    -1,   222,   336,   369,    -1,   222,    -1,
    889      222,   347,    -1,   138,    -1,   267,   115,   138,    -1,   136,
    890       -1,    73,    -1,    74,    -1,   137,    -1,    73,    -1,    74,
    891       -1,   138,    -1,    73,    -1,    74,    -1,   362,    -1,   223,
    892       -1,   223,   353,    -1,   362,    -1,   367,    -1,   223,    -1,
    893      223,   341,    -1,    -1,   130,   274,    -1,   106,   274,    -1,
    894      162,    -1,   113,   275,   368,   114,    -1,    -1,   274,    -1,
    895      276,   274,    -1,   275,   115,   274,    -1,   275,   115,   276,
    896      274,    -1,   277,   116,    -1,   270,   116,    -1,   278,    -1,
    897      277,   278,    -1,    79,    -1,   112,   270,    -1,   110,   133,
    898      162,   134,   111,    -1,   110,   133,   306,   134,   111,    -1,
    899      110,   133,   161,    95,   161,   134,   111,    -1,   112,   110,
    900      133,   145,   134,   111,    -1,   280,    -1,   229,   280,    -1,
    901      279,   231,    -1,   279,   231,   225,    -1,   281,    -1,   225,
    902      281,    -1,   280,   226,    -1,    74,   108,   288,   109,    -1,
    903      283,   369,    -1,   282,   115,   283,   369,    -1,    -1,   285,
    904      270,   284,   286,    -1,   223,   332,    -1,    32,    -1,    34,
    905       -1,    33,    -1,    -1,   286,   287,    -1,   128,   270,   108,
    906      288,   109,    -1,   128,   113,   133,   294,   114,    -1,   128,
    907      108,   133,   282,   134,   109,   113,   133,   294,   114,   108,
    908      288,   109,    -1,   272,    -1,   162,    -1,   288,   115,   272,
    909       -1,   288,   115,   162,    -1,    32,   290,    -1,   230,    32,
    910      290,    -1,   289,   115,   290,    -1,   291,   286,    -1,   291,
    911      286,   130,   272,    -1,   270,    -1,   269,   108,   133,   282,
    912      134,   109,    -1,    35,   270,   108,   133,   282,   134,   109,
    913      113,   114,    -1,    -1,    35,   270,   108,   133,   282,   134,
    914      109,   113,   293,   294,   114,    -1,   295,    -1,   294,   133,
    915      295,    -1,   296,   134,   131,    -1,   297,   134,   131,    -1,
    916      213,    -1,   215,    -1,   296,   134,   115,   133,   268,    -1,
    917      223,   305,    -1,   297,   134,   115,   133,   305,    -1,    -1,
    918      299,    -1,   301,    -1,   299,   133,   301,    -1,    -1,   299,
    919       -1,   210,    -1,   303,    -1,   196,    -1,    -1,     5,    81,
    920      302,   113,   300,   114,    -1,    39,   301,    -1,   304,    -1,
    921      319,   171,    -1,   323,   133,   205,   171,    -1,   214,   171,
    922       -1,   222,   319,   171,    -1,   225,   319,   171,    -1,   229,
    923      319,   171,    -1,   229,   225,   319,   171,    -1,   222,   323,
    924      133,   205,   171,    -1,   225,   323,   133,   205,   171,    -1,
    925      229,   323,   133,   205,   171,    -1,   229,   225,   323,   133,
    926      205,   171,    -1,   314,    -1,   319,    -1,   327,    -1,   161,
    927      122,   161,    -1,    -1,    63,   108,   140,   109,   308,    -1,
    928       -1,   309,    -1,   310,    -1,   309,   310,    -1,    38,   108,
    929      108,   311,   109,   109,    -1,   312,    -1,   311,   115,   312,
    930       -1,    -1,   313,    -1,   313,   108,   168,   109,    -1,   268,
    931       -1,   232,    -1,   233,    -1,   226,    -1,   315,   308,    -1,
    932      316,    -1,   317,   308,    -1,   318,   308,    -1,   136,    -1,
    933      108,   315,   109,    -1,   118,   314,    -1,   118,   225,   314,
    934       -1,   108,   316,   109,    -1,   315,   345,    -1,   108,   316,
    935      109,   345,    -1,   108,   317,   109,   346,    -1,   108,   317,
    936      109,    -1,   108,   316,   109,   108,   133,   260,   134,   109,
    937       -1,   108,   318,   109,    -1,   320,   308,    -1,   321,    -1,
    938      322,   308,    -1,   315,   108,   133,   260,   134,   109,    -1,
    939      108,   321,   109,   108,   133,   260,   134,   109,    -1,   108,
    940      320,   109,    -1,   118,   319,    -1,   118,   225,   319,    -1,
    941      108,   321,   109,    -1,   108,   321,   109,   345,    -1,   108,
    942      322,   109,   346,    -1,   108,   322,   109,    -1,   324,    -1,
    943      325,    -1,   326,    -1,   315,   108,   267,   109,    -1,   108,
    944      325,   109,   108,   267,   109,    -1,   108,   324,   109,    -1,
    945      118,   323,    -1,   118,   225,   323,    -1,   108,   325,   109,
    946       -1,   108,   325,   109,   345,    -1,   108,   326,   109,   346,
    947       -1,   108,   326,   109,    -1,   328,   308,    -1,   329,    -1,
    948      330,   308,    -1,   331,   308,    -1,   337,    -1,   108,   328,
    949      109,    -1,   118,   327,    -1,   118,   225,   327,    -1,   108,
    950      329,   109,    -1,   328,   345,    -1,   108,   329,   109,   345,
    951       -1,   108,   330,   109,   346,    -1,   108,   330,   109,    -1,
    952      328,   108,   133,   260,   134,   109,    -1,   108,   329,   109,
    953      108,   133,   260,   134,   109,    -1,   108,   331,   109,    -1,
    954      315,   308,    -1,   333,    -1,   334,   308,    -1,   335,   308,
    955       -1,   118,   332,    -1,   118,   225,   332,    -1,   108,   333,
    956      109,    -1,   315,   351,    -1,   108,   333,   109,   345,    -1,
    957      108,   334,   109,   346,    -1,   108,   334,   109,    -1,   315,
    958      108,   133,   260,   134,   109,    -1,   108,   333,   109,   108,
    959      133,   260,   134,   109,    -1,   108,   335,   109,    -1,   337,
    960      308,    -1,   338,    -1,   339,   308,    -1,   340,   308,    -1,
    961       73,    -1,    74,    -1,   118,   336,    -1,   118,   225,   336,
    962       -1,   108,   338,   109,    -1,   337,   351,    -1,   108,   338,
    963      109,   351,    -1,   337,   108,   133,   260,   134,   109,    -1,
    964      108,   338,   109,   108,   133,   260,   134,   109,    -1,   342,
    965       -1,   343,   308,    -1,   344,   308,    -1,   118,    -1,   118,
    966      225,    -1,   118,   341,    -1,   118,   225,   341,    -1,   108,
    967      342,   109,    -1,   345,    -1,   108,   342,   109,   345,    -1,
    968      108,   343,   109,   346,    -1,   108,   343,   109,    -1,   108,
    969      133,   260,   134,   109,    -1,   108,   342,   109,   108,   133,
    970      260,   134,   109,    -1,   108,   344,   109,    -1,   110,   111,
    971       -1,   110,   111,   346,    -1,   346,    -1,   110,   133,   162,
    972      134,   111,    -1,   110,   133,   118,   134,   111,    -1,   346,
    973      110,   133,   162,   134,   111,    -1,   346,   110,   133,   118,
    974      134,   111,    -1,   348,    -1,   349,   308,    -1,   350,   308,
    975       -1,   118,    -1,   118,   225,    -1,   118,   347,    -1,   118,
    976      225,   347,    -1,   108,   348,   109,    -1,   351,    -1,   108,
    977      348,   109,   351,    -1,   108,   349,   109,   346,    -1,   108,
    978      349,   109,    -1,   108,   133,   260,   134,   109,    -1,   108,
    979      348,   109,   108,   133,   260,   134,   109,    -1,   108,   350,
    980      109,    -1,   352,    -1,   352,   346,    -1,   346,    -1,   110,
    981      111,    -1,   110,   133,   225,   118,   134,   111,    -1,   110,
    982      133,   225,   134,   111,    -1,   110,   133,   225,   162,   134,
    983      111,    -1,   110,   133,     7,   224,   162,   134,   111,    -1,
    984      110,   133,   225,     7,   162,   134,   111,    -1,   354,    -1,
    985      355,   308,    -1,   356,   308,    -1,   118,    -1,   118,   225,
    986       -1,   118,   353,    -1,   118,   225,   353,    -1,   108,   354,
    987      109,    -1,   345,    -1,   108,   354,   109,   345,    -1,   108,
    988      355,   109,   346,    -1,   108,   355,   109,    -1,   108,   354,
    989      109,   108,   133,   260,   134,   109,    -1,   108,   356,   109,
    990       -1,   358,    -1,   366,    -1,   225,   366,    -1,   359,    -1,
    991      360,    -1,   118,   223,    -1,   225,   118,   223,    -1,   118,
    992      367,    -1,   225,   118,   367,    -1,   118,   357,    -1,   225,
    993      118,   357,    -1,   110,   111,   223,    -1,   361,   223,    -1,
    994      110,   111,   346,   223,    -1,   361,   346,   223,    -1,   346,
    995      223,    -1,   110,   111,   359,    -1,   361,   359,    -1,   110,
    996      111,   346,   359,    -1,   361,   346,   359,    -1,   346,   359,
    997       -1,   110,   133,   225,   118,   134,   111,    -1,   110,   133,
    998      225,   162,   134,   111,    -1,   110,   133,   229,   162,   134,
    999      111,    -1,   110,   133,   229,   225,   162,   134,   111,    -1,
    1000      366,    -1,   225,   366,    -1,   363,    -1,   364,    -1,   365,
    1001       -1,   118,   223,    -1,   225,   118,   223,    -1,   118,   367,
    1002       -1,   225,   118,   367,    -1,   118,   362,    -1,   225,   118,
    1003      362,    -1,   110,   111,   223,    -1,   110,   111,   346,   223,
    1004       -1,   346,   223,    -1,   110,   111,   364,    -1,   110,   111,
    1005      346,   364,    -1,   346,   364,    -1,   110,   133,   259,   134,
    1006      111,    -1,   110,   111,   108,   256,   109,    -1,   366,   108,
    1007      133,   256,   134,   109,    -1,   216,   108,   133,   256,   134,
    1008      109,    -1,    -1,   115,    -1,    -1,   130,   162,    -1
     856      -1,    22,    -1,    23,    -1,    15,    -1,    25,    -1,    26,
     857      -1,    27,    -1,    24,    -1,   236,    -1,   230,   236,    -1,
     858     235,   232,    -1,   235,   232,   226,    -1,   235,   232,   236,
     859      -1,   237,    -1,   225,   238,   225,    -1,   234,    -1,   226,
     860     234,    -1,   237,   227,    -1,   237,   234,    -1,    28,   109,
     861     273,   110,    -1,    28,   109,   168,   110,    -1,    78,   109,
     862     273,   110,    -1,    78,   109,   168,   110,    -1,   240,    -1,
     863     230,   240,    -1,   239,   232,    -1,   239,   232,   226,    -1,
     864     243,    -1,   226,   243,    -1,   240,   227,    -1,   242,    -1,
     865     230,   242,    -1,   241,   232,    -1,   241,   232,   226,    -1,
     866      74,    -1,   226,    74,    -1,   242,   227,    -1,   244,    -1,
     867     254,    -1,   245,   114,   246,   115,    -1,   245,   271,    -1,
     868     245,   271,   114,   246,   115,    -1,   245,   109,   289,   110,
     869     114,   246,   115,    -1,   245,   282,    -1,    31,   309,    -1,
     870      32,   309,    -1,   247,    -1,   246,   247,    -1,   248,   132,
     871      -1,    40,   248,   132,    -1,   249,   132,    -1,    40,   249,
     872     132,    -1,   363,    -1,   363,   271,    -1,   248,   116,   271,
     873      -1,   248,   116,    -1,   224,   250,    -1,   249,   116,   309,
     874     250,    -1,    -1,   252,    -1,   315,   251,    -1,   328,   251,
     875      -1,   354,    -1,    -1,   252,    -1,   117,   162,    -1,    30,
     876     309,    -1,   253,   114,   255,   369,   115,    -1,   253,   271,
     877     114,   255,   369,   115,    -1,   253,   271,    -1,   271,   256,
     878      -1,   255,   116,   271,   256,    -1,    -1,   131,   162,    -1,
     879      -1,   258,    -1,   260,    -1,   259,    -1,   259,   135,   116,
     880     134,   260,    -1,   260,   135,   116,   134,    96,    -1,   259,
     881     135,   116,   134,    96,    -1,   264,    -1,   260,   135,   116,
     882     134,   264,    -1,   259,   135,   116,   134,   264,    -1,   259,
     883     135,   116,   134,   260,   135,   116,   134,   264,    -1,   265,
     884      -1,   260,   135,   116,   134,   265,    -1,    -1,   262,    -1,
     885     263,    -1,   263,   135,   116,   134,    96,    -1,   267,    -1,
     886     266,    -1,   263,   135,   116,   134,   267,    -1,   263,   135,
     887     116,   134,   266,    -1,   266,    -1,   359,   269,   370,    -1,
     888     367,   269,   370,    -1,   226,   367,   269,   370,    -1,   216,
     889      -1,   267,    -1,   359,    -1,   367,    -1,   226,   367,    -1,
     890     368,    -1,   223,   333,   370,    -1,   223,   337,   370,    -1,
     891     223,    -1,   223,   348,    -1,   139,    -1,   268,   116,   139,
     892      -1,   137,    -1,    74,    -1,    75,    -1,   138,    -1,    74,
     893      -1,    75,    -1,   139,    -1,    74,    -1,    75,    -1,   363,
     894      -1,   224,    -1,   224,   354,    -1,   363,    -1,   368,    -1,
     895     224,    -1,   224,   342,    -1,    -1,   131,   275,    -1,   107,
     896     275,    -1,   163,    -1,   114,   276,   369,   115,    -1,    -1,
     897     275,    -1,   277,   275,    -1,   276,   116,   275,    -1,   276,
     898     116,   277,   275,    -1,   278,   117,    -1,   271,   117,    -1,
     899     279,    -1,   278,   279,    -1,    80,    -1,   113,   271,    -1,
     900     111,   134,   163,   135,   112,    -1,   111,   134,   307,   135,
     901     112,    -1,   111,   134,   162,    96,   162,   135,   112,    -1,
     902     113,   111,   134,   146,   135,   112,    -1,   281,    -1,   230,
     903     281,    -1,   280,   232,    -1,   280,   232,   226,    -1,   282,
     904      -1,   226,   282,    -1,   281,   227,    -1,    75,   109,   289,
     905     110,    -1,   284,   370,    -1,   283,   116,   284,   370,    -1,
     906      -1,   286,   271,   285,   287,    -1,   224,   333,    -1,    33,
     907      -1,    35,    -1,    34,    -1,    -1,   287,   288,    -1,   129,
     908     271,   109,   289,   110,    -1,   129,   114,   134,   295,   115,
     909      -1,   129,   109,   134,   283,   135,   110,   114,   134,   295,
     910     115,   109,   289,   110,    -1,   273,    -1,   163,    -1,   289,
     911     116,   273,    -1,   289,   116,   163,    -1,    33,   291,    -1,
     912     231,    33,   291,    -1,   290,   116,   291,    -1,   292,   287,
     913      -1,   292,   287,   131,   273,    -1,   271,    -1,   270,   109,
     914     134,   283,   135,   110,    -1,    36,   271,   109,   134,   283,
     915     135,   110,   114,   115,    -1,    -1,    36,   271,   109,   134,
     916     283,   135,   110,   114,   294,   295,   115,    -1,   296,    -1,
     917     295,   134,   296,    -1,   297,   135,   132,    -1,   298,   135,
     918     132,    -1,   214,    -1,   216,    -1,   297,   135,   116,   134,
     919     269,    -1,   224,   306,    -1,   298,   135,   116,   134,   306,
     920      -1,    -1,   300,    -1,   302,    -1,   300,   134,   302,    -1,
     921      -1,   300,    -1,   211,    -1,   304,    -1,   197,    -1,    -1,
     922       5,    82,   303,   114,   301,   115,    -1,    40,   302,    -1,
     923     305,    -1,   320,   172,    -1,   324,   134,   206,   172,    -1,
     924     215,   172,    -1,   223,   320,   172,    -1,   226,   320,   172,
     925      -1,   230,   320,   172,    -1,   230,   226,   320,   172,    -1,
     926     223,   324,   134,   206,   172,    -1,   226,   324,   134,   206,
     927     172,    -1,   230,   324,   134,   206,   172,    -1,   230,   226,
     928     324,   134,   206,   172,    -1,   315,    -1,   320,    -1,   328,
     929      -1,   162,   123,   162,    -1,    -1,    64,   109,   141,   110,
     930     309,    -1,    -1,   310,    -1,   311,    -1,   310,   311,    -1,
     931      39,   109,   109,   312,   110,   110,    -1,   313,    -1,   312,
     932     116,   313,    -1,    -1,   314,    -1,   314,   109,   169,   110,
     933      -1,   269,    -1,   233,    -1,   234,    -1,   227,    -1,   316,
     934     309,    -1,   317,    -1,   318,   309,    -1,   319,   309,    -1,
     935     137,    -1,   109,   316,   110,    -1,   119,   315,    -1,   119,
     936     226,   315,    -1,   109,   317,   110,    -1,   316,   346,    -1,
     937     109,   317,   110,   346,    -1,   109,   318,   110,   347,    -1,
     938     109,   318,   110,    -1,   109,   317,   110,   109,   134,   261,
     939     135,   110,    -1,   109,   319,   110,    -1,   321,   309,    -1,
     940     322,    -1,   323,   309,    -1,   316,   109,   134,   261,   135,
     941     110,    -1,   109,   322,   110,   109,   134,   261,   135,   110,
     942      -1,   109,   321,   110,    -1,   119,   320,    -1,   119,   226,
     943     320,    -1,   109,   322,   110,    -1,   109,   322,   110,   346,
     944      -1,   109,   323,   110,   347,    -1,   109,   323,   110,    -1,
     945     325,    -1,   326,    -1,   327,    -1,   316,   109,   268,   110,
     946      -1,   109,   326,   110,   109,   268,   110,    -1,   109,   325,
     947     110,    -1,   119,   324,    -1,   119,   226,   324,    -1,   109,
     948     326,   110,    -1,   109,   326,   110,   346,    -1,   109,   327,
     949     110,   347,    -1,   109,   327,   110,    -1,   329,   309,    -1,
     950     330,    -1,   331,   309,    -1,   332,   309,    -1,   338,    -1,
     951     109,   329,   110,    -1,   119,   328,    -1,   119,   226,   328,
     952      -1,   109,   330,   110,    -1,   329,   346,    -1,   109,   330,
     953     110,   346,    -1,   109,   331,   110,   347,    -1,   109,   331,
     954     110,    -1,   329,   109,   134,   261,   135,   110,    -1,   109,
     955     330,   110,   109,   134,   261,   135,   110,    -1,   109,   332,
     956     110,    -1,   316,   309,    -1,   334,    -1,   335,   309,    -1,
     957     336,   309,    -1,   119,   333,    -1,   119,   226,   333,    -1,
     958     109,   334,   110,    -1,   316,   352,    -1,   109,   334,   110,
     959     346,    -1,   109,   335,   110,   347,    -1,   109,   335,   110,
     960      -1,   316,   109,   134,   261,   135,   110,    -1,   109,   334,
     961     110,   109,   134,   261,   135,   110,    -1,   109,   336,   110,
     962      -1,   338,   309,    -1,   339,    -1,   340,   309,    -1,   341,
     963     309,    -1,    74,    -1,    75,    -1,   119,   337,    -1,   119,
     964     226,   337,    -1,   109,   339,   110,    -1,   338,   352,    -1,
     965     109,   339,   110,   352,    -1,   338,   109,   134,   261,   135,
     966     110,    -1,   109,   339,   110,   109,   134,   261,   135,   110,
     967      -1,   343,    -1,   344,   309,    -1,   345,   309,    -1,   119,
     968      -1,   119,   226,    -1,   119,   342,    -1,   119,   226,   342,
     969      -1,   109,   343,   110,    -1,   346,    -1,   109,   343,   110,
     970     346,    -1,   109,   344,   110,   347,    -1,   109,   344,   110,
     971      -1,   109,   134,   261,   135,   110,    -1,   109,   343,   110,
     972     109,   134,   261,   135,   110,    -1,   109,   345,   110,    -1,
     973     111,   112,    -1,   111,   112,   347,    -1,   347,    -1,   111,
     974     134,   163,   135,   112,    -1,   111,   134,   119,   135,   112,
     975      -1,   347,   111,   134,   163,   135,   112,    -1,   347,   111,
     976     134,   119,   135,   112,    -1,   349,    -1,   350,   309,    -1,
     977     351,   309,    -1,   119,    -1,   119,   226,    -1,   119,   348,
     978      -1,   119,   226,   348,    -1,   109,   349,   110,    -1,   352,
     979      -1,   109,   349,   110,   352,    -1,   109,   350,   110,   347,
     980      -1,   109,   350,   110,    -1,   109,   134,   261,   135,   110,
     981      -1,   109,   349,   110,   109,   134,   261,   135,   110,    -1,
     982     109,   351,   110,    -1,   353,    -1,   353,   347,    -1,   347,
     983      -1,   111,   112,    -1,   111,   134,   226,   119,   135,   112,
     984      -1,   111,   134,   226,   135,   112,    -1,   111,   134,   226,
     985     163,   135,   112,    -1,   111,   134,     7,   225,   163,   135,
     986     112,    -1,   111,   134,   226,     7,   163,   135,   112,    -1,
     987     355,    -1,   356,   309,    -1,   357,   309,    -1,   119,    -1,
     988     119,   226,    -1,   119,   354,    -1,   119,   226,   354,    -1,
     989     109,   355,   110,    -1,   346,    -1,   109,   355,   110,   346,
     990      -1,   109,   356,   110,   347,    -1,   109,   356,   110,    -1,
     991     109,   355,   110,   109,   134,   261,   135,   110,    -1,   109,
     992     357,   110,    -1,   359,    -1,   367,    -1,   226,   367,    -1,
     993     360,    -1,   361,    -1,   119,   224,    -1,   226,   119,   224,
     994      -1,   119,   368,    -1,   226,   119,   368,    -1,   119,   358,
     995      -1,   226,   119,   358,    -1,   111,   112,   224,    -1,   362,
     996     224,    -1,   111,   112,   347,   224,    -1,   362,   347,   224,
     997      -1,   347,   224,    -1,   111,   112,   360,    -1,   362,   360,
     998      -1,   111,   112,   347,   360,    -1,   362,   347,   360,    -1,
     999     347,   360,    -1,   111,   134,   226,   119,   135,   112,    -1,
     1000     111,   134,   226,   163,   135,   112,    -1,   111,   134,   230,
     1001     163,   135,   112,    -1,   111,   134,   230,   226,   163,   135,
     1002     112,    -1,   367,    -1,   226,   367,    -1,   364,    -1,   365,
     1003      -1,   366,    -1,   119,   224,    -1,   226,   119,   224,    -1,
     1004     119,   368,    -1,   226,   119,   368,    -1,   119,   363,    -1,
     1005     226,   119,   363,    -1,   111,   112,   224,    -1,   111,   112,
     1006     347,   224,    -1,   347,   224,    -1,   111,   112,   365,    -1,
     1007     111,   112,   347,   365,    -1,   347,   365,    -1,   111,   134,
     1008     260,   135,   112,    -1,   111,   112,   109,   257,   110,    -1,
     1009     367,   109,   134,   257,   135,   110,    -1,   217,   109,   134,
     1010     257,   135,   110,    -1,    -1,   116,    -1,    -1,   131,   163,
     1011      -1
    10091012};
    10101013
     
    10121015static const yytype_uint16 yyrline[] =
    10131016{
    1014        0,   290,   290,   296,   305,   306,   307,   311,   312,   313,
    1015      317,   318,   322,   323,   327,   328,   332,   333,   339,   341,
    1016      343,   345,   350,   351,   357,   361,   363,   364,   366,   367,
    1017      369,   371,   373,   381,   382,   388,   389,   390,   395,   397,
    1018      402,   403,   407,   411,   413,   415,   417,   422,   425,   427,
    1019      429,   431,   433,   435,   437,   439,   445,   447,   449,   451,
    1020      453,   455,   457,   459,   461,   466,   467,   468,   469,   473,
    1021      474,   476,   481,   482,   484,   486,   491,   492,   494,   499,
    1022      500,   502,   507,   508,   510,   512,   514,   519,   520,   522,
    1023      527,   528,   533,   534,   539,   540,   545,   546,   551,   552,
    1024      557,   558,   560,   562,   567,   572,   573,   575,   577,   583,
    1025      584,   590,   592,   594,   596,   601,   602,   607,   608,   609,
    1026      610,   611,   612,   613,   614,   615,   616,   620,   621,   627,
    1027      628,   634,   635,   636,   637,   638,   639,   640,   641,   642,
    1028      651,   658,   660,   670,   671,   676,   678,   680,   682,   686,
    1029      687,   692,   697,   700,   702,   704,   709,   711,   719,   720,
    1030      722,   726,   727,   732,   733,   738,   739,   743,   748,   749,
    1031      753,   755,   761,   762,   766,   768,   770,   772,   778,   779,
    1032      783,   784,   788,   790,   792,   797,   799,   804,   806,   810,
    1033      813,   817,   820,   824,   826,   830,   832,   839,   841,   843,
    1034      852,   854,   856,   858,   860,   865,   867,   869,   871,   876,
    1035      889,   890,   895,   897,   902,   906,   908,   910,   912,   914,
    1036      920,   921,   927,   928,   932,   933,   938,   940,   946,   947,
    1037      949,   954,   956,   963,   965,   969,   970,   975,   977,   981,
    1038      982,   986,   988,   992,   993,   997,   998,  1002,  1003,  1018,
    1039     1019,  1020,  1021,  1022,  1026,  1031,  1038,  1048,  1053,  1058,
    1040     1066,  1071,  1076,  1081,  1086,  1094,  1116,  1121,  1128,  1130,
    1041     1137,  1142,  1147,  1158,  1163,  1168,  1173,  1178,  1187,  1192,
    1042     1200,  1201,  1202,  1203,  1209,  1214,  1222,  1223,  1224,  1225,
    1043     1229,  1230,  1231,  1232,  1237,  1238,  1247,  1248,  1253,  1254,
    1044     1259,  1261,  1263,  1265,  1267,  1270,  1269,  1281,  1282,  1284,
    1045     1294,  1295,  1300,  1304,  1306,  1308,  1310,  1312,  1314,  1316,
    1046     1318,  1323,  1325,  1327,  1329,  1331,  1333,  1335,  1337,  1339,
    1047     1341,  1343,  1345,  1351,  1352,  1354,  1356,  1358,  1363,  1364,
    1048     1370,  1371,  1373,  1375,  1380,  1382,  1384,  1386,  1391,  1392,
    1049     1394,  1396,  1401,  1402,  1404,  1409,  1410,  1412,  1414,  1419,
    1050     1421,  1423,  1428,  1429,  1433,  1435,  1437,  1439,  1441,  1446,
    1051     1448,  1453,  1455,  1460,  1461,  1463,  1464,  1469,  1470,  1472,
    1052     1474,  1479,  1481,  1487,  1488,  1490,  1493,  1496,  1501,  1502,
    1053     1507,  1512,  1516,  1518,  1520,  1525,  1527,  1533,  1534,  1542,
    1054     1543,  1547,  1548,  1549,  1551,  1553,  1560,  1561,  1563,  1565,
    1055     1570,  1571,  1577,  1578,  1582,  1583,  1588,  1589,  1590,  1592,
    1056     1600,  1601,  1603,  1606,  1608,  1612,  1613,  1614,  1616,  1618,
    1057     1622,  1627,  1635,  1636,  1645,  1647,  1652,  1653,  1654,  1658,
    1058     1659,  1660,  1664,  1665,  1666,  1670,  1671,  1672,  1677,  1678,
    1059     1679,  1680,  1686,  1687,  1689,  1694,  1695,  1700,  1701,  1702,
    1060     1703,  1704,  1719,  1720,  1725,  1726,  1734,  1736,  1738,  1741,
    1061     1743,  1745,  1768,  1769,  1771,  1773,  1778,  1779,  1781,  1786,
    1062     1791,  1792,  1798,  1797,  1801,  1805,  1807,  1809,  1815,  1816,
    1063     1821,  1826,  1828,  1833,  1835,  1836,  1838,  1843,  1845,  1847,
    1064     1852,  1854,  1859,  1864,  1872,  1878,  1877,  1891,  1892,  1897,
    1065     1898,  1902,  1907,  1912,  1920,  1925,  1936,  1937,  1948,  1949,
    1066     1955,  1956,  1960,  1961,  1962,  1965,  1964,  1975,  1980,  1985,
    1067     1991,  2000,  2006,  2012,  2018,  2024,  2032,  2038,  2046,  2052,
    1068     2061,  2062,  2063,  2067,  2071,  2073,  2078,  2079,  2083,  2084,
    1069     2089,  2095,  2096,  2099,  2101,  2102,  2106,  2107,  2108,  2109,
    1070     2143,  2145,  2146,  2148,  2153,  2158,  2163,  2165,  2167,  2172,
    1071     2174,  2176,  2178,  2183,  2185,  2195,  2197,  2198,  2203,  2205,
    1072     2207,  2212,  2214,  2216,  2221,  2223,  2225,  2234,  2235,  2236,
    1073     2240,  2242,  2244,  2249,  2251,  2253,  2258,  2260,  2262,  2277,
    1074     2279,  2280,  2282,  2287,  2288,  2293,  2295,  2297,  2302,  2304,
    1075     2306,  2308,  2313,  2315,  2317,  2327,  2329,  2330,  2332,  2337,
    1076     2339,  2341,  2346,  2348,  2350,  2352,  2357,  2359,  2361,  2392,
    1077     2394,  2395,  2397,  2402,  2407,  2415,  2417,  2419,  2424,  2426,
    1078     2431,  2433,  2447,  2448,  2450,  2455,  2457,  2459,  2461,  2463,
    1079     2468,  2469,  2471,  2473,  2478,  2480,  2482,  2488,  2490,  2492,
    1080     2496,  2498,  2500,  2502,  2516,  2517,  2519,  2524,  2526,  2528,
    1081     2530,  2532,  2537,  2538,  2540,  2542,  2547,  2549,  2551,  2557,
    1082     2558,  2560,  2569,  2572,  2574,  2577,  2579,  2581,  2594,  2595,
    1083     2597,  2602,  2604,  2606,  2608,  2610,  2615,  2616,  2618,  2620,
    1084     2625,  2627,  2635,  2636,  2637,  2642,  2643,  2647,  2649,  2651,
    1085     2653,  2655,  2657,  2664,  2666,  2668,  2670,  2672,  2674,  2676,
    1086     2678,  2680,  2682,  2687,  2689,  2691,  2696,  2722,  2723,  2725,
    1087     2729,  2730,  2734,  2736,  2738,  2740,  2742,  2744,  2751,  2753,
    1088     2755,  2757,  2759,  2761,  2766,  2771,  2773,  2775,  2793,  2795,
    1089     2800,  2801
     1017       0,   291,   291,   297,   306,   307,   308,   312,   313,   314,
     1018     318,   319,   323,   324,   328,   329,   333,   334,   340,   342,
     1019     344,   346,   351,   352,   358,   362,   364,   365,   367,   368,
     1020     370,   372,   374,   382,   383,   389,   390,   391,   396,   398,
     1021     403,   404,   408,   412,   414,   416,   418,   423,   426,   428,
     1022     430,   432,   434,   436,   438,   440,   446,   448,   450,   452,
     1023     454,   456,   458,   460,   462,   467,   468,   469,   470,   474,
     1024     475,   477,   482,   483,   485,   487,   492,   493,   495,   500,
     1025     501,   503,   508,   509,   511,   513,   515,   520,   521,   523,
     1026     528,   529,   534,   535,   540,   541,   546,   547,   552,   553,
     1027     558,   559,   561,   563,   568,   573,   574,   576,   578,   584,
     1028     585,   591,   593,   595,   597,   602,   603,   608,   609,   610,
     1029     611,   612,   613,   614,   615,   616,   617,   621,   622,   628,
     1030     629,   635,   636,   637,   638,   639,   640,   641,   642,   643,
     1031     652,   659,   661,   671,   672,   677,   679,   681,   683,   687,
     1032     688,   693,   698,   701,   703,   705,   710,   712,   720,   721,
     1033     723,   727,   728,   733,   734,   739,   740,   744,   749,   750,
     1034     754,   756,   762,   763,   767,   769,   771,   773,   779,   780,
     1035     784,   785,   789,   791,   793,   798,   800,   805,   807,   811,
     1036     814,   818,   821,   825,   827,   831,   833,   840,   842,   844,
     1037     853,   855,   857,   859,   861,   866,   868,   870,   872,   877,
     1038     890,   891,   896,   898,   903,   907,   909,   911,   913,   915,
     1039     921,   922,   928,   929,   933,   934,   939,   941,   947,   948,
     1040     950,   955,   957,   964,   966,   970,   971,   976,   978,   982,
     1041     983,   987,   989,   993,   994,   998,   999,  1003,  1004,  1019,
     1042    1020,  1021,  1022,  1023,  1027,  1032,  1039,  1049,  1054,  1059,
     1043    1067,  1072,  1077,  1082,  1087,  1095,  1117,  1122,  1129,  1131,
     1044    1138,  1143,  1148,  1159,  1164,  1169,  1174,  1179,  1188,  1193,
     1045    1201,  1202,  1203,  1204,  1210,  1215,  1223,  1224,  1225,  1226,
     1046    1230,  1231,  1232,  1233,  1238,  1239,  1248,  1249,  1254,  1255,
     1047    1260,  1262,  1264,  1266,  1268,  1271,  1270,  1282,  1283,  1285,
     1048    1295,  1296,  1301,  1305,  1307,  1309,  1311,  1313,  1315,  1317,
     1049    1319,  1324,  1326,  1328,  1330,  1332,  1334,  1336,  1338,  1340,
     1050    1342,  1344,  1346,  1348,  1354,  1355,  1357,  1359,  1361,  1366,
     1051    1367,  1373,  1374,  1376,  1378,  1383,  1385,  1387,  1389,  1394,
     1052    1395,  1397,  1399,  1404,  1405,  1407,  1412,  1413,  1415,  1417,
     1053    1422,  1424,  1426,  1431,  1432,  1436,  1438,  1440,  1442,  1444,
     1054    1449,  1451,  1456,  1458,  1463,  1464,  1466,  1467,  1472,  1473,
     1055    1475,  1477,  1482,  1484,  1490,  1491,  1493,  1496,  1499,  1504,
     1056    1505,  1510,  1515,  1519,  1521,  1523,  1528,  1530,  1536,  1537,
     1057    1545,  1546,  1550,  1551,  1552,  1554,  1556,  1563,  1564,  1566,
     1058    1568,  1573,  1574,  1580,  1581,  1585,  1586,  1591,  1592,  1593,
     1059    1595,  1603,  1604,  1606,  1609,  1611,  1615,  1616,  1617,  1619,
     1060    1621,  1625,  1630,  1638,  1639,  1648,  1650,  1655,  1656,  1657,
     1061    1661,  1662,  1663,  1667,  1668,  1669,  1673,  1674,  1675,  1680,
     1062    1681,  1682,  1683,  1689,  1690,  1692,  1697,  1698,  1703,  1704,
     1063    1705,  1706,  1707,  1722,  1723,  1728,  1729,  1737,  1739,  1741,
     1064    1744,  1746,  1748,  1771,  1772,  1774,  1776,  1781,  1782,  1784,
     1065    1789,  1794,  1795,  1801,  1800,  1804,  1808,  1810,  1812,  1818,
     1066    1819,  1824,  1829,  1831,  1836,  1838,  1839,  1841,  1846,  1848,
     1067    1850,  1855,  1857,  1862,  1867,  1875,  1881,  1880,  1894,  1895,
     1068    1900,  1901,  1905,  1910,  1915,  1923,  1928,  1939,  1940,  1951,
     1069    1952,  1958,  1959,  1963,  1964,  1965,  1968,  1967,  1978,  1983,
     1070    1988,  1994,  2003,  2009,  2015,  2021,  2027,  2035,  2041,  2049,
     1071    2055,  2064,  2065,  2066,  2070,  2074,  2076,  2081,  2082,  2086,
     1072    2087,  2092,  2098,  2099,  2102,  2104,  2105,  2109,  2110,  2111,
     1073    2112,  2146,  2148,  2149,  2151,  2156,  2161,  2166,  2168,  2170,
     1074    2175,  2177,  2179,  2181,  2186,  2188,  2198,  2200,  2201,  2206,
     1075    2208,  2210,  2215,  2217,  2219,  2224,  2226,  2228,  2237,  2238,
     1076    2239,  2243,  2245,  2247,  2252,  2254,  2256,  2261,  2263,  2265,
     1077    2280,  2282,  2283,  2285,  2290,  2291,  2296,  2298,  2300,  2305,
     1078    2307,  2309,  2311,  2316,  2318,  2320,  2330,  2332,  2333,  2335,
     1079    2340,  2342,  2344,  2349,  2351,  2353,  2355,  2360,  2362,  2364,
     1080    2395,  2397,  2398,  2400,  2405,  2410,  2418,  2420,  2422,  2427,
     1081    2429,  2434,  2436,  2450,  2451,  2453,  2458,  2460,  2462,  2464,
     1082    2466,  2471,  2472,  2474,  2476,  2481,  2483,  2485,  2491,  2493,
     1083    2495,  2499,  2501,  2503,  2505,  2519,  2520,  2522,  2527,  2529,
     1084    2531,  2533,  2535,  2540,  2541,  2543,  2545,  2550,  2552,  2554,
     1085    2560,  2561,  2563,  2572,  2575,  2577,  2580,  2582,  2584,  2597,
     1086    2598,  2600,  2605,  2607,  2609,  2611,  2613,  2618,  2619,  2621,
     1087    2623,  2628,  2630,  2638,  2639,  2640,  2645,  2646,  2650,  2652,
     1088    2654,  2656,  2658,  2660,  2667,  2669,  2671,  2673,  2675,  2677,
     1089    2679,  2681,  2683,  2685,  2690,  2692,  2694,  2699,  2725,  2726,
     1090    2728,  2732,  2733,  2737,  2739,  2741,  2743,  2745,  2747,  2754,
     1091    2756,  2758,  2760,  2762,  2764,  2769,  2774,  2776,  2778,  2796,
     1092    2798,  2803,  2804
    10901093};
    10911094#endif
     
    10991102  "STATIC", "INLINE", "FORTRAN", "CONST", "VOLATILE", "RESTRICT", "FORALL",
    11001103  "LVALUE", "VOID", "CHAR", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE",
    1101   "SIGNED", "UNSIGNED", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF", "LABEL",
    1102   "ENUM", "STRUCT", "UNION", "TYPE", "FTYPE", "DTYPE", "CONTEXT", "SIZEOF",
    1103   "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH", "CASE",
    1104   "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO", "RETURN",
    1105   "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH", "CATCHRESUME",
    1106   "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS", "ALIGNOF",
    1107   "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT", "THREADLOCAL",
    1108   "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname", "TYPEGENname",
    1109   "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
     1104  "SIGNED", "UNSIGNED", "VALIST", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF",
     1105  "LABEL", "ENUM", "STRUCT", "UNION", "OTYPE", "FTYPE", "DTYPE", "TRAIT",
     1106  "SIZEOF", "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH",
     1107  "CASE", "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO",
     1108  "RETURN", "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH",
     1109  "CATCHRESUME", "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS",
     1110  "ALIGNOF", "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT",
     1111  "THREADLOCAL", "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname",
     1112  "TYPEGENname", "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
    11101113  "INTEGERconstant", "FLOATINGconstant", "CHARACTERconstant",
    11111114  "STRINGliteral", "ZERO", "ONE", "ARROW", "ICR", "DECR", "LS", "RS", "LE",
     
    11691172  "type_parameter", "$@2", "type_class", "assertion_list_opt", "assertion",
    11701173  "type_name_list", "type_declaring_list", "type_declarator",
    1171   "type_declarator_name", "context_specifier", "$@3",
    1172   "context_declaration_list", "context_declaration",
    1173   "new_context_declaring_list", "context_declaring_list",
    1174   "translation_unit", "external_definition_list",
    1175   "external_definition_list_opt", "external_definition", "$@4",
    1176   "external_function_definition", "function_definition", "declarator",
    1177   "subrange", "asm_name_opt", "attribute_list_opt", "attribute_list",
    1178   "attribute", "attribute_parameter_list", "attrib", "any_word",
    1179   "variable_declarator", "paren_identifier", "variable_ptr",
    1180   "variable_array", "variable_function", "function_declarator",
    1181   "function_no_ptr", "function_ptr", "function_array",
    1182   "old_function_declarator", "old_function_no_ptr", "old_function_ptr",
    1183   "old_function_array", "type_redeclarator", "paren_type", "type_ptr",
    1184   "type_array", "type_function", "identifier_parameter_declarator",
     1174  "type_declarator_name", "trait_specifier", "$@3",
     1175  "trait_declaration_list", "trait_declaration",
     1176  "new_trait_declaring_list", "trait_declaring_list", "translation_unit",
     1177  "external_definition_list", "external_definition_list_opt",
     1178  "external_definition", "$@4", "external_function_definition",
     1179  "function_definition", "declarator", "subrange", "asm_name_opt",
     1180  "attribute_list_opt", "attribute_list", "attribute",
     1181  "attribute_parameter_list", "attrib", "any_word", "variable_declarator",
     1182  "paren_identifier", "variable_ptr", "variable_array",
     1183  "variable_function", "function_declarator", "function_no_ptr",
     1184  "function_ptr", "function_array", "old_function_declarator",
     1185  "old_function_no_ptr", "old_function_ptr", "old_function_array",
     1186  "type_redeclarator", "paren_type", "type_ptr", "type_array",
     1187  "type_function", "identifier_parameter_declarator",
    11851188  "identifier_parameter_ptr", "identifier_parameter_array",
    11861189  "identifier_parameter_function", "type_parameter_redeclarator",
     
    12191222     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
    12201223     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
    1221      355,   356,   357,   358,   359,   360,   361,   362,    40,    41,
    1222       91,    93,    46,   123,   125,    44,    58,    33,    42,    38,
    1223       43,    45,   126,    47,    37,    60,    62,    94,   124,    63,
    1224       61,    59
     1224     355,   356,   357,   358,   359,   360,   361,   362,   363,    40,
     1225      41,    91,    93,    46,   123,   125,    44,    58,    33,    42,
     1226      38,    43,    45,   126,    47,    37,    60,    62,    94,   124,
     1227      63,    61,    59
    12251228};
    12261229# endif
     
    12291232static const yytype_uint16 yyr1[] =
    12301233{
    1231        0,   132,   133,   134,   135,   135,   135,   136,   136,   136,
    1232      137,   137,   138,   138,   139,   139,   140,   140,   141,   141,
    1233      141,   141,   142,   142,   142,   142,   142,   142,   142,   142,
    1234      142,   142,   142,   143,   143,   144,   144,   144,   144,   144,
    1235      145,   145,   146,   146,   146,   146,   146,   147,   147,   147,
    1236      147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
    1237      147,   147,   147,   147,   147,   148,   148,   148,   148,   149,
    1238      149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
    1239      152,   152,   153,   153,   153,   153,   153,   154,   154,   154,
    1240      155,   155,   156,   156,   157,   157,   158,   158,   159,   159,
    1241      160,   160,   160,   160,   161,   162,   162,   162,   162,   163,
    1242      163,   164,   164,   164,   164,   165,   165,   166,   166,   166,
    1243      166,   166,   166,   166,   166,   166,   166,   167,   167,   168,
    1244      168,   169,   169,   169,   169,   169,   169,   169,   169,   169,
    1245      170,   171,   171,   172,   172,   173,   173,   173,   173,   174,
    1246      174,   175,   176,   176,   176,   176,   176,   176,   177,   177,
    1247      177,   178,   178,   179,   179,   180,   180,   181,   182,   182,
    1248      183,   183,   184,   184,   185,   185,   185,   185,   186,   186,
    1249      187,   187,   188,   188,   188,   189,   189,   190,   190,   190,
    1250      190,   190,   190,   190,   190,   190,   190,   191,   191,   191,
    1251      192,   192,   192,   192,   192,   193,   193,   193,   193,   194,
    1252      195,   195,   195,   195,   195,   196,   196,   196,   196,   196,
    1253      197,   197,   198,   198,   199,   199,   200,   200,   201,   201,
    1254      201,   202,   202,   203,   203,   204,   204,   205,   205,   206,
    1255      206,   207,   207,   208,   208,   209,   209,   210,   210,   211,
    1256      211,   211,   211,   211,   212,   212,   212,   213,   213,   213,
    1257      214,   214,   214,   214,   214,   215,   215,   215,   216,   216,
    1258      217,   217,   217,   218,   218,   218,   218,   218,   219,   219,
    1259      220,   220,   220,   220,   221,   221,   222,   222,   222,   222,
    1260      223,   223,   223,   223,   224,   224,   225,   225,   226,   226,
    1261      227,   227,   227,   227,   227,   228,   227,   229,   229,   229,
    1262      230,   230,   231,   232,   232,   232,   232,   232,   232,   232,
    1263      232,   233,   233,   233,   233,   233,   233,   233,   233,   233,
    1264      233,   233,   233,   234,   234,   234,   234,   234,   235,   235,
    1265      236,   236,   236,   236,   237,   237,   237,   237,   238,   238,
    1266      238,   238,   239,   239,   239,   240,   240,   240,   240,   241,
    1267      241,   241,   242,   242,   243,   243,   243,   243,   243,   244,
    1268      244,   245,   245,   246,   246,   246,   246,   247,   247,   247,
    1269      247,   248,   248,   249,   249,   249,   249,   249,   250,   250,
    1270      251,   252,   253,   253,   253,   254,   254,   255,   255,   256,
    1271      256,   257,   257,   257,   257,   257,   258,   258,   258,   258,
    1272      259,   259,   260,   260,   261,   261,   262,   262,   262,   262,
    1273      263,   263,   263,   263,   263,   264,   264,   264,   264,   264,
    1274      265,   265,   266,   266,   267,   267,   268,   268,   268,   269,
    1275      269,   269,   270,   270,   270,   271,   271,   271,   272,   272,
    1276      272,   272,   273,   273,   273,   274,   274,   275,   275,   275,
    1277      275,   275,   276,   276,   277,   277,   278,   278,   278,   278,
    1278      278,   278,   279,   279,   279,   279,   280,   280,   280,   281,
    1279      282,   282,   284,   283,   283,   285,   285,   285,   286,   286,
    1280      287,   287,   287,   288,   288,   288,   288,   289,   289,   289,
    1281      290,   290,   291,   291,   292,   293,   292,   294,   294,   295,
    1282      295,   296,   296,   296,   297,   297,   298,   298,   299,   299,
    1283      300,   300,   301,   301,   301,   302,   301,   301,   303,   303,
    1284      303,   304,   304,   304,   304,   304,   304,   304,   304,   304,
    1285      305,   305,   305,   306,   307,   307,   308,   308,   309,   309,
    1286      310,   311,   311,   312,   312,   312,   313,   313,   313,   313,
    1287      314,   314,   314,   314,   315,   315,   316,   316,   316,   317,
    1288      317,   317,   317,   318,   318,   319,   319,   319,   320,   320,
    1289      320,   321,   321,   321,   322,   322,   322,   323,   323,   323,
    1290      324,   324,   324,   325,   325,   325,   326,   326,   326,   327,
    1291      327,   327,   327,   328,   328,   329,   329,   329,   330,   330,
    1292      330,   330,   331,   331,   331,   332,   332,   332,   332,   333,
    1293      333,   333,   334,   334,   334,   334,   335,   335,   335,   336,
    1294      336,   336,   336,   337,   337,   338,   338,   338,   339,   339,
    1295      340,   340,   341,   341,   341,   342,   342,   342,   342,   342,
    1296      343,   343,   343,   343,   344,   344,   344,   345,   345,   345,
    1297      346,   346,   346,   346,   347,   347,   347,   348,   348,   348,
    1298      348,   348,   349,   349,   349,   349,   350,   350,   350,   351,
    1299      351,   351,   352,   352,   352,   352,   352,   352,   353,   353,
    1300      353,   354,   354,   354,   354,   354,   355,   355,   355,   355,
    1301      356,   356,   357,   357,   357,   358,   358,   359,   359,   359,
    1302      359,   359,   359,   360,   360,   360,   360,   360,   360,   360,
    1303      360,   360,   360,   361,   361,   361,   361,   362,   362,   362,
    1304      363,   363,   364,   364,   364,   364,   364,   364,   365,   365,
    1305      365,   365,   365,   365,   366,   367,   367,   367,   368,   368,
    1306      369,   369
     1234       0,   133,   134,   135,   136,   136,   136,   137,   137,   137,
     1235     138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
     1236     142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
     1237     143,   143,   143,   144,   144,   145,   145,   145,   145,   145,
     1238     146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
     1239     148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
     1240     148,   148,   148,   148,   148,   149,   149,   149,   149,   150,
     1241     150,   150,   151,   151,   151,   151,   152,   152,   152,   153,
     1242     153,   153,   154,   154,   154,   154,   154,   155,   155,   155,
     1243     156,   156,   157,   157,   158,   158,   159,   159,   160,   160,
     1244     161,   161,   161,   161,   162,   163,   163,   163,   163,   164,
     1245     164,   165,   165,   165,   165,   166,   166,   167,   167,   167,
     1246     167,   167,   167,   167,   167,   167,   167,   168,   168,   169,
     1247     169,   170,   170,   170,   170,   170,   170,   170,   170,   170,
     1248     171,   172,   172,   173,   173,   174,   174,   174,   174,   175,
     1249     175,   176,   177,   177,   177,   177,   177,   177,   178,   178,
     1250     178,   179,   179,   180,   180,   181,   181,   182,   183,   183,
     1251     184,   184,   185,   185,   186,   186,   186,   186,   187,   187,
     1252     188,   188,   189,   189,   189,   190,   190,   191,   191,   191,
     1253     191,   191,   191,   191,   191,   191,   191,   192,   192,   192,
     1254     193,   193,   193,   193,   193,   194,   194,   194,   194,   195,
     1255     196,   196,   196,   196,   196,   197,   197,   197,   197,   197,
     1256     198,   198,   199,   199,   200,   200,   201,   201,   202,   202,
     1257     202,   203,   203,   204,   204,   205,   205,   206,   206,   207,
     1258     207,   208,   208,   209,   209,   210,   210,   211,   211,   212,
     1259     212,   212,   212,   212,   213,   213,   213,   214,   214,   214,
     1260     215,   215,   215,   215,   215,   216,   216,   216,   217,   217,
     1261     218,   218,   218,   219,   219,   219,   219,   219,   220,   220,
     1262     221,   221,   221,   221,   222,   222,   223,   223,   223,   223,
     1263     224,   224,   224,   224,   225,   225,   226,   226,   227,   227,
     1264     228,   228,   228,   228,   228,   229,   228,   230,   230,   230,
     1265     231,   231,   232,   233,   233,   233,   233,   233,   233,   233,
     1266     233,   234,   234,   234,   234,   234,   234,   234,   234,   234,
     1267     234,   234,   234,   234,   235,   235,   235,   235,   235,   236,
     1268     236,   237,   237,   237,   237,   238,   238,   238,   238,   239,
     1269     239,   239,   239,   240,   240,   240,   241,   241,   241,   241,
     1270     242,   242,   242,   243,   243,   244,   244,   244,   244,   244,
     1271     245,   245,   246,   246,   247,   247,   247,   247,   248,   248,
     1272     248,   248,   249,   249,   250,   250,   250,   250,   250,   251,
     1273     251,   252,   253,   254,   254,   254,   255,   255,   256,   256,
     1274     257,   257,   258,   258,   258,   258,   258,   259,   259,   259,
     1275     259,   260,   260,   261,   261,   262,   262,   263,   263,   263,
     1276     263,   264,   264,   264,   264,   264,   265,   265,   265,   265,
     1277     265,   266,   266,   267,   267,   268,   268,   269,   269,   269,
     1278     270,   270,   270,   271,   271,   271,   272,   272,   272,   273,
     1279     273,   273,   273,   274,   274,   274,   275,   275,   276,   276,
     1280     276,   276,   276,   277,   277,   278,   278,   279,   279,   279,
     1281     279,   279,   279,   280,   280,   280,   280,   281,   281,   281,
     1282     282,   283,   283,   285,   284,   284,   286,   286,   286,   287,
     1283     287,   288,   288,   288,   289,   289,   289,   289,   290,   290,
     1284     290,   291,   291,   292,   292,   293,   294,   293,   295,   295,
     1285     296,   296,   297,   297,   297,   298,   298,   299,   299,   300,
     1286     300,   301,   301,   302,   302,   302,   303,   302,   302,   304,
     1287     304,   304,   305,   305,   305,   305,   305,   305,   305,   305,
     1288     305,   306,   306,   306,   307,   308,   308,   309,   309,   310,
     1289     310,   311,   312,   312,   313,   313,   313,   314,   314,   314,
     1290     314,   315,   315,   315,   315,   316,   316,   317,   317,   317,
     1291     318,   318,   318,   318,   319,   319,   320,   320,   320,   321,
     1292     321,   321,   322,   322,   322,   323,   323,   323,   324,   324,
     1293     324,   325,   325,   325,   326,   326,   326,   327,   327,   327,
     1294     328,   328,   328,   328,   329,   329,   330,   330,   330,   331,
     1295     331,   331,   331,   332,   332,   332,   333,   333,   333,   333,
     1296     334,   334,   334,   335,   335,   335,   335,   336,   336,   336,
     1297     337,   337,   337,   337,   338,   338,   339,   339,   339,   340,
     1298     340,   341,   341,   342,   342,   342,   343,   343,   343,   343,
     1299     343,   344,   344,   344,   344,   345,   345,   345,   346,   346,
     1300     346,   347,   347,   347,   347,   348,   348,   348,   349,   349,
     1301     349,   349,   349,   350,   350,   350,   350,   351,   351,   351,
     1302     352,   352,   352,   353,   353,   353,   353,   353,   353,   354,
     1303     354,   354,   355,   355,   355,   355,   355,   356,   356,   356,
     1304     356,   357,   357,   358,   358,   358,   359,   359,   360,   360,
     1305     360,   360,   360,   360,   361,   361,   361,   361,   361,   361,
     1306     361,   361,   361,   361,   362,   362,   362,   362,   363,   363,
     1307     363,   364,   364,   365,   365,   365,   365,   365,   365,   366,
     1308     366,   366,   366,   366,   366,   367,   368,   368,   368,   369,
     1309     369,   370,   370
    13071310};
    13081311
     
    13431346       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
    13441347       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1345        1,     1,     1,     1,     2,     2,     3,     3,     1,     3,
    1346        1,     2,     2,     2,     4,     4,     4,     4,     1,     2,
    1347        2,     3,     1,     2,     2,     1,     2,     2,     3,     1,
    1348        2,     2,     1,     1,     4,     2,     5,     7,     2,     2,
    1349        2,     1,     2,     2,     3,     2,     3,     1,     2,     3,
    1350        2,     2,     4,     0,     1,     2,     2,     1,     0,     1,
    1351        2,     2,     5,     6,     2,     2,     4,     0,     2,     0,
    1352        1,     1,     1,     5,     5,     5,     1,     5,     5,     9,
    1353        1,     5,     0,     1,     1,     5,     1,     1,     5,     5,
    1354        1,     3,     3,     4,     1,     1,     1,     1,     2,     1,
    1355        3,     3,     1,     2,     1,     3,     1,     1,     1,     1,
    1356        1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
    1357        1,     2,     0,     2,     2,     1,     4,     0,     1,     2,
    1358        3,     4,     2,     2,     1,     2,     1,     2,     5,     5,
    1359        7,     6,     1,     2,     2,     3,     1,     2,     2,     4,
    1360        2,     4,     0,     4,     2,     1,     1,     1,     0,     2,
    1361        5,     5,    13,     1,     1,     3,     3,     2,     3,     3,
    1362        2,     4,     1,     6,     9,     0,    11,     1,     3,     3,
    1363        3,     1,     1,     5,     2,     5,     0,     1,     1,     3,
    1364        0,     1,     1,     1,     1,     0,     6,     2,     1,     2,
    1365        4,     2,     3,     3,     3,     4,     5,     5,     5,     6,
    1366        1,     1,     1,     3,     0,     5,     0,     1,     1,     2,
    1367        6,     1,     3,     0,     1,     4,     1,     1,     1,     1,
     1348       1,     1,     1,     1,     1,     2,     2,     3,     3,     1,
     1349       3,     1,     2,     2,     2,     4,     4,     4,     4,     1,
     1350       2,     2,     3,     1,     2,     2,     1,     2,     2,     3,
     1351       1,     2,     2,     1,     1,     4,     2,     5,     7,     2,
     1352       2,     2,     1,     2,     2,     3,     2,     3,     1,     2,
     1353       3,     2,     2,     4,     0,     1,     2,     2,     1,     0,
     1354       1,     2,     2,     5,     6,     2,     2,     4,     0,     2,
     1355       0,     1,     1,     1,     5,     5,     5,     1,     5,     5,
     1356       9,     1,     5,     0,     1,     1,     5,     1,     1,     5,
     1357       5,     1,     3,     3,     4,     1,     1,     1,     1,     2,
     1358       1,     3,     3,     1,     2,     1,     3,     1,     1,     1,
     1359       1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
     1360       1,     1,     2,     0,     2,     2,     1,     4,     0,     1,
     1361       2,     3,     4,     2,     2,     1,     2,     1,     2,     5,
     1362       5,     7,     6,     1,     2,     2,     3,     1,     2,     2,
     1363       4,     2,     4,     0,     4,     2,     1,     1,     1,     0,
     1364       2,     5,     5,    13,     1,     1,     3,     3,     2,     3,
     1365       3,     2,     4,     1,     6,     9,     0,    11,     1,     3,
     1366       3,     3,     1,     1,     5,     2,     5,     0,     1,     1,
     1367       3,     0,     1,     1,     1,     1,     0,     6,     2,     1,
     1368       2,     4,     2,     3,     3,     3,     4,     5,     5,     5,
     1369       6,     1,     1,     1,     3,     0,     5,     0,     1,     1,
     1370       2,     6,     1,     3,     0,     1,     4,     1,     1,     1,
     1371       1,     2,     1,     2,     2,     1,     3,     2,     3,     3,
     1372       2,     4,     4,     3,     8,     3,     2,     1,     2,     6,
     1373       8,     3,     2,     3,     3,     4,     4,     3,     1,     1,
     1374       1,     4,     6,     3,     2,     3,     3,     4,     4,     3,
    13681375       2,     1,     2,     2,     1,     3,     2,     3,     3,     2,
    1369        4,     4,     3,     8,     3,     2,     1,     2,     6,     8,
    1370        3,     2,     3,     3,     4,     4,     3,     1,     1,     1,
    1371        4,     6,     3,     2,     3,     3,     4,     4,     3,     2,
    1372        1,     2,     2,     1,     3,     2,     3,     3,     2,     4,
    1373        4,     3,     6,     8,     3,     2,     1,     2,     2,     2,
    1374        3,     3,     2,     4,     4,     3,     6,     8,     3,     2,
    1375        1,     2,     2,     1,     1,     2,     3,     3,     2,     4,
    1376        6,     8,     1,     2,     2,     1,     2,     2,     3,     3,
    1377        1,     4,     4,     3,     5,     8,     3,     2,     3,     1,
    1378        5,     5,     6,     6,     1,     2,     2,     1,     2,     2,
    1379        3,     3,     1,     4,     4,     3,     5,     8,     3,     1,
    1380        2,     1,     2,     6,     5,     6,     7,     7,     1,     2,
    1381        2,     1,     2,     2,     3,     3,     1,     4,     4,     3,
    1382        8,     3,     1,     1,     2,     1,     1,     2,     3,     2,
    1383        3,     2,     3,     3,     2,     4,     3,     2,     3,     2,
    1384        4,     3,     2,     6,     6,     6,     7,     1,     2,     1,
    1385        1,     1,     2,     3,     2,     3,     2,     3,     3,     4,
    1386        2,     3,     4,     2,     5,     5,     6,     6,     0,     1,
    1387        0,     2
     1376       4,     4,     3,     6,     8,     3,     2,     1,     2,     2,
     1377       2,     3,     3,     2,     4,     4,     3,     6,     8,     3,
     1378       2,     1,     2,     2,     1,     1,     2,     3,     3,     2,
     1379       4,     6,     8,     1,     2,     2,     1,     2,     2,     3,
     1380       3,     1,     4,     4,     3,     5,     8,     3,     2,     3,
     1381       1,     5,     5,     6,     6,     1,     2,     2,     1,     2,
     1382       2,     3,     3,     1,     4,     4,     3,     5,     8,     3,
     1383       1,     2,     1,     2,     6,     5,     6,     7,     7,     1,
     1384       2,     2,     1,     2,     2,     3,     3,     1,     4,     4,
     1385       3,     8,     3,     1,     1,     2,     1,     1,     2,     3,
     1386       2,     3,     2,     3,     3,     2,     4,     3,     2,     3,
     1387       2,     4,     3,     2,     6,     6,     6,     7,     1,     2,
     1388       1,     1,     1,     2,     3,     2,     3,     2,     3,     3,
     1389       4,     2,     3,     4,     2,     5,     5,     6,     6,     0,
     1390       1,     0,     2
    13881391};
    13891392
     
    13951398     294,   294,   315,   313,   316,   314,   317,   318,   300,   302,
    13961399     301,     0,   303,   329,   321,   326,   324,   325,   323,   322,
    1397      327,   328,   330,   331,   332,   546,   546,   546,     0,     0,
    1398        0,   294,   220,   304,   319,   320,     7,   359,     0,     8,
    1399       14,    15,     0,     2,   294,   564,     9,   524,   522,   247,
    1400        3,   452,     3,   260,     0,     3,     3,     3,   248,     3,
    1401        0,     0,     0,   295,   296,   298,   294,   307,   310,   312,
    1402      340,   286,   333,   338,   287,   348,   288,   355,   352,   362,
    1403        0,     0,   363,   289,   472,   476,     3,     3,     0,     2,
    1404      518,   523,   528,   299,     0,     0,   546,   576,   546,     2,
    1405      587,   588,   589,   294,     0,   730,   731,     0,    12,   294,
    1406        0,    13,   270,   271,     0,   295,   290,   291,   292,   293,
    1407      525,   305,   391,   547,   548,   369,   370,    12,   443,   444,
    1408       11,   439,   442,     0,   502,   497,   488,   443,   444,     0,
    1409        0,   527,   221,     0,   294,     0,     0,     0,     0,     0,
    1410        0,     0,     0,   294,   294,     2,     0,   732,   295,   581,
    1411      593,   736,   729,   727,   734,     0,     0,     0,   254,     2,
    1412        0,   531,   437,   438,   436,     0,     0,     0,     0,   546,
    1413        0,   633,   634,     0,     0,   544,   540,   546,   561,   546,
    1414      546,   541,     2,   542,   546,   600,   546,   546,   603,     0,
    1415        0,     0,   294,   294,   313,   360,     2,   294,   261,   297,
    1416      308,   341,   353,   477,     0,     2,     0,   452,   262,   295,
    1417      334,   349,   356,   473,     0,     2,     0,   311,   335,   342,
    1418      343,     0,   350,   354,   357,   361,   444,   294,   294,   365,
    1419      368,     0,   394,   474,   478,     0,     0,     0,     1,   294,
    1420        2,   529,   575,   577,   294,     2,   740,   295,   743,   544,
    1421      544,   295,     0,     0,     0,   273,   546,   541,     2,   294,
    1422        0,     0,   294,   549,     2,   500,     2,   553,     0,     0,
    1423        0,     0,     0,     0,    18,    59,     4,     5,     6,    16,
    1424        0,     0,     0,   294,     2,     0,   294,    65,    66,    67,
    1425       68,    48,    19,    49,    22,    47,    69,     0,    72,    76,
    1426       79,    82,    87,    90,    92,    94,    96,    98,   100,   105,
    1427      494,   750,   450,   493,     0,   448,   449,     0,   565,   580,
    1428      583,   586,   592,   595,   598,   359,     0,     2,   738,     0,
    1429      294,   741,     2,   294,     3,   424,     0,   432,   295,   294,
    1430      307,   333,   287,   348,   355,     3,     3,   406,   410,   420,
    1431      425,   472,   294,   426,   705,   706,   294,   427,   429,   294,
    1432        2,   582,   594,   728,     2,     2,   249,     2,   457,     0,
    1433      455,   454,   453,   141,     2,     2,   251,     2,     2,   250,
    1434        2,   281,     2,   282,     0,   280,     0,     0,     0,     0,
    1435        0,     0,     0,     0,     0,   566,   605,     0,   452,     2,
    1436      560,   569,   659,   562,   563,   532,   294,     2,   599,   608,
    1437      601,   602,     0,   276,   294,   294,   339,   295,     0,   295,
    1438        0,   294,   733,   737,   735,   533,   294,   544,   255,   263,
    1439      309,     0,     2,   534,   294,   498,   336,   337,   283,   351,
    1440      358,     0,   294,     2,   383,   294,   371,     0,     0,   377,
    1441      727,   294,   748,   397,     0,   475,   499,   252,   253,   519,
    1442      294,   434,     0,   294,   237,     0,     2,   239,     0,   295,
    1443        0,   257,     2,   258,   278,     0,     0,     2,   294,   544,
    1444      294,   485,   487,   486,     0,     0,   750,     0,   294,     0,
    1445      294,   489,   294,   559,   557,   558,   556,     0,   551,   554,
    1446        0,     0,   294,    56,   294,    69,    52,   294,    62,   294,
    1447      294,    50,    51,    64,     2,   127,     0,     0,   446,     0,
    1448      445,   111,   294,    54,    55,    17,     0,    29,    30,    35,
    1449        2,     0,    35,   117,   118,   119,   120,   121,   122,   123,
    1450      124,   125,   126,     0,     0,    53,     0,     0,     0,     0,
     1400     327,   328,   333,   330,   331,   332,   547,   547,   547,     0,
     1401       0,     0,   294,   220,   304,   319,   320,     7,   360,     0,
     1402       8,    14,    15,     0,     2,   294,   565,     9,   525,   523,
     1403     247,     3,   453,     3,   260,     0,     3,     3,     3,   248,
     1404       3,     0,     0,     0,   295,   296,   298,   294,   307,   310,
     1405     312,   341,   286,   334,   339,   287,   349,   288,   356,   353,
     1406     363,     0,     0,   364,   289,   473,   477,     3,     3,     0,
     1407       2,   519,   524,   529,   299,     0,     0,   547,   577,   547,
     1408       2,   588,   589,   590,   294,     0,   731,   732,     0,    12,
     1409     294,     0,    13,   270,   271,     0,   295,   290,   291,   292,
     1410     293,   526,   305,   392,   548,   549,   370,   371,    12,   444,
     1411     445,    11,   440,   443,     0,   503,   498,   489,   444,   445,
     1412       0,     0,   528,   221,     0,   294,     0,     0,     0,     0,
     1413       0,     0,     0,     0,   294,   294,     2,     0,   733,   295,
     1414     582,   594,   737,   730,   728,   735,     0,     0,     0,   254,
     1415       2,     0,   532,   438,   439,   437,     0,     0,     0,     0,
     1416     547,     0,   634,   635,     0,     0,   545,   541,   547,   562,
     1417     547,   547,   542,     2,   543,   547,   601,   547,   547,   604,
     1418       0,     0,     0,   294,   294,   313,   361,     2,   294,   261,
     1419     297,   308,   342,   354,   478,     0,     2,     0,   453,   262,
     1420     295,   335,   350,   357,   474,     0,     2,     0,   311,   336,
     1421     343,   344,     0,   351,   355,   358,   362,   445,   294,   294,
     1422     366,   369,     0,   395,   475,   479,     0,     0,     0,     1,
     1423     294,     2,   530,   576,   578,   294,     2,   741,   295,   744,
     1424     545,   545,   295,     0,     0,     0,   273,   547,   542,     2,
     1425     294,     0,     0,   294,   550,     2,   501,     2,   554,     0,
     1426       0,     0,     0,     0,     0,    18,    59,     4,     5,     6,
     1427      16,     0,     0,     0,   294,     2,     0,   294,    65,    66,
     1428      67,    68,    48,    19,    49,    22,    47,    69,     0,    72,
     1429      76,    79,    82,    87,    90,    92,    94,    96,    98,   100,
     1430     105,   495,   751,   451,   494,     0,   449,   450,     0,   566,
     1431     581,   584,   587,   593,   596,   599,   360,     0,     2,   739,
     1432       0,   294,   742,     2,   294,     3,   425,     0,   433,   295,
     1433     294,   307,   334,   287,   349,   356,     3,     3,   407,   411,
     1434     421,   426,   473,   294,   427,   706,   707,   294,   428,   430,
     1435     294,     2,   583,   595,   729,     2,     2,   249,     2,   458,
     1436       0,   456,   455,   454,   141,     2,     2,   251,     2,     2,
     1437     250,     2,   281,     2,   282,     0,   280,     0,     0,     0,
     1438       0,     0,     0,     0,     0,     0,   567,   606,     0,   453,
     1439       2,   561,   570,   660,   563,   564,   533,   294,     2,   600,
     1440     609,   602,   603,     0,   276,   294,   294,   340,   295,     0,
     1441     295,     0,   294,   734,   738,   736,   534,   294,   545,   255,
     1442     263,   309,     0,     2,   535,   294,   499,   337,   338,   283,
     1443     352,   359,     0,   294,     2,   384,   294,   372,     0,     0,
     1444     378,   728,   294,   749,   398,     0,   476,   500,   252,   253,
     1445     520,   294,   435,     0,   294,   237,     0,     2,   239,     0,
     1446     295,     0,   257,     2,   258,   278,     0,     0,     2,   294,
     1447     545,   294,   486,   488,   487,     0,     0,   751,     0,   294,
     1448       0,   294,   490,   294,   560,   558,   559,   557,     0,   552,
     1449     555,     0,     0,   294,    56,   294,    69,    52,   294,    62,
     1450     294,   294,    50,    51,    64,     2,   127,     0,     0,   447,
     1451       0,   446,   111,   294,    54,    55,    17,     0,    29,    30,
     1452      35,     2,     0,    35,   117,   118,   119,   120,   121,   122,
     1453     123,   124,   125,   126,     0,     0,    53,     0,     0,     0,
    14511454       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1452        0,     0,     0,     0,     0,     0,   108,     2,   645,   451,
    1453      642,   546,   546,   650,   479,   294,     2,   584,   585,     0,
    1454      596,   597,     0,     2,   739,   742,   111,   294,     2,   294,
    1455        0,   707,   295,   711,   702,   703,   709,     0,     2,     2,
    1456      667,   546,   750,   616,   546,   546,   750,   546,   630,   546,
    1457      546,   681,   433,   664,   546,   546,   672,   679,   294,   428,
    1458      295,     0,     0,   294,   717,   295,   722,   750,   714,   294,
    1459      719,   750,   294,   294,   294,     0,   111,     0,    18,     5,
    1460        2,     0,    19,     0,   458,   748,     0,     0,   464,   241,
    1461        0,   294,     0,     0,     0,   544,   568,   572,   574,   604,
    1462      607,   611,   614,   567,   606,     0,   284,   657,     0,   294,
    1463      277,     0,     0,     0,     0,   275,     2,     0,   259,   535,
    1464      294,     0,     0,     0,     0,   294,   294,     0,     0,   691,
    1465      381,   384,   388,   546,   388,   696,   387,   688,   546,   546,
    1466      364,   372,   380,   373,   546,   375,   378,   294,   749,     0,
    1467        0,   395,   748,   295,     3,   413,     3,   417,   416,   590,
    1468        0,   530,   294,     3,     3,   294,   432,   295,     3,   426,
    1469      427,     2,     0,     0,     0,   484,   306,   294,   480,   482,
    1470        3,     2,     2,     0,   501,     3,     0,   553,   129,     0,
    1471        0,   222,     0,     0,     0,     2,     0,     0,    36,     0,
    1472        0,   111,   294,    20,     0,    21,     0,   691,   447,     0,
    1473      109,     3,     2,    27,     2,     0,    33,     0,     2,    25,
    1474        0,   106,   107,    73,    74,    75,    77,    78,    80,    81,
    1475       85,    86,    83,    84,    88,    89,    91,    93,    95,    97,
    1476       99,     0,     0,   751,   294,     0,     0,     0,   646,   647,
    1477      643,   644,   496,   495,   294,     0,     3,   294,   713,   294,
    1478      718,   295,   294,   294,   294,   661,   704,   660,     2,   294,
    1479        0,     0,     0,     0,     0,     0,     0,     0,   682,     0,
    1480      668,   619,   635,   669,     2,   615,   622,   430,   617,   618,
    1481      431,     2,   629,   638,   631,   632,   665,   666,   680,   708,
    1482      712,   710,   750,   268,     2,   744,     2,   421,   716,   721,
    1483      422,     0,   400,     3,     3,     3,     3,   452,     3,     0,
    1484        2,   467,   463,   749,     0,   459,   466,     2,   462,   465,
    1485        0,   294,   242,   264,     3,   272,   274,     0,   452,     2,
    1486      570,   571,     2,   609,   610,     0,   658,   536,     3,   345,
    1487      344,   347,   346,   294,   537,     0,   538,   294,   374,   376,
    1488        2,     0,     0,     0,     0,   104,   390,   692,   693,   385,
    1489      389,   386,   689,   690,   379,   383,   366,   397,   392,   398,
    1490        0,     0,     0,   435,   240,     0,     0,     3,     2,   667,
    1491      428,     0,   526,     0,   750,   488,     0,   294,   294,   294,
    1492        0,   550,   552,   130,     0,     0,   215,     0,     0,     0,
    1493      223,   224,    57,     0,    63,   294,     0,    61,    60,     0,
    1494      128,   692,   457,    70,    71,   110,   115,     3,   109,     0,
    1495        0,     0,    24,    35,     3,     0,    32,   102,     0,     3,
    1496      649,   653,   656,   648,     3,   591,     3,   715,   720,     2,
    1497      294,     3,     3,   295,     0,     3,   621,   625,   628,   637,
    1498      671,   675,   678,   294,     3,   620,   636,   670,   294,   294,
    1499      423,   294,   294,   745,     0,     0,     0,     0,   256,     0,
    1500      104,     0,     3,     3,     0,   460,     0,   456,     0,     0,
    1501      245,   294,     0,     0,   129,     0,     0,     0,     0,     0,
    1502      129,     0,     0,   109,   109,     2,     0,     0,     0,     3,
    1503      131,   132,     2,   143,   133,   134,   135,   136,   137,   138,
    1504      145,   147,     0,     0,     0,   285,   294,   294,   546,     0,
    1505      539,   294,   111,   695,   699,   701,   694,   382,   396,   393,
    1506      578,     2,   663,   662,     0,   668,     2,   481,   483,   503,
    1507        3,   511,   512,     0,     2,   507,     3,     3,     0,     0,
    1508      555,   222,     0,     0,     0,   222,     0,     0,     3,    37,
    1509      748,   109,     0,     3,   660,    42,     3,    40,     3,    34,
    1510        0,     3,   101,   103,     0,     2,   651,   652,     0,     0,
    1511      294,     0,     0,     0,     3,   637,     0,     2,   623,   624,
    1512        2,   639,     2,   673,   674,     0,     0,     3,     0,     3,
    1513        3,     3,     3,   408,   407,   411,     2,     2,   747,   746,
    1514      112,     0,     0,     0,     0,     3,   461,     3,     0,   243,
    1515      146,     3,   295,   294,     0,     0,     0,     0,     2,   191,
    1516        0,   189,     0,     0,     0,     0,     0,     0,     0,     0,
    1517      111,     0,   546,   151,   148,   294,     0,     0,   267,   279,
    1518        3,     3,   545,   612,   367,     2,   697,   698,   294,   266,
    1519      294,     0,   514,   491,   294,     0,     0,   490,   505,     0,
    1520        0,     0,   216,     0,   225,    58,   109,     0,     0,   116,
    1521      113,     0,     0,     0,     0,     0,     0,    23,     0,   654,
    1522      294,   579,   265,   723,   724,   725,     0,   676,   294,   294,
    1523      294,     3,     3,     0,   684,     0,     0,     0,     0,   294,
    1524      294,     3,   543,   468,   469,     0,     0,   246,   295,     0,
    1525        0,     0,     0,   294,   192,   190,     0,   187,   193,     0,
    1526        0,     0,     0,   197,   200,   198,   194,     0,   195,    35,
    1527      129,   144,   142,   244,     0,     0,   294,   415,   419,   418,
    1528        0,   508,     2,   509,     2,   510,   504,   294,   228,     0,
    1529      226,     0,   228,     3,   660,    31,   114,     2,    45,     2,
    1530       43,    41,    28,   112,    26,     3,   726,     3,     3,     3,
    1531        0,     0,   683,   685,   626,   640,   269,     2,   405,     3,
    1532      404,     0,   471,   468,   129,     0,     0,   129,     3,     0,
    1533      129,   188,     0,     2,     2,   209,   199,     0,     0,     0,
    1534        0,   140,   573,   613,     3,     2,     0,     0,     2,   229,
    1535        0,     0,   217,     0,     0,     0,     0,     0,     0,     0,
    1536        0,     0,   686,   687,   294,     0,   470,   152,     0,     0,
    1537        2,   165,   129,   154,     0,   182,     0,   129,     0,     2,
    1538      156,     0,     2,     0,     2,     2,     2,   196,    32,     0,
    1539      294,   513,   515,   506,     0,     0,     0,     0,   114,    38,
    1540        3,     3,   655,   627,   641,   677,   409,   129,   158,   161,
    1541        0,   160,   164,     3,   167,   166,     0,   129,   184,   129,
    1542        3,     0,   294,     0,   294,     0,     2,     0,     2,   139,
    1543      700,     2,   230,   231,     0,   227,   218,     0,     0,     0,
    1544      153,     0,     0,   163,   233,   168,     2,   235,   183,     0,
    1545      186,   172,   201,     3,   210,   214,   203,     3,     0,   294,
    1546        0,   294,     0,     0,     0,    39,    46,    44,   159,   162,
    1547      129,     0,   169,   294,   129,   129,     0,   173,     0,     0,
    1548      691,   211,   212,   213,     0,   202,     3,   204,     3,   294,
    1549      219,   232,   149,   170,   155,   129,   236,   185,   180,   178,
    1550      174,   157,   129,     0,   692,     0,     0,     0,     0,   150,
    1551      171,   181,   175,   179,   178,   176,     3,     3,     0,     0,
    1552      492,   177,   205,   207,     3,     3,   206,   208
     1455       0,     0,     0,     0,     0,     0,     0,   108,     2,   646,
     1456     452,   643,   547,   547,   651,   480,   294,     2,   585,   586,
     1457       0,   597,   598,     0,     2,   740,   743,   111,   294,     2,
     1458     294,     0,   708,   295,   712,   703,   704,   710,     0,     2,
     1459       2,   668,   547,   751,   617,   547,   547,   751,   547,   631,
     1460     547,   547,   682,   434,   665,   547,   547,   673,   680,   294,
     1461     429,   295,     0,     0,   294,   718,   295,   723,   751,   715,
     1462     294,   720,   751,   294,   294,   294,     0,   111,     0,    18,
     1463       5,     2,     0,    19,     0,   459,   749,     0,     0,   465,
     1464     241,     0,   294,     0,     0,     0,   545,   569,   573,   575,
     1465     605,   608,   612,   615,   568,   607,     0,   284,   658,     0,
     1466     294,   277,     0,     0,     0,     0,   275,     2,     0,   259,
     1467     536,   294,     0,     0,     0,     0,   294,   294,     0,     0,
     1468     692,   382,   385,   389,   547,   389,   697,   388,   689,   547,
     1469     547,   365,   373,   381,   374,   547,   376,   379,   294,   750,
     1470       0,     0,   396,   749,   295,     3,   414,     3,   418,   417,
     1471     591,     0,   531,   294,     3,     3,   294,   433,   295,     3,
     1472     427,   428,     2,     0,     0,     0,   485,   306,   294,   481,
     1473     483,     3,     2,     2,     0,   502,     3,     0,   554,   129,
     1474       0,     0,   222,     0,     0,     0,     2,     0,     0,    36,
     1475       0,     0,   111,   294,    20,     0,    21,     0,   692,   448,
     1476       0,   109,     3,     2,    27,     2,     0,    33,     0,     2,
     1477      25,     0,   106,   107,    73,    74,    75,    77,    78,    80,
     1478      81,    85,    86,    83,    84,    88,    89,    91,    93,    95,
     1479      97,    99,     0,     0,   752,   294,     0,     0,     0,   647,
     1480     648,   644,   645,   497,   496,   294,     0,     3,   294,   714,
     1481     294,   719,   295,   294,   294,   294,   662,   705,   661,     2,
     1482     294,     0,     0,     0,     0,     0,     0,     0,     0,   683,
     1483       0,   669,   620,   636,   670,     2,   616,   623,   431,   618,
     1484     619,   432,     2,   630,   639,   632,   633,   666,   667,   681,
     1485     709,   713,   711,   751,   268,     2,   745,     2,   422,   717,
     1486     722,   423,     0,   401,     3,     3,     3,     3,   453,     3,
     1487       0,     2,   468,   464,   750,     0,   460,   467,     2,   463,
     1488     466,     0,   294,   242,   264,     3,   272,   274,     0,   453,
     1489       2,   571,   572,     2,   610,   611,     0,   659,   537,     3,
     1490     346,   345,   348,   347,   294,   538,     0,   539,   294,   375,
     1491     377,     2,     0,     0,     0,     0,   104,   391,   693,   694,
     1492     386,   390,   387,   690,   691,   380,   384,   367,   398,   393,
     1493     399,     0,     0,     0,   436,   240,     0,     0,     3,     2,
     1494     668,   429,     0,   527,     0,   751,   489,     0,   294,   294,
     1495     294,     0,   551,   553,   130,     0,     0,   215,     0,     0,
     1496       0,   223,   224,    57,     0,    63,   294,     0,    61,    60,
     1497       0,   128,   693,   458,    70,    71,   110,   115,     3,   109,
     1498       0,     0,     0,    24,    35,     3,     0,    32,   102,     0,
     1499       3,   650,   654,   657,   649,     3,   592,     3,   716,   721,
     1500       2,   294,     3,     3,   295,     0,     3,   622,   626,   629,
     1501     638,   672,   676,   679,   294,     3,   621,   637,   671,   294,
     1502     294,   424,   294,   294,   746,     0,     0,     0,     0,   256,
     1503       0,   104,     0,     3,     3,     0,   461,     0,   457,     0,
     1504       0,   245,   294,     0,     0,   129,     0,     0,     0,     0,
     1505       0,   129,     0,     0,   109,   109,     2,     0,     0,     0,
     1506       3,   131,   132,     2,   143,   133,   134,   135,   136,   137,
     1507     138,   145,   147,     0,     0,     0,   285,   294,   294,   547,
     1508       0,   540,   294,   111,   696,   700,   702,   695,   383,   397,
     1509     394,   579,     2,   664,   663,     0,   669,     2,   482,   484,
     1510     504,     3,   512,   513,     0,     2,   508,     3,     3,     0,
     1511       0,   556,   222,     0,     0,     0,   222,     0,     0,     3,
     1512      37,   749,   109,     0,     3,   661,    42,     3,    40,     3,
     1513      34,     0,     3,   101,   103,     0,     2,   652,   653,     0,
     1514       0,   294,     0,     0,     0,     3,   638,     0,     2,   624,
     1515     625,     2,   640,     2,   674,   675,     0,     0,     3,     0,
     1516       3,     3,     3,     3,   409,   408,   412,     2,     2,   748,
     1517     747,   112,     0,     0,     0,     0,     3,   462,     3,     0,
     1518     243,   146,     3,   295,   294,     0,     0,     0,     0,     2,
     1519     191,     0,   189,     0,     0,     0,     0,     0,     0,     0,
     1520       0,   111,     0,   547,   151,   148,   294,     0,     0,   267,
     1521     279,     3,     3,   546,   613,   368,     2,   698,   699,   294,
     1522     266,   294,     0,   515,   492,   294,     0,     0,   491,   506,
     1523       0,     0,     0,   216,     0,   225,    58,   109,     0,     0,
     1524     116,   113,     0,     0,     0,     0,     0,     0,    23,     0,
     1525     655,   294,   580,   265,   724,   725,   726,     0,   677,   294,
     1526     294,   294,     3,     3,     0,   685,     0,     0,     0,     0,
     1527     294,   294,     3,   544,   469,   470,     0,     0,   246,   295,
     1528       0,     0,     0,     0,   294,   192,   190,     0,   187,   193,
     1529       0,     0,     0,     0,   197,   200,   198,   194,     0,   195,
     1530      35,   129,   144,   142,   244,     0,     0,   294,   416,   420,
     1531     419,     0,   509,     2,   510,     2,   511,   505,   294,   228,
     1532       0,   226,     0,   228,     3,   661,    31,   114,     2,    45,
     1533       2,    43,    41,    28,   112,    26,     3,   727,     3,     3,
     1534       3,     0,     0,   684,   686,   627,   641,   269,     2,   406,
     1535       3,   405,     0,   472,   469,   129,     0,     0,   129,     3,
     1536       0,   129,   188,     0,     2,     2,   209,   199,     0,     0,
     1537       0,     0,   140,   574,   614,     3,     2,     0,     0,     2,
     1538     229,     0,     0,   217,     0,     0,     0,     0,     0,     0,
     1539       0,     0,     0,   687,   688,   294,     0,   471,   152,     0,
     1540       0,     2,   165,   129,   154,     0,   182,     0,   129,     0,
     1541       2,   156,     0,     2,     0,     2,     2,     2,   196,    32,
     1542       0,   294,   514,   516,   507,     0,     0,     0,     0,   114,
     1543      38,     3,     3,   656,   628,   642,   678,   410,   129,   158,
     1544     161,     0,   160,   164,     3,   167,   166,     0,   129,   184,
     1545     129,     3,     0,   294,     0,   294,     0,     2,     0,     2,
     1546     139,   701,     2,   230,   231,     0,   227,   218,     0,     0,
     1547       0,   153,     0,     0,   163,   233,   168,     2,   235,   183,
     1548       0,   186,   172,   201,     3,   210,   214,   203,     3,     0,
     1549     294,     0,   294,     0,     0,     0,    39,    46,    44,   159,
     1550     162,   129,     0,   169,   294,   129,   129,     0,   173,     0,
     1551       0,   692,   211,   212,   213,     0,   202,     3,   204,     3,
     1552     294,   219,   232,   149,   170,   155,   129,   236,   185,   180,
     1553     178,   174,   157,   129,     0,   693,     0,     0,     0,     0,
     1554     150,   171,   181,   175,   179,   178,   176,     3,     3,     0,
     1555       0,   493,   177,   205,   207,     3,     3,   206,   208
    15531556};
    15541557
     
    15561559static const yytype_int16 yydefgoto[] =
    15571560{
    1558       -1,   839,   474,   301,    45,   131,   132,   302,   303,   304,
    1559      305,   785,   786,  1146,  1147,   306,   307,   308,   309,   310,
    1560      311,   312,   313,   314,   315,   316,   317,   318,   319,  1051,
    1561      525,   996,   321,   997,   554,   973,  1078,  1542,  1080,  1081,
    1562     1082,  1083,  1543,  1084,  1085,  1459,  1460,  1421,  1422,  1423,
    1563     1521,  1522,  1526,  1527,  1562,  1563,  1086,  1379,  1087,  1088,
    1564     1313,  1314,  1315,  1503,  1089,   143,   979,   980,   981,  1400,
    1565     1484,  1495,  1496,   475,   476,   901,   902,  1059,    48,    49,
    1566       50,    51,    52,   345,   156,    55,    56,    57,    58,    59,
    1567      347,    61,    62,   261,    64,    65,   272,   349,   350,    68,
    1568       69,    70,    71,   116,    73,   202,   352,   117,    76,   118,
    1569       78,    79,    80,   455,   456,   457,   458,   700,   939,   701,
    1570       81,    82,   462,   721,   881,   882,   355,   356,   724,   725,
    1571      726,   357,   358,   359,   360,   472,   339,   133,   134,   529,
    1572      323,   168,   654,   655,   656,   657,   658,    83,   119,    85,
    1573      495,   496,   965,   497,   275,   501,   324,    86,   135,   136,
    1574       87,  1337,  1124,  1125,  1126,  1127,    88,    89,   742,    90,
    1575      271,    91,    92,   185,  1053,   688,   410,   123,    93,   507,
    1576      508,   509,   186,   266,   188,   189,   190,   267,    96,    97,
    1577       98,    99,   100,   101,   102,   193,   194,   195,   196,   197,
    1578      851,   613,   614,   615,   616,   198,   618,   619,   620,   579,
    1579      580,   581,   582,   705,   103,   622,   623,   624,   625,   626,
    1580      627,   938,   707,   708,   709,   603,   363,   364,   365,   366,
    1581      325,   162,   105,   106,   107,   368,   719,   576
     1561      -1,   840,   475,   302,    46,   132,   133,   303,   304,   305,
     1562     306,   786,   787,  1147,  1148,   307,   308,   309,   310,   311,
     1563     312,   313,   314,   315,   316,   317,   318,   319,   320,  1052,
     1564     526,   997,   322,   998,   555,   974,  1079,  1543,  1081,  1082,
     1565    1083,  1084,  1544,  1085,  1086,  1460,  1461,  1422,  1423,  1424,
     1566    1522,  1523,  1527,  1528,  1563,  1564,  1087,  1380,  1088,  1089,
     1567    1314,  1315,  1316,  1504,  1090,   144,   980,   981,   982,  1401,
     1568    1485,  1496,  1497,   476,   477,   902,   903,  1060,    49,    50,
     1569      51,    52,    53,   346,   157,    56,    57,    58,    59,    60,
     1570     348,    62,    63,   262,    65,    66,   273,   350,   351,    69,
     1571      70,    71,    72,   117,    74,   203,   353,   118,    77,   119,
     1572      79,    80,    81,   456,   457,   458,   459,   701,   940,   702,
     1573      82,    83,   463,   722,   882,   883,   356,   357,   725,   726,
     1574     727,   358,   359,   360,   361,   473,   340,   134,   135,   530,
     1575     324,   169,   655,   656,   657,   658,   659,    84,   120,    86,
     1576     496,   497,   966,   498,   276,   502,   325,    87,   136,   137,
     1577      88,  1338,  1125,  1126,  1127,  1128,    89,    90,   743,    91,
     1578     272,    92,    93,   186,  1054,   689,   411,   124,    94,   508,
     1579     509,   510,   187,   267,   189,   190,   191,   268,    97,    98,
     1580      99,   100,   101,   102,   103,   194,   195,   196,   197,   198,
     1581     852,   614,   615,   616,   617,   199,   619,   620,   621,   580,
     1582     581,   582,   583,   706,   104,   623,   624,   625,   626,   627,
     1583     628,   939,   708,   709,   710,   604,   364,   365,   366,   367,
     1584     326,   163,   106,   107,   108,   369,   720,   577
    15821585};
    15831586
    15841587/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    15851588   STATE-NUM.  */
    1586 #define YYPACT_NINF -1281
     1589#define YYPACT_NINF -1356
    15871590static const yytype_int16 yypact[] =
    15881591{
    1589     3705,  8889, -1281,   104, -1281, -1281, -1281, -1281, -1281, -1281,
    1590    -1281,    44, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1591    -1281, -1281, -1281, -1281, -1281,   155,   155,   155,  1205,   815,
    1592      110,  6006,   222, -1281, -1281, -1281, -1281, -1281,   130, -1281,
    1593    -1281, -1281,  1267,   189,  3199, -1281, -1281, -1281, -1281, -1281,
    1594    -1281,    31,   144, -1281,  1338, -1281, -1281, -1281, -1281,   153,
    1595     1410,   279,    82,  7674, -1281, -1281,  8086,  1234, -1281, -1281,
    1596    -1281,   981,   359,  7231,   925,   669,   981,  1012, -1281, -1281,
    1597      738,   575, -1281,   981,  1119, -1281,   242, -1281,   416,   419,
    1598    -1281, -1281, -1281, -1281,   277,   144,   155, -1281,   155, -1281,
    1599    -1281, -1281, -1281,  9536,  1338, -1281, -1281,  1338, -1281,  9574,
    1600      321, -1281, -1281, -1281,  2195,  9607, -1281,   565,   565,   565,
    1601    -1281, -1281, -1281,   155, -1281, -1281, -1281,   280,   366,   418,
    1602    -1281, -1281, -1281,   425, -1281, -1281, -1281, -1281, -1281,   443,
    1603      475, -1281, -1281,   120,  8972,  3739,   375,   387,   486,   496,
    1604      514,   527,   541,  8273,  7081,   550,   568, -1281,  9460, -1281,
    1605    -1281, -1281, -1281,   602, -1281,   121,  4456,  4456, -1281,   552,
    1606      298, -1281, -1281, -1281, -1281,   634,   302,   306,   327,   155,
    1607      590, -1281, -1281,  1410,  2454,   696, -1281,    90, -1281,   155,
    1608      155,   144, -1281, -1281,   124, -1281,   155,   155, -1281,  2638,
    1609      658,   667,   565,  6993, -1281, -1281,   678,  3199, -1281, -1281,
    1610      981, -1281, -1281, -1281,   144, -1281,  1338,    31, -1281,  8010,
    1611    -1281,   565,   565,   565,   144, -1281,  1205, -1281,  5198, -1281,
    1612    -1281,   673,   565, -1281,   565, -1281,   130,  8972,  9002,   686,
    1613    -1281,   815,   694,   565, -1281,  1205,   728,   736, -1281,  6006,
    1614      544, -1281, -1281, -1281,  9431, -1281, -1281,  3957, -1281,   696,
    1615       79,  9607,  6464,  2195,  2638, -1281,   157, -1281, -1281,  9574,
    1616     1338,   717,  7703, -1281, -1281,   699, -1281, 10744,   783,   831,
    1617     3925,   787,  6306, 10567, -1281,   827, -1281, -1281, -1281, -1281,
    1618    10625, 10625,   544,  8633,   829,  6306,  9085, -1281, -1281, -1281,
    1619    -1281, -1281, -1281,   862, -1281,  1121,  2197,  6306, -1281,   599,
    1620      388,   472,   354,   593,   830,   867,   873,   970,   245, -1281,
    1621    -1281,   874,   650, -1281,   325, -1281, -1281,  3739, -1281, -1281,
    1622      585,   901, -1281,   747,   901,   958,   130, -1281, -1281,   962,
    1623     9536, -1281,   977,  8746, -1281, -1281,   957,   935,  8355,  6993,
    1624      981, -1281,   981,   565,   565, -1281, -1281, -1281, -1281, -1281,
    1625    -1281,   565,  9645,  1338, -1281, -1281,  9683,  1067, -1281,  9123,
    1626    -1281, -1281, -1281, -1281, -1281, -1281, -1281,   990,  5315,  6306,
    1627    -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1628    -1281, -1281, -1281, -1281,  2195, -1281,   846,   996,   998,  1002,
    1629      864,  1005,  1008,  1026,  2454, -1281, -1281,  1031,    31,  1033,
    1630    -1281, -1281,  1061, -1281, -1281, -1281,  9431, -1281, -1281, -1281,
    1631    -1281, -1281,  2638, -1281,  8972,  8972, -1281,   565,  2195,  7112,
    1632     1338,  8426, -1281, -1281, -1281, -1281,  9431,    79, -1281, -1281,
    1633      981,   144, -1281, -1281,  9431, -1281,  6877, -1281, -1281,   565,
    1634      565,   376,  9716,  1035,  1868,  2111, -1281,   334,   338,   815,
    1635    -1281,  9002,  1059,  1047,   815,   565, -1281, -1281, -1281, -1281,
    1636     9940, -1281,   583,  6755, -1281,   144,  1065, -1281,  2195, 10825,
    1637    10471, -1281, -1281, -1281, -1281,   889,  2638, -1281,  8497,   696,
    1638     7558, -1281, -1281, -1281,  1286,   636,   874,   815,  7703,   868,
    1639     9574, -1281,  7703, -1281, -1281, -1281, -1281,   638, -1281,  1073,
    1640      831,   207,  8633, -1281,  9716, -1281, -1281,  8633, -1281,  8859,
    1641     8633, -1281, -1281, -1281,  1071, -1281,   681,  1077,   668,  1078,
    1642    -1281,  4381,  6724, -1281, -1281, -1281,   328, -1281, -1281, 10490,
    1643    -1281,   385, 10490, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1644    -1281, -1281, -1281,  6464,  6464, -1281,  6306,  6306,  6306,  6306,
    1645     6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,
    1646     6306,  6306,  6306,  6306,  4789,  6464, -1281,   650,  1062, -1281,
    1647    -1281,   155,   155, -1281, -1281,  8972, -1281, -1281,  1061,   544,
    1648    -1281,  1061, 10548, -1281, -1281, -1281,  5232,  6724,  1079,  9198,
    1649     1080, -1281,  9754, -1281, -1281,   602, -1281,  1082,  1185,  1084,
    1650     1899,   185,   874, -1281,   155,   155,   874,   233, -1281,   155,
    1651      155,  1061, -1281, -1281,   155,   155, -1281,   901,  9792,  1338,
    1652    10968,   234,   509,  9792, -1281,  5821, -1281,   874, -1281,  9645,
    1653    -1281,   293,  5525,  5525,  5525,  1338, -1281,  5054,  1072,   558,
    1654      990,  1016,  1083,  1086, -1281,  1074,  4456,   592, -1281,  1172,
    1655     1338,  5525,   544,  2195,   544,   696,   809,   901, -1281, -1281,
    1656      814,   901, -1281, -1281, -1281,   831, -1281,   901,   144,  9940,
    1657    -1281,   682,  1095,   691,  1099, -1281,  1098,   144, -1281, -1281,
    1658     9431,   144,  1103,   362,   407,  9825,  7200,  1999,  6306,  1917,
    1659    -1281, -1281,  1101,    94,  1101, -1281, -1281, -1281,   155,   155,
    1660    -1281, -1281,   815, -1281,   155, -1281, -1281,  3122,   815,  1107,
    1661     6306, -1281,  1059, 10968, -1281, -1281,  1102, -1281, -1281, -1281,
    1662      544, -1281, 10897,  6306, -1281,  5525,   675,  8355, -1281, -1281,
    1663      602,  1108,  1109,  1286,  3745, -1281, -1281,  7703, -1281, -1281,
    1664     1111, -1281, -1281,  1116, -1281,  1111,  1128, 10744,  6464,   146,
    1665     1113,    53,  1136,  1115,  1137,   829,  1131,  1139, -1281,  1142,
    1666     1143,  1696,  6843, -1281,  6464, -1281,   668,  1691, -1281,  6022,
    1667     6464,  1138, -1281, -1281,   990,   708, -1281,  6464, -1281, -1281,
    1668      727, -1281, -1281, -1281, -1281, -1281,   599,   599,   388,   388,
    1669      472,   472,   472,   472,   354,   354,   593,   830,   867,   873,
    1670      970,  6306,   755, -1281,  9940,  1148,  1149,  1152,  1062, -1281,
    1671    -1281, -1281, -1281, -1281,  9940,   713,  6306,  5525, -1281,  9645,
    1672    -1281,  7319,  9311,  9236,  7081, -1281, -1281, -1281,  1185,  9940,
    1673      951,  1160,  1163,  1165,  1166,  1175,  1176,  1182, -1281,  3532,
    1674     1899, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1675    -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1061, -1281,
    1676    -1281, -1281,   874, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1677    -1281,  1183, -1281,  1187,  1189, -1281, -1281,    31,  1138,  5054,
    1678    -1281, -1281, -1281,  5315,  1180, -1281, -1281, -1281, -1281, -1281,
    1679      815,  6243,  1272, -1281, -1281, -1281, -1281,  1188,    31, -1281,
    1680    -1281,  1061, -1281, -1281,  1061,    70,  1061, -1281, -1281, -1281,
    1681    -1281, -1281, -1281,  9498, -1281,   144, -1281,  9002, -1281, -1281,
    1682     1201,   818,  1208,  1212,  1213, -1281, -1281,  1917, -1281, -1281,
    1683    -1281, -1281, -1281, -1281, -1281,  1868, -1281,  1047, -1281, -1281,
    1684     1210,  1216,  1211, -1281, -1281,  1218,  1223, -1281,   675,  1777,
    1685    -1281,   562, -1281,  3745,   874, -1281,  1226,  7703,  9863,  8972,
    1686     1230, -1281, -1281,  1225,  1235,  1238, -1281,  6306,   252,    40,
    1687     1231, -1281,  1242,   544,  1242,  6724,  6464, -1281, -1281,  1242,
    1688    -1281,  1691,  5315, -1281, -1281, -1281, -1281,  1236,  6464,  1245,
    1689      544,  5054, -1281, 10490, -1281,   544, -1281, -1281,  6464, -1281,
    1690      850,   901, -1281, -1281, -1281, -1281, -1281, -1281, -1281,   990,
    1691     8746, -1281, -1281,  7438,  1249, -1281,   856,   901, -1281,   872,
    1692      904,   901, -1281,   565,  4646, -1281, -1281, -1281,  9940,  9940,
    1693    -1281,  8426,  8426, -1281,  1252,  1255,  1264,  1271, -1281,  1253,
    1694      594,   247,  1138, -1281,   544, -1281,  4456, -1281,  6464,   459,
    1695    -1281,  6603,  1274,  1279, 10343,  1281,  1283,   301,   308,   344,
    1696     6464,  1285,   144,  6464,  6464,  1284,   498,  1282,  1268, -1281,
    1697    -1281, -1281,  1289, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1698    -1281, -1281,   815,  1296,  6464, -1281,  9940,  9940,   155,  1301,
    1699    -1281,  9349,  4935,   934,   901, -1281, -1281, -1281, -1281, -1281,
    1700    -1281, -1281, -1281, -1281,  1305,  1777, -1281, -1281,  1290, -1281,
    1701     1111, -1281, -1281,  2195,  1309, -1281, -1281, -1281,   734,  1312,
    1702    -1281,    53,  1317,  6306,  1303,    53,    53,  1327,  1323, -1281,
    1703     1074,  6464,  1328,  1236,  1036,   113,  1326, -1281,  1323, -1281,
    1704     1331,  1326, -1281, -1281,  1337, -1281, -1281,  1061,  1340,  1343,
    1705     6962,  1342,  1344,  1350, -1281, -1281,  1353, -1281, -1281,  1061,
    1706    -1281, -1281, -1281, -1281,  1061,  6464,  6464,  6306,  1355, -1281,
    1707    -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1708    -1281,  6306,  6306,  1356,  1357,  1326, -1281, -1281,   815, -1281,
    1709    -1281, -1281,  7939,  9863,  6464,  6464,  1423,  6464, -1281, -1281,
    1710     1341, -1281,  1345,  6464,  1347,  1358,  6464,  1097,  1360,    74,
    1711     8776,  1197,   155, -1281, -1281,  6243,  1361,   467, -1281, -1281,
    1712    -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1061, 10467, -1281,
    1713     8497,  1362, -1281, -1281,  9863,   482,   494, -1281,  1372,  1383,
    1714      831,  1394, -1281,    66, -1281, -1281,  6464,  1395,  1393, -1281,
    1715    -1281,  1399,   430,   657,   544,  1400,  1401, -1281,  1406, -1281,
    1716     9940, -1281, -1281, -1281, -1281, -1281,  1412, -1281,  9940,  9940,
    1717     9940, -1281, -1281,  1413, -1281,  1415,  1425,  1427,   623,  8125,
    1718     8240, -1281, -1281,   278, -1281,  1426,  1429, -1281,  8568,   745,
    1719      759,  1430,   769,  6445, -1281, -1281,   502, -1281, -1281,   770,
    1720     1434,  1436,   144,  1487,   911, -1281, -1281,  6464, -1281, 10490,
    1721    10343, -1281, -1281, -1281,  1442,  1444,  9940, -1281, -1281, -1281,
    1722     1437, -1281, -1281, -1281, -1281, -1281, -1281,  9863,   831,   269,
    1723    -1281,  1424,   831,  1236,   373, -1281, -1281, -1281, -1281, -1281,
    1724    -1281, -1281, -1281,  1443, -1281, -1281, -1281, -1281, -1281, -1281,
    1725     1452,  1454, -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1458,
    1726    -1281,  1457, -1281, -1281, 10343,   148,  6464, 10343, -1281,  1462,
    1727     6464, -1281,   171,  1484,  1486, -1281, -1281,  1465,  1476,  1455,
    1728      905, -1281, -1281, -1281, -1281, -1281,  1338,  2195,  1471,   862,
    1729      918,  6306, -1281,   772,  1477,  6464,   544,   544,  1480,  1482,
    1730     1483,  1485, -1281, -1281,  8426,  1472, -1281,  1555,  6306,  1493,
    1731    -1281, -1281, 10254, -1281,   790, -1281,  1467, 10343,  1468, -1281,
    1732    -1281,  1511, -1281,  1513, -1281,  1507,  1529, -1281,  1496,  1519,
    1733     9863, -1281, -1281, -1281,   831,   544,  1520,  1499,  1515, -1281,
    1734     1326,  1326, -1281, -1281, -1281, -1281, -1281, 10343,   258, -1281,
    1735      922, -1281, -1281,  7790, -1281, -1281,  1501,  6464, -1281,  6464,
    1736     7790,   144,  9716,   144,  9716,  1528, -1281,  1530, -1281, -1281,
    1737    -1281,  1524,   862, -1281,   794, -1281, -1281,  6464,  1540,  1542,
    1738    -1281,  6306,  6306, -1281, -1281,  1051,   133, -1281, -1281,  1510,
    1739    -1281,  1051, -1281, -1281,  2099,   544, -1281, -1281,   144,  9716,
    1740      144,  9716,  1546,  1525,   544, -1281, -1281, -1281, -1281, -1281,
    1741    10254,  1541,  1051,  7866,  6464, 10165,  1543,  1051,  1551,  2099,
    1742     2338, -1281, -1281, -1281,  1552, -1281, -1281, -1281, -1281,  8972,
    1743    -1281, -1281, -1281, 10072, -1281, 10254, -1281, -1281,  1531,  9979,
    1744    -1281, -1281, 10165,   144,  2338,   144,  1557,  1559,   795, -1281,
    1745    10072, -1281, -1281, -1281,  9979, -1281, -1281, -1281,   144,   144,
    1746    -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281
     1592    5863,  4890, -1356,    65, -1356, -1356, -1356, -1356, -1356, -1356,
     1593   -1356,     9, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
     1594   -1356, -1356, -1356, -1356, -1356, -1356,   139,   139,   139,  1216,
     1595     781,    63,  4761,   238, -1356, -1356, -1356, -1356, -1356,   165,
     1596   -1356, -1356, -1356,   572,   207,  2350, -1356, -1356, -1356, -1356,
     1597   -1356, -1356,    59,   217, -1356,  1506, -1356, -1356, -1356, -1356,
     1598     220,  1734,   341,    66,  7480, -1356, -1356,  9240,  1240, -1356,
     1599   -1356, -1356,  1320,   351,  3183,  1125,   757,  1320,  1149, -1356,
     1600   -1356,  1042,   895, -1356,  1320,  1227, -1356,   243, -1356,   378,
     1601     403, -1356, -1356, -1356, -1356,   303,   217,   139, -1356,   139,
     1602   -1356, -1356, -1356, -1356,  9019,  1506, -1356, -1356,  1506, -1356,
     1603    9774,   314, -1356, -1356, -1356,  1811,  9812, -1356,   726,   726,
     1604     726, -1356, -1356, -1356,   139, -1356, -1356, -1356,   353,   381,
     1605     400, -1356, -1356, -1356,   417, -1356, -1356, -1356, -1356, -1356,
     1606     424,   436, -1356, -1356,    28,  8867,  2398,   371,   447,   459,
     1607     467,   482,   495,   557,  8670,  6999,   468,   584, -1356,  9350,
     1608   -1356, -1356, -1356, -1356,   594, -1356,   335,  4628,  4628, -1356,
     1609     575,   352, -1356, -1356, -1356, -1356,   602,   432,   434,   470,
     1610     139,   624, -1356, -1356,  1734,  1711,   656, -1356,    68, -1356,
     1611     139,   139,   217, -1356, -1356,    93, -1356,   139,   139, -1356,
     1612    2093,   670,   699,   726,  6910, -1356, -1356,   654,  2350, -1356,
     1613   -1356,  1320, -1356, -1356, -1356,   217, -1356,  1506,    59, -1356,
     1614    7819, -1356,   726,   726,   726,   217, -1356,  1216, -1356,  6673,
     1615   -1356, -1356,   659,   726, -1356,   726, -1356,   165,  8867,  8784,
     1616     714, -1356,   781,   740,   726, -1356,  1216,   737,   749, -1356,
     1617    4761,   791, -1356, -1356, -1356,  4061, -1356, -1356,  7390, -1356,
     1618     656,    62,  9812, 10718,  1811,  2093, -1356,   152, -1356, -1356,
     1619    9774,  1506,   770,  7511, -1356, -1356,   269, -1356,  3425,   779,
     1620     827,  3643,   814, 10872, 10930, -1356,   817, -1356, -1356, -1356,
     1621   -1356, 10949, 10949,   791,  8525,   818, 10872,  8981, -1356, -1356,
     1622   -1356, -1356, -1356, -1356,   855, -1356,   889,  2173, 10872, -1356,
     1623     498,   751,   809,   524,   880,   822,   831,   819,   869,     5,
     1624   -1356, -1356,   883,    64, -1356,   116, -1356, -1356,  2398, -1356,
     1625   -1356,   516,   900, -1356,   644,   900,   913,   165, -1356, -1356,
     1626     915,  9019, -1356,   916,  8639, -1356, -1356,  1004,  1539,  8240,
     1627    6910,  1320, -1356,  1320,   726,   726, -1356, -1356, -1356, -1356,
     1628   -1356, -1356,   726,  9885,  1506, -1356, -1356,  9923,  1500, -1356,
     1629    7969, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   929,  5043,
     1630   10872, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
     1631   -1356, -1356, -1356, -1356, -1356,  1811, -1356,   876,   936,   938,
     1632     944,   885,   947,   954,   957,  1711, -1356, -1356,   930,    59,
     1633     960, -1356, -1356,   970, -1356, -1356, -1356,  4061, -1356, -1356,
     1634   -1356, -1356, -1356,  2093, -1356,  8867,  8867, -1356,   726,  1811,
     1635    7030,  1506,  8313, -1356, -1356, -1356, -1356,  4061,    62, -1356,
     1636   -1356,  1320,   217, -1356, -1356,  4061, -1356,  6793, -1356, -1356,
     1637     726,   726,   472,  9953,   974,  1092,  5671, -1356,   521,   543,
     1638     781, -1356,  8784,   976,   959,   781,   726, -1356, -1356, -1356,
     1639   -1356, 10252, -1356,   560,  6550, -1356,   217,   981, -1356,  1811,
     1640   11070, 10776, -1356, -1356, -1356, -1356,   921,  2093, -1356,  8386,
     1641     656,  6061, -1356, -1356, -1356,   820,   612,   883,   781,  7511,
     1642    1338,  9774, -1356,  7511, -1356, -1356, -1356, -1356,   638, -1356,
     1643     994,   827,   255,  8525, -1356,  9953, -1356, -1356,  8525, -1356,
     1644    8753,  8525, -1356, -1356, -1356,   993, -1356,   665,   998,   161,
     1645    1002, -1356,  9490,  6639, -1356, -1356, -1356,   290, -1356, -1356,
     1646   10795, -1356,   366, 10795, -1356, -1356, -1356, -1356, -1356, -1356,
     1647   -1356, -1356, -1356, -1356, 10718, 10718, -1356, 10872, 10872, 10872,
     1648   10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872,
     1649   10872, 10872, 10872, 10872, 10872,  5362, 10718, -1356,    64,  1168,
     1650   -1356, -1356,   139,   139, -1356, -1356,  8867, -1356, -1356,   970,
     1651     791, -1356,   970, 10853, -1356, -1356, -1356,  3524,  6639,  1016,
     1652    9095,  1028, -1356, 10035, -1356, -1356,   594, -1356,  1029,   776,
     1653    1036,  1922,   164,   883, -1356,   139,   139,   883,   174, -1356,
     1654     139,   139,   970, -1356, -1356,   139,   139, -1356,   900, 10065,
     1655    1506, 11215,   233,   347, 10065, -1356, 10214, -1356,   883, -1356,
     1656    9885, -1356,   125,  7935,  7935,  7935,  1506, -1356,  6115,  1033,
     1657     414,   929,  1150,  1037,  1038, -1356,  1054,  4628,   555, -1356,
     1658    1124,  1506,  7935,   791,  1811,   791,   656,   704,   900, -1356,
     1659   -1356,   729,   900, -1356, -1356, -1356,   827, -1356,   900,   217,
     1660   10252, -1356,   666,  1061,   679,  1062, -1356,  1065,   217, -1356,
     1661   -1356,  4061,   217,  1059,   553,   573, 10103,  7119,  1590, 10872,
     1662    1954, -1356, -1356,  1066,    39,  1066, -1356, -1356, -1356,   139,
     1663     139, -1356, -1356,   781, -1356,   139, -1356, -1356,  9630,   781,
     1664    1069, 10872, -1356,   976, 11215, -1356, -1356,  1075, -1356, -1356,
     1665   -1356,   791, -1356, 11143, 10872, -1356,  7935,   588,  8240, -1356,
     1666   -1356,   594,  1072,  1077,   820,  2542, -1356, -1356,  7511, -1356,
     1667   -1356,  1074, -1356, -1356,  1088, -1356,  1074,  1090,  3425, 10718,
     1668     205,  1073,    47,  1094,  1082,  1100,   818,  1102,  1110, -1356,
     1669    1113,  1117,  9661,  6759, -1356, 10718, -1356,   161,  1861, -1356,
     1670    6396, 10718,  1120, -1356, -1356,   929,   689, -1356, 10718, -1356,
     1671   -1356,   865, -1356, -1356, -1356, -1356, -1356,   498,   498,   751,
     1672     751,   809,   809,   809,   809,   524,   524,   880,   822,   831,
     1673     819,   869, 10872,   875, -1356, 10252,  1119,  1140,  1142,  1168,
     1674   -1356, -1356, -1356, -1356, -1356, 10252,   691, 10872,  7935, -1356,
     1675    9885, -1356,  7239,  9209,  8905,  6999, -1356, -1356, -1356,   776,
     1676   10252,   927,  1145,  1152,  1158,  1159,  1162,  1166,  1172, -1356,
     1677    4275,  1922, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
     1678   -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   970,
     1679   -1356, -1356, -1356,   883, -1356, -1356, -1356, -1356, -1356, -1356,
     1680   -1356, -1356,  1176, -1356,  1183,  1185, -1356, -1356,    59,  1120,
     1681    6115, -1356, -1356, -1356,  5043,  1144, -1356, -1356, -1356, -1356,
     1682   -1356,   781,  6242,  1231, -1356, -1356, -1356, -1356,  1165,    59,
     1683   -1356, -1356,   970, -1356, -1356,   970,    29,   970, -1356, -1356,
     1684   -1356, -1356, -1356, -1356,  9380, -1356,   217, -1356,  8784, -1356,
     1685   -1356,  1190,   906,  1187,  1193,  1198, -1356, -1356,  1954, -1356,
     1686   -1356, -1356, -1356, -1356, -1356, -1356,  1092, -1356,   959, -1356,
     1687   -1356,  1195,  1202,  1201, -1356, -1356,  1206,  1210, -1356,   588,
     1688    2182, -1356,   533, -1356,  2542,   883, -1356,  1213,  7511, 10176,
     1689    8867,  1220, -1356, -1356,  1218,  1222,  1224, -1356, 10872,   230,
     1690      -1,  1219, -1356,  1225,   791,  1225,  6639, 10718, -1356, -1356,
     1691    1225, -1356,  1861,  5043, -1356, -1356, -1356, -1356,  1236, 10718,
     1692    1233,   791,  6115, -1356, 10795, -1356,   791, -1356, -1356, 10718,
     1693   -1356,   782,   900, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
     1694     929,  8639, -1356, -1356,  7359,  1237, -1356,   807,   900, -1356,
     1695     825,   836,   900, -1356,   726,  4460, -1356, -1356, -1356, 10252,
     1696   10252, -1356,  8313,  8313, -1356,  1241,  1248,  1246,  1259, -1356,
     1697    1262,   672,   244,  1120, -1356,   791, -1356,  4628, -1356, 10718,
     1698     578, -1356,  6519,  1267,  1271, 10660,  1272,  1277,   122,   304,
     1699     298, 10718,  1279,   217, 10718, 10718,  1280,   678,  1254,  1261,
     1700   -1356, -1356, -1356,  1284, -1356, -1356, -1356, -1356, -1356, -1356,
     1701   -1356, -1356, -1356,   781,  1290, 10718, -1356, 10252, 10252,   139,
     1702    1292, -1356,  9743,  9520,   847,   900, -1356, -1356, -1356, -1356,
     1703   -1356, -1356, -1356, -1356, -1356,  1293,  2182, -1356, -1356,  1275,
     1704   -1356,  1074, -1356, -1356,  1811,  1296, -1356, -1356, -1356,   706,
     1705    1291, -1356,    47,  1305, 10872,  1288,    47,    47,  1314,  1310,
     1706   -1356,  1054, 10718,  1315,  1236,   711,   214,  1317, -1356,  1310,
     1707   -1356,  1323,  1317, -1356, -1356,  1328, -1356, -1356,   970,  1329,
     1708    1330,  6879,  1331,  1339,  1341, -1356, -1356,  1340, -1356, -1356,
     1709     970, -1356, -1356, -1356, -1356,   970, 10718, 10718, 10872,  1344,
     1710   -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
     1711   -1356, -1356, 10872, 10872,  1347,  1349,  1317, -1356, -1356,   781,
     1712   -1356, -1356, -1356,  7746, 10176, 10718, 10718,  1394, 10718, -1356,
     1713   -1356,  1333, -1356,  1334, 10718,  1335,  1343, 10718,   992,  1345,
     1714      36,  8158,  1229,   139, -1356, -1356,  6242,  1348,   585, -1356,
     1715   -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   970, 10478,
     1716   -1356,  8386,  1360, -1356, -1356, 10176,   592,   598, -1356,  1356,
     1717    1355,   827,  1366, -1356,   179, -1356, -1356, 10718,  1368,  1363,
     1718   -1356, -1356,  1369,   484,   663,   791,  1376,  1378, -1356,  1380,
     1719   -1356, 10252, -1356, -1356, -1356, -1356, -1356,  1382, -1356, 10252,
     1720   10252, 10252, -1356, -1356,  1386, -1356,  1389,  1392,  1393,   682,
     1721    8008,  8124, -1356, -1356,   370, -1356,  1396,  1397, -1356,  8459,
     1722     715,   725,  1395,   760,  6377, -1356, -1356,   641, -1356, -1356,
     1723     796,  1402,  1403,   217,  1453,   961, -1356, -1356, 10718, -1356,
     1724   10795, 10660, -1356, -1356, -1356,  1406,  1407, 10252, -1356, -1356,
     1725   -1356,  1405, -1356, -1356, -1356, -1356, -1356, -1356, 10176,   827,
     1726     287, -1356,  1388,   827,  1236,   361, -1356, -1356, -1356, -1356,
     1727   -1356, -1356, -1356, -1356,  1408, -1356, -1356, -1356, -1356, -1356,
     1728   -1356,  1411,  1412, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
     1729    1418, -1356,  1417, -1356, -1356, 10660,   272, 10718, 10660, -1356,
     1730    1422, 10718, -1356,   306,  1438,  1441, -1356, -1356,  1430,  1431,
     1731    1413,   918, -1356, -1356, -1356, -1356, -1356,  1506,  1811,  1433,
     1732     855,   946, 10872, -1356,   801,  1439, 10718,   791,   791,  1442,
     1733    1448,  1449,  1450, -1356, -1356,  8313,  1452, -1356,  1535, 10872,
     1734    1462, -1356, -1356, 10571, -1356,   803, -1356,  1460, 10660,  1463,
     1735   -1356, -1356,  1489, -1356,  1493, -1356,  1511,  1512, -1356,  1480,
     1736    1508, 10176, -1356, -1356, -1356,   827,   791,  1514,  1484,  1509,
     1737   -1356,  1317,  1317, -1356, -1356, -1356, -1356, -1356, 10660,   301,
     1738   -1356,   958, -1356, -1356,  7597, -1356, -1356,  1502, 10718, -1356,
     1739   10718,  7597,   217,  9953,   217,  9953,  1515, -1356,  1522, -1356,
     1740   -1356, -1356,  1520,   855, -1356,   811, -1356, -1356, 10718,  1526,
     1741    1527, -1356, 10872, 10872, -1356, -1356,  1055,   154, -1356, -1356,
     1742    1510, -1356,  1055, -1356, -1356,  1716,   791, -1356, -1356,   217,
     1743    9953,   217,  9953,  1532,  1517,   791, -1356, -1356, -1356, -1356,
     1744   -1356, 10571,  1528,  1055,  7673, 10718, 10482,  1531,  1055,  1537,
     1745    1716,  2045, -1356, -1356, -1356,  1545, -1356, -1356, -1356, -1356,
     1746    8867, -1356, -1356, -1356, 10349, -1356, 10571, -1356, -1356,  1529,
     1747   10256, -1356, -1356, 10482,   217,  2045,   217,  1558,  1559,   815,
     1748   -1356, 10349, -1356, -1356, -1356, 10256, -1356, -1356, -1356,   217,
     1749     217, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356
    17471750};
    17481751
     
    17501753static const yytype_int16 yypgoto[] =
    17511754{
    1752    -1281,  4254,  1590, -1281,  1409, -1281,    52,     0,  -229, -1281,
    1753      596,  -527,  -497,  -931,   -99,  4508, -1281,   358,   609,   563,
    1754      518,   591,  1104,  1105,  1110,  1117,  1112, -1281,   613,  -339,
    1755     5346,  -893,  -690,  -919, -1281,   401,  -634,   444, -1281,   753,
    1756    -1281,   449, -1224, -1281, -1281,   191, -1281, -1265,  -724,   305,
    1757    -1281, -1281, -1281, -1281,   129, -1170, -1281, -1281, -1281, -1281,
    1758    -1281, -1281,   382, -1175,    71, -1281,  -381, -1281,   560,   356,
    1759    -1281,   229, -1281,  -338, -1281, -1281, -1281,   632,  -691, -1281,
    1760    -1281,    11, -1000,    10,  2865, -1281, -1281, -1281,  -125, -1281,
    1761      275,   363,  -194,  1416,  4157, -1281, -1281,    24,    25,   374,
    1762     -202,  1621, -1281,  2138, -1281, -1281,   112,  2165, -1281,  2832,
    1763      139, -1281, -1281,  -416,  -434,  1276,  1278,   786,  1028,   400,
    1764    -1281, -1281,  1269,   793,  -513, -1281,  -522,   -57,  -636, -1281,
    1765    -1281,  -959,  -994,   122,   819,  1153,   135, -1281,  1441,   296,
    1766     -299,  -212,  -109,   749,   844, -1281,  1087, -1281,  2859,  1478,
    1767     -462,  1000, -1281, -1281,   778, -1281,  -233, -1281,   -72, -1281,
    1768    -1281, -1281, -1232,   504, -1281, -1281, -1281,  1259, -1281,    68,
    1769    -1281, -1281,  -850,   -96, -1280,   -93,  1665, -1281,  2401, -1281,
    1770      993, -1281,  -164,   689,  -177,  -176,  -170,     2,   -39,   -33,
    1771      -28,  1052,    48,    75,    93,  -100,  -167,  -166,  -153,  -148,
    1772     -277,  -569,  -500,  -490,  -543,  -300,  -514, -1281, -1281,  -506,
    1773     1174,  1177,  1181,  2149,  5126,  -572,  -549,  -544,  -523,  -484,
    1774    -1281,  -427,  -665,  -663,  -660,  -602,  -320,  -271, -1281, -1281,
    1775      102,   140,   -84, -1281,  3728,   128,  -603,  -447
     1755   -1356,  4068,  1513, -1356,  1381, -1356,    41,     0,  -254, -1356,
     1756     593,  -523,  -482,  -960,  -143,  5028, -1356,  -101,   576,   581,
     1757     386,   577,  1101,  1105,  1106,  1099,  1107, -1356,  -593,  -585,
     1758    4966,  -933,  -708,  -942, -1356,  -273,  -719,   379, -1356,  1404,
     1759   -1356,   457, -1092, -1356, -1356,   195, -1356,  -844, -1059,   308,
     1760   -1356, -1356, -1356, -1356,   124, -1118, -1356, -1356, -1356, -1356,
     1761   -1356, -1356,   382, -1355,    53, -1356,  -496, -1356,   558,   349,
     1762   -1356,   226, -1356,  -307, -1356, -1356, -1356,   610,  -832, -1356,
     1763   -1356,    13,  -961,   169,  2725, -1356, -1356, -1356,   -79, -1356,
     1764     189,   845,  -184,  1482,  3902, -1356, -1356,   192,   133,   657,
     1765    -251,  1620, -1356,  1796, -1356, -1356,   156,  2416, -1356,  2575,
     1766     798, -1356, -1356,  -404,  -428,  1252,  1253,   761,  1003,   302,
     1767   -1356, -1356,  1245,   764,  -253, -1356,   -24,  -132,  -469, -1356,
     1768   -1356,  -983,  -881,     4,   862,  1128,   -43, -1356,   561,  -100,
     1769    -262,  -193,  -152,   721,   826, -1356,  1071, -1356,  2692,   907,
     1770    -449,   971, -1356, -1356,   765, -1356,  -227, -1356,   -60, -1356,
     1771   -1356, -1356, -1248,   485, -1356, -1356, -1356,  1242, -1356,    45,
     1772   -1356, -1356,  -846,  -109, -1333,  -138,  3289, -1356,  1880, -1356,
     1773     969, -1356,  -161,   268,  -181,  -177,  -175,     2,   -39,   -35,
     1774     -33,   769,    30,    31,    69,  -146,  -162,  -151,  -147,  -140,
     1775    -277,  -521,  -506,  -484,  -575,  -313,  -516, -1356, -1356,  -528,
     1776    1156,  1157,  1163,  2484,  4688,  -570,  -557,  -534,  -533,  -478,
     1777   -1356,  -432,  -693,  -685,  -681,  -580,  -201,  -236, -1356, -1356,
     1778     265,   180,   -86, -1356,  3600,   232,  -625,  -376
    17761779};
    17771780
     
    17791782   positive, shift that token.  If negative, reduce the rule which
    17801783   number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1781 #define YYTABLE_NINF -522
     1784#define YYTABLE_NINF -523
    17821785static const yytype_int16 yytable[] =
    17831786{
    1784       46,   111,    95,   147,   451,   438,   397,   398,   426,   148,
    1785       53,   113,   112,   399,   149,   790,   400,   401,   265,   258,
    1786      405,   711,   767,   604,    66,    67,   870,   706,   111,   111,
    1787      402,    46,   932,    95,   933,   403,   750,   934,   853,   841,
    1788      755,    53,    46,   918,    46,   717,   159,   617,  1185,   748,
    1789      511,  1091,   894,   110,    46,    66,    67,   381,   382,   845,
    1790       46,  1201,   191,    46,   846,   214,    46,   852,   224,   341,
    1791      612,    47,   819,   208,  1151,   504,   218,   217,   678,  1143,
    1792      111,   111,  1183,  1184,   406,   847,   397,   398,   210,   994,
    1793      150,   636,   408,   399,   844,   640,   400,   401,   687,   141,
    1794      405,   778,    47,   423,    46,  1398,   691,    46,   842,   200,
    1795      402,   932,    74,   933,    46,   403,   934,   151,   843,   950,
    1796      883,   883,   883,  1195,   974,   682,   684,   856,    30,   477,
    1797      885,   886,    30,   863,   289,   152,  1317,   166,  1461,   883,
    1798      104,   104,   407,    74,   147,    46,   161,   159,   904,  1134,
    1799      148,   535,   121,    46,   445,   149,  1135,  1465,    46,   201,
    1800      371,   167,    30,   977,   406,   857,   481,   483,   739,   860,
    1801      278,   104,   164,   466,   841,  1341,  -234,  -234,  1009,  1098,
    1802     1218,  1219,  1342,    46,    46,   120,   159,   482,  1014,   175,
    1803      877,  1418,  1419,    30,   880,    30,   676,  1262,   250,    46,
    1804      409,   754,   212,  1025,   409,  1318,   104,    46,  1481,   159,
    1805     1090,   161,  1461,   883,  1418,  1419,    46,   745,   140,    46,
    1806      769,   441,   957,    30,   147,  1263,   111,   535,   279,   439,
    1807      148,   150,   417,   142,   409,   149,   375,   164,   144,   259,
    1808      673,   111,   260,   842,   440,   111,  1185,  -234,  1259,    46,
    1809      111,    95,   376,   843,   212,  1465,   595,   169,   151,    53,
    1810     1465,  1420,   975,    46,    46,   487,   159,   409,   179,   841,
    1811       46,    30,   326,    66,    67,    60,   152,    46,  1037,   604,
    1812     1465,   759,   199,   711,  1429,   341,   823,  1465,   535,   845,
    1813      702,   477,   111,   854,   846,   609,  1185,   212,   665,  1507,
    1814      153,  1549,   471,  1201,   674,   883,    60,  1036,   604,   433,
    1815      617,   477,  1013,   604,  1016,   847,   760,   469,  1153,   477,
    1816       47,  1560,   673,   761,  1024,   830,   680,    46,  1564,   371,
    1817     1183,  1184,   685,   535,  1536,   434,  1538,  1343,   842,   573,
    1818      459,   861,  1191,   609,   523,   873,    46,    46,   843,   874,
    1819      535,   437,   925,  1491,   704,  1550,   856,   245,   212,   936,
    1820     1133,    74,  -290,    46,   114,   326,    74,    46,   879,  1192,
    1821     1200,   433,   108,   210,   574,  1091,   739,  1401,   652,   108,
    1822     1192,   949,  1565,    40,    41,   250,   674,   853,   -10,   104,
    1823       40,    41,  -112,  -112,    46,   530,   212,   434,   161,   108,
    1824      212,   482,  1180,  1181,    46,   489,   371,   157,  -112,   845,
    1825       40,    41,   506,   385,   846,   108,   248,   388,   870,  -517,
    1826     1185,   390,    46,   575,   164,  1040,    40,    41,    46,   386,
    1827       46,   738,  1209,   389,   584,   847,  1215,   391,   782,  1211,
    1828      585,   227,   392,   563,   564,   228,   915,   341,   232,   712,
    1829      234,   262,   739,   714,    46,  1456,   108,   243,   393,   111,
    1830     1230,  1231,  1213,  1201,   111,   713,   256,    40,    41,   715,
    1831     1201,   606,   157,   111,  -440,  1450,  1451,   712,    46,   565,
    1832      566,   175,  -112,   250,   328,   692,    46,   212,   371,  1405,
    1833       46,   585,    95,   928,    46,   788,   329,   111,   637,   111,
    1834       53,   108,   641,  -112,   210,  1120,  1149,   322,   559,   560,
    1835     1106,  1101,    40,    41,    66,    67,   338,  1117,   706,   652,
    1836      397,   398,   714,  1201,    60,   110,  -441,   399,    74,   478,
    1837      400,   401,   978,   274,  1090,   405,   111,  1258,   929,   652,
    1838     1347,   111,   652,  1037,   402,  1171,  1173,   895,    74,   403,
    1839      617,   276,   326,   326,   459,   504,    74,   459,  1018,   561,
    1840      562,    47,   830,   459,  1106,   477,   428,   906,   212,   284,
    1841      432,   766,   908,  1035,  1198,     8,     9,    10,    11,    12,
    1842       40,    41,  1198,   277,   227,   884,   884,   884,   783,   111,
    1843     1199,   766,   727,   789,   766,   330,    46,  1332,  1323,   406,
    1844      322,   454,    74,    30,   884,   331,   520,   954,    46,  1334,
    1845       46,   341,  1380,  1333,   530,   108,   530,   774,   212,   530,
    1846      875,   832,   530,   332,   876,  1335,    40,    41,   326,    46,
    1847      104,    33,   432,  1381,  1355,   494,   333,  -466,  1132,   738,
    1848      516,   471,  1357,  1358,  1359,    46,   108,   326,   137,   138,
    1849      334,   111,   830,   533,   534,   440,   528,    40,    41,   157,
    1850       46,   369,   111,    46,   111,   555,   383,   711,  -466,  1378,
    1851     -466,   896,  -291,   875,  -466,  1048,   370,  1116,   884,     8,
    1852        9,    10,    11,    12,   567,   568,  1035,   341,   241,    94,
    1853     1394,   478,   729,   586,   526,   409,  1095,    46,   730,    46,
    1854      604,   534,   897,   594,   651,  -105,   601,    30,   898,  -105,
    1855      374,   478,   111,   326,   905,   738,   907,   556,   111,   478,
    1856       94,   395,   557,   558,   227,   634,   232,   606,   108,   638,
    1857      111,   146,   338,    94,  1366,    33,  1128,   534,  1367,    40,
    1858       41,   212,   387,    46,    46,   746,  1428,   756,   210,   187,
    1859     1249,   747,    94,   757,  1253,    94,   871,    46,   577,   407,
    1860      409,   606,   210,   736,   872,    60,   424,  1349,   578,   212,
    1861      884,  1520,  1497,   673,   212,   425,   776,  1525,   409,  1497,
    1862      887,   702,   953,   958,  1055,   609,   777,   322,   322,   430,
    1863      773,   919,  1390,   959,  1251,   903,   774,   774,  1545,   461,
    1864      921,   727,    74,  1552,   448,   171,   774,   464,   762,   108,
    1865      763,   137,   236,   764,   227,   454,   770,  1002,   454,   459,
    1866       40,    41,  1015,  1003,   454,   681,   683,   499,   730,   500,
    1867      490,   830,  1546,  1499,    94,  1500,   114,   674,    46,  1175,
    1868      739,  1006,  1003,  1247,    74,   704,   237,    94,   251,   585,
    1869       46,   238,  1291,  1292,  1374,   589,   210,   409,   832,   467,
    1870      774,   494,   212,   322,   932,   494,   933,   468,  1375,   934,
    1871      774,  1008,   396,   187,   774,   528,   212,   528,  1377,  1382,
    1872      528,  1447,   322,   528,   774,   774,   108,  1444,   137,   138,
    1873     1547,   510,   506,   652,   338,   514,    94,    40,    41,  1466,
    1874      111,   652,   978,  1513,  1570,   774,   978,   978,    94,  1514,
    1875      585,    53,   289,   526,   793,   794,   795,   909,   526,   409,
    1876      739,   526,   912,    46,   409,    66,    67,   328,   409,     2,
    1877      204,     4,     5,     6,     7,   519,   727,    46,    94,   108,
    1878      531,   137,   138,   535,   415,    46,   727,  1196,   322,   569,
    1879       40,    41,   485,  1077,   250,   328,   409,   534,  1155,   828,
    1880      409,   727,   601,    46,  1167,   478,   409,   435,  1387,  1388,
    1881      212,   736,   417,   669,   409,   812,   751,   443,  1122,  1121,
    1882     1170,   752,   609,   111,  1182,     2,   204,     4,     5,     6,
    1883        7,   869,   652,    34,   570,    35,   601,   487,   328,   409,
    1884      111,   571,   878,   652,   575,   111,    36,   478,   181,   182,
    1885       39,   337,  1172,    74,   609,  -292,    94,    40,    41,  1438,
    1886     1003,  1339,     8,     9,    10,    11,    12,  1242,    36,   459,
    1887      172,   173,    39,  1444,  1445,  1137,   611,  1492,  1493,    40,
    1888       41,   104,  1235,   608,   409,   609,   527,   736,   440,    34,
    1889       30,    35,  1145,   610,   111,   766,    -3,  1145,   338,   854,
    1890      328,   609,  1446,   572,   652,   370,  -437,   111,   111,   111,
    1891      593,    53,     8,     9,    10,    11,    12,  1532,    33,  1458,
    1892      454,   800,   801,   802,   803,  1203,    67,   108,   596,   137,
    1893      138,   534,   111,   187,  1418,  1419,   160,   326,    40,    41,
    1894       30,   646,   940,   738,   940,   666,  1145,   667,   104,  1399,
    1895      494,   668,   192,  1399,   670,   215,  1077,   671,   225,  1210,
    1896     1212,  1214,  -293,    46,   798,   799,   890,  1106,    33,     8,
    1897        9,    10,    11,    12,   338,   672,   341,   993,    36,   675,
    1898      172,   173,    39,   703,   677,  -112,   695,  -112,   871,    40,
    1899       41,  -112,  1518,  1458,  1310,  1311,  1312,    30,   804,   805,
    1900      727,   727,   212,  1348,  1350,  1351,  -112,  -112,   796,   797,
    1901      577,   255,   409,    74,   718,   374,    60,   720,  -238,    94,
    1902      578,   758,   771,   611,   534,    33,   775,   779,   -12,   893,
    1903      833,   835,  1017,   837,   689,   848,   828,   160,   111,   -13,
    1904      900,   104,   892,   459,   920,   536,   537,   538,   922,   923,
    1905      372,  -414,   208,   218,   217,  1482,   927,   698,   727,   727,
    1906       46,   948,  -521,   962,   969,   652,   747,   210,   731,   539,
    1907      983,   540,  1369,   541,   542,    53,   160,   971,     2,   204,
    1908        4,     5,     6,     7,   976,   982,   984,   986,   987,    66,
    1909       67,   988,   989,   998,  1122,  1121,    36,  1010,  1011,   160,
    1910       39,  1012,   111,   111,   111,   527,   226,    40,    41,  1026,
    1911      527,   442,  1027,   527,  1028,  1029,   127,  1077,   128,   129,
    1912      130,   536,   537,   538,  1030,  1031,   828,    40,    41,   728,
    1913      454,  1032,  1043,   838,  1057,   609,  -402,   840,  -401,   611,
    1914     1092,  1442,    34,   610,    35,   539,  1558,   540,   439,   541,
    1915     1319,   935,  1102,    53,  1145,  1145,  1145,  1103,  1094,   652,
    1916      652,  1104,  1105,   440,  1109,  1110,  1111,  1203,    67,  1112,
    1917      494,  1123,   322,   935,  1113,  1119,   478,    74,    36,  1129,
    1918      774,   212,    39,   104,  1130,  1079,  1136,  1122,  1121,    40,
    1919       41,  1141,   397,   398,  1131,   992,  1144,    36,  1165,   399,
    1920     1328,    39,   400,   401,  1190,   104,   405,  1186,    40,    41,
    1921     1187,   766,  1077,  1188,   652,    42,   402,   652,   534,   372,
    1922     1189,   403,  1204,   869,   104,   145,   931,  1205,   703,  1207,
    1923      673,  1208,   727,  1216,   743,  1220,    46,    46,  1222,  1223,
    1924      727,   727,   727,    -3,   744,  1228,   111,   111,  1531,    36,
    1925     1233,   172,   173,    39,  1239,    74,    63,   115,   499,   516,
    1926       40,    41,   652,  1243,  1007,  1248,  1077,   652,  1250,  1077,
    1927      406,   917,   840,   611,  1252,   736,  1255,   212,  1256,  1260,
    1928      924,  1264,  1267,   104,   926,   111,  1269,    63,   727,  1271,
    1929     1122,  1121,  1272,  1273,   674,  1274,   372,   652,  1145,  1145,
    1930      158,  1275,  1277,   174,   454,   828,  1284,  1293,  1294,  1301,
    1931      139,  1330,  1304,    53,  1077,  1322,  1305,   104,  1307,  1077,
    1932       53,    36,   219,   181,   182,    39,  1336,  1203,    67,  1308,
    1933      147,  1316,    40,    41,  1203,    67,   148,  1483,   728,  1338,
    1934       60,   149,  1050,  1340,    46,   111,  1344,  1345,  1206,  1077,
    1935     1346,  1352,  1353,   174,   111,   736,   174,  1354,   183,   257,
    1936      652,   239,   242,  1356,  1362,   652,  1363,   840,   184,    46,
    1937       46,  1441,   159,    53,  1364,   534,  1365,  1372,  1376,   611,
    1938     1373,   213,  1383,   652,  1384,   652,  1312,  1203,    67,   652,
    1939     1395,  1392,   652,  1393,    46,  1402,   371,  1533,   240,  1405,
    1940      652,   327,   174,  1412,   652,  1413,  1541,  -403,  1416,   257,
    1941      348,  1427,  1077,  1435,  1505,    74,  1505,  1077,   478,  1431,
    1942      104,  1433,    74,   338,  1436,  1443,  1437,  1367,  1448,  1452,
    1943      935,  1453,  1454,   213,  1455,  1077,  1457,  1077,  1467,  1469,
    1944      404,  1077,  1475,   104,  1077,  1299,  1300,  1123,  1302,  1462,
    1945      104,  1505,  1077,  1505,  1306,   422,  1077,  1309,   427,   429,
    1946     1471,  1152,  1473,   158,  1477,   174,   703,  1479,  1480,  1485,
    1947     1486,  1487,  1498,   728,   703,    74,   213,  1508,  1512,  1510,
    1948      165,  1524,   170,   728,   446,   176,   177,   178,   449,   180,
    1949      450,  1516,   611,  1517,  1539,  1544,  1540,  1551,   728,   465,
    1950     1553,  1555,  1561,   104,   231,    63,  1568,   326,  1569,  1079,
    1951      479,  1050,  1221,   806,  1321,   807,   246,   247,  1100,   174,
    1952      486,   808,   463,  1519,   211,   810,   174,  1430,   429,   809,
    1953      122,   125,   126,  1571,   230,  1386,  1254,   213,  1403,  1501,
    1954     1123,     8,     9,    10,    11,    12,     8,     9,    10,    11,
     1787      47,   112,    96,   398,   148,   933,   266,   399,   149,   400,
     1788     150,   452,   176,   934,   113,   382,   383,   935,   259,   427,
     1789     791,   527,   401,   707,   406,   439,   512,   505,   712,   112,
     1790     112,   895,    47,   402,    96,   618,   853,   403,   768,   407,
     1791     975,   854,   111,    47,   404,    47,  1152,   160,   409,   871,
     1792     751,   820,   846,    48,   756,    47,  1092,  1144,   718,  1184,
     1793    1185,    47,   260,   192,    47,   261,   215,    47,   342,   225,
     1794    1091,   613,   995,   151,   152,   847,   848,   142,    31,   279,
     1795     218,   112,   112,   398,   933,    48,  1462,   399,   842,   400,
     1796    1399,   424,   934,   845,   201,  1196,   935,   779,   951,  1318,
     1797     574,  1202,   401,   843,   406,    47,   936,    31,    47,  1135,
     1798     679,   536,   153,   402,   937,    47,  1136,   403,   122,   407,
     1799    1508,   749,   482,   484,   404,   844,   408,   637,   936,   290,
     1800     688,   641,    31,    68,   857,   575,   950,   280,   692,  1099,
     1801     864,  1219,  1220,   605,   202,   148,    47,   121,   160,   149,
     1802     410,   150,   682,   684,    47,  1537,    75,  1539,   978,    47,
     1803    1462,   372,  1186,   683,   685,    68,   167,   446,  1319,    54,
     1804     114,   483,   141,   578,   438,   410,   478,   251,    31,   410,
     1805     105,   105,   517,   579,    47,    47,   467,   160,    75,    61,
     1806     168,    31,    67,  1482,   109,   534,   535,   211,  -234,  -234,
     1807      47,    54,   418,    31,   410,    41,    42,   556,    47,  1260,
     1808     160,   919,   105,    31,   151,   152,   677,    47,   746,  1008,
     1809      47,    61,   442,   842,    67,   148,   585,   112,   490,   149,
     1810    1201,   150,   586,   209,   483,   507,   219,   858,   843,   755,
     1811     527,   861,   112,   535,   674,   527,   112,   105,   527,   143,
     1812      47,   112,    96,   153,  1210,   596,   576,   760,   770,   675,
     1813     844,   488,   878,   410,    47,    47,   881,   160,    95,  -234,
     1814     777,    47,   410,   855,   145,   610,  1037,   165,    47,   535,
     1815     778,  1038,   846,   862,   342,   610,   666,   536,   740,  1342,
     1816     712,  1014,   472,   112,   703,   470,  1343,  1051,   618,  1263,
     1817      95,  1154,   813,    48,   176,   847,   848,  1184,  1185,   705,
     1818     162,   147,   536,    95,   681,  1344,  1419,  1420,   842,   154,
     1819     686,   638,   976,  1025,   824,   642,   674,  1264,    47,   188,
     1820     372,   170,    95,   843,   524,    95,   180,   536,   478,  1134,
     1821    1192,   675,   165,  1202,   200,   874,  1010,    47,    47,   875,
     1822    1419,  1420,  1216,   441,  -290,   844,  1015,   739,   478,   246,
     1823    1186,   831,   109,   857,    47,   761,   478,  1193,    47,   536,
     1824     109,  1026,   762,    41,    42,   162,   109,   327,   249,   653,
     1825    1092,    41,    42,    68,   926,   936,  1421,    41,    42,   440,
     1826     854,   886,   887,  1133,  1091,    47,  1402,  1492,   500,   605,
     1827     501,   783,   846,  -518,   880,    47,    75,   372,  1551,   905,
     1828    1186,    75,   251,   763,    95,   764,  1153,  1214,   765,    54,
     1829    1430,   771,   916,    47,  1193,   847,   848,    95,   605,    47,
     1830     105,    47,  1457,   605,  1550,  1566,  1212,  1521,   109,    61,
     1831     435,   871,    67,  1526,   479,   263,   342,  1451,  1452,    41,
     1832      42,   376,   397,   188,  1561,    47,   794,   795,   796,   876,
     1833     112,  1565,   -10,   877,  1546,   112,  1051,   377,   386,  1553,
     1834     327,  -112,  1381,   434,   112,   728,    95,   789,  1406,    47,
     1835     251,   329,   211,   958,   387,  -112,  -112,    47,    95,   372,
     1836    -441,    47,  -112,    96,  -467,    47,   740,  1041,   112,   535,
     1837     112,  -112,   435,  1202,   460,   896,  1107,   505,   979,  -442,
     1838    1202,   885,   885,   885,   707,   111,  1259,   398,    95,  1121,
     1839     653,   399,  1150,   400,  1102,  -467,   275,  -467,   909,   165,
     1840     885,  -467,   486,   277,  1186,   434,   401,   112,   618,   406,
     1841     653,   936,   112,   653,    48,   278,  1038,   402,   389,  1252,
     1842     391,   403,  1172,  1174,   407,   907,   109,   330,   404,   531,
     1843    1107,   767,   162,  1202,   390,   739,   392,    41,    42,   331,
     1844    1181,  1182,   740,    75,  1036,  1017,   607,   332,   784,  1466,
     1845     370,   767,   693,   790,   767,  1379,   393,   873,   586,  1118,
     1846     112,   140,   333,    75,  1019,  1348,    95,    47,   831,   936,
     1847     936,    75,   394,   888,   885,   334,   479,  1292,  1293,    47,
     1848     342,    47,   478,   211,   564,   565,   612,   557,   904,   884,
     1849     884,   884,   558,   559,    68,   587,   479,   410,  1231,  1232,
     1850      47,   472,  1498,   535,   479,   897,  1250,   713,   884,  1498,
     1851    1254,   739,   240,   243,    37,   876,    47,    75,    40,  1117,
     1852     566,   567,   112,   714,   955,    41,    42,   327,   327,   715,
     1853      54,    47,  1429,   112,    47,   112,   898,   335,   652,   713,
     1854     730,   105,   899,   188,   712,   716,   731,  1466,   737,   994,
     1855      61,    43,  1466,    67,   728,   929,   342,  1036,   831,   715,
     1856     384,   146,  1547,   371,  1199,  1049,   885,   959,    47,   610,
     1857      47,  1199,  1466,   375,   906,   930,   908,   960,  1333,  1466,
     1858    1200,   388,   884,   112,  1335,   507,  1096,  1324,   460,   112,
     1859     408,   460,   747,   704,  1334,   228,   535,   460,   748,   229,
     1860    1336,   112,   233,   327,   235,   109,     8,     9,    10,    11,
     1861      12,   244,  1056,  1129,    47,    47,    41,    42,   757,  1500,
     1862     285,  1501,   327,   590,   758,   410,   396,   775,    47,    95,
     1863    -291,    41,    42,   612,   441,    31,   431,     8,     9,    10,
     1864      11,    12,   954,  1382,  1350,   774,   920,   674,   531,   425,
     1865     531,   775,   775,   531,  -105,   703,   531,   521,  -105,   922,
     1866     833,   449,   675,    34,  1367,   775,    31,  1391,  1368,  1003,
     1867     705,  1016,  1356,   464,   884,  1004,  1548,   731,   426,   936,
     1868    1358,  1359,  1360,   910,   161,   410,  1248,  1447,   327,   728,
     1869     605,  -112,   586,  -112,    34,  1375,   936,  -112,   462,   728,
     1870     193,   775,   607,   216,  1459,  1376,   226,   933,   913,    47,
     1871     410,   775,  -112,  -112,   728,   934,   115,    75,    37,   935,
     1872    1176,    47,    40,   109,   465,   138,   139,   211,  1395,    41,
     1873      42,   872,   213,   109,    41,    42,   607,   831,   228,   468,
     1874    1378,   211,   560,   561,    41,    42,   775,   841,   979,   612,
     1875     479,   469,   979,   979,   491,   839,   737,   610,   511,    75,
     1876     158,  1156,    37,   410,   653,   611,    40,   562,   563,   936,
     1877     936,   112,   653,    41,    42,  1197,  1383,  1519,  1459,   290,
     1878    1183,  1448,   775,  1467,   213,   161,  1168,  1445,   410,   775,
     1879     535,  1514,   479,   515,    47,  1571,   520,  1515,   373,   744,
     1880     532,   586,  1300,  1301,  1171,  1303,   610,   536,    47,   745,
     1881     654,  1307,   570,  1078,  1310,  1173,    47,   610,   572,   257,
     1882     801,   802,   803,   804,   161,   158,  1236,   213,   410,   571,
     1883     740,   517,   737,   573,    47,   211,   932,   109,   704,   138,
     1884     139,   214,   568,   569,   537,   538,   539,   161,    41,    42,
     1885    1007,  1004,  1122,   460,   112,   251,   329,   410,   241,   443,
     1886     323,   775,  1009,   653,   418,   670,   410,  1340,   540,   339,
     1887     541,   112,   542,   543,   653,   941,   112,   941,   228,   242,
     1888     233,   338,   841,   612,   576,  1243,   329,   410,   213,  1388,
     1889    1389,   717,  -438,   214,   594,  1138,   464,   833,   597,   739,
     1890     488,   329,   410,  1439,  1004,    68,   855,   329,   610,   676,
     1891     740,   647,  1146,   728,   728,   767,   667,  1146,   668,   429,
     1892    1311,  1312,  1313,   433,   669,   112,   213,   671,    75,   750,
     1893     213,   754,  1445,  1446,   672,   653,   214,   673,   112,   112,
     1894     112,    54,   678,  1533,  1493,  1494,    37,   535,   173,   174,
     1895      40,   256,   105,   323,   455,  1400,   696,    41,    42,  1400,
     1896     721,    61,   719,   112,    67,  -238,  1146,   373,   228,  1419,
     1897    1420,   728,   728,   759,  1425,   772,  1078,   841,   776,  1211,
     1898    1213,  1215,   780,   371,   109,   433,   138,   237,   495,   612,
     1899    1349,  1351,  1352,  1107,    47,    41,    42,   214,   834,     2,
     1900     205,     4,     5,     6,     7,   342,   797,   798,  1123,   529,
     1901     836,   838,   158,   799,   800,   805,   806,   213,   849,   105,
     1902     -12,   238,  -292,   901,   -13,   893,   239,   441,  1370,     8,
     1903       9,    10,    11,    12,    37,   214,   182,   183,    40,   214,
     1904     894,   921,   923,   928,   373,    41,    42,   924,     8,     9,
     1905      10,    11,    12,   699,   949,  -415,   595,  -522,    31,   602,
     1906     748,  1483,   963,   460,    35,    68,    36,   970,   984,   112,
     1907     972,   698,   327,   410,   983,   977,   704,    31,   635,   699,
     1908     985,   700,   639,   892,   704,   339,    34,   218,    75,   987,
     1909     988,    47,   109,   989,   138,   139,   653,   990,   213,  1011,
     1910    -293,    54,   612,    41,    42,    34,   999,     8,     9,    10,
     1911      11,    12,   105,  1329,     2,   205,     4,     5,     6,     7,
     1912    1012,   479,  1013,   872,  1204,  1027,   214,    -3,  1122,  1058,
     1913    1093,   891,  1028,   112,   112,   112,    31,  1078,  1029,  1030,
     1914     323,   323,  1031,   227,   945,   728,  1032,   578,   213,   410,
     1915     948,  1080,  1033,   728,   728,   728,  1044,   579,   128,  1443,
     1916     129,   130,   131,  -403,    34,  -402,  1095,  1104,   455,    41,
     1917      42,   455,  1103,  1105,  1146,  1146,  1146,   455,  1106,    35,
     1918    1110,    36,  1111,  1559,   537,   538,   539,  1112,  1113,   115,
     1919     653,   653,  1114,  1120,     2,   205,     4,     5,     6,     7,
     1920    1130,   728,  1131,   729,   775,  1137,   211,   214,   540,   993,
     1921     541,  1132,   542,  1320,   495,  1145,   323,  1166,   495,   398,
     1922     737,  1122,  1142,   399,  1442,   400,  1189,  1187,   529,    68,
     1923     529,   767,  1078,   529,  1188,   323,   529,   460,   401,  1190,
     1924     406,  1223,   209,   219,  1191,   653,  1205,   339,   653,   402,
     1925    1206,  1208,    75,   403,   105,   407,  1209,   214,  1217,    35,
     1926     404,    36,  1221,  1224,   674,    54,  1532,    47,    47,    -3,
     1927    1229,   213,  1234,  1240,   500,  1249,   105,   112,   112,   675,
     1928     109,  1244,   138,   139,  1123,    61,  1078,  1251,    67,  1078,
     1929    1253,    41,    42,   653,  1256,   105,  1257,  1261,   653,   213,
     1930     737,   323,   441,  1265,   213,  1268,   175,    68,  1270,  1272,
     1931    1273,  1302,   829,  1274,  1207,   602,   112,   752,  1146,  1146,
     1932    1278,  1275,   753,  1276,  1122,   654,  1285,   172,   653,  1294,
     1933      75,  1295,  1061,  1323,  1078,  1305,  1306,  1308,   440,  1078,
     1934    1331,  1337,  1339,    54,   870,  1309,  1341,  1317,  1346,   602,
     1935    1345,  1347,    64,   116,   105,   879,   175,  1484,  1353,   175,
     1936    1354,   148,  1355,   479,  1357,   149,  1204,   150,  1363,  1078,
     1937     252,  1364,  1365,  1366,  1377,    47,   112,  1123,  1373,  1374,
     1938     214,  1384,  1385,  1313,    64,   112,  1393,  1394,   105,  1396,
     1939    1403,   653,   213,  1413,  1414,  1406,   653,   159,  -404,  1417,
     1940      47,    47,  1428,   160,  1432,   175,   213,  1434,   214,  1436,
     1941    1437,   339,   729,   214,   653,  1438,   653,  1534,  1444,   220,
     1942     653,  1449,  1453,   653,   654,    47,  1542,   372,  1454,  1455,
     1943    1456,   653,  1078,   455,   166,   653,   171,  1078,  1368,   177,
     1944     178,   179,    37,   181,   173,   174,    40,  1458,    37,  1463,
     1945     173,   174,    40,    41,    42,  1078,   258,  1078,   232,    41,
     1946      42,  1078,  1468,   495,  1078,  1470,   416,    68,   175,  1472,
     1947     247,   248,  1078,  1474,    68,  1080,  1078,  1476,  1478,   375,
     1948    1123,    37,  1480,   182,   183,    40,  1487,   339,  1481,   436,
     1949      75,   105,    41,    42,  1486,  1509,  1488,    75,   328,   444,
     1950     213,   214,  1511,    54,  1499,  1513,   258,   349,  1517,  1518,
     1951      54,  1540,  1525,  1545,   105,   214,  1552,  1554,   609,  1541,
     1952     610,   105,   175,   479,  1061,  1556,  1204,    68,   611,   175,
     1953     479,  1562,    37,  1204,   182,   183,    40,   405,  1569,  1570,
     1954    1222,   807,   810,    41,    42,  1018,   808,   729,   809,   829,
     1955      75,   811,   423,  1322,   212,   428,   430,   729,  1520,  1572,
     1956     159,  1431,  1404,    54,   231,  1255,  1387,  1502,   528,   698,
     1957    1392,   410,   729,  1228,   105,   694,   695,  1108,   942,   700,
     1958     723,   447,  1109,   479,  1141,   450,  1204,   451,   826,   965,
     1959    1057,     8,     9,    10,    11,    12,   466,   973,   175,   900,
     1960    1332,  1119,    64,   742,   816,   817,   212,   480,  1506,   214,
     1961    1506,   818,     0,     0,     0,   175,     0,   487,     0,   175,
     1962      31,     0,     0,     0,  1418,   430,     0,  1426,     0,     0,
     1963    1298,     0,     0,     0,     0,     0,     0,     0,     0,   829,
     1964       0,     0,   327,   455,     0,  1506,     0,  1506,    34,   212,
     1965       0,     0,     0,    37,     0,   182,   183,    40,    37,     0,
     1966     182,   183,    40,     0,    41,    42,    73,     0,   486,    41,
     1967      42,     0,  1465,     0,     0,     0,    37,  1469,   182,   183,
     1968      40,     0,   175,   495,  1124,   323,     0,    41,    42,     0,
     1969     184,     0,   213,   258,     0,  1530,   603,   410,    73,     0,
     1970     185,     0,   631,     0,     0,  1531,     0,  1491,     0,     0,
     1971     212,     0,     0,   184,     0,   636,   690,     0,     0,   636,
     1972       0,     0,   258,   185,     0,     0,     0,   601,   608,     0,
     1973       0,     0,     0,   221,     0,     0,   870,     0,     0,   632,
     1974     633,     8,     9,    10,    11,    12,     0,     0,   212,     0,
     1975     732,     0,   212,    37,     0,   182,   183,    40,     0,     0,
     1976       0,     0,     0,     0,    41,    42,     0,     0,   506,   480,
     1977      31,   729,   729,     0,     0,     0,   125,   125,   125,     0,
     1978       0,     0,     0,     0,   349,     0,     0,   528,     0,   480,
     1979     264,     0,   528,  1560,     0,   528,     0,   480,    34,  1560,
     1980     265,   214,     8,     9,    10,    11,    12,     0,     0,     0,
     1981    1560,     0,     0,     0,  1560,     0,     0,   455,   829,     0,
     1982       0,   352,     0,   724,     0,     0,   430,     0,     0,   729,
     1983     729,    31,     0,     0,     8,     9,    10,    11,    12,   212,
     1984     777,   738,   410,    64,     0,     0,     0,   125,   175,   125,
     1985     778,   430,     0,     0,     0,   430,     0,     0,     0,    34,
     1986       0,     0,     0,    31,    37,     0,   182,   183,    40,     0,
     1987       0,   213,     0,     0,   274,    41,    42,     0,     0,     0,
     1988       0,   175,     0,     0,   258,   349,     0,     0,     0,     0,
     1989       0,    34,     0,     0,     0,   448,    37,   175,   182,   183,
     1990      40,   609,     0,   610,     0,     0,     0,    41,    42,     0,
     1991       0,   611,   175,     0,     0,     0,    73,     0,     0,     0,
     1992     212,    73,     0,     0,     0,     8,     9,    10,    11,    12,
     1993     125,   819,     0,   698,     0,   410,   339,   212,   125,     0,
     1994     125,   125,     0,   700,     0,   125,     0,   125,   125,   636,
     1995     832,     0,   603,   918,    31,     0,     0,     0,     0,     0,
     1996    1124,     0,   925,   851,     0,     0,   927,   213,     0,     0,
     1997     212,  1330,     0,     8,     9,    10,    11,    12,     0,     0,
     1998     214,   603,    34,     0,     0,     0,   603,    37,     0,   182,
     1999     183,    40,   636,     0,     0,   349,   349,   349,    41,    42,
     2000       0,     0,    31,   729,     0,     0,     0,     0,     0,   175,
     2001       0,   729,   729,   729,   349,     0,   221,   125,     0,     0,
     2002       0,     0,     0,     0,  1530,     0,   410,     0,     0,     0,
     2003      34,     0,   724,     0,  1531,    37,     0,   182,   183,    40,
     2004       0,     0,     0,   480,     0,     0,    41,    42,   258,   738,
     2005       0,     0,   938,  1124,     0,     0,     0,     0,     0,   729,
     2006       0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
     2007       0,     0,   264,     0,     0,     0,   214,     0,     0,     0,
     2008       0,     0,   265,    73,     0,   480,     0,     0,   349,     0,
     2009       0,    31,     0,   212,     0,     0,     0,   964,   352,     0,
     2010     430,     0,     0,    73,     0,     0,     0,     0,   952,     0,
     2011     953,    73,     0,     0,     0,     0,     0,   956,   957,    34,
     2012       0,   212,   962,     0,   258,   738,   212,     0,     0,     0,
     2013     992,     0,     0,     0,   967,     0,     0,   352,     0,   971,
     2014     544,   545,   546,   547,   548,   549,   550,   551,   552,   553,
     2015       0,     0,     0,     0,     0,   352,  1124,    73,     0,     0,
     2016       0,   959,     0,   610,     0,  1000,     0,   724,     0,     0,
     2017       0,   960,     0,     0,   554,   175,     0,   724,     0,     0,
     2018     349,     0,   636,     0,     0,  1024,   636,   832,  1505,     0,
     2019    1505,     0,   724,     0,     0,     0,     0,     0,     0,   352,
     2020    1101,     0,  1035,     0,     0,     0,     0,     0,     0,     0,
     2021     601,     0,     0,     0,   212,     0,     0,     0,     0,     0,
     2022       0,     0,     0,     0,     0,  1505,     0,  1505,   212,     0,
     2023       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2024      18,    19,    20,    21,    22,    23,    24,    25,   506,     0,
     2025      26,    27,    28,     0,    64,   323,     0,     0,     0,    31,
     2026       0,     0,     0,     0,   352,     0,     0,  1045,  1046,  1047,
     2027    1048,     0,  1050,     0,     0,     0,   636,     0,     8,     9,
     2028      10,    11,    12,     0,     0,     0,    76,    34,  1094,     0,
     2029       0,     0,    37,     0,    38,    39,    40,     0,     0,     0,
     2030       0,     0,  1100,    41,    42,     0,     0,    31,     0,   352,
     2031     352,   352,  1116,     0,     0,     0,     0,     0,    76,     0,
     2032     430,   116,   212,     0,     0,     0,     0,     0,   352,    43,
     2033       0,   156,   125,   125,     0,    34,     0,     0,   349,    45,
     2034      37,  1115,     0,     0,    40,     0,   352,  1218,     0,     0,
     2035       0,    41,    42,   222,     0,     0,     0,    73,     0,     0,
     2036       0,     0,   125,   352,     0,   125,   125,     0,   125,     0,
     2037     125,   125,     0,   603,     0,   125,   125,    43,     0,     0,
     2038       0,  1143,     0,     0,     0,     0,   428,   146,  1151,     0,
     2039       0,   724,   724,  1155,   349,   349,     0,     0,  1159,    73,
     2040    1160,     0,   352,     0,  1162,  1163,  1164,     0,     0,  1167,
     2041       0,     0,     0,     0,  1203,     0,     0,     0,  1179,     0,
     2042       0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
     2043       0,     0,     0,     0,     0,     0,  1194,  1195,     0,   352,
     2044       0,   354,     0,     0,     0,    78,     0,     0,     0,   724,
     2045     724,    31,     0,     0,   125,   636,     0,     0,     0,   125,
     2046     125,     0,     0,  1225,     0,   125,  1227,     0,     0,     0,
     2047       0,     0,   175,     0,     0,     0,     0,    78,     0,    34,
     2048       0,   352,     0,     0,    37,     0,     0,     0,    40,     0,
     2049       0,   352,     0,     0,   352,    41,    42,     0,     0,   221,
     2050       0,   352,     0,     0,  1242,     0,   352,     0,     0,     0,
     2051    1246,  1247,   223,   738,   212,     0,     0,     0,     0,     0,
     2052       0,   744,  1258,     0,     0,     0,     0,  1262,     0,     0,
     2053    1266,   745,  1267,     0,     0,  1269,    76,     0,     0,     0,
     2054       0,    76,   412,     0,     0,     0,     0,     0,  1277,   420,
     2055       0,     0,     0,     0,     0,     0,  1299,     0,     0,     0,
     2056       0,  1284,    85,  1286,  1287,  1288,  1289,     0,    73,     0,
     2057       0,     0,     0,   258,     0,     0,     0,     0,    64,  1296,
     2058       0,  1297,     0,     0,     0,   171,     0,  1386,     0,     0,
     2059       0,   724,     0,   738,    85,    55,    55,   116,     0,     0,
     2060     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2061       0,     0,     0,     0,  1325,  1326,     0,     0,     0,     0,
     2062       0,   412,     0,   724,     0,     0,     0,    55,     0,   224,
     2063       0,   724,   724,   724,     0,     0,   222,     0,     0,     0,
     2064       0,     0,   349,   349,     0,     0,     0,     0,   175,     0,
     2065       0,     0,   352,     0,     0,     0,  1203,     0,     0,    55,
     2066       0,     0,    55,     0,     0,  1361,  1362,     0,     0,     0,
     2067       0,     0,     0,     0,     0,  1372,     0,   584,     0,   724,
     2068       0,     0,     0,     0,     0,   588,     0,     0,   591,     0,
     2069     116,     0,     0,   212,     0,    78,     0,     0,     0,     0,
     2070      78,     0,     0,    76,     0,   352,   352,     0,   352,   352,
     2071       0,     0,     0,     0,     0,     0,     0,   362,   354,     0,
     2072       0,     0,     0,    76,     0,     0,     0,  1405,    73,     0,
     2073       0,    76,     0,     0,     0,     0,     0,     0,     0,  1409,
     2074       0,  1410,  1411,  1412,     0,     0,  1503,     0,  1507,     0,
     2075     347,   412,     0,  1416,     0,   420,     0,   354,     0,     0,
     2076       0,     0,  1427,   352,   352,     0,     0,   349,     0,     0,
     2077       0,     0,     0,     0,     0,   354,     0,    76,  1440,     0,
     2078       0,     0,     0,  1536,     0,  1538,     0,     0,     0,   212,
     2079       0,     0,     0,   116,     0,   223,     0,     0,     0,     0,
     2080       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2081       0,     0,    85,     0,     0,    55,  1203,    85,     0,   354,
     2082       0,     0,     0,  1203,     0,     0,     0,   352,  1567,     0,
     2083    1568,     0,     0,     0,  1489,  1490,     0,     0,     0,     0,
     2084     412,     0,     0,  1575,  1576,    55,     0,  1495,     0,   125,
     2085       0,     0,     0,     0,  1495,     0,     0,     0,     0,     0,
     2086       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
     2087     221,     0,     0,     0,     0,     0,  1203,   355,     0,     0,
     2088       0,     0,    78,  1555,   354,     0,     0,  1529,     0,     0,
     2089      78,  1535,    73,     0,     0,     0,     0,     0,     0,     0,
     2090       0,     0,     0,     0,     0,   352,     0,   352,     0,     0,
     2091       0,     0,   224,     0,     0,     0,   355,     0,     0,     0,
     2092    1557,     0,  1558,     0,     0,     0,     0,     0,     0,   354,
     2093     354,   354,   584,   584,   355,     0,    78,   352,     0,     0,
     2094       0,     0,     0,     0,     0,   352,   352,   352,   354,     0,
     2095    1573,  1574,     0,     0,     0,     0,   352,   352,  1577,  1578,
     2096       0,     0,     0,     0,     0,     0,   354,     0,     0,     0,
     2097      73,     0,     0,   125,     0,     0,     0,    76,   355,    85,
     2098       0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
     2099       0,     0,     0,   352,   362,     0,     0,     0,     0,    85,
     2100       0,     0,     0,     0,     0,     0,     0,    85,     0,     0,
     2101       0,     0,     0,     0,     0,     0,     0,     0,     0,    76,
     2102       0,   911,   354,     0,     0,   914,     0,   347,     0,     0,
     2103       0,     0,     0,   362,     0,     0,     0,     0,     0,     0,
     2104       0,     0,     0,   355,     0,     0,     0,     0,     0,     0,
     2105       0,   362,     0,    85,     0,     0,     0,     0,   412,   354,
     2106       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2107      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2108      25,   352,     0,     0,     0,     0,    55,     0,   355,   355,
     2109     355,     0,    31,     0,     0,   362,     0,     0,     0,     0,
     2110       0,   354,     0,     0,     0,     0,     0,   355,     0,     0,
     2111       0,   354,     0,     0,   354,     0,     0,     0,     0,   222,
     2112      34,   354,     0,     0,     0,   355,   354,     0,   347,     0,
     2113      73,     0,     0,     0,     0,     0,    78,    73,     0,     0,
     2114       0,     0,   355,     0,     0,     0,     0,     0,     0,     0,
     2115       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2116     362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2117       0,     0,     0,   584,     0,     0,     0,     0,    78,     0,
     2118       0,   355,     0,     0,     0,   123,   126,   127,    76,     0,
     2119      73,     0,     0,   347,     0,     0,     0,     0,     0,     0,
     2120       0,     0,     0,     0,     0,   362,   362,   362,     0,     0,
     2121       0,     0,     0,     0,     0,     0,     0,     0,   355,     0,
     2122       0,     0,     0,     0,   362,     0,     0,     0,     0,     0,
     2123       0,     0,     0,     0,     0,     0,     0,     0,   347,   347,
     2124     347,     0,   362,     0,     0,     0,     0,     0,     0,     0,
     2125       0,     0,     0,    85,     0,     0,   253,   347,   254,   362,
     2126     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2127     355,     0,   354,   355,     0,     0,     0,     0,   223,     0,
     2128     355,     0,     0,     0,     0,   355,   412,     0,     0,     0,
     2129       0,     0,     0,     0,     0,    85,     0,     0,   362,     2,
     2130     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2131      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2132      23,    24,    25,     0,     0,   354,   354,     0,   354,   354,
     2133       0,   347,     0,     0,    31,   362,     0,     0,     0,   395,
     2134       0,     0,     0,     0,     0,     0,     0,    78,    76,   414,
     2135     415,     0,     0,     0,   419,     0,   421,   422,     0,     0,
     2136       0,     0,    34,     0,    35,  1157,    36,    37,     0,   173,
     2137     174,    40,     0,     0,     0,     0,     0,   362,    41,    42,
     2138       0,  1169,     0,   354,   354,     0,     0,   362,     0,     0,
     2139     362,     0,     0,     0,     0,   224,     0,   362,     0,     0,
     2140       0,     0,   362,     0,     8,     9,    10,    11,    12,    13,
     2141      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2142      24,    25,  -294,   347,    26,    27,    28,     0,     0,     0,
     2143     347,   355,     0,    31,     0,     0,     0,     0,     0,     0,
     2144       0,     0,     0,     0,     0,     0,     0,   354,     0,     0,
     2145       0,     0,     0,     0,     0,     0,     0,     0,  1237,     0,
     2146       0,    34,     0,     0,    85,     0,    37,     0,   336,   337,
     2147      40,     0,  -294,     0,     0,     0,     0,    41,    42,     0,
     2148       0,     0,     0,     0,   355,   355,     0,   355,   355,     0,
     2149     222,     0,     0,     0,     0,     0,     0,    55,     0,     0,
     2150       0,     0,     0,   643,     0,   338,     0,    78,     0,     0,
     2151       0,     0,    76,   634,     0,   164,     0,     0,     0,     0,
     2152       0,     0,     0,     0,     0,   354,     0,   354,     0,     0,
     2153       0,     0,     0,     0,   217,     0,     0,     0,     0,     0,
     2154       0,     0,   355,   355,     0,     0,     0,     0,   362,     0,
     2155     281,   282,     0,   283,     0,     0,     0,   354,     0,     0,
     2156       0,     0,     0,     0,    55,   354,   354,   354,     0,     0,
     2157       0,     0,     0,     0,     0,     0,   354,   354,     0,   284,
     2158     164,   347,     0,     0,     0,   285,   271,     0,     0,   286,
     2159      76,     0,   287,   288,   289,   290,    41,    42,     0,   291,
     2160     292,   362,   362,     0,   362,   362,   355,   293,     0,     0,
     2161       0,     0,     0,   354,     0,   164,     0,     0,     0,     0,
     2162       0,     0,   513,     0,    85,   368,     0,     0,     0,   374,
     2163       0,   296,   380,   298,   299,   300,   301,   347,   347,     0,
     2164       0,     0,     0,     0,     0,     0,     0,     0,     0,   223,
     2165       0,     0,     0,     0,     0,     0,     0,    55,     0,   362,
     2166     362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2167       0,    78,     0,     0,     0,     0,     0,     0,   164,     0,
     2168       0,     0,     0,     0,   355,     0,   355,     0,     0,     0,
     2169     217,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2170       0,   354,     0,     0,     0,     0,     0,     0,   164,   461,
     2171       0,     0,     0,     0,     0,     0,   355,     0,     0,     0,
     2172       0,     0,     0,   362,   355,   355,   355,     0,     0,     0,
     2173       0,     0,   374,     0,     0,   355,   355,     0,     0,     0,
     2174     164,   821,   822,     0,     0,     0,     0,     0,     0,    78,
     2175      76,     0,     0,     0,     0,     0,     0,    76,     0,     0,
     2176       0,     0,     0,     0,   461,     0,   224,   164,     0,     0,
     2177       0,   856,   355,     0,   859,   860,     0,   863,     0,   865,
     2178     866,     0,     0,     0,   867,   868,     0,     0,    85,     0,
     2179       0,     0,     0,     0,     0,     0,     0,     0,    55,    55,
     2180       0,   362,     0,   362,     0,     0,     0,     0,     0,     0,
     2181      76,     0,     0,     0,   606,     0,     0,     0,     0,   630,
     2182       0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
     2183       0,     0,     0,   362,     0,     0,   210,     0,     0,     0,
     2184      55,   362,   362,   362,     0,     0,   230,     0,   234,     0,
     2185     236,     0,   362,   362,     0,     0,     0,   245,     0,     0,
     2186     355,     0,     0,     0,     0,     0,    85,     0,   943,   944,
     2187       0,     0,     0,     0,   946,     0,     0,     0,     0,     0,
     2188       0,     0,     0,     0,     0,   347,   347,     0,   210,   362,
     2189     234,   236,   245,     0,    55,   164,   164,     0,     0,    55,
     2190       0,     0,   368,     0,     0,     0,     0,     0,     0,    78,
     2191       0,     0,     0,     0,     0,     0,    78,     0,     0,     0,
     2192       0,     0,     0,   461,     0,     0,   461,     0,     0,     0,
     2193       0,   210,   461,    55,   474,     2,   205,     4,     5,     6,
     2194       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2195      17,    18,    19,    20,    21,    22,    23,    24,    25,   741,
     2196       0,    26,    27,    28,     0,     0,     0,     0,     0,    78,
     2197      31,   164,     0,     0,     0,     0,     0,   362,     0,     0,
     2198       0,     0,   155,   461,     0,   461,     0,     0,   461,     0,
     2199     164,   461,   210,     0,   234,   236,   245,     0,    34,     0,
     2200      35,     0,    36,   368,     0,    38,    39,     0,     0,     0,
     2201     347,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2202       0,     0,     0,     0,     0,     0,    85,     0,   250,     0,
     2203     210,     0,     0,    85,   210,     0,    55,     0,   255,     0,
     2204       0,     0,     0,     0,     0,    -3,     0,     0,     0,     0,
     2205     504,     0,     0,     0,     0,     0,   164,     0,     0,    55,
     2206       0,     0,     0,     0,     0,     0,    55,     0,   368,     0,
     2207     606,     0,     0,   837,     0,     0,     0,     0,     0,     0,
     2208       0,     0,     0,     0,     0,     0,    85,     0,     0,     0,
     2209       0,     0,     0,     0,   155,     0,     0,     0,     0,   606,
     2210     210,     0,     0,     0,   606,     0,     0,     0,   385,     0,
     2211       0,     0,     0,   368,   368,   368,     0,     0,     0,    55,
     2212       0,   210,     0,     0,     0,     0,   234,   236,     0,     0,
     2213       0,   417,   368,     0,   245,     0,     0,     0,     0,     0,
     2214       0,     0,     0,     0,     0,   432,     0,     0,     0,     0,
     2215       0,     0,  1034,     0,   437,     8,     9,    10,    11,    12,
     2216       0,     0,     0,     0,   445,     0,     0,   741,     0,     0,
     2217       0,     0,     0,     0,     0,     0,     0,   210,     0,     0,
     2218       0,     0,   281,   282,    31,   283,     0,     0,   461,   471,
     2219       0,     0,     0,     0,   481,   210,     0,     0,     0,     0,
     2220     210,     0,   210,     0,     0,     0,   368,   489,   961,     0,
     2221       0,   284,    34,   499,     0,   503,     0,   285,     0,   210,
     2222       0,   286,   210,   210,   287,   288,   289,   290,    41,    42,
     2223       0,   291,   292,   533,     0,     0,     0,     0,   210,   293,
     2224       0,     0,     0,   741,     0,     0,     0,     0,     0,     0,
     2225       0,     0,   210,     0,   294,     0,   378,     0,  1233,   210,
     2226       0,     0,     0,   296,   827,   298,   299,   300,   301,     0,
     2227       0,     0,     0,     0,     0,     0,   593,     0,     0,     0,
     2228       0,   598,     0,     0,     0,     0,     0,     0,     0,     0,
     2229       0,     0,     0,     0,     0,     0,     0,     0,   368,     0,
     2230       0,     0,   630,     0,     0,   368,     0,     0,     0,   644,
     2231       0,     0,     0,   645,   646,     0,   648,     0,     0,     0,
     2232       0,     0,     0,   660,   661,     0,   662,   663,     0,   664,
     2233       0,   665,     0,     0,     0,     0,     0,  1177,     0,     0,
     2234       8,     9,    10,    11,    12,     0,     0,     0,   593,     0,
     2235       0,     0,     0,     0,     0,     0,   680,     0,     0,     0,
     2236       0,     0,     0,     0,     0,     0,     0,   281,   282,    31,
     2237     283,     0,     0,     0,     0,   210,     0,     0,     0,     0,
     2238       0,   691,  1321,     0,     0,     0,     0,     0,     0,     0,
     2239       0,     0,   697,     0,     0,     0,   284,    34,   461,     0,
     2240       0,     0,   285,   210,     0,     0,   286,     0,   210,   287,
     2241     288,   289,   290,    41,    42,   733,   291,   292,     0,     0,
     2242       0,   736,     0,     0,   293,     0,   471,     0,     0,     0,
     2243       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
     2244     164,   378,     0,     0,     0,     0,     0,     0,   296,  1178,
     2245     298,   299,   300,   301,     0,     0,   368,     0,     0,     0,
     2246       0,     0,     0,   773,     0,     0,     0,     0,     0,     0,
     2247       0,     0,     0,     0,     0,     0,     0,     0,     0,   788,
     2248       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2249       0,   606,     0,     0,     0,     0,   210,     0,     0,     0,
     2250       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2251     210,     0,   368,   368,     0,     0,   815,     0,     0,     0,
     2252       0,     0,     0,     0,     0,   825,     0,     0,     0,     0,
     2253     504,     0,   828,     0,     0,   281,   282,   835,   283,     0,
     2254       0,     0,     0,     0,     0,     0,     0,     0,   850,     0,
     2255       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2256       0,     0,     0,     0,   284,     0,     0,     0,     0,     0,
     2257     285,     0,   461,     0,   286,     0,     0,   287,   288,   289,
     2258     290,    41,    42,     0,   291,   292,     0,     0,     0,   890,
     2259       0,   210,   293,     0,     0,     0,     0,     0,     0,     0,
     2260       0,     0,     0,     0,   210,     0,     0,   294,     0,   378,
     2261       0,     0,   379,     0,     0,     0,   296,   380,   298,   299,
     2262     300,   301,     0,   210,     0,   835,     0,     0,     0,     0,
     2263       0,   741,     0,     0,     1,     2,     3,     4,     5,     6,
     2264       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2265      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2266       0,    26,    27,    28,    29,     0,     0,    30,     0,     0,
     2267      31,    32,     0,   217,     0,     0,     0,     0,     0,     0,
     2268     250,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2269     968,   969,     0,     0,     0,    33,     0,     0,    34,     0,
     2270      35,     0,    36,    37,   986,    38,    39,    40,     0,     0,
     2271     210,   741,   341,   363,    41,    42,     0,     0,     0,     0,
     2272       0,  1001,     0,  1002,     0,     0,     0,  1006,     0,     0,
     2273       0,     0,     0,     0,     0,     0,   210,     0,     0,     0,
     2274      43,     0,    44,     0,     0,     0,   413,     0,     0,     0,
     2275      45,     0,     0,   413,     0,     0,     0,     0,     0,     0,
     2276     368,   368,     0,     0,   210,     0,     0,     0,     0,   217,
     2277       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2278      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2279      26,    27,    28,  1039,     0,     0,   210,     0,     0,    31,
     2280    1040,     0,     0,     0,     0,     0,     0,   210,     0,     0,
     2281       0,     0,     0,  1042,     0,  1043,     0,     0,     0,     0,
     2282       0,     0,     0,     0,     0,   413,     0,    34,     0,  1055,
     2283       0,     0,   109,     0,    38,    39,  1059,     0,     0,     0,
     2284       0,     0,     0,    41,    42,     0,     0,     0,  1097,     0,
     2285       0,  1098,     0,     0,     0,     0,     0,     0,     0,     0,
     2286       0,     0,     0,     0,     0,     0,     0,     0,     0,   598,
     2287       0,    44,     0,     0,     0,     0,     0,     0,     0,   110,
     2288       0,   413,     0,     0,     0,   368,     0,     0,   210,   413,
     2289     589,     0,   413,   592,     0,     0,     0,     0,     0,     0,
     2290       0,     0,   363,     0,     0,     0,   622,     0,     0,     0,
     2291       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2292       0,     0,     0,     0,     0,   640,     0,     0,   341,     0,
     2293       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2294       0,     0,     0,   461,     0,   461,     0,     0,     0,     0,
     2295     281,   282,     0,   283,     0,   413,     0,     0,  1161,   413,
     2296       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2297       0,     0,     0,     0,     0,   210,     0,     0,     0,   284,
     2298     461,   321,   461,     0,     0,   649,     0,   138,   139,   286,
     2299     363,   345,   287,   650,   289,   290,    41,    42,     0,   291,
     2300     292,     0,     0,   381,   381,     0,     0,   293,     0,     0,
     2301     164,     0,     0,   413,   533,     0,     0,     0,     0,     0,
     2302       0,  1226,   294,     0,   651,     0,   652,   379,     0,     0,
     2303       0,   296,   380,   298,   299,   300,   301,     0,     0,     0,
     2304       0,     0,     0,     0,   413,     0,     0,   363,     0,     0,
     2305    1239,     0,     0,     0,     0,  1241,     0,     0,     0,     0,
     2306       0,     0,     0,  1245,     0,     0,     0,     0,     0,     0,
     2307       0,   210,     0,     0,   321,     0,     0,     0,     0,     0,
     2308       0,     0,     0,     0,     0,     0,     0,   413,     0,     0,
     2309     341,   363,     0,     0,  1271,     0,     0,     0,     0,   485,
     2310       0,     0,     0,     0,     0,     0,  1279,     0,     0,  1280,
     2311       0,  1281,     0,     0,     0,     0,     0,     0,     0,     0,
     2312       0,     0,     0,     0,     0,  1290,  1291,     0,     0,     0,
     2313       0,     0,     0,     0,     0,     0,   413,   413,     0,     0,
     2314       0,     0,     0,     0,     0,     0,     0,  1304,     0,     0,
     2315       0,     0,     0,     0,     0,   830,   363,     0,   363,     0,
     2316       0,     0,     0,     0,     0,     0,     0,   622,     0,   622,
     2317     622,     0,     0,     0,  1327,     0,   622,     0,     0,   514,
     2318       0,   516,   519,     0,     0,     0,   869,   363,     0,   522,
     2319     523,     0,   363,     0,   516,   516,     0,     0,     0,     0,
     2320       0,   363,   363,   363,     0,     0,   516,     0,     0,     0,
     2321       0,     0,     0,     0,     0,   381,     0,     0,     0,     0,
     2322     363,     0,     0,     0,     0,   413,   912,     0,     0,   413,
     2323     915,     0,     0,     0,     0,     0,   917,     0,     0,     0,
     2324       0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
     2325       0,     0,     0,     0,   341,   363,   413,     0,   413,     0,
     2326       0,     0,   413,     0,     0,     0,     0,     0,     0,   281,
     2327     282,  1397,   283,  1398,     0,     0,     0,     0,   516,     0,
     2328       0,     0,     0,     0,     0,     0,  1407,     0,  1408,     0,
     2329       0,     0,     0,     0,   363,   622,     0,     0,   284,     0,
     2330       0,     0,     0,     0,   285,     0,  1415,     0,   286,     0,
     2331       0,   287,   288,   289,   290,    41,    42,   735,   291,   292,
     2332       0,     0,  1433,  1435,     0,     0,   293,   210,     0,     0,
     2333     341,   363,     0,     0,  1441,   413,   413,  1245,     0,     0,
     2334       0,   294,     0,   378,     0,     0,     0,     0,     0,   812,
     2335     296,   380,   298,   299,   300,   301,   769,     0,     0,  1464,
     2336       0,     0,     0,     0,     0,     0,     0,     0,  1471,   782,
     2337       0,  1473,     0,  1475,  1477,  1479,   769,   413,     0,   769,
     2338       0,     0,     0,     0,     0,     0,   363,     0,     0,     0,
     2339     792,   793,   830,   363,     0,     0,     0,   622,     0,   622,
     2340       0,     0,     0,     0,     0,     0,     0,     0,     0,   622,
     2341       0,     0,   814,     0,     0,  1510,     0,  1512,     0,     0,
     2342    1245,     0,   823,     0,     0,     0,     0,     0,     0,   345,
     2343       0,     0,     0,     0,   782,  1524,     0,     0,     0,     0,
     2344       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2345       0,     0,     0,     0,     0,   516,   516,   516,   516,   516,
     2346     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
     2347     516,   516,   516,     0,     0,     0,     0,     0,     0,     0,
     2348       0,     0,   830,     0,   889,     0,     0,     0,     0,     0,
     2349     413,     0,     0,   381,     0,     0,   413,     0,   516,     0,
     2350       0,     0,     0,     0,   413,     0,     0,     0,     0,     0,
     2351       0,     0,     0,     0,     0,     0,     0,   622,   622,     0,
     2352       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2353       0,     0,     0,   345,     0,     0,     0,     0,     0,     0,
     2354       0,     0,     0,     0,   363,     0,     0,     0,     0,     0,
     2355     413,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2356      17,    18,    19,    20,    21,    22,    23,    24,    25,   413,
     2357    1158,    26,    27,    28,     0,     0,     0,     0,     0,   363,
     2358      31,   453,     0,     0,     0,   413,  1170,     0,   622,   622,
     2359    1175,     0,     0,     0,     0,     0,     0,   516,     0,     0,
     2360     363,   363,     0,     0,     0,     0,     0,     0,    34,   782,
     2361       0,   991,     0,     0,     0,    38,    39,   996,     0,   516,
     2362       0,     0,     0,     0,  1005,     0,     0,     0,     0,     0,
     2363       0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
     2364       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2365       0,     0,   454,     0,     0,     0,   711,     0,     0,     0,
     2366     110,   830,   413,  1238,     0,     0,     0,     0,  1022,  1023,
     2367       0,   345,     0,     0,   622,     0,     0,     0,   516,     0,
     2368       0,     0,     0,     0,     0,     0,   345,     0,     0,     0,
     2369       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2370       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2371     516,     0,     0,     0,     0,     0,     0,     0,     0,   363,
     2372       0,     0,     0,     0,     0,   516,  1053,     0,     0,     0,
     2373     381,     0,     0,  -517,     0,     0,     1,     2,     3,     4,
     2374       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2375      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2376      25,     0,     0,    26,    27,    28,    29,     0,     0,    30,
     2377       0,     0,    31,    32,     0,     0,     0,     0,     0,   341,
     2378       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2379       0,     0,     0,     0,     0,     0,     0,    33,     0,   363,
     2380      34,     0,    35,     0,    36,    37,   321,    38,    39,    40,
     2381       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
     2382       0,     0,  1139,  1140,     0,     0,     0,     0,     0,   381,
     2383       0,     0,     0,     0,     0,   996,     0,     0,  1149,     0,
     2384     769,     0,    43,     0,    44,     0,     0,     0,   363,   363,
     2385       0,     0,    45,     0,     0,     0,     0,     0,     0,     0,
     2386    1165,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2387       0,  1180,     0,     0,     0,     0,   516,     0,     0,     0,
     2388       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2389       0,     0,     0,   381,     0,  1198,     0,     0,     0,     0,
     2390       0,     0,     0,     0,     0,     0,     0,   516,     0,     0,
     2391     996,   996,     0,     0,     0,     0,     0,     0,     0,   516,
     2392       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2393       0,  1230,     0,     0,     1,     2,     3,     4,     5,     6,
     2394       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2395      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2396     516,    26,    27,    28,    29,     0,     0,    30,     0,     0,
     2397      31,    32,     0,   363,     0,     0,     0,     0,   996,     0,
     2398       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2399       0,     0,     0,     0,     0,    33,     0,   889,    34,     0,
     2400      35,     0,    36,    37,     0,    38,    39,    40,     0,     0,
     2401       0,     0,  1282,  1283,    41,    42,     0,     0,     0,     0,
     2402       0,     0,   281,   282,     0,   283,     0,     0,     0,     0,
     2403       0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
     2404      43,     0,    44,     0,     0,     0,  -521,     0,     0,     0,
     2405      45,   284,     0,     0,     0,     0,     0,   285,     0,     0,
     2406       0,   286,     0,   413,   287,   288,   289,   290,    41,    42,
     2407       0,   291,   292,     0,     0,     0,   516,     0,     0,   293,
     2408       0,     0,     0,     0,     0,     0,     0,     0,   413,   413,
     2409     516,   516,     0,   996,   294,     0,   378,     0,     0,     0,
     2410       0,   781,     0,   296,   380,   298,   299,   300,   301,     0,
     2411       0,     0,     0,   413,     0,     1,     2,   205,     4,     5,
     2412       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2413      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2414       0,     0,    26,    27,    28,    29,     0,     0,    30,   281,
     2415     282,    31,  1062,  1063,  1390,  1064,   769,     0,  1065,  1066,
     2416    1067,  1068,  1069,  1070,  1071,  1072,     0,     0,     0,  1073,
     2417       0,     0,     0,  1074,  1075,     0,    33,     0,   284,    34,
     2418       0,    35,     0,    36,   649,     0,    38,    39,   286,     0,
     2419       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2420       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2421       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2422       0,   294,     0,  1076,     0,     0,   170,     0,     0,     0,
     2423     296,   297,   298,   299,   300,   301,     0,     0,     0,     0,
     2424    1077,     0,  1450,     0,  -129,     0,     0,     0,     0,     0,
     2425       1,     2,   205,     4,     5,     6,     7,     8,     9,    10,
     2426      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2427      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
     2428      29,     0,     0,    30,   281,   282,    31,   283,     0,     0,
     2429       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2430     516,     0,     0,   281,   282,     0,   283,     0,     0,     0,
     2431       0,     0,     0,   284,    34,     0,    35,   516,    36,   285,
     2432       0,    38,    39,   286,  1516,     0,   287,   288,   289,   290,
     2433      41,    42,   284,   291,   292,     0,     0,     0,   285,     0,
     2434       0,   293,   286,     0,     0,   287,   288,   289,   290,    41,
     2435      42,     0,   291,   292,     0,     0,   294,     0,  1076,     0,
     2436     293,     0,     0,     0,     0,   296,   297,   298,   299,   300,
     2437     301,     0,     0,     0,     0,   294,   321,   378,     0,  -129,
     2438     993,     0,     0,     0,   296,   380,   298,   299,   300,   301,
     2439     516,   516,     1,     2,   205,     4,     5,     6,     7,     8,
     2440       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2441      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2442      27,    28,    29,     0,     0,    30,   281,   282,    31,   283,
     2443       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2444      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2445      26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
     2446      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
     2447     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2448       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
     2449       0,     0,   109,     0,    38,    39,     0,     0,   294,     0,
     2450      44,     0,     0,    41,    42,     0,     0,   296,   297,   298,
     2451     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2452       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2453      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2454      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2455       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2456      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2457      25,  -294,     0,     0,     0,   284,    34,     0,    35,     0,
     2458      36,   285,    31,    38,    39,   286,     0,     0,   287,   288,
     2459     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2460       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
     2461      34,     0,     0,     0,     0,     0,     0,     0,   294,     0,
     2462     343,  -294,     0,     0,     0,   781,     0,   296,   344,   298,
     2463     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2464       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2465      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2466      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2467       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2468      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2469      25,  -295,     0,     0,     0,   284,    34,     0,    35,     0,
     2470      36,   285,    31,    38,    39,   286,     0,     0,   287,   288,
     2471     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2472       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
     2473      34,     0,     0,     0,     0,     0,     0,     0,   294,     0,
     2474     931,  -295,     0,     0,     0,   781,     0,   296,   344,   298,
     2475     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2476       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2477      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2478      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2479       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2480      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2481      26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
     2482      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
     2483     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2484       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
     2485       0,     0,     0,     0,    38,    39,     0,     0,   294,     0,
     2486     931,     0,     0,     0,     0,   781,     0,   296,   600,   298,
     2487     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2488       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2489      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2490      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2491       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2492      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2493      26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
     2494      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
     2495     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2496       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
     2497       0,     0,     0,     0,   206,    39,     0,     0,   294,     0,
     2498     343,     0,     0,     0,     0,     0,     0,   296,   344,   298,
     2499     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2500       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2501      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2502      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2503       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2504       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2505       0,     0,     0,     0,     0,   284,    34,     0,    35,     0,
     2506      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
     2507     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2508       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
     2509       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
     2510     931,     0,     0,     0,     0,     0,     0,   296,   344,   298,
     2511     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2512       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2513      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2514      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2515       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2516       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2517       0,     0,     0,     0,     0,   284,    34,     0,    35,     0,
     2518      36,   285,     0,   206,    39,   286,     0,     0,   287,   288,
     2519     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2520       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
     2521       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
     2522    1020,     0,     0,     0,     0,     0,     0,   296,  1021,   298,
     2523     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2524       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2525      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2526      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2527       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2528      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2529      26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
     2530      36,   285,     0,   206,    39,   286,     0,     0,   287,   288,
     2531     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2532       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
     2533       0,     0,     0,     0,   206,    39,     0,     0,   294,     0,
     2534     378,     0,     0,     0,     0,     0,     0,   296,   380,   298,
     2535     299,   300,   301,   204,     2,   205,     4,     5,     6,     7,
     2536       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2537      18,    19,    20,    21,    22,    23,    24,    25,     0,   270,
     2538      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
     2539       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2540      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2541       0,    26,    27,    28,   492,   493,   494,    34,     0,    35,
     2542      31,    36,    37,     0,   206,    39,    40,     0,     0,     0,
     2543       0,     0,     0,    41,    42,     0,     0,     0,     0,     0,
     2544       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
     2545       0,     0,     0,     0,     0,    38,    39,     0,     0,    43,
     2546       0,   207,     0,     0,     0,     0,     0,     0,     0,   208,
     2547       1,     2,   205,     4,     5,     6,     7,     8,     9,    10,
     2548      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2549      21,    22,    23,    24,    25,  -294,     0,    26,    27,    28,
     2550      29,     0,     0,    30,     0,     0,    31,     0,     0,     0,
     2551       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2552       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2553       0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
     2554       0,    38,    39,     0,     0,  -294,     1,     2,   205,     4,
     2555       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2556      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2557      25,     0,     0,    26,    27,    28,    29,     0,    44,    30,
     2558       0,     0,    31,     0,     0,     0,   110,     0,     0,     0,
     2559       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2560       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2561      34,     0,    35,     0,    36,     0,     0,    38,    39,   204,
     2562       2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
    19552563      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    1956       22,    23,    24,  -294,  1227,    25,    26,    27,   693,    30,
    1957      694,  1107,   941,   722,    30,   213,   211,  1056,   478,   213,
    1958     1108,  1140,   825,  1118,   899,   478,   935,   964,  1331,   741,
    1959      972,   815,     0,     0,   816,   174,   257,    33,   817,   602,
    1960        0,   252,    33,   253,  1391,   630,     0,     0,     0,    37,
    1961       38,     0,   174,  -294,     0,     0,   174,  1424,   635,   211,
    1962        0,     0,   635,     0,     0,   257,     0,     8,     9,    10,
    1963       11,    12,     0,     0,     0,     0,     0,     0,   478,   776,
    1964        0,   409,     0,  1123,   935,   935,   337,     0,     0,   777,
    1965        0,     0,     0,     0,   109,    30,     0,     0,  1417,   653,
    1966        0,  1425,     0,     0,     0,  1217,   213,     0,     0,     0,
    1967        0,     0,   479,     0,     0,  1504,     0,  1504,     0,   174,
    1968      211,     0,     0,    33,   394,     0,     0,   348,     0,     0,
    1969        0,     0,   479,     0,   413,   414,     0,   728,   728,   418,
    1970      479,   420,   421,     0,     0,     0,  1464,     0,     0,     0,
    1971        0,  1468,  1504,     0,  1504,     0,     0,     0,   211,     0,
    1972        0,     0,   211,     0,     0,   958,   723,   609,     0,   429,
    1973        0,     0,     0,     0,     0,   959,     0,     0,   505,     0,
    1974      716,  1490,   322,     0,   737,   463,    63,   213,     0,     8,
    1975        9,    10,    11,    12,   429,   728,   728,     0,   429,     0,
    1976        0,     0,     0,     0,     0,     0,     0,     8,     9,    10,
    1977       11,    12,     0,   600,   607,     0,     0,    30,   749,    36,
    1978      753,   181,   182,    39,     0,   631,   632,   257,   348,     0,
    1979       40,    41,     0,     0,     0,    30,     0,   213,     0,     0,
    1980        0,     0,     0,     0,     0,    33,     0,     0,     0,   211,
    1981       36,     0,   181,   182,    39,     0,   697,     0,   409,     0,
    1982        0,    40,    41,    33,   698,     0,   699,  1559,    36,     0,
    1983      181,   182,    39,  1559,   818,     0,     0,     0,     0,    40,
    1984       41,     0,     0,     0,  1559,   174,     0,   608,  1559,   609,
    1985        0,     0,   635,   831,   935,   602,     0,   610,     0,     0,
    1986        0,     0,     0,     0,     0,   697,   850,   409,     0,     0,
    1987        0,   935,     0,     0,     0,   699,     0,     0,   174,     0,
    1988        0,     0,     0,     0,   602,     0,     0,     0,     0,   602,
    1989      211,     0,     0,     0,   174,   635,     0,  1329,   348,   348,
    1990      348,     0,     0,     0,     0,  1385,     0,   211,     0,   174,
    1991       36,     0,   181,   182,    39,     0,     0,   348,     0,     0,
    1992      213,    40,    41,     0,     0,     0,     0,     0,     0,   728,
    1993        0,     0,   891,     0,     0,   723,     0,   728,   728,   728,
    1994      211,     0,     0,     0,   935,   935,   479,   697,   213,   409,
    1995        0,   257,   737,   213,     0,   937,     0,   699,     0,     0,
    1996        0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    1997       17,    18,    19,    20,    21,    22,    23,    24,    72,     0,
    1998       25,    26,    27,     0,     0,   728,     0,     0,   479,    30,
    1999      452,   348,     0,   944,     0,     0,     0,     0,     0,   947,
    2000      963,     0,     0,   429,     0,    75,   174,     0,     0,    72,
    2001       36,     0,   181,   182,    39,     0,     0,    33,     0,     0,
    2002        0,    40,    41,     0,    37,    38,     0,   257,   737,     0,
    2003        0,     0,     0,   991,     0,     0,    75,     0,     0,     0,
    2004        0,   213,     0,     0,   220,     0,     0,  1529,     0,   409,
    2005        0,     0,     0,     0,     0,   213,     0,  1530,   485,     0,
    2006        0,   453,     0,   211,  1502,   710,  1506,     0,     0,   109,
    2007      723,   221,     0,     0,     0,     0,     0,     0,     0,     0,
    2008      723,     0,     0,   348,     0,   635,   820,   821,  1023,   635,
    2009      831,   211,     0,     0,     0,   723,   211,     0,     0,     0,
    2010        0,  1535,     0,  1537,     0,  1034,    36,     0,   181,   182,
    2011       39,     0,     0,     0,     0,     0,   855,    40,    41,   858,
    2012      859,     0,   862,     0,   864,   865,     0,     0,     0,   866,
    2013      867,     0,   351,   543,   544,   545,   546,   547,   548,   549,
    2014      550,   551,   552,   263,     0,     0,  1566,     0,  1567,   213,
    2015        0,     0,     0,   264,   951,     0,   952,    63,     0,   353,
    2016        0,  1574,  1575,   955,   956,     0,     0,   553,   961,     0,
    2017        0,     0,   174,     0,   653,     0,   411,     0,     0,   635,
    2018      966,  1060,     0,   419,   211,   970,     0,     0,     8,     9,
    2019       10,    11,    12,     0,     0,     0,     0,     0,   211,     0,
    2020        0,     0,     0,     0,     0,     0,   447,     0,     0,     0,
    2021        0,   999,     0,   942,   943,  1115,    30,     0,   505,   945,
    2022        0,     0,     0,   429,   115,     0,     0,    72,     0,     0,
    2023        0,     0,    72,     0,     0,     0,     0,     0,     0,     0,
    2024        0,   348,     0,     0,    33,     0,     0,     0,     0,    36,
    2025        0,   181,   182,    39,    75,   411,   600,     0,     0,    75,
    2026       40,    41,     0,     0,     0,     0,   124,   124,   124,     0,
    2027        0,     0,     0,   653,     0,     0,   602,     0,     0,     0,
    2028        0,     0,     0,     0,     0,     0,  1529,     0,   409,   427,
    2029        0,     0,   211,     0,   723,   723,  1530,   348,   348,     0,
    2030        0,     0,     0,     0,     8,     9,    10,    11,    12,     0,
    2031        0,   583,     0,  1044,  1045,  1046,  1047,  1202,  1049,   587,
    2032        0,     0,   590,     0,     0,     0,     0,   220,     0,     0,
    2033        0,     0,    30,     0,  1093,     0,     0,   124,     0,   124,
    2034        0,   213,     0,     0,     0,     0,     0,     0,  1099,     0,
    2035        0,     0,   723,   723,   221,     0,     0,     0,   635,     0,
    2036       33,     0,     0,     0,   273,    36,     0,   181,   182,    39,
    2037        0,     0,     0,  1060,     0,     0,    40,    41,     0,     0,
    2038        0,     0,     0,     0,     0,   411,     0,  1114,     0,   419,
    2039        0,     0,     0,     0,    72,     0,     0,     0,     0,     0,
    2040        0,     0,   183,     0,     0,     0,     0,     0,     0,   351,
    2041        0,     0,   184,     0,    72,     0,   737,     0,     0,     0,
    2042      124,    75,    72,     0,     0,     0,     0,  1142,   124,     0,
    2043      124,   124,     0,     0,  1150,   124,   353,   124,   124,  1154,
    2044        0,    75,     0,     0,  1158,     0,  1159,     0,   351,    75,
    2045     1161,  1162,  1163,     0,     0,  1166,     0,     0,     0,  1298,
    2046        0,     0,     0,     0,  1178,     0,   351,     0,    72,   174,
    2047        0,     0,     0,     0,   411,   353,   257,     0,     0,  1297,
    2048        0,    63,  1193,  1194,   211,     0,     0,     0,     8,     9,
    2049       10,    11,    12,   353,   723,    75,   737,     0,     0,     0,
    2050      115,     0,     0,     0,     0,     0,     0,   124,     0,  1224,
    2051      351,     0,  1226,     0,     0,     0,    30,     0,     0,     0,
    2052      213,     0,     0,     0,     0,     0,   723,     0,     0,     0,
    2053        0,     0,     0,     0,   723,   723,   723,   353,     0,     0,
    2054        0,     0,     0,     0,    33,   348,   348,     0,     0,    36,
    2055     1241,   181,   182,    39,     0,     0,  1245,  1246,     0,  1202,
    2056       40,    41,     0,     0,     0,     0,   583,   583,  1257,     0,
    2057        0,     0,     0,  1261,     0,   351,  1265,     0,  1266,     0,
    2058        0,  1268,   723,     0,     0,     0,   263,     0,     0,     0,
    2059        0,     0,     0,   115,  1276,     0,   264,     0,     0,     0,
    2060        0,     0,   353,  1232,     0,     0,     0,  1283,     0,  1285,
    2061     1286,  1287,  1288,     0,     0,     0,   213,     0,     0,     0,
    2062      351,   351,   351,     0,     0,  1295,     0,  1296,     0,     0,
    2063        0,   170,     0,     0,     0,     0,     0,     0,     0,   351,
    2064        0,     0,     0,     0,     0,   174,     0,   353,   353,   353,
    2065        0,     0,     0,     0,     0,   910,     0,   351,     0,   913,
    2066     1324,  1325,     0,   211,     0,     0,   353,     0,    72,     0,
    2067      348,     0,    77,     0,   351,     0,     0,     0,     0,     0,
    2068        0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
    2069        0,     0,   411,     0,     0,    75,   115,     0,     0,    84,
    2070        0,   353,     0,    77,     0,    54,    54,     0,     0,     0,
    2071       72,  1360,  1361,   351,     0,     0,     0,     0,     0,  1202,
    2072        0,  1371,     0,     0,     0,     0,  1202,  1320,     0,     0,
    2073       84,     0,     0,     0,     0,     0,    54,    75,   222,     0,
    2074      353,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2075      351,     0,     0,     0,     0,     0,     0,     0,     0,   211,
    2076        0,     0,     0,     0,     0,   223,     0,     0,    54,     0,
    2077        0,    54,     0,  1404,     0,     0,     0,   353,     0,  1202,
    2078        0,     0,     0,     0,     0,  1408,  1554,  1409,  1410,  1411,
    2079        0,     0,   351,     0,     0,     0,     0,     0,     0,  1415,
    2080        0,     0,   351,     0,     0,   351,     0,   583,  1426,     0,
    2081      220,     0,   351,     0,     0,     0,     0,   351,     0,   353,
    2082        0,     0,   124,   124,  1439,     0,   354,     0,     0,   353,
    2083        0,     0,   353,     0,     0,     0,     0,   221,     0,   353,
    2084        0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
    2085        0,     0,   124,   361,     0,   124,   124,     0,   124,   346,
    2086      124,   124,     0,     0,     0,   124,   124,     0,     0,     0,
    2087        0,     0,     0,     0,     0,     0,     0,     0,     0,    72,
    2088     1488,  1489,     0,     0,     0,     0,     0,     0,     0,     0,
    2089        0,     0,     0,  1494,     0,     0,     0,     0,     0,     0,
    2090     1494,     0,     0,     0,     0,     0,    75,     0,     0,     0,
     2564      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
     2565       0,     0,     0,     0,    44,    31,     0,     0,     0,     0,
     2566       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
    20912567       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2092      411,    77,     0,     0,    54,     0,    77,     0,     0,     0,
    2093        0,     0,     0,  1528,     0,     0,     0,  1534,     0,     0,
    2094        0,     0,     0,     0,   124,     0,     0,     0,    84,   124,
    2095      124,     0,     0,    84,    54,   124,     0,     0,     0,     0,
    2096        0,     0,     0,   351,     0,     0,  1556,     0,  1557,     0,
     2568       0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
     2569     206,    39,     0,     2,   205,     4,     5,     6,     7,     8,
     2570       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2571      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2572      27,    28,     0,     0,     0,     0,     0,   207,    31,     0,
     2573       0,     0,     0,     0,     0,   270,     0,     0,     0,     0,
     2574       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2575       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
     2576      36,    37,     0,   206,    39,    40,     0,     0,     0,     0,
     2577       0,     0,    41,    42,     0,     0,     0,     0,     0,     0,
     2578       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2579       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
     2580     207,     0,     0,     0,     0,     0,     0,     0,   208,     2,
     2581     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2582      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2583      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2584       0,     0,     0,     0,    31,     0,     0,     0,     0,     8,
     2585       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2586      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2587      27,    28,    34,     0,    35,     0,    36,     0,    31,    38,
     2588      39,     0,     2,   205,     4,     5,     6,     7,     8,     9,
     2589      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2590      20,    21,    22,    23,    24,    25,    34,     0,    26,    27,
     2591      28,     0,     0,    38,    39,  -400,   687,    31,     0,     0,
     2592       0,     0,     0,     0,   634,     0,     0,     0,     0,     0,
     2593       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2594       0,     0,     0,     0,     0,    34,     0,    35,   643,    36,
     2595     338,     0,    38,    39,     0,     0,     0,     0,   110,     0,
     2596       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2597       0,     0,     0,     0,  1369,     0,     0,     0,     0,     0,
     2598       0,     0,     0,     0,     0,     0,     0,     0,     0,   687,
     2599       0,     0,     0,     0,     0,     0,     0,   634,     2,   205,
     2600       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2601      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2602      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
     2603       0,     0,     0,    31,     0,     0,     0,     0,     8,     9,
     2604      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2605      20,    21,    22,    23,    24,    25,  -294,     0,    26,    27,
     2606      28,    34,     0,    35,     0,    36,     0,    31,    38,    39,
     2607       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2608       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2609    1371,     0,     0,     0,     0,    34,     0,     0,     0,     0,
     2610      37,     0,   336,   337,    40,   687,  -294,     0,     0,     0,
     2611       0,    41,    42,   634,     2,   205,     4,     5,     6,     7,
     2612       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2613      18,    19,    20,    21,    22,    23,    24,    25,     0,   338,
     2614      26,    27,    28,     0,     0,     0,     0,   110,     0,    31,
     2615       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2616       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2617       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
     2618       0,    36,     0,     0,   206,    39,     0,     2,   205,     4,
     2619       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2620      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2621      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
     2622       0,   269,    31,     0,     0,     0,     0,     0,     0,   629,
     2623       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2624       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2625      34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
     2626       2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
     2627      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2628      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
     2629       0,     0,     0,     0,   687,    31,     0,     0,     0,     0,
     2630       0,     0,   634,     0,     0,     0,     0,     0,     0,     0,
     2631       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2632       0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
     2633      38,    39,     0,     2,   205,     4,     5,     6,     7,     8,
     2634       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2635      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2636      27,    28,     0,     0,     0,     0,     0,   599,    31,     0,
     2637       0,     0,     0,     0,     0,   634,     0,     0,     0,     0,
     2638       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2639       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
     2640      36,     0,     0,   206,    39,     8,     9,    10,    11,    12,
     2641      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2642      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2643       0,     0,   281,   282,    31,   283,     0,     0,     0,     0,
     2644     207,     0,     0,     0,     0,     0,     0,     0,   270,     0,
     2645       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2646       0,   284,    34,     0,     0,     0,     0,   285,     0,    38,
     2647      39,   286,     0,     0,   287,   288,   289,   290,    41,    42,
     2648       0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
     2649       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2650       0,     0,     0,     0,   294,     0,   525,     0,     0,   170,
     2651       0,     0,     0,   296,   297,   298,   299,   300,   301,     8,
     2652       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2653      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2654      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2655       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2656      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2657      26,    27,    28,     0,     0,   284,    34,     0,     0,    31,
     2658       0,   285,     0,    38,    39,   286,     0,     0,   287,   288,
     2659     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2660       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
     2661       0,     0,    37,     0,   336,   337,    40,     0,   294,     0,
     2662     599,    -3,     0,    41,    42,     0,     0,   296,   600,   298,
     2663     299,   300,   301,     8,     9,    10,    11,    12,    13,    14,
     2664      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2665      25,   338,     0,    26,    27,    28,     0,     0,     0,   110,
     2666     281,   282,    31,   283,     8,     9,    10,    11,    12,    13,
     2667      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2668      24,    25,     0,     0,    26,    27,    28,     0,     0,   284,
     2669      34,     0,     0,    31,   453,   649,     0,    38,    39,   286,
     2670       0,     0,   287,   288,   289,   290,    41,    42,     0,   291,
     2671     292,     0,     0,     0,     0,     0,     0,   293,     0,     0,
     2672       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
     2673       0,     0,   294,   -35,   766,     0,     0,     0,     0,     0,
     2674       0,   296,   297,   298,   299,   300,   301,     8,     9,    10,
     2675      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2676      21,    22,    23,    24,    25,   454,     0,    26,    27,    28,
     2677       0,     0,     0,   110,   281,   282,    31,   283,     0,     0,
     2678       0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
     2679      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2680      23,    24,    25,   284,    34,    26,    27,    28,     0,   285,
     2681       0,    38,    39,   286,    31,     0,   287,   288,   289,   290,
     2682      41,    42,     0,   291,   292,     0,     0,     0,     0,     0,
     2683       0,   293,     0,     0,     0,     0,     0,     0,     0,     0,
     2684       0,     0,    34,     0,     0,     0,   294,     0,   295,    38,
     2685      39,     0,     0,     0,     0,   296,   297,   298,   299,   300,
     2686     301,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2687      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2688       0,    26,    27,    28,   643,     0,   338,     0,   281,   282,
     2689      31,   283,     0,     0,   634,     0,     0,     0,     0,     8,
     2690       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2691      19,    20,    21,    22,    23,    24,    25,   284,    34,    26,
     2692      27,    28,     0,   285,     0,    38,    39,   286,    31,     0,
     2693     287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
     2694       0,     0,     0,     0,     0,   293,     0,     0,     0,     0,
     2695       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
     2696     294,     0,   156,    38,    39,     0,     0,     0,     0,   296,
     2697     297,   298,   299,   300,   301,     8,     9,    10,    11,    12,
     2698      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2699      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2700     256,     0,   281,   282,    31,   283,     0,     0,   110,     0,
     2701       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2702       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2703       0,   284,    34,     0,     0,     0,     0,   285,     0,    38,
     2704      39,   286,     0,     0,   287,   288,   289,   290,    41,    42,
     2705       0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
     2706       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2707       0,     0,     0,     0,   294,     0,   599,     0,     0,     0,
     2708       0,     0,     0,   296,   600,   298,   299,   300,   301,     8,
     2709       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2710      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2711      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2712       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2713      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2714      26,    27,    28,     0,     0,   284,    34,     0,     0,    31,
     2715       0,   285,     0,    38,    39,   286,     0,     0,   287,   288,
     2716     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2717       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
     2718       0,     0,    37,     0,    38,    39,    40,     0,   294,     0,
     2719     378,     0,     0,    41,    42,     0,     0,   296,   380,   298,
     2720     299,   300,   301,     0,     0,     0,     0,     0,     0,     0,
     2721       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
     2722       0,    44,     0,     0,     0,     0,     0,     0,     0,    45,
     2723       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2724      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2725      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
     2726       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2727      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2728      26,    27,    28,     0,     0,     0,     0,    34,     0,    31,
     2729       0,     0,    37,     0,   206,    39,    40,     0,     0,     0,
     2730       0,     0,     0,    41,    42,     0,     0,     0,     0,     0,
     2731       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
     2732       0,     0,    37,     0,   336,   337,    40,     0,     0,    43,
     2733       0,   269,     0,    41,    42,     0,     0,     0,     0,   208,
     2734       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2735       0,     0,     0,     0,     0,     0,     0,     0,     0,   643,
     2736       0,   338,     0,     0,     0,     0,     0,     0,     0,   634,
     2737       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2738      18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
     2739      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
     2740       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2741      18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
     2742      26,    27,    28,     0,     0,     0,     0,    34,     0,    31,
     2743       0,     0,     0,     0,    38,    39,     0,     0,  -294,     0,
     2744       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2745       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
     2746       0,     0,     0,     0,    38,    39,     0,     0,  -294,   643,
     2747       0,   338,     0,     0,     0,     0,     0,     0,     0,   110,
     2748       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2749       0,     0,     0,     0,     0,     0,     0,     0,     0,   643,
     2750       0,   338,     0,     0,     0,     0,     0,     0,     0,   634,
     2751       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2752      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2753      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
     2754     453,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2755      17,    18,    19,    20,    21,    22,    23,    24,    25,  -294,
     2756       0,    26,    27,    28,     0,     0,     0,    34,     0,     0,
     2757      31,     0,     0,     0,    38,    39,     0,     0,     0,     0,
     2758       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2759       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
     2760       0,     0,     0,     0,     0,    38,    39,     0,     0,  -294,
     2761       0,   454,     0,     0,     0,   947,     0,     0,     0,   110,
     2762       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2763      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2764      25,     0,   338,    26,    27,    28,     0,     0,     0,     0,
     2765     110,     0,    31,   453,     8,     9,    10,    11,    12,    13,
     2766      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2767      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
     2768      34,     0,     0,    31,     0,     0,     0,    38,    39,     0,
    20972769       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
    2098       16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
    2099      353,    25,    26,    27,     0,     0,  1572,  1573,     0,  1156,
    2100       30,   452,     0,     0,  1576,  1577,     0,     0,     0,     0,
    2101        0,     0,     0,     0,     0,  1168,   351,   351,     0,   351,
    2102      351,   222,     0,     0,     0,     0,     0,     0,    33,     0,
    2103        0,     0,     0,     0,     0,    37,    38,     0,     0,    72,
    2104        0,     0,     0,   353,   353,     0,   353,   353,   223,     8,
     2770      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2771       0,    34,    26,    27,    28,     0,     0,     0,    38,    39,
     2772       0,    31,     0,     0,   454,     0,     0,     0,  1235,     0,
     2773       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
     2774       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
     2775       0,     0,     0,     0,     0,   156,   206,    39,     0,     0,
     2776       0,     0,     0,   110,     0,     8,     9,    10,    11,    12,
     2777      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2778      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2779       0,     0,     0,   269,    31,     0,     0,     0,     0,     0,
     2780       0,   270,     0,     8,     9,    10,    11,    12,    13,    14,
     2781      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2782      25,     0,    34,    26,    27,    28,     0,     0,     0,    38,
     2783      39,     0,    31,     8,     9,    10,    11,    12,    13,    14,
     2784      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2785      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
     2786      34,     0,    31,     0,     0,     0,   256,    38,    39,     0,
     2787       0,     0,     0,     0,   634,     0,     0,     0,     0,     0,
     2788       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2789      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
     2790       0,     0,     0,     0,   338,     0,     0,     0,     0,     0,
     2791       0,     0,   634,     0,     0,     8,     9,    10,    11,    12,
     2792      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2793      23,    24,    25,     0,   454,    26,    27,    28,     0,     0,
     2794       0,     0,   110,     0,    31,     8,     9,    10,    11,    12,
     2795      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2796      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2797       0,     0,    34,     0,    31,     0,     0,     0,     0,   206,
     2798      39,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2799      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2800      25,     0,    34,    26,    27,    28,     0,     0,     0,    38,
     2801      39,     0,    31,     0,     0,     0,   269,     0,     0,     0,
     2802       0,     0,     0,     0,   629,     0,     0,     0,     0,     0,
     2803       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2804      34,     0,     0,     0,     0,     0,   599,    38,    39,     0,
     2805       0,     0,     0,     0,   634,     0,     8,     9,    10,    11,
     2806      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2807      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
     2808       0,     0,     0,     0,   338,    31,     0,     0,     0,     0,
     2809       0,     0,   110,     0,     8,     9,    10,    11,    12,    13,
     2810      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2811      24,    25,     0,    34,    26,    27,    28,     0,     0,     0,
     2812      38,    39,     0,    31,     0,     0,     2,   205,     4,     5,
     2813       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2814      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2815       0,    34,    26,    27,    28,     0,     0,    44,   206,    39,
     2816       0,    31,     0,   281,   282,   110,   283,  1063,     0,  1064,
     2817       0,     0,  1065,  1066,  1067,  1068,  1069,  1070,  1071,  1072,
     2818       0,     0,  1549,  1073,     0,     0,     0,  1074,  1075,    34,
     2819      33,    35,   284,    36,     0,     0,    38,    39,   649,     0,
     2820       0,     0,   286,   629,     0,   287,   288,   289,   290,    41,
     2821      42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
     2822     293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2823       0,     0,  -413,     0,     0,   294,     0,   378,     0,     0,
     2824     170,     0,     0,     0,   296,   380,   298,   299,   300,   301,
     2825       0,     0,     0,     0,  1077,     0,   281,   282,  -129,   283,
     2826    1063,     0,  1064,     0,     0,  1065,  1066,  1067,  1068,  1069,
     2827    1070,  1071,  1072,     0,     0,     0,  1073,     0,     0,     0,
     2828    1074,  1075,     0,    33,     0,   284,     0,     0,     0,     0,
     2829       0,   649,     0,     0,     0,   286,     0,     0,   287,   288,
     2830     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2831       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
     2832       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
     2833     378,     0,     0,   170,     0,     0,     0,   296,   380,   298,
     2834     299,   300,   301,     0,     0,     0,     0,  1077,     0,     0,
     2835       0,  -129,     2,   205,     4,     5,     6,     7,     8,     9,
     2836      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2837      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
     2838      28,     0,     0,     0,     0,     0,     0,    31,     0,   281,
     2839     282,     0,   283,  1063,     0,  1064,  1419,  1420,  1065,  1066,
     2840    1067,  1068,  1069,  1070,  1071,  1072,     0,     0,  1549,  1073,
     2841       0,     0,     0,  1074,  1075,    34,    33,    35,   284,    36,
     2842       0,     0,    38,    39,   649,     0,     0,     0,   286,     0,
     2843       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2844       0,     0,     0,     0,  1328,     0,   293,     0,     0,     0,
     2845       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2846       0,   294,     0,   378,     0,     0,   170,     0,     0,     0,
     2847     296,   380,   298,   299,   300,   301,     0,     0,   281,   282,
     2848    1077,   283,  1063,     0,  1064,  1419,  1420,  1065,  1066,  1067,
     2849    1068,  1069,  1070,  1071,  1072,     0,     0,     0,  1073,     0,
     2850       0,     0,  1074,  1075,     0,    33,     0,   284,     0,     0,
     2851       0,     0,     0,   649,     0,     0,     0,   286,     0,     0,
     2852     287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
     2853       0,     0,     0,     0,     0,   293,     0,     0,     0,     0,
     2854       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2855     294,     0,   378,     0,     0,   170,     0,     0,     0,   296,
     2856     380,   298,   299,   300,   301,     0,     0,   281,   282,  1077,
     2857     283,  1063,     0,  1064,     0,     0,  1065,  1066,  1067,  1068,
     2858    1069,  1070,  1071,  1072,     0,     0,     0,  1073,     0,     0,
     2859       0,  1074,  1075,     0,    33,     0,   284,     0,     0,     0,
     2860       0,     0,   649,     0,     0,     0,   286,     0,     0,   287,
     2861     288,   289,   290,    41,    42,     0,   291,   292,     0,     0,
     2862       0,     0,     0,     0,   293,   281,   282,     0,   283,     0,
     2863       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
     2864       0,   378,     0,     0,   170,     0,     0,     0,   296,   380,
     2865     298,   299,   300,   301,   284,     0,     0,     0,  1077,     0,
     2866     285,     0,     0,     0,   286,     0,     0,   287,   288,   289,
     2867     290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
     2868       0,     0,   293,   281,   282,     0,   283,     0,     0,     0,
     2869       0,     0,     0,     0,     0,     0,     0,   294,     0,   378,
     2870       0,     0,   281,   282,     0,   283,   296,   380,   298,   299,
     2871     300,   301,   284,     0,     0,     0,     0,     0,   285,     0,
     2872       0,     0,   286,     0,     0,   287,   288,   289,   290,    41,
     2873      42,   284,   291,   292,     0,     0,     0,   649,     0,     0,
     2874     293,   286,     0,     0,   287,   288,   289,   290,    41,    42,
     2875       0,   291,   292,     0,     0,   294,     0,   378,     0,   293,
     2876     281,   282,     0,   283,   296,   734,   298,   299,   300,   301,
     2877       0,     0,     0,     0,   294,     0,   785,     0,     0,   281,
     2878     282,     0,   283,   296,   380,   298,   299,   300,   301,   284,
     2879       0,     0,     0,     0,     0,   285,     0,     0,     0,   286,
     2880       0,     0,   287,   288,   289,   290,    41,    42,   284,   291,
     2881     292,     0,     0,     0,   285,     0,     0,   293,   286,     0,
     2882       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2883       0,     0,   294,     0,   378,     0,   293,   281,   282,     0,
     2884     283,   296,   827,   298,   299,   300,   301,     0,     0,     0,
     2885       0,   294,     0,     0,     0,     0,   281,   282,     0,   283,
     2886     296,   380,   298,   299,   300,   301,   284,     0,     0,     0,
     2887       0,     0,   285,     0,     0,     0,   286,     0,     0,   287,
     2888     288,   289,   290,    41,    42,   284,   291,   292,     0,     0,
     2889       0,   285,     0,     0,   293,   286,     0,     0,   287,   288,
     2890     289,   290,    41,    42,     0,   291,   292,     0,     0,   518,
     2891       0,     0,     0,   293,     0,     0,     0,     0,   296,   380,
     2892     298,   299,   300,   301,     0,     0,     0,     0,   521,     0,
     2893       0,     0,     0,     0,     0,     0,     0,   296,   380,   298,
     2894     299,   300,   301,   204,     2,   205,     4,     5,     6,     7,
     2895       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2896      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2897      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
     2898       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2899       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2900       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
     2901       0,    36,     0,     0,   206,    39,   474,     2,   205,     4,
     2902       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2903      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2904      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
     2905       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
     2906       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2907       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2908      34,     0,    35,     0,    36,     0,     0,    38,    39,     2,
     2909     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2910      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2911      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2912       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
     2913       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2914       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2915       0,     0,    34,     0,    35,     0,    36,     0,     0,   206,
     2916      39
     2917};
     2918
     2919#define yypact_value_is_default(yystate) \
     2920  ((yystate) == (-1356))
     2921
     2922#define yytable_value_is_error(yytable_value) \
     2923  YYID (0)
     2924
     2925static const yytype_int16 yycheck[] =
     2926{
     2927       0,     1,     0,   184,    43,   698,   115,   184,    43,   184,
     2928      43,   238,    55,   698,     1,   167,   168,   698,   104,   203,
     2929     543,   294,   184,   455,   185,   218,   280,   278,   456,    29,
     2930      30,   656,    32,   184,    32,   348,   611,   184,   520,   185,
     2931     759,   611,     1,    43,   184,    45,  1006,    45,   186,   629,
     2932     499,   579,   609,     0,   503,    55,   902,   999,   462,  1042,
     2933    1043,    61,   105,    61,    64,   108,    64,    67,   154,    67,
     2934     902,   348,   780,    43,    43,   609,   609,    32,    39,    51,
     2935      67,    81,    82,   264,   777,    32,  1419,   264,   609,   264,
     2936    1338,   200,   777,   609,    28,  1055,   777,   529,   723,    63,
     2937      95,  1062,   264,   609,   265,   105,   699,    39,   108,   110,
     2938     417,    82,    43,   264,   699,   115,   117,   264,   109,   265,
     2939    1475,   497,   260,   261,   264,   609,    64,   363,   721,    82,
     2940     437,   367,    39,     0,   612,   130,   721,   109,   445,   110,
     2941     618,  1074,  1075,   344,    78,   184,   146,    82,   146,   184,
     2942     111,   184,   425,   426,   154,  1510,     0,  1512,   111,   159,
     2943    1493,   159,  1043,   425,   426,    32,   107,   227,   132,     0,
     2944       1,   109,   109,   109,   217,   111,   255,   109,    39,   111,
     2945       0,     1,   283,   119,   184,   185,   246,   185,    32,     0,
     2946     131,    39,     0,  1441,    72,   296,   297,    64,    44,    45,
     2947     200,    32,   109,    39,   111,    83,    84,   308,   208,  1142,
     2948     208,   680,    32,    39,   184,   184,   409,   217,   495,   812,
     2949     220,    32,   220,   744,    32,   264,   110,   227,   271,   264,
     2950    1062,   264,   116,    64,   109,   278,    67,   613,   744,   501,
     2951     513,   617,   242,   344,   405,   518,   246,    67,   521,    11,
     2952     250,   251,   250,   184,   132,   341,   131,   511,   520,   405,
     2953     744,   109,   638,   111,   264,   265,   642,   265,     0,   115,
     2954     109,   271,   111,   109,   109,   111,   851,    45,   278,   380,
     2955     119,   851,   839,   109,   370,   111,   395,    82,   489,   110,
     2956     718,   819,   251,   293,   455,   250,   117,   890,   611,    85,
     2957      32,  1009,   575,   250,   347,   839,   839,  1290,  1291,   455,
     2958      45,    43,    82,    45,   423,  1257,    44,    45,   839,   112,
     2959     429,   364,   117,   839,   586,   368,   487,   113,   328,    61,
     2960     328,   114,    64,   839,   293,    67,   116,    82,   417,   109,
     2961      96,   487,   110,  1304,     3,   112,   815,   347,   348,   116,
     2962      44,    45,  1071,   220,     3,   839,   825,   489,   437,   116,
     2963    1241,   597,    72,   841,   364,   110,   445,   123,   368,    82,
     2964      72,   840,   117,    83,    84,   110,    72,   145,     0,   379,
     2965    1226,    83,    84,   250,   691,   978,   114,    83,    84,   220,
     2966     960,   644,   645,   978,  1226,   395,   109,    96,   129,   600,
     2967     131,   111,   959,     0,   640,   405,   250,   405,  1526,   662,
     2968    1291,   255,   109,   513,   146,   515,  1009,   119,   518,   250,
     2969     114,   521,   676,   423,   123,   959,   959,   159,   629,   429,
     2970     250,   431,  1415,   634,  1526,  1553,   132,  1496,    72,   250,
     2971     208,  1021,   250,  1502,   255,   131,   532,  1407,  1408,    83,
     2972      84,   116,   184,   185,  1546,   455,   557,   558,   559,   112,
     2973     460,  1553,   109,   116,  1523,   465,  1059,   132,   116,  1528,
     2974     238,   110,  1304,   208,   474,   471,   208,   111,   117,   479,
     2975     109,   110,   349,   736,   132,   115,   116,   487,   220,   487,
     2976     109,   491,   131,   491,    80,   495,   697,   873,   498,   600,
     2977     500,   131,   270,  1464,   239,   657,   938,   758,   762,   109,
     2978    1471,   643,   644,   645,   946,   474,  1141,   698,   250,   968,
     2979     520,   698,  1004,   698,   928,   111,   109,   113,   666,   297,
     2980     662,   117,   264,   109,  1415,   270,   698,   537,   851,   700,
     2981     540,  1134,   542,   543,   491,   109,  1116,   698,   116,  1134,
     2982     116,   698,  1030,  1031,   700,   664,    72,   110,   698,   294,
     2983     992,   520,   297,  1524,   132,   697,   132,    83,    84,   110,
     2984    1039,  1040,   773,   417,   851,   828,   344,   110,   537,  1423,
     2985     112,   540,   110,   542,   543,  1304,   116,   630,   116,   965,
     2986     590,    30,   110,   437,   830,   111,   328,   597,   834,  1192,
     2987    1193,   445,   132,   646,   736,   110,   417,  1192,  1193,   609,
     2988     696,   611,   691,   480,    90,    91,   348,   119,   661,   643,
     2989     644,   645,   124,   125,   491,   109,   437,   111,  1097,  1098,
     2990     630,   590,  1464,   734,   445,    80,  1132,   116,   662,  1471,
     2991    1136,   773,    81,    82,    72,   112,   646,   491,    76,   116,
     2992     126,   127,   652,   132,   733,    83,    84,   425,   426,   116,
     2993     491,   661,  1381,   663,   664,   665,   111,   110,   113,   116,
     2994     110,   491,   117,   405,  1102,   132,   116,  1521,   489,   780,
     2995     491,   109,  1526,   491,   680,   132,   772,   964,   924,   116,
     2996     115,   119,  1524,   109,   116,   888,   828,   109,   698,   111,
     2997     700,   116,  1546,   109,   663,   132,   665,   119,   116,  1553,
     2998     132,   109,   736,   713,   116,   758,   909,   132,   453,   719,
     2999      64,   456,   110,   455,   132,    68,   827,   462,   116,    72,
     3000     132,   731,    75,   501,    77,    72,    10,    11,    12,    13,
     3001      14,    84,   894,   970,   744,   745,    83,    84,   110,  1468,
     3002      72,  1470,   520,   109,   116,   111,   132,   116,   758,   491,
     3003       3,    83,    84,   495,   631,    39,   112,    10,    11,    12,
     3004      13,    14,   731,   132,   111,   110,   110,   938,   513,   109,
     3005     515,   116,   116,   518,   112,   946,   521,   109,   116,   110,
     3006     598,   132,   938,    67,   112,   116,    39,  1320,   116,   110,
     3007     946,   110,  1271,   242,   828,   116,  1525,   116,   109,  1402,
     3008    1279,  1280,  1281,   109,    45,   111,   110,  1402,   586,   815,
     3009    1021,   110,   116,   112,    67,   110,  1419,   116,   114,   825,
     3010      61,   116,   600,    64,  1419,   110,    67,  1530,   109,   839,
     3011     111,   116,   131,   132,   840,  1530,     1,   691,    72,  1530,
     3012    1034,   851,    76,    72,   114,    74,    75,   724,  1327,    83,
     3013      84,   629,    64,    72,    83,    84,   634,  1103,   211,   132,
     3014     110,   738,   121,   122,    83,    84,   116,   609,  1132,   611,
     3015     691,   132,  1136,  1137,   114,   109,   697,   111,   109,   733,
     3016      45,   109,    72,   111,   894,   119,    76,    88,    89,  1492,
     3017    1493,   901,   902,    83,    84,  1057,   110,  1492,  1493,    82,
     3018    1042,   110,   116,   110,   116,   146,   109,   116,   111,   116,
     3019    1021,   110,   733,   109,   924,   110,   109,   116,   159,   109,
     3020     112,   116,  1205,  1206,   109,  1208,   111,    82,   938,   119,
     3021     379,  1214,   120,   902,  1217,   109,   946,   111,   129,   104,
     3022     564,   565,   566,   567,   185,   110,   109,   159,   111,   128,
     3023    1161,  1062,   773,    94,   964,   832,   698,    72,   700,    74,
     3024      75,    64,    92,    93,    85,    86,    87,   208,    83,    84,
     3025     115,   116,   969,   718,   984,   109,   110,   111,    81,   220,
     3026     145,   116,   117,   993,   109,   110,   111,  1251,   109,   154,
     3027     111,  1001,   113,   114,  1004,   703,  1006,   705,   351,   114,
     3028     353,   111,   744,   745,   131,  1124,   110,   111,   220,    58,
     3029      59,   460,   109,   116,   109,   984,   465,   835,   112,  1161,
     3030     109,   110,   111,   115,   116,   902,   109,   110,   111,   109,
     3031    1241,   112,  1001,  1039,  1040,  1004,   110,  1006,   110,   204,
     3032      58,    59,    60,   208,   110,  1055,   258,   110,   902,   498,
     3033     262,   500,   116,   117,   110,  1065,   159,   110,  1068,  1069,
     3034    1070,   902,   112,  1505,   116,   117,    72,  1178,    74,    75,
     3035      76,   111,   902,   238,   239,  1339,   112,    83,    84,  1343,
     3036     131,   902,   116,  1093,   902,   114,  1055,   328,   441,    44,
     3037      45,  1097,  1098,   109,  1377,   112,  1065,   839,   110,  1068,
     3038    1069,  1070,   110,   109,    72,   270,    74,    75,   273,   851,
     3039    1263,  1264,  1265,  1555,  1124,    83,    84,   220,   112,     4,
     3040       5,     6,     7,     8,     9,  1221,   560,   561,   969,   294,
     3041     112,   112,   297,   562,   563,   568,   569,   349,   112,   969,
     3042     117,   109,     3,    29,   117,   117,   114,  1024,  1290,    10,
     3043      11,    12,    13,    14,    72,   258,    74,    75,    76,   262,
     3044     116,   110,   110,   114,   405,    83,    84,   112,    10,    11,
     3045      12,    13,    14,   117,   115,   110,   341,   115,    39,   344,
     3046     116,  1445,   115,   928,    69,  1062,    71,   109,   116,  1199,
     3047     110,   109,   970,   111,   110,   132,   938,    39,   363,   117,
     3048     110,   119,   367,   652,   946,   370,    67,  1204,  1062,   117,
     3049     110,  1221,    72,   110,    74,    75,  1226,   110,   430,   110,
     3050       3,  1062,   964,    83,    84,    67,   116,    10,    11,    12,
     3051      13,    14,  1062,  1239,     4,     5,     6,     7,     8,     9,
     3052     110,  1062,   110,  1021,  1062,   110,   349,   132,  1245,   115,
     3053      29,   111,   110,  1263,  1264,  1265,    39,  1226,   110,   110,
     3054     425,   426,   110,    33,   713,  1271,   110,   109,   480,   111,
     3055     719,   902,   110,  1279,  1280,  1281,   110,   119,    72,  1398,
     3056      74,    75,    76,   110,    67,   110,   131,   110,   453,    83,
     3057      84,   456,   112,   110,  1263,  1264,  1265,   462,   110,    69,
     3058     115,    71,   110,  1540,    85,    86,    87,   116,   112,   474,
     3059    1320,  1321,   112,   110,     4,     5,     6,     7,     8,     9,
     3060     110,  1327,   110,   471,   116,   116,  1203,   430,   109,   114,
     3061     111,   117,   113,   114,   499,   112,   501,   110,   503,  1530,
     3062    1161,  1338,   116,  1530,  1397,  1530,   110,   116,   513,  1226,
     3063     515,  1320,  1321,   518,   116,   520,   521,  1102,  1530,   110,
     3064    1531,   117,  1203,  1204,   112,  1375,   109,   532,  1378,  1530,
     3065     109,   109,  1226,  1530,  1204,  1531,   109,   480,   109,    69,
     3066    1530,    71,   112,   132,  1555,  1226,  1505,  1397,  1398,   115,
     3067     110,   603,   110,   110,   129,   114,  1226,  1407,  1408,  1555,
     3068      72,   115,    74,    75,  1245,  1226,  1375,   112,  1226,  1378,
     3069     132,    83,    84,  1423,   110,  1245,   116,   112,  1428,   631,
     3070    1241,   586,  1299,   116,   636,   112,    55,  1304,   110,   110,
     3071     110,    47,   597,   112,  1065,   600,  1446,   109,  1407,  1408,
     3072     110,   112,   114,   112,  1441,   894,   112,    53,  1458,   112,
     3073    1304,   112,   901,   115,  1423,   132,   132,   132,  1299,  1428,
     3074     110,   115,   117,  1304,   629,   132,   110,   132,   115,   634,
     3075     112,   112,     0,     1,  1304,   640,   105,  1446,   112,   108,
     3076     112,  1530,   112,  1304,   112,  1530,  1304,  1530,   112,  1458,
     3077      96,   112,   110,   110,   109,  1505,  1506,  1338,   112,   112,
     3078     603,   109,   109,    60,    32,  1515,   110,   110,  1338,   114,
     3079     132,  1521,   724,   112,   112,   117,  1526,    45,   110,   112,
     3080    1530,  1531,   110,  1531,    96,   154,   738,    96,   631,   109,
     3081     109,   696,   680,   636,  1544,   132,  1546,  1506,   115,    67,
     3082    1550,   112,   110,  1553,   993,  1555,  1515,  1555,   110,   110,
     3083     110,  1561,  1521,   718,    51,  1565,    53,  1526,   116,    56,
     3084      57,    58,    72,    60,    74,    75,    76,    42,    72,   117,
     3085      74,    75,    76,    83,    84,  1544,   104,  1546,    75,    83,
     3086      84,  1550,   132,   748,  1553,   132,   192,  1464,   217,   110,
     3087      87,    88,  1561,   110,  1471,  1226,  1565,    96,    96,   109,
     3088    1441,    72,   132,    74,    75,    76,   132,   772,   110,   215,
     3089    1464,  1441,    83,    84,   110,   110,   117,  1471,   146,   225,
     3090     832,   724,   110,  1464,   132,   115,   154,   155,   112,   112,
     3091    1471,   109,   132,   115,  1464,   738,   115,   110,   109,   132,
     3092     111,  1471,   271,  1464,  1093,   110,  1464,  1524,   119,   278,
     3093    1471,   132,    72,  1471,    74,    75,    76,   185,   110,   110,
     3094    1077,   570,   573,    83,    84,   830,   571,   815,   572,   834,
     3095    1524,   574,   200,  1226,    64,   203,   204,   825,  1493,  1565,
     3096     208,  1383,  1343,  1524,    74,  1137,  1314,  1471,   294,   109,
     3097    1321,   111,   840,  1093,  1524,   453,   453,   946,   705,   119,
     3098     465,   229,   948,  1524,   993,   233,  1524,   235,   590,   748,
     3099     894,    10,    11,    12,    13,    14,   244,   758,   347,   658,
     3100    1245,   966,   250,   491,   578,   578,   116,   255,  1473,   832,
     3101    1475,   578,    -1,    -1,    -1,   364,    -1,   265,    -1,   368,
     3102      39,    -1,    -1,    -1,  1375,   273,    -1,  1378,    -1,    -1,
     3103    1199,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   924,
     3104      -1,    -1,  1540,   928,    -1,  1510,    -1,  1512,    67,   159,
     3105      -1,    -1,    -1,    72,    -1,    74,    75,    76,    72,    -1,
     3106      74,    75,    76,    -1,    83,    84,     0,    -1,  1530,    83,
     3107      84,    -1,  1423,    -1,    -1,    -1,    72,  1428,    74,    75,
     3108      76,    -1,   431,   968,   969,   970,    -1,    83,    84,    -1,
     3109     109,    -1,  1024,   341,    -1,   109,   344,   111,    32,    -1,
     3110     119,    -1,   350,    -1,    -1,   119,    -1,  1458,    -1,    -1,
     3111     220,    -1,    -1,   109,    -1,   363,   442,    -1,    -1,   367,
     3112      -1,    -1,   370,   119,    -1,    -1,    -1,   344,   345,    -1,
     3113      -1,    -1,    -1,    67,    -1,    -1,  1021,    -1,    -1,   356,
     3114     357,    10,    11,    12,    13,    14,    -1,    -1,   258,    -1,
     3115     476,    -1,   262,    72,    -1,    74,    75,    76,    -1,    -1,
     3116      -1,    -1,    -1,    -1,    83,    84,    -1,    -1,   278,   417,
     3117      39,  1039,  1040,    -1,    -1,    -1,    26,    27,    28,    -1,
     3118      -1,    -1,    -1,    -1,   432,    -1,    -1,   513,    -1,   437,
     3119     109,    -1,   518,  1544,    -1,   521,    -1,   445,    67,  1550,
     3120     119,  1024,    10,    11,    12,    13,    14,    -1,    -1,    -1,
     3121    1561,    -1,    -1,    -1,  1565,    -1,    -1,  1102,  1103,    -1,
     3122      -1,   155,    -1,   471,    -1,    -1,   474,    -1,    -1,  1097,
     3123    1098,    39,    -1,    -1,    10,    11,    12,    13,    14,   349,
     3124     109,   489,   111,   491,    -1,    -1,    -1,    97,   597,    99,
     3125     119,   499,    -1,    -1,    -1,   503,    -1,    -1,    -1,    67,
     3126      -1,    -1,    -1,    39,    72,    -1,    74,    75,    76,    -1,
     3127      -1,  1203,    -1,    -1,   124,    83,    84,    -1,    -1,    -1,
     3128      -1,   630,    -1,    -1,   532,   533,    -1,    -1,    -1,    -1,
     3129      -1,    67,    -1,    -1,    -1,   229,    72,   646,    74,    75,
     3130      76,   109,    -1,   111,    -1,    -1,    -1,    83,    84,    -1,
     3131      -1,   119,   661,    -1,    -1,    -1,   250,    -1,    -1,    -1,
     3132     430,   255,    -1,    -1,    -1,    10,    11,    12,    13,    14,
     3133     180,   579,    -1,   109,    -1,   111,  1221,   447,   188,    -1,
     3134     190,   191,    -1,   119,    -1,   195,    -1,   197,   198,   597,
     3135     598,    -1,   600,   679,    39,    -1,    -1,    -1,    -1,    -1,
     3136    1245,    -1,   688,   611,    -1,    -1,   692,  1299,    -1,    -1,
     3137     480,  1239,    -1,    10,    11,    12,    13,    14,    -1,    -1,
     3138    1203,   629,    67,    -1,    -1,    -1,   634,    72,    -1,    74,
     3139      75,    76,   640,    -1,    -1,   643,   644,   645,    83,    84,
     3140      -1,    -1,    39,  1271,    -1,    -1,    -1,    -1,    -1,   758,
     3141      -1,  1279,  1280,  1281,   662,    -1,   350,   267,    -1,    -1,
     3142      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
     3143      67,    -1,   680,    -1,   119,    72,    -1,    74,    75,    76,
     3144      -1,    -1,    -1,   691,    -1,    -1,    83,    84,   696,   697,
     3145      -1,    -1,   700,  1338,    -1,    -1,    -1,    -1,    -1,  1327,
     3146      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
     3147      -1,    -1,   109,    -1,    -1,    -1,  1299,    -1,    -1,    -1,
     3148      -1,    -1,   119,   417,    -1,   733,    -1,    -1,   736,    -1,
     3149      -1,    39,    -1,   603,    -1,    -1,    -1,   745,   432,    -1,
     3150     748,    -1,    -1,   437,    -1,    -1,    -1,    -1,   725,    -1,
     3151     727,   445,    -1,    -1,    -1,    -1,    -1,   734,   735,    67,
     3152      -1,   631,   739,    -1,   772,   773,   636,    -1,    -1,    -1,
     3153     778,    -1,    -1,    -1,   751,    -1,    -1,   471,    -1,   756,
     3154      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
     3155      -1,    -1,    -1,    -1,    -1,   489,  1441,   491,    -1,    -1,
     3156      -1,   109,    -1,   111,    -1,   782,    -1,   815,    -1,    -1,
     3157      -1,   119,    -1,    -1,   131,   924,    -1,   825,    -1,    -1,
     3158     828,    -1,   830,    -1,    -1,   833,   834,   835,  1473,    -1,
     3159    1475,    -1,   840,    -1,    -1,    -1,    -1,    -1,    -1,   533,
     3160     926,    -1,   850,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3161     827,    -1,    -1,    -1,   724,    -1,    -1,    -1,    -1,    -1,
     3162      -1,    -1,    -1,    -1,    -1,  1510,    -1,  1512,   738,    -1,
     3163      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3164      20,    21,    22,    23,    24,    25,    26,    27,   758,    -1,
     3165      30,    31,    32,    -1,   902,  1540,    -1,    -1,    -1,    39,
     3166      -1,    -1,    -1,    -1,   598,    -1,    -1,   884,   885,   886,
     3167     887,    -1,   889,    -1,    -1,    -1,   924,    -1,    10,    11,
     3168      12,    13,    14,    -1,    -1,    -1,     0,    67,   905,    -1,
     3169      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
     3170      -1,    -1,   919,    83,    84,    -1,    -1,    39,    -1,   643,
     3171     644,   645,   960,    -1,    -1,    -1,    -1,    -1,    32,    -1,
     3172     968,   969,   832,    -1,    -1,    -1,    -1,    -1,   662,   109,
     3173      -1,   111,   582,   583,    -1,    67,    -1,    -1,   986,   119,
     3174      72,   958,    -1,    -1,    76,    -1,   680,  1073,    -1,    -1,
     3175      -1,    83,    84,    67,    -1,    -1,    -1,   691,    -1,    -1,
     3176      -1,    -1,   612,   697,    -1,   615,   616,    -1,   618,    -1,
     3177     620,   621,    -1,  1021,    -1,   625,   626,   109,    -1,    -1,
     3178      -1,   998,    -1,    -1,    -1,    -1,  1034,   119,  1005,    -1,
     3179      -1,  1039,  1040,  1010,  1042,  1043,    -1,    -1,  1015,   733,
     3180    1017,    -1,   736,    -1,  1021,  1022,  1023,    -1,    -1,  1026,
     3181      -1,    -1,    -1,    -1,  1062,    -1,    -1,    -1,  1035,    -1,
     3182      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
     3183      -1,    -1,    -1,    -1,    -1,    -1,  1053,  1054,    -1,   773,
     3184      -1,   155,    -1,    -1,    -1,     0,    -1,    -1,    -1,  1097,
     3185    1098,    39,    -1,    -1,   704,  1103,    -1,    -1,    -1,   709,
     3186     710,    -1,    -1,  1080,    -1,   715,  1083,    -1,    -1,    -1,
     3187      -1,    -1,  1221,    -1,    -1,    -1,    -1,    32,    -1,    67,
     3188      -1,   815,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
     3189      -1,   825,    -1,    -1,   828,    83,    84,    -1,    -1,   833,
     3190      -1,   835,    -1,    -1,  1121,    -1,   840,    -1,    -1,    -1,
     3191    1127,  1128,    67,  1161,  1024,    -1,    -1,    -1,    -1,    -1,
     3192      -1,   109,  1139,    -1,    -1,    -1,    -1,  1144,    -1,    -1,
     3193    1147,   119,  1149,    -1,    -1,  1152,   250,    -1,    -1,    -1,
     3194      -1,   255,   188,    -1,    -1,    -1,    -1,    -1,  1165,   195,
     3195      -1,    -1,    -1,    -1,    -1,    -1,  1204,    -1,    -1,    -1,
     3196      -1,  1178,     0,  1180,  1181,  1182,  1183,    -1,   902,    -1,
     3197      -1,    -1,    -1,  1221,    -1,    -1,    -1,    -1,  1226,  1196,
     3198      -1,  1198,    -1,    -1,    -1,  1202,    -1,  1313,    -1,    -1,
     3199      -1,  1239,    -1,  1241,    32,     0,     1,  1245,    -1,    -1,
     3200     155,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3201      -1,    -1,    -1,    -1,  1231,  1232,    -1,    -1,    -1,    -1,
     3202      -1,   267,    -1,  1271,    -1,    -1,    -1,    32,    -1,    67,
     3203      -1,  1279,  1280,  1281,    -1,    -1,   350,    -1,    -1,    -1,
     3204      -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,  1397,    -1,
     3205      -1,    -1,   986,    -1,    -1,    -1,  1304,    -1,    -1,    64,
     3206      -1,    -1,    67,    -1,    -1,  1282,  1283,    -1,    -1,    -1,
     3207      -1,    -1,    -1,    -1,    -1,  1292,    -1,   323,    -1,  1327,
     3208      -1,    -1,    -1,    -1,    -1,   331,    -1,    -1,   334,    -1,
     3209    1338,    -1,    -1,  1203,    -1,   250,    -1,    -1,    -1,    -1,
     3210     255,    -1,    -1,   417,    -1,  1039,  1040,    -1,  1042,  1043,
     3211      -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,   432,    -1,
     3212      -1,    -1,    -1,   437,    -1,    -1,    -1,  1344,  1062,    -1,
     3213      -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1356,
     3214      -1,  1358,  1359,  1360,    -1,    -1,  1472,    -1,  1474,    -1,
     3215     155,   397,    -1,  1370,    -1,   401,    -1,   471,    -1,    -1,
     3216      -1,    -1,  1379,  1097,  1098,    -1,    -1,  1415,    -1,    -1,
     3217      -1,    -1,    -1,    -1,    -1,   489,    -1,   491,  1395,    -1,
     3218      -1,    -1,    -1,  1509,    -1,  1511,    -1,    -1,    -1,  1299,
     3219      -1,    -1,    -1,  1441,    -1,   350,    -1,    -1,    -1,    -1,
     3220      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3221      -1,    -1,   250,    -1,    -1,   220,  1464,   255,    -1,   533,
     3222      -1,    -1,    -1,  1471,    -1,    -1,    -1,  1161,  1554,    -1,
     3223    1556,    -1,    -1,    -1,  1451,  1452,    -1,    -1,    -1,    -1,
     3224     486,    -1,    -1,  1569,  1570,   250,    -1,  1464,    -1,  1099,
     3225      -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,    -1,    -1,
     3226      -1,    -1,   417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3227    1204,    -1,    -1,    -1,    -1,    -1,  1524,   432,    -1,    -1,
     3228      -1,    -1,   437,  1531,   598,    -1,    -1,  1504,    -1,    -1,
     3229     445,  1508,  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3230      -1,    -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,
     3231      -1,    -1,   350,    -1,    -1,    -1,   471,    -1,    -1,    -1,
     3232    1537,    -1,  1539,    -1,    -1,    -1,    -1,    -1,    -1,   643,
     3233     644,   645,   578,   579,   489,    -1,   491,  1271,    -1,    -1,
     3234      -1,    -1,    -1,    -1,    -1,  1279,  1280,  1281,   662,    -1,
     3235    1567,  1568,    -1,    -1,    -1,    -1,  1290,  1291,  1575,  1576,
     3236      -1,    -1,    -1,    -1,    -1,    -1,   680,    -1,    -1,    -1,
     3237    1304,    -1,    -1,  1223,    -1,    -1,    -1,   691,   533,   417,
     3238      -1,    -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,
     3239      -1,    -1,    -1,  1327,   432,    -1,    -1,    -1,    -1,   437,
     3240      -1,    -1,    -1,    -1,    -1,    -1,    -1,   445,    -1,    -1,
     3241      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   733,
     3242      -1,   667,   736,    -1,    -1,   671,    -1,   432,    -1,    -1,
     3243      -1,    -1,    -1,   471,    -1,    -1,    -1,    -1,    -1,    -1,
     3244      -1,    -1,    -1,   598,    -1,    -1,    -1,    -1,    -1,    -1,
     3245      -1,   489,    -1,   491,    -1,    -1,    -1,    -1,   704,   773,
     3246      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3247      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3248      27,  1415,    -1,    -1,    -1,    -1,   491,    -1,   643,   644,
     3249     645,    -1,    39,    -1,    -1,   533,    -1,    -1,    -1,    -1,
     3250      -1,   815,    -1,    -1,    -1,    -1,    -1,   662,    -1,    -1,
     3251      -1,   825,    -1,    -1,   828,    -1,    -1,    -1,    -1,   833,
     3252      67,   835,    -1,    -1,    -1,   680,   840,    -1,   533,    -1,
     3253    1464,    -1,    -1,    -1,    -1,    -1,   691,  1471,    -1,    -1,
     3254      -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3255      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3256     598,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3257      -1,    -1,    -1,   819,    -1,    -1,    -1,    -1,   733,    -1,
     3258      -1,   736,    -1,    -1,    -1,    26,    27,    28,   902,    -1,
     3259    1524,    -1,    -1,   598,    -1,    -1,    -1,    -1,    -1,    -1,
     3260      -1,    -1,    -1,    -1,    -1,   643,   644,   645,    -1,    -1,
     3261      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   773,    -1,
     3262      -1,    -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,    -1,
     3263      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   643,   644,
     3264     645,    -1,   680,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3265      -1,    -1,    -1,   691,    -1,    -1,    97,   662,    99,   697,
     3266     815,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3267     825,    -1,   986,   828,    -1,    -1,    -1,    -1,   833,    -1,
     3268     835,    -1,    -1,    -1,    -1,   840,   932,    -1,    -1,    -1,
     3269      -1,    -1,    -1,    -1,    -1,   733,    -1,    -1,   736,     4,
     3270       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3271      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3272      25,    26,    27,    -1,    -1,  1039,  1040,    -1,  1042,  1043,
     3273      -1,   736,    -1,    -1,    39,   773,    -1,    -1,    -1,   180,
     3274      -1,    -1,    -1,    -1,    -1,    -1,    -1,   902,  1062,   190,
     3275     191,    -1,    -1,    -1,   195,    -1,   197,   198,    -1,    -1,
     3276      -1,    -1,    67,    -1,    69,  1011,    71,    72,    -1,    74,
     3277      75,    76,    -1,    -1,    -1,    -1,    -1,   815,    83,    84,
     3278      -1,  1027,    -1,  1097,  1098,    -1,    -1,   825,    -1,    -1,
     3279     828,    -1,    -1,    -1,    -1,   833,    -1,   835,    -1,    -1,
     3280      -1,    -1,   840,    -1,    10,    11,    12,    13,    14,    15,
     3281      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3282      26,    27,    28,   828,    30,    31,    32,    -1,    -1,    -1,
     3283     835,   986,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
     3284      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1161,    -1,    -1,
     3285      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1104,    -1,
     3286      -1,    67,    -1,    -1,   902,    -1,    72,    -1,    74,    75,
     3287      76,    -1,    78,    -1,    -1,    -1,    -1,    83,    84,    -1,
     3288      -1,    -1,    -1,    -1,  1039,  1040,    -1,  1042,  1043,    -1,
     3289    1204,    -1,    -1,    -1,    -1,    -1,    -1,   902,    -1,    -1,
     3290      -1,    -1,    -1,   109,    -1,   111,    -1,  1062,    -1,    -1,
     3291      -1,    -1,  1226,   119,    -1,    45,    -1,    -1,    -1,    -1,
     3292      -1,    -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,
     3293      -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,
     3294      -1,    -1,  1097,  1098,    -1,    -1,    -1,    -1,   986,    -1,
     3295      37,    38,    -1,    40,    -1,    -1,    -1,  1271,    -1,    -1,
     3296      -1,    -1,    -1,    -1,   969,  1279,  1280,  1281,    -1,    -1,
     3297      -1,    -1,    -1,    -1,    -1,    -1,  1290,  1291,    -1,    66,
     3298     110,   986,    -1,    -1,    -1,    72,   116,    -1,    -1,    76,
     3299    1304,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
     3300      87,  1039,  1040,    -1,  1042,  1043,  1161,    94,    -1,    -1,
     3301      -1,    -1,    -1,  1327,    -1,   145,    -1,    -1,    -1,    -1,
     3302      -1,    -1,   109,    -1,  1062,   155,    -1,    -1,    -1,   159,
     3303      -1,   118,   119,   120,   121,   122,   123,  1042,  1043,    -1,
     3304      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1204,
     3305      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1062,    -1,  1097,
     3306    1098,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3307      -1,  1226,    -1,    -1,    -1,    -1,    -1,    -1,   208,    -1,
     3308      -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,    -1,
     3309     220,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3310      -1,  1415,    -1,    -1,    -1,    -1,    -1,    -1,   238,   239,
     3311      -1,    -1,    -1,    -1,    -1,    -1,  1271,    -1,    -1,    -1,
     3312      -1,    -1,    -1,  1161,  1279,  1280,  1281,    -1,    -1,    -1,
     3313      -1,    -1,   262,    -1,    -1,  1290,  1291,    -1,    -1,    -1,
     3314     270,   582,   583,    -1,    -1,    -1,    -1,    -1,    -1,  1304,
     3315    1464,    -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,    -1,
     3316      -1,    -1,    -1,    -1,   294,    -1,  1204,   297,    -1,    -1,
     3317      -1,   612,  1327,    -1,   615,   616,    -1,   618,    -1,   620,
     3318     621,    -1,    -1,    -1,   625,   626,    -1,    -1,  1226,    -1,
     3319      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1203,  1204,
     3320      -1,  1239,    -1,  1241,    -1,    -1,    -1,    -1,    -1,    -1,
     3321    1524,    -1,    -1,    -1,   344,    -1,    -1,    -1,    -1,   349,
     3322      -1,  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3323      -1,    -1,    -1,  1271,    -1,    -1,    64,    -1,    -1,    -1,
     3324    1245,  1279,  1280,  1281,    -1,    -1,    74,    -1,    76,    -1,
     3325      78,    -1,  1290,  1291,    -1,    -1,    -1,    85,    -1,    -1,
     3326    1415,    -1,    -1,    -1,    -1,    -1,  1304,    -1,   709,   710,
     3327      -1,    -1,    -1,    -1,   715,    -1,    -1,    -1,    -1,    -1,
     3328      -1,    -1,    -1,    -1,    -1,  1290,  1291,    -1,   116,  1327,
     3329     118,   119,   120,    -1,  1299,   425,   426,    -1,    -1,  1304,
     3330      -1,    -1,   432,    -1,    -1,    -1,    -1,    -1,    -1,  1464,
     3331      -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,
     3332      -1,    -1,    -1,   453,    -1,    -1,   456,    -1,    -1,    -1,
     3333      -1,   159,   462,  1338,     3,     4,     5,     6,     7,     8,
    21053334       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2106       19,    20,    21,    22,    23,    24,    75,     0,    25,    26,
    2107       27,     0,   453,     0,   351,   351,   946,    30,     0,     0,
    2108      109,     0,     0,     0,     0,     0,     0,     0,    77,     0,
    2109        0,     0,  1236,     0,     0,     0,     0,     0,     0,     0,
    2110        0,   353,   353,   354,     0,    33,     0,     0,    77,     0,
    2111       36,     0,    37,    38,    39,    84,    77,     0,     0,     0,
    2112        0,    40,    41,     0,     0,     0,     0,     0,     0,     0,
    2113      361,     0,     0,     0,     0,    84,   346,     0,   351,     0,
    2114        0,     0,   354,    84,     0,     0,     0,    42,     0,   155,
    2115        0,     0,     0,     0,     0,     0,     0,    44,     0,     0,
    2116      354,     0,    77,     0,     0,   353,     0,     0,     0,   361,
    2117        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2118        0,   220,     0,     0,     0,     0,     0,   361,     0,    84,
    2119        0,     0,     0,     0,     0,    54,     0,     0,     0,     0,
    2120        0,     0,     0,    72,   354,     0,     0,     0,   221,     0,
    2121        0,     0,     0,     0,     0,     0,   351,     0,   351,     0,
    2122        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2123       75,   361,     0,     0,     0,     0,     0,   346,     0,     0,
    2124        0,     0,     0,   353,     0,   353,     0,     0,   351,     0,
    2125        0,     0,     0,     0,     0,     0,   351,   351,   351,     0,
    2126        0,     0,     0,     0,     0,     0,     0,   351,   351,   354,
    2127        0,     0,     0,     0,     0,   353,     0,     0,     0,     0,
    2128        0,    72,     0,   353,   353,   353,     0,     0,     0,     0,
    2129        0,     0,     0,     0,   353,   353,   361,     0,     0,     0,
    2130        0,     0,   346,     0,   351,     0,     0,     0,    75,     0,
    2131        0,     0,     0,     0,   354,   354,   354,     0,     0,     0,
    2132        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2133        0,   353,     0,   354,     0,     0,     0,     0,     0,   124,
    2134        0,   361,   361,   361,     0,     0,     0,   346,   346,   346,
    2135        0,   354,     0,     0,     0,     0,     0,     0,     0,     0,
    2136      361,     0,    77,     0,     0,     0,   346,     0,   354,     0,
    2137        0,     0,     0,     0,     0,     0,     0,     0,   361,  1033,
    2138        0,     0,     8,     9,    10,    11,    12,     0,     0,    84,
    2139        0,     0,   351,     0,     0,   361,     0,     0,     0,     0,
    2140        0,     0,     0,     0,    77,     0,     0,   354,   280,   281,
    2141       30,   282,     0,     0,     0,     0,     0,     0,     0,   353,
    2142        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2143        0,    84,     0,     0,   361,     0,     0,   283,    33,     0,
    2144      346,    72,     0,   284,   354,     0,     0,   285,    72,     0,
    2145      286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
    2146        0,     0,     0,   124,     0,   292,     0,     0,    75,     0,
    2147        0,   361,     0,     0,     0,    75,     0,     0,     0,     0,
    2148      293,     0,   377,     0,     0,     0,   354,     0,     0,   295,
    2149      826,   297,   298,   299,   300,     0,   354,     0,     0,   354,
    2150        0,    72,     0,     0,   222,     0,   354,     0,     0,     0,
    2151        0,   354,     0,   361,     0,     0,     0,     0,     0,     0,
    2152        0,     0,     0,   361,     0,     0,   361,     0,    75,     0,
    2153        0,   223,   346,   361,     0,     0,     0,     0,   361,   346,
    2154        0,     0,     0,     0,     0,  -516,     0,     0,     1,     2,
     3335      19,    20,    21,    22,    23,    24,    25,    26,    27,   489,
     3336      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,  1524,
     3337      39,   501,    -1,    -1,    -1,    -1,    -1,  1415,    -1,    -1,
     3338      -1,    -1,    44,   513,    -1,   515,    -1,    -1,   518,    -1,
     3339     520,   521,   220,    -1,   222,   223,   224,    -1,    67,    -1,
     3340      69,    -1,    71,   533,    -1,    74,    75,    -1,    -1,    -1,
     3341    1415,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3342      -1,    -1,    -1,    -1,    -1,    -1,  1464,    -1,    90,    -1,
     3343     258,    -1,    -1,  1471,   262,    -1,  1441,    -1,   100,    -1,
     3344      -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,    -1,
     3345     278,    -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,  1464,
     3346      -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,   598,    -1,
     3347     600,    -1,    -1,   603,    -1,    -1,    -1,    -1,    -1,    -1,
     3348      -1,    -1,    -1,    -1,    -1,    -1,  1524,    -1,    -1,    -1,
     3349      -1,    -1,    -1,    -1,   156,    -1,    -1,    -1,    -1,   629,
     3350     328,    -1,    -1,    -1,   634,    -1,    -1,    -1,   170,    -1,
     3351      -1,    -1,    -1,   643,   644,   645,    -1,    -1,    -1,  1524,
     3352      -1,   349,    -1,    -1,    -1,    -1,   354,   355,    -1,    -1,
     3353      -1,   193,   662,    -1,   362,    -1,    -1,    -1,    -1,    -1,
     3354      -1,    -1,    -1,    -1,    -1,   207,    -1,    -1,    -1,    -1,
     3355      -1,    -1,     7,    -1,   216,    10,    11,    12,    13,    14,
     3356      -1,    -1,    -1,    -1,   226,    -1,    -1,   697,    -1,    -1,
     3357      -1,    -1,    -1,    -1,    -1,    -1,    -1,   405,    -1,    -1,
     3358      -1,    -1,    37,    38,    39,    40,    -1,    -1,   718,   251,
     3359      -1,    -1,    -1,    -1,   256,   423,    -1,    -1,    -1,    -1,
     3360     428,    -1,   430,    -1,    -1,    -1,   736,   269,   738,    -1,
     3361      -1,    66,    67,   275,    -1,   277,    -1,    72,    -1,   447,
     3362      -1,    76,   450,   451,    79,    80,    81,    82,    83,    84,
     3363      -1,    86,    87,   295,    -1,    -1,    -1,    -1,   466,    94,
     3364      -1,    -1,    -1,   773,    -1,    -1,    -1,    -1,    -1,    -1,
     3365      -1,    -1,   480,    -1,   109,    -1,   111,    -1,  1099,   487,
     3366      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
     3367      -1,    -1,    -1,    -1,    -1,    -1,   338,    -1,    -1,    -1,
     3368      -1,   343,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3369      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   828,    -1,
     3370      -1,    -1,   832,    -1,    -1,   835,    -1,    -1,    -1,   371,
     3371      -1,    -1,    -1,   375,   376,    -1,   378,    -1,    -1,    -1,
     3372      -1,    -1,    -1,   385,   386,    -1,   388,   389,    -1,   391,
     3373      -1,   393,    -1,    -1,    -1,    -1,    -1,     7,    -1,    -1,
     3374      10,    11,    12,    13,    14,    -1,    -1,    -1,   410,    -1,
     3375      -1,    -1,    -1,    -1,    -1,    -1,   418,    -1,    -1,    -1,
     3376      -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    39,
     3377      40,    -1,    -1,    -1,    -1,   603,    -1,    -1,    -1,    -1,
     3378      -1,   443,  1223,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3379      -1,    -1,   454,    -1,    -1,    -1,    66,    67,   928,    -1,
     3380      -1,    -1,    72,   631,    -1,    -1,    76,    -1,   636,    79,
     3381      80,    81,    82,    83,    84,   477,    86,    87,    -1,    -1,
     3382      -1,   483,    -1,    -1,    94,    -1,   488,    -1,    -1,    -1,
     3383      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
     3384     970,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
     3385     120,   121,   122,   123,    -1,    -1,   986,    -1,    -1,    -1,
     3386      -1,    -1,    -1,   525,    -1,    -1,    -1,    -1,    -1,    -1,
     3387      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   541,
     3388      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3389      -1,  1021,    -1,    -1,    -1,    -1,   724,    -1,    -1,    -1,
     3390      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3391     738,    -1,  1042,  1043,    -1,    -1,   578,    -1,    -1,    -1,
     3392      -1,    -1,    -1,    -1,    -1,   587,    -1,    -1,    -1,    -1,
     3393     758,    -1,   594,    -1,    -1,    37,    38,   599,    40,    -1,
     3394      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   610,    -1,
     3395      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3396      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
     3397      72,    -1,  1102,    -1,    76,    -1,    -1,    79,    80,    81,
     3398      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,   651,
     3399      -1,   819,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3400      -1,    -1,    -1,    -1,   832,    -1,    -1,   109,    -1,   111,
     3401      -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,
     3402     122,   123,    -1,   851,    -1,   687,    -1,    -1,    -1,    -1,
     3403      -1,  1161,    -1,    -1,     3,     4,     5,     6,     7,     8,
     3404       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3405      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3406      -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,
     3407      39,    40,    -1,  1203,    -1,    -1,    -1,    -1,    -1,    -1,
     3408     742,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3409     752,   753,    -1,    -1,    -1,    64,    -1,    -1,    67,    -1,
     3410      69,    -1,    71,    72,   766,    74,    75,    76,    -1,    -1,
     3411     938,  1241,   154,   155,    83,    84,    -1,    -1,    -1,    -1,
     3412      -1,   783,    -1,   785,    -1,    -1,    -1,   789,    -1,    -1,
     3413      -1,    -1,    -1,    -1,    -1,    -1,   964,    -1,    -1,    -1,
     3414     109,    -1,   111,    -1,    -1,    -1,   188,    -1,    -1,    -1,
     3415     119,    -1,    -1,   195,    -1,    -1,    -1,    -1,    -1,    -1,
     3416    1290,  1291,    -1,    -1,   992,    -1,    -1,    -1,    -1,  1299,
     3417      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3418      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3419      30,    31,    32,   855,    -1,    -1,  1024,    -1,    -1,    39,
     3420     862,    -1,    -1,    -1,    -1,    -1,    -1,  1035,    -1,    -1,
     3421      -1,    -1,    -1,   875,    -1,   877,    -1,    -1,    -1,    -1,
     3422      -1,    -1,    -1,    -1,    -1,   267,    -1,    67,    -1,   891,
     3423      -1,    -1,    72,    -1,    74,    75,   898,    -1,    -1,    -1,
     3424      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,   910,    -1,
     3425      -1,   913,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3426      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   931,
     3427      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3428      -1,   323,    -1,    -1,    -1,  1415,    -1,    -1,  1116,   331,
     3429     332,    -1,   334,   335,    -1,    -1,    -1,    -1,    -1,    -1,
     3430      -1,    -1,   344,    -1,    -1,    -1,   348,    -1,    -1,    -1,
     3431      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3432      -1,    -1,    -1,    -1,    -1,   367,    -1,    -1,   370,    -1,
     3433      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3434      -1,    -1,    -1,  1473,    -1,  1475,    -1,    -1,    -1,    -1,
     3435      37,    38,    -1,    40,    -1,   397,    -1,    -1,  1020,   401,
     3436      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3437      -1,    -1,    -1,    -1,    -1,  1203,    -1,    -1,    -1,    66,
     3438    1510,   145,  1512,    -1,    -1,    72,    -1,    74,    75,    76,
     3439     432,   155,    79,    80,    81,    82,    83,    84,    -1,    86,
     3440      87,    -1,    -1,   167,   168,    -1,    -1,    94,    -1,    -1,
     3441    1540,    -1,    -1,   455,  1076,    -1,    -1,    -1,    -1,    -1,
     3442      -1,  1083,   109,    -1,   111,    -1,   113,   114,    -1,    -1,
     3443      -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
     3444      -1,    -1,    -1,    -1,   486,    -1,    -1,   489,    -1,    -1,
     3445    1112,    -1,    -1,    -1,    -1,  1117,    -1,    -1,    -1,    -1,
     3446      -1,    -1,    -1,  1125,    -1,    -1,    -1,    -1,    -1,    -1,
     3447      -1,  1299,    -1,    -1,   238,    -1,    -1,    -1,    -1,    -1,
     3448      -1,    -1,    -1,    -1,    -1,    -1,    -1,   529,    -1,    -1,
     3449     532,   533,    -1,    -1,  1156,    -1,    -1,    -1,    -1,   263,
     3450      -1,    -1,    -1,    -1,    -1,    -1,  1168,    -1,    -1,  1171,
     3451      -1,  1173,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3452      -1,    -1,    -1,    -1,    -1,  1187,  1188,    -1,    -1,    -1,
     3453      -1,    -1,    -1,    -1,    -1,    -1,   578,   579,    -1,    -1,
     3454      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1209,    -1,    -1,
     3455      -1,    -1,    -1,    -1,    -1,   597,   598,    -1,   600,    -1,
     3456      -1,    -1,    -1,    -1,    -1,    -1,    -1,   609,    -1,   611,
     3457     612,    -1,    -1,    -1,  1236,    -1,   618,    -1,    -1,   281,
     3458      -1,   283,   284,    -1,    -1,    -1,   628,   629,    -1,   291,
     3459     292,    -1,   634,    -1,   296,   297,    -1,    -1,    -1,    -1,
     3460      -1,   643,   644,   645,    -1,    -1,   308,    -1,    -1,    -1,
     3461      -1,    -1,    -1,    -1,    -1,   379,    -1,    -1,    -1,    -1,
     3462     662,    -1,    -1,    -1,    -1,   667,   668,    -1,    -1,   671,
     3463     672,    -1,    -1,    -1,    -1,    -1,   678,    -1,    -1,    -1,
     3464      -1,    -1,   344,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3465      -1,    -1,    -1,    -1,   696,   697,   698,    -1,   700,    -1,
     3466      -1,    -1,   704,    -1,    -1,    -1,    -1,    -1,    -1,    37,
     3467      38,  1333,    40,  1335,    -1,    -1,    -1,    -1,   380,    -1,
     3468      -1,    -1,    -1,    -1,    -1,    -1,  1348,    -1,  1350,    -1,
     3469      -1,    -1,    -1,    -1,   736,   737,    -1,    -1,    66,    -1,
     3470      -1,    -1,    -1,    -1,    72,    -1,  1368,    -1,    76,    -1,
     3471      -1,    79,    80,    81,    82,    83,    84,   481,    86,    87,
     3472      -1,    -1,  1384,  1385,    -1,    -1,    94,  1555,    -1,    -1,
     3473     772,   773,    -1,    -1,  1396,   777,   778,  1399,    -1,    -1,
     3474      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,
     3475     118,   119,   120,   121,   122,   123,   520,    -1,    -1,  1421,
     3476      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1430,   533,
     3477      -1,  1433,    -1,  1435,  1436,  1437,   540,   819,    -1,   543,
     3478      -1,    -1,    -1,    -1,    -1,    -1,   828,    -1,    -1,    -1,
     3479     554,   555,   834,   835,    -1,    -1,    -1,   839,    -1,   841,
     3480      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   851,
     3481      -1,    -1,   576,    -1,    -1,  1477,    -1,  1479,    -1,    -1,
     3482    1482,    -1,   586,    -1,    -1,    -1,    -1,    -1,    -1,   593,
     3483      -1,    -1,    -1,    -1,   598,  1497,    -1,    -1,    -1,    -1,
     3484      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3485      -1,    -1,    -1,    -1,    -1,   557,   558,   559,   560,   561,
     3486     562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
     3487     572,   573,   574,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3488      -1,    -1,   924,    -1,   648,    -1,    -1,    -1,    -1,    -1,
     3489     932,    -1,    -1,   657,    -1,    -1,   938,    -1,   600,    -1,
     3490      -1,    -1,    -1,    -1,   946,    -1,    -1,    -1,    -1,    -1,
     3491      -1,    -1,    -1,    -1,    -1,    -1,    -1,   959,   960,    -1,
     3492      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3493      -1,    -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,
     3494      -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,    -1,    -1,
     3495     992,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3496      19,    20,    21,    22,    23,    24,    25,    26,    27,  1011,
     3497    1012,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,  1021,
     3498      39,    40,    -1,    -1,    -1,  1027,  1028,    -1,  1030,  1031,
     3499    1032,    -1,    -1,    -1,    -1,    -1,    -1,   699,    -1,    -1,
     3500    1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,    67,   773,
     3501      -1,   775,    -1,    -1,    -1,    74,    75,   781,    -1,   721,
     3502      -1,    -1,    -1,    -1,   788,    -1,    -1,    -1,    -1,    -1,
     3503      -1,    -1,   734,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3504      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3505      -1,    -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,
     3506     119,  1103,  1104,  1105,    -1,    -1,    -1,    -1,   832,   833,
     3507      -1,   835,    -1,    -1,  1116,    -1,    -1,    -1,   780,    -1,
     3508      -1,    -1,    -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,
     3509      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3510      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3511     812,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1161,
     3512      -1,    -1,    -1,    -1,    -1,   827,   890,    -1,    -1,    -1,
     3513     894,    -1,    -1,     0,    -1,    -1,     3,     4,     5,     6,
     3514       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     3515      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3516      27,    -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,
     3517      -1,    -1,    39,    40,    -1,    -1,    -1,    -1,    -1,  1221,
     3518      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3519      -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,  1241,
     3520      67,    -1,    69,    -1,    71,    72,   970,    74,    75,    76,
     3521      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
     3522      -1,    -1,   986,   987,    -1,    -1,    -1,    -1,    -1,   993,
     3523      -1,    -1,    -1,    -1,    -1,   999,    -1,    -1,  1002,    -1,
     3524    1004,    -1,   109,    -1,   111,    -1,    -1,    -1,  1290,  1291,
     3525      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3526    1024,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3527      -1,  1035,    -1,    -1,    -1,    -1,   978,    -1,    -1,    -1,
     3528      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3529      -1,    -1,    -1,  1057,    -1,  1059,    -1,    -1,    -1,    -1,
     3530      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1009,    -1,    -1,
     3531    1074,  1075,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1021,
     3532      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3533      -1,  1095,    -1,    -1,     3,     4,     5,     6,     7,     8,
     3534       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3535      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3536    1062,    30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,
     3537      39,    40,    -1,  1415,    -1,    -1,    -1,    -1,  1142,    -1,
     3538      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3539      -1,    -1,    -1,    -1,    -1,    64,    -1,  1161,    67,    -1,
     3540      69,    -1,    71,    72,    -1,    74,    75,    76,    -1,    -1,
     3541      -1,    -1,  1176,  1177,    83,    84,    -1,    -1,    -1,    -1,
     3542      -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
     3543      -1,    -1,  1134,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3544     109,    -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,
     3545     119,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
     3546      -1,    76,    -1,  1505,    79,    80,    81,    82,    83,    84,
     3547      -1,    86,    87,    -1,    -1,    -1,  1178,    -1,    -1,    94,
     3548      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1530,  1531,
     3549    1192,  1193,    -1,  1257,   109,    -1,   111,    -1,    -1,    -1,
     3550      -1,   116,    -1,   118,   119,   120,   121,   122,   123,    -1,
     3551      -1,    -1,    -1,  1555,    -1,     3,     4,     5,     6,     7,
     3552       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3553      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3554      -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    37,
     3555      38,    39,    40,    41,  1318,    43,  1320,    -1,    46,    47,
     3556      48,    49,    50,    51,    52,    53,    -1,    -1,    -1,    57,
     3557      -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,    67,
     3558      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
     3559      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3560      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3561      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3562      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
     3563     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
     3564     128,    -1,  1406,    -1,   132,    -1,    -1,    -1,    -1,    -1,
    21553565       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    21563566      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2157       23,    24,     0,    77,    25,    26,    27,    28,     0,     0,
    2158       29,     0,     0,    30,    31,     0,     0,     0,     0,     8,
    2159        9,    10,    11,    12,     0,     8,     9,    10,    11,    12,
    2160       84,     0,     0,     0,     0,     0,    54,     0,    32,     0,
    2161        0,    33,   163,    34,     0,    35,    36,    30,    37,    38,
    2162       39,     0,     0,    30,     0,     0,     0,    40,    41,     0,
    2163        0,   216,     0,     0,     0,     0,     0,     0,     0,     0,
    2164        0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
    2165       36,    33,     0,    42,    39,    43,    36,   354,     0,     0,
    2166       39,    40,    41,    44,     0,     0,     0,    40,    41,     0,
    2167        0,     0,     0,    54,     0,     0,     0,   163,     0,     0,
    2168        0,     0,     0,   270,   361,     0,     0,    42,     0,     0,
    2169      346,     0,     0,   743,     0,     0,     0,   145,     0,     0,
    2170        0,     0,     0,   744,     0,     0,     0,     0,     0,     0,
    2171      354,   354,   163,   354,   354,     0,     0,     0,     0,     0,
    2172        0,     0,   367,     0,     0,     0,   373,     0,     0,     0,
    2173        0,     0,     0,    77,     0,     0,     0,   361,   361,     0,
    2174      361,   361,     0,     0,     0,     0,   346,   346,     0,     0,
    2175        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2176       84,     0,     0,     0,     0,     0,    54,     0,   354,   354,
    2177        0,     0,     0,     0,     0,   163,     0,     0,     0,     0,
    2178        0,     0,     0,     0,     0,     0,     0,   216,     0,     0,
    2179        0,     0,     0,     0,     0,   361,   361,     0,     0,     0,
    2180        0,   280,   281,     0,   282,   163,   460,     8,     9,    10,
     3567      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
     3568      33,    -1,    -1,    36,    37,    38,    39,    40,    -1,    -1,
     3569      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3570    1402,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,
     3571      -1,    -1,    -1,    66,    67,    -1,    69,  1419,    71,    72,
     3572      -1,    74,    75,    76,  1488,    -1,    79,    80,    81,    82,
     3573      83,    84,    66,    86,    87,    -1,    -1,    -1,    72,    -1,
     3574      -1,    94,    76,    -1,    -1,    79,    80,    81,    82,    83,
     3575      84,    -1,    86,    87,    -1,    -1,   109,    -1,   111,    -1,
     3576      94,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
     3577     123,    -1,    -1,    -1,    -1,   109,  1540,   111,    -1,   132,
     3578     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
     3579    1492,  1493,     3,     4,     5,     6,     7,     8,     9,    10,
    21813580      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2182       21,    22,    23,    24,     0,     0,    25,    26,    27,   373,
    2183      283,     0,   354,     0,     0,    30,   284,   163,     0,     0,
    2184      285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
    2185      290,   291,     0,     0,     0,     0,     0,     0,   292,   361,
    2186        0,   460,     0,    33,   163,     0,     0,     0,     0,     0,
    2187      205,    38,     0,   512,     0,   222,     0,     0,     0,     0,
    2188        0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
    2189        0,     0,     0,     0,     0,     0,     0,    77,     0,     0,
    2190        0,     0,   223,     0,     0,     0,     0,    54,    54,     0,
    2191      354,   605,   354,     0,     0,   269,   629,     0,     0,     0,
    2192        0,     0,     0,     0,    84,     0,     0,     0,     0,     0,
    2193       54,     0,     0,     0,     0,     0,     0,   361,     0,   361,
    2194        0,     0,   354,     0,     0,     0,     0,     0,     0,    54,
    2195      354,   354,   354,     0,     0,     0,     0,     0,     0,     0,
    2196        0,   354,   354,     0,     0,     0,     0,     0,     0,   361,
    2197        0,     0,     0,     0,     0,    77,     0,   361,   361,   361,
    2198        0,     0,     0,     0,     0,     0,     0,     0,   361,   361,
    2199        0,     0,   163,   163,   346,   346,     0,     0,   354,   367,
    2200        0,     0,    84,    54,     0,     0,     0,     0,    54,     0,
    2201        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2202      460,     0,     0,   460,     0,   361,     0,     0,     0,   460,
    2203        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2204        0,     0,    54,     0,     0,     0,     0,     0,     0,     0,
    2205        0,     0,     0,     0,     0,     0,   740,     0,     0,     0,
    2206      209,     0,     0,     0,     0,     0,     0,     0,   163,     0,
    2207      229,     0,   233,     0,   235,     0,     0,     0,     0,     0,
    2208      460,   244,   460,     0,     0,   460,   354,   163,   460,     0,
    2209        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2210      367,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2211        0,     0,   209,   361,   233,   235,   244,     0,     0,   346,
    2212        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2213        0,     0,     0,     0,     0,    77,     0,   154,     0,     0,
    2214        0,     0,    77,     0,     0,    54,     0,     0,     0,     0,
    2215        0,     0,     0,   163,     0,   209,     0,     0,     0,     0,
    2216        0,     0,    84,     0,     0,   367,     0,   605,    54,    84,
    2217      836,     0,     0,     0,     0,    54,     0,     0,     0,     0,
    2218        0,     0,     0,   249,     0,     0,     0,     0,     0,     0,
    2219        0,     0,     0,   254,     0,    77,   605,     0,     0,     0,
    2220        0,   605,     0,     0,     0,     0,     0,     0,     0,     0,
    2221      367,   367,   367,     0,     0,     0,   209,     0,   233,   235,
    2222      244,     0,    84,     0,     0,     0,     0,     0,    54,   367,
    2223        0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2224       17,    18,    19,    20,    21,    22,    23,    24,  -294,   154,
    2225       25,    26,    27,     0,   209,     0,     0,     0,   209,    30,
    2226        0,     0,     0,   384,   740,     0,     0,     0,     0,     0,
    2227        0,     0,     0,     0,   503,     0,     0,     0,     0,     0,
    2228        0,     0,     0,     0,     0,   460,   416,    33,     0,     0,
    2229        0,     0,     0,     0,    37,    38,     0,     0,  -294,     0,
    2230      431,     0,     0,   367,     0,   960,     0,     0,     0,   436,
    2231        0,     0,     0,     0,     0,     0,     0,     0,     0,   444,
    2232        0,     0,     0,     0,   209,     0,     0,     0,     0,   642,
    2233        0,   337,   280,   281,     0,   282,     0,     0,     0,   109,
    2234      740,     0,     0,     0,   470,   209,     0,     0,     0,   480,
    2235      233,   235,     0,     0,     0,     0,     0,     0,   244,     0,
    2236        0,   283,   488,     0,     0,     0,     0,   284,   498,     0,
    2237      502,   285,     0,     0,   286,   287,   288,   289,    40,    41,
    2238        0,   290,   291,     0,     0,     0,     0,     0,   532,   292,
    2239        0,     0,     0,     0,     0,   367,     0,     0,     0,   629,
    2240        0,   209,   367,     0,   293,     0,   377,     0,     0,   378,
    2241        0,     0,     0,   295,   379,   297,   298,   299,   300,   209,
    2242        0,     0,     0,     0,   209,     0,   209,     0,     0,     0,
    2243        0,   592,     0,     0,     0,     0,   597,     0,     0,     0,
    2244        0,     0,     0,   209,     0,     0,   209,   209,     0,     0,
    2245        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2246        0,     0,   209,     0,   643,     0,     0,     0,   644,   645,
    2247        0,   647,     0,     0,     0,     0,   209,     0,   659,   660,
    2248        0,   661,   662,   209,   663,     0,   664,     0,     0,     0,
    2249        0,     0,     0,  1176,     0,   460,     8,     9,    10,    11,
    2250       12,     0,     0,   592,     0,     0,     0,     0,     0,     0,
    2251        0,   679,     0,     0,     0,     0,     0,     0,     0,     0,
    2252        0,     0,   280,   281,    30,   282,     0,     0,     0,     0,
    2253        0,     0,     0,     0,     0,     0,   690,   163,     0,     0,
    2254        0,     0,     0,     0,     0,     0,     0,   696,     0,     0,
    2255        0,   283,    33,   367,     0,     0,     0,   284,     0,     0,
    2256        0,   285,     0,     0,   286,   287,   288,   289,    40,    41,
    2257      732,   290,   291,     0,     0,     0,   735,     0,     0,   292,
    2258        0,   470,     0,     0,     0,     0,     0,     0,   605,     0,
    2259        0,     0,     0,     0,   293,     0,   377,     0,     0,   209,
    2260        0,     0,     0,   295,  1177,   297,   298,   299,   300,   367,
    2261      367,     0,     0,     0,     0,     0,     0,     0,   772,     0,
    2262        0,     0,     0,     0,     0,     0,     0,   209,   513,     0,
    2263      515,   518,   209,     0,   787,     0,     0,     0,   521,   522,
    2264        0,     0,     0,   515,   515,     0,     0,     0,     0,     0,
    2265        0,     0,     0,     0,     0,   515,     0,     0,     0,     0,
    2266        0,     0,     0,     0,     0,   280,   281,     0,   282,   460,
    2267        0,   814,     0,     0,     0,     0,     0,     0,     0,     0,
    2268      824,     0,     0,     0,     0,     0,     0,   827,     0,     0,
    2269        0,   515,   834,     0,   283,     0,     0,     0,     0,     0,
    2270      284,     0,     0,   849,   285,     0,     0,   286,   287,   288,
    2271      289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
    2272      209,     0,   292,     0,     0,     0,     0,   515,   740,     0,
    2273        0,     0,     0,     0,   209,     0,     0,   293,     0,   377,
    2274        0,     0,     0,     0,   889,   811,   295,   379,   297,   298,
    2275      299,   300,     0,     0,   503,     0,     0,     0,     0,     0,
    2276        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2277      216,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2278      834,     0,     0,     0,     0,     8,     9,    10,    11,    12,
     3581      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3582      31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
     3583      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3584      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3585      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
     3586      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3587      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3588      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
     3589      -1,    -1,    72,    -1,    74,    75,    -1,    -1,   109,    -1,
     3590     111,    -1,    -1,    83,    84,    -1,    -1,   118,   119,   120,
     3591     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3592      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3593      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3594      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3595      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3596      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3597      27,    28,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
     3598      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
     3599      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3600      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
     3601      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3602     111,    78,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
     3603     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3604      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3605      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3606      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3607      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3608      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3609      27,    28,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
     3610      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
     3611      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3612      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
     3613      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3614     111,    78,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
     3615     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3616      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3617      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3618      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3619      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3620      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3621      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
     3622      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3623      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3624      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
     3625      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
     3626     111,    -1,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
     3627     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3628      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3629      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3630      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3631      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3632      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3633      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
     3634      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3635      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3636      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
     3637      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
     3638     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
     3639     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3640      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3641      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3642      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3643      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3644      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3645      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
     3646      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3647      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3648      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
     3649      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3650     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
     3651     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3652      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3653      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3654      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3655      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3656      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3657      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
     3658      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3659      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3660      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
     3661      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3662     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
     3663     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3664      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3665      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3666      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3667      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3668      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3669      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
     3670      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3671      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3672      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
     3673      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
     3674     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
     3675     121,   122,   123,     3,     4,     5,     6,     7,     8,     9,
     3676      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3677      20,    21,    22,    23,    24,    25,    26,    27,    -1,   119,
     3678      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
     3679      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3680      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3681      -1,    30,    31,    32,    33,    34,    35,    67,    -1,    69,
     3682      39,    71,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
     3683      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
     3684      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
     3685      -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,
     3686      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3687       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    22793688      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2280       23,    24,  -294,     0,    25,    26,    27,     0,   740,     0,
    2281        0,     0,     0,    30,     0,   209,     0,     0,     0,     0,
    2282        0,     0,     0,     0,     0,     0,     0,     0,   209,     0,
    2283        0,     0,     0,     0,     0,   249,     0,     0,     0,     0,
    2284        0,    33,     0,     0,     0,   967,   968,   209,    37,    38,
    2285        0,     0,  -294,     0,     0,     0,     0,   367,   367,   985,
    2286        0,     0,     0,     0,     0,     0,   216,     0,     0,     0,
    2287        0,     0,     0,     0,     0,     0,  1000,     0,  1001,     0,
    2288        0,     0,  1005,   642,     0,   337,     0,     0,     0,     0,
    2289        0,     0,     0,   633,     0,     0,     0,     0,     0,     0,
    2290        0,     0,     0,     0,   515,   515,   515,   515,   515,   515,
    2291      515,   515,   515,   515,   515,   515,   515,   515,   515,   515,
    2292      515,   515,     0,     0,     0,     0,     0,     0,     0,     0,
    2293      280,   281,     0,   282,   209,     0,     0,     0,     0,     0,
    2294        0,     0,     0,     0,     0,     0,     0,   515,  1038,     0,
    2295        0,     0,     0,     0,     0,  1039,     0,     0,     0,   283,
    2296      209,     0,     0,     0,     0,   284,     0,     0,  1041,   285,
    2297     1042,     0,   286,   287,   288,   289,    40,    41,     0,   290,
    2298      291,     0,   367,     0,  1054,     0,     0,   292,   209,     0,
    2299        0,  1058,     0,     0,     0,     0,     0,     0,     0,     0,
    2300        0,     0,   293,  1096,   377,     0,  1097,     0,     0,   780,
    2301        0,   295,   379,   297,   298,   299,   300,     0,     0,     0,
    2302      209,     0,     0,     0,   597,     0,     0,     0,     0,     0,
    2303        0,   209,     0,     0,     0,     0,     0,     0,     0,     0,
    2304      460,     0,   460,     0,     0,     0,   515,     0,     8,     9,
    2305       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2306       20,    21,    22,    23,    24,  -294,     0,     0,   515,     0,
    2307        0,     0,     0,     0,     0,     0,    30,   460,     0,   460,
    2308        0,   515,     8,     9,    10,    11,    12,    13,    14,    15,
    2309       16,    17,    18,    19,    20,    21,    22,    23,    24,  -294,
    2310        0,    25,    26,    27,    33,     0,     0,   163,     0,     0,
    2311       30,     0,   209,  1160,     0,  -294,     0,     0,     0,   340,
    2312      362,     0,     0,     0,     0,     0,     0,   515,     0,     0,
    2313        0,     0,     0,     0,     0,     0,     0,     0,    33,     0,
    2314        0,     0,     0,    36,     0,   335,   336,    39,     0,  -294,
    2315        0,     0,     0,   412,    40,    41,     0,     0,     0,   515,
    2316      412,     0,     0,     0,     0,     0,     0,     0,     0,   532,
    2317        0,     0,     0,     0,   515,     0,  1225,     0,     0,     0,
    2318      642,     0,   337,     0,     0,     0,     0,     0,     0,     0,
    2319      633,   280,   281,     0,   282,     0,     0,     0,     0,   209,
    2320        0,     0,     0,     0,     0,  1238,     0,     0,     0,     0,
    2321     1240,     0,     0,     0,     0,     0,     0,     0,  1244,     0,
    2322      283,     0,     0,     0,     0,     0,   648,     0,   137,   138,
    2323      285,     0,   412,   286,   649,   288,   289,    40,    41,     0,
    2324      290,   291,     0,     0,     0,     0,     0,     0,   292,  1270,
    2325        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2326        0,  1278,     0,   293,  1279,   650,  1280,   651,   378,     0,
    2327        0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
    2328     1289,  1290,     0,     0,     0,     0,     0,     0,   412,     0,
    2329        0,     0,     0,     0,     0,   209,   412,   588,     0,   412,
    2330      591,     0,  1303,     0,     0,     0,     0,     0,     0,   362,
    2331        0,     0,     0,   621,     0,     0,     0,     0,     0,     0,
    2332        0,     0,     0,     0,     0,   515,     0,     0,     0,  1326,
    2333      320,     0,   639,     0,     0,   340,     0,     0,     0,     0,
    2334      344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2335        0,     0,   380,   380,     0,     0,   515,     0,     0,     0,
    2336        0,     0,   412,     0,     0,     0,   412,     0,   515,     2,
    2337      204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2338       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2339       23,    24,     0,     0,    25,    26,    27,   362,     0,     0,
    2340        0,     0,     0,    30,     0,     0,     0,     0,     0,   515,
    2341        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2342      412,     0,     0,   320,     0,     0,  1396,     0,  1397,     0,
    2343        0,    33,     0,    34,     0,    35,     0,     0,    37,    38,
    2344        0,  1406,     0,  1407,     0,     0,     0,     0,   484,     0,
    2345        0,   412,     0,     0,   362,     0,     0,     0,     0,     0,
    2346        0,  1414,     0,     0,     0,     0,     0,     0,     0,     0,
    2347        0,     0,     0,     0,  -399,   686,     0,  1432,  1434,     0,
    2348        0,   515,     0,   633,     0,     0,     0,     0,     0,  1440,
    2349        0,     0,  1244,     0,   412,     0,     0,   340,   362,     0,
    2350        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2351        0,     0,     0,     0,  1463,     0,     0,     0,     0,     0,
    2352        0,     0,     0,  1470,     0,   515,  1472,     0,  1474,  1476,
    2353     1478,     0,     0,     0,     0,     0,     0,     0,     0,   515,
    2354      515,     0,     0,   412,   412,     0,     0,     0,     0,     0,
    2355        0,   209,     0,     0,     0,     0,     0,     0,     0,     0,
    2356        0,     0,   829,   362,   380,   362,     0,     0,     0,     0,
    2357     1509,     0,  1511,     0,   621,  1244,   621,   621,     0,     0,
    2358        0,     0,     0,   621,     0,     0,     0,     0,     0,     0,
    2359     1523,     0,     0,   868,   362,     0,     0,     0,     0,   362,
    2360        0,     0,     0,     0,     0,     0,     0,     0,   362,   362,
    2361      362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2362        0,     0,     0,     0,     0,     0,     0,   362,     0,     0,
    2363        0,     0,   412,   911,     0,     0,   412,   914,     0,     0,
    2364        0,     0,     0,   916,     0,     0,     0,     0,     0,     0,
    2365        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2366        0,   340,   362,   412,     0,   412,   734,     0,     0,   412,
    2367        0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2368       17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
    2369       25,    26,    27,     0,     0,     0,     0,     0,     0,    30,
    2370        0,   362,   621,     0,     0,   768,     0,     0,     0,     0,
    2371        0,     0,     0,     0,     0,     0,     0,     0,   781,     0,
    2372        0,     0,     0,     0,     0,   768,     0,    33,   768,     0,
    2373        0,     0,     0,     0,   205,    38,     0,   340,   362,   791,
    2374      792,     0,   412,   412,     0,     0,     0,     0,     0,   515,
    2375        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2376        0,   813,     0,     0,     0,     0,   515,     0,     0,     0,
    2377        0,   822,     0,     0,     0,     0,     0,     0,   344,   628,
    2378        0,     0,     0,   781,   412,     0,     0,     0,     0,     0,
    2379        0,     0,     0,   362,     0,     0,     0,     0,     0,   829,
    2380      362,     0,     0,     0,   621,     0,   621,     0,     0,     0,
    2381        0,     0,     0,     0,     0,     0,   621,     0,     0,     0,
    2382        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2383        0,     0,     0,   888,     0,     0,     0,     0,     0,   515,
    2384      515,     0,   380,     0,     0,     0,     0,     0,     0,     1,
    2385        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    2386       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2387       22,    23,    24,     0,     0,    25,    26,    27,    28,     0,
    2388        0,    29,   344,     0,    30,    31,     0,     0,     0,   829,
    2389        0,     0,     0,     0,     0,     0,     0,   412,   280,   281,
    2390        0,   282,     0,   412,     0,     0,     0,     0,     0,    32,
    2391        0,   412,    33,     0,    34,     0,    35,    36,     0,    37,
    2392       38,    39,     0,     0,   621,   621,     0,   283,    40,    41,
    2393        0,     0,     0,   284,     0,     0,     0,   285,     0,     0,
    2394      286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
    2395        0,   362,     0,     0,    42,   292,    43,   412,   781,     0,
    2396      990,     0,     0,     0,    44,     0,   995,     0,     0,     0,
    2397      293,     0,   377,  1004,     0,   992,   412,  1157,     0,   295,
    2398      379,   297,   298,   299,   300,     0,   362,     0,     0,     0,
    2399        0,     0,   412,  1169,     0,   621,   621,  1174,     0,     0,
    2400        0,     0,     0,     0,     0,     0,     0,   362,   362,     0,
    2401        0,     0,     0,     0,     0,     0,     0,  1021,  1022,     0,
    2402      344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2403        0,     0,     0,     0,     0,   344,     0,     0,     0,     0,
    2404        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2405        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2406        0,     0,     0,     0,     0,     0,     0,     0,   829,   412,
    2407     1237,     0,     0,     0,     0,  1052,     0,     0,     0,   380,
    2408        0,   621,     0,     0,     0,     0,     1,     2,   204,     4,
     3689      23,    24,    25,    26,    27,    28,    -1,    30,    31,    32,
     3690      33,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,
     3691      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3692      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3693      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
     3694      -1,    74,    75,    -1,    -1,    78,     3,     4,     5,     6,
     3695       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     3696      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3697      27,    -1,    -1,    30,    31,    32,    33,    -1,   111,    36,
     3698      -1,    -1,    39,    -1,    -1,    -1,   119,    -1,    -1,    -1,
     3699      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3700      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3701      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     3,
     3702       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     3703      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3704      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
     3705      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
     3706      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3707      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3708      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
     3709      74,    75,    -1,     4,     5,     6,     7,     8,     9,    10,
     3710      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3711      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3712      31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,
     3713      -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
     3714      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3715      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
     3716      71,    72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,
     3717      -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
     3718      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3719      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3720     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,     4,
    24093721       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    24103722      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2411        0,     0,    25,    26,    27,    28,     0,     0,    29,   280,
    2412      281,    30,  1061,  1062,     0,  1063,   362,     0,  1064,  1065,
    2413     1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,
    2414        0,     0,     0,  1073,  1074,     0,    32,     0,   283,    33,
    2415        0,    34,     0,    35,   648,   320,    37,    38,   285,     0,
    2416        0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
    2417        0,  1138,  1139,     0,     0,     0,   292,     0,   380,     0,
    2418        0,     0,   280,   281,   995,   282,   340,  1148,     0,   768,
    2419        0,   293,     0,  1075,     0,     0,   169,     0,     0,     0,
    2420      295,   296,   297,   298,   299,   300,   362,     0,     0,  1164,
    2421     1076,   283,     0,     0,  -129,     0,     0,   284,     0,     0,
    2422     1179,   285,     0,     0,   286,   287,   288,   289,    40,    41,
    2423        0,   290,   291,     0,     0,     0,     0,     0,     0,   292,
    2424        0,     0,   380,     0,  1197,     0,     0,     0,     0,     0,
    2425        0,     0,     0,     0,   293,   362,   362,     0,     0,   995,
    2426      995,     0,     0,   295,   379,   297,   298,   299,   300,     0,
    2427        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2428     1229,     0,     0,     0,     0,     0,     0,     0,     1,     2,
    2429      204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3723      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     3724      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    10,
     3725      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3726      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3727      31,    32,    67,    -1,    69,    -1,    71,    -1,    39,    74,
     3728      75,    -1,     4,     5,     6,     7,     8,     9,    10,    11,
     3729      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3730      22,    23,    24,    25,    26,    27,    67,    -1,    30,    31,
     3731      32,    -1,    -1,    74,    75,   110,   111,    39,    -1,    -1,
     3732      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
     3733      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3734      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,   109,    71,
     3735     111,    -1,    74,    75,    -1,    -1,    -1,    -1,   119,    -1,
     3736      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3737      -1,    -1,    -1,    -1,    96,    -1,    -1,    -1,    -1,    -1,
     3738      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
     3739      -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,     4,     5,
     3740       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     3741      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3742      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
     3743      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    10,    11,
     3744      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3745      22,    23,    24,    25,    26,    27,    28,    -1,    30,    31,
     3746      32,    67,    -1,    69,    -1,    71,    -1,    39,    74,    75,
     3747      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3748      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3749      96,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
     3750      72,    -1,    74,    75,    76,   111,    78,    -1,    -1,    -1,
     3751      -1,    83,    84,   119,     4,     5,     6,     7,     8,     9,
     3752      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3753      20,    21,    22,    23,    24,    25,    26,    27,    -1,   111,
     3754      30,    31,    32,    -1,    -1,    -1,    -1,   119,    -1,    39,
     3755      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3756      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3757      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
     3758      -1,    71,    -1,    -1,    74,    75,    -1,     4,     5,     6,
     3759       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     3760      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3761      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
     3762      -1,   111,    39,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3763      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3764      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3765      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
     3766       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     3767      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3768      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
     3769      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
     3770      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3771      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3772      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
     3773      74,    75,    -1,     4,     5,     6,     7,     8,     9,    10,
     3774      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3775      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3776      31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,
     3777      -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
     3778      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3779      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
     3780      71,    -1,    -1,    74,    75,    10,    11,    12,    13,    14,
     3781      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3782      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     3783      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
     3784     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,
     3785      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3786      -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
     3787      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
     3788      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
     3789      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3790      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
     3791      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
     3792      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3793      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3794      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3795      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3796      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3797      30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,    39,
     3798      -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3799      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3800      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
     3801      -1,    -1,    72,    -1,    74,    75,    76,    -1,   109,    -1,
     3802     111,   112,    -1,    83,    84,    -1,    -1,   118,   119,   120,
     3803     121,   122,   123,    10,    11,    12,    13,    14,    15,    16,
     3804      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3805      27,   111,    -1,    30,    31,    32,    -1,    -1,    -1,   119,
     3806      37,    38,    39,    40,    10,    11,    12,    13,    14,    15,
     3807      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3808      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,
     3809      67,    -1,    -1,    39,    40,    72,    -1,    74,    75,    76,
     3810      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
     3811      87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
     3812      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
     3813      -1,    -1,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,
     3814      -1,   118,   119,   120,   121,   122,   123,    10,    11,    12,
    24303815      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2431       23,    24,     0,     0,    25,    26,    27,    28,     0,     0,
    2432       29,   280,   281,    30,   282,     0,     0,   995,     0,     0,
    2433        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2434      280,   281,     0,   282,     0,     0,   888,     0,     0,     0,
    2435      283,    33,     0,    34,     0,    35,   284,     0,    37,    38,
    2436      285,  1281,  1282,   286,   287,   288,   289,    40,    41,   283,
    2437      290,   291,     0,     0,     0,   284,     0,     0,   292,   285,
    2438      362,     0,   286,   287,   288,   289,    40,    41,     0,   290,
    2439      291,     0,     0,   293,     0,  1075,     0,   292,     0,     0,
    2440        0,     0,   295,   296,   297,   298,   299,   300,     0,     0,
    2441        0,     0,   293,     0,   377,     0,  -129,     0,     0,     0,
    2442        0,   295,   379,   297,   298,   299,   300,     0,     0,     0,
    2443        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2444        0,     0,   995,     0,     0,     0,     1,     2,   204,     4,
     3816      23,    24,    25,    26,    27,   111,    -1,    30,    31,    32,
     3817      -1,    -1,    -1,   119,    37,    38,    39,    40,    -1,    -1,
     3818      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
     3819      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3820      25,    26,    27,    66,    67,    30,    31,    32,    -1,    72,
     3821      -1,    74,    75,    76,    39,    -1,    79,    80,    81,    82,
     3822      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
     3823      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3824      -1,    -1,    67,    -1,    -1,    -1,   109,    -1,   111,    74,
     3825      75,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
     3826     123,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3827      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3828      -1,    30,    31,    32,   109,    -1,   111,    -1,    37,    38,
     3829      39,    40,    -1,    -1,   119,    -1,    -1,    -1,    -1,    10,
     3830      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3831      21,    22,    23,    24,    25,    26,    27,    66,    67,    30,
     3832      31,    32,    -1,    72,    -1,    74,    75,    76,    39,    -1,
     3833      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
     3834      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
     3835      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
     3836     109,    -1,   111,    74,    75,    -1,    -1,    -1,    -1,   118,
     3837     119,   120,   121,   122,   123,    10,    11,    12,    13,    14,
     3838      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3839      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     3840     111,    -1,    37,    38,    39,    40,    -1,    -1,   119,    -1,
     3841      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3842      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3843      -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
     3844      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
     3845      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
     3846      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3847      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
     3848      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
     3849      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3850      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3851      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3852      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3853      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3854      30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,    39,
     3855      -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3856      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3857      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
     3858      -1,    -1,    72,    -1,    74,    75,    76,    -1,   109,    -1,
     3859     111,    -1,    -1,    83,    84,    -1,    -1,   118,   119,   120,
     3860     121,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3861      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
     3862      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3863      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3864      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3865      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
     3866      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3867      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3868      30,    31,    32,    -1,    -1,    -1,    -1,    67,    -1,    39,
     3869      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
     3870      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
     3871      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
     3872      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,   109,
     3873      -1,   111,    -1,    83,    84,    -1,    -1,    -1,    -1,   119,
     3874      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3875      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
     3876      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3877      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3878      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
     3879      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
     3880      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3881      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
     3882      30,    31,    32,    -1,    -1,    -1,    -1,    67,    -1,    39,
     3883      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,    -1,
     3884      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3885      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
     3886      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,   109,
     3887      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3888      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3889      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
     3890      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3891      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3892      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3893      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
     3894      40,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3895      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
     3896      -1,    30,    31,    32,    -1,    -1,    -1,    67,    -1,    -1,
     3897      39,    -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,
     3898      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3899      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
     3900      -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,
     3901      -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,   119,
     3902      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3903      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3904      27,    -1,   111,    30,    31,    32,    -1,    -1,    -1,    -1,
     3905     119,    -1,    39,    40,    10,    11,    12,    13,    14,    15,
     3906      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3907      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
     3908      67,    -1,    -1,    39,    -1,    -1,    -1,    74,    75,    -1,
     3909      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
     3910      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3911      -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,    75,
     3912      -1,    39,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
     3913      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3914      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
     3915      -1,    -1,    -1,    -1,    -1,   111,    74,    75,    -1,    -1,
     3916      -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,    14,
     3917      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3918      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     3919      -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,    -1,
     3920      -1,   119,    -1,    10,    11,    12,    13,    14,    15,    16,
     3921      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3922      27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,
     3923      75,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
     3924      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3925      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
     3926      67,    -1,    39,    -1,    -1,    -1,   111,    74,    75,    -1,
     3927      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
     3928      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3929      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
     3930      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
     3931      -1,    -1,   119,    -1,    -1,    10,    11,    12,    13,    14,
     3932      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3933      25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
     3934      -1,    -1,   119,    -1,    39,    10,    11,    12,    13,    14,
     3935      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3936      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     3937      -1,    -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,
     3938      75,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3939      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3940      27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,
     3941      75,    -1,    39,    -1,    -1,    -1,   111,    -1,    -1,    -1,
     3942      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
     3943      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3944      67,    -1,    -1,    -1,    -1,    -1,   111,    74,    75,    -1,
     3945      -1,    -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,
     3946      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3947      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
     3948      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
     3949      -1,    -1,   119,    -1,    10,    11,    12,    13,    14,    15,
     3950      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3951      26,    27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,
     3952      74,    75,    -1,    39,    -1,    -1,     4,     5,     6,     7,
     3953       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3954      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3955      -1,    67,    30,    31,    32,    -1,    -1,   111,    74,    75,
     3956      -1,    39,    -1,    37,    38,   119,    40,    41,    -1,    43,
     3957      -1,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
     3958      -1,    -1,    56,    57,    -1,    -1,    -1,    61,    62,    67,
     3959      64,    69,    66,    71,    -1,    -1,    74,    75,    72,    -1,
     3960      -1,    -1,    76,   119,    -1,    79,    80,    81,    82,    83,
     3961      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
     3962      94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3963      -1,    -1,   110,    -1,    -1,   109,    -1,   111,    -1,    -1,
     3964     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
     3965      -1,    -1,    -1,    -1,   128,    -1,    37,    38,   132,    40,
     3966      41,    -1,    43,    -1,    -1,    46,    47,    48,    49,    50,
     3967      51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
     3968      61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,
     3969      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
     3970      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3971      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
     3972      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3973     111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
     3974     121,   122,   123,    -1,    -1,    -1,    -1,   128,    -1,    -1,
     3975      -1,   132,     4,     5,     6,     7,     8,     9,    10,    11,
     3976      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3977      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
     3978      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    37,
     3979      38,    -1,    40,    41,    -1,    43,    44,    45,    46,    47,
     3980      48,    49,    50,    51,    52,    53,    -1,    -1,    56,    57,
     3981      -1,    -1,    -1,    61,    62,    67,    64,    69,    66,    71,
     3982      -1,    -1,    74,    75,    72,    -1,    -1,    -1,    76,    -1,
     3983      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3984      -1,    -1,    -1,    -1,    96,    -1,    94,    -1,    -1,    -1,
     3985      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3986      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
     3987     118,   119,   120,   121,   122,   123,    -1,    -1,    37,    38,
     3988     128,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
     3989      49,    50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,
     3990      -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,
     3991      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
     3992      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
     3993      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
     3994      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3995     109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
     3996     119,   120,   121,   122,   123,    -1,    -1,    37,    38,   128,
     3997      40,    41,    -1,    43,    -1,    -1,    46,    47,    48,    49,
     3998      50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,
     3999      -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,
     4000      -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
     4001      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
     4002      -1,    -1,    -1,    -1,    94,    37,    38,    -1,    40,    -1,
     4003      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
     4004      -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,
     4005     120,   121,   122,   123,    66,    -1,    -1,    -1,   128,    -1,
     4006      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
     4007      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
     4008      -1,    -1,    94,    37,    38,    -1,    40,    -1,    -1,    -1,
     4009      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
     4010      -1,    -1,    37,    38,    -1,    40,   118,   119,   120,   121,
     4011     122,   123,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
     4012      -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
     4013      84,    66,    86,    87,    -1,    -1,    -1,    72,    -1,    -1,
     4014      94,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
     4015      -1,    86,    87,    -1,    -1,   109,    -1,   111,    -1,    94,
     4016      37,    38,    -1,    40,   118,   119,   120,   121,   122,   123,
     4017      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    37,
     4018      38,    -1,    40,   118,   119,   120,   121,   122,   123,    66,
     4019      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
     4020      -1,    -1,    79,    80,    81,    82,    83,    84,    66,    86,
     4021      87,    -1,    -1,    -1,    72,    -1,    -1,    94,    76,    -1,
     4022      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     4023      -1,    -1,   109,    -1,   111,    -1,    94,    37,    38,    -1,
     4024      40,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
     4025      -1,   109,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
     4026     118,   119,   120,   121,   122,   123,    66,    -1,    -1,    -1,
     4027      -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
     4028      80,    81,    82,    83,    84,    66,    86,    87,    -1,    -1,
     4029      -1,    72,    -1,    -1,    94,    76,    -1,    -1,    79,    80,
     4030      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,   109,
     4031      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,   118,   119,
     4032     120,   121,   122,   123,    -1,    -1,    -1,    -1,   109,    -1,
     4033      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
     4034     121,   122,   123,     3,     4,     5,     6,     7,     8,     9,
     4035      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     4036      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     4037      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
     4038      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4039      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4040      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
     4041      -1,    71,    -1,    -1,    74,    75,     3,     4,     5,     6,
     4042       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     4043      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     4044      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
     4045      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4046      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4047      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4048      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     4,
    24454049       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    24464050      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2447      412,     0,    25,    26,    27,    28,     0,     0,    29,   280,
    2448      281,    30,   282,     0,     0,     0,     0,     0,     0,     0,
    2449        0,     0,     0,     0,     0,   412,   412,     0,     0,     0,
    2450        0,     0,     0,  1389,     0,   768,     0,     0,   283,    33,
    2451        0,    34,     0,    35,   284,     0,    37,    38,   285,     0,
    2452      412,   286,   287,   288,   289,    40,    41,     0,   290,   291,
    2453        0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
    2454        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2455        0,   293,     0,    43,     0,     0,     0,     0,     0,     0,
    2456      295,   296,   297,   298,   299,   300,     0,     0,     2,   204,
    2457        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    2458       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2459       24,  1449,     0,    25,    26,    27,     0,     0,     0,     0,
    2460      280,   281,    30,   282,     0,     8,     9,    10,    11,    12,
    2461       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2462       23,    24,     0,     0,    25,    26,    27,     0,     0,   283,
    2463       33,     0,    34,    30,    35,   284,     0,    37,    38,   285,
    2464        0,     0,   286,   287,   288,   289,    40,    41,     0,   290,
    2465      291,     0,     0,     0,     0,     0,     0,   292,     0,     0,
    2466        0,    33,     0,     0,     0,     0,   108,     0,    37,    38,
    2467        0,     0,   293,  1515,   342,     0,     0,    40,    41,   780,
    2468        0,   295,   343,   297,   298,   299,   300,     2,   204,     4,
    2469        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2470       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2471        0,     0,    25,    26,    27,     0,     0,     0,     0,   280,
    2472      281,    30,   282,     0,     0,   320,     0,     8,     9,    10,
    2473       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2474       21,    22,    23,    24,  -295,     0,     0,     0,   283,    33,
    2475        0,    34,     0,    35,   284,    30,    37,    38,   285,     0,
    2476        0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
    2477        0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
    2478        0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
    2479        0,   293,     0,   930,  -295,     0,     0,     0,   780,     0,
    2480      295,   343,   297,   298,   299,   300,     2,   204,     4,     5,
    2481        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2482       16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
    2483        0,    25,    26,    27,     0,     0,     0,     0,   280,   281,
    2484       30,   282,     0,     8,     9,    10,    11,    12,    13,    14,
    2485       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2486        0,     0,    25,    26,    27,     0,     0,   283,    33,     0,
    2487       34,    30,    35,   284,     0,    37,    38,   285,     0,     0,
    2488      286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
    2489        0,     0,     0,     0,     0,   292,     0,     0,     0,    33,
    2490        0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
    2491      293,     0,   930,     0,     0,     0,     0,   780,     0,   295,
    2492      599,   297,   298,   299,   300,     2,   204,     4,     5,     6,
    2493        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2494       17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
    2495       25,    26,    27,     0,     0,     0,     0,   280,   281,    30,
    2496      282,     0,     8,     9,    10,    11,    12,    13,    14,    15,
    2497       16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
    2498        0,    25,    26,    27,     0,     0,   283,    33,     0,    34,
    2499       30,    35,   284,     0,    37,    38,   285,     0,     0,   286,
    2500      287,   288,   289,    40,    41,     0,   290,   291,     0,     0,
    2501        0,     0,     0,     0,   292,     0,     0,     0,    33,     0,
    2502        0,     0,     0,     0,     0,   205,    38,     0,     0,   293,
    2503        0,   342,     0,     0,     0,     0,     0,     0,   295,   343,
    2504      297,   298,   299,   300,     2,   204,     4,     5,     6,     7,
    2505        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2506       18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
    2507       26,    27,     0,     0,     0,     0,   280,   281,    30,   282,
    2508        0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2509       17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
    2510        0,     0,     0,     0,     0,   283,    33,     0,    34,    30,
    2511       35,   284,     0,    37,    38,   285,     0,     0,   286,   287,
    2512      288,   289,    40,    41,     0,   290,   291,     0,     0,     0,
    2513        0,     0,     0,   292,     0,     0,     0,    33,     0,     0,
    2514        0,     0,     0,     0,     0,     0,     0,     0,   293,     0,
    2515      930,     0,     0,     0,     0,     0,     0,   295,   343,   297,
    2516      298,   299,   300,     2,   204,     4,     5,     6,     7,     8,
    2517        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2518       19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
    2519       27,     0,     0,     0,     0,   280,   281,    30,   282,     0,
    2520        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2521        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2522        0,     0,     0,     0,   283,    33,     0,    34,     0,    35,
    2523      284,     0,   205,    38,   285,     0,     0,   286,   287,   288,
    2524      289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
    2525        0,     0,   292,     0,     0,     0,     0,     0,     0,     0,
    2526        0,     0,     0,     0,     0,     0,     0,   293,     0,  1019,
    2527        0,     0,     0,     0,     0,     0,   295,  1020,   297,   298,
    2528      299,   300,     2,   204,     4,     5,     6,     7,     8,     9,
    2529       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2530       20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
    2531        0,     0,     0,     0,   280,   281,    30,   282,     0,     0,
    2532        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2533        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2534        0,     0,     0,   283,    33,     0,    34,     0,    35,   284,
    2535        0,   205,    38,   285,     0,     0,   286,   287,   288,   289,
    2536       40,    41,     0,   290,   291,     0,     0,     0,     0,     0,
    2537        0,   292,     0,     0,     0,     0,     0,     0,     0,     0,
    2538        0,     0,     0,     0,     0,     0,   293,     0,   377,     0,
    2539        0,     0,     0,     0,     0,   295,   379,   297,   298,   299,
    2540      300,     1,     2,     3,     4,     5,     6,     7,     8,     9,
    2541       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2542       20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
    2543       28,     0,     0,    29,     0,     0,    30,    31,     0,     0,
    2544        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2545        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2546        0,    32,     0,     0,    33,     0,    34,     0,    35,    36,
    2547        0,    37,    38,    39,     0,     0,     0,     0,     0,     0,
    2548       40,    41,     0,     0,     0,     0,     0,     0,     0,     0,
    2549        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2550        0,     0,     0,     0,     0,     0,    42,     0,    43,     0,
    2551        0,     0,  -520,     0,     0,     0,    44,   203,     2,   204,
    2552        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    2553       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2554       24,     0,     0,    25,    26,    27,     0,     0,     0,     0,
    2555        0,     0,    30,     8,     9,    10,    11,    12,    13,    14,
    2556       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2557        0,     0,    25,    26,    27,   491,   492,   493,     0,     0,
    2558       33,    30,    34,     0,    35,    36,     0,   205,    38,    39,
    2559        0,     0,     0,     0,     0,     0,    40,    41,     0,     0,
    2560        0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
    2561        0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
    2562        0,     0,    42,     0,   206,     0,     0,     0,     0,     0,
    2563        0,     0,   207,     1,     2,   204,     4,     5,     6,     7,
    2564        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2565       18,    19,    20,    21,    22,    23,    24,  -294,     0,    25,
    2566       26,    27,    28,     0,     0,    29,     0,     0,    30,     0,
    2567        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2568        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2569        0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
    2570       35,     0,     0,    37,    38,     0,     0,  -294,     0,     1,
    2571        2,   204,     4,     5,     6,     7,     8,     9,    10,    11,
    2572       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2573       22,    23,    24,     0,     0,    25,    26,    27,    28,     0,
    2574       43,    29,     0,     0,    30,     0,     0,     0,   109,     0,
    2575        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2576        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2577        0,     0,    33,     0,    34,     0,    35,     0,     0,    37,
    2578       38,     0,   203,     2,   204,     4,     5,     6,     7,     8,
    2579        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2580       19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
    2581       27,     0,     0,     0,     0,     0,    43,    30,     0,     0,
    2582        0,     0,     0,     0,   109,     0,     0,     0,     0,     0,
    2583        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2584        0,     0,     0,     0,     0,    33,     0,    34,     0,    35,
    2585        0,     0,   205,    38,     2,   204,     4,     5,     6,     7,
    2586        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2587       18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
    2588       26,    27,     0,     0,     0,     0,     0,     0,    30,   206,
    2589        0,     0,     0,     0,     0,     0,     0,   269,     0,     0,
    2590        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2591        0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
    2592       35,    36,     0,   205,    38,    39,     0,     0,     0,     0,
    2593        0,     0,    40,    41,     0,     0,     8,     9,    10,    11,
    2594       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2595       22,    23,    24,     0,     0,    25,    26,    27,    42,     0,
    2596      206,     0,     0,     0,    30,     0,     0,     0,   207,     2,
    2597      204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2598       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2599       23,    24,    33,     0,    25,    26,    27,    36,     0,    37,
    2600       38,    39,     0,    30,     0,     0,     0,     0,    40,    41,
    2601        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2602        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2603        0,    33,     0,    34,    42,    35,    43,     0,    37,    38,
    2604        0,     0,     0,     0,    44,     0,     0,     0,     0,     0,
    2605        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2606     1368,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2607        0,     0,     0,     0,     0,   686,     0,     0,     0,     0,
    2608        0,     0,     0,   633,     2,   204,     4,     5,     6,     7,
    2609        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2610       18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
    2611       26,    27,     0,     0,     0,     0,     0,     0,    30,     0,
    2612        0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
    2613       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2614        0,     0,    25,    26,    27,     0,    33,     0,    34,     0,
    2615       35,    30,     0,    37,    38,     0,     0,     0,     0,     0,
    2616        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2617        0,     0,     0,     0,     0,  1370,     0,     0,     0,    33,
    2618        0,     0,     0,     0,    36,     0,   335,   336,    39,     0,
    2619      686,     0,     0,     0,     0,    40,    41,     0,   633,     2,
    2620      204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2621       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2622       23,    24,     0,   337,    25,    26,    27,     0,     0,     0,
    2623        0,   109,     0,    30,     0,     0,     0,     0,     0,     0,
    2624        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2625        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2626        0,    33,     0,    34,     0,    35,     0,     0,   205,    38,
    2627        2,   204,     4,     5,     6,     7,     8,     9,    10,    11,
    2628       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2629       22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
    2630        0,     0,     0,     0,    30,   268,     0,     0,     0,     0,
    2631        0,     0,     0,   628,     0,     0,     0,     0,     0,     0,
    2632        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2633        0,     0,    33,     0,    34,     0,    35,     0,     0,    37,
    2634       38,     2,   204,     4,     5,     6,     7,     8,     9,    10,
    2635       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2636       21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
    2637        0,     0,     0,     0,     0,    30,   686,     0,     0,     0,
    2638        0,     0,     0,     0,   633,     0,     0,     0,     0,     0,
    2639        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2640        0,     0,     0,    33,     0,    34,     0,    35,     0,     0,
    2641       37,    38,     2,   204,     4,     5,     6,     7,     8,     9,
    2642       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2643       20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
    2644        0,     0,     0,     0,     0,     0,    30,   598,     0,     0,
    2645        0,     0,     0,     0,     0,   633,     0,     0,     0,     0,
    2646        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2647        0,     0,     0,     0,    33,     0,    34,     0,    35,     0,
    2648        0,   205,    38,     8,     9,    10,    11,    12,    13,    14,
    2649       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2650        0,     0,    25,    26,    27,     0,     0,     0,     0,   280,
    2651      281,    30,   282,     0,     0,     0,     0,     0,   206,     0,
    2652        0,     0,     0,     0,     0,     0,   269,     0,     0,     0,
    2653        0,     0,     0,     0,     0,     0,     0,     0,   283,    33,
    2654        0,     0,     0,     0,   284,     0,    37,    38,   285,     0,
    2655        0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
    2656        0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
    2657        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2658        0,   293,     0,   524,     0,     0,   169,     0,     0,     0,
    2659      295,   296,   297,   298,   299,   300,     8,     9,    10,    11,
    2660       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2661       22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
    2662        0,     0,   280,   281,    30,   282,     8,     9,    10,    11,
    2663       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2664       22,    23,    24,  -294,     0,    25,    26,    27,     0,     0,
    2665        0,   283,    33,     0,    30,     0,     0,   284,     0,    37,
    2666       38,   285,     0,     0,   286,   287,   288,   289,    40,    41,
    2667        0,   290,   291,     0,     0,     0,     0,     0,     0,   292,
    2668        0,     0,    33,     0,     0,     0,     0,    36,     0,   335,
    2669      336,    39,     0,  -294,   293,     0,   598,    -3,    40,    41,
    2670        0,     0,     0,   295,   599,   297,   298,   299,   300,     8,
    2671        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2672       19,    20,    21,    22,    23,    24,   337,     0,    25,    26,
    2673       27,     0,     0,     0,   109,   280,   281,    30,   282,     8,
    2674        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2675       19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
    2676       27,     0,     0,     0,   283,    33,     0,    30,     0,     0,
    2677      648,     0,    37,    38,   285,     0,     0,   286,   287,   288,
    2678      289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
    2679        0,     0,   292,     0,     0,    33,     0,     0,     0,     0,
    2680      108,     0,    37,    38,     0,     0,     0,   293,   -35,   765,
    2681        0,    40,    41,     0,     0,     0,   295,   296,   297,   298,
    2682      299,   300,     8,     9,    10,    11,    12,    13,    14,    15,
    2683       16,    17,    18,    19,    20,    21,    22,    23,    24,    43,
    2684        0,    25,    26,    27,     0,     0,     0,   109,   280,   281,
    2685       30,   282,     8,     9,    10,    11,    12,    13,    14,    15,
    2686       16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
    2687        0,    25,    26,    27,     0,     0,     0,   283,    33,     0,
    2688       30,   452,     0,   284,     0,    37,    38,   285,     0,     0,
    2689      286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
    2690        0,     0,     0,     0,     0,   292,     0,     0,    33,     0,
    2691        0,     0,     0,     0,     0,    37,    38,     0,     0,     0,
    2692      293,     0,   294,     0,     0,     0,     0,     0,     0,   295,
    2693      296,   297,   298,   299,   300,     8,     9,    10,    11,    12,
    2694       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2695       23,    24,   453,     0,    25,    26,    27,     0,     0,     0,
    2696      109,   280,   281,    30,   282,     0,     0,     0,     0,     0,
    2697        0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
    2698       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2699      283,    33,    25,    26,    27,     0,   284,     0,    37,    38,
    2700      285,    30,     0,   286,   287,   288,   289,    40,    41,     0,
    2701      290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
    2702        0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
    2703        0,     0,     0,   293,     0,   155,    37,    38,     0,     0,
    2704        0,     0,   295,   296,   297,   298,   299,   300,     8,     9,
    2705       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2706       20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
    2707        0,   642,     0,   337,   280,   281,    30,   282,     0,     0,
    2708        0,   109,     0,     0,     0,     0,     8,     9,    10,    11,
    2709       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2710       22,    23,    24,   283,    33,    25,    26,    27,     0,   284,
    2711        0,    37,    38,   285,    30,     0,   286,   287,   288,   289,
    2712       40,    41,     0,   290,   291,     0,     0,     0,     0,     0,
    2713        0,   292,     0,     0,     0,     0,     0,     0,     0,     0,
    2714        0,     0,    33,     0,     0,     0,   293,     0,   598,    37,
    2715       38,     0,     0,     0,     0,   295,   599,   297,   298,   299,
    2716      300,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2717       17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
    2718       25,    26,    27,     0,   642,     0,   337,   280,   281,    30,
    2719      282,     0,     0,     0,   633,     0,     0,     0,     0,     8,
    2720        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2721       19,    20,    21,    22,    23,    24,   283,    33,    25,    26,
    2722       27,     0,   284,     0,    37,    38,   285,    30,   452,   286,
    2723      287,   288,   289,    40,    41,     0,   290,   291,     0,     0,
    2724        0,     0,     0,     0,   292,     0,     0,     0,     0,     0,
    2725        0,     0,     0,     0,     0,    33,     0,     0,     0,   293,
    2726        0,   377,    37,    38,     0,     0,     0,     0,   295,   379,
    2727      297,   298,   299,   300,   473,     2,   204,     4,     5,     6,
    2728        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2729       17,    18,    19,    20,    21,    22,    23,    24,     0,   453,
    2730       25,    26,    27,  1234,     0,     0,     0,   109,     0,    30,
    2731        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2732       18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
    2733       26,    27,     0,     0,     0,     0,     0,    33,    30,    34,
    2734        0,    35,     0,     0,    37,    38,     0,     0,     8,     9,
    2735       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2736       20,    21,    22,    23,    24,     0,    33,    25,    26,    27,
    2737        0,    36,     0,   205,    38,    39,    30,     0,     0,     0,
    2738        0,     0,    40,    41,    -3,     0,     8,     9,    10,    11,
    2739       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2740       22,    23,    24,     0,    33,    25,    26,    27,    42,    36,
    2741      268,   335,   336,    39,    30,     0,     0,     0,   207,     0,
    2742       40,    41,     0,     0,     8,     9,    10,    11,    12,    13,
    2743       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2744       24,     0,    33,    25,    26,    27,   642,     0,   337,    37,
    2745       38,     0,    30,     0,     0,     0,   633,     8,     9,    10,
    2746       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2747       21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
    2748       33,     0,     0,     0,     0,    30,   255,    37,    38,     0,
    2749        0,     0,     0,     0,   109,     8,     9,    10,    11,    12,
    2750       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2751       23,    24,     0,    33,    25,    26,    27,     0,     0,     0,
    2752      205,    38,     0,    30,   155,     0,     0,     0,     0,     0,
    2753        0,     0,   109,     8,     9,    10,    11,    12,    13,    14,
    2754       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2755        0,    33,    25,    26,    27,     0,     0,   268,    37,    38,
    2756        0,    30,     0,     0,     0,   269,     8,     9,    10,    11,
    2757       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2758       22,    23,    24,     0,     0,    25,    26,    27,     0,    33,
    2759        0,     0,     0,     0,    30,   255,    37,    38,     0,     0,
    2760        0,     0,     0,   633,     8,     9,    10,    11,    12,    13,
    2761       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2762       24,     0,    33,    25,    26,    27,     0,     0,     0,    37,
    2763       38,     0,    30,   337,     0,     0,     0,     0,     0,     0,
    2764        0,   633,     8,     9,    10,    11,    12,    13,    14,    15,
    2765       16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
    2766       33,    25,    26,    27,     0,     0,   453,   205,    38,     0,
    2767       30,     0,     0,     0,   109,     8,     9,    10,    11,    12,
    2768       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2769       23,    24,     0,     0,    25,    26,    27,     0,    33,     0,
    2770        0,     0,     0,    30,   268,    37,    38,     0,     0,     0,
    2771        0,     0,   628,     8,     9,    10,    11,    12,    13,    14,
    2772       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2773        0,    33,    25,    26,    27,     0,     0,     0,    37,    38,
    2774        0,    30,   598,     0,     0,     0,     0,     0,     0,     0,
    2775      633,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2776        0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
    2777        0,     0,     0,     0,     0,   337,    37,    38,     0,     0,
    2778        0,     0,     0,   109,     2,   204,     4,     5,     6,     7,
    2779        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2780       18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
    2781       26,    27,     0,    43,     0,     0,     0,     0,    30,     0,
    2782        0,   109,     0,     0,     0,     0,     0,     0,     0,     0,
    2783        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2784        0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
    2785       35,     0,     0,    37,    38,   280,   281,     0,   282,  1062,
    2786        0,  1063,     0,     0,  1064,  1065,  1066,  1067,  1068,  1069,
    2787     1070,  1071,     0,     0,  1548,  1072,     0,     0,     0,  1073,
    2788     1074,     0,    32,     0,   283,     0,     0,     0,     0,  -412,
    2789      648,     0,     0,     0,   285,     0,     0,   286,   287,   288,
    2790      289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
    2791        0,     0,   292,     0,     0,     0,     0,     0,     0,     0,
    2792        0,     0,     0,     0,     0,     0,     0,   293,     0,   377,
    2793        0,     0,   169,     0,     0,     0,   295,   379,   297,   298,
    2794      299,   300,     0,     0,     0,     0,  1076,     0,   280,   281,
    2795     -129,   282,  1062,     0,  1063,     0,     0,  1064,  1065,  1066,
    2796     1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,     0,
    2797        0,     0,  1073,  1074,     0,    32,     0,   283,     0,     0,
    2798        0,     0,     0,   648,     0,     0,     0,   285,     0,     0,
    2799      286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
    2800        0,     0,     0,     0,     0,   292,     0,     0,     0,     0,
    2801        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2802      293,     0,   377,     0,     0,   169,     0,     0,     0,   295,
    2803      379,   297,   298,   299,   300,     0,     0,     0,     0,  1076,
    2804        0,   280,   281,  -129,   282,  1062,     0,  1063,  1418,  1419,
    2805     1064,  1065,  1066,  1067,  1068,  1069,  1070,  1071,     0,     0,
    2806     1548,  1072,     0,     0,     0,  1073,  1074,     0,    32,     0,
    2807      283,     0,     0,     0,     0,     0,   648,     0,     0,     0,
    2808      285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
    2809      290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
    2810        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2811        0,     0,     0,   293,     0,   377,     0,     0,   169,     0,
    2812        0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
    2813      280,   281,  1076,   282,  1062,     0,  1063,  1418,  1419,  1064,
    2814     1065,  1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,
    2815     1072,     0,     0,     0,  1073,  1074,     0,    32,     0,   283,
    2816        0,     0,     0,     0,     0,   648,     0,     0,     0,   285,
    2817        0,     0,   286,   287,   288,   289,    40,    41,     0,   290,
    2818      291,     0,     0,     0,     0,     0,     0,   292,     0,     0,
    2819        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2820        0,     0,   293,     0,   377,     0,     0,   169,     0,     0,
    2821        0,   295,   379,   297,   298,   299,   300,     0,     0,   280,
    2822      281,  1076,   282,  1062,     0,  1063,     0,     0,  1064,  1065,
    2823     1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,
    2824        0,     0,     0,  1073,  1074,     0,    32,     0,   283,     0,
    2825        0,     0,     0,     0,   648,     0,     0,     0,   285,     0,
    2826        0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
    2827        0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
    2828        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2829        0,   293,     0,   377,     0,     0,   169,     0,     0,     0,
    2830      295,   379,   297,   298,   299,   300,     0,     0,     0,     0,
    2831     1076,     2,   204,     4,     5,     6,     7,     8,     9,    10,
    2832       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2833       21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
    2834        0,     0,     0,     0,     0,    30,     0,   280,   281,     0,
    2835      282,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2836        0,     0,     0,     0,     0,     0,   280,   281,     0,   282,
    2837        0,     0,     0,    33,     0,    34,   283,    35,     0,     0,
    2838       37,    38,   284,     0,     0,     0,   285,     0,     0,   286,
    2839      287,   288,   289,    40,    41,   283,   290,   291,     0,     0,
    2840        0,   648,  1327,     0,   292,   285,     0,     0,   286,   287,
    2841      288,   289,    40,    41,     0,   290,   291,     0,     0,   293,
    2842        0,   377,     0,   292,   280,   281,     0,   282,   295,   733,
    2843      297,   298,   299,   300,     0,     0,     0,     0,   293,     0,
    2844      784,     0,     0,   280,   281,     0,   282,   295,   379,   297,
    2845      298,   299,   300,   283,     0,     0,     0,     0,     0,   284,
    2846        0,     0,     0,   285,     0,     0,   286,   287,   288,   289,
    2847       40,    41,   283,   290,   291,     0,     0,     0,   284,     0,
    2848        0,   292,   285,     0,     0,   286,   287,   288,   289,    40,
    2849       41,     0,   290,   291,     0,     0,   293,     0,   377,     0,
    2850      292,   280,   281,     0,   282,   295,   826,   297,   298,   299,
    2851      300,     0,     0,     0,     0,   517,     0,     0,     0,     0,
    2852        0,     0,     0,     0,   295,   379,   297,   298,   299,   300,
    2853      283,     0,     0,     0,     0,     0,   284,     0,     0,     0,
    2854      285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
    2855      290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
    2856        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2857        0,     0,     0,   520,     0,     0,     0,     0,     0,     0,
    2858        0,     0,   295,   379,   297,   298,   299,   300,     2,   204,
    2859        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    2860       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2861       24,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2862        0,     0,    30,     0,     0,     0,     0,     0,     0,     0,
    2863        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2864        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2865       33,     0,    34,     0,    35,    36,     0,   172,   173,    39,
    2866        0,     0,     0,     0,     0,     0,    40,    41,   203,     2,
    2867      204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2868       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2869       23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
    2870        0,     0,     0,    30,     0,     0,     0,     0,     0,     0,
    2871        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2872        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2873        0,    33,     0,    34,     0,    35,     0,     0,   205,    38,
    2874      473,     2,   204,     4,     5,     6,     7,     8,     9,    10,
    2875       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2876       21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
    2877        0,     0,     0,     0,     0,    30,     0,     0,     0,     0,
    2878        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2879        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2880        0,     0,     0,    33,     0,    34,     0,    35,     0,     0,
    2881       37,    38,     2,   204,     4,     5,     6,     7,     8,     9,
    2882       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2883       20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
    2884        0,     0,     0,     0,     0,     0,    30,     0,     0,     0,
    2885        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2886        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2887        0,     0,     0,     0,    33,     0,    34,     0,    35,     0,
    2888        0,   205,    38
    2889 };
    2890 
    2891 #define yypact_value_is_default(yystate) \
    2892   ((yystate) == (-1281))
    2893 
    2894 #define yytable_value_is_error(yytable_value) \
    2895   YYID (0)
    2896 
    2897 static const yytype_int16 yycheck[] =
    2898 {
    2899        0,     1,     0,    42,   237,   217,   183,   183,   202,    42,
    2900        0,     1,     1,   183,    42,   542,   183,   183,   114,   103,
    2901      184,   455,   519,   343,     0,     0,   628,   454,    28,    29,
    2902      183,    31,   697,    31,   697,   183,   498,   697,   610,   608,
    2903      502,    31,    42,   679,    44,   461,    44,   347,  1042,   496,
    2904      279,   901,   655,     1,    54,    31,    31,   166,   167,   608,
    2905       60,  1061,    60,    63,   608,    63,    66,   610,    66,   153,
    2906      347,     0,   578,    63,  1005,   277,    66,    66,   416,   998,
    2907       80,    81,  1041,  1042,   184,   608,   263,   263,    63,   779,
    2908       42,   362,   185,   263,   608,   366,   263,   263,   436,    31,
    2909      264,   528,    31,   199,   104,  1337,   444,   107,   608,    27,
    2910      263,   776,     0,   776,   114,   263,   776,    42,   608,   722,
    2911      642,   643,   644,  1054,   758,   424,   425,   611,    38,   254,
    2912      643,   644,    38,   617,    81,    42,    62,   106,  1418,   661,
    2913        0,     1,    63,    31,   183,   145,    44,   145,   661,   109,
    2914      183,    81,   108,   153,   226,   183,   116,  1422,   158,    77,
    2915      158,   130,    38,   110,   264,   612,   259,   260,   488,   616,
    2916       50,    31,    44,   245,   743,   109,    43,    44,   814,   109,
    2917     1073,  1074,   116,   183,   184,    81,   184,   108,   824,    54,
    2918      637,    43,    44,    38,   641,    38,   408,    84,   108,   199,
    2919      110,   500,    63,   839,   110,   131,    66,   207,  1440,   207,
    2920      901,   109,  1492,   735,    43,    44,   216,   494,   108,   219,
    2921      519,   219,   735,    38,   263,   112,   226,    81,   108,   219,
    2922      263,   183,   108,    11,   110,   263,   115,   109,   108,   104,
    2923      404,   241,   107,   743,   219,   245,  1240,   114,  1141,   249,
    2924      250,   249,   131,   743,   115,  1520,   340,   113,   183,   249,
    2925     1525,   113,   116,   263,   264,   108,   264,   110,   115,   838,
    2926      270,    38,   144,   249,   249,     0,   183,   277,   850,   599,
    2927     1545,   510,     3,   717,   113,   369,   585,  1552,    81,   838,
    2928      454,   416,   292,   108,   838,   110,  1290,   158,   394,  1474,
    2929      111,  1525,   250,  1303,   404,   827,    31,   850,   628,   207,
    2930      610,   436,   818,   633,   827,   838,   109,   249,  1008,   444,
    2931      249,  1545,   486,   116,   838,   596,   422,   327,  1552,   327,
    2932     1289,  1290,   428,    81,  1509,   207,  1511,  1256,   838,    94,
    2933      238,   108,    95,   110,   292,   111,   346,   347,   838,   115,
    2934       81,   216,   690,    95,   454,  1525,   840,   115,   219,   698,
    2935      108,   249,     3,   363,     1,   237,   254,   367,   639,   122,
    2936     1061,   269,    71,   348,   129,  1225,   696,   108,   378,    71,
    2937      122,   720,  1552,    82,    83,   108,   486,   959,   108,   249,
    2938       82,    83,   114,   115,   394,   293,   257,   269,   296,    71,
    2939      261,   108,  1038,  1039,   404,   270,   404,    44,   130,   958,
    2940       82,    83,   277,   115,   958,    71,     0,   115,  1020,     0,
    2941     1414,   115,   422,   130,   296,   872,    82,    83,   428,   131,
    2942      430,   488,   131,   131,   109,   958,  1070,   131,   110,   131,
    2943      115,    67,   115,    89,    90,    71,   675,   531,    74,   115,
    2944       76,   130,   772,   115,   454,  1414,    71,    83,   131,   459,
    2945     1096,  1097,   118,  1463,   464,   131,   103,    82,    83,   131,
    2946     1470,   343,   109,   473,   108,  1406,  1407,   115,   478,   125,
    2947      126,   346,   109,   108,   109,   109,   486,   348,   486,   116,
    2948      490,   115,   490,   131,   494,   110,   109,   497,   363,   499,
    2949      490,    71,   367,   130,   479,   967,  1003,   144,   120,   121,
    2950      937,   927,    82,    83,   490,   490,   153,   964,   945,   519,
    2951      697,   697,   115,  1523,   249,   473,   108,   697,   416,   254,
    2952      697,   697,   761,   108,  1225,   699,   536,  1140,   131,   539,
    2953      110,   541,   542,  1115,   697,  1029,  1030,   656,   436,   697,
    2954      850,   108,   424,   425,   452,   757,   444,   455,   829,    87,
    2955       88,   490,   833,   461,   991,   690,   203,   663,   429,    71,
    2956      207,   519,   665,   850,   115,    10,    11,    12,    13,    14,
    2957       82,    83,   115,   108,   210,   642,   643,   644,   536,   589,
    2958      131,   539,   470,   541,   542,   109,   596,   115,   131,   699,
    2959      237,   238,   490,    38,   661,   109,   108,   732,   608,   115,
    2960      610,   695,  1303,   131,   512,    71,   514,   115,   479,   517,
    2961      111,   597,   520,   109,   115,   131,    82,    83,   500,   629,
    2962      490,    66,   269,   131,  1270,   272,   109,    79,   977,   696,
    2963      282,   589,  1278,  1279,  1280,   645,    71,   519,    73,    74,
    2964      109,   651,   923,   295,   296,   630,   293,    82,    83,   296,
    2965      660,   111,   662,   663,   664,   307,   114,  1101,   110,  1303,
    2966      112,    79,     3,   111,   116,   887,   108,   115,   735,    10,
    2967       11,    12,    13,    14,    91,    92,   963,   771,   113,     0,
    2968     1326,   416,   109,   108,   293,   110,   908,   697,   115,   699,
    2969     1020,   343,   110,   340,   112,   111,   343,    38,   116,   115,
    2970      108,   436,   712,   585,   662,   772,   664,   118,   718,   444,
    2971       31,   131,   123,   124,   350,   362,   352,   599,    71,   366,
    2972      730,    42,   369,    44,   111,    66,   969,   379,   115,    82,
    2973       83,   602,   108,   743,   744,   109,  1380,   109,   723,    60,
    2974     1131,   115,    63,   115,  1135,    66,   628,   757,   108,    63,
    2975      110,   633,   737,   488,   629,   490,   108,   110,   118,   630,
    2976      827,  1495,  1463,   937,   635,   108,   108,  1501,   110,  1470,
    2977      645,   945,   730,   108,   893,   110,   118,   424,   425,   111,
    2978      109,   109,  1319,   118,  1133,   660,   115,   115,  1522,   113,
    2979      109,   679,   690,  1527,   131,    52,   115,   113,   512,    71,
    2980      514,    73,    74,   517,   440,   452,   520,   109,   455,   717,
    2981       82,    83,   109,   115,   461,   424,   425,   128,   115,   130,
    2982      113,  1102,  1523,  1467,   145,  1469,   473,   937,   838,  1033,
    2983     1160,   114,   115,   109,   732,   945,   108,   158,    95,   115,
    2984      850,   113,  1191,  1192,   109,   108,   831,   110,   834,   131,
    2985      115,   498,   723,   500,  1529,   502,  1529,   131,   109,  1529,
    2986      115,   116,   183,   184,   115,   512,   737,   514,   109,   109,
    2987      517,   109,   519,   520,   115,   115,    71,   115,    73,    74,
    2988     1524,   108,   757,   893,   531,   108,   207,    82,    83,   109,
    2989      900,   901,  1131,   109,   109,   115,  1135,  1136,   219,   115,
    2990      115,   901,    81,   512,   556,   557,   558,   108,   517,   110,
    2991     1240,   520,   108,   923,   110,   901,   901,   109,   110,     4,
    2992        5,     6,     7,     8,     9,   108,   814,   937,   249,    71,
    2993      111,    73,    74,    81,   191,   945,   824,  1056,   585,   119,
    2994       82,    83,   263,   901,   108,   109,   110,   599,   108,   596,
    2995      110,   839,   599,   963,   108,   690,   110,   214,    57,    58,
    2996      831,   696,   108,   109,   110,   574,   108,   224,   968,   968,
    2997      108,   113,   110,   983,  1041,     4,     5,     6,     7,     8,
    2998        9,   628,   992,    68,   127,    70,   633,   108,   109,   110,
    2999     1000,   128,   639,  1003,   130,  1005,    71,   732,    73,    74,
    3000       75,   110,   108,   901,   110,     3,   327,    82,    83,   114,
    3001      115,  1250,    10,    11,    12,    13,    14,  1123,    71,   927,
    3002       73,    74,    75,   115,   116,   983,   347,   115,   116,    82,
    3003       83,   901,   108,   108,   110,   110,   293,   772,  1023,    68,
    3004       38,    70,  1000,   118,  1054,  1003,   131,  1005,   695,   108,
    3005      109,   110,  1401,    93,  1064,   108,   108,  1067,  1068,  1069,
    3006      108,  1061,    10,    11,    12,    13,    14,  1504,    66,  1418,
    3007      717,   563,   564,   565,   566,  1061,  1061,    71,   111,    73,
    3008       74,   733,  1092,   404,    43,    44,    44,   969,    82,    83,
    3009       38,   111,   702,  1160,   704,   109,  1054,   109,   968,  1338,
    3010      747,   109,    60,  1342,   109,    63,  1064,   109,    66,  1067,
    3011     1068,  1069,     3,  1123,   561,   562,   110,  1554,    66,    10,
    3012       11,    12,    13,    14,   771,   109,  1220,   779,    71,   108,
    3013       73,    74,    75,   454,   111,   109,   111,   111,  1020,    82,
    3014       83,   115,  1491,  1492,    57,    58,    59,    38,   567,   568,
    3015     1038,  1039,  1023,  1262,  1263,  1264,   130,   131,   559,   560,
    3016      108,   110,   110,  1061,   115,   108,   901,   130,   113,   490,
    3017      118,   108,   111,   494,   826,    66,   109,   109,   116,   115,
    3018      111,   111,   829,   111,   441,   111,   833,   145,  1198,   116,
    3019       28,  1061,   116,  1101,   109,    84,    85,    86,   109,   111,
    3020      158,   109,  1202,  1203,  1203,  1444,   113,   116,  1096,  1097,
    3021     1220,   114,   114,   114,   108,  1225,   115,  1202,   475,   108,
    3022      115,   110,  1289,   112,   113,  1225,   184,   109,     4,     5,
    3023        6,     7,     8,     9,   131,   109,   109,   116,   109,  1225,
    3024     1225,   109,   109,   115,  1244,  1244,    71,   109,   109,   207,
    3025       75,   109,  1262,  1263,  1264,   512,    32,    82,    83,   109,
    3026      517,   219,   109,   520,   109,   109,    71,  1225,    73,    74,
    3027       75,    84,    85,    86,   109,   109,   923,    82,    83,   470,
    3028      927,   109,   109,   108,   114,   110,   109,   608,   109,   610,
    3029       28,  1397,    68,   118,    70,   108,  1539,   110,  1298,   112,
    3030      113,   698,   111,  1303,  1262,  1263,  1264,   109,   130,  1319,
    3031     1320,   109,   109,  1298,   114,   109,   115,  1303,  1303,   111,
    3032      967,   968,   969,   720,   111,   109,  1061,  1225,    71,   109,
    3033      115,  1202,    75,  1203,   109,   901,   115,  1337,  1337,    82,
    3034       83,   115,  1529,  1529,   116,   113,   111,    71,   109,  1529,
    3035     1238,    75,  1529,  1529,   111,  1225,  1530,   115,    82,    83,
    3036      115,  1319,  1320,   109,  1374,   108,  1529,  1377,  1020,   327,
    3037      109,  1529,   108,  1020,  1244,   118,   697,   108,   699,   108,
    3038     1554,   108,  1270,   108,   108,   111,  1396,  1397,   116,   131,
    3039     1278,  1279,  1280,   114,   118,   109,  1406,  1407,  1504,    71,
    3040      109,    73,    74,    75,   109,  1303,     0,     1,   128,  1061,
    3041       82,    83,  1422,   114,   811,   113,  1374,  1427,   111,  1377,
    3042     1530,   678,   743,   744,   131,  1160,   109,  1298,   115,   111,
    3043      687,   115,   111,  1303,   691,  1445,   109,    31,  1326,   109,
    3044     1440,  1440,   109,   111,  1554,   111,   404,  1457,  1406,  1407,
    3045       44,   111,   109,    54,  1101,  1102,   111,   111,   111,    46,
    3046       29,   109,   131,  1463,  1422,   114,   131,  1337,   131,  1427,
    3047     1470,    71,    66,    73,    74,    75,   114,  1463,  1463,   131,
    3048     1529,   131,    82,    83,  1470,  1470,  1529,  1445,   679,   116,
    3049     1225,  1529,   889,   109,  1504,  1505,   111,   114,  1064,  1457,
    3050      111,   111,   111,   104,  1514,  1240,   107,   111,   108,   103,
    3051     1520,    80,    81,   111,   111,  1525,   111,   838,   118,  1529,
    3052     1530,  1396,  1530,  1523,   109,  1177,   109,   111,   108,   850,
    3053      111,    63,   108,  1543,   108,  1545,    59,  1523,  1523,  1549,
    3054      113,   109,  1552,   109,  1554,   131,  1554,  1505,    80,   116,
    3055     1560,   145,   153,   111,  1564,   111,  1514,   109,   111,   153,
    3056      154,   109,  1520,   108,  1472,  1463,  1474,  1525,  1303,    95,
    3057     1440,    95,  1470,  1220,   108,   114,   131,   115,   111,   109,
    3058      977,   109,   109,   115,   109,  1543,    41,  1545,   131,   131,
    3059      184,  1549,    95,  1463,  1552,  1204,  1205,  1244,  1207,   116,
    3060     1470,  1509,  1560,  1511,  1213,   199,  1564,  1216,   202,   203,
    3061      109,  1008,   109,   207,    95,   216,   937,   131,   109,   109,
    3062      131,   116,   131,   814,   945,  1523,   158,   109,   114,   109,
    3063       50,   131,    52,   824,   228,    55,    56,    57,   232,    59,
    3064      234,   111,   963,   111,   108,   114,   131,   114,   839,   243,
    3065      109,   109,   131,  1523,    74,   249,   109,  1539,   109,  1225,
    3066      254,  1058,  1076,   569,  1225,   570,    86,    87,   925,   270,
    3067      264,   571,   241,  1492,    63,   573,   277,  1382,   272,   572,
    3068       25,    26,    27,  1564,    73,  1313,  1136,   219,  1342,  1470,
    3069     1337,    10,    11,    12,    13,    14,    10,    11,    12,    13,
    3070       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3071       24,    25,    26,    27,  1092,    29,    30,    31,   452,    38,
    3072      452,   945,   704,   464,    38,   257,   115,   893,  1463,   261,
    3073      947,   992,   589,   965,   657,  1470,  1133,   747,  1244,   490,
    3074      757,   577,    -1,    -1,   577,   346,   340,    66,   577,   343,
    3075       -1,    96,    66,    98,  1320,   349,    -1,    -1,    -1,    73,
    3076       74,    -1,   363,    77,    -1,    -1,   367,  1376,   362,   158,
    3077       -1,    -1,   366,    -1,    -1,   369,    -1,    10,    11,    12,
    3078       13,    14,    -1,    -1,    -1,    -1,    -1,    -1,  1523,   108,
    3079       -1,   110,    -1,  1440,  1191,  1192,   110,    -1,    -1,   118,
    3080       -1,    -1,    -1,    -1,   118,    38,    -1,    -1,  1374,   378,
    3081       -1,  1377,    -1,    -1,    -1,  1072,   348,    -1,    -1,    -1,
    3082       -1,    -1,   416,    -1,    -1,  1472,    -1,  1474,    -1,   430,
    3083      219,    -1,    -1,    66,   179,    -1,    -1,   431,    -1,    -1,
    3084       -1,    -1,   436,    -1,   189,   190,    -1,  1038,  1039,   194,
    3085      444,   196,   197,    -1,    -1,    -1,  1422,    -1,    -1,    -1,
    3086       -1,  1427,  1509,    -1,  1511,    -1,    -1,    -1,   257,    -1,
    3087       -1,    -1,   261,    -1,    -1,   108,   470,   110,    -1,   473,
    3088       -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,   277,    -1,
    3089      459,  1457,  1539,    -1,   488,   464,   490,   429,    -1,    10,
    3090       11,    12,    13,    14,   498,  1096,  1097,    -1,   502,    -1,
    3091       -1,    -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
    3092       13,    14,    -1,   343,   344,    -1,    -1,    38,   497,    71,
    3093      499,    73,    74,    75,    -1,   355,   356,   531,   532,    -1,
    3094       82,    83,    -1,    -1,    -1,    38,    -1,   479,    -1,    -1,
    3095       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,   348,
    3096       71,    -1,    73,    74,    75,    -1,   108,    -1,   110,    -1,
    3097       -1,    82,    83,    66,   116,    -1,   118,  1543,    71,    -1,
    3098       73,    74,    75,  1549,   578,    -1,    -1,    -1,    -1,    82,
    3099       83,    -1,    -1,    -1,  1560,   596,    -1,   108,  1564,   110,
    3100       -1,    -1,   596,   597,  1401,   599,    -1,   118,    -1,    -1,
    3101       -1,    -1,    -1,    -1,    -1,   108,   610,   110,    -1,    -1,
    3102       -1,  1418,    -1,    -1,    -1,   118,    -1,    -1,   629,    -1,
    3103       -1,    -1,    -1,    -1,   628,    -1,    -1,    -1,    -1,   633,
    3104      429,    -1,    -1,    -1,   645,   639,    -1,  1238,   642,   643,
    3105      644,    -1,    -1,    -1,    -1,  1312,    -1,   446,    -1,   660,
    3106       71,    -1,    73,    74,    75,    -1,    -1,   661,    -1,    -1,
    3107      602,    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,  1270,
    3108       -1,    -1,   651,    -1,    -1,   679,    -1,  1278,  1279,  1280,
    3109      479,    -1,    -1,    -1,  1491,  1492,   690,   108,   630,   110,
    3110       -1,   695,   696,   635,    -1,   699,    -1,   118,    -1,    -1,
    3111       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3112       19,    20,    21,    22,    23,    24,    25,    26,     0,    -1,
    3113       29,    30,    31,    -1,    -1,  1326,    -1,    -1,   732,    38,
    3114       39,   735,    -1,   712,    -1,    -1,    -1,    -1,    -1,   718,
    3115      744,    -1,    -1,   747,    -1,     0,   757,    -1,    -1,    31,
    3116       71,    -1,    73,    74,    75,    -1,    -1,    66,    -1,    -1,
    3117       -1,    82,    83,    -1,    73,    74,    -1,   771,   772,    -1,
    3118       -1,    -1,    -1,   777,    -1,    -1,    31,    -1,    -1,    -1,
    3119       -1,   723,    -1,    -1,    66,    -1,    -1,   108,    -1,   110,
    3120       -1,    -1,    -1,    -1,    -1,   737,    -1,   118,  1529,    -1,
    3121       -1,   110,    -1,   602,  1471,   114,  1473,    -1,    -1,   118,
    3122      814,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3123      824,    -1,    -1,   827,    -1,   829,   581,   582,   832,   833,
    3124      834,   630,    -1,    -1,    -1,   839,   635,    -1,    -1,    -1,
    3125       -1,  1508,    -1,  1510,    -1,   849,    71,    -1,    73,    74,
    3126       75,    -1,    -1,    -1,    -1,    -1,   611,    82,    83,   614,
    3127      615,    -1,   617,    -1,   619,   620,    -1,    -1,    -1,   624,
    3128      625,    -1,   154,    96,    97,    98,    99,   100,   101,   102,
    3129      103,   104,   105,   108,    -1,    -1,  1553,    -1,  1555,   831,
    3130       -1,    -1,    -1,   118,   724,    -1,   726,   901,    -1,   154,
    3131       -1,  1568,  1569,   733,   734,    -1,    -1,   130,   738,    -1,
    3132       -1,    -1,   923,    -1,   893,    -1,   187,    -1,    -1,   923,
    3133      750,   900,    -1,   194,   723,   755,    -1,    -1,    10,    11,
    3134       12,    13,    14,    -1,    -1,    -1,    -1,    -1,   737,    -1,
    3135       -1,    -1,    -1,    -1,    -1,    -1,   228,    -1,    -1,    -1,
    3136       -1,   781,    -1,   708,   709,   959,    38,    -1,   757,   714,
    3137       -1,    -1,    -1,   967,   968,    -1,    -1,   249,    -1,    -1,
    3138       -1,    -1,   254,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3139       -1,   985,    -1,    -1,    66,    -1,    -1,    -1,    -1,    71,
    3140       -1,    73,    74,    75,   249,   266,   826,    -1,    -1,   254,
    3141       82,    83,    -1,    -1,    -1,    -1,    25,    26,    27,    -1,
    3142       -1,    -1,    -1,   992,    -1,    -1,  1020,    -1,    -1,    -1,
    3143       -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,  1033,
    3144       -1,    -1,   831,    -1,  1038,  1039,   118,  1041,  1042,    -1,
    3145       -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    -1,
    3146       -1,   322,    -1,   883,   884,   885,   886,  1061,   888,   330,
    3147       -1,    -1,   333,    -1,    -1,    -1,    -1,   349,    -1,    -1,
    3148       -1,    -1,    38,    -1,   904,    -1,    -1,    96,    -1,    98,
    3149       -1,  1023,    -1,    -1,    -1,    -1,    -1,    -1,   918,    -1,
    3150       -1,    -1,  1096,  1097,   349,    -1,    -1,    -1,  1102,    -1,
    3151       66,    -1,    -1,    -1,   123,    71,    -1,    73,    74,    75,
    3152       -1,    -1,    -1,  1092,    -1,    -1,    82,    83,    -1,    -1,
    3153       -1,    -1,    -1,    -1,    -1,   396,    -1,   957,    -1,   400,
    3154       -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,    -1,
    3155       -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,   431,
    3156       -1,    -1,   118,    -1,   436,    -1,  1160,    -1,    -1,    -1,
    3157      179,   416,   444,    -1,    -1,    -1,    -1,   997,   187,    -1,
    3158      189,   190,    -1,    -1,  1004,   194,   431,   196,   197,  1009,
    3159       -1,   436,    -1,    -1,  1014,    -1,  1016,    -1,   470,   444,
    3160     1020,  1021,  1022,    -1,    -1,  1025,    -1,    -1,    -1,  1203,
    3161       -1,    -1,    -1,    -1,  1034,    -1,   488,    -1,   490,  1220,
    3162       -1,    -1,    -1,    -1,   485,   470,  1220,    -1,    -1,  1198,
    3163       -1,  1225,  1052,  1053,  1023,    -1,    -1,    -1,    10,    11,
    3164       12,    13,    14,   488,  1238,   490,  1240,    -1,    -1,    -1,
    3165     1244,    -1,    -1,    -1,    -1,    -1,    -1,   266,    -1,  1079,
    3166      532,    -1,  1082,    -1,    -1,    -1,    38,    -1,    -1,    -1,
    3167     1202,    -1,    -1,    -1,    -1,    -1,  1270,    -1,    -1,    -1,
    3168       -1,    -1,    -1,    -1,  1278,  1279,  1280,   532,    -1,    -1,
    3169       -1,    -1,    -1,    -1,    66,  1289,  1290,    -1,    -1,    71,
    3170     1120,    73,    74,    75,    -1,    -1,  1126,  1127,    -1,  1303,
    3171       82,    83,    -1,    -1,    -1,    -1,   577,   578,  1138,    -1,
    3172       -1,    -1,    -1,  1143,    -1,   597,  1146,    -1,  1148,    -1,
    3173       -1,  1151,  1326,    -1,    -1,    -1,   108,    -1,    -1,    -1,
    3174       -1,    -1,    -1,  1337,  1164,    -1,   118,    -1,    -1,    -1,
    3175       -1,    -1,   597,  1098,    -1,    -1,    -1,  1177,    -1,  1179,
    3176     1180,  1181,  1182,    -1,    -1,    -1,  1298,    -1,    -1,    -1,
    3177      642,   643,   644,    -1,    -1,  1195,    -1,  1197,    -1,    -1,
    3178       -1,  1201,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   661,
    3179       -1,    -1,    -1,    -1,    -1,  1396,    -1,   642,   643,   644,
    3180       -1,    -1,    -1,    -1,    -1,   666,    -1,   679,    -1,   670,
    3181     1230,  1231,    -1,  1202,    -1,    -1,   661,    -1,   690,    -1,
    3182     1414,    -1,     0,    -1,   696,    -1,    -1,    -1,    -1,    -1,
    3183       -1,    -1,    -1,    -1,   679,    -1,    -1,    -1,    -1,    -1,
    3184       -1,    -1,   703,    -1,    -1,   690,  1440,    -1,    -1,     0,
    3185       -1,   696,    -1,    31,    -1,     0,     1,    -1,    -1,    -1,
    3186      732,  1281,  1282,   735,    -1,    -1,    -1,    -1,    -1,  1463,
    3187       -1,  1291,    -1,    -1,    -1,    -1,  1470,  1222,    -1,    -1,
    3188       31,    -1,    -1,    -1,    -1,    -1,    31,   732,    66,    -1,
    3189      735,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3190      772,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1298,
    3191       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    63,    -1,
    3192       -1,    66,    -1,  1343,    -1,    -1,    -1,   772,    -1,  1523,
    3193       -1,    -1,    -1,    -1,    -1,  1355,  1530,  1357,  1358,  1359,
    3194       -1,    -1,   814,    -1,    -1,    -1,    -1,    -1,    -1,  1369,
    3195       -1,    -1,   824,    -1,    -1,   827,    -1,   818,  1378,    -1,
    3196      832,    -1,   834,    -1,    -1,    -1,    -1,   839,    -1,   814,
    3197       -1,    -1,   581,   582,  1394,    -1,   154,    -1,    -1,   824,
    3198       -1,    -1,   827,    -1,    -1,    -1,    -1,   832,    -1,   834,
    3199       -1,    -1,    -1,    -1,   839,    -1,    -1,    -1,    -1,    -1,
    3200       -1,    -1,   611,   154,    -1,   614,   615,    -1,   617,   154,
    3201      619,   620,    -1,    -1,    -1,   624,   625,    -1,    -1,    -1,
    3202       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   901,
    3203     1450,  1451,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3204       -1,    -1,    -1,  1463,    -1,    -1,    -1,    -1,    -1,    -1,
    3205     1470,    -1,    -1,    -1,    -1,    -1,   901,    -1,    -1,    -1,
    3206       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3207      931,   249,    -1,    -1,   219,    -1,   254,    -1,    -1,    -1,
    3208       -1,    -1,    -1,  1503,    -1,    -1,    -1,  1507,    -1,    -1,
    3209       -1,    -1,    -1,    -1,   703,    -1,    -1,    -1,   249,   708,
    3210      709,    -1,    -1,   254,   249,   714,    -1,    -1,    -1,    -1,
    3211       -1,    -1,    -1,   985,    -1,    -1,  1536,    -1,  1538,    -1,
    3212       -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
    3213       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
    3214      985,    29,    30,    31,    -1,    -1,  1566,  1567,    -1,  1010,
    3215       38,    39,    -1,    -1,  1574,  1575,    -1,    -1,    -1,    -1,
    3216       -1,    -1,    -1,    -1,    -1,  1026,  1038,  1039,    -1,  1041,
    3217     1042,   349,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
    3218       -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,  1061,
    3219       -1,    -1,    -1,  1038,  1039,    -1,  1041,  1042,   349,    10,
    3220       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3221       21,    22,    23,    24,    25,    26,  1061,    -1,    29,    30,
    3222       31,    -1,   110,    -1,  1096,  1097,   114,    38,    -1,    -1,
    3223      118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   416,    -1,
    3224       -1,    -1,  1103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3225       -1,  1096,  1097,   431,    -1,    66,    -1,    -1,   436,    -1,
    3226       71,    -1,    73,    74,    75,   416,   444,    -1,    -1,    -1,
    3227       -1,    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3228      431,    -1,    -1,    -1,    -1,   436,   431,    -1,  1160,    -1,
    3229       -1,    -1,   470,   444,    -1,    -1,    -1,   108,    -1,   110,
    3230       -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,
    3231      488,    -1,   490,    -1,    -1,  1160,    -1,    -1,    -1,   470,
    3232       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3233       -1,  1203,    -1,    -1,    -1,    -1,    -1,   488,    -1,   490,
    3234       -1,    -1,    -1,    -1,    -1,   490,    -1,    -1,    -1,    -1,
    3235       -1,    -1,    -1,  1225,   532,    -1,    -1,    -1,  1203,    -1,
    3236       -1,    -1,    -1,    -1,    -1,    -1,  1238,    -1,  1240,    -1,
    3237       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3238     1225,   532,    -1,    -1,    -1,    -1,    -1,   532,    -1,    -1,
    3239       -1,    -1,    -1,  1238,    -1,  1240,    -1,    -1,  1270,    -1,
    3240       -1,    -1,    -1,    -1,    -1,    -1,  1278,  1279,  1280,    -1,
    3241       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1289,  1290,   597,
    3242       -1,    -1,    -1,    -1,    -1,  1270,    -1,    -1,    -1,    -1,
    3243       -1,  1303,    -1,  1278,  1279,  1280,    -1,    -1,    -1,    -1,
    3244       -1,    -1,    -1,    -1,  1289,  1290,   597,    -1,    -1,    -1,
    3245       -1,    -1,   597,    -1,  1326,    -1,    -1,    -1,  1303,    -1,
    3246       -1,    -1,    -1,    -1,   642,   643,   644,    -1,    -1,    -1,
    3247       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3248       -1,  1326,    -1,   661,    -1,    -1,    -1,    -1,    -1,  1098,
    3249       -1,   642,   643,   644,    -1,    -1,    -1,   642,   643,   644,
    3250       -1,   679,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3251      661,    -1,   690,    -1,    -1,    -1,   661,    -1,   696,    -1,
    3252       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   679,     7,
    3253       -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,   690,
    3254       -1,    -1,  1414,    -1,    -1,   696,    -1,    -1,    -1,    -1,
    3255       -1,    -1,    -1,    -1,   732,    -1,    -1,   735,    36,    37,
    3256       38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1414,
    3257       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3258       -1,   732,    -1,    -1,   735,    -1,    -1,    65,    66,    -1,
    3259      735,  1463,    -1,    71,   772,    -1,    -1,    75,  1470,    -1,
    3260       78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
    3261       -1,    -1,    -1,  1222,    -1,    93,    -1,    -1,  1463,    -1,
    3262       -1,   772,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,
    3263      108,    -1,   110,    -1,    -1,    -1,   814,    -1,    -1,   117,
    3264      118,   119,   120,   121,   122,    -1,   824,    -1,    -1,   827,
    3265       -1,  1523,    -1,    -1,   832,    -1,   834,    -1,    -1,    -1,
    3266       -1,   839,    -1,   814,    -1,    -1,    -1,    -1,    -1,    -1,
    3267       -1,    -1,    -1,   824,    -1,    -1,   827,    -1,  1523,    -1,
    3268       -1,   832,   827,   834,    -1,    -1,    -1,    -1,   839,   834,
    3269       -1,    -1,    -1,    -1,    -1,     0,    -1,    -1,     3,     4,
    3270        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3271       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3272       25,    26,    -1,   901,    29,    30,    31,    32,    -1,    -1,
    3273       35,    -1,    -1,    38,    39,    -1,    -1,    -1,    -1,    10,
    3274       11,    12,    13,    14,    -1,    10,    11,    12,    13,    14,
    3275      901,    -1,    -1,    -1,    -1,    -1,   901,    -1,    63,    -1,
    3276       -1,    66,    44,    68,    -1,    70,    71,    38,    73,    74,
    3277       75,    -1,    -1,    38,    -1,    -1,    -1,    82,    83,    -1,
    3278       -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3279       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
    3280       71,    66,    -1,   108,    75,   110,    71,   985,    -1,    -1,
    3281       75,    82,    83,   118,    -1,    -1,    -1,    82,    83,    -1,
    3282       -1,    -1,    -1,   968,    -1,    -1,    -1,   109,    -1,    -1,
    3283       -1,    -1,    -1,   115,   985,    -1,    -1,   108,    -1,    -1,
    3284      985,    -1,    -1,   108,    -1,    -1,    -1,   118,    -1,    -1,
    3285       -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
    3286     1038,  1039,   144,  1041,  1042,    -1,    -1,    -1,    -1,    -1,
    3287       -1,    -1,   154,    -1,    -1,    -1,   158,    -1,    -1,    -1,
    3288       -1,    -1,    -1,  1061,    -1,    -1,    -1,  1038,  1039,    -1,
    3289     1041,  1042,    -1,    -1,    -1,    -1,  1041,  1042,    -1,    -1,
    3290       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3291     1061,    -1,    -1,    -1,    -1,    -1,  1061,    -1,  1096,  1097,
    3292       -1,    -1,    -1,    -1,    -1,   207,    -1,    -1,    -1,    -1,
    3293       -1,    -1,    -1,    -1,    -1,    -1,    -1,   219,    -1,    -1,
    3294       -1,    -1,    -1,    -1,    -1,  1096,  1097,    -1,    -1,    -1,
    3295       -1,    36,    37,    -1,    39,   237,   238,    10,    11,    12,
    3296       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3297       23,    24,    25,    26,    -1,    -1,    29,    30,    31,   261,
    3298       65,    -1,  1160,    -1,    -1,    38,    71,   269,    -1,    -1,
    3299       75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
    3300       85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,  1160,
    3301       -1,   293,    -1,    66,   296,    -1,    -1,    -1,    -1,    -1,
    3302       73,    74,    -1,   108,    -1,  1203,    -1,    -1,    -1,    -1,
    3303       -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
    3304       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1225,    -1,    -1,
    3305       -1,    -1,  1203,    -1,    -1,    -1,    -1,  1202,  1203,    -1,
    3306     1238,   343,  1240,    -1,    -1,   118,   348,    -1,    -1,    -1,
    3307       -1,    -1,    -1,    -1,  1225,    -1,    -1,    -1,    -1,    -1,
    3308     1225,    -1,    -1,    -1,    -1,    -1,    -1,  1238,    -1,  1240,
    3309       -1,    -1,  1270,    -1,    -1,    -1,    -1,    -1,    -1,  1244,
    3310     1278,  1279,  1280,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3311       -1,  1289,  1290,    -1,    -1,    -1,    -1,    -1,    -1,  1270,
    3312       -1,    -1,    -1,    -1,    -1,  1303,    -1,  1278,  1279,  1280,
    3313       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1289,  1290,
    3314       -1,    -1,   424,   425,  1289,  1290,    -1,    -1,  1326,   431,
    3315       -1,    -1,  1303,  1298,    -1,    -1,    -1,    -1,  1303,    -1,
    3316       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3317      452,    -1,    -1,   455,    -1,  1326,    -1,    -1,    -1,   461,
    3318       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3319       -1,    -1,  1337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3320       -1,    -1,    -1,    -1,    -1,    -1,   488,    -1,    -1,    -1,
    3321       63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   500,    -1,
    3322       73,    -1,    75,    -1,    77,    -1,    -1,    -1,    -1,    -1,
    3323      512,    84,   514,    -1,    -1,   517,  1414,   519,   520,    -1,
    3324       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3325      532,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3326       -1,    -1,   115,  1414,   117,   118,   119,    -1,    -1,  1414,
    3327       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3328       -1,    -1,    -1,    -1,    -1,  1463,    -1,    43,    -1,    -1,
    3329       -1,    -1,  1470,    -1,    -1,  1440,    -1,    -1,    -1,    -1,
    3330       -1,    -1,    -1,   585,    -1,   158,    -1,    -1,    -1,    -1,
    3331       -1,    -1,  1463,    -1,    -1,   597,    -1,   599,  1463,  1470,
    3332      602,    -1,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,
    3333       -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,    -1,    -1,
    3334       -1,    -1,    -1,    99,    -1,  1523,   628,    -1,    -1,    -1,
    3335       -1,   633,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3336      642,   643,   644,    -1,    -1,    -1,   219,    -1,   221,   222,
    3337      223,    -1,  1523,    -1,    -1,    -1,    -1,    -1,  1523,   661,
    3338       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3339       19,    20,    21,    22,    23,    24,    25,    26,    27,   155,
    3340       29,    30,    31,    -1,   257,    -1,    -1,    -1,   261,    38,
    3341       -1,    -1,    -1,   169,   696,    -1,    -1,    -1,    -1,    -1,
    3342       -1,    -1,    -1,    -1,   277,    -1,    -1,    -1,    -1,    -1,
    3343       -1,    -1,    -1,    -1,    -1,   717,   192,    66,    -1,    -1,
    3344       -1,    -1,    -1,    -1,    73,    74,    -1,    -1,    77,    -1,
    3345      206,    -1,    -1,   735,    -1,   737,    -1,    -1,    -1,   215,
    3346       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,
    3347       -1,    -1,    -1,    -1,   327,    -1,    -1,    -1,    -1,   108,
    3348       -1,   110,    36,    37,    -1,    39,    -1,    -1,    -1,   118,
    3349      772,    -1,    -1,    -1,   250,   348,    -1,    -1,    -1,   255,
    3350      353,   354,    -1,    -1,    -1,    -1,    -1,    -1,   361,    -1,
    3351       -1,    65,   268,    -1,    -1,    -1,    -1,    71,   274,    -1,
    3352      276,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
    3353       -1,    85,    86,    -1,    -1,    -1,    -1,    -1,   294,    93,
    3354       -1,    -1,    -1,    -1,    -1,   827,    -1,    -1,    -1,   831,
    3355       -1,   404,   834,    -1,   108,    -1,   110,    -1,    -1,   113,
    3356       -1,    -1,    -1,   117,   118,   119,   120,   121,   122,   422,
    3357       -1,    -1,    -1,    -1,   427,    -1,   429,    -1,    -1,    -1,
    3358       -1,   337,    -1,    -1,    -1,    -1,   342,    -1,    -1,    -1,
    3359       -1,    -1,    -1,   446,    -1,    -1,   449,   450,    -1,    -1,
    3360       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3361       -1,    -1,   465,    -1,   370,    -1,    -1,    -1,   374,   375,
    3362       -1,   377,    -1,    -1,    -1,    -1,   479,    -1,   384,   385,
    3363       -1,   387,   388,   486,   390,    -1,   392,    -1,    -1,    -1,
    3364       -1,    -1,    -1,     7,    -1,   927,    10,    11,    12,    13,
    3365       14,    -1,    -1,   409,    -1,    -1,    -1,    -1,    -1,    -1,
    3366       -1,   417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3367       -1,    -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
    3368       -1,    -1,    -1,    -1,    -1,    -1,   442,   969,    -1,    -1,
    3369       -1,    -1,    -1,    -1,    -1,    -1,    -1,   453,    -1,    -1,
    3370       -1,    65,    66,   985,    -1,    -1,    -1,    71,    -1,    -1,
    3371       -1,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
    3372      476,    85,    86,    -1,    -1,    -1,   482,    -1,    -1,    93,
    3373       -1,   487,    -1,    -1,    -1,    -1,    -1,    -1,  1020,    -1,
    3374       -1,    -1,    -1,    -1,   108,    -1,   110,    -1,    -1,   602,
    3375       -1,    -1,    -1,   117,   118,   119,   120,   121,   122,  1041,
    3376     1042,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   524,    -1,
    3377       -1,    -1,    -1,    -1,    -1,    -1,    -1,   630,   280,    -1,
    3378      282,   283,   635,    -1,   540,    -1,    -1,    -1,   290,   291,
    3379       -1,    -1,    -1,   295,   296,    -1,    -1,    -1,    -1,    -1,
    3380       -1,    -1,    -1,    -1,    -1,   307,    -1,    -1,    -1,    -1,
    3381       -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,  1101,
    3382       -1,   577,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3383      586,    -1,    -1,    -1,    -1,    -1,    -1,   593,    -1,    -1,
    3384       -1,   343,   598,    -1,    65,    -1,    -1,    -1,    -1,    -1,
    3385       71,    -1,    -1,   609,    75,    -1,    -1,    78,    79,    80,
    3386       81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
    3387      723,    -1,    93,    -1,    -1,    -1,    -1,   379,  1160,    -1,
    3388       -1,    -1,    -1,    -1,   737,    -1,    -1,   108,    -1,   110,
    3389       -1,    -1,    -1,    -1,   650,   116,   117,   118,   119,   120,
    3390      121,   122,    -1,    -1,   757,    -1,    -1,    -1,    -1,    -1,
    3391       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3392     1202,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3393      686,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
    3394       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3395       25,    26,    27,    -1,    29,    30,    31,    -1,  1240,    -1,
    3396       -1,    -1,    -1,    38,    -1,   818,    -1,    -1,    -1,    -1,
    3397       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   831,    -1,
    3398       -1,    -1,    -1,    -1,    -1,   741,    -1,    -1,    -1,    -1,
    3399       -1,    66,    -1,    -1,    -1,   751,   752,   850,    73,    74,
    3400       -1,    -1,    77,    -1,    -1,    -1,    -1,  1289,  1290,   765,
    3401       -1,    -1,    -1,    -1,    -1,    -1,  1298,    -1,    -1,    -1,
    3402       -1,    -1,    -1,    -1,    -1,    -1,   782,    -1,   784,    -1,
    3403       -1,    -1,   788,   108,    -1,   110,    -1,    -1,    -1,    -1,
    3404       -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
    3405       -1,    -1,    -1,    -1,   556,   557,   558,   559,   560,   561,
    3406      562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
    3407      572,   573,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3408       36,    37,    -1,    39,   937,    -1,    -1,    -1,    -1,    -1,
    3409       -1,    -1,    -1,    -1,    -1,    -1,    -1,   599,   854,    -1,
    3410       -1,    -1,    -1,    -1,    -1,   861,    -1,    -1,    -1,    65,
    3411      963,    -1,    -1,    -1,    -1,    71,    -1,    -1,   874,    75,
    3412      876,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
    3413       86,    -1,  1414,    -1,   890,    -1,    -1,    93,   991,    -1,
    3414       -1,   897,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3415       -1,    -1,   108,   909,   110,    -1,   912,    -1,    -1,   115,
    3416       -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
    3417     1023,    -1,    -1,    -1,   930,    -1,    -1,    -1,    -1,    -1,
    3418       -1,  1034,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3419     1472,    -1,  1474,    -1,    -1,    -1,   698,    -1,    10,    11,
    3420       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3421       22,    23,    24,    25,    26,    27,    -1,    -1,   720,    -1,
    3422       -1,    -1,    -1,    -1,    -1,    -1,    38,  1509,    -1,  1511,
    3423       -1,   733,    10,    11,    12,    13,    14,    15,    16,    17,
    3424       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3425       -1,    29,    30,    31,    66,    -1,    -1,  1539,    -1,    -1,
    3426       38,    -1,  1115,  1019,    -1,    77,    -1,    -1,    -1,   153,
    3427      154,    -1,    -1,    -1,    -1,    -1,    -1,   779,    -1,    -1,
    3428       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
    3429       -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,    77,
    3430       -1,    -1,    -1,   187,    82,    83,    -1,    -1,    -1,   811,
    3431      194,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1075,
    3432       -1,    -1,    -1,    -1,   826,    -1,  1082,    -1,    -1,    -1,
    3433      108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3434      118,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,  1202,
    3435       -1,    -1,    -1,    -1,    -1,  1111,    -1,    -1,    -1,    -1,
    3436     1116,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1124,    -1,
    3437       65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,
    3438       75,    -1,   266,    78,    79,    80,    81,    82,    83,    -1,
    3439       85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,  1155,
    3440       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3441       -1,  1167,    -1,   108,  1170,   110,  1172,   112,   113,    -1,
    3442       -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
    3443     1186,  1187,    -1,    -1,    -1,    -1,    -1,    -1,   322,    -1,
    3444       -1,    -1,    -1,    -1,    -1,  1298,   330,   331,    -1,   333,
    3445      334,    -1,  1208,    -1,    -1,    -1,    -1,    -1,    -1,   343,
    3446       -1,    -1,    -1,   347,    -1,    -1,    -1,    -1,    -1,    -1,
    3447       -1,    -1,    -1,    -1,    -1,   977,    -1,    -1,    -1,  1235,
    3448      144,    -1,   366,    -1,    -1,   369,    -1,    -1,    -1,    -1,
    3449      154,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3450       -1,    -1,   166,   167,    -1,    -1,  1008,    -1,    -1,    -1,
    3451       -1,    -1,   396,    -1,    -1,    -1,   400,    -1,  1020,     4,
    3452        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3453       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3454       25,    26,    -1,    -1,    29,    30,    31,   431,    -1,    -1,
    3455       -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,  1061,
    3456       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3457      454,    -1,    -1,   237,    -1,    -1,  1332,    -1,  1334,    -1,
    3458       -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
    3459       -1,  1347,    -1,  1349,    -1,    -1,    -1,    -1,   262,    -1,
    3460       -1,   485,    -1,    -1,   488,    -1,    -1,    -1,    -1,    -1,
    3461       -1,  1367,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3462       -1,    -1,    -1,    -1,   109,   110,    -1,  1383,  1384,    -1,
    3463       -1,  1133,    -1,   118,    -1,    -1,    -1,    -1,    -1,  1395,
    3464       -1,    -1,  1398,    -1,   528,    -1,    -1,   531,   532,    -1,
    3465       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3466       -1,    -1,    -1,    -1,  1420,    -1,    -1,    -1,    -1,    -1,
    3467       -1,    -1,    -1,  1429,    -1,  1177,  1432,    -1,  1434,  1435,
    3468     1436,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1191,
    3469     1192,    -1,    -1,   577,   578,    -1,    -1,    -1,    -1,    -1,
    3470       -1,  1554,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3471       -1,    -1,   596,   597,   378,   599,    -1,    -1,    -1,    -1,
    3472     1476,    -1,  1478,    -1,   608,  1481,   610,   611,    -1,    -1,
    3473       -1,    -1,    -1,   617,    -1,    -1,    -1,    -1,    -1,    -1,
    3474     1496,    -1,    -1,   627,   628,    -1,    -1,    -1,    -1,   633,
    3475       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   642,   643,
    3476      644,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3477       -1,    -1,    -1,    -1,    -1,    -1,    -1,   661,    -1,    -1,
    3478       -1,    -1,   666,   667,    -1,    -1,   670,   671,    -1,    -1,
    3479       -1,    -1,    -1,   677,    -1,    -1,    -1,    -1,    -1,    -1,
    3480       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3481       -1,   695,   696,   697,    -1,   699,   480,    -1,    -1,   703,
    3482       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3483       19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
    3484       29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,
    3485       -1,   735,   736,    -1,    -1,   519,    -1,    -1,    -1,    -1,
    3486       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   532,    -1,
    3487       -1,    -1,    -1,    -1,    -1,   539,    -1,    66,   542,    -1,
    3488       -1,    -1,    -1,    -1,    73,    74,    -1,   771,   772,   553,
    3489      554,    -1,   776,   777,    -1,    -1,    -1,    -1,    -1,  1401,
    3490       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3491       -1,   575,    -1,    -1,    -1,    -1,  1418,    -1,    -1,    -1,
    3492       -1,   585,    -1,    -1,    -1,    -1,    -1,    -1,   592,   118,
    3493       -1,    -1,    -1,   597,   818,    -1,    -1,    -1,    -1,    -1,
    3494       -1,    -1,    -1,   827,    -1,    -1,    -1,    -1,    -1,   833,
    3495      834,    -1,    -1,    -1,   838,    -1,   840,    -1,    -1,    -1,
    3496       -1,    -1,    -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,
    3497       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3498       -1,    -1,    -1,   647,    -1,    -1,    -1,    -1,    -1,  1491,
    3499     1492,    -1,   656,    -1,    -1,    -1,    -1,    -1,    -1,     3,
    3500        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    3501       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3502       24,    25,    26,    -1,    -1,    29,    30,    31,    32,    -1,
    3503       -1,    35,   696,    -1,    38,    39,    -1,    -1,    -1,   923,
    3504       -1,    -1,    -1,    -1,    -1,    -1,    -1,   931,    36,    37,
    3505       -1,    39,    -1,   937,    -1,    -1,    -1,    -1,    -1,    63,
    3506       -1,   945,    66,    -1,    68,    -1,    70,    71,    -1,    73,
    3507       74,    75,    -1,    -1,   958,   959,    -1,    65,    82,    83,
    3508       -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
    3509       78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
    3510       -1,   985,    -1,    -1,   108,    93,   110,   991,   772,    -1,
    3511      774,    -1,    -1,    -1,   118,    -1,   780,    -1,    -1,    -1,
    3512      108,    -1,   110,   787,    -1,   113,  1010,  1011,    -1,   117,
    3513      118,   119,   120,   121,   122,    -1,  1020,    -1,    -1,    -1,
    3514       -1,    -1,  1026,  1027,    -1,  1029,  1030,  1031,    -1,    -1,
    3515       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1041,  1042,    -1,
    3516       -1,    -1,    -1,    -1,    -1,    -1,    -1,   831,   832,    -1,
    3517      834,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3518       -1,    -1,    -1,    -1,    -1,   849,    -1,    -1,    -1,    -1,
     4051      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     4052      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
    35194053      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    35204054      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3521       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1102,  1103,
    3522     1104,    -1,    -1,    -1,    -1,   889,    -1,    -1,    -1,   893,
    3523       -1,  1115,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
    3524        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3525       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3526       -1,    -1,    29,    30,    31,    32,    -1,    -1,    35,    36,
    3527       37,    38,    39,    40,    -1,    42,  1160,    -1,    45,    46,
    3528       47,    48,    49,    50,    51,    52,    -1,    -1,    -1,    56,
    3529       -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    66,
    3530       -1,    68,    -1,    70,    71,   969,    73,    74,    75,    -1,
    3531       -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
    3532       -1,   985,   986,    -1,    -1,    -1,    93,    -1,   992,    -1,
    3533       -1,    -1,    36,    37,   998,    39,  1220,  1001,    -1,  1003,
    3534       -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
    3535      117,   118,   119,   120,   121,   122,  1240,    -1,    -1,  1023,
    3536      127,    65,    -1,    -1,   131,    -1,    -1,    71,    -1,    -1,
    3537     1034,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
    3538       -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
    3539       -1,    -1,  1056,    -1,  1058,    -1,    -1,    -1,    -1,    -1,
    3540       -1,    -1,    -1,    -1,   108,  1289,  1290,    -1,    -1,  1073,
    3541     1074,    -1,    -1,   117,   118,   119,   120,   121,   122,    -1,
    3542       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3543     1094,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
    3544        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3545       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3546       25,    26,    -1,    -1,    29,    30,    31,    32,    -1,    -1,
    3547       35,    36,    37,    38,    39,    -1,    -1,  1141,    -1,    -1,
    3548       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3549       36,    37,    -1,    39,    -1,    -1,  1160,    -1,    -1,    -1,
    3550       65,    66,    -1,    68,    -1,    70,    71,    -1,    73,    74,
    3551       75,  1175,  1176,    78,    79,    80,    81,    82,    83,    65,
    3552       85,    86,    -1,    -1,    -1,    71,    -1,    -1,    93,    75,
    3553     1414,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
    3554       86,    -1,    -1,   108,    -1,   110,    -1,    93,    -1,    -1,
    3555       -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
    3556       -1,    -1,   108,    -1,   110,    -1,   131,    -1,    -1,    -1,
    3557       -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
    3558       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3559       -1,    -1,  1256,    -1,    -1,    -1,     3,     4,     5,     6,
    3560        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3561       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3562     1504,    -1,    29,    30,    31,    32,    -1,    -1,    35,    36,
    3563       37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3564       -1,    -1,    -1,    -1,    -1,  1529,  1530,    -1,    -1,    -1,
    3565       -1,    -1,    -1,  1317,    -1,  1319,    -1,    -1,    65,    66,
    3566       -1,    68,    -1,    70,    71,    -1,    73,    74,    75,    -1,
    3567     1554,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
    3568       -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
    3569       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3570       -1,   108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
    3571      117,   118,   119,   120,   121,   122,    -1,    -1,     4,     5,
    3572        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    3573       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3574       26,  1405,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
    3575       36,    37,    38,    39,    -1,    10,    11,    12,    13,    14,
    3576       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3577       25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    65,
    3578       66,    -1,    68,    38,    70,    71,    -1,    73,    74,    75,
    3579       -1,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
    3580       86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
    3581       -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,
    3582       -1,    -1,   108,  1487,   110,    -1,    -1,    82,    83,   115,
    3583       -1,   117,   118,   119,   120,   121,   122,     4,     5,     6,
    3584        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3585       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3586       -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
    3587       37,    38,    39,    -1,    -1,  1539,    -1,    10,    11,    12,
    3588       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3589       23,    24,    25,    26,    27,    -1,    -1,    -1,    65,    66,
    3590       -1,    68,    -1,    70,    71,    38,    73,    74,    75,    -1,
    3591       -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
    3592       -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
    3593       -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
    3594       -1,   108,    -1,   110,    77,    -1,    -1,    -1,   115,    -1,
    3595      117,   118,   119,   120,   121,   122,     4,     5,     6,     7,
    3596        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3597       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
    3598       -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,
    3599       38,    39,    -1,    10,    11,    12,    13,    14,    15,    16,
    3600       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3601       -1,    -1,    29,    30,    31,    -1,    -1,    65,    66,    -1,
    3602       68,    38,    70,    71,    -1,    73,    74,    75,    -1,    -1,
    3603       78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
    3604       -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    66,
    3605       -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,
    3606      108,    -1,   110,    -1,    -1,    -1,    -1,   115,    -1,   117,
    3607      118,   119,   120,   121,   122,     4,     5,     6,     7,     8,
    3608        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3609       19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
    3610       29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,
    3611       39,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
    3612       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
    3613       -1,    29,    30,    31,    -1,    -1,    65,    66,    -1,    68,
    3614       38,    70,    71,    -1,    73,    74,    75,    -1,    -1,    78,
    3615       79,    80,    81,    82,    83,    -1,    85,    86,    -1,    -1,
    3616       -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    66,    -1,
    3617       -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,   108,
    3618       -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,
    3619      119,   120,   121,   122,     4,     5,     6,     7,     8,     9,
    3620       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3621       20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
    3622       30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,    39,
    3623       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3624       19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
    3625       -1,    -1,    -1,    -1,    -1,    65,    66,    -1,    68,    38,
    3626       70,    71,    -1,    73,    74,    75,    -1,    -1,    78,    79,
    3627       80,    81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,
    3628       -1,    -1,    -1,    93,    -1,    -1,    -1,    66,    -1,    -1,
    3629       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,
    3630      110,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,
    3631      120,   121,   122,     4,     5,     6,     7,     8,     9,    10,
    3632       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3633       21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
    3634       31,    -1,    -1,    -1,    -1,    36,    37,    38,    39,    -1,
    3635       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3636       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3637       -1,    -1,    -1,    -1,    65,    66,    -1,    68,    -1,    70,
    3638       71,    -1,    73,    74,    75,    -1,    -1,    78,    79,    80,
    3639       81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
    3640       -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3641       -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,
    3642       -1,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
    3643      121,   122,     4,     5,     6,     7,     8,     9,    10,    11,
    3644       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3645       22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
    3646       -1,    -1,    -1,    -1,    36,    37,    38,    39,    -1,    -1,
    3647       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3648       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3649       -1,    -1,    -1,    65,    66,    -1,    68,    -1,    70,    71,
    3650       -1,    73,    74,    75,    -1,    -1,    78,    79,    80,    81,
    3651       82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
    3652       -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3653       -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,    -1,
    3654       -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,
    3655      122,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    3656       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3657       22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
    3658       32,    -1,    -1,    35,    -1,    -1,    38,    39,    -1,    -1,
    3659       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3660       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3661       -1,    63,    -1,    -1,    66,    -1,    68,    -1,    70,    71,
    3662       -1,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,
    3663       82,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3664       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3665       -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,    -1,
    3666       -1,    -1,   114,    -1,    -1,    -1,   118,     3,     4,     5,
    3667        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    3668       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3669       26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
    3670       -1,    -1,    38,    10,    11,    12,    13,    14,    15,    16,
    3671       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3672       -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
    3673       66,    38,    68,    -1,    70,    71,    -1,    73,    74,    75,
    3674       -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    -1,    -1,
    3675       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
    3676       -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,
    3677       -1,    -1,   108,    -1,   110,    -1,    -1,    -1,    -1,    -1,
    3678       -1,    -1,   118,     3,     4,     5,     6,     7,     8,     9,
    3679       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3680       20,    21,    22,    23,    24,    25,    26,    27,    -1,    29,
    3681       30,    31,    32,    -1,    -1,    35,    -1,    -1,    38,    -1,
    3682       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3683       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3684       -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,
    3685       70,    -1,    -1,    73,    74,    -1,    -1,    77,    -1,     3,
    3686        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    3687       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3688       24,    25,    26,    -1,    -1,    29,    30,    31,    32,    -1,
    3689      110,    35,    -1,    -1,    38,    -1,    -1,    -1,   118,    -1,
    3690       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3691       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3692       -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,
    3693       74,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
    3694       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3695       21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
    3696       31,    -1,    -1,    -1,    -1,    -1,   110,    38,    -1,    -1,
    3697       -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
    3698       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3699       -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,
    3700       -1,    -1,    73,    74,     4,     5,     6,     7,     8,     9,
    3701       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3702       20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
    3703       30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,   110,
    3704       -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,
    3705       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3706       -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,
    3707       70,    71,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,
    3708       -1,    -1,    82,    83,    -1,    -1,    10,    11,    12,    13,
    3709       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3710       24,    25,    26,    -1,    -1,    29,    30,    31,   108,    -1,
    3711      110,    -1,    -1,    -1,    38,    -1,    -1,    -1,   118,     4,
    3712        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3713       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3714       25,    26,    66,    -1,    29,    30,    31,    71,    -1,    73,
    3715       74,    75,    -1,    38,    -1,    -1,    -1,    -1,    82,    83,
    3716       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3717       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3718       -1,    66,    -1,    68,   108,    70,   110,    -1,    73,    74,
    3719       -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
    3720       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3721       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3722       -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,
    3723       -1,    -1,    -1,   118,     4,     5,     6,     7,     8,     9,
    3724       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3725       20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
    3726       30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,
    3727       -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
    3728       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3729       -1,    -1,    29,    30,    31,    -1,    66,    -1,    68,    -1,
    3730       70,    38,    -1,    73,    74,    -1,    -1,    -1,    -1,    -1,
    3731       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3732       -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    66,
    3733       -1,    -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,
    3734      110,    -1,    -1,    -1,    -1,    82,    83,    -1,   118,     4,
    3735        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3736       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3737       25,    26,    -1,   110,    29,    30,    31,    -1,    -1,    -1,
    3738       -1,   118,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,
    3739       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3740       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3741       -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
    3742        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    3743       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3744       24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
    3745       -1,    -1,    -1,    -1,    38,   110,    -1,    -1,    -1,    -1,
    3746       -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
    3747       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3748       -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,
    3749       74,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3750       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3751       23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
    3752       -1,    -1,    -1,    -1,    -1,    38,   110,    -1,    -1,    -1,
    3753       -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
    3754       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3755       -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,
    3756       73,    74,     4,     5,     6,     7,     8,     9,    10,    11,
    3757       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3758       22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
    3759       -1,    -1,    -1,    -1,    -1,    -1,    38,   110,    -1,    -1,
    3760       -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,
    3761       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3762       -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,
    3763       -1,    73,    74,    10,    11,    12,    13,    14,    15,    16,
    3764       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3765       -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
    3766       37,    38,    39,    -1,    -1,    -1,    -1,    -1,   110,    -1,
    3767       -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,
    3768       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    66,
    3769       -1,    -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,
    3770       -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
    3771       -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
    3772       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3773       -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
    3774      117,   118,   119,   120,   121,   122,    10,    11,    12,    13,
    3775       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3776       24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
    3777       -1,    -1,    36,    37,    38,    39,    10,    11,    12,    13,
    3778       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3779       24,    25,    26,    27,    -1,    29,    30,    31,    -1,    -1,
    3780       -1,    65,    66,    -1,    38,    -1,    -1,    71,    -1,    73,
    3781       74,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
    3782       -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
    3783       -1,    -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    73,
    3784       74,    75,    -1,    77,   108,    -1,   110,   111,    82,    83,
    3785       -1,    -1,    -1,   117,   118,   119,   120,   121,   122,    10,
    3786       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3787       21,    22,    23,    24,    25,    26,   110,    -1,    29,    30,
    3788       31,    -1,    -1,    -1,   118,    36,    37,    38,    39,    10,
    3789       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3790       21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
    3791       31,    -1,    -1,    -1,    65,    66,    -1,    38,    -1,    -1,
    3792       71,    -1,    73,    74,    75,    -1,    -1,    78,    79,    80,
    3793       81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
    3794       -1,    -1,    93,    -1,    -1,    66,    -1,    -1,    -1,    -1,
    3795       71,    -1,    73,    74,    -1,    -1,    -1,   108,   109,   110,
    3796       -1,    82,    83,    -1,    -1,    -1,   117,   118,   119,   120,
    3797      121,   122,    10,    11,    12,    13,    14,    15,    16,    17,
    3798       18,    19,    20,    21,    22,    23,    24,    25,    26,   110,
    3799       -1,    29,    30,    31,    -1,    -1,    -1,   118,    36,    37,
    3800       38,    39,    10,    11,    12,    13,    14,    15,    16,    17,
    3801       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
    3802       -1,    29,    30,    31,    -1,    -1,    -1,    65,    66,    -1,
    3803       38,    39,    -1,    71,    -1,    73,    74,    75,    -1,    -1,
    3804       78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
    3805       -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    66,    -1,
    3806       -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,    -1,
    3807      108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,   117,
    3808      118,   119,   120,   121,   122,    10,    11,    12,    13,    14,
    3809       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3810       25,    26,   110,    -1,    29,    30,    31,    -1,    -1,    -1,
    3811      118,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
    3812       -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
    3813       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3814       65,    66,    29,    30,    31,    -1,    71,    -1,    73,    74,
    3815       75,    38,    -1,    78,    79,    80,    81,    82,    83,    -1,
    3816       85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
    3817       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
    3818       -1,    -1,    -1,   108,    -1,   110,    73,    74,    -1,    -1,
    3819       -1,    -1,   117,   118,   119,   120,   121,   122,    10,    11,
    3820       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3821       22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
    3822       -1,   108,    -1,   110,    36,    37,    38,    39,    -1,    -1,
    3823       -1,   118,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
    3824       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3825       24,    25,    26,    65,    66,    29,    30,    31,    -1,    71,
    3826       -1,    73,    74,    75,    38,    -1,    78,    79,    80,    81,
    3827       82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
    3828       -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3829       -1,    -1,    66,    -1,    -1,    -1,   108,    -1,   110,    73,
    3830       74,    -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,
    3831      122,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3832       19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
    3833       29,    30,    31,    -1,   108,    -1,   110,    36,    37,    38,
    3834       39,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    10,
    3835       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3836       21,    22,    23,    24,    25,    26,    65,    66,    29,    30,
    3837       31,    -1,    71,    -1,    73,    74,    75,    38,    39,    78,
    3838       79,    80,    81,    82,    83,    -1,    85,    86,    -1,    -1,
    3839       -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,
    3840       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,   108,
    3841       -1,   110,    73,    74,    -1,    -1,    -1,    -1,   117,   118,
    3842      119,   120,   121,   122,     3,     4,     5,     6,     7,     8,
    3843        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3844       19,    20,    21,    22,    23,    24,    25,    26,    -1,   110,
    3845       29,    30,    31,   114,    -1,    -1,    -1,   118,    -1,    38,
    3846       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3847       20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
    3848       30,    31,    -1,    -1,    -1,    -1,    -1,    66,    38,    68,
    3849       -1,    70,    -1,    -1,    73,    74,    -1,    -1,    10,    11,
    3850       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3851       22,    23,    24,    25,    26,    -1,    66,    29,    30,    31,
    3852       -1,    71,    -1,    73,    74,    75,    38,    -1,    -1,    -1,
    3853       -1,    -1,    82,    83,   113,    -1,    10,    11,    12,    13,
    3854       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3855       24,    25,    26,    -1,    66,    29,    30,    31,   108,    71,
    3856      110,    73,    74,    75,    38,    -1,    -1,    -1,   118,    -1,
    3857       82,    83,    -1,    -1,    10,    11,    12,    13,    14,    15,
    3858       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3859       26,    -1,    66,    29,    30,    31,   108,    -1,   110,    73,
    3860       74,    -1,    38,    -1,    -1,    -1,   118,    10,    11,    12,
    3861       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3862       23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
    3863       66,    -1,    -1,    -1,    -1,    38,   110,    73,    74,    -1,
    3864       -1,    -1,    -1,    -1,   118,    10,    11,    12,    13,    14,
    3865       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3866       25,    26,    -1,    66,    29,    30,    31,    -1,    -1,    -1,
    3867       73,    74,    -1,    38,   110,    -1,    -1,    -1,    -1,    -1,
    3868       -1,    -1,   118,    10,    11,    12,    13,    14,    15,    16,
    3869       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3870       -1,    66,    29,    30,    31,    -1,    -1,   110,    73,    74,
    3871       -1,    38,    -1,    -1,    -1,   118,    10,    11,    12,    13,
    3872       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3873       24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    66,
    3874       -1,    -1,    -1,    -1,    38,   110,    73,    74,    -1,    -1,
    3875       -1,    -1,    -1,   118,    10,    11,    12,    13,    14,    15,
    3876       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3877       26,    -1,    66,    29,    30,    31,    -1,    -1,    -1,    73,
    3878       74,    -1,    38,   110,    -1,    -1,    -1,    -1,    -1,    -1,
    3879       -1,   118,    10,    11,    12,    13,    14,    15,    16,    17,
    3880       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
    3881       66,    29,    30,    31,    -1,    -1,   110,    73,    74,    -1,
    3882       38,    -1,    -1,    -1,   118,    10,    11,    12,    13,    14,
    3883       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3884       25,    26,    -1,    -1,    29,    30,    31,    -1,    66,    -1,
    3885       -1,    -1,    -1,    38,   110,    73,    74,    -1,    -1,    -1,
    3886       -1,    -1,   118,    10,    11,    12,    13,    14,    15,    16,
    3887       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3888       -1,    66,    29,    30,    31,    -1,    -1,    -1,    73,    74,
    3889       -1,    38,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3890      118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3891       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
    3892       -1,    -1,    -1,    -1,    -1,   110,    73,    74,    -1,    -1,
    3893       -1,    -1,    -1,   118,     4,     5,     6,     7,     8,     9,
    3894       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3895       20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
    3896       30,    31,    -1,   110,    -1,    -1,    -1,    -1,    38,    -1,
    3897       -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3898       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3899       -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,
    3900       70,    -1,    -1,    73,    74,    36,    37,    -1,    39,    40,
    3901       -1,    42,    -1,    -1,    45,    46,    47,    48,    49,    50,
    3902       51,    52,    -1,    -1,    55,    56,    -1,    -1,    -1,    60,
    3903       61,    -1,    63,    -1,    65,    -1,    -1,    -1,    -1,   109,
    3904       71,    -1,    -1,    -1,    75,    -1,    -1,    78,    79,    80,
    3905       81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
    3906       -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3907       -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,
    3908       -1,    -1,   113,    -1,    -1,    -1,   117,   118,   119,   120,
    3909      121,   122,    -1,    -1,    -1,    -1,   127,    -1,    36,    37,
    3910      131,    39,    40,    -1,    42,    -1,    -1,    45,    46,    47,
    3911       48,    49,    50,    51,    52,    -1,    -1,    -1,    56,    -1,
    3912       -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,    -1,
    3913       -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
    3914       78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
    3915       -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,
    3916       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3917      108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,   117,
    3918      118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,   127,
    3919       -1,    36,    37,   131,    39,    40,    -1,    42,    43,    44,
    3920       45,    46,    47,    48,    49,    50,    51,    52,    -1,    -1,
    3921       55,    56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,
    3922       65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
    3923       75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
    3924       85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
    3925       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3926       -1,    -1,    -1,   108,    -1,   110,    -1,    -1,   113,    -1,
    3927       -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
    3928       36,    37,   127,    39,    40,    -1,    42,    43,    44,    45,
    3929       46,    47,    48,    49,    50,    51,    52,    -1,    -1,    -1,
    3930       56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,
    3931       -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,
    3932       -1,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
    3933       86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
    3934       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3935       -1,    -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,
    3936       -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    36,
    3937       37,   127,    39,    40,    -1,    42,    -1,    -1,    45,    46,
    3938       47,    48,    49,    50,    51,    52,    -1,    -1,    -1,    56,
    3939       -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,
    3940       -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,
    3941       -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
    3942       -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
    3943       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3944       -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
    3945      117,   118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,
    3946      127,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3947       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3948       23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
    3949       -1,    -1,    -1,    -1,    -1,    38,    -1,    36,    37,    -1,
    3950       39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3951       -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,
    3952       -1,    -1,    -1,    66,    -1,    68,    65,    70,    -1,    -1,
    3953       73,    74,    71,    -1,    -1,    -1,    75,    -1,    -1,    78,
    3954       79,    80,    81,    82,    83,    65,    85,    86,    -1,    -1,
    3955       -1,    71,    95,    -1,    93,    75,    -1,    -1,    78,    79,
    3956       80,    81,    82,    83,    -1,    85,    86,    -1,    -1,   108,
    3957       -1,   110,    -1,    93,    36,    37,    -1,    39,   117,   118,
    3958      119,   120,   121,   122,    -1,    -1,    -1,    -1,   108,    -1,
    3959      110,    -1,    -1,    36,    37,    -1,    39,   117,   118,   119,
    3960      120,   121,   122,    65,    -1,    -1,    -1,    -1,    -1,    71,
    3961       -1,    -1,    -1,    75,    -1,    -1,    78,    79,    80,    81,
    3962       82,    83,    65,    85,    86,    -1,    -1,    -1,    71,    -1,
    3963       -1,    93,    75,    -1,    -1,    78,    79,    80,    81,    82,
    3964       83,    -1,    85,    86,    -1,    -1,   108,    -1,   110,    -1,
    3965       93,    36,    37,    -1,    39,   117,   118,   119,   120,   121,
    3966      122,    -1,    -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,
    3967       -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
    3968       65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
    3969       75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
    3970       85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
    3971       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3972       -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,
    3973       -1,    -1,   117,   118,   119,   120,   121,   122,     4,     5,
    3974        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    3975       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3976       26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3977       -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3978       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3979       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3980       66,    -1,    68,    -1,    70,    71,    -1,    73,    74,    75,
    3981       -1,    -1,    -1,    -1,    -1,    -1,    82,    83,     3,     4,
    3982        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3983       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3984       25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
    3985       -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,
    3986       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3987       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3988       -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
    3989        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3990       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3991       23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
    3992       -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,
    3993       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3994       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3995       -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,
    3996       73,    74,     4,     5,     6,     7,     8,     9,    10,    11,
    3997       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3998       22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
    3999       -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,
    4000       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4001       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4002       -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,
    4003       -1,    73,    74
     4055      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
     4056      75
    40044057};
    40054058
     
    40104063       0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    40114064      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    4012       22,    23,    24,    25,    26,    29,    30,    31,    32,    35,
    4013       38,    39,    63,    66,    68,    70,    71,    73,    74,    75,
    4014       82,    83,   108,   110,   118,   136,   139,   196,   210,   211,
     4065      22,    23,    24,    25,    26,    27,    30,    31,    32,    33,
     4066      36,    39,    40,    64,    67,    69,    71,    72,    74,    75,
     4067      76,    83,    84,   109,   111,   119,   137,   140,   197,   211,
    40154068     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
    4016      222,   223,   224,   225,   226,   227,   229,   230,   231,   232,
    4017      233,   234,   235,   236,   238,   239,   240,   241,   242,   243,
    4018      244,   252,   253,   279,   280,   281,   289,   292,   298,   299,
    4019      301,   303,   304,   310,   315,   319,   320,   321,   322,   323,
    4020      324,   325,   326,   346,   363,   364,   365,   366,    71,   118,
    4021      138,   139,   213,   215,   223,   225,   235,   239,   241,   280,
    4022       81,   108,   308,   309,   310,   308,   308,    71,    73,    74,
    4023       75,   137,   138,   269,   270,   290,   291,    73,    74,   270,
    4024      108,   301,    11,   197,   108,   118,   315,   320,   321,   322,
    4025      324,   325,   326,   111,   133,   110,   216,   223,   225,   319,
    4026      323,   362,   363,   366,   367,   134,   106,   130,   273,   113,
    4027      134,   171,    73,    74,   136,   268,   134,   134,   134,   115,
    4028      134,    73,    74,   108,   118,   305,   314,   315,   316,   317,
    4029      318,   319,   323,   327,   328,   329,   330,   331,   337,     3,
    4030       27,    77,   237,     3,     5,    73,   110,   118,   215,   226,
    4031      230,   233,   242,   281,   319,   323,   366,   213,   215,   225,
    4032      235,   239,   241,   280,   319,   323,    32,   231,   231,   226,
    4033      233,   134,   231,   226,   231,   226,    74,   108,   113,   270,
    4034      281,   113,   270,   231,   226,   115,   134,   134,     0,   133,
    4035      108,   171,   308,   308,   133,   110,   223,   225,   364,   268,
    4036      268,   225,   130,   108,   118,   305,   315,   319,   110,   118,
    4037      366,   302,   228,   310,   108,   286,   108,   108,    50,   108,
    4038       36,    37,    39,    65,    71,    75,    78,    79,    80,    81,
    4039       85,    86,    93,   108,   110,   117,   118,   119,   120,   121,
    4040      122,   135,   139,   140,   141,   142,   147,   148,   149,   150,
     4069     222,   223,   224,   225,   226,   227,   228,   230,   231,   232,
     4070     233,   234,   235,   236,   237,   239,   240,   241,   242,   243,
     4071     244,   245,   253,   254,   280,   281,   282,   290,   293,   299,
     4072     300,   302,   304,   305,   311,   316,   320,   321,   322,   323,
     4073     324,   325,   326,   327,   347,   364,   365,   366,   367,    72,
     4074     119,   139,   140,   214,   216,   224,   226,   236,   240,   242,
     4075     281,    82,   109,   309,   310,   311,   309,   309,    72,    74,
     4076      75,    76,   138,   139,   270,   271,   291,   292,    74,    75,
     4077     271,   109,   302,    11,   198,   109,   119,   316,   321,   322,
     4078     323,   325,   326,   327,   112,   134,   111,   217,   224,   226,
     4079     320,   324,   363,   364,   367,   368,   135,   107,   131,   274,
     4080     114,   135,   172,    74,    75,   137,   269,   135,   135,   135,
     4081     116,   135,    74,    75,   109,   119,   306,   315,   316,   317,
     4082     318,   319,   320,   324,   328,   329,   330,   331,   332,   338,
     4083       3,    28,    78,   238,     3,     5,    74,   111,   119,   216,
     4084     227,   231,   234,   243,   282,   320,   324,   367,   214,   216,
     4085     226,   236,   240,   242,   281,   320,   324,    33,   232,   232,
     4086     227,   234,   135,   232,   227,   232,   227,    75,   109,   114,
     4087     271,   282,   114,   271,   232,   227,   116,   135,   135,     0,
     4088     134,   109,   172,   309,   309,   134,   111,   224,   226,   365,
     4089     269,   269,   226,   131,   109,   119,   306,   316,   320,   111,
     4090     119,   367,   303,   229,   311,   109,   287,   109,   109,    51,
     4091     109,    37,    38,    40,    66,    72,    76,    79,    80,    81,
     4092      82,    86,    87,    94,   109,   111,   118,   119,   120,   121,
     4093     122,   123,   136,   140,   141,   142,   143,   148,   149,   150,
    40414094     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
    4042      162,   164,   223,   272,   288,   362,   367,   225,   109,   109,
    4043      109,   109,   109,   109,   109,    73,    74,   110,   223,   268,
    4044      346,   364,   110,   118,   162,   215,   216,   222,   225,   229,
    4045      230,   235,   238,   239,   241,   258,   259,   263,   264,   265,
    4046      266,   280,   346,   358,   359,   360,   361,   366,   367,   111,
    4047      108,   319,   323,   366,   108,   115,   131,   110,   113,   118,
    4048      162,   274,   274,   114,   133,   115,   131,   108,   115,   131,
    4049      115,   131,   115,   131,   308,   131,   315,   316,   317,   318,
    4050      328,   329,   330,   331,   225,   314,   327,    63,   307,   110,
    4051      308,   345,   346,   308,   308,   171,   133,   108,   308,   345,
    4052      308,   308,   225,   305,   108,   108,   224,   225,   223,   225,
    4053      111,   133,   223,   362,   367,   171,   133,   268,   273,   215,
    4054      230,   319,   323,   171,   133,   290,   225,   235,   131,   225,
    4055      225,   288,    39,   110,   223,   245,   246,   247,   248,   362,
    4056      366,   113,   254,   270,   113,   225,   290,   131,   131,   301,
    4057      133,   138,   267,     3,   134,   205,   206,   220,   222,   225,
    4058      133,   307,   108,   307,   162,   315,   225,   108,   133,   268,
    4059      113,    32,    33,    34,   223,   282,   283,   285,   133,   128,
    4060      130,   287,   133,   226,   232,   233,   268,   311,   312,   313,
    4061      108,   140,   108,   147,   108,   147,   149,   108,   147,   108,
    4062      108,   147,   147,   138,   110,   162,   167,   171,   223,   271,
    4063      362,   111,   133,   149,   149,    81,    84,    85,    86,   108,
    4064      110,   112,   113,    96,    97,    98,    99,   100,   101,   102,
    4065      103,   104,   105,   130,   166,   149,   118,   123,   124,   120,
    4066      121,    87,    88,    89,    90,   125,   126,    91,    92,   119,
    4067      127,   128,    93,    94,   129,   130,   369,   108,   118,   341,
    4068      342,   343,   344,   345,   109,   115,   108,   345,   346,   108,
    4069      345,   346,   133,   108,   223,   364,   111,   133,   110,   118,
    4070      134,   223,   225,   357,   358,   366,   367,   134,   108,   110,
    4071      118,   315,   332,   333,   334,   335,   336,   337,   338,   339,
    4072      340,   346,   347,   348,   349,   350,   351,   352,   118,   366,
    4073      225,   134,   134,   118,   223,   225,   359,   268,   223,   346,
    4074      359,   268,   108,   133,   133,   133,   111,   133,    71,    79,
    4075      110,   112,   139,   270,   274,   275,   276,   277,   278,   133,
    4076      133,   133,   133,   133,   133,   305,   109,   109,   109,   109,
    4077      109,   109,   109,   314,   327,   108,   273,   111,   205,   133,
    4078      305,   167,   272,   167,   272,   305,   110,   205,   307,   171,
    4079      133,   205,   109,   247,   248,   111,   133,   108,   116,   118,
    4080      249,   251,   314,   315,   327,   345,   353,   354,   355,   356,
    4081      114,   246,   115,   131,   115,   131,   270,   245,   115,   368,
    4082      130,   255,   254,   225,   260,   261,   262,   265,   266,   109,
    4083      115,   171,   133,   118,   162,   133,   222,   225,   259,   358,
    4084      366,   299,   300,   108,   118,   332,   109,   115,   369,   270,
    4085      282,   108,   113,   270,   272,   282,   109,   115,   108,   140,
    4086      109,   116,   271,   271,   271,   110,   138,   144,   162,   272,
    4087      271,   111,   133,   109,   115,   109,   108,   118,   353,   109,
    4088      115,   162,   110,   138,   110,   143,   144,   133,   110,   138,
    4089      143,   162,   162,   149,   149,   149,   150,   150,   151,   151,
    4090      152,   152,   152,   152,   153,   153,   154,   155,   156,   157,
    4091      158,   116,   167,   162,   133,   342,   343,   344,   225,   341,
    4092      308,   308,   162,   272,   133,   267,   118,   133,   223,   346,
    4093      359,   225,   229,   111,   133,   111,   366,   111,   108,   133,
    4094      315,   333,   334,   335,   338,   348,   349,   350,   111,   133,
    4095      225,   332,   336,   347,   108,   308,   351,   369,   308,   308,
    4096      369,   108,   308,   351,   308,   308,   308,   308,   346,   223,
    4097      357,   367,   268,   111,   115,   111,   115,   369,   223,   359,
    4098      369,   256,   257,   258,   259,   256,   256,   268,   162,   133,
    4099      110,   270,   116,   115,   368,   274,    79,   110,   116,   278,
    4100       28,   207,   208,   268,   256,   138,   305,   138,   307,   108,
    4101      345,   346,   108,   345,   346,   140,   346,   171,   260,   109,
    4102      109,   109,   109,   111,   171,   205,   171,   113,   131,   131,
    4103      110,   315,   354,   355,   356,   160,   161,   225,   353,   250,
    4104      251,   250,   308,   308,   270,   308,   114,   270,   114,   161,
    4105      368,   134,   134,   138,   220,   134,   134,   256,   108,   118,
    4106      366,   134,   114,   225,   283,   284,   134,   133,   133,   108,
    4107      134,   109,   312,   167,   168,   116,   131,   110,   140,   198,
    4108      199,   200,   109,   115,   109,   133,   116,   109,   109,   109,
    4109      162,   225,   113,   149,   164,   162,   163,   165,   115,   134,
    4110      133,   133,   109,   115,   162,   133,   114,   160,   116,   260,
    4111      109,   109,   109,   341,   260,   109,   256,   223,   359,   110,
    4112      118,   162,   162,   225,   338,   260,   109,   109,   109,   109,
    4113      109,   109,   109,     7,   225,   332,   336,   347,   133,   133,
    4114      369,   133,   133,   109,   134,   134,   134,   134,   273,   134,
    4115      160,   161,   162,   306,   133,   274,   276,   114,   133,   209,
    4116      270,    39,    40,    42,    45,    46,    47,    48,    49,    50,
    4117       51,    52,    56,    60,    61,   110,   127,   138,   168,   169,
    4118      170,   171,   172,   173,   175,   176,   188,   190,   191,   196,
    4119      210,   304,    28,   134,   130,   273,   133,   133,   109,   134,
    4120      171,   245,   111,   109,   109,   109,   353,   249,   255,   114,
    4121      109,   115,   111,   111,   134,   225,   115,   369,   286,   109,
    4122      282,   213,   215,   223,   294,   295,   296,   297,   288,   109,
    4123      109,   116,   161,   108,   109,   116,   115,   138,   162,   162,
    4124      275,   115,   134,   165,   111,   138,   145,   146,   162,   144,
    4125      134,   145,   160,   164,   134,   108,   345,   346,   134,   134,
    4126      133,   134,   134,   134,   162,   109,   134,   108,   345,   346,
    4127      108,   351,   108,   351,   346,   224,     7,   118,   134,   162,
    4128      260,   260,   259,   263,   263,   264,   115,   115,   109,   109,
    4129      111,    95,   122,   134,   134,   145,   274,   162,   115,   131,
    4130      210,   214,   225,   229,   108,   108,   169,   108,   108,   131,
    4131      138,   131,   138,   118,   138,   168,   108,   171,   163,   163,
    4132      111,   142,   116,   131,   134,   133,   134,   209,   109,   162,
    4133      260,   260,   308,   109,   114,   108,   345,   346,   133,   109,
    4134      133,   134,   305,   114,   133,   134,   134,   109,   113,   198,
    4135      111,   161,   131,   198,   200,   109,   115,   134,   368,   163,
    4136      111,   134,    84,   112,   115,   134,   134,   111,   134,   109,
    4137      133,   109,   109,   111,   111,   111,   134,   109,   133,   133,
    4138      133,   162,   162,   134,   111,   134,   134,   134,   134,   133,
    4139      133,   161,   161,   111,   111,   134,   134,   270,   225,   167,
    4140      167,    46,   167,   133,   131,   131,   167,   131,   131,   167,
    4141       57,    58,    59,   192,   193,   194,   131,    62,   131,   113,
    4142      308,   173,   114,   131,   134,   134,   133,    95,   265,   266,
    4143      109,   295,   115,   131,   115,   131,   114,   293,   116,   140,
    4144      109,   109,   116,   165,   111,   114,   111,   110,   146,   110,
    4145      146,   146,   111,   111,   111,   260,   111,   260,   260,   260,
    4146      134,   134,   111,   111,   109,   109,   111,   115,    95,   259,
    4147       95,   134,   111,   111,   109,   109,   108,   109,   168,   189,
    4148      210,   131,   109,   108,   108,   171,   194,    57,    58,   162,
    4149      143,   169,   109,   109,   260,   113,   133,   133,   294,   140,
    4150      201,   108,   131,   201,   134,   116,   133,   133,   134,   134,
    4151      134,   134,   111,   111,   133,   134,   111,   169,    43,    44,
    4152      113,   179,   180,   181,   167,   169,   134,   109,   168,   113,
    4153      181,    95,   133,    95,   133,   108,   108,   131,   114,   134,
    4154      133,   268,   305,   114,   115,   116,   161,   109,   111,   162,
    4155      145,   145,   109,   109,   109,   109,   263,    41,   161,   177,
    4156      178,   306,   116,   133,   169,   179,   109,   131,   169,   131,
    4157      133,   109,   133,   109,   133,    95,   133,    95,   133,   131,
    4158      109,   294,   140,   138,   202,   109,   131,   116,   134,   134,
    4159      169,    95,   115,   116,   134,   203,   204,   210,   131,   168,
    4160      168,   203,   171,   195,   223,   362,   171,   195,   109,   133,
    4161      109,   133,   114,   109,   115,   162,   111,   111,   161,   177,
    4162      180,   182,   183,   133,   131,   180,   184,   185,   134,   108,
    4163      118,   305,   353,   138,   134,   171,   195,   171,   195,   108,
    4164      131,   138,   169,   174,   114,   180,   210,   168,    55,   174,
    4165      187,   114,   180,   109,   225,   109,   134,   134,   288,   169,
    4166      174,   131,   186,   187,   174,   187,   171,   171,   109,   109,
    4167      109,   186,   134,   134,   171,   171,   134,   134
     4095     161,   163,   165,   224,   273,   289,   363,   368,   226,   110,
     4096     110,   110,   110,   110,   110,   110,    74,    75,   111,   224,
     4097     269,   347,   365,   111,   119,   163,   216,   217,   223,   226,
     4098     230,   231,   236,   239,   240,   242,   259,   260,   264,   265,
     4099     266,   267,   281,   347,   359,   360,   361,   362,   367,   368,
     4100     112,   109,   320,   324,   367,   109,   116,   132,   111,   114,
     4101     119,   163,   275,   275,   115,   134,   116,   132,   109,   116,
     4102     132,   116,   132,   116,   132,   309,   132,   316,   317,   318,
     4103     319,   329,   330,   331,   332,   226,   315,   328,    64,   308,
     4104     111,   309,   346,   347,   309,   309,   172,   134,   109,   309,
     4105     346,   309,   309,   226,   306,   109,   109,   225,   226,   224,
     4106     226,   112,   134,   224,   363,   368,   172,   134,   269,   274,
     4107     216,   231,   320,   324,   172,   134,   291,   226,   236,   132,
     4108     226,   226,   289,    40,   111,   224,   246,   247,   248,   249,
     4109     363,   367,   114,   255,   271,   114,   226,   291,   132,   132,
     4110     302,   134,   139,   268,     3,   135,   206,   207,   221,   223,
     4111     226,   134,   308,   109,   308,   163,   316,   226,   109,   134,
     4112     269,   114,    33,    34,    35,   224,   283,   284,   286,   134,
     4113     129,   131,   288,   134,   227,   233,   234,   269,   312,   313,
     4114     314,   109,   141,   109,   148,   109,   148,   150,   109,   148,
     4115     109,   109,   148,   148,   139,   111,   163,   168,   172,   224,
     4116     272,   363,   112,   134,   150,   150,    82,    85,    86,    87,
     4117     109,   111,   113,   114,    97,    98,    99,   100,   101,   102,
     4118     103,   104,   105,   106,   131,   167,   150,   119,   124,   125,
     4119     121,   122,    88,    89,    90,    91,   126,   127,    92,    93,
     4120     120,   128,   129,    94,    95,   130,   131,   370,   109,   119,
     4121     342,   343,   344,   345,   346,   110,   116,   109,   346,   347,
     4122     109,   346,   347,   134,   109,   224,   365,   112,   134,   111,
     4123     119,   135,   224,   226,   358,   359,   367,   368,   135,   109,
     4124     111,   119,   316,   333,   334,   335,   336,   337,   338,   339,
     4125     340,   341,   347,   348,   349,   350,   351,   352,   353,   119,
     4126     367,   226,   135,   135,   119,   224,   226,   360,   269,   224,
     4127     347,   360,   269,   109,   134,   134,   134,   112,   134,    72,
     4128      80,   111,   113,   140,   271,   275,   276,   277,   278,   279,
     4129     134,   134,   134,   134,   134,   134,   306,   110,   110,   110,
     4130     110,   110,   110,   110,   315,   328,   109,   274,   112,   206,
     4131     134,   306,   168,   273,   168,   273,   306,   111,   206,   308,
     4132     172,   134,   206,   110,   248,   249,   112,   134,   109,   117,
     4133     119,   250,   252,   315,   316,   328,   346,   354,   355,   356,
     4134     357,   115,   247,   116,   132,   116,   132,   271,   246,   116,
     4135     369,   131,   256,   255,   226,   261,   262,   263,   266,   267,
     4136     110,   116,   172,   134,   119,   163,   134,   223,   226,   260,
     4137     359,   367,   300,   301,   109,   119,   333,   110,   116,   370,
     4138     271,   283,   109,   114,   271,   273,   283,   110,   116,   109,
     4139     141,   110,   117,   272,   272,   272,   111,   139,   145,   163,
     4140     273,   272,   112,   134,   110,   116,   110,   109,   119,   354,
     4141     110,   116,   163,   111,   139,   111,   144,   145,   134,   111,
     4142     139,   144,   163,   163,   150,   150,   150,   151,   151,   152,
     4143     152,   153,   153,   153,   153,   154,   154,   155,   156,   157,
     4144     158,   159,   117,   168,   163,   134,   343,   344,   345,   226,
     4145     342,   309,   309,   163,   273,   134,   268,   119,   134,   224,
     4146     347,   360,   226,   230,   112,   134,   112,   367,   112,   109,
     4147     134,   316,   334,   335,   336,   339,   349,   350,   351,   112,
     4148     134,   226,   333,   337,   348,   109,   309,   352,   370,   309,
     4149     309,   370,   109,   309,   352,   309,   309,   309,   309,   347,
     4150     224,   358,   368,   269,   112,   116,   112,   116,   370,   224,
     4151     360,   370,   257,   258,   259,   260,   257,   257,   269,   163,
     4152     134,   111,   271,   117,   116,   369,   275,    80,   111,   117,
     4153     279,    29,   208,   209,   269,   257,   139,   306,   139,   308,
     4154     109,   346,   347,   109,   346,   347,   141,   347,   172,   261,
     4155     110,   110,   110,   110,   112,   172,   206,   172,   114,   132,
     4156     132,   111,   316,   355,   356,   357,   161,   162,   226,   354,
     4157     251,   252,   251,   309,   309,   271,   309,   115,   271,   115,
     4158     162,   369,   135,   135,   139,   221,   135,   135,   257,   109,
     4159     119,   367,   135,   115,   226,   284,   285,   135,   134,   134,
     4160     109,   135,   110,   313,   168,   169,   117,   132,   111,   141,
     4161     199,   200,   201,   110,   116,   110,   134,   117,   110,   110,
     4162     110,   163,   226,   114,   150,   165,   163,   164,   166,   116,
     4163     135,   134,   134,   110,   116,   163,   134,   115,   161,   117,
     4164     261,   110,   110,   110,   342,   261,   110,   257,   224,   360,
     4165     111,   119,   163,   163,   226,   339,   261,   110,   110,   110,
     4166     110,   110,   110,   110,     7,   226,   333,   337,   348,   134,
     4167     134,   370,   134,   134,   110,   135,   135,   135,   135,   274,
     4168     135,   161,   162,   163,   307,   134,   275,   277,   115,   134,
     4169     210,   271,    40,    41,    43,    46,    47,    48,    49,    50,
     4170      51,    52,    53,    57,    61,    62,   111,   128,   139,   169,
     4171     170,   171,   172,   173,   174,   176,   177,   189,   191,   192,
     4172     197,   211,   305,    29,   135,   131,   274,   134,   134,   110,
     4173     135,   172,   246,   112,   110,   110,   110,   354,   250,   256,
     4174     115,   110,   116,   112,   112,   135,   226,   116,   370,   287,
     4175     110,   283,   214,   216,   224,   295,   296,   297,   298,   289,
     4176     110,   110,   117,   162,   109,   110,   117,   116,   139,   163,
     4177     163,   276,   116,   135,   166,   112,   139,   146,   147,   163,
     4178     145,   135,   146,   161,   165,   135,   109,   346,   347,   135,
     4179     135,   134,   135,   135,   135,   163,   110,   135,   109,   346,
     4180     347,   109,   352,   109,   352,   347,   225,     7,   119,   135,
     4181     163,   261,   261,   260,   264,   264,   265,   116,   116,   110,
     4182     110,   112,    96,   123,   135,   135,   146,   275,   163,   116,
     4183     132,   211,   215,   226,   230,   109,   109,   170,   109,   109,
     4184     132,   139,   132,   139,   119,   139,   169,   109,   172,   164,
     4185     164,   112,   143,   117,   132,   135,   134,   135,   210,   110,
     4186     163,   261,   261,   309,   110,   115,   109,   346,   347,   134,
     4187     110,   134,   135,   306,   115,   134,   135,   135,   110,   114,
     4188     199,   112,   162,   132,   199,   201,   110,   116,   135,   369,
     4189     164,   112,   135,    85,   113,   116,   135,   135,   112,   135,
     4190     110,   134,   110,   110,   112,   112,   112,   135,   110,   134,
     4191     134,   134,   163,   163,   135,   112,   135,   135,   135,   135,
     4192     134,   134,   162,   162,   112,   112,   135,   135,   271,   226,
     4193     168,   168,    47,   168,   134,   132,   132,   168,   132,   132,
     4194     168,    58,    59,    60,   193,   194,   195,   132,    63,   132,
     4195     114,   309,   174,   115,   132,   135,   135,   134,    96,   266,
     4196     267,   110,   296,   116,   132,   116,   132,   115,   294,   117,
     4197     141,   110,   110,   117,   166,   112,   115,   112,   111,   147,
     4198     111,   147,   147,   112,   112,   112,   261,   112,   261,   261,
     4199     261,   135,   135,   112,   112,   110,   110,   112,   116,    96,
     4200     260,    96,   135,   112,   112,   110,   110,   109,   110,   169,
     4201     190,   211,   132,   110,   109,   109,   172,   195,    58,    59,
     4202     163,   144,   170,   110,   110,   261,   114,   134,   134,   295,
     4203     141,   202,   109,   132,   202,   135,   117,   134,   134,   135,
     4204     135,   135,   135,   112,   112,   134,   135,   112,   170,    44,
     4205      45,   114,   180,   181,   182,   168,   170,   135,   110,   169,
     4206     114,   182,    96,   134,    96,   134,   109,   109,   132,   115,
     4207     135,   134,   269,   306,   115,   116,   117,   162,   110,   112,
     4208     163,   146,   146,   110,   110,   110,   110,   264,    42,   162,
     4209     178,   179,   307,   117,   134,   170,   180,   110,   132,   170,
     4210     132,   134,   110,   134,   110,   134,    96,   134,    96,   134,
     4211     132,   110,   295,   141,   139,   203,   110,   132,   117,   135,
     4212     135,   170,    96,   116,   117,   135,   204,   205,   211,   132,
     4213     169,   169,   204,   172,   196,   224,   363,   172,   196,   110,
     4214     134,   110,   134,   115,   110,   116,   163,   112,   112,   162,
     4215     178,   181,   183,   184,   134,   132,   181,   185,   186,   135,
     4216     109,   119,   306,   354,   139,   135,   172,   196,   172,   196,
     4217     109,   132,   139,   170,   175,   115,   181,   211,   169,    56,
     4218     175,   188,   115,   181,   110,   226,   110,   135,   135,   289,
     4219     170,   175,   132,   187,   188,   175,   188,   172,   172,   110,
     4220     110,   110,   187,   135,   135,   172,   172,   135,   135
    41684221};
    41694222
     
    50025055
    50035056/* Line 1806 of yacc.c  */
    5004 #line 290 "parser.yy"
     5057#line 291 "parser.yy"
    50055058    {
    50065059                        typedefTable.enterScope();
     
    50115064
    50125065/* Line 1806 of yacc.c  */
    5013 #line 296 "parser.yy"
     5066#line 297 "parser.yy"
    50145067    {
    50155068                        typedefTable.leaveScope();
     
    50205073
    50215074/* Line 1806 of yacc.c  */
    5022 #line 305 "parser.yy"
     5075#line 306 "parser.yy"
    50235076    { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
    50245077    break;
     
    50275080
    50285081/* Line 1806 of yacc.c  */
    5029 #line 306 "parser.yy"
     5082#line 307 "parser.yy"
    50305083    { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
    50315084    break;
     
    50345087
    50355088/* Line 1806 of yacc.c  */
    5036 #line 307 "parser.yy"
     5089#line 308 "parser.yy"
    50375090    { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
    50385091    break;
     
    50415094
    50425095/* Line 1806 of yacc.c  */
    5043 #line 332 "parser.yy"
     5096#line 333 "parser.yy"
    50445097    { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
    50455098    break;
     
    50485101
    50495102/* Line 1806 of yacc.c  */
    5050 #line 333 "parser.yy"
     5103#line 334 "parser.yy"
    50515104    { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
    50525105    break;
     
    50555108
    50565109/* Line 1806 of yacc.c  */
    5057 #line 340 "parser.yy"
     5110#line 341 "parser.yy"
    50585111    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    50595112    break;
     
    50625115
    50635116/* Line 1806 of yacc.c  */
    5064 #line 342 "parser.yy"
     5117#line 343 "parser.yy"
    50655118    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    50665119    break;
     
    50695122
    50705123/* Line 1806 of yacc.c  */
    5071 #line 344 "parser.yy"
     5124#line 345 "parser.yy"
    50725125    { (yyval.en) = (yyvsp[(2) - (3)].en); }
    50735126    break;
     
    50765129
    50775130/* Line 1806 of yacc.c  */
    5078 #line 346 "parser.yy"
     5131#line 347 "parser.yy"
    50795132    { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
    50805133    break;
     
    50835136
    50845137/* Line 1806 of yacc.c  */
    5085 #line 356 "parser.yy"
     5138#line 357 "parser.yy"
    50865139    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
    50875140    break;
     
    50905143
    50915144/* Line 1806 of yacc.c  */
    5092 #line 358 "parser.yy"
     5145#line 359 "parser.yy"
    50935146    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
    50945147    break;
     
    50975150
    50985151/* Line 1806 of yacc.c  */
    5099 #line 362 "parser.yy"
     5152#line 363 "parser.yy"
    51005153    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
    51015154    break;
     
    51045157
    51055158/* Line 1806 of yacc.c  */
    5106 #line 365 "parser.yy"
     5159#line 366 "parser.yy"
    51075160    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
    51085161    break;
     
    51115164
    51125165/* Line 1806 of yacc.c  */
    5113 #line 368 "parser.yy"
     5166#line 369 "parser.yy"
    51145167    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
    51155168    break;
     
    51185171
    51195172/* Line 1806 of yacc.c  */
    5120 #line 370 "parser.yy"
     5173#line 371 "parser.yy"
    51215174    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
    51225175    break;
     
    51255178
    51265179/* Line 1806 of yacc.c  */
    5127 #line 372 "parser.yy"
     5180#line 373 "parser.yy"
    51285181    { (yyval.en) = 0; }
    51295182    break;
     
    51325185
    51335186/* Line 1806 of yacc.c  */
    5134 #line 374 "parser.yy"
     5187#line 375 "parser.yy"
    51355188    {
    51365189                        Token fn; fn.str = new std::string( "?{}" ); // location undefined
     
    51425195
    51435196/* Line 1806 of yacc.c  */
    5144 #line 383 "parser.yy"
     5197#line 384 "parser.yy"
    51455198    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    51465199    break;
     
    51495202
    51505203/* Line 1806 of yacc.c  */
    5151 #line 388 "parser.yy"
     5204#line 389 "parser.yy"
    51525205    { (yyval.en) = 0; }
    51535206    break;
     
    51565209
    51575210/* Line 1806 of yacc.c  */
    5158 #line 391 "parser.yy"
     5211#line 392 "parser.yy"
    51595212    { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
    51605213    break;
     
    51635216
    51645217/* Line 1806 of yacc.c  */
    5165 #line 396 "parser.yy"
     5218#line 397 "parser.yy"
    51665219    { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
    51675220    break;
     
    51705223
    51715224/* Line 1806 of yacc.c  */
    5172 #line 398 "parser.yy"
     5225#line 399 "parser.yy"
    51735226    { (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) )))); }
    51745227    break;
     
    51775230
    51785231/* Line 1806 of yacc.c  */
    5179 #line 403 "parser.yy"
     5232#line 404 "parser.yy"
    51805233    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    51815234    break;
     
    51845237
    51855238/* Line 1806 of yacc.c  */
    5186 #line 408 "parser.yy"
     5239#line 409 "parser.yy"
    51875240    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    51885241    break;
     
    51915244
    51925245/* Line 1806 of yacc.c  */
    5193 #line 412 "parser.yy"
     5246#line 413 "parser.yy"
    51945247    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
    51955248    break;
     
    51985251
    51995252/* Line 1806 of yacc.c  */
    5200 #line 414 "parser.yy"
     5253#line 415 "parser.yy"
    52015254    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
    52025255    break;
     
    52055258
    52065259/* Line 1806 of yacc.c  */
    5207 #line 416 "parser.yy"
     5260#line 417 "parser.yy"
    52085261    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
    52095262    break;
     
    52125265
    52135266/* Line 1806 of yacc.c  */
    5214 #line 418 "parser.yy"
     5267#line 419 "parser.yy"
    52155268    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
    52165269    break;
     
    52195272
    52205273/* Line 1806 of yacc.c  */
    5221 #line 426 "parser.yy"
     5274#line 427 "parser.yy"
    52225275    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
    52235276    break;
     
    52265279
    52275280/* Line 1806 of yacc.c  */
    5228 #line 428 "parser.yy"
     5281#line 429 "parser.yy"
    52295282    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
    52305283    break;
     
    52335286
    52345287/* Line 1806 of yacc.c  */
    5235 #line 430 "parser.yy"
     5288#line 431 "parser.yy"
    52365289    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
    52375290    break;
     
    52405293
    52415294/* Line 1806 of yacc.c  */
    5242 #line 432 "parser.yy"
     5295#line 433 "parser.yy"
    52435296    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
    52445297    break;
     
    52475300
    52485301/* Line 1806 of yacc.c  */
    5249 #line 434 "parser.yy"
     5302#line 435 "parser.yy"
    52505303    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    52515304    break;
     
    52545307
    52555308/* Line 1806 of yacc.c  */
    5256 #line 436 "parser.yy"
     5309#line 437 "parser.yy"
    52575310    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
    52585311    break;
     
    52615314
    52625315/* Line 1806 of yacc.c  */
    5263 #line 438 "parser.yy"
     5316#line 439 "parser.yy"
    52645317    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); }
    52655318    break;
     
    52685321
    52695322/* Line 1806 of yacc.c  */
    5270 #line 440 "parser.yy"
     5323#line 441 "parser.yy"
    52715324    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); }
    52725325    break;
     
    52755328
    52765329/* Line 1806 of yacc.c  */
    5277 #line 446 "parser.yy"
     5330#line 447 "parser.yy"
    52785331    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
    52795332    break;
     
    52825335
    52835336/* Line 1806 of yacc.c  */
    5284 #line 448 "parser.yy"
     5337#line 449 "parser.yy"
    52855338    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
    52865339    break;
     
    52895342
    52905343/* Line 1806 of yacc.c  */
    5291 #line 450 "parser.yy"
     5344#line 451 "parser.yy"
    52925345    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }
    52935346    break;
     
    52965349
    52975350/* Line 1806 of yacc.c  */
    5298 #line 452 "parser.yy"
     5351#line 453 "parser.yy"
    52995352    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
    53005353    break;
     
    53035356
    53045357/* Line 1806 of yacc.c  */
    5305 #line 454 "parser.yy"
     5358#line 455 "parser.yy"
    53065359    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
    53075360    break;
     
    53105363
    53115364/* Line 1806 of yacc.c  */
    5312 #line 456 "parser.yy"
     5365#line 457 "parser.yy"
    53135366    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
    53145367    break;
     
    53175370
    53185371/* Line 1806 of yacc.c  */
    5319 #line 458 "parser.yy"
     5372#line 459 "parser.yy"
    53205373    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
    53215374    break;
     
    53245377
    53255378/* Line 1806 of yacc.c  */
    5326 #line 460 "parser.yy"
     5379#line 461 "parser.yy"
    53275380    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
    53285381    break;
     
    53315384
    53325385/* Line 1806 of yacc.c  */
    5333 #line 462 "parser.yy"
     5386#line 463 "parser.yy"
    53345387    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true ) ); }
    53355388    break;
     
    53385391
    53395392/* Line 1806 of yacc.c  */
    5340 #line 466 "parser.yy"
     5393#line 467 "parser.yy"
    53415394    { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
    53425395    break;
     
    53455398
    53465399/* Line 1806 of yacc.c  */
    5347 #line 467 "parser.yy"
     5400#line 468 "parser.yy"
    53485401    { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
    53495402    break;
     
    53525405
    53535406/* Line 1806 of yacc.c  */
    5354 #line 468 "parser.yy"
     5407#line 469 "parser.yy"
    53555408    { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
    53565409    break;
     
    53595412
    53605413/* Line 1806 of yacc.c  */
    5361 #line 469 "parser.yy"
     5414#line 470 "parser.yy"
    53625415    { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
    53635416    break;
     
    53665419
    53675420/* Line 1806 of yacc.c  */
    5368 #line 475 "parser.yy"
     5421#line 476 "parser.yy"
    53695422    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
    53705423    break;
     
    53735426
    53745427/* Line 1806 of yacc.c  */
    5375 #line 477 "parser.yy"
     5428#line 478 "parser.yy"
    53765429    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
    53775430    break;
     
    53805433
    53815434/* Line 1806 of yacc.c  */
    5382 #line 483 "parser.yy"
     5435#line 484 "parser.yy"
    53835436    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    53845437    break;
     
    53875440
    53885441/* Line 1806 of yacc.c  */
    5389 #line 485 "parser.yy"
     5442#line 486 "parser.yy"
    53905443    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    53915444    break;
     
    53945447
    53955448/* Line 1806 of yacc.c  */
    5396 #line 487 "parser.yy"
     5449#line 488 "parser.yy"
    53975450    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    53985451    break;
     
    54015454
    54025455/* Line 1806 of yacc.c  */
    5403 #line 493 "parser.yy"
     5456#line 494 "parser.yy"
    54045457    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54055458    break;
     
    54085461
    54095462/* Line 1806 of yacc.c  */
    5410 #line 495 "parser.yy"
     5463#line 496 "parser.yy"
    54115464    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54125465    break;
     
    54155468
    54165469/* Line 1806 of yacc.c  */
    5417 #line 501 "parser.yy"
     5470#line 502 "parser.yy"
    54185471    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54195472    break;
     
    54225475
    54235476/* Line 1806 of yacc.c  */
    5424 #line 503 "parser.yy"
     5477#line 504 "parser.yy"
    54255478    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54265479    break;
     
    54295482
    54305483/* Line 1806 of yacc.c  */
    5431 #line 509 "parser.yy"
     5484#line 510 "parser.yy"
    54325485    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54335486    break;
     
    54365489
    54375490/* Line 1806 of yacc.c  */
    5438 #line 511 "parser.yy"
     5491#line 512 "parser.yy"
    54395492    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54405493    break;
     
    54435496
    54445497/* Line 1806 of yacc.c  */
    5445 #line 513 "parser.yy"
     5498#line 514 "parser.yy"
    54465499    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54475500    break;
     
    54505503
    54515504/* Line 1806 of yacc.c  */
    5452 #line 515 "parser.yy"
     5505#line 516 "parser.yy"
    54535506    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54545507    break;
     
    54575510
    54585511/* Line 1806 of yacc.c  */
    5459 #line 521 "parser.yy"
     5512#line 522 "parser.yy"
    54605513    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54615514    break;
     
    54645517
    54655518/* Line 1806 of yacc.c  */
    5466 #line 523 "parser.yy"
     5519#line 524 "parser.yy"
    54675520    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54685521    break;
     
    54715524
    54725525/* Line 1806 of yacc.c  */
    5473 #line 529 "parser.yy"
     5526#line 530 "parser.yy"
    54745527    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54755528    break;
     
    54785531
    54795532/* Line 1806 of yacc.c  */
    5480 #line 535 "parser.yy"
     5533#line 536 "parser.yy"
    54815534    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54825535    break;
     
    54855538
    54865539/* Line 1806 of yacc.c  */
    5487 #line 541 "parser.yy"
     5540#line 542 "parser.yy"
    54885541    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54895542    break;
     
    54925545
    54935546/* Line 1806 of yacc.c  */
    5494 #line 547 "parser.yy"
     5547#line 548 "parser.yy"
    54955548    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54965549    break;
     
    54995552
    55005553/* Line 1806 of yacc.c  */
    5501 #line 553 "parser.yy"
     5554#line 554 "parser.yy"
    55025555    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55035556    break;
     
    55065559
    55075560/* Line 1806 of yacc.c  */
    5508 #line 559 "parser.yy"
     5561#line 560 "parser.yy"
    55095562    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
    55105563    break;
     
    55135566
    55145567/* Line 1806 of yacc.c  */
    5515 #line 561 "parser.yy"
     5568#line 562 "parser.yy"
    55165569    { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    55175570    break;
     
    55205573
    55215574/* Line 1806 of yacc.c  */
    5522 #line 563 "parser.yy"
     5575#line 564 "parser.yy"
    55235576    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
    55245577    break;
     
    55275580
    55285581/* Line 1806 of yacc.c  */
    5529 #line 574 "parser.yy"
     5582#line 575 "parser.yy"
    55305583    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55315584    break;
     
    55345587
    55355588/* Line 1806 of yacc.c  */
    5536 #line 576 "parser.yy"
     5589#line 577 "parser.yy"
    55375590    { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55385591    break;
     
    55415594
    55425595/* Line 1806 of yacc.c  */
    5543 #line 578 "parser.yy"
     5596#line 579 "parser.yy"
    55445597    { (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) ); }
    55455598    break;
     
    55485601
    55495602/* Line 1806 of yacc.c  */
    5550 #line 583 "parser.yy"
     5603#line 584 "parser.yy"
    55515604    { (yyval.en) = new NullExprNode; }
    55525605    break;
     
    55555608
    55565609/* Line 1806 of yacc.c  */
    5557 #line 591 "parser.yy"
     5610#line 592 "parser.yy"
    55585611    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
    55595612    break;
     
    55625615
    55635616/* Line 1806 of yacc.c  */
    5564 #line 593 "parser.yy"
     5617#line 594 "parser.yy"
    55655618    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
    55665619    break;
     
    55695622
    55705623/* Line 1806 of yacc.c  */
    5571 #line 595 "parser.yy"
     5624#line 596 "parser.yy"
    55725625    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
    55735626    break;
     
    55765629
    55775630/* Line 1806 of yacc.c  */
    5578 #line 597 "parser.yy"
     5631#line 598 "parser.yy"
    55795632    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
    55805633    break;
     
    55835636
    55845637/* Line 1806 of yacc.c  */
    5585 #line 603 "parser.yy"
     5638#line 604 "parser.yy"
    55865639    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    55875640    break;
     
    55905643
    55915644/* Line 1806 of yacc.c  */
    5592 #line 607 "parser.yy"
     5645#line 608 "parser.yy"
    55935646    { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
    55945647    break;
     
    55975650
    55985651/* Line 1806 of yacc.c  */
    5599 #line 608 "parser.yy"
     5652#line 609 "parser.yy"
    56005653    { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
    56015654    break;
     
    56045657
    56055658/* Line 1806 of yacc.c  */
    5606 #line 609 "parser.yy"
     5659#line 610 "parser.yy"
    56075660    { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
    56085661    break;
     
    56115664
    56125665/* Line 1806 of yacc.c  */
    5613 #line 610 "parser.yy"
     5666#line 611 "parser.yy"
    56145667    { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
    56155668    break;
     
    56185671
    56195672/* Line 1806 of yacc.c  */
    5620 #line 611 "parser.yy"
     5673#line 612 "parser.yy"
    56215674    { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
    56225675    break;
     
    56255678
    56265679/* Line 1806 of yacc.c  */
    5627 #line 612 "parser.yy"
     5680#line 613 "parser.yy"
    56285681    { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
    56295682    break;
     
    56325685
    56335686/* Line 1806 of yacc.c  */
    5634 #line 613 "parser.yy"
     5687#line 614 "parser.yy"
    56355688    { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
    56365689    break;
     
    56395692
    56405693/* Line 1806 of yacc.c  */
    5641 #line 614 "parser.yy"
     5694#line 615 "parser.yy"
    56425695    { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
    56435696    break;
     
    56465699
    56475700/* Line 1806 of yacc.c  */
    5648 #line 615 "parser.yy"
     5701#line 616 "parser.yy"
    56495702    { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
    56505703    break;
     
    56535706
    56545707/* Line 1806 of yacc.c  */
    5655 #line 616 "parser.yy"
     5708#line 617 "parser.yy"
    56565709    { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
    56575710    break;
     
    56605713
    56615714/* Line 1806 of yacc.c  */
    5662 #line 622 "parser.yy"
     5715#line 623 "parser.yy"
    56635716    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56645717    break;
     
    56675720
    56685721/* Line 1806 of yacc.c  */
    5669 #line 627 "parser.yy"
     5722#line 628 "parser.yy"
    56705723    { (yyval.en) = 0; }
    56715724    break;
     
    56745727
    56755728/* Line 1806 of yacc.c  */
    5676 #line 636 "parser.yy"
     5729#line 637 "parser.yy"
    56775730    { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
    56785731    break;
     
    56815734
    56825735/* Line 1806 of yacc.c  */
    5683 #line 643 "parser.yy"
     5736#line 644 "parser.yy"
    56845737    {
    56855738                        Token fn; fn.str = new std::string( "^?{}" ); // location undefined
     
    56925745
    56935746/* Line 1806 of yacc.c  */
    5694 #line 652 "parser.yy"
     5747#line 653 "parser.yy"
    56955748    {
    56965749                        (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
     
    57015754
    57025755/* Line 1806 of yacc.c  */
    5703 #line 659 "parser.yy"
     5756#line 660 "parser.yy"
    57045757    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
    57055758    break;
     
    57085761
    57095762/* Line 1806 of yacc.c  */
    5710 #line 666 "parser.yy"
     5763#line 667 "parser.yy"
    57115764    { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
    57125765    break;
     
    57155768
    57165769/* Line 1806 of yacc.c  */
    5717 #line 672 "parser.yy"
     5770#line 673 "parser.yy"
    57185771    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
    57195772    break;
     
    57225775
    57235776/* Line 1806 of yacc.c  */
    5724 #line 677 "parser.yy"
     5777#line 678 "parser.yy"
    57255778    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    57265779    break;
     
    57295782
    57305783/* Line 1806 of yacc.c  */
    5731 #line 679 "parser.yy"
     5784#line 680 "parser.yy"
    57325785    { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); }
    57335786    break;
     
    57365789
    57375790/* Line 1806 of yacc.c  */
    5738 #line 681 "parser.yy"
     5791#line 682 "parser.yy"
    57395792    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    57405793    break;
     
    57435796
    57445797/* Line 1806 of yacc.c  */
    5745 #line 688 "parser.yy"
     5798#line 689 "parser.yy"
    57465799    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
    57475800    break;
     
    57505803
    57515804/* Line 1806 of yacc.c  */
    5752 #line 693 "parser.yy"
     5805#line 694 "parser.yy"
    57535806    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
    57545807    break;
     
    57575810
    57585811/* Line 1806 of yacc.c  */
    5759 #line 699 "parser.yy"
     5812#line 700 "parser.yy"
    57605813    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    57615814    break;
     
    57645817
    57655818/* Line 1806 of yacc.c  */
    5766 #line 701 "parser.yy"
     5819#line 702 "parser.yy"
    57675820    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
    57685821    break;
     
    57715824
    57725825/* Line 1806 of yacc.c  */
    5773 #line 703 "parser.yy"
     5826#line 704 "parser.yy"
    57745827    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    57755828    break;
     
    57785831
    57795832/* Line 1806 of yacc.c  */
    5780 #line 705 "parser.yy"
     5833#line 706 "parser.yy"
    57815834    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
    57825835    break;
     
    57855838
    57865839/* Line 1806 of yacc.c  */
    5787 #line 710 "parser.yy"
     5840#line 711 "parser.yy"
    57885841    { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    57895842    break;
     
    57925845
    57935846/* Line 1806 of yacc.c  */
    5794 #line 712 "parser.yy"
     5847#line 713 "parser.yy"
    57955848    { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); }
    57965849    break;
     
    57995852
    58005853/* Line 1806 of yacc.c  */
    5801 #line 719 "parser.yy"
     5854#line 720 "parser.yy"
    58025855    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    58035856    break;
     
    58065859
    58075860/* Line 1806 of yacc.c  */
    5808 #line 721 "parser.yy"
     5861#line 722 "parser.yy"
    58095862    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    58105863    break;
     
    58135866
    58145867/* Line 1806 of yacc.c  */
    5815 #line 728 "parser.yy"
     5868#line 729 "parser.yy"
    58165869    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
    58175870    break;
     
    58205873
    58215874/* Line 1806 of yacc.c  */
    5822 #line 732 "parser.yy"
     5875#line 733 "parser.yy"
    58235876    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
    58245877    break;
     
    58275880
    58285881/* Line 1806 of yacc.c  */
    5829 #line 733 "parser.yy"
     5882#line 734 "parser.yy"
    58305883    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
    58315884    break;
     
    58345887
    58355888/* Line 1806 of yacc.c  */
    5836 #line 739 "parser.yy"
     5889#line 740 "parser.yy"
    58375890    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
    58385891    break;
     
    58415894
    58425895/* Line 1806 of yacc.c  */
    5843 #line 743 "parser.yy"
     5896#line 744 "parser.yy"
    58445897    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    58455898    break;
     
    58485901
    58495902/* Line 1806 of yacc.c  */
    5850 #line 748 "parser.yy"
     5903#line 749 "parser.yy"
    58515904    { (yyval.sn) = 0; }
    58525905    break;
     
    58555908
    58565909/* Line 1806 of yacc.c  */
    5857 #line 754 "parser.yy"
     5910#line 755 "parser.yy"
    58585911    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    58595912    break;
     
    58625915
    58635916/* Line 1806 of yacc.c  */
    5864 #line 756 "parser.yy"
     5917#line 757 "parser.yy"
    58655918    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    58665919    break;
     
    58695922
    58705923/* Line 1806 of yacc.c  */
    5871 #line 761 "parser.yy"
     5924#line 762 "parser.yy"
    58725925    { (yyval.sn) = 0; }
    58735926    break;
     
    58765929
    58775930/* Line 1806 of yacc.c  */
    5878 #line 767 "parser.yy"
     5931#line 768 "parser.yy"
    58795932    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    58805933    break;
     
    58835936
    58845937/* Line 1806 of yacc.c  */
    5885 #line 769 "parser.yy"
     5938#line 770 "parser.yy"
    58865939    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
    58875940    break;
     
    58905943
    58915944/* Line 1806 of yacc.c  */
    5892 #line 771 "parser.yy"
     5945#line 772 "parser.yy"
    58935946    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    58945947    break;
     
    58975950
    58985951/* Line 1806 of yacc.c  */
    5899 #line 773 "parser.yy"
     5952#line 774 "parser.yy"
    59005953    { (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) ))))); }
    59015954    break;
     
    59045957
    59055958/* Line 1806 of yacc.c  */
    5906 #line 778 "parser.yy"
     5959#line 779 "parser.yy"
    59075960    { (yyval.sn) = 0; }
    59085961    break;
    59095962
    59105963  case 180:
    5911 
    5912 /* Line 1806 of yacc.c  */
    5913 #line 783 "parser.yy"
    5914     { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
    5915     break;
    5916 
    5917   case 181:
    59185964
    59195965/* Line 1806 of yacc.c  */
     
    59225968    break;
    59235969
     5970  case 181:
     5971
     5972/* Line 1806 of yacc.c  */
     5973#line 785 "parser.yy"
     5974    { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
     5975    break;
     5976
    59245977  case 182:
    59255978
    59265979/* Line 1806 of yacc.c  */
    5927 #line 789 "parser.yy"
     5980#line 790 "parser.yy"
    59285981    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    59295982    break;
     
    59325985
    59335986/* Line 1806 of yacc.c  */
    5934 #line 791 "parser.yy"
     5987#line 792 "parser.yy"
    59355988    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
    59365989    break;
     
    59395992
    59405993/* Line 1806 of yacc.c  */
    5941 #line 793 "parser.yy"
     5994#line 794 "parser.yy"
    59425995    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
    59435996    break;
     
    59465999
    59476000/* Line 1806 of yacc.c  */
    5948 #line 798 "parser.yy"
     6001#line 799 "parser.yy"
    59496002    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
    59506003    break;
     
    59536006
    59546007/* Line 1806 of yacc.c  */
    5955 #line 800 "parser.yy"
     6008#line 801 "parser.yy"
    59566009    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    59576010    break;
     
    59606013
    59616014/* Line 1806 of yacc.c  */
    5962 #line 805 "parser.yy"
     6015#line 806 "parser.yy"
    59636016    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
    59646017    break;
     
    59676020
    59686021/* Line 1806 of yacc.c  */
    5969 #line 809 "parser.yy"
     6022#line 810 "parser.yy"
    59706023    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
    59716024    break;
     
    59746027
    59756028/* Line 1806 of yacc.c  */
    5976 #line 812 "parser.yy"
     6029#line 813 "parser.yy"
    59776030    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
    59786031    break;
     
    59816034
    59826035/* Line 1806 of yacc.c  */
    5983 #line 816 "parser.yy"
     6036#line 817 "parser.yy"
    59846037    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
    59856038    break;
     
    59886041
    59896042/* Line 1806 of yacc.c  */
    5990 #line 819 "parser.yy"
     6043#line 820 "parser.yy"
    59916044    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
    59926045    break;
     
    59956048
    59966049/* Line 1806 of yacc.c  */
    5997 #line 823 "parser.yy"
     6050#line 824 "parser.yy"
    59986051    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
    59996052    break;
     
    60026055
    60036056/* Line 1806 of yacc.c  */
    6004 #line 825 "parser.yy"
     6057#line 826 "parser.yy"
    60056058    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
    60066059    break;
     
    60096062
    60106063/* Line 1806 of yacc.c  */
    6011 #line 827 "parser.yy"
     6064#line 828 "parser.yy"
    60126065    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    60136066    break;
     
    60166069
    60176070/* Line 1806 of yacc.c  */
    6018 #line 831 "parser.yy"
     6071#line 832 "parser.yy"
    60196072    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    60206073    break;
     
    60236076
    60246077/* Line 1806 of yacc.c  */
    6025 #line 833 "parser.yy"
     6078#line 834 "parser.yy"
    60266079    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
    60276080    break;
     
    60306083
    60316084/* Line 1806 of yacc.c  */
    6032 #line 840 "parser.yy"
     6085#line 841 "parser.yy"
    60336086    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    60346087    break;
     
    60376090
    60386091/* Line 1806 of yacc.c  */
    6039 #line 842 "parser.yy"
     6092#line 843 "parser.yy"
    60406093    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    60416094    break;
     
    60446097
    60456098/* Line 1806 of yacc.c  */
    6046 #line 844 "parser.yy"
     6099#line 845 "parser.yy"
    60476100    {
    60486101                        (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
     
    60546107
    60556108/* Line 1806 of yacc.c  */
    6056 #line 855 "parser.yy"
     6109#line 856 "parser.yy"
    60576110    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    60586111    break;
     
    60616114
    60626115/* Line 1806 of yacc.c  */
    6063 #line 857 "parser.yy"
     6116#line 858 "parser.yy"
    60646117    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    60656118    break;
     
    60686121
    60696122/* Line 1806 of yacc.c  */
    6070 #line 859 "parser.yy"
     6123#line 860 "parser.yy"
    60716124    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    60726125    break;
     
    60756128
    60766129/* Line 1806 of yacc.c  */
    6077 #line 861 "parser.yy"
     6130#line 862 "parser.yy"
    60786131    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    60796132    break;
     
    60826135
    60836136/* Line 1806 of yacc.c  */
    6084 #line 866 "parser.yy"
     6137#line 867 "parser.yy"
    60856138    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    60866139    break;
     
    60896142
    60906143/* Line 1806 of yacc.c  */
    6091 #line 868 "parser.yy"
     6144#line 869 "parser.yy"
    60926145    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    60936146    break;
     
    60966149
    60976150/* Line 1806 of yacc.c  */
    6098 #line 870 "parser.yy"
     6151#line 871 "parser.yy"
    60996152    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    61006153    break;
     
    61036156
    61046157/* Line 1806 of yacc.c  */
    6105 #line 872 "parser.yy"
     6158#line 873 "parser.yy"
    61066159    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    61076160    break;
     
    61106163
    61116164/* Line 1806 of yacc.c  */
    6112 #line 877 "parser.yy"
     6165#line 878 "parser.yy"
    61136166    {
    61146167                        (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
     
    61206173
    61216174/* Line 1806 of yacc.c  */
    6122 #line 891 "parser.yy"
     6175#line 892 "parser.yy"
    61236176    {
    61246177                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    61306183
    61316184/* Line 1806 of yacc.c  */
    6132 #line 896 "parser.yy"
     6185#line 897 "parser.yy"
    61336186    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    61346187    break;
     
    61376190
    61386191/* Line 1806 of yacc.c  */
    6139 #line 898 "parser.yy"
     6192#line 899 "parser.yy"
    61406193    {
    61416194                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    61476200
    61486201/* Line 1806 of yacc.c  */
    6149 #line 907 "parser.yy"
     6202#line 908 "parser.yy"
    61506203    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
    61516204    break;
     
    61546207
    61556208/* Line 1806 of yacc.c  */
    6156 #line 909 "parser.yy"
     6209#line 910 "parser.yy"
    61576210    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
    61586211    break;
     
    61616214
    61626215/* Line 1806 of yacc.c  */
    6163 #line 911 "parser.yy"
     6216#line 912 "parser.yy"
    61646217    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
    61656218    break;
     
    61686221
    61696222/* Line 1806 of yacc.c  */
    6170 #line 913 "parser.yy"
     6223#line 914 "parser.yy"
    61716224    { (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) ); }
    61726225    break;
     
    61756228
    61766229/* Line 1806 of yacc.c  */
    6177 #line 915 "parser.yy"
     6230#line 916 "parser.yy"
    61786231    { (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) ); }
    61796232    break;
     
    61826235
    61836236/* Line 1806 of yacc.c  */
    6184 #line 920 "parser.yy"
     6237#line 921 "parser.yy"
    61856238    { (yyval.flag) = false; }
    61866239    break;
     
    61896242
    61906243/* Line 1806 of yacc.c  */
    6191 #line 922 "parser.yy"
     6244#line 923 "parser.yy"
    61926245    { (yyval.flag) = true; }
    61936246    break;
     
    61966249
    61976250/* Line 1806 of yacc.c  */
    6198 #line 927 "parser.yy"
     6251#line 928 "parser.yy"
    61996252    { (yyval.en) = 0; }
    62006253    break;
     
    62036256
    62046257/* Line 1806 of yacc.c  */
    6205 #line 934 "parser.yy"
     6258#line 935 "parser.yy"
    62066259    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    62076260    break;
     
    62106263
    62116264/* Line 1806 of yacc.c  */
    6212 #line 939 "parser.yy"
     6265#line 940 "parser.yy"
    62136266    { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
    62146267    break;
     
    62176270
    62186271/* Line 1806 of yacc.c  */
    6219 #line 941 "parser.yy"
     6272#line 942 "parser.yy"
    62206273    { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
    62216274    break;
     
    62246277
    62256278/* Line 1806 of yacc.c  */
    6226 #line 946 "parser.yy"
     6279#line 947 "parser.yy"
    62276280    { (yyval.constant) = 0; }
    62286281    break;
     
    62316284
    62326285/* Line 1806 of yacc.c  */
    6233 #line 948 "parser.yy"
     6286#line 949 "parser.yy"
    62346287    { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
    62356288    break;
     
    62386291
    62396292/* Line 1806 of yacc.c  */
    6240 #line 950 "parser.yy"
     6293#line 951 "parser.yy"
    62416294    { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
    62426295    break;
     
    62456298
    62466299/* Line 1806 of yacc.c  */
    6247 #line 955 "parser.yy"
     6300#line 956 "parser.yy"
    62486301    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
    62496302    break;
     
    62526305
    62536306/* Line 1806 of yacc.c  */
    6254 #line 957 "parser.yy"
     6307#line 958 "parser.yy"
    62556308    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
    62566309    break;
     
    62596312
    62606313/* Line 1806 of yacc.c  */
    6261 #line 964 "parser.yy"
     6314#line 965 "parser.yy"
    62626315    { (yyval.decl) = 0; }
    62636316    break;
     
    62666319
    62676320/* Line 1806 of yacc.c  */
    6268 #line 971 "parser.yy"
     6321#line 972 "parser.yy"
    62696322    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    62706323    break;
     
    62736326
    62746327/* Line 1806 of yacc.c  */
    6275 #line 976 "parser.yy"
     6328#line 977 "parser.yy"
    62766329    { (yyval.decl) = 0; }
    62776330    break;
     
    62806333
    62816334/* Line 1806 of yacc.c  */
    6282 #line 983 "parser.yy"
     6335#line 984 "parser.yy"
    62836336    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    62846337    break;
    62856338
    62866339  case 245:
    6287 
    6288 /* Line 1806 of yacc.c  */
    6289 #line 997 "parser.yy"
    6290     {}
    6291     break;
    6292 
    6293   case 246:
    62946340
    62956341/* Line 1806 of yacc.c  */
     
    62986344    break;
    62996345
     6346  case 246:
     6347
     6348/* Line 1806 of yacc.c  */
     6349#line 999 "parser.yy"
     6350    {}
     6351    break;
     6352
    63006353  case 254:
    63016354
    63026355/* Line 1806 of yacc.c  */
    6303 #line 1027 "parser.yy"
     6356#line 1028 "parser.yy"
    63046357    {
    63056358                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63116364
    63126365/* Line 1806 of yacc.c  */
    6313 #line 1034 "parser.yy"
     6366#line 1035 "parser.yy"
    63146367    {
    63156368                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63216374
    63226375/* Line 1806 of yacc.c  */
    6323 #line 1039 "parser.yy"
     6376#line 1040 "parser.yy"
    63246377    {
    63256378                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
     
    63316384
    63326385/* Line 1806 of yacc.c  */
    6333 #line 1049 "parser.yy"
     6386#line 1050 "parser.yy"
    63346387    {
    63356388                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    63416394
    63426395/* Line 1806 of yacc.c  */
    6343 #line 1054 "parser.yy"
     6396#line 1055 "parser.yy"
    63446397    {
    63456398                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    63516404
    63526405/* Line 1806 of yacc.c  */
    6353 #line 1059 "parser.yy"
     6406#line 1060 "parser.yy"
    63546407    {
    63556408                        typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
     
    63616414
    63626415/* Line 1806 of yacc.c  */
    6363 #line 1067 "parser.yy"
     6416#line 1068 "parser.yy"
    63646417    {
    63656418                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63716424
    63726425/* Line 1806 of yacc.c  */
    6373 #line 1072 "parser.yy"
     6426#line 1073 "parser.yy"
    63746427    {
    63756428                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63816434
    63826435/* Line 1806 of yacc.c  */
    6383 #line 1077 "parser.yy"
     6436#line 1078 "parser.yy"
    63846437    {
    63856438                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63916444
    63926445/* Line 1806 of yacc.c  */
    6393 #line 1082 "parser.yy"
     6446#line 1083 "parser.yy"
    63946447    {
    63956448                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64016454
    64026455/* Line 1806 of yacc.c  */
    6403 #line 1087 "parser.yy"
     6456#line 1088 "parser.yy"
    64046457    {
    64056458                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    64116464
    64126465/* Line 1806 of yacc.c  */
    6413 #line 1095 "parser.yy"
     6466#line 1096 "parser.yy"
    64146467    {
    64156468                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
     
    64206473
    64216474/* Line 1806 of yacc.c  */
    6422 #line 1118 "parser.yy"
     6475#line 1119 "parser.yy"
    64236476    {
    64246477                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    64296482
    64306483/* Line 1806 of yacc.c  */
    6431 #line 1122 "parser.yy"
     6484#line 1123 "parser.yy"
    64326485    {
    64336486                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    64386491
    64396492/* Line 1806 of yacc.c  */
    6440 #line 1129 "parser.yy"
     6493#line 1130 "parser.yy"
    64416494    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    64426495    break;
     
    64456498
    64466499/* Line 1806 of yacc.c  */
    6447 #line 1133 "parser.yy"
     6500#line 1134 "parser.yy"
    64486501    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
    64496502    break;
     
    64526505
    64536506/* Line 1806 of yacc.c  */
    6454 #line 1138 "parser.yy"
     6507#line 1139 "parser.yy"
    64556508    {
    64566509                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64626515
    64636516/* Line 1806 of yacc.c  */
    6464 #line 1143 "parser.yy"
     6517#line 1144 "parser.yy"
    64656518    {
    64666519                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64726525
    64736526/* Line 1806 of yacc.c  */
    6474 #line 1148 "parser.yy"
     6527#line 1149 "parser.yy"
    64756528    {
    64766529                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
     
    64826535
    64836536/* Line 1806 of yacc.c  */
    6484 #line 1159 "parser.yy"
     6537#line 1160 "parser.yy"
    64856538    {
    64866539                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64926545
    64936546/* Line 1806 of yacc.c  */
    6494 #line 1164 "parser.yy"
     6547#line 1165 "parser.yy"
    64956548    {
    64966549                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65026555
    65036556/* Line 1806 of yacc.c  */
    6504 #line 1169 "parser.yy"
     6557#line 1170 "parser.yy"
    65056558    {
    65066559                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65126565
    65136566/* Line 1806 of yacc.c  */
    6514 #line 1174 "parser.yy"
     6567#line 1175 "parser.yy"
    65156568    {
    65166569                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65226575
    65236576/* Line 1806 of yacc.c  */
    6524 #line 1179 "parser.yy"
     6577#line 1180 "parser.yy"
    65256578    {
    65266579                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65326585
    65336586/* Line 1806 of yacc.c  */
    6534 #line 1188 "parser.yy"
     6587#line 1189 "parser.yy"
    65356588    {
    65366589                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
     
    65426595
    65436596/* Line 1806 of yacc.c  */
    6544 #line 1193 "parser.yy"
     6597#line 1194 "parser.yy"
    65456598    {
    65466599                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
     
    65526605
    65536606/* Line 1806 of yacc.c  */
    6554 #line 1210 "parser.yy"
     6607#line 1211 "parser.yy"
    65556608    {
    65566609                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65626615
    65636616/* Line 1806 of yacc.c  */
    6564 #line 1215 "parser.yy"
     6617#line 1216 "parser.yy"
    65656618    {
    65666619                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65726625
    65736626/* Line 1806 of yacc.c  */
    6574 #line 1237 "parser.yy"
     6627#line 1238 "parser.yy"
    65756628    { (yyval.decl) = 0; }
    65766629    break;
     
    65796632
    65806633/* Line 1806 of yacc.c  */
    6581 #line 1249 "parser.yy"
     6634#line 1250 "parser.yy"
    65826635    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    65836636    break;
     
    65866639
    65876640/* Line 1806 of yacc.c  */
    6588 #line 1260 "parser.yy"
     6641#line 1261 "parser.yy"
    65896642    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
    65906643    break;
     
    65936646
    65946647/* Line 1806 of yacc.c  */
    6595 #line 1262 "parser.yy"
     6648#line 1263 "parser.yy"
    65966649    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
    65976650    break;
     
    66006653
    66016654/* Line 1806 of yacc.c  */
    6602 #line 1264 "parser.yy"
     6655#line 1265 "parser.yy"
    66036656    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
    66046657    break;
     
    66076660
    66086661/* Line 1806 of yacc.c  */
    6609 #line 1266 "parser.yy"
     6662#line 1267 "parser.yy"
    66106663    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
    66116664    break;
     
    66146667
    66156668/* Line 1806 of yacc.c  */
    6616 #line 1268 "parser.yy"
     6669#line 1269 "parser.yy"
    66176670    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
    66186671    break;
     
    66216674
    66226675/* Line 1806 of yacc.c  */
    6623 #line 1270 "parser.yy"
     6676#line 1271 "parser.yy"
    66246677    {
    66256678                        typedefTable.enterScope();
     
    66306683
    66316684/* Line 1806 of yacc.c  */
    6632 #line 1274 "parser.yy"
     6685#line 1275 "parser.yy"
    66336686    {
    66346687                        typedefTable.leaveScope();
     
    66406693
    66416694/* Line 1806 of yacc.c  */
    6642 #line 1283 "parser.yy"
     6695#line 1284 "parser.yy"
    66436696    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    66446697    break;
     
    66476700
    66486701/* Line 1806 of yacc.c  */
    6649 #line 1285 "parser.yy"
     6702#line 1286 "parser.yy"
    66506703    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    66516704    break;
     
    66546707
    66556708/* Line 1806 of yacc.c  */
    6656 #line 1296 "parser.yy"
     6709#line 1297 "parser.yy"
    66576710    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    66586711    break;
     
    66616714
    66626715/* Line 1806 of yacc.c  */
    6663 #line 1305 "parser.yy"
     6716#line 1306 "parser.yy"
    66646717    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
    66656718    break;
     
    66686721
    66696722/* Line 1806 of yacc.c  */
    6670 #line 1307 "parser.yy"
     6723#line 1308 "parser.yy"
    66716724    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
    66726725    break;
     
    66756728
    66766729/* Line 1806 of yacc.c  */
    6677 #line 1309 "parser.yy"
     6730#line 1310 "parser.yy"
    66786731    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
    66796732    break;
     
    66826735
    66836736/* Line 1806 of yacc.c  */
    6684 #line 1311 "parser.yy"
     6737#line 1312 "parser.yy"
    66856738    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
    66866739    break;
     
    66896742
    66906743/* Line 1806 of yacc.c  */
    6691 #line 1313 "parser.yy"
     6744#line 1314 "parser.yy"
    66926745    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
    66936746    break;
     
    66966749
    66976750/* Line 1806 of yacc.c  */
    6698 #line 1315 "parser.yy"
     6751#line 1316 "parser.yy"
    66996752    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
    67006753    break;
     
    67036756
    67046757/* Line 1806 of yacc.c  */
    6705 #line 1317 "parser.yy"
     6758#line 1318 "parser.yy"
    67066759    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
    67076760    break;
     
    67106763
    67116764/* Line 1806 of yacc.c  */
    6712 #line 1319 "parser.yy"
     6765#line 1320 "parser.yy"
    67136766    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
    67146767    break;
     
    67176770
    67186771/* Line 1806 of yacc.c  */
    6719 #line 1324 "parser.yy"
     6772#line 1325 "parser.yy"
    67206773    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
    67216774    break;
     
    67246777
    67256778/* Line 1806 of yacc.c  */
    6726 #line 1326 "parser.yy"
     6779#line 1327 "parser.yy"
    67276780    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
    67286781    break;
     
    67316784
    67326785/* Line 1806 of yacc.c  */
    6733 #line 1328 "parser.yy"
     6786#line 1329 "parser.yy"
    67346787    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
    67356788    break;
     
    67386791
    67396792/* Line 1806 of yacc.c  */
    6740 #line 1330 "parser.yy"
     6793#line 1331 "parser.yy"
    67416794    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
    67426795    break;
     
    67456798
    67466799/* Line 1806 of yacc.c  */
    6747 #line 1332 "parser.yy"
     6800#line 1333 "parser.yy"
    67486801    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
    67496802    break;
     
    67526805
    67536806/* Line 1806 of yacc.c  */
    6754 #line 1334 "parser.yy"
     6807#line 1335 "parser.yy"
    67556808    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
    67566809    break;
     
    67596812
    67606813/* Line 1806 of yacc.c  */
    6761 #line 1336 "parser.yy"
     6814#line 1337 "parser.yy"
    67626815    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
    67636816    break;
     
    67666819
    67676820/* Line 1806 of yacc.c  */
    6768 #line 1338 "parser.yy"
     6821#line 1339 "parser.yy"
    67696822    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
    67706823    break;
     
    67736826
    67746827/* Line 1806 of yacc.c  */
    6775 #line 1340 "parser.yy"
     6828#line 1341 "parser.yy"
    67766829    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
    67776830    break;
     
    67806833
    67816834/* Line 1806 of yacc.c  */
    6782 #line 1342 "parser.yy"
     6835#line 1343 "parser.yy"
    67836836    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
    67846837    break;
     
    67876840
    67886841/* Line 1806 of yacc.c  */
    6789 #line 1344 "parser.yy"
     6842#line 1345 "parser.yy"
    67906843    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
    67916844    break;
     
    67946847
    67956848/* Line 1806 of yacc.c  */
    6796 #line 1346 "parser.yy"
     6849#line 1347 "parser.yy"
    67976850    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
    67986851    break;
    67996852
    6800   case 334:
    6801 
    6802 /* Line 1806 of yacc.c  */
    6803 #line 1353 "parser.yy"
     6853  case 333:
     6854
     6855/* Line 1806 of yacc.c  */
     6856#line 1349 "parser.yy"
     6857    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     6858    break;
     6859
     6860  case 335:
     6861
     6862/* Line 1806 of yacc.c  */
     6863#line 1356 "parser.yy"
    68046864    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68056865    break;
    68066866
    6807   case 335:
    6808 
    6809 /* Line 1806 of yacc.c  */
    6810 #line 1355 "parser.yy"
     6867  case 336:
     6868
     6869/* Line 1806 of yacc.c  */
     6870#line 1358 "parser.yy"
    68116871    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68126872    break;
    68136873
    6814   case 336:
    6815 
    6816 /* Line 1806 of yacc.c  */
    6817 #line 1357 "parser.yy"
     6874  case 337:
     6875
     6876/* Line 1806 of yacc.c  */
     6877#line 1360 "parser.yy"
    68186878    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68196879    break;
    68206880
    6821   case 337:
    6822 
    6823 /* Line 1806 of yacc.c  */
    6824 #line 1359 "parser.yy"
     6881  case 338:
     6882
     6883/* Line 1806 of yacc.c  */
     6884#line 1362 "parser.yy"
    68256885    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
    68266886    break;
    68276887
    6828   case 339:
    6829 
    6830 /* Line 1806 of yacc.c  */
    6831 #line 1365 "parser.yy"
     6888  case 340:
     6889
     6890/* Line 1806 of yacc.c  */
     6891#line 1368 "parser.yy"
    68326892    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68336893    break;
    68346894
    6835   case 341:
    6836 
    6837 /* Line 1806 of yacc.c  */
    6838 #line 1372 "parser.yy"
     6895  case 342:
     6896
     6897/* Line 1806 of yacc.c  */
     6898#line 1375 "parser.yy"
    68396899    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68406900    break;
    68416901
    6842   case 342:
    6843 
    6844 /* Line 1806 of yacc.c  */
    6845 #line 1374 "parser.yy"
     6902  case 343:
     6903
     6904/* Line 1806 of yacc.c  */
     6905#line 1377 "parser.yy"
    68466906    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68476907    break;
    68486908
    6849   case 343:
    6850 
    6851 /* Line 1806 of yacc.c  */
    6852 #line 1376 "parser.yy"
     6909  case 344:
     6910
     6911/* Line 1806 of yacc.c  */
     6912#line 1379 "parser.yy"
    68536913    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
    68546914    break;
    68556915
    6856   case 344:
    6857 
    6858 /* Line 1806 of yacc.c  */
    6859 #line 1381 "parser.yy"
     6916  case 345:
     6917
     6918/* Line 1806 of yacc.c  */
     6919#line 1384 "parser.yy"
    68606920    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
    68616921    break;
    68626922
    6863   case 345:
    6864 
    6865 /* Line 1806 of yacc.c  */
    6866 #line 1383 "parser.yy"
     6923  case 346:
     6924
     6925/* Line 1806 of yacc.c  */
     6926#line 1386 "parser.yy"
    68676927    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
    68686928    break;
    68696929
    6870   case 346:
    6871 
    6872 /* Line 1806 of yacc.c  */
    6873 #line 1385 "parser.yy"
     6930  case 347:
     6931
     6932/* Line 1806 of yacc.c  */
     6933#line 1388 "parser.yy"
    68746934    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
    68756935    break;
    68766936
    6877   case 347:
    6878 
    6879 /* Line 1806 of yacc.c  */
    6880 #line 1387 "parser.yy"
     6937  case 348:
     6938
     6939/* Line 1806 of yacc.c  */
     6940#line 1390 "parser.yy"
    68816941    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    68826942    break;
    68836943
    6884   case 349:
    6885 
    6886 /* Line 1806 of yacc.c  */
    6887 #line 1393 "parser.yy"
     6944  case 350:
     6945
     6946/* Line 1806 of yacc.c  */
     6947#line 1396 "parser.yy"
    68886948    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68896949    break;
    68906950
    6891   case 350:
    6892 
    6893 /* Line 1806 of yacc.c  */
    6894 #line 1395 "parser.yy"
     6951  case 351:
     6952
     6953/* Line 1806 of yacc.c  */
     6954#line 1398 "parser.yy"
    68956955    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68966956    break;
    68976957
    6898   case 351:
    6899 
    6900 /* Line 1806 of yacc.c  */
    6901 #line 1397 "parser.yy"
     6958  case 352:
     6959
     6960/* Line 1806 of yacc.c  */
     6961#line 1400 "parser.yy"
    69026962    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    69036963    break;
    69046964
    6905   case 353:
    6906 
    6907 /* Line 1806 of yacc.c  */
    6908 #line 1403 "parser.yy"
     6965  case 354:
     6966
     6967/* Line 1806 of yacc.c  */
     6968#line 1406 "parser.yy"
    69096969    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69106970    break;
    69116971
    6912   case 354:
    6913 
    6914 /* Line 1806 of yacc.c  */
    6915 #line 1405 "parser.yy"
     6972  case 355:
     6973
     6974/* Line 1806 of yacc.c  */
     6975#line 1408 "parser.yy"
    69166976    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69176977    break;
    69186978
    6919   case 356:
    6920 
    6921 /* Line 1806 of yacc.c  */
    6922 #line 1411 "parser.yy"
     6979  case 357:
     6980
     6981/* Line 1806 of yacc.c  */
     6982#line 1414 "parser.yy"
    69236983    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69246984    break;
    69256985
    6926   case 357:
    6927 
    6928 /* Line 1806 of yacc.c  */
    6929 #line 1413 "parser.yy"
     6986  case 358:
     6987
     6988/* Line 1806 of yacc.c  */
     6989#line 1416 "parser.yy"
    69306990    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69316991    break;
    69326992
    6933   case 358:
    6934 
    6935 /* Line 1806 of yacc.c  */
    6936 #line 1415 "parser.yy"
     6993  case 359:
     6994
     6995/* Line 1806 of yacc.c  */
     6996#line 1418 "parser.yy"
    69376997    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    69386998    break;
    69396999
    6940   case 359:
    6941 
    6942 /* Line 1806 of yacc.c  */
    6943 #line 1420 "parser.yy"
     7000  case 360:
     7001
     7002/* Line 1806 of yacc.c  */
     7003#line 1423 "parser.yy"
    69447004    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
    69457005    break;
    69467006
    6947   case 360:
    6948 
    6949 /* Line 1806 of yacc.c  */
    6950 #line 1422 "parser.yy"
     7007  case 361:
     7008
     7009/* Line 1806 of yacc.c  */
     7010#line 1425 "parser.yy"
    69517011    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69527012    break;
    69537013
    6954   case 361:
    6955 
    6956 /* Line 1806 of yacc.c  */
    6957 #line 1424 "parser.yy"
     7014  case 362:
     7015
     7016/* Line 1806 of yacc.c  */
     7017#line 1427 "parser.yy"
    69587018    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69597019    break;
    69607020
    6961   case 364:
    6962 
    6963 /* Line 1806 of yacc.c  */
    6964 #line 1434 "parser.yy"
     7021  case 365:
     7022
     7023/* Line 1806 of yacc.c  */
     7024#line 1437 "parser.yy"
    69657025    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
    69667026    break;
    69677027
    6968   case 365:
    6969 
    6970 /* Line 1806 of yacc.c  */
    6971 #line 1436 "parser.yy"
     7028  case 366:
     7029
     7030/* Line 1806 of yacc.c  */
     7031#line 1439 "parser.yy"
    69727032    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); }
    69737033    break;
    69747034
    6975   case 366:
    6976 
    6977 /* Line 1806 of yacc.c  */
    6978 #line 1438 "parser.yy"
     7035  case 367:
     7036
     7037/* Line 1806 of yacc.c  */
     7038#line 1441 "parser.yy"
    69797039    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); }
    69807040    break;
    69817041
    6982   case 367:
    6983 
    6984 /* Line 1806 of yacc.c  */
    6985 #line 1440 "parser.yy"
     7042  case 368:
     7043
     7044/* Line 1806 of yacc.c  */
     7045#line 1443 "parser.yy"
    69867046    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
    69877047    break;
    69887048
    6989   case 368:
    6990 
    6991 /* Line 1806 of yacc.c  */
    6992 #line 1442 "parser.yy"
     7049  case 369:
     7050
     7051/* Line 1806 of yacc.c  */
     7052#line 1445 "parser.yy"
    69937053    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    69947054    break;
    69957055
    6996   case 369:
    6997 
    6998 /* Line 1806 of yacc.c  */
    6999 #line 1447 "parser.yy"
     7056  case 370:
     7057
     7058/* Line 1806 of yacc.c  */
     7059#line 1450 "parser.yy"
    70007060    { (yyval.aggKey) = DeclarationNode::Struct; }
    70017061    break;
    70027062
    7003   case 370:
    7004 
    7005 /* Line 1806 of yacc.c  */
    7006 #line 1449 "parser.yy"
     7063  case 371:
     7064
     7065/* Line 1806 of yacc.c  */
     7066#line 1452 "parser.yy"
    70077067    { (yyval.aggKey) = DeclarationNode::Union; }
    70087068    break;
    70097069
    7010   case 371:
    7011 
    7012 /* Line 1806 of yacc.c  */
    7013 #line 1454 "parser.yy"
     7070  case 372:
     7071
     7072/* Line 1806 of yacc.c  */
     7073#line 1457 "parser.yy"
    70147074    { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
    70157075    break;
    70167076
    7017   case 372:
    7018 
    7019 /* Line 1806 of yacc.c  */
    7020 #line 1456 "parser.yy"
     7077  case 373:
     7078
     7079/* Line 1806 of yacc.c  */
     7080#line 1459 "parser.yy"
    70217081    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    70227082    break;
    70237083
    7024   case 374:
    7025 
    7026 /* Line 1806 of yacc.c  */
    7027 #line 1462 "parser.yy"
    7028     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    7029     break;
    7030 
    7031   case 376:
     7084  case 375:
    70327085
    70337086/* Line 1806 of yacc.c  */
     
    70367089    break;
    70377090
    7038   case 378:
    7039 
    7040 /* Line 1806 of yacc.c  */
    7041 #line 1471 "parser.yy"
     7091  case 377:
     7092
     7093/* Line 1806 of yacc.c  */
     7094#line 1468 "parser.yy"
     7095    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     7096    break;
     7097
     7098  case 379:
     7099
     7100/* Line 1806 of yacc.c  */
     7101#line 1474 "parser.yy"
    70427102    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
    70437103    break;
    70447104
    7045   case 379:
    7046 
    7047 /* Line 1806 of yacc.c  */
    7048 #line 1473 "parser.yy"
     7105  case 380:
     7106
     7107/* Line 1806 of yacc.c  */
     7108#line 1476 "parser.yy"
    70497109    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    70507110    break;
    70517111
    7052   case 380:
    7053 
    7054 /* Line 1806 of yacc.c  */
    7055 #line 1475 "parser.yy"
     7112  case 381:
     7113
     7114/* Line 1806 of yacc.c  */
     7115#line 1478 "parser.yy"
    70567116    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
    70577117    break;
    70587118
    7059   case 381:
    7060 
    7061 /* Line 1806 of yacc.c  */
    7062 #line 1480 "parser.yy"
     7119  case 382:
     7120
     7121/* Line 1806 of yacc.c  */
     7122#line 1483 "parser.yy"
    70637123    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    70647124    break;
    70657125
    7066   case 382:
    7067 
    7068 /* Line 1806 of yacc.c  */
    7069 #line 1482 "parser.yy"
     7126  case 383:
     7127
     7128/* Line 1806 of yacc.c  */
     7129#line 1485 "parser.yy"
    70707130    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    70717131    break;
    70727132
    7073   case 383:
    7074 
    7075 /* Line 1806 of yacc.c  */
    7076 #line 1487 "parser.yy"
     7133  case 384:
     7134
     7135/* Line 1806 of yacc.c  */
     7136#line 1490 "parser.yy"
    70777137    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    70787138    break;
    70797139
    7080   case 384:
    7081 
    7082 /* Line 1806 of yacc.c  */
    7083 #line 1489 "parser.yy"
     7140  case 385:
     7141
     7142/* Line 1806 of yacc.c  */
     7143#line 1492 "parser.yy"
    70847144    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    7085     break;
    7086 
    7087   case 385:
    7088 
    7089 /* Line 1806 of yacc.c  */
    7090 #line 1492 "parser.yy"
    7091     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    70927145    break;
    70937146
     
    70997152    break;
    71007153
    7101   case 388:
    7102 
    7103 /* Line 1806 of yacc.c  */
    7104 #line 1501 "parser.yy"
     7154  case 387:
     7155
     7156/* Line 1806 of yacc.c  */
     7157#line 1498 "parser.yy"
     7158    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     7159    break;
     7160
     7161  case 389:
     7162
     7163/* Line 1806 of yacc.c  */
     7164#line 1504 "parser.yy"
    71057165    { (yyval.en) = 0; }
    71067166    break;
    71077167
    7108   case 389:
    7109 
    7110 /* Line 1806 of yacc.c  */
    7111 #line 1503 "parser.yy"
     7168  case 390:
     7169
     7170/* Line 1806 of yacc.c  */
     7171#line 1506 "parser.yy"
    71127172    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    71137173    break;
    71147174
    7115   case 390:
    7116 
    7117 /* Line 1806 of yacc.c  */
    7118 #line 1508 "parser.yy"
     7175  case 391:
     7176
     7177/* Line 1806 of yacc.c  */
     7178#line 1511 "parser.yy"
    71197179    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    71207180    break;
    71217181
    7122   case 392:
    7123 
    7124 /* Line 1806 of yacc.c  */
    7125 #line 1517 "parser.yy"
     7182  case 393:
     7183
     7184/* Line 1806 of yacc.c  */
     7185#line 1520 "parser.yy"
    71267186    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    71277187    break;
    71287188
    7129   case 393:
    7130 
    7131 /* Line 1806 of yacc.c  */
    7132 #line 1519 "parser.yy"
     7189  case 394:
     7190
     7191/* Line 1806 of yacc.c  */
     7192#line 1522 "parser.yy"
    71337193    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }
    71347194    break;
    71357195
    7136   case 394:
    7137 
    7138 /* Line 1806 of yacc.c  */
    7139 #line 1521 "parser.yy"
     7196  case 395:
     7197
     7198/* Line 1806 of yacc.c  */
     7199#line 1524 "parser.yy"
    71407200    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
    71417201    break;
    71427202
    7143   case 395:
    7144 
    7145 /* Line 1806 of yacc.c  */
    7146 #line 1526 "parser.yy"
     7203  case 396:
     7204
     7205/* Line 1806 of yacc.c  */
     7206#line 1529 "parser.yy"
    71477207    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    71487208    break;
    71497209
    7150   case 396:
    7151 
    7152 /* Line 1806 of yacc.c  */
    7153 #line 1528 "parser.yy"
     7210  case 397:
     7211
     7212/* Line 1806 of yacc.c  */
     7213#line 1531 "parser.yy"
    71547214    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    71557215    break;
    71567216
    7157   case 397:
    7158 
    7159 /* Line 1806 of yacc.c  */
    7160 #line 1533 "parser.yy"
     7217  case 398:
     7218
     7219/* Line 1806 of yacc.c  */
     7220#line 1536 "parser.yy"
    71617221    { (yyval.en) = 0; }
    71627222    break;
    71637223
    7164   case 398:
    7165 
    7166 /* Line 1806 of yacc.c  */
    7167 #line 1535 "parser.yy"
     7224  case 399:
     7225
     7226/* Line 1806 of yacc.c  */
     7227#line 1538 "parser.yy"
    71687228    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    71697229    break;
    71707230
    7171   case 399:
    7172 
    7173 /* Line 1806 of yacc.c  */
    7174 #line 1542 "parser.yy"
     7231  case 400:
     7232
     7233/* Line 1806 of yacc.c  */
     7234#line 1545 "parser.yy"
    71757235    { (yyval.decl) = 0; }
    71767236    break;
    71777237
    7178   case 403:
    7179 
    7180 /* Line 1806 of yacc.c  */
    7181 #line 1550 "parser.yy"
     7238  case 404:
     7239
     7240/* Line 1806 of yacc.c  */
     7241#line 1553 "parser.yy"
    71827242    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    71837243    break;
    71847244
    7185   case 404:
    7186 
    7187 /* Line 1806 of yacc.c  */
    7188 #line 1552 "parser.yy"
     7245  case 405:
     7246
     7247/* Line 1806 of yacc.c  */
     7248#line 1555 "parser.yy"
    71897249    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    71907250    break;
    71917251
    7192   case 405:
    7193 
    7194 /* Line 1806 of yacc.c  */
    7195 #line 1554 "parser.yy"
     7252  case 406:
     7253
     7254/* Line 1806 of yacc.c  */
     7255#line 1557 "parser.yy"
    71967256    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    71977257    break;
    71987258
    7199   case 407:
    7200 
    7201 /* Line 1806 of yacc.c  */
    7202 #line 1562 "parser.yy"
     7259  case 408:
     7260
     7261/* Line 1806 of yacc.c  */
     7262#line 1565 "parser.yy"
    72037263    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72047264    break;
    72057265
    7206   case 408:
    7207 
    7208 /* Line 1806 of yacc.c  */
    7209 #line 1564 "parser.yy"
     7266  case 409:
     7267
     7268/* Line 1806 of yacc.c  */
     7269#line 1567 "parser.yy"
    72107270    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72117271    break;
    72127272
    7213   case 409:
    7214 
    7215 /* Line 1806 of yacc.c  */
    7216 #line 1566 "parser.yy"
     7273  case 410:
     7274
     7275/* Line 1806 of yacc.c  */
     7276#line 1569 "parser.yy"
    72177277    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    72187278    break;
    72197279
    7220   case 411:
    7221 
    7222 /* Line 1806 of yacc.c  */
    7223 #line 1572 "parser.yy"
     7280  case 412:
     7281
     7282/* Line 1806 of yacc.c  */
     7283#line 1575 "parser.yy"
    72247284    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72257285    break;
    72267286
    7227   case 412:
    7228 
    7229 /* Line 1806 of yacc.c  */
    7230 #line 1577 "parser.yy"
     7287  case 413:
     7288
     7289/* Line 1806 of yacc.c  */
     7290#line 1580 "parser.yy"
    72317291    { (yyval.decl) = 0; }
    72327292    break;
    72337293
    7234   case 415:
    7235 
    7236 /* Line 1806 of yacc.c  */
    7237 #line 1584 "parser.yy"
     7294  case 416:
     7295
     7296/* Line 1806 of yacc.c  */
     7297#line 1587 "parser.yy"
    72387298    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    72397299    break;
    72407300
    7241   case 418:
    7242 
    7243 /* Line 1806 of yacc.c  */
    7244 #line 1591 "parser.yy"
     7301  case 419:
     7302
     7303/* Line 1806 of yacc.c  */
     7304#line 1594 "parser.yy"
    72457305    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72467306    break;
    72477307
    7248   case 419:
    7249 
    7250 /* Line 1806 of yacc.c  */
    7251 #line 1593 "parser.yy"
     7308  case 420:
     7309
     7310/* Line 1806 of yacc.c  */
     7311#line 1596 "parser.yy"
    72527312    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7253     break;
    7254 
    7255   case 421:
    7256 
    7257 /* Line 1806 of yacc.c  */
    7258 #line 1602 "parser.yy"
    7259     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    72607313    break;
    72617314
     
    72707323
    72717324/* Line 1806 of yacc.c  */
    7272 #line 1607 "parser.yy"
     7325#line 1608 "parser.yy"
     7326    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     7327    break;
     7328
     7329  case 424:
     7330
     7331/* Line 1806 of yacc.c  */
     7332#line 1610 "parser.yy"
    72737333    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
    72747334    break;
    72757335
    7276   case 428:
    7277 
    7278 /* Line 1806 of yacc.c  */
    7279 #line 1617 "parser.yy"
     7336  case 429:
     7337
     7338/* Line 1806 of yacc.c  */
     7339#line 1620 "parser.yy"
    72807340    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    72817341    break;
    72827342
    7283   case 430:
    7284 
    7285 /* Line 1806 of yacc.c  */
    7286 #line 1623 "parser.yy"
     7343  case 431:
     7344
     7345/* Line 1806 of yacc.c  */
     7346#line 1626 "parser.yy"
    72877347    {
    72887348                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    72917351    break;
    72927352
    7293   case 431:
    7294 
    7295 /* Line 1806 of yacc.c  */
    7296 #line 1628 "parser.yy"
     7353  case 432:
     7354
     7355/* Line 1806 of yacc.c  */
     7356#line 1631 "parser.yy"
    72977357    {
    72987358                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    73017361    break;
    73027362
    7303   case 433:
    7304 
    7305 /* Line 1806 of yacc.c  */
    7306 #line 1637 "parser.yy"
     7363  case 434:
     7364
     7365/* Line 1806 of yacc.c  */
     7366#line 1640 "parser.yy"
    73077367    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73087368    break;
    73097369
    7310   case 434:
    7311 
    7312 /* Line 1806 of yacc.c  */
    7313 #line 1646 "parser.yy"
     7370  case 435:
     7371
     7372/* Line 1806 of yacc.c  */
     7373#line 1649 "parser.yy"
    73147374    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    73157375    break;
    73167376
    7317   case 435:
    7318 
    7319 /* Line 1806 of yacc.c  */
    7320 #line 1648 "parser.yy"
     7377  case 436:
     7378
     7379/* Line 1806 of yacc.c  */
     7380#line 1651 "parser.yy"
    73217381    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    73227382    break;
    73237383
    7324   case 447:
    7325 
    7326 /* Line 1806 of yacc.c  */
    7327 #line 1673 "parser.yy"
     7384  case 448:
     7385
     7386/* Line 1806 of yacc.c  */
     7387#line 1676 "parser.yy"
    73287388    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73297389    break;
    73307390
    7331   case 451:
    7332 
    7333 /* Line 1806 of yacc.c  */
    7334 #line 1681 "parser.yy"
     7391  case 452:
     7392
     7393/* Line 1806 of yacc.c  */
     7394#line 1684 "parser.yy"
    73357395    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73367396    break;
    73377397
    7338   case 452:
    7339 
    7340 /* Line 1806 of yacc.c  */
    7341 #line 1686 "parser.yy"
     7398  case 453:
     7399
     7400/* Line 1806 of yacc.c  */
     7401#line 1689 "parser.yy"
    73427402    { (yyval.in) = 0; }
    73437403    break;
    73447404
    7345   case 453:
    7346 
    7347 /* Line 1806 of yacc.c  */
    7348 #line 1688 "parser.yy"
     7405  case 454:
     7406
     7407/* Line 1806 of yacc.c  */
     7408#line 1691 "parser.yy"
    73497409    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    73507410    break;
    73517411
    7352   case 454:
    7353 
    7354 /* Line 1806 of yacc.c  */
    7355 #line 1690 "parser.yy"
     7412  case 455:
     7413
     7414/* Line 1806 of yacc.c  */
     7415#line 1693 "parser.yy"
    73567416    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    73577417    break;
    73587418
    7359   case 455:
    7360 
    7361 /* Line 1806 of yacc.c  */
    7362 #line 1694 "parser.yy"
     7419  case 456:
     7420
     7421/* Line 1806 of yacc.c  */
     7422#line 1697 "parser.yy"
    73637423    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
    73647424    break;
    73657425
    7366   case 456:
    7367 
    7368 /* Line 1806 of yacc.c  */
    7369 #line 1695 "parser.yy"
     7426  case 457:
     7427
     7428/* Line 1806 of yacc.c  */
     7429#line 1698 "parser.yy"
    73707430    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
    73717431    break;
    73727432
    7373   case 457:
    7374 
    7375 /* Line 1806 of yacc.c  */
    7376 #line 1700 "parser.yy"
     7433  case 458:
     7434
     7435/* Line 1806 of yacc.c  */
     7436#line 1703 "parser.yy"
    73777437    { (yyval.in) = 0; }
    73787438    break;
    73797439
    7380   case 459:
    7381 
    7382 /* Line 1806 of yacc.c  */
    7383 #line 1702 "parser.yy"
     7440  case 460:
     7441
     7442/* Line 1806 of yacc.c  */
     7443#line 1705 "parser.yy"
    73847444    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    73857445    break;
    73867446
    7387   case 460:
    7388 
    7389 /* Line 1806 of yacc.c  */
    7390 #line 1703 "parser.yy"
     7447  case 461:
     7448
     7449/* Line 1806 of yacc.c  */
     7450#line 1706 "parser.yy"
    73917451    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
    73927452    break;
    73937453
    7394   case 461:
    7395 
    7396 /* Line 1806 of yacc.c  */
    7397 #line 1705 "parser.yy"
     7454  case 462:
     7455
     7456/* Line 1806 of yacc.c  */
     7457#line 1708 "parser.yy"
    73987458    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    73997459    break;
    74007460
    7401   case 463:
    7402 
    7403 /* Line 1806 of yacc.c  */
    7404 #line 1721 "parser.yy"
     7461  case 464:
     7462
     7463/* Line 1806 of yacc.c  */
     7464#line 1724 "parser.yy"
    74057465    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
    74067466    break;
    74077467
    7408   case 465:
    7409 
    7410 /* Line 1806 of yacc.c  */
    7411 #line 1727 "parser.yy"
     7468  case 466:
     7469
     7470/* Line 1806 of yacc.c  */
     7471#line 1730 "parser.yy"
    74127472    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
    74137473    break;
    74147474
    7415   case 466:
    7416 
    7417 /* Line 1806 of yacc.c  */
    7418 #line 1735 "parser.yy"
     7475  case 467:
     7476
     7477/* Line 1806 of yacc.c  */
     7478#line 1738 "parser.yy"
    74197479    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
    74207480    break;
    74217481
    7422   case 467:
    7423 
    7424 /* Line 1806 of yacc.c  */
    7425 #line 1737 "parser.yy"
     7482  case 468:
     7483
     7484/* Line 1806 of yacc.c  */
     7485#line 1740 "parser.yy"
    74267486    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
    74277487    break;
    74287488
    7429   case 468:
    7430 
    7431 /* Line 1806 of yacc.c  */
    7432 #line 1740 "parser.yy"
     7489  case 469:
     7490
     7491/* Line 1806 of yacc.c  */
     7492#line 1743 "parser.yy"
    74337493    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    74347494    break;
    74357495
    7436   case 469:
    7437 
    7438 /* Line 1806 of yacc.c  */
    7439 #line 1742 "parser.yy"
     7496  case 470:
     7497
     7498/* Line 1806 of yacc.c  */
     7499#line 1745 "parser.yy"
    74407500    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    74417501    break;
    74427502
    7443   case 470:
    7444 
    7445 /* Line 1806 of yacc.c  */
    7446 #line 1744 "parser.yy"
     7503  case 471:
     7504
     7505/* Line 1806 of yacc.c  */
     7506#line 1747 "parser.yy"
    74477507    { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
    74487508    break;
    74497509
    7450   case 471:
    7451 
    7452 /* Line 1806 of yacc.c  */
    7453 #line 1746 "parser.yy"
     7510  case 472:
     7511
     7512/* Line 1806 of yacc.c  */
     7513#line 1749 "parser.yy"
    74547514    { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
    74557515    break;
    74567516
    7457   case 473:
    7458 
    7459 /* Line 1806 of yacc.c  */
    7460 #line 1770 "parser.yy"
     7517  case 474:
     7518
     7519/* Line 1806 of yacc.c  */
     7520#line 1773 "parser.yy"
    74617521    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    74627522    break;
    74637523
    7464   case 474:
    7465 
    7466 /* Line 1806 of yacc.c  */
    7467 #line 1772 "parser.yy"
     7524  case 475:
     7525
     7526/* Line 1806 of yacc.c  */
     7527#line 1775 "parser.yy"
    74687528    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    74697529    break;
    74707530
    7471   case 475:
    7472 
    7473 /* Line 1806 of yacc.c  */
    7474 #line 1774 "parser.yy"
     7531  case 476:
     7532
     7533/* Line 1806 of yacc.c  */
     7534#line 1777 "parser.yy"
    74757535    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    74767536    break;
    74777537
    7478   case 477:
    7479 
    7480 /* Line 1806 of yacc.c  */
    7481 #line 1780 "parser.yy"
     7538  case 478:
     7539
     7540/* Line 1806 of yacc.c  */
     7541#line 1783 "parser.yy"
    74827542    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    74837543    break;
    74847544
    7485   case 478:
    7486 
    7487 /* Line 1806 of yacc.c  */
    7488 #line 1782 "parser.yy"
     7545  case 479:
     7546
     7547/* Line 1806 of yacc.c  */
     7548#line 1785 "parser.yy"
    74897549    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    74907550    break;
    74917551
    7492   case 479:
    7493 
    7494 /* Line 1806 of yacc.c  */
    7495 #line 1787 "parser.yy"
     7552  case 480:
     7553
     7554/* Line 1806 of yacc.c  */
     7555#line 1790 "parser.yy"
    74967556    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    74977557    break;
    74987558
    7499   case 481:
    7500 
    7501 /* Line 1806 of yacc.c  */
    7502 #line 1793 "parser.yy"
     7559  case 482:
     7560
     7561/* Line 1806 of yacc.c  */
     7562#line 1796 "parser.yy"
    75037563    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    75047564    break;
    75057565
    7506   case 482:
    7507 
    7508 /* Line 1806 of yacc.c  */
    7509 #line 1798 "parser.yy"
     7566  case 483:
     7567
     7568/* Line 1806 of yacc.c  */
     7569#line 1801 "parser.yy"
    75107570    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    75117571    break;
    75127572
    7513   case 483:
    7514 
    7515 /* Line 1806 of yacc.c  */
    7516 #line 1800 "parser.yy"
     7573  case 484:
     7574
     7575/* Line 1806 of yacc.c  */
     7576#line 1803 "parser.yy"
    75177577    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
    75187578    break;
    75197579
    7520   case 485:
    7521 
    7522 /* Line 1806 of yacc.c  */
    7523 #line 1806 "parser.yy"
     7580  case 486:
     7581
     7582/* Line 1806 of yacc.c  */
     7583#line 1809 "parser.yy"
    75247584    { (yyval.tclass) = DeclarationNode::Type; }
    75257585    break;
    75267586
    7527   case 486:
    7528 
    7529 /* Line 1806 of yacc.c  */
    7530 #line 1808 "parser.yy"
     7587  case 487:
     7588
     7589/* Line 1806 of yacc.c  */
     7590#line 1811 "parser.yy"
    75317591    { (yyval.tclass) = DeclarationNode::Ftype; }
    75327592    break;
    75337593
    7534   case 487:
    7535 
    7536 /* Line 1806 of yacc.c  */
    7537 #line 1810 "parser.yy"
     7594  case 488:
     7595
     7596/* Line 1806 of yacc.c  */
     7597#line 1813 "parser.yy"
    75387598    { (yyval.tclass) = DeclarationNode::Dtype; }
    75397599    break;
    75407600
    7541   case 488:
    7542 
    7543 /* Line 1806 of yacc.c  */
    7544 #line 1815 "parser.yy"
     7601  case 489:
     7602
     7603/* Line 1806 of yacc.c  */
     7604#line 1818 "parser.yy"
    75457605    { (yyval.decl) = 0; }
    75467606    break;
    75477607
    7548   case 489:
    7549 
    7550 /* Line 1806 of yacc.c  */
    7551 #line 1817 "parser.yy"
     7608  case 490:
     7609
     7610/* Line 1806 of yacc.c  */
     7611#line 1820 "parser.yy"
    75527612    { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    75537613    break;
    75547614
    7555   case 490:
    7556 
    7557 /* Line 1806 of yacc.c  */
    7558 #line 1822 "parser.yy"
     7615  case 491:
     7616
     7617/* Line 1806 of yacc.c  */
     7618#line 1825 "parser.yy"
    75597619    {
    7560                         typedefTable.openContext( *(yyvsp[(2) - (5)].tok) );
    7561                         (yyval.decl) = DeclarationNode::newContextUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) );
     7620                        typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
     7621                        (yyval.decl) = DeclarationNode::newTraitUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) );
    75627622                }
    75637623    break;
    75647624
    7565   case 491:
    7566 
    7567 /* Line 1806 of yacc.c  */
    7568 #line 1827 "parser.yy"
     7625  case 492:
     7626
     7627/* Line 1806 of yacc.c  */
     7628#line 1830 "parser.yy"
    75697629    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
    75707630    break;
    75717631
    7572   case 492:
    7573 
    7574 /* Line 1806 of yacc.c  */
    7575 #line 1829 "parser.yy"
     7632  case 493:
     7633
     7634/* Line 1806 of yacc.c  */
     7635#line 1832 "parser.yy"
    75767636    { (yyval.decl) = 0; }
    75777637    break;
    75787638
    7579   case 493:
    7580 
    7581 /* Line 1806 of yacc.c  */
    7582 #line 1834 "parser.yy"
     7639  case 494:
     7640
     7641/* Line 1806 of yacc.c  */
     7642#line 1837 "parser.yy"
    75837643    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
    75847644    break;
    75857645
    7586   case 495:
    7587 
    7588 /* Line 1806 of yacc.c  */
    7589 #line 1837 "parser.yy"
     7646  case 496:
     7647
     7648/* Line 1806 of yacc.c  */
     7649#line 1840 "parser.yy"
    75907650    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
    75917651    break;
    75927652
    7593   case 496:
    7594 
    7595 /* Line 1806 of yacc.c  */
    7596 #line 1839 "parser.yy"
     7653  case 497:
     7654
     7655/* Line 1806 of yacc.c  */
     7656#line 1842 "parser.yy"
    75977657    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    75987658    break;
    75997659
    7600   case 497:
    7601 
    7602 /* Line 1806 of yacc.c  */
    7603 #line 1844 "parser.yy"
     7660  case 498:
     7661
     7662/* Line 1806 of yacc.c  */
     7663#line 1847 "parser.yy"
    76047664    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    76057665    break;
    76067666
    7607   case 498:
    7608 
    7609 /* Line 1806 of yacc.c  */
    7610 #line 1846 "parser.yy"
     7667  case 499:
     7668
     7669/* Line 1806 of yacc.c  */
     7670#line 1849 "parser.yy"
    76117671    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    76127672    break;
    76137673
    7614   case 499:
    7615 
    7616 /* Line 1806 of yacc.c  */
    7617 #line 1848 "parser.yy"
     7674  case 500:
     7675
     7676/* Line 1806 of yacc.c  */
     7677#line 1851 "parser.yy"
    76187678    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    76197679    break;
    76207680
    7621   case 500:
    7622 
    7623 /* Line 1806 of yacc.c  */
    7624 #line 1853 "parser.yy"
     7681  case 501:
     7682
     7683/* Line 1806 of yacc.c  */
     7684#line 1856 "parser.yy"
    76257685    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    76267686    break;
    76277687
    7628   case 501:
    7629 
    7630 /* Line 1806 of yacc.c  */
    7631 #line 1855 "parser.yy"
     7688  case 502:
     7689
     7690/* Line 1806 of yacc.c  */
     7691#line 1858 "parser.yy"
    76327692    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    76337693    break;
    76347694
    7635   case 502:
    7636 
    7637 /* Line 1806 of yacc.c  */
    7638 #line 1860 "parser.yy"
     7695  case 503:
     7696
     7697/* Line 1806 of yacc.c  */
     7698#line 1863 "parser.yy"
    76397699    {
    76407700                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    76437703    break;
    76447704
    7645   case 503:
    7646 
    7647 /* Line 1806 of yacc.c  */
    7648 #line 1865 "parser.yy"
     7705  case 504:
     7706
     7707/* Line 1806 of yacc.c  */
     7708#line 1868 "parser.yy"
    76497709    {
    76507710                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    76537713    break;
    76547714
    7655   case 504:
    7656 
    7657 /* Line 1806 of yacc.c  */
    7658 #line 1873 "parser.yy"
     7715  case 505:
     7716
     7717/* Line 1806 of yacc.c  */
     7718#line 1876 "parser.yy"
    76597719    {
    76607720                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
    7661                         (yyval.decl) = DeclarationNode::newContext( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );
     7721                        (yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );
    76627722                }
    76637723    break;
    76647724
    7665   case 505:
    7666 
    7667 /* Line 1806 of yacc.c  */
    7668 #line 1878 "parser.yy"
     7725  case 506:
     7726
     7727/* Line 1806 of yacc.c  */
     7728#line 1881 "parser.yy"
    76697729    {
    7670                         typedefTable.enterContext( *(yyvsp[(2) - (8)].tok) );
     7730                        typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
    76717731                        typedefTable.enterScope();
    76727732                }
    76737733    break;
    76747734
    7675   case 506:
    7676 
    7677 /* Line 1806 of yacc.c  */
    7678 #line 1883 "parser.yy"
     7735  case 507:
     7736
     7737/* Line 1806 of yacc.c  */
     7738#line 1886 "parser.yy"
    76797739    {
    7680                         typedefTable.leaveContext();
     7740                        typedefTable.leaveTrait();
    76817741                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (11)].tok), TypedefTable::ID );
    7682                         (yyval.decl) = DeclarationNode::newContext( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) );
     7742                        (yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) );
    76837743                }
    76847744    break;
    76857745
    7686   case 508:
    7687 
    7688 /* Line 1806 of yacc.c  */
    7689 #line 1893 "parser.yy"
     7746  case 509:
     7747
     7748/* Line 1806 of yacc.c  */
     7749#line 1896 "parser.yy"
    76907750    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    76917751    break;
    76927752
    7693   case 511:
    7694 
    7695 /* Line 1806 of yacc.c  */
    7696 #line 1903 "parser.yy"
     7753  case 512:
     7754
     7755/* Line 1806 of yacc.c  */
     7756#line 1906 "parser.yy"
    76977757    {
    76987758                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77017761    break;
    77027762
    7703   case 512:
    7704 
    7705 /* Line 1806 of yacc.c  */
    7706 #line 1908 "parser.yy"
     7763  case 513:
     7764
     7765/* Line 1806 of yacc.c  */
     7766#line 1911 "parser.yy"
    77077767    {
    77087768                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77117771    break;
    77127772
    7713   case 513:
    7714 
    7715 /* Line 1806 of yacc.c  */
    7716 #line 1913 "parser.yy"
     7773  case 514:
     7774
     7775/* Line 1806 of yacc.c  */
     7776#line 1916 "parser.yy"
    77177777    {
    77187778                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    77217781    break;
    77227782
    7723   case 514:
    7724 
    7725 /* Line 1806 of yacc.c  */
    7726 #line 1921 "parser.yy"
     7783  case 515:
     7784
     7785/* Line 1806 of yacc.c  */
     7786#line 1924 "parser.yy"
    77277787    {
    77287788                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77317791    break;
    77327792
    7733   case 515:
    7734 
    7735 /* Line 1806 of yacc.c  */
    7736 #line 1926 "parser.yy"
     7793  case 516:
     7794
     7795/* Line 1806 of yacc.c  */
     7796#line 1929 "parser.yy"
    77377797    {
    77387798                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77417801    break;
    77427802
    7743   case 516:
    7744 
    7745 /* Line 1806 of yacc.c  */
    7746 #line 1936 "parser.yy"
     7803  case 517:
     7804
     7805/* Line 1806 of yacc.c  */
     7806#line 1939 "parser.yy"
    77477807    {}
    77487808    break;
    77497809
    7750   case 517:
    7751 
    7752 /* Line 1806 of yacc.c  */
    7753 #line 1938 "parser.yy"
     7810  case 518:
     7811
     7812/* Line 1806 of yacc.c  */
     7813#line 1941 "parser.yy"
    77547814    {
    77557815                        if ( theTree ) {
     
    77617821    break;
    77627822
    7763   case 519:
    7764 
    7765 /* Line 1806 of yacc.c  */
    7766 #line 1950 "parser.yy"
     7823  case 520:
     7824
     7825/* Line 1806 of yacc.c  */
     7826#line 1953 "parser.yy"
    77677827    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    77687828    break;
    77697829
    7770   case 520:
    7771 
    7772 /* Line 1806 of yacc.c  */
    7773 #line 1955 "parser.yy"
     7830  case 521:
     7831
     7832/* Line 1806 of yacc.c  */
     7833#line 1958 "parser.yy"
    77747834    { (yyval.decl) = 0; }
    77757835    break;
    77767836
    7777   case 524:
    7778 
    7779 /* Line 1806 of yacc.c  */
    7780 #line 1963 "parser.yy"
     7837  case 525:
     7838
     7839/* Line 1806 of yacc.c  */
     7840#line 1966 "parser.yy"
    77817841    {}
    77827842    break;
    77837843
    7784   case 525:
    7785 
    7786 /* Line 1806 of yacc.c  */
    7787 #line 1965 "parser.yy"
     7844  case 526:
     7845
     7846/* Line 1806 of yacc.c  */
     7847#line 1968 "parser.yy"
    77887848    {
    77897849                        linkageStack.push( linkage );
     
    77927852    break;
    77937853
    7794   case 526:
    7795 
    7796 /* Line 1806 of yacc.c  */
    7797 #line 1970 "parser.yy"
     7854  case 527:
     7855
     7856/* Line 1806 of yacc.c  */
     7857#line 1973 "parser.yy"
    77987858    {
    77997859                        linkage = linkageStack.top();
     
    78037863    break;
    78047864
    7805   case 527:
    7806 
    7807 /* Line 1806 of yacc.c  */
    7808 #line 1976 "parser.yy"
     7865  case 528:
     7866
     7867/* Line 1806 of yacc.c  */
     7868#line 1979 "parser.yy"
    78097869    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    78107870    break;
    78117871
    7812   case 529:
    7813 
    7814 /* Line 1806 of yacc.c  */
    7815 #line 1986 "parser.yy"
     7872  case 530:
     7873
     7874/* Line 1806 of yacc.c  */
     7875#line 1989 "parser.yy"
    78167876    {
    78177877                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78217881    break;
    78227882
    7823   case 530:
    7824 
    7825 /* Line 1806 of yacc.c  */
    7826 #line 1992 "parser.yy"
     7883  case 531:
     7884
     7885/* Line 1806 of yacc.c  */
     7886#line 1995 "parser.yy"
    78277887    {
    78287888                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78327892    break;
    78337893
    7834   case 531:
    7835 
    7836 /* Line 1806 of yacc.c  */
    7837 #line 2001 "parser.yy"
     7894  case 532:
     7895
     7896/* Line 1806 of yacc.c  */
     7897#line 2004 "parser.yy"
    78387898    {
    78397899                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78437903    break;
    78447904
    7845   case 532:
    7846 
    7847 /* Line 1806 of yacc.c  */
    7848 #line 2007 "parser.yy"
     7905  case 533:
     7906
     7907/* Line 1806 of yacc.c  */
     7908#line 2010 "parser.yy"
    78497909    {
    78507910                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78547914    break;
    78557915
    7856   case 533:
    7857 
    7858 /* Line 1806 of yacc.c  */
    7859 #line 2013 "parser.yy"
     7916  case 534:
     7917
     7918/* Line 1806 of yacc.c  */
     7919#line 2016 "parser.yy"
    78607920    {
    78617921                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78657925    break;
    78667926
    7867   case 534:
    7868 
    7869 /* Line 1806 of yacc.c  */
    7870 #line 2019 "parser.yy"
     7927  case 535:
     7928
     7929/* Line 1806 of yacc.c  */
     7930#line 2022 "parser.yy"
    78717931    {
    78727932                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78767936    break;
    78777937
    7878   case 535:
    7879 
    7880 /* Line 1806 of yacc.c  */
    7881 #line 2025 "parser.yy"
     7938  case 536:
     7939
     7940/* Line 1806 of yacc.c  */
     7941#line 2028 "parser.yy"
    78827942    {
    78837943                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78877947    break;
    78887948
    7889   case 536:
    7890 
    7891 /* Line 1806 of yacc.c  */
    7892 #line 2033 "parser.yy"
     7949  case 537:
     7950
     7951/* Line 1806 of yacc.c  */
     7952#line 2036 "parser.yy"
    78937953    {
    78947954                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78987958    break;
    78997959
    7900   case 537:
    7901 
    7902 /* Line 1806 of yacc.c  */
    7903 #line 2039 "parser.yy"
     7960  case 538:
     7961
     7962/* Line 1806 of yacc.c  */
     7963#line 2042 "parser.yy"
    79047964    {
    79057965                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79097969    break;
    79107970
    7911   case 538:
    7912 
    7913 /* Line 1806 of yacc.c  */
    7914 #line 2047 "parser.yy"
     7971  case 539:
     7972
     7973/* Line 1806 of yacc.c  */
     7974#line 2050 "parser.yy"
    79157975    {
    79167976                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79207980    break;
    79217981
    7922   case 539:
    7923 
    7924 /* Line 1806 of yacc.c  */
    7925 #line 2053 "parser.yy"
     7982  case 540:
     7983
     7984/* Line 1806 of yacc.c  */
     7985#line 2056 "parser.yy"
    79267986    {
    79277987                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79317991    break;
    79327992
    7933   case 543:
    7934 
    7935 /* Line 1806 of yacc.c  */
    7936 #line 2068 "parser.yy"
     7993  case 544:
     7994
     7995/* Line 1806 of yacc.c  */
     7996#line 2071 "parser.yy"
    79377997    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    79387998    break;
    79397999
    7940   case 546:
    7941 
    7942 /* Line 1806 of yacc.c  */
    7943 #line 2078 "parser.yy"
     8000  case 547:
     8001
     8002/* Line 1806 of yacc.c  */
     8003#line 2081 "parser.yy"
    79448004    { (yyval.decl) = 0; }
    79458005    break;
    79468006
    7947   case 549:
    7948 
    7949 /* Line 1806 of yacc.c  */
    7950 #line 2085 "parser.yy"
     8007  case 550:
     8008
     8009/* Line 1806 of yacc.c  */
     8010#line 2088 "parser.yy"
    79518011    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    79528012    break;
    79538013
    7954   case 550:
    7955 
    7956 /* Line 1806 of yacc.c  */
    7957 #line 2091 "parser.yy"
     8014  case 551:
     8015
     8016/* Line 1806 of yacc.c  */
     8017#line 2094 "parser.yy"
    79588018    { (yyval.decl) = 0; }
    79598019    break;
    79608020
    7961   case 556:
    7962 
    7963 /* Line 1806 of yacc.c  */
    7964 #line 2106 "parser.yy"
    7965     {}
    7966     break;
    7967 
    79688021  case 557:
    7969 
    7970 /* Line 1806 of yacc.c  */
    7971 #line 2107 "parser.yy"
    7972     {}
    7973     break;
    7974 
    7975   case 558:
    7976 
    7977 /* Line 1806 of yacc.c  */
    7978 #line 2108 "parser.yy"
    7979     {}
    7980     break;
    7981 
    7982   case 559:
    79838022
    79848023/* Line 1806 of yacc.c  */
     
    79878026    break;
    79888027
     8028  case 558:
     8029
     8030/* Line 1806 of yacc.c  */
     8031#line 2110 "parser.yy"
     8032    {}
     8033    break;
     8034
     8035  case 559:
     8036
     8037/* Line 1806 of yacc.c  */
     8038#line 2111 "parser.yy"
     8039    {}
     8040    break;
     8041
    79898042  case 560:
    79908043
    79918044/* Line 1806 of yacc.c  */
    7992 #line 2144 "parser.yy"
    7993     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7994     break;
    7995 
    7996   case 562:
     8045#line 2112 "parser.yy"
     8046    {}
     8047    break;
     8048
     8049  case 561:
    79978050
    79988051/* Line 1806 of yacc.c  */
     
    80048057
    80058058/* Line 1806 of yacc.c  */
    8006 #line 2149 "parser.yy"
     8059#line 2150 "parser.yy"
    80078060    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80088061    break;
     
    80118064
    80128065/* Line 1806 of yacc.c  */
    8013 #line 2154 "parser.yy"
     8066#line 2152 "parser.yy"
     8067    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8068    break;
     8069
     8070  case 565:
     8071
     8072/* Line 1806 of yacc.c  */
     8073#line 2157 "parser.yy"
    80148074    {
    80158075                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    80188078    break;
    80198079
    8020   case 565:
    8021 
    8022 /* Line 1806 of yacc.c  */
    8023 #line 2159 "parser.yy"
     8080  case 566:
     8081
     8082/* Line 1806 of yacc.c  */
     8083#line 2162 "parser.yy"
    80248084    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80258085    break;
    80268086
    8027   case 566:
    8028 
    8029 /* Line 1806 of yacc.c  */
    8030 #line 2164 "parser.yy"
     8087  case 567:
     8088
     8089/* Line 1806 of yacc.c  */
     8090#line 2167 "parser.yy"
    80318091    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    80328092    break;
    80338093
    8034   case 567:
    8035 
    8036 /* Line 1806 of yacc.c  */
    8037 #line 2166 "parser.yy"
     8094  case 568:
     8095
     8096/* Line 1806 of yacc.c  */
     8097#line 2169 "parser.yy"
    80388098    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    80398099    break;
    80408100
    8041   case 568:
    8042 
    8043 /* Line 1806 of yacc.c  */
    8044 #line 2168 "parser.yy"
     8101  case 569:
     8102
     8103/* Line 1806 of yacc.c  */
     8104#line 2171 "parser.yy"
    80458105    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80468106    break;
    80478107
    8048   case 569:
    8049 
    8050 /* Line 1806 of yacc.c  */
    8051 #line 2173 "parser.yy"
     8108  case 570:
     8109
     8110/* Line 1806 of yacc.c  */
     8111#line 2176 "parser.yy"
    80528112    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    80538113    break;
    80548114
    8055   case 570:
    8056 
    8057 /* Line 1806 of yacc.c  */
    8058 #line 2175 "parser.yy"
     8115  case 571:
     8116
     8117/* Line 1806 of yacc.c  */
     8118#line 2178 "parser.yy"
    80598119    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    80608120    break;
    80618121
    8062   case 571:
    8063 
    8064 /* Line 1806 of yacc.c  */
    8065 #line 2177 "parser.yy"
     8122  case 572:
     8123
     8124/* Line 1806 of yacc.c  */
     8125#line 2180 "parser.yy"
    80668126    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    80678127    break;
    80688128
    8069   case 572:
    8070 
    8071 /* Line 1806 of yacc.c  */
    8072 #line 2179 "parser.yy"
     8129  case 573:
     8130
     8131/* Line 1806 of yacc.c  */
     8132#line 2182 "parser.yy"
    80738133    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80748134    break;
    80758135
    8076   case 573:
    8077 
    8078 /* Line 1806 of yacc.c  */
    8079 #line 2184 "parser.yy"
     8136  case 574:
     8137
     8138/* Line 1806 of yacc.c  */
     8139#line 2187 "parser.yy"
    80808140    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    80818141    break;
    80828142
    8083   case 574:
    8084 
    8085 /* Line 1806 of yacc.c  */
    8086 #line 2186 "parser.yy"
     8143  case 575:
     8144
     8145/* Line 1806 of yacc.c  */
     8146#line 2189 "parser.yy"
    80878147    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80888148    break;
    80898149
    8090   case 575:
    8091 
    8092 /* Line 1806 of yacc.c  */
    8093 #line 2196 "parser.yy"
    8094     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8095     break;
    8096 
    8097   case 577:
     8150  case 576:
    80988151
    80998152/* Line 1806 of yacc.c  */
     
    81058158
    81068159/* Line 1806 of yacc.c  */
    8107 #line 2204 "parser.yy"
     8160#line 2202 "parser.yy"
     8161    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8162    break;
     8163
     8164  case 579:
     8165
     8166/* Line 1806 of yacc.c  */
     8167#line 2207 "parser.yy"
    81088168    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    81098169    break;
    81108170
    8111   case 579:
    8112 
    8113 /* Line 1806 of yacc.c  */
    8114 #line 2206 "parser.yy"
     8171  case 580:
     8172
     8173/* Line 1806 of yacc.c  */
     8174#line 2209 "parser.yy"
    81158175    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81168176    break;
    81178177
    8118   case 580:
    8119 
    8120 /* Line 1806 of yacc.c  */
    8121 #line 2208 "parser.yy"
     8178  case 581:
     8179
     8180/* Line 1806 of yacc.c  */
     8181#line 2211 "parser.yy"
    81228182    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81238183    break;
    81248184
    8125   case 581:
    8126 
    8127 /* Line 1806 of yacc.c  */
    8128 #line 2213 "parser.yy"
     8185  case 582:
     8186
     8187/* Line 1806 of yacc.c  */
     8188#line 2216 "parser.yy"
    81298189    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    81308190    break;
    81318191
    8132   case 582:
    8133 
    8134 /* Line 1806 of yacc.c  */
    8135 #line 2215 "parser.yy"
     8192  case 583:
     8193
     8194/* Line 1806 of yacc.c  */
     8195#line 2218 "parser.yy"
    81368196    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    81378197    break;
    81388198
    8139   case 583:
    8140 
    8141 /* Line 1806 of yacc.c  */
    8142 #line 2217 "parser.yy"
     8199  case 584:
     8200
     8201/* Line 1806 of yacc.c  */
     8202#line 2220 "parser.yy"
    81438203    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81448204    break;
    81458205
    8146   case 584:
    8147 
    8148 /* Line 1806 of yacc.c  */
    8149 #line 2222 "parser.yy"
     8206  case 585:
     8207
     8208/* Line 1806 of yacc.c  */
     8209#line 2225 "parser.yy"
    81508210    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81518211    break;
    81528212
    8153   case 585:
    8154 
    8155 /* Line 1806 of yacc.c  */
    8156 #line 2224 "parser.yy"
     8213  case 586:
     8214
     8215/* Line 1806 of yacc.c  */
     8216#line 2227 "parser.yy"
    81578217    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81588218    break;
    81598219
    8160   case 586:
    8161 
    8162 /* Line 1806 of yacc.c  */
    8163 #line 2226 "parser.yy"
     8220  case 587:
     8221
     8222/* Line 1806 of yacc.c  */
     8223#line 2229 "parser.yy"
    81648224    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81658225    break;
    81668226
    8167   case 590:
    8168 
    8169 /* Line 1806 of yacc.c  */
    8170 #line 2241 "parser.yy"
     8227  case 591:
     8228
     8229/* Line 1806 of yacc.c  */
     8230#line 2244 "parser.yy"
    81718231    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    81728232    break;
    81738233
    8174   case 591:
    8175 
    8176 /* Line 1806 of yacc.c  */
    8177 #line 2243 "parser.yy"
     8234  case 592:
     8235
     8236/* Line 1806 of yacc.c  */
     8237#line 2246 "parser.yy"
    81788238    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    81798239    break;
    81808240
    8181   case 592:
    8182 
    8183 /* Line 1806 of yacc.c  */
    8184 #line 2245 "parser.yy"
     8241  case 593:
     8242
     8243/* Line 1806 of yacc.c  */
     8244#line 2248 "parser.yy"
    81858245    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81868246    break;
    81878247
    8188   case 593:
    8189 
    8190 /* Line 1806 of yacc.c  */
    8191 #line 2250 "parser.yy"
     8248  case 594:
     8249
     8250/* Line 1806 of yacc.c  */
     8251#line 2253 "parser.yy"
    81928252    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    81938253    break;
    81948254
    8195   case 594:
    8196 
    8197 /* Line 1806 of yacc.c  */
    8198 #line 2252 "parser.yy"
     8255  case 595:
     8256
     8257/* Line 1806 of yacc.c  */
     8258#line 2255 "parser.yy"
    81998259    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    82008260    break;
    82018261
    8202   case 595:
    8203 
    8204 /* Line 1806 of yacc.c  */
    8205 #line 2254 "parser.yy"
     8262  case 596:
     8263
     8264/* Line 1806 of yacc.c  */
     8265#line 2257 "parser.yy"
    82068266    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82078267    break;
    82088268
    8209   case 596:
    8210 
    8211 /* Line 1806 of yacc.c  */
    8212 #line 2259 "parser.yy"
     8269  case 597:
     8270
     8271/* Line 1806 of yacc.c  */
     8272#line 2262 "parser.yy"
    82138273    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82148274    break;
    82158275
    8216   case 597:
    8217 
    8218 /* Line 1806 of yacc.c  */
    8219 #line 2261 "parser.yy"
     8276  case 598:
     8277
     8278/* Line 1806 of yacc.c  */
     8279#line 2264 "parser.yy"
    82208280    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82218281    break;
    82228282
    8223   case 598:
    8224 
    8225 /* Line 1806 of yacc.c  */
    8226 #line 2263 "parser.yy"
     8283  case 599:
     8284
     8285/* Line 1806 of yacc.c  */
     8286#line 2266 "parser.yy"
    82278287    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82288288    break;
    82298289
    8230   case 599:
    8231 
    8232 /* Line 1806 of yacc.c  */
    8233 #line 2278 "parser.yy"
    8234     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8235     break;
    8236 
    8237   case 601:
     8290  case 600:
    82388291
    82398292/* Line 1806 of yacc.c  */
     
    82458298
    82468299/* Line 1806 of yacc.c  */
    8247 #line 2283 "parser.yy"
     8300#line 2284 "parser.yy"
    82488301    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82498302    break;
    82508303
    8251   case 604:
    8252 
    8253 /* Line 1806 of yacc.c  */
    8254 #line 2289 "parser.yy"
     8304  case 603:
     8305
     8306/* Line 1806 of yacc.c  */
     8307#line 2286 "parser.yy"
     8308    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8309    break;
     8310
     8311  case 605:
     8312
     8313/* Line 1806 of yacc.c  */
     8314#line 2292 "parser.yy"
    82558315    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82568316    break;
    82578317
    8258   case 605:
    8259 
    8260 /* Line 1806 of yacc.c  */
    8261 #line 2294 "parser.yy"
     8318  case 606:
     8319
     8320/* Line 1806 of yacc.c  */
     8321#line 2297 "parser.yy"
    82628322    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    82638323    break;
    82648324
    8265   case 606:
    8266 
    8267 /* Line 1806 of yacc.c  */
    8268 #line 2296 "parser.yy"
     8325  case 607:
     8326
     8327/* Line 1806 of yacc.c  */
     8328#line 2299 "parser.yy"
    82698329    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    82708330    break;
    82718331
    8272   case 607:
    8273 
    8274 /* Line 1806 of yacc.c  */
    8275 #line 2298 "parser.yy"
     8332  case 608:
     8333
     8334/* Line 1806 of yacc.c  */
     8335#line 2301 "parser.yy"
    82768336    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82778337    break;
    82788338
    8279   case 608:
    8280 
    8281 /* Line 1806 of yacc.c  */
    8282 #line 2303 "parser.yy"
     8339  case 609:
     8340
     8341/* Line 1806 of yacc.c  */
     8342#line 2306 "parser.yy"
    82838343    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    82848344    break;
    82858345
    8286   case 609:
    8287 
    8288 /* Line 1806 of yacc.c  */
    8289 #line 2305 "parser.yy"
     8346  case 610:
     8347
     8348/* Line 1806 of yacc.c  */
     8349#line 2308 "parser.yy"
    82908350    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82918351    break;
    82928352
    8293   case 610:
    8294 
    8295 /* Line 1806 of yacc.c  */
    8296 #line 2307 "parser.yy"
     8353  case 611:
     8354
     8355/* Line 1806 of yacc.c  */
     8356#line 2310 "parser.yy"
    82978357    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82988358    break;
    82998359
    8300   case 611:
    8301 
    8302 /* Line 1806 of yacc.c  */
    8303 #line 2309 "parser.yy"
     8360  case 612:
     8361
     8362/* Line 1806 of yacc.c  */
     8363#line 2312 "parser.yy"
    83048364    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83058365    break;
    83068366
    8307   case 612:
    8308 
    8309 /* Line 1806 of yacc.c  */
    8310 #line 2314 "parser.yy"
     8367  case 613:
     8368
     8369/* Line 1806 of yacc.c  */
     8370#line 2317 "parser.yy"
    83118371    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    83128372    break;
    83138373
    8314   case 613:
    8315 
    8316 /* Line 1806 of yacc.c  */
    8317 #line 2316 "parser.yy"
     8374  case 614:
     8375
     8376/* Line 1806 of yacc.c  */
     8377#line 2319 "parser.yy"
    83188378    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83198379    break;
    83208380
    8321   case 614:
    8322 
    8323 /* Line 1806 of yacc.c  */
    8324 #line 2318 "parser.yy"
     8381  case 615:
     8382
     8383/* Line 1806 of yacc.c  */
     8384#line 2321 "parser.yy"
    83258385    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83268386    break;
    83278387
    8328   case 615:
    8329 
    8330 /* Line 1806 of yacc.c  */
    8331 #line 2328 "parser.yy"
    8332     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8333     break;
    8334 
    8335   case 617:
     8388  case 616:
    83368389
    83378390/* Line 1806 of yacc.c  */
     
    83438396
    83448397/* Line 1806 of yacc.c  */
    8345 #line 2333 "parser.yy"
     8398#line 2334 "parser.yy"
    83468399    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83478400    break;
     
    83508403
    83518404/* Line 1806 of yacc.c  */
    8352 #line 2338 "parser.yy"
     8405#line 2336 "parser.yy"
     8406    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8407    break;
     8408
     8409  case 620:
     8410
     8411/* Line 1806 of yacc.c  */
     8412#line 2341 "parser.yy"
    83538413    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    83548414    break;
    83558415
    8356   case 620:
    8357 
    8358 /* Line 1806 of yacc.c  */
    8359 #line 2340 "parser.yy"
     8416  case 621:
     8417
     8418/* Line 1806 of yacc.c  */
     8419#line 2343 "parser.yy"
    83608420    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    83618421    break;
    83628422
    8363   case 621:
    8364 
    8365 /* Line 1806 of yacc.c  */
    8366 #line 2342 "parser.yy"
     8423  case 622:
     8424
     8425/* Line 1806 of yacc.c  */
     8426#line 2345 "parser.yy"
    83678427    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83688428    break;
    83698429
    8370   case 622:
    8371 
    8372 /* Line 1806 of yacc.c  */
    8373 #line 2347 "parser.yy"
     8430  case 623:
     8431
     8432/* Line 1806 of yacc.c  */
     8433#line 2350 "parser.yy"
    83748434    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    83758435    break;
    83768436
    8377   case 623:
    8378 
    8379 /* Line 1806 of yacc.c  */
    8380 #line 2349 "parser.yy"
     8437  case 624:
     8438
     8439/* Line 1806 of yacc.c  */
     8440#line 2352 "parser.yy"
    83818441    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83828442    break;
    83838443
    8384   case 624:
    8385 
    8386 /* Line 1806 of yacc.c  */
    8387 #line 2351 "parser.yy"
     8444  case 625:
     8445
     8446/* Line 1806 of yacc.c  */
     8447#line 2354 "parser.yy"
    83888448    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83898449    break;
    83908450
    8391   case 625:
    8392 
    8393 /* Line 1806 of yacc.c  */
    8394 #line 2353 "parser.yy"
     8451  case 626:
     8452
     8453/* Line 1806 of yacc.c  */
     8454#line 2356 "parser.yy"
    83958455    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83968456    break;
    83978457
    8398   case 626:
    8399 
    8400 /* Line 1806 of yacc.c  */
    8401 #line 2358 "parser.yy"
     8458  case 627:
     8459
     8460/* Line 1806 of yacc.c  */
     8461#line 2361 "parser.yy"
    84028462    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    84038463    break;
    84048464
    8405   case 627:
    8406 
    8407 /* Line 1806 of yacc.c  */
    8408 #line 2360 "parser.yy"
     8465  case 628:
     8466
     8467/* Line 1806 of yacc.c  */
     8468#line 2363 "parser.yy"
    84098469    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    84108470    break;
    84118471
    8412   case 628:
    8413 
    8414 /* Line 1806 of yacc.c  */
    8415 #line 2362 "parser.yy"
     8472  case 629:
     8473
     8474/* Line 1806 of yacc.c  */
     8475#line 2365 "parser.yy"
    84168476    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84178477    break;
    84188478
    8419   case 629:
    8420 
    8421 /* Line 1806 of yacc.c  */
    8422 #line 2393 "parser.yy"
    8423     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8424     break;
    8425 
    8426   case 631:
     8479  case 630:
    84278480
    84288481/* Line 1806 of yacc.c  */
     
    84348487
    84358488/* Line 1806 of yacc.c  */
    8436 #line 2398 "parser.yy"
     8489#line 2399 "parser.yy"
    84378490    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84388491    break;
     
    84418494
    84428495/* Line 1806 of yacc.c  */
    8443 #line 2403 "parser.yy"
     8496#line 2401 "parser.yy"
     8497    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8498    break;
     8499
     8500  case 634:
     8501
     8502/* Line 1806 of yacc.c  */
     8503#line 2406 "parser.yy"
    84448504    {
    84458505                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    84488508    break;
    84498509
    8450   case 634:
    8451 
    8452 /* Line 1806 of yacc.c  */
    8453 #line 2408 "parser.yy"
     8510  case 635:
     8511
     8512/* Line 1806 of yacc.c  */
     8513#line 2411 "parser.yy"
    84548514    {
    84558515                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    84588518    break;
    84598519
    8460   case 635:
    8461 
    8462 /* Line 1806 of yacc.c  */
    8463 #line 2416 "parser.yy"
     8520  case 636:
     8521
     8522/* Line 1806 of yacc.c  */
     8523#line 2419 "parser.yy"
    84648524    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    84658525    break;
    84668526
    8467   case 636:
    8468 
    8469 /* Line 1806 of yacc.c  */
    8470 #line 2418 "parser.yy"
     8527  case 637:
     8528
     8529/* Line 1806 of yacc.c  */
     8530#line 2421 "parser.yy"
    84718531    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    84728532    break;
    84738533
    8474   case 637:
    8475 
    8476 /* Line 1806 of yacc.c  */
    8477 #line 2420 "parser.yy"
     8534  case 638:
     8535
     8536/* Line 1806 of yacc.c  */
     8537#line 2423 "parser.yy"
    84788538    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84798539    break;
    84808540
    8481   case 638:
    8482 
    8483 /* Line 1806 of yacc.c  */
    8484 #line 2425 "parser.yy"
     8541  case 639:
     8542
     8543/* Line 1806 of yacc.c  */
     8544#line 2428 "parser.yy"
    84858545    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    84868546    break;
    84878547
    8488   case 639:
    8489 
    8490 /* Line 1806 of yacc.c  */
    8491 #line 2427 "parser.yy"
     8548  case 640:
     8549
     8550/* Line 1806 of yacc.c  */
     8551#line 2430 "parser.yy"
    84928552    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84938553    break;
    84948554
    8495   case 640:
    8496 
    8497 /* Line 1806 of yacc.c  */
    8498 #line 2432 "parser.yy"
     8555  case 641:
     8556
     8557/* Line 1806 of yacc.c  */
     8558#line 2435 "parser.yy"
    84998559    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    85008560    break;
    85018561
    8502   case 641:
    8503 
    8504 /* Line 1806 of yacc.c  */
    8505 #line 2434 "parser.yy"
     8562  case 642:
     8563
     8564/* Line 1806 of yacc.c  */
     8565#line 2437 "parser.yy"
    85068566    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    85078567    break;
    85088568
    8509   case 643:
    8510 
    8511 /* Line 1806 of yacc.c  */
    8512 #line 2449 "parser.yy"
     8569  case 644:
     8570
     8571/* Line 1806 of yacc.c  */
     8572#line 2452 "parser.yy"
    85138573    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85148574    break;
    85158575
    8516   case 644:
    8517 
    8518 /* Line 1806 of yacc.c  */
    8519 #line 2451 "parser.yy"
     8576  case 645:
     8577
     8578/* Line 1806 of yacc.c  */
     8579#line 2454 "parser.yy"
    85208580    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85218581    break;
    85228582
    8523   case 645:
    8524 
    8525 /* Line 1806 of yacc.c  */
    8526 #line 2456 "parser.yy"
     8583  case 646:
     8584
     8585/* Line 1806 of yacc.c  */
     8586#line 2459 "parser.yy"
    85278587    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    85288588    break;
    85298589
    8530   case 646:
    8531 
    8532 /* Line 1806 of yacc.c  */
    8533 #line 2458 "parser.yy"
     8590  case 647:
     8591
     8592/* Line 1806 of yacc.c  */
     8593#line 2461 "parser.yy"
    85348594    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    85358595    break;
    85368596
    8537   case 647:
    8538 
    8539 /* Line 1806 of yacc.c  */
    8540 #line 2460 "parser.yy"
     8597  case 648:
     8598
     8599/* Line 1806 of yacc.c  */
     8600#line 2463 "parser.yy"
    85418601    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    85428602    break;
    85438603
    8544   case 648:
    8545 
    8546 /* Line 1806 of yacc.c  */
    8547 #line 2462 "parser.yy"
     8604  case 649:
     8605
     8606/* Line 1806 of yacc.c  */
     8607#line 2465 "parser.yy"
    85488608    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    85498609    break;
    85508610
    8551   case 649:
    8552 
    8553 /* Line 1806 of yacc.c  */
    8554 #line 2464 "parser.yy"
     8611  case 650:
     8612
     8613/* Line 1806 of yacc.c  */
     8614#line 2467 "parser.yy"
    85558615    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85568616    break;
    85578617
    8558   case 651:
    8559 
    8560 /* Line 1806 of yacc.c  */
    8561 #line 2470 "parser.yy"
     8618  case 652:
     8619
     8620/* Line 1806 of yacc.c  */
     8621#line 2473 "parser.yy"
    85628622    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85638623    break;
    85648624
    8565   case 652:
    8566 
    8567 /* Line 1806 of yacc.c  */
    8568 #line 2472 "parser.yy"
     8625  case 653:
     8626
     8627/* Line 1806 of yacc.c  */
     8628#line 2475 "parser.yy"
    85698629    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85708630    break;
    85718631
    8572   case 653:
    8573 
    8574 /* Line 1806 of yacc.c  */
    8575 #line 2474 "parser.yy"
     8632  case 654:
     8633
     8634/* Line 1806 of yacc.c  */
     8635#line 2477 "parser.yy"
    85768636    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85778637    break;
    85788638
    8579   case 654:
    8580 
    8581 /* Line 1806 of yacc.c  */
    8582 #line 2479 "parser.yy"
     8639  case 655:
     8640
     8641/* Line 1806 of yacc.c  */
     8642#line 2482 "parser.yy"
    85838643    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    85848644    break;
    85858645
    8586   case 655:
    8587 
    8588 /* Line 1806 of yacc.c  */
    8589 #line 2481 "parser.yy"
     8646  case 656:
     8647
     8648/* Line 1806 of yacc.c  */
     8649#line 2484 "parser.yy"
    85908650    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    85918651    break;
    85928652
    8593   case 656:
    8594 
    8595 /* Line 1806 of yacc.c  */
    8596 #line 2483 "parser.yy"
     8653  case 657:
     8654
     8655/* Line 1806 of yacc.c  */
     8656#line 2486 "parser.yy"
    85978657    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85988658    break;
    85998659
    8600   case 657:
    8601 
    8602 /* Line 1806 of yacc.c  */
    8603 #line 2489 "parser.yy"
     8660  case 658:
     8661
     8662/* Line 1806 of yacc.c  */
     8663#line 2492 "parser.yy"
    86048664    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    86058665    break;
    86068666
    8607   case 658:
    8608 
    8609 /* Line 1806 of yacc.c  */
    8610 #line 2491 "parser.yy"
     8667  case 659:
     8668
     8669/* Line 1806 of yacc.c  */
     8670#line 2494 "parser.yy"
    86118671    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    86128672    break;
    86138673
    8614   case 660:
    8615 
    8616 /* Line 1806 of yacc.c  */
    8617 #line 2497 "parser.yy"
     8674  case 661:
     8675
     8676/* Line 1806 of yacc.c  */
     8677#line 2500 "parser.yy"
    86188678    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    86198679    break;
    86208680
    8621   case 661:
    8622 
    8623 /* Line 1806 of yacc.c  */
    8624 #line 2499 "parser.yy"
     8681  case 662:
     8682
     8683/* Line 1806 of yacc.c  */
     8684#line 2502 "parser.yy"
    86258685    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    86268686    break;
    86278687
    8628   case 662:
    8629 
    8630 /* Line 1806 of yacc.c  */
    8631 #line 2501 "parser.yy"
     8688  case 663:
     8689
     8690/* Line 1806 of yacc.c  */
     8691#line 2504 "parser.yy"
    86328692    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    86338693    break;
    86348694
    8635   case 663:
    8636 
    8637 /* Line 1806 of yacc.c  */
    8638 #line 2503 "parser.yy"
     8695  case 664:
     8696
     8697/* Line 1806 of yacc.c  */
     8698#line 2506 "parser.yy"
    86398699    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    86408700    break;
    86418701
    8642   case 665:
    8643 
    8644 /* Line 1806 of yacc.c  */
    8645 #line 2518 "parser.yy"
     8702  case 666:
     8703
     8704/* Line 1806 of yacc.c  */
     8705#line 2521 "parser.yy"
    86468706    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    86478707    break;
    86488708
    8649   case 666:
    8650 
    8651 /* Line 1806 of yacc.c  */
    8652 #line 2520 "parser.yy"
     8709  case 667:
     8710
     8711/* Line 1806 of yacc.c  */
     8712#line 2523 "parser.yy"
    86538713    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    86548714    break;
    86558715
    8656   case 667:
    8657 
    8658 /* Line 1806 of yacc.c  */
    8659 #line 2525 "parser.yy"
     8716  case 668:
     8717
     8718/* Line 1806 of yacc.c  */
     8719#line 2528 "parser.yy"
    86608720    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    86618721    break;
    86628722
    8663   case 668:
    8664 
    8665 /* Line 1806 of yacc.c  */
    8666 #line 2527 "parser.yy"
     8723  case 669:
     8724
     8725/* Line 1806 of yacc.c  */
     8726#line 2530 "parser.yy"
    86678727    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    86688728    break;
    86698729
    8670   case 669:
    8671 
    8672 /* Line 1806 of yacc.c  */
    8673 #line 2529 "parser.yy"
     8730  case 670:
     8731
     8732/* Line 1806 of yacc.c  */
     8733#line 2532 "parser.yy"
    86748734    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    86758735    break;
    86768736
    8677   case 670:
    8678 
    8679 /* Line 1806 of yacc.c  */
    8680 #line 2531 "parser.yy"
     8737  case 671:
     8738
     8739/* Line 1806 of yacc.c  */
     8740#line 2534 "parser.yy"
    86818741    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    86828742    break;
    86838743
    8684   case 671:
    8685 
    8686 /* Line 1806 of yacc.c  */
    8687 #line 2533 "parser.yy"
     8744  case 672:
     8745
     8746/* Line 1806 of yacc.c  */
     8747#line 2536 "parser.yy"
    86888748    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86898749    break;
    86908750
    8691   case 673:
    8692 
    8693 /* Line 1806 of yacc.c  */
    8694 #line 2539 "parser.yy"
     8751  case 674:
     8752
     8753/* Line 1806 of yacc.c  */
     8754#line 2542 "parser.yy"
    86958755    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86968756    break;
    86978757
    8698   case 674:
    8699 
    8700 /* Line 1806 of yacc.c  */
    8701 #line 2541 "parser.yy"
     8758  case 675:
     8759
     8760/* Line 1806 of yacc.c  */
     8761#line 2544 "parser.yy"
    87028762    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    87038763    break;
    87048764
    8705   case 675:
    8706 
    8707 /* Line 1806 of yacc.c  */
    8708 #line 2543 "parser.yy"
     8765  case 676:
     8766
     8767/* Line 1806 of yacc.c  */
     8768#line 2546 "parser.yy"
    87098769    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87108770    break;
    87118771
    8712   case 676:
    8713 
    8714 /* Line 1806 of yacc.c  */
    8715 #line 2548 "parser.yy"
     8772  case 677:
     8773
     8774/* Line 1806 of yacc.c  */
     8775#line 2551 "parser.yy"
    87168776    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    87178777    break;
    87188778
    8719   case 677:
    8720 
    8721 /* Line 1806 of yacc.c  */
    8722 #line 2550 "parser.yy"
     8779  case 678:
     8780
     8781/* Line 1806 of yacc.c  */
     8782#line 2553 "parser.yy"
    87238783    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    87248784    break;
    87258785
    8726   case 678:
    8727 
    8728 /* Line 1806 of yacc.c  */
    8729 #line 2552 "parser.yy"
     8786  case 679:
     8787
     8788/* Line 1806 of yacc.c  */
     8789#line 2555 "parser.yy"
    87308790    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87318791    break;
    87328792
    8733   case 680:
    8734 
    8735 /* Line 1806 of yacc.c  */
    8736 #line 2559 "parser.yy"
     8793  case 681:
     8794
     8795/* Line 1806 of yacc.c  */
     8796#line 2562 "parser.yy"
    87378797    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    87388798    break;
    87398799
    8740   case 682:
    8741 
    8742 /* Line 1806 of yacc.c  */
    8743 #line 2570 "parser.yy"
     8800  case 683:
     8801
     8802/* Line 1806 of yacc.c  */
     8803#line 2573 "parser.yy"
    87448804    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    87458805    break;
    87468806
    8747   case 683:
    8748 
    8749 /* Line 1806 of yacc.c  */
    8750 #line 2573 "parser.yy"
     8807  case 684:
     8808
     8809/* Line 1806 of yacc.c  */
     8810#line 2576 "parser.yy"
    87518811    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    87528812    break;
    87538813
    8754   case 684:
    8755 
    8756 /* Line 1806 of yacc.c  */
    8757 #line 2575 "parser.yy"
     8814  case 685:
     8815
     8816/* Line 1806 of yacc.c  */
     8817#line 2578 "parser.yy"
    87588818    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    87598819    break;
    87608820
    8761   case 685:
    8762 
    8763 /* Line 1806 of yacc.c  */
    8764 #line 2578 "parser.yy"
     8821  case 686:
     8822
     8823/* Line 1806 of yacc.c  */
     8824#line 2581 "parser.yy"
    87658825    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    87668826    break;
    87678827
    8768   case 686:
    8769 
    8770 /* Line 1806 of yacc.c  */
    8771 #line 2580 "parser.yy"
     8828  case 687:
     8829
     8830/* Line 1806 of yacc.c  */
     8831#line 2583 "parser.yy"
    87728832    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    87738833    break;
    87748834
    8775   case 687:
    8776 
    8777 /* Line 1806 of yacc.c  */
    8778 #line 2582 "parser.yy"
     8835  case 688:
     8836
     8837/* Line 1806 of yacc.c  */
     8838#line 2585 "parser.yy"
    87798839    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    87808840    break;
    87818841
    8782   case 689:
    8783 
    8784 /* Line 1806 of yacc.c  */
    8785 #line 2596 "parser.yy"
     8842  case 690:
     8843
     8844/* Line 1806 of yacc.c  */
     8845#line 2599 "parser.yy"
    87868846    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87878847    break;
    87888848
    8789   case 690:
    8790 
    8791 /* Line 1806 of yacc.c  */
    8792 #line 2598 "parser.yy"
     8849  case 691:
     8850
     8851/* Line 1806 of yacc.c  */
     8852#line 2601 "parser.yy"
    87938853    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87948854    break;
    87958855
    8796   case 691:
    8797 
    8798 /* Line 1806 of yacc.c  */
    8799 #line 2603 "parser.yy"
     8856  case 692:
     8857
     8858/* Line 1806 of yacc.c  */
     8859#line 2606 "parser.yy"
    88008860    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    88018861    break;
    88028862
    8803   case 692:
    8804 
    8805 /* Line 1806 of yacc.c  */
    8806 #line 2605 "parser.yy"
     8863  case 693:
     8864
     8865/* Line 1806 of yacc.c  */
     8866#line 2608 "parser.yy"
    88078867    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    88088868    break;
    88098869
    8810   case 693:
    8811 
    8812 /* Line 1806 of yacc.c  */
    8813 #line 2607 "parser.yy"
     8870  case 694:
     8871
     8872/* Line 1806 of yacc.c  */
     8873#line 2610 "parser.yy"
    88148874    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    88158875    break;
    88168876
    8817   case 694:
    8818 
    8819 /* Line 1806 of yacc.c  */
    8820 #line 2609 "parser.yy"
     8877  case 695:
     8878
     8879/* Line 1806 of yacc.c  */
     8880#line 2612 "parser.yy"
    88218881    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    88228882    break;
    88238883
    8824   case 695:
    8825 
    8826 /* Line 1806 of yacc.c  */
    8827 #line 2611 "parser.yy"
     8884  case 696:
     8885
     8886/* Line 1806 of yacc.c  */
     8887#line 2614 "parser.yy"
    88288888    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88298889    break;
    88308890
    8831   case 697:
    8832 
    8833 /* Line 1806 of yacc.c  */
    8834 #line 2617 "parser.yy"
     8891  case 698:
     8892
     8893/* Line 1806 of yacc.c  */
     8894#line 2620 "parser.yy"
    88358895    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88368896    break;
    88378897
    8838   case 698:
    8839 
    8840 /* Line 1806 of yacc.c  */
    8841 #line 2619 "parser.yy"
     8898  case 699:
     8899
     8900/* Line 1806 of yacc.c  */
     8901#line 2622 "parser.yy"
    88428902    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88438903    break;
    88448904
    8845   case 699:
    8846 
    8847 /* Line 1806 of yacc.c  */
    8848 #line 2621 "parser.yy"
     8905  case 700:
     8906
     8907/* Line 1806 of yacc.c  */
     8908#line 2624 "parser.yy"
    88498909    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88508910    break;
    88518911
    8852   case 700:
    8853 
    8854 /* Line 1806 of yacc.c  */
    8855 #line 2626 "parser.yy"
     8912  case 701:
     8913
     8914/* Line 1806 of yacc.c  */
     8915#line 2629 "parser.yy"
    88568916    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    88578917    break;
    88588918
    8859   case 701:
    8860 
    8861 /* Line 1806 of yacc.c  */
    8862 #line 2628 "parser.yy"
     8919  case 702:
     8920
     8921/* Line 1806 of yacc.c  */
     8922#line 2631 "parser.yy"
    88638923    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88648924    break;
    88658925
    8866   case 704:
    8867 
    8868 /* Line 1806 of yacc.c  */
    8869 #line 2638 "parser.yy"
     8926  case 705:
     8927
     8928/* Line 1806 of yacc.c  */
     8929#line 2641 "parser.yy"
    88708930    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    88718931    break;
    88728932
    8873   case 707:
    8874 
    8875 /* Line 1806 of yacc.c  */
    8876 #line 2648 "parser.yy"
     8933  case 708:
     8934
     8935/* Line 1806 of yacc.c  */
     8936#line 2651 "parser.yy"
    88778937    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    88788938    break;
    88798939
    8880   case 708:
    8881 
    8882 /* Line 1806 of yacc.c  */
    8883 #line 2650 "parser.yy"
     8940  case 709:
     8941
     8942/* Line 1806 of yacc.c  */
     8943#line 2653 "parser.yy"
    88848944    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    88858945    break;
    88868946
    8887   case 709:
    8888 
    8889 /* Line 1806 of yacc.c  */
    8890 #line 2652 "parser.yy"
     8947  case 710:
     8948
     8949/* Line 1806 of yacc.c  */
     8950#line 2655 "parser.yy"
    88918951    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    88928952    break;
    88938953
    8894   case 710:
    8895 
    8896 /* Line 1806 of yacc.c  */
    8897 #line 2654 "parser.yy"
     8954  case 711:
     8955
     8956/* Line 1806 of yacc.c  */
     8957#line 2657 "parser.yy"
    88988958    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    88998959    break;
    89008960
    8901   case 711:
    8902 
    8903 /* Line 1806 of yacc.c  */
    8904 #line 2656 "parser.yy"
     8961  case 712:
     8962
     8963/* Line 1806 of yacc.c  */
     8964#line 2659 "parser.yy"
    89058965    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89068966    break;
    89078967
    8908   case 712:
    8909 
    8910 /* Line 1806 of yacc.c  */
    8911 #line 2658 "parser.yy"
     8968  case 713:
     8969
     8970/* Line 1806 of yacc.c  */
     8971#line 2661 "parser.yy"
    89128972    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89138973    break;
    89148974
    8915   case 713:
    8916 
    8917 /* Line 1806 of yacc.c  */
    8918 #line 2665 "parser.yy"
     8975  case 714:
     8976
     8977/* Line 1806 of yacc.c  */
     8978#line 2668 "parser.yy"
    89198979    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89208980    break;
    89218981
    8922   case 714:
    8923 
    8924 /* Line 1806 of yacc.c  */
    8925 #line 2667 "parser.yy"
     8982  case 715:
     8983
     8984/* Line 1806 of yacc.c  */
     8985#line 2670 "parser.yy"
    89268986    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    89278987    break;
    89288988
    8929   case 715:
    8930 
    8931 /* Line 1806 of yacc.c  */
    8932 #line 2669 "parser.yy"
     8989  case 716:
     8990
     8991/* Line 1806 of yacc.c  */
     8992#line 2672 "parser.yy"
    89338993    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89348994    break;
    89358995
    8936   case 716:
    8937 
    8938 /* Line 1806 of yacc.c  */
    8939 #line 2671 "parser.yy"
     8996  case 717:
     8997
     8998/* Line 1806 of yacc.c  */
     8999#line 2674 "parser.yy"
    89409000    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    89419001    break;
    89429002
    8943   case 717:
    8944 
    8945 /* Line 1806 of yacc.c  */
    8946 #line 2673 "parser.yy"
     9003  case 718:
     9004
     9005/* Line 1806 of yacc.c  */
     9006#line 2676 "parser.yy"
    89479007    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    89489008    break;
    89499009
    8950   case 718:
    8951 
    8952 /* Line 1806 of yacc.c  */
    8953 #line 2675 "parser.yy"
     9010  case 719:
     9011
     9012/* Line 1806 of yacc.c  */
     9013#line 2678 "parser.yy"
    89549014    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89559015    break;
    89569016
    8957   case 719:
    8958 
    8959 /* Line 1806 of yacc.c  */
    8960 #line 2677 "parser.yy"
     9017  case 720:
     9018
     9019/* Line 1806 of yacc.c  */
     9020#line 2680 "parser.yy"
    89619021    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    89629022    break;
    89639023
    8964   case 720:
    8965 
    8966 /* Line 1806 of yacc.c  */
    8967 #line 2679 "parser.yy"
     9024  case 721:
     9025
     9026/* Line 1806 of yacc.c  */
     9027#line 2682 "parser.yy"
    89689028    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89699029    break;
    89709030
    8971   case 721:
    8972 
    8973 /* Line 1806 of yacc.c  */
    8974 #line 2681 "parser.yy"
     9031  case 722:
     9032
     9033/* Line 1806 of yacc.c  */
     9034#line 2684 "parser.yy"
    89759035    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    89769036    break;
    89779037
    8978   case 722:
    8979 
    8980 /* Line 1806 of yacc.c  */
    8981 #line 2683 "parser.yy"
     9038  case 723:
     9039
     9040/* Line 1806 of yacc.c  */
     9041#line 2686 "parser.yy"
    89829042    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    89839043    break;
    89849044
    8985   case 723:
    8986 
    8987 /* Line 1806 of yacc.c  */
    8988 #line 2688 "parser.yy"
     9045  case 724:
     9046
     9047/* Line 1806 of yacc.c  */
     9048#line 2691 "parser.yy"
    89899049    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    89909050    break;
    89919051
    8992   case 724:
    8993 
    8994 /* Line 1806 of yacc.c  */
    8995 #line 2690 "parser.yy"
     9052  case 725:
     9053
     9054/* Line 1806 of yacc.c  */
     9055#line 2693 "parser.yy"
    89969056    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    89979057    break;
    89989058
    8999   case 725:
    9000 
    9001 /* Line 1806 of yacc.c  */
    9002 #line 2695 "parser.yy"
     9059  case 726:
     9060
     9061/* Line 1806 of yacc.c  */
     9062#line 2698 "parser.yy"
    90039063    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    90049064    break;
    90059065
    9006   case 726:
    9007 
    9008 /* Line 1806 of yacc.c  */
    9009 #line 2697 "parser.yy"
     9066  case 727:
     9067
     9068/* Line 1806 of yacc.c  */
     9069#line 2700 "parser.yy"
    90109070    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    90119071    break;
    90129072
    9013   case 728:
    9014 
    9015 /* Line 1806 of yacc.c  */
    9016 #line 2724 "parser.yy"
     9073  case 729:
     9074
     9075/* Line 1806 of yacc.c  */
     9076#line 2727 "parser.yy"
    90179077    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    90189078    break;
    90199079
    9020   case 732:
    9021 
    9022 /* Line 1806 of yacc.c  */
    9023 #line 2735 "parser.yy"
     9080  case 733:
     9081
     9082/* Line 1806 of yacc.c  */
     9083#line 2738 "parser.yy"
    90249084    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    90259085    break;
    90269086
    9027   case 733:
    9028 
    9029 /* Line 1806 of yacc.c  */
    9030 #line 2737 "parser.yy"
     9087  case 734:
     9088
     9089/* Line 1806 of yacc.c  */
     9090#line 2740 "parser.yy"
    90319091    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    90329092    break;
    90339093
    9034   case 734:
    9035 
    9036 /* Line 1806 of yacc.c  */
    9037 #line 2739 "parser.yy"
     9094  case 735:
     9095
     9096/* Line 1806 of yacc.c  */
     9097#line 2742 "parser.yy"
    90389098    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    90399099    break;
    90409100
    9041   case 735:
    9042 
    9043 /* Line 1806 of yacc.c  */
    9044 #line 2741 "parser.yy"
     9101  case 736:
     9102
     9103/* Line 1806 of yacc.c  */
     9104#line 2744 "parser.yy"
    90459105    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    90469106    break;
    90479107
    9048   case 736:
    9049 
    9050 /* Line 1806 of yacc.c  */
    9051 #line 2743 "parser.yy"
     9108  case 737:
     9109
     9110/* Line 1806 of yacc.c  */
     9111#line 2746 "parser.yy"
    90529112    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    90539113    break;
    90549114
    9055   case 737:
    9056 
    9057 /* Line 1806 of yacc.c  */
    9058 #line 2745 "parser.yy"
     9115  case 738:
     9116
     9117/* Line 1806 of yacc.c  */
     9118#line 2748 "parser.yy"
    90599119    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    90609120    break;
    90619121
    9062   case 738:
    9063 
    9064 /* Line 1806 of yacc.c  */
    9065 #line 2752 "parser.yy"
     9122  case 739:
     9123
     9124/* Line 1806 of yacc.c  */
     9125#line 2755 "parser.yy"
    90669126    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90679127    break;
    90689128
    9069   case 739:
    9070 
    9071 /* Line 1806 of yacc.c  */
    9072 #line 2754 "parser.yy"
     9129  case 740:
     9130
     9131/* Line 1806 of yacc.c  */
     9132#line 2757 "parser.yy"
    90739133    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90749134    break;
    90759135
    9076   case 740:
    9077 
    9078 /* Line 1806 of yacc.c  */
    9079 #line 2756 "parser.yy"
     9136  case 741:
     9137
     9138/* Line 1806 of yacc.c  */
     9139#line 2759 "parser.yy"
    90809140    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90819141    break;
    90829142
    9083   case 741:
    9084 
    9085 /* Line 1806 of yacc.c  */
    9086 #line 2758 "parser.yy"
     9143  case 742:
     9144
     9145/* Line 1806 of yacc.c  */
     9146#line 2761 "parser.yy"
    90879147    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90889148    break;
    90899149
    9090   case 742:
    9091 
    9092 /* Line 1806 of yacc.c  */
    9093 #line 2760 "parser.yy"
     9150  case 743:
     9151
     9152/* Line 1806 of yacc.c  */
     9153#line 2763 "parser.yy"
    90949154    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90959155    break;
    90969156
    9097   case 743:
    9098 
    9099 /* Line 1806 of yacc.c  */
    9100 #line 2762 "parser.yy"
     9157  case 744:
     9158
     9159/* Line 1806 of yacc.c  */
     9160#line 2765 "parser.yy"
    91019161    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91029162    break;
    91039163
    9104   case 744:
    9105 
    9106 /* Line 1806 of yacc.c  */
    9107 #line 2767 "parser.yy"
     9164  case 745:
     9165
     9166/* Line 1806 of yacc.c  */
     9167#line 2770 "parser.yy"
    91089168    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    91099169    break;
    91109170
    9111   case 745:
    9112 
    9113 /* Line 1806 of yacc.c  */
    9114 #line 2772 "parser.yy"
     9171  case 746:
     9172
     9173/* Line 1806 of yacc.c  */
     9174#line 2775 "parser.yy"
    91159175    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    91169176    break;
    91179177
    9118   case 746:
    9119 
    9120 /* Line 1806 of yacc.c  */
    9121 #line 2774 "parser.yy"
     9178  case 747:
     9179
     9180/* Line 1806 of yacc.c  */
     9181#line 2777 "parser.yy"
    91229182    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    91239183    break;
    91249184
    9125   case 747:
    9126 
    9127 /* Line 1806 of yacc.c  */
    9128 #line 2776 "parser.yy"
     9185  case 748:
     9186
     9187/* Line 1806 of yacc.c  */
     9188#line 2779 "parser.yy"
    91299189    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    91309190    break;
    91319191
    9132   case 750:
    9133 
    9134 /* Line 1806 of yacc.c  */
    9135 #line 2800 "parser.yy"
     9192  case 751:
     9193
     9194/* Line 1806 of yacc.c  */
     9195#line 2803 "parser.yy"
    91369196    { (yyval.en) = 0; }
    91379197    break;
    91389198
    9139   case 751:
    9140 
    9141 /* Line 1806 of yacc.c  */
    9142 #line 2802 "parser.yy"
     9199  case 752:
     9200
     9201/* Line 1806 of yacc.c  */
     9202#line 2805 "parser.yy"
    91439203    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    91449204    break;
     
    91479207
    91489208/* Line 1806 of yacc.c  */
    9149 #line 9150 "Parser/parser.cc"
     9209#line 9210 "Parser/parser.cc"
    91509210      default: break;
    91519211    }
     
    93789438
    93799439/* Line 2067 of yacc.c  */
    9380 #line 2805 "parser.yy"
     9440#line 2808 "parser.yy"
    93819441
    93829442// ----end of grammar----
  • src/Parser/parser.h

    r9d7b3ea r36ebd03  
    5959     SIGNED = 277,
    6060     UNSIGNED = 278,
    61      BOOL = 279,
    62      COMPLEX = 280,
    63      IMAGINARY = 281,
    64      TYPEOF = 282,
    65      LABEL = 283,
    66      ENUM = 284,
    67      STRUCT = 285,
    68      UNION = 286,
    69      TYPE = 287,
    70      FTYPE = 288,
    71      DTYPE = 289,
    72      CONTEXT = 290,
    73      SIZEOF = 291,
    74      OFFSETOF = 292,
    75      ATTRIBUTE = 293,
    76      EXTENSION = 294,
    77      IF = 295,
    78      ELSE = 296,
    79      SWITCH = 297,
    80      CASE = 298,
    81      DEFAULT = 299,
    82      DO = 300,
    83      WHILE = 301,
    84      FOR = 302,
    85      BREAK = 303,
    86      CONTINUE = 304,
    87      GOTO = 305,
    88      RETURN = 306,
    89      CHOOSE = 307,
    90      DISABLE = 308,
    91      ENABLE = 309,
    92      FALLTHRU = 310,
    93      TRY = 311,
    94      CATCH = 312,
    95      CATCHRESUME = 313,
    96      FINALLY = 314,
    97      THROW = 315,
    98      THROWRESUME = 316,
    99      AT = 317,
    100      ASM = 318,
    101      ALIGNAS = 319,
    102      ALIGNOF = 320,
    103      ATOMIC = 321,
    104      GENERIC = 322,
    105      NORETURN = 323,
    106      STATICASSERT = 324,
    107      THREADLOCAL = 325,
    108      IDENTIFIER = 326,
    109      QUOTED_IDENTIFIER = 327,
    110      TYPEDEFname = 328,
    111      TYPEGENname = 329,
    112      ATTR_IDENTIFIER = 330,
    113      ATTR_TYPEDEFname = 331,
    114      ATTR_TYPEGENname = 332,
    115      INTEGERconstant = 333,
    116      FLOATINGconstant = 334,
    117      CHARACTERconstant = 335,
    118      STRINGliteral = 336,
    119      ZERO = 337,
    120      ONE = 338,
    121      ARROW = 339,
    122      ICR = 340,
    123      DECR = 341,
    124      LS = 342,
    125      RS = 343,
    126      LE = 344,
    127      GE = 345,
    128      EQ = 346,
    129      NE = 347,
    130      ANDAND = 348,
    131      OROR = 349,
    132      ELLIPSIS = 350,
    133      MULTassign = 351,
    134      DIVassign = 352,
    135      MODassign = 353,
    136      PLUSassign = 354,
    137      MINUSassign = 355,
    138      LSassign = 356,
    139      RSassign = 357,
    140      ANDassign = 358,
    141      ERassign = 359,
    142      ORassign = 360,
    143      ATassign = 361,
    144      THEN = 362
     61     VALIST = 279,
     62     BOOL = 280,
     63     COMPLEX = 281,
     64     IMAGINARY = 282,
     65     TYPEOF = 283,
     66     LABEL = 284,
     67     ENUM = 285,
     68     STRUCT = 286,
     69     UNION = 287,
     70     OTYPE = 288,
     71     FTYPE = 289,
     72     DTYPE = 290,
     73     TRAIT = 291,
     74     SIZEOF = 292,
     75     OFFSETOF = 293,
     76     ATTRIBUTE = 294,
     77     EXTENSION = 295,
     78     IF = 296,
     79     ELSE = 297,
     80     SWITCH = 298,
     81     CASE = 299,
     82     DEFAULT = 300,
     83     DO = 301,
     84     WHILE = 302,
     85     FOR = 303,
     86     BREAK = 304,
     87     CONTINUE = 305,
     88     GOTO = 306,
     89     RETURN = 307,
     90     CHOOSE = 308,
     91     DISABLE = 309,
     92     ENABLE = 310,
     93     FALLTHRU = 311,
     94     TRY = 312,
     95     CATCH = 313,
     96     CATCHRESUME = 314,
     97     FINALLY = 315,
     98     THROW = 316,
     99     THROWRESUME = 317,
     100     AT = 318,
     101     ASM = 319,
     102     ALIGNAS = 320,
     103     ALIGNOF = 321,
     104     ATOMIC = 322,
     105     GENERIC = 323,
     106     NORETURN = 324,
     107     STATICASSERT = 325,
     108     THREADLOCAL = 326,
     109     IDENTIFIER = 327,
     110     QUOTED_IDENTIFIER = 328,
     111     TYPEDEFname = 329,
     112     TYPEGENname = 330,
     113     ATTR_IDENTIFIER = 331,
     114     ATTR_TYPEDEFname = 332,
     115     ATTR_TYPEGENname = 333,
     116     INTEGERconstant = 334,
     117     FLOATINGconstant = 335,
     118     CHARACTERconstant = 336,
     119     STRINGliteral = 337,
     120     ZERO = 338,
     121     ONE = 339,
     122     ARROW = 340,
     123     ICR = 341,
     124     DECR = 342,
     125     LS = 343,
     126     RS = 344,
     127     LE = 345,
     128     GE = 346,
     129     EQ = 347,
     130     NE = 348,
     131     ANDAND = 349,
     132     OROR = 350,
     133     ELLIPSIS = 351,
     134     MULTassign = 352,
     135     DIVassign = 353,
     136     MODassign = 354,
     137     PLUSassign = 355,
     138     MINUSassign = 356,
     139     LSassign = 357,
     140     RSassign = 358,
     141     ANDassign = 359,
     142     ERassign = 360,
     143     ORassign = 361,
     144     ATassign = 362,
     145     THEN = 363
    145146   };
    146147#endif
     
    167168#define SIGNED 277
    168169#define UNSIGNED 278
    169 #define BOOL 279
    170 #define COMPLEX 280
    171 #define IMAGINARY 281
    172 #define TYPEOF 282
    173 #define LABEL 283
    174 #define ENUM 284
    175 #define STRUCT 285
    176 #define UNION 286
    177 #define TYPE 287
    178 #define FTYPE 288
    179 #define DTYPE 289
    180 #define CONTEXT 290
    181 #define SIZEOF 291
    182 #define OFFSETOF 292
    183 #define ATTRIBUTE 293
    184 #define EXTENSION 294
    185 #define IF 295
    186 #define ELSE 296
    187 #define SWITCH 297
    188 #define CASE 298
    189 #define DEFAULT 299
    190 #define DO 300
    191 #define WHILE 301
    192 #define FOR 302
    193 #define BREAK 303
    194 #define CONTINUE 304
    195 #define GOTO 305
    196 #define RETURN 306
    197 #define CHOOSE 307
    198 #define DISABLE 308
    199 #define ENABLE 309
    200 #define FALLTHRU 310
    201 #define TRY 311
    202 #define CATCH 312
    203 #define CATCHRESUME 313
    204 #define FINALLY 314
    205 #define THROW 315
    206 #define THROWRESUME 316
    207 #define AT 317
    208 #define ASM 318
    209 #define ALIGNAS 319
    210 #define ALIGNOF 320
    211 #define ATOMIC 321
    212 #define GENERIC 322
    213 #define NORETURN 323
    214 #define STATICASSERT 324
    215 #define THREADLOCAL 325
    216 #define IDENTIFIER 326
    217 #define QUOTED_IDENTIFIER 327
    218 #define TYPEDEFname 328
    219 #define TYPEGENname 329
    220 #define ATTR_IDENTIFIER 330
    221 #define ATTR_TYPEDEFname 331
    222 #define ATTR_TYPEGENname 332
    223 #define INTEGERconstant 333
    224 #define FLOATINGconstant 334
    225 #define CHARACTERconstant 335
    226 #define STRINGliteral 336
    227 #define ZERO 337
    228 #define ONE 338
    229 #define ARROW 339
    230 #define ICR 340
    231 #define DECR 341
    232 #define LS 342
    233 #define RS 343
    234 #define LE 344
    235 #define GE 345
    236 #define EQ 346
    237 #define NE 347
    238 #define ANDAND 348
    239 #define OROR 349
    240 #define ELLIPSIS 350
    241 #define MULTassign 351
    242 #define DIVassign 352
    243 #define MODassign 353
    244 #define PLUSassign 354
    245 #define MINUSassign 355
    246 #define LSassign 356
    247 #define RSassign 357
    248 #define ANDassign 358
    249 #define ERassign 359
    250 #define ORassign 360
    251 #define ATassign 361
    252 #define THEN 362
     170#define VALIST 279
     171#define BOOL 280
     172#define COMPLEX 281
     173#define IMAGINARY 282
     174#define TYPEOF 283
     175#define LABEL 284
     176#define ENUM 285
     177#define STRUCT 286
     178#define UNION 287
     179#define OTYPE 288
     180#define FTYPE 289
     181#define DTYPE 290
     182#define TRAIT 291
     183#define SIZEOF 292
     184#define OFFSETOF 293
     185#define ATTRIBUTE 294
     186#define EXTENSION 295
     187#define IF 296
     188#define ELSE 297
     189#define SWITCH 298
     190#define CASE 299
     191#define DEFAULT 300
     192#define DO 301
     193#define WHILE 302
     194#define FOR 303
     195#define BREAK 304
     196#define CONTINUE 305
     197#define GOTO 306
     198#define RETURN 307
     199#define CHOOSE 308
     200#define DISABLE 309
     201#define ENABLE 310
     202#define FALLTHRU 311
     203#define TRY 312
     204#define CATCH 313
     205#define CATCHRESUME 314
     206#define FINALLY 315
     207#define THROW 316
     208#define THROWRESUME 317
     209#define AT 318
     210#define ASM 319
     211#define ALIGNAS 320
     212#define ALIGNOF 321
     213#define ATOMIC 322
     214#define GENERIC 323
     215#define NORETURN 324
     216#define STATICASSERT 325
     217#define THREADLOCAL 326
     218#define IDENTIFIER 327
     219#define QUOTED_IDENTIFIER 328
     220#define TYPEDEFname 329
     221#define TYPEGENname 330
     222#define ATTR_IDENTIFIER 331
     223#define ATTR_TYPEDEFname 332
     224#define ATTR_TYPEGENname 333
     225#define INTEGERconstant 334
     226#define FLOATINGconstant 335
     227#define CHARACTERconstant 336
     228#define STRINGliteral 337
     229#define ZERO 338
     230#define ONE 339
     231#define ARROW 340
     232#define ICR 341
     233#define DECR 342
     234#define LS 343
     235#define RS 344
     236#define LE 345
     237#define GE 346
     238#define EQ 347
     239#define NE 348
     240#define ANDAND 349
     241#define OROR 350
     242#define ELLIPSIS 351
     243#define MULTassign 352
     244#define DIVassign 353
     245#define MODassign 354
     246#define PLUSassign 355
     247#define MINUSassign 356
     248#define LSassign 357
     249#define RSassign 358
     250#define ANDassign 359
     251#define ERassign 360
     252#define ORassign 361
     253#define ATassign 362
     254#define THEN 363
    253255
    254256
     
    260262
    261263/* Line 2068 of yacc.c  */
    262 #line 110 "parser.yy"
     264#line 111 "parser.yy"
    263265
    264266        Token tok;
     
    277279
    278280/* Line 2068 of yacc.c  */
    279 #line 280 "Parser/parser.h"
     281#line 282 "Parser/parser.h"
    280282} YYSTYPE;
    281283# define YYSTYPE_IS_TRIVIAL 1
  • src/Parser/parser.yy

    r9d7b3ea r36ebd03  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Feb  1 18:22:42 2016
    13 // Update Count     : 1483
     12// Last Modified On : Wed Mar  2 17:24:45 2016
     13// Update Count     : 1495
    1414//
    1515
     
    7474%token FORALL LVALUE                                                                    // CFA
    7575%token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED
     76%token VALIST                                                                                   // GCC
    7677%token BOOL COMPLEX IMAGINARY                                                   // C99
    7778%token TYPEOF LABEL                                                                             // GCC
    7879%token ENUM STRUCT UNION
    79 %token TYPE FTYPE DTYPE CONTEXT                                                 // CFA
     80%token OTYPE FTYPE DTYPE TRAIT                                          // CFA
    8081%token SIZEOF OFFSETOF
    8182%token ATTRIBUTE EXTENSION                                                              // GCC
     
    171172%type<decl> basic_declaration_specifier basic_type_name basic_type_specifier direct_type_name indirect_type_name
    172173
    173 %type<decl> context_declaration context_declaration_list context_declaring_list context_specifier
     174%type<decl> trait_declaration trait_declaration_list trait_declaring_list trait_specifier
    174175
    175176%type<decl> declaration declaration_list declaration_list_opt declaration_qualifier_list
     
    197198%type<decl> new_array_parameter_1st_dimension
    198199
    199 %type<decl> new_context_declaring_list new_declaration new_field_declaring_list
     200%type<decl> new_trait_declaring_list new_declaration new_field_declaring_list
    200201%type<decl> new_function_declaration new_function_return new_function_specifier
    201202
     
    448449                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); }
    449450        | OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
    450         { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
     451                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
    451452        | ATTR_IDENTIFIER
    452453                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); }
     
    10201021        | new_function_declaration pop ';'
    10211022        | type_declaring_list pop ';'
    1022         | context_specifier pop ';'
     1023        | trait_specifier pop ';'
    10231024        ;
    10241025
     
    13451346        | IMAGINARY                                                                                     // C99
    13461347                { $$ = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     1348        | VALIST                                                                                        // GCC, __builtin_va_list
     1349                { $$ = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
    13471350        ;
    13481351
     
    18031806
    18041807type_class:                                                                                             // CFA
    1805         TYPE
     1808        OTYPE
    18061809                { $$ = DeclarationNode::Type; }
    18071810        | DTYPE
     
    18211824        '|' no_attr_identifier_or_type_name '(' type_name_list ')'
    18221825                {
    1823                         typedefTable.openContext( *$2 );
    1824                         $$ = DeclarationNode::newContextUse( $2, $4 );
    1825                 }
    1826         | '|' '{' push context_declaration_list '}'
     1826                        typedefTable.openTrait( *$2 );
     1827                        $$ = DeclarationNode::newTraitUse( $2, $4 );
     1828                }
     1829        | '|' '{' push trait_declaration_list '}'
    18271830                { $$ = $4; }
    1828         | '|' '(' push type_parameter_list pop ')' '{' push context_declaration_list '}' '(' type_name_list ')'
     1831        | '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_name_list ')'
    18291832                { $$ = 0; }
    18301833        ;
     
    18411844
    18421845type_declaring_list:                                                                    // CFA
    1843         TYPE type_declarator
    1844                 { $$ = $2; }
    1845         | storage_class_list TYPE type_declarator
     1846        OTYPE type_declarator
     1847                { $$ = $2; }
     1848        | storage_class_list OTYPE type_declarator
    18461849                { $$ = $3->addQualifiers( $1 ); }
    18471850        | type_declaring_list ',' type_declarator
     
    18691872        ;
    18701873
    1871 context_specifier:                                                                              // CFA
    1872         CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
     1874trait_specifier:                                                                                // CFA
     1875        TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
    18731876                {
    18741877                        typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
    1875                         $$ = DeclarationNode::newContext( $2, $5, 0 );
    1876                 }
    1877         | CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'
    1878                 {
    1879                         typedefTable.enterContext( *$2 );
     1878                        $$ = DeclarationNode::newTrait( $2, $5, 0 );
     1879                }
     1880        | TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'
     1881                {
     1882                        typedefTable.enterTrait( *$2 );
    18801883                        typedefTable.enterScope();
    18811884                }
    1882           context_declaration_list '}'
    1883                 {
    1884                         typedefTable.leaveContext();
     1885          trait_declaration_list '}'
     1886                {
     1887                        typedefTable.leaveTrait();
    18851888                        typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
    1886                         $$ = DeclarationNode::newContext( $2, $5, $10 );
    1887                 }
    1888         ;
    1889 
    1890 context_declaration_list:                                                               // CFA
    1891         context_declaration
    1892         | context_declaration_list push context_declaration
     1889                        $$ = DeclarationNode::newTrait( $2, $5, $10 );
     1890                }
     1891        ;
     1892
     1893trait_declaration_list:                                                         // CFA
     1894        trait_declaration
     1895        | trait_declaration_list push trait_declaration
    18931896                { $$ = $1->appendList( $3 ); }
    18941897        ;
    18951898
    1896 context_declaration:                                                                    // CFA
    1897         new_context_declaring_list pop ';'
    1898         | context_declaring_list pop ';'
    1899         ;
    1900 
    1901 new_context_declaring_list:                                                             // CFA
     1899trait_declaration:                                                                      // CFA
     1900        new_trait_declaring_list pop ';'
     1901        | trait_declaring_list pop ';'
     1902        ;
     1903
     1904new_trait_declaring_list:                                                               // CFA
    19021905        new_variable_specifier
    19031906                {
     
    19101913                        $$ = $1;
    19111914                }
    1912         | new_context_declaring_list pop ',' push identifier_or_type_name
     1915        | new_trait_declaring_list pop ',' push identifier_or_type_name
    19131916                {
    19141917                        typedefTable.addToEnclosingScope2( *$5, TypedefTable::ID );
     
    19171920        ;
    19181921
    1919 context_declaring_list:                                                                 // CFA
     1922trait_declaring_list:                                                                   // CFA
    19201923        type_specifier declarator
    19211924                {
     
    19231926                        $$ = $2->addType( $1 );
    19241927                }
    1925         | context_declaring_list pop ',' push declarator
     1928        | trait_declaring_list pop ',' push declarator
    19261929                {
    19271930                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
  • src/ResolvExpr/AdjustExprType.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Sat May 16 23:41:42 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat May 16 23:54:02 2015
    13 // Update Count     : 3
     12// Last Modified On : Wed Mar  2 17:34:53 2016
     13// Update Count     : 4
    1414//
    1515
     
    3333                virtual Type* mutate( UnionInstType *aggregateUseType );
    3434                virtual Type* mutate( EnumInstType *aggregateUseType );
    35                 virtual Type* mutate( ContextInstType *aggregateUseType );
     35                virtual Type* mutate( TraitInstType *aggregateUseType );
    3636                virtual Type* mutate( TypeInstType *aggregateUseType );
    3737                virtual Type* mutate( TupleType *tupleType );
     
    8787        }
    8888
    89         Type *AdjustExprType::mutate( ContextInstType *aggregateUseType ) {
     89        Type *AdjustExprType::mutate( TraitInstType *aggregateUseType ) {
    9090                return aggregateUseType;
    9191        }
  • src/ResolvExpr/CommonType.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Sun May 17 06:59:27 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 07:04:50 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:35:34 2016
     13// Update Count     : 3
    1414//
    1515
     
    3535                virtual void visit( UnionInstType *aggregateUseType );
    3636                virtual void visit( EnumInstType *aggregateUseType );
    37                 virtual void visit( ContextInstType *aggregateUseType );
     37                virtual void visit( TraitInstType *aggregateUseType );
    3838                virtual void visit( TypeInstType *aggregateUseType );
    3939                virtual void visit( TupleType *tupleType );
     
    186186        }
    187187
    188         void CommonType::visit( ContextInstType *aggregateUseType ) {
     188        void CommonType::visit( TraitInstType *aggregateUseType ) {
    189189        }
    190190
  • src/ResolvExpr/ConversionCost.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Sun May 17 07:06:19 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 07:22:19 2015
    13 // Update Count     : 4
     12// Last Modified On : Wed Mar  2 17:35:46 2016
     13// Update Count     : 6
    1414//
    1515
     
    206206        }
    207207
    208         void ConversionCost::visit(ContextInstType *inst) {
     208        void ConversionCost::visit(TraitInstType *inst) {
    209209        }
    210210
     
    249249
    250250        void ConversionCost::visit(VarArgsType *varArgsType) {
    251                 if ( VarArgsType *destAsVarArgs = dynamic_cast< VarArgsType* >( dest ) ) {
     251                if ( dynamic_cast< VarArgsType* >( dest ) ) {
    252252                        cost = Cost::zero;
    253253                }
  • src/ResolvExpr/ConversionCost.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Sun May 17 09:37:28 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 09:39:23 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:35:56 2016
     13// Update Count     : 3
    1414//
    1515
     
    3737                virtual void visit(UnionInstType *aggregateUseType);
    3838                virtual void visit(EnumInstType *aggregateUseType);
    39                 virtual void visit(ContextInstType *aggregateUseType);
     39                virtual void visit(TraitInstType *aggregateUseType);
    4040                virtual void visit(TypeInstType *aggregateUseType);
    4141                virtual void visit(TupleType *tupleType);
  • src/ResolvExpr/PtrsAssignable.cc

    r9d7b3ea r36ebd03  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 11:44:11 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Mon Sep 21 14:34:58 2015
    13 // Update Count     : 7
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:36:05 2016
     13// Update Count     : 8
    1414//
    1515
     
    3535                virtual void visit( UnionInstType *inst );
    3636                virtual void visit( EnumInstType *inst );
    37                 virtual void visit( ContextInstType *inst );
     37                virtual void visit( TraitInstType *inst );
    3838                virtual void visit( TypeInstType *inst );
    3939                virtual void visit( TupleType *tupleType );
     
    101101        }
    102102
    103         void PtrsAssignable::visit( ContextInstType *inst ) {
     103        void PtrsAssignable::visit( TraitInstType *inst ) {
    104104                // I definitely don't think we should be doing anything here
    105105        }
  • src/ResolvExpr/PtrsCastable.cc

    r9d7b3ea r36ebd03  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 11:48:00 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Mon Oct 05 14:49:12 2015
    13 // Update Count     : 7
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:36:18 2016
     13// Update Count     : 8
    1414//
    1515
     
    3636                virtual void visit(UnionInstType *inst);
    3737                virtual void visit(EnumInstType *inst);
    38                 virtual void visit(ContextInstType *inst);
     38                virtual void visit(TraitInstType *inst);
    3939                virtual void visit(TypeInstType *inst);
    4040                virtual void visit(TupleType *tupleType);
     
    129129        }
    130130
    131         void PtrsCastable::visit(ContextInstType *inst) {
     131        void PtrsCastable::visit(TraitInstType *inst) {
    132132                // I definitely don't think we should be doing anything here
    133133        }
  • src/ResolvExpr/RenameVars.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Sun May 17 12:05:18 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jun  8 14:51:35 2015
    13 // Update Count     : 4
     12// Last Modified On : Wed Mar  2 17:36:32 2016
     13// Update Count     : 5
    1414//
    1515
     
    8686        }
    8787
    88         void RenameVars::visit( ContextInstType *aggregateUseType ) {
     88        void RenameVars::visit( TraitInstType *aggregateUseType ) {
    8989                typeBefore( aggregateUseType );
    9090                acceptAll( aggregateUseType->get_parameters(), *this );
  • src/ResolvExpr/RenameVars.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Sun May 17 12:10:28 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 12:11:53 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:36:39 2016
     13// Update Count     : 3
    1414//
    1515
     
    4040                virtual void visit( UnionInstType *aggregateUseType );
    4141                virtual void visit( EnumInstType *aggregateUseType );
    42                 virtual void visit( ContextInstType *aggregateUseType );
     42                virtual void visit( TraitInstType *aggregateUseType );
    4343                virtual void visit( TypeInstType *aggregateUseType );
    4444                virtual void visit( TupleType *tupleType );
  • src/ResolvExpr/Unify.cc

    r9d7b3ea r36ebd03  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 12:27:10 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Sep 02 14:43:22 2015
    13 // Update Count     : 36
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:37:05 2016
     13// Update Count     : 37
    1414//
    1515
     
    5656                virtual void visit(UnionInstType *aggregateUseType);
    5757                virtual void visit(EnumInstType *aggregateUseType);
    58                 virtual void visit(ContextInstType *aggregateUseType);
     58                virtual void visit(TraitInstType *aggregateUseType);
    5959                virtual void visit(TypeInstType *aggregateUseType);
    6060                virtual void visit(TupleType *tupleType);
     
    541541        }
    542542
    543         void Unify::visit(ContextInstType *contextInst) {
     543        void Unify::visit(TraitInstType *contextInst) {
    544544                handleRefType( contextInst, type2 );
    545545        }
  • src/SymTab/AggregateTable.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Sun May 17 16:17:26 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 16:19:29 2015
    13 // Update Count     : 4
     12// Last Modified On : Wed Mar  2 17:31:00 2016
     13// Update Count     : 5
    1414//
    1515
     
    4242        typedef StackTable< EnumDecl, AggregateTableConflictFunction< EnumDecl > > EnumTable;
    4343        typedef StackTable< UnionDecl, AggregateTableConflictFunction< UnionDecl > > UnionTable;
    44         typedef StackTable< ContextDecl, AggregateTableConflictFunction< ContextDecl > > ContextTable;
     44        typedef StackTable< TraitDecl, AggregateTableConflictFunction< TraitDecl > > TraitTable;
    4545} // namespace SymTab
    4646
  • src/SymTab/FixFunction.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Sun May 17 16:19:49 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 16:22:54 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:31:10 2016
     13// Update Count     : 3
    1414//
    1515
     
    6161        }
    6262
    63         Type * FixFunction::mutate(ContextInstType *aggregateUseType) {
     63        Type * FixFunction::mutate(TraitInstType *aggregateUseType) {
    6464                return aggregateUseType;
    6565        }
  • src/SymTab/FixFunction.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Sun May 17 17:02:08 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 17:03:43 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:34:06 2016
     13// Update Count     : 3
    1414//
    1515
     
    3838                virtual Type* mutate(UnionInstType *aggregateUseType);
    3939                virtual Type* mutate(EnumInstType *aggregateUseType);
    40                 virtual Type* mutate(ContextInstType *aggregateUseType);
     40                virtual Type* mutate(TraitInstType *aggregateUseType);
    4141                virtual Type* mutate(TypeInstType *aggregateUseType);
    4242                virtual Type* mutate(TupleType *tupleType);
  • src/SymTab/ImplementationType.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Sun May 17 21:32:01 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 21:34:40 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:31:20 2016
     13// Update Count     : 3
    1414//
    1515
     
    3737                virtual void visit(UnionInstType *aggregateUseType);
    3838                virtual void visit(EnumInstType *aggregateUseType);
    39                 virtual void visit(ContextInstType *aggregateUseType);
     39                virtual void visit(TraitInstType *aggregateUseType);
    4040                virtual void visit(TypeInstType *aggregateUseType);
    4141                virtual void visit(TupleType *tupleType);
     
    9696        }
    9797
    98         void ImplementationType::visit(ContextInstType *aggregateUseType) {
     98        void ImplementationType::visit(TraitInstType *aggregateUseType) {
    9999        }
    100100
  • src/SymTab/Indexer.cc

    r9d7b3ea r36ebd03  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 21:37:33 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Aug 05 13:52:42 2015
    13 // Update Count     : 10
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:31:29 2016
     13// Update Count     : 11
    1414//
    1515
     
    143143        }
    144144
    145         void Indexer::visit( ContextDecl *aggregateDecl ) {
     145        void Indexer::visit( TraitDecl *aggregateDecl ) {
    146146                enterScope();
    147147                acceptAll( aggregateDecl->get_parameters(), *this );
     
    293293
    294294
    295         void Indexer::visit( ContextInstType *contextInst ) {
     295        void Indexer::visit( TraitInstType *contextInst ) {
    296296                acceptAll( contextInst->get_parameters(), *this );
    297297                acceptAll( contextInst->get_members(), *this );
     
    350350        }
    351351
    352         ContextDecl  * Indexer::lookupContext( const std::string &id ) const {
     352        TraitDecl  * Indexer::lookupTrait( const std::string &id ) const {
    353353                return contextTable.lookup( id );
    354354        }
  • src/SymTab/Indexer.h

    r9d7b3ea r36ebd03  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 21:38:55 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Sep 17 16:05:38 2015
    13 // Update Count     : 5
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:34:14 2016
     13// Update Count     : 6
    1414//
    1515
     
    3939                virtual void visit( UnionDecl *aggregateDecl );
    4040                virtual void visit( EnumDecl *aggregateDecl );
    41                 virtual void visit( ContextDecl *aggregateDecl );
     41                virtual void visit( TraitDecl *aggregateDecl );
    4242
    4343                virtual void visit( CompoundStmt *compoundStmt );
     
    6767                virtual void visit( UntypedValofExpr *valofExpr );
    6868
    69                 virtual void visit( ContextInstType *contextInst );
     69                virtual void visit( TraitInstType *contextInst );
    7070                virtual void visit( StructInstType *contextInst );
    7171                virtual void visit( UnionInstType *contextInst );
     
    8484                EnumDecl *lookupEnum( const std::string &id ) const;
    8585                UnionDecl *lookupUnion( const std::string &id ) const;
    86                 ContextDecl *lookupContext( const std::string &id ) const;
     86                TraitDecl *lookupTrait( const std::string &id ) const;
    8787 
    8888                void print( std::ostream &os, int indent = 0 ) const;
     
    9393                EnumTable enumTable;
    9494                UnionTable unionTable;
    95                 ContextTable contextTable;
     95                TraitTable contextTable;
    9696 
    9797                bool doDebug;                                   // display debugging trace
  • src/SymTab/Validate.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Sun May 17 21:50:04 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jan 27 22:03:12 2016
    13 // Update Count     : 225
     12// Last Modified On : Wed Mar  2 17:31:39 2016
     13// Update Count     : 226
    1414//
    1515
     
    101101                virtual void visit( StructInstType *structInst );
    102102                virtual void visit( UnionInstType *unionInst );
    103                 virtual void visit( ContextInstType *contextInst );
     103                virtual void visit( TraitInstType *contextInst );
    104104                virtual void visit( StructDecl *structDecl );
    105105                virtual void visit( UnionDecl *unionDecl );
     
    137137                virtual void visit( UnionDecl *structDecl );
    138138                virtual void visit( TypeDecl *typeDecl );
    139                 virtual void visit( ContextDecl *ctxDecl );
     139                virtual void visit( TraitDecl *ctxDecl );
    140140                virtual void visit( FunctionDecl *functionDecl );
    141141
     
    192192                virtual Declaration *mutate( UnionDecl * unionDecl );
    193193                virtual Declaration *mutate( EnumDecl * enumDecl );
    194                 virtual Declaration *mutate( ContextDecl * contextDecl );
     194                virtual Declaration *mutate( TraitDecl * contextDecl );
    195195
    196196                template<typename AggDecl>
     
    404404        }
    405405
    406         void Pass2::visit( ContextInstType *contextInst ) {
     406        void Pass2::visit( TraitInstType *contextInst ) {
    407407                Parent::visit( contextInst );
    408                 ContextDecl *ctx = indexer->lookupContext( contextInst->get_name() );
     408                TraitDecl *ctx = indexer->lookupTrait( contextInst->get_name() );
    409409                if ( ! ctx ) {
    410410                        throw SemanticError( "use of undeclared context " + contextInst->get_name() );
     
    412412                for ( std::list< TypeDecl * >::const_iterator i = ctx->get_parameters().begin(); i != ctx->get_parameters().end(); ++i ) {
    413413                        for ( std::list< DeclarationWithType * >::const_iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) {
    414                                 if ( ContextInstType *otherCtx = dynamic_cast< ContextInstType * >(*assert ) ) {
     414                                if ( TraitInstType *otherCtx = dynamic_cast< TraitInstType * >(*assert ) ) {
    415415                                        cloneAll( otherCtx->get_members(), contextInst->get_members() );
    416416                                } else {
     
    476476                        while ( ! toBeDone.empty() ) {
    477477                                for ( std::list< DeclarationWithType * >::iterator assertion = toBeDone.begin(); assertion != toBeDone.end(); ++assertion ) {
    478                                         if ( ContextInstType *ctx = dynamic_cast< ContextInstType * >( (*assertion )->get_type() ) ) {
     478                                        if ( TraitInstType *ctx = dynamic_cast< TraitInstType * >( (*assertion )->get_type() ) ) {
    479479                                                for ( std::list< Declaration * >::const_iterator i = ctx->get_members().begin(); i != ctx->get_members().end(); ++i ) {
    480480                                                        DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *i );
     
    851851        }
    852852
    853         void AutogenerateRoutines::visit( ContextDecl *) {
     853        void AutogenerateRoutines::visit( TraitDecl *) {
    854854                // ensure that we don't add assignment ops for types defined as part of the context
    855855        }
     
    10751075        }
    10761076
    1077                 Declaration *EliminateTypedef::mutate( ContextDecl * contextDecl ) {
     1077                Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) {
    10781078                Mutator::mutate( contextDecl );
    10791079                return handleAggregate( contextDecl );
  • src/SynTree/AggregateDecl.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Sun May 17 23:56:39 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Jun 13 08:12:49 2015
    13 // Update Count     : 6
     12// Last Modified On : Wed Mar  2 17:28:00 2016
     13// Update Count     : 7
    1414//
    1515
     
    6464std::string EnumDecl::typeString() const { return "enum"; }
    6565
    66 std::string ContextDecl::typeString() const { return "context"; }
     66std::string TraitDecl::typeString() const { return "context"; }
    6767
    6868// Local Variables: //
  • src/SynTree/Declaration.h

    r9d7b3ea r36ebd03  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Dec 09 14:08:22 2015
    13 // Update Count     : 32
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:28:11 2016
     13// Update Count     : 33
    1414//
    1515
     
    246246};
    247247
    248 class ContextDecl : public AggregateDecl {
    249         typedef AggregateDecl Parent;
    250   public:
    251         ContextDecl( const std::string &name ) : Parent( name ) {}
    252         ContextDecl( const ContextDecl &other ) : Parent( other ) {}
    253 
    254         virtual ContextDecl *clone() const { return new ContextDecl( *this ); }
     248class TraitDecl : public AggregateDecl {
     249        typedef AggregateDecl Parent;
     250  public:
     251        TraitDecl( const std::string &name ) : Parent( name ) {}
     252        TraitDecl( const TraitDecl &other ) : Parent( other ) {}
     253
     254        virtual TraitDecl *clone() const { return new TraitDecl( *this ); }
    255255        virtual void accept( Visitor &v ) { v.visit( this ); }
    256256        virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
  • src/SynTree/Mutator.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Jul 25 19:21:33 2015
    13 // Update Count     : 11
     12// Last Modified On : Wed Mar  2 17:28:20 2016
     13// Update Count     : 12
    1414//
    1515
     
    6363}
    6464
    65 Declaration *Mutator::mutate( ContextDecl *aggregateDecl ) {
     65Declaration *Mutator::mutate( TraitDecl *aggregateDecl ) {
    6666        handleAggregateDecl( aggregateDecl );
    6767        return aggregateDecl;
     
    387387}
    388388
    389 Type *Mutator::mutate( ContextInstType *aggregateUseType ) {
     389Type *Mutator::mutate( TraitInstType *aggregateUseType ) {
    390390        handleReferenceToType( aggregateUseType );
    391391        mutateAll( aggregateUseType->get_members(), *this );
  • src/SynTree/Mutator.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Nov 19 22:26:16 2015
    13 // Update Count     : 8
     12// Last Modified On : Wed Mar  2 17:33:11 2016
     13// Update Count     : 9
    1414//
    1515#include <cassert>
     
    3131        virtual Declaration* mutate( UnionDecl *aggregateDecl );
    3232        virtual Declaration* mutate( EnumDecl *aggregateDecl );
    33         virtual Declaration* mutate( ContextDecl *aggregateDecl );
     33        virtual Declaration* mutate( TraitDecl *aggregateDecl );
    3434        virtual TypeDecl* mutate( TypeDecl *typeDecl );
    3535        virtual Declaration* mutate( TypedefDecl *typeDecl );
     
    8585        virtual Type* mutate( UnionInstType *aggregateUseType );
    8686        virtual Type* mutate( EnumInstType *aggregateUseType );
    87         virtual Type* mutate( ContextInstType *aggregateUseType );
     87        virtual Type* mutate( TraitInstType *aggregateUseType );
    8888        virtual Type* mutate( TypeInstType *aggregateUseType );
    8989        virtual Type* mutate( TupleType *tupleType );
  • src/SynTree/ReferenceToType.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Jun  7 08:31:48 2015
    13 // Update Count     : 4
     12// Last Modified On : Wed Mar  2 17:28:51 2016
     13// Update Count     : 5
    1414//
    1515
     
    8383std::string EnumInstType::typeString() const { return "enum"; }
    8484
    85 std::string ContextInstType::typeString() const { return "context"; }
     85std::string TraitInstType::typeString() const { return "context"; }
    8686
    87 ContextInstType::ContextInstType( const ContextInstType &other ) : Parent( other ) {
     87TraitInstType::TraitInstType( const TraitInstType &other ) : Parent( other ) {
    8888        cloneAll( other.members, members );
    8989}
    9090
    91 ContextInstType::~ContextInstType() {
     91TraitInstType::~TraitInstType() {
    9292        deleteAll( members );
    9393}
  • src/SynTree/SynTree.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul 23 23:25:04 2015
    13 // Update Count     : 3
     12// Last Modified On : Wed Mar  2 17:29:00 2016
     13// Update Count     : 4
    1414//
    1515
     
    3030class UnionDecl;
    3131class EnumDecl;
    32 class ContextDecl;
     32class TraitDecl;
    3333class NamedTypeDecl;
    3434class TypeDecl;
     
    9292class UnionInstType;
    9393class EnumInstType;
    94 class ContextInstType;
     94class TraitInstType;
    9595class TypeInstType;
    9696class TupleType;
  • src/SynTree/Type.h

    r9d7b3ea r36ebd03  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Fri Dec 18 14:46:18 2015
    13 // Update Count     : 18
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:29:08 2016
     13// Update Count     : 21
    1414//
    1515
     
    296296};
    297297
    298 class ContextInstType : public ReferenceToType {
     298class TraitInstType : public ReferenceToType {
    299299        typedef ReferenceToType Parent;
    300300  public:
    301         ContextInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {}
    302         ContextInstType( const ContextInstType &other );
    303         ~ContextInstType();
     301        TraitInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {}
     302        TraitInstType( const TraitInstType &other );
     303        ~TraitInstType();
    304304
    305305        std::list< Declaration* >& get_members() { return members; }
    306306
    307         virtual ContextInstType *clone() const { return new ContextInstType( *this ); }
     307        virtual TraitInstType *clone() const { return new TraitInstType( *this ); }
    308308        virtual void accept( Visitor &v ) { v.visit( this ); }
    309309        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     
    402402/// Represents the GCC built-in varargs type
    403403class VarArgsType : public Type {
     404  public:
    404405        VarArgsType();
    405         VarArgsType( Type::Qualifiers &tq );
     406        VarArgsType( Type::Qualifiers tq );
    406407
    407408        virtual VarArgsType *clone() const { return new VarArgsType( *this ); }
  • src/SynTree/TypeSubstitution.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 18 11:10:04 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:29:15 2016
     13// Update Count     : 3
    1414//
    1515
     
    190190}
    191191
    192 Type * TypeSubstitution::mutate( ContextInstType *aggregateUseType ) {
     192Type * TypeSubstitution::mutate( TraitInstType *aggregateUseType ) {
    193193        return handleType( aggregateUseType );
    194194}
  • src/SynTree/TypeSubstitution.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 18 11:12:30 2015
    13 // Update Count     : 1
     12// Last Modified On : Wed Mar  2 17:33:19 2016
     13// Update Count     : 2
    1414//
    1515
     
    7272        virtual Type* mutate(UnionInstType *aggregateUseType);
    7373        virtual Type* mutate(EnumInstType *aggregateUseType);
    74         virtual Type* mutate(ContextInstType *aggregateUseType);
     74        virtual Type* mutate(TraitInstType *aggregateUseType);
    7575        virtual Type* mutate(TupleType *tupleType);
    7676        virtual Type* mutate(VarArgsType *varArgsType);
  • src/SynTree/VarArgsType.cc

    r9d7b3ea r36ebd03  
    99// Author           : Aaron B. Moss
    1010// Created On       : Thu Feb 25 16:34:00 2016
    11 // Last Modified By : Aaron B. Moss
    12 // Last Modified On : Thu Feb 25 16:34:00 2016
    13 // Update Count     : 1
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:10:40 2016
     13// Update Count     : 2
    1414//
    1515
     
    1818VarArgsType::VarArgsType() : Type( Type::Qualifiers() ) {}
    1919
    20 VarArgsType::VarArgsType( Type::Qualifiers &tq ) : Type( tq ) {}
     20VarArgsType::VarArgsType( Type::Qualifiers tq ) : Type( tq ) {}
    2121
    2222void VarArgsType::print( std::ostream &os, int indent ) const {
  • src/SynTree/Visitor.cc

    r9d7b3ea r36ebd03  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Jul 24 16:11:05 2015
    13 // Update Count     : 15
     12// Last Modified On : Wed Mar  2 17:29:23 2016
     13// Update Count     : 16
    1414//
    1515
     
    5656}
    5757
    58 void Visitor::visit( ContextDecl *aggregateDecl ) {
     58void Visitor::visit( TraitDecl *aggregateDecl ) {
    5959        visit( static_cast< AggregateDecl* >( aggregateDecl ) );
    6060}
     
    326326}
    327327
    328 void Visitor::visit( ContextInstType *aggregateUseType ) {
     328void Visitor::visit( TraitInstType *aggregateUseType ) {
    329329        visit( static_cast< ReferenceToType * >( aggregateUseType ) );
    330330        acceptAll( aggregateUseType->get_members(), *this );
  • src/SynTree/Visitor.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 25 21:20:44 2016
    13 // Update Count     : 5
     12// Last Modified On : Wed Mar  2 17:33:35 2016
     13// Update Count     : 6
    1414//
    1515
     
    3131        virtual void visit( UnionDecl *aggregateDecl );
    3232        virtual void visit( EnumDecl *aggregateDecl );
    33         virtual void visit( ContextDecl *aggregateDecl );
     33        virtual void visit( TraitDecl *aggregateDecl );
    3434        virtual void visit( TypeDecl *typeDecl );
    3535        virtual void visit( TypedefDecl *typeDecl );
     
    8585        virtual void visit( UnionInstType *aggregateUseType );
    8686        virtual void visit( EnumInstType *aggregateUseType );
    87         virtual void visit( ContextInstType *aggregateUseType );
     87        virtual void visit( TraitInstType *aggregateUseType );
    8888        virtual void visit( TypeInstType *aggregateUseType );
    8989        virtual void visit( TupleType *tupleType );
  • src/driver/Makefile.in

    r9d7b3ea r36ebd03  
    196196          esac; \
    197197        done; \
    198         echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/driver/Makefile'; \
     198        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/driver/Makefile'; \
    199199        $(am__cd) $(top_srcdir) && \
    200           $(AUTOMAKE) --gnu src/driver/Makefile
     200          $(AUTOMAKE) --foreign src/driver/Makefile
    201201.PRECIOUS: Makefile
    202202Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
  • src/examples/Makefile.in

    r9d7b3ea r36ebd03  
    189189          esac; \
    190190        done; \
    191         echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
     191        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/examples/Makefile'; \
    192192        $(am__cd) $(top_srcdir) && \
    193           $(AUTOMAKE) --gnu src/examples/Makefile
     193          $(AUTOMAKE) --foreign src/examples/Makefile
    194194.PRECIOUS: Makefile
    195195Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
  • src/examples/abs.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Thu Jan 28 18:26:16 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 09:32:04 2016
    13 // Update Count     : 44
     12// Last Modified On : Wed Mar  2 15:07:26 2016
     13// Update Count     : 51
    1414//
    1515
     
    2020        char ch = -65;
    2121        sout | "char\t\t\t"                                     | ch     | "\tabs " | abs( ch ) | endl;
    22         sout | "signed int\t\t"                         | -65    | "\tabs " | abs( -65 ) | endl;
    23         sout | "signed long int\t\t"            | -65l   | "\tabs " | abs( -65l ) | endl;
    24         sout | "signed long long int\t"         | -65ll  | "\tabs " | abs( -65ll ) | endl;
    25         sout | "float\t\t\t"                            | -65.0f | "\tabs " | abs( -65.0f ) | endl;
    26         sout | "double\t\t\t"                           | -65.0  | "\tabs " | abs( -65.0 ) | endl;
    27         sout | "long double\t\t"                        | -65.0l | "\tabs " | abs( -65.0l ) | endl;
    28         sout | "float _Complex\t\t"                     | -65.0F-2.0iF | "\tabs " | abs( -65.0F-2.0iF ) | endl;
    29         sout | "double _Complex\t\t"            | -65.0D-2.0iD | "\tabs " | abs( -65.0D-2.0iD ) | endl;
    30         sout | "long double _Complex\t"         | -65.0L-2.0iL | "\tabs " | abs( -65.0L-2.0iL ) | endl;
     22        sout | "signed int\t\t"                         | -65    | "\tabs" | abs( -65 ) | endl;
     23        sout | "signed long int\t\t"            | -65l   | "\tabs" | abs( -65l ) | endl;
     24        sout | "signed long long int\t"         | -65ll  | "\tabs" | abs( -65ll ) | endl;
     25        sout | "float\t\t\t"                            | -65.0f | "\tabs" | abs( -65.0f ) | endl;
     26        sout | "double\t\t\t"                           | -65.0  | "\tabs" | abs( -65.0 ) | endl;
     27        sout | "long double\t\t"                        | -65.0l | "\tabs" | abs( -65.0l ) | endl;
     28        sout | "float _Complex\t\t"                     | -65.0F-2.0iF | "\tabs" | abs( -65.0F-2.0iF ) | endl;
     29        sout | "double _Complex\t\t"            | -65.0D-2.0iD | "\tabs" | abs( -65.0D-2.0iD ) | endl;
     30        sout | "long double _Complex\t"         | -65.0L-2.0iL | "\tabs" | abs( -65.0L-2.0iL ) | endl;
    3131} // main
    3232
  • src/examples/array.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:10:13 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 18:13:52 2016
     13// Update Count     : 3
    1414//
    1515
    1616#include "array.h"
    1717
    18 /// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )
     18/// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )
    1919/// [ array_iterator begin, array_iterator end ]
    2020/// get_iterators( array_type array )
     
    2525
    2626// The first element is always at index 0.
    27 forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
     27forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
    2828elt_type * begin( array_type array ) {
    2929        return &array[ 0 ];
     
    3131
    3232// The end iterator should point one past the last element.
    33 forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
     33forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
    3434elt_type * end( array_type array ) {
    3535        return &array[ last( array ) ] + 1;
  • src/examples/array.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jan 26 17:09:29 2016
    13 // Update Count     : 3
     12// Last Modified On : Wed Mar  2 18:13:35 2016
     13// Update Count     : 5
    1414//
    1515
     
    2121// An array has contiguous elements accessible in any order using integer indicies. The first
    2222// element has index 0.
    23 context array( type array_type, type elt_type ) {
     23trait array( otype array_type, otype elt_type ) {
    2424        lvalue elt_type ?[?]( array_type, int );
    2525};
    2626
    2727// A bounded array is an array that carries its maximum index with it.
    28 context bounded_array( type array_type, type elt_type | array( array_type, elt_type ) ) {
     28trait bounded_array( otype array_type, otype elt_type | array( array_type, elt_type ) ) {
    2929        int last( array_type );
    3030};
     
    3434typedef int array_iterator;
    3535
    36 /// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )
     36/// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )
    3737/// [ array_iterator begin, array_iterator end ] get_iterators( array_type );
    3838
     
    4040// A bounded array can be iterated over by using a pointer to the element type. These functions
    4141// return iterators corresponding to the first element and the one-past-the-end element, STL-style.
    42 forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
     42forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
    4343elt_type *begin( array_type );
    4444
    45 forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
     45forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
    4646elt_type *end( array_type );
    4747
  • src/examples/ato.c

    r9d7b3ea r36ebd03  
    1111// Created On       : Thu Feb  4 08:10:57 2016
    1212// Last Modified By : Peter A. Buhr
    13 // Last Modified On : Wed Feb 17 11:44:03 2016
    14 // Update Count     : 42
     13// Last Modified On : Mon Feb 29 17:57:35 2016
     14// Update Count     : 44
    1515//
    1616
     
    2424int main( void ) {
    2525        int i = ato( "-123" );
    26         sout | i | ' ' | "-123" | endl;
     26        sout | i | "-123" | endl;
    2727        unsigned int ui = ato( "123" );
    28         sout | ui | ' ' | "123" | endl;
     28        sout | ui | "123" | endl;
    2929        long int li = ato( "-123" );
    30         sout | li | ' ' | "-123" | endl;
     30        sout | li | "-123" | endl;
    3131        unsigned long int uli = ato( "123" );
    32         sout | uli | ' ' | "123" | endl;
     32        sout | uli | "123" | endl;
    3333        long long int lli = ato( "-123" );
    34         sout | lli | ' ' | "-123" | endl;
     34        sout | lli | "-123" | endl;
    3535        unsigned long long int ulli = ato( "123" );
    36         sout | ulli | ' ' | "123" | endl;
     36        sout | ulli | "123" | endl;
    3737        float f = ato( "-123.456" );
    38         sout | f | ' ' | "-123.456" | endl;
     38        sout | f | "-123.456" | endl;
    3939        double d = ato( "-123.4567890123456" );
    40         sout | d | ' ' | "-123.4567890123456" | endl;
     40        sout | d | "-123.4567890123456" | endl;
    4141        long double ld = ato( "-123.45678901234567890123456789" );
    42         sout | ld | ' ' | "-123.45678901234567890123456789" | endl;
     42        sout | ld | "-123.45678901234567890123456789" | endl;
    4343        float _Complex fc = ato( "-123.456-123.456i" );
    44         sout | fc | ' ' | "-123.456-123.456i" | endl;
     44        sout | fc | "-123.456-123.456i" | endl;
    4545        double _Complex dc = ato( "-123.4567890123456+123.4567890123456i" );
    46         sout | dc | ' ' | "-123.4567890123456+123.4567890123456i" | endl;
     46        sout | dc | "-123.4567890123456+123.4567890123456i" | endl;
    4747        long double _Complex ldc = ato( "123.45678901234567890123456789-123.45678901234567890123456789i" );
    48         sout | ldc | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
     48        sout | ldc | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
    4949        long double _Complex ldc2 = ato( "123.45678901234-123.4567890i" );
    50         sout | ldc2 | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
     50        sout | ldc2 | "123.45678901234-123.4567890i" | endl;
    5151} // main
    5252
  • src/examples/ctxts.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:11:19 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 18:10:21 2016
     13// Update Count     : 3
    1414//
    1515
    16 context has_f( type T ) {
     16trait has_f( type T ) {
    1717        T f( T );
    1818};
    1919
    20 context has_g( type U | has_f( U ) ) {
     20trait has_g( type U | has_f( U ) ) {
    2121        U g( U );
    2222};
  • src/examples/fstream_test.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 11:45:43 2016
    13 // Update Count     : 43
     12// Last Modified On : Wed Mar  2 15:12:21 2016
     13// Update Count     : 51
    1414//
    1515
     
    1818int main( void ) {
    1919        int nombre;
    20         sout | "Entrez un nombre, s'il vous plaît:\n";
     20        sout | "Entrez un nombre, s'il vous plaît:" | endl;
    2121        sin  | &nombre;
    22         sout | "Vous avez entré " | nombre | " stocké à l'adresse " | &nombre | endl;
    23         sout | "nombre " | nombre | " est "
    24                  | (nombre > 0 ? "plus grand que" :
    25                    nombre == 0 ? "égal à" : "moins de")
    26                  | " zéro" | endl;
     22        sout | "Vous avez entré" | nombre | "stocké à l'adresse" | &nombre | endl;
     23        sout | "nombre" | nombre | "est"
     24                 | (nombre > 0 ? "plus grand que" : nombre == 0 ? "égal à" : "moins de")
     25                 | "zéro" | endl;
    2726
    28         sout | "Entrez trois nombres, s'il vous plaît:\n";
     27        sout | "Entrez trois nombres, s'il vous plaît: " | endl;
    2928        int i, j, k;
    3029        sin  | &i | &j | &k;
    31         sout | "Vous avez entré " | "i:" | i | " j:" | j | " k:" | k | endl;
    32 
    33         sout | 3 | ' ' | 3.5 | ' ' | 'a' | ' ' | "abc" | endl;
     30        sout | "Vous avez entré" | "i:" | i | "j:" | j | "k:" | k | endl;
    3431}
    3532
  • src/examples/hello.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 12:11:45 2016
    13 // Update Count     : 8
     12// Last Modified On : Mon Feb 29 18:06:17 2016
     13// Update Count     : 10
    1414//
    1515
     
    1717
    1818int main() {
    19         sout | "Bonjour au monde!\n";
     19        sout | "Bonjour au monde!" | endl;
    2020}
    2121
  • src/examples/identity.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 12:17:32 2016
    13 // Update Count     : 10
     12// Last Modified On : Mon Feb 29 23:40:45 2016
     13// Update Count     : 12
    1414//
    1515
  • src/examples/index.h

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:17:31 2015
    13 // Update Count     : 1
     12// Last Modified On : Wed Mar  2 18:10:46 2016
     13// Update Count     : 2
    1414//
    1515
    16 context index( type T ) {
     16trait index( type T ) {
    1717        T ?+?( T, T );
    1818        T ?-?( T, T );
  • src/examples/it_out.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:41:23 2015
    13 // Update Count     : 4
     12// Last Modified On : Wed Mar  2 18:11:00 2016
     13// Update Count     : 5
    1414//
    1515
    1616typedef unsigned long streamsize_type;
    1717
    18 context ostream( dtype os_type ) {
     18trait ostream( dtype os_type ) {
    1919        os_type *write( os_type *, const char *, streamsize_type );
    2020        int fail( os_type * );
    2121};
    2222
    23 context writeable( type T ) {
     23trait writeable( type T ) {
    2424        forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, T );
    2525};
     
    2929forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, const char * );
    3030
    31 context istream( dtype is_type ) {
     31trait istream( dtype is_type ) {
    3232        is_type *read( is_type *, char *, streamsize_type );
    3333        is_type *unread( is_type *, char );
     
    3636};
    3737
    38 context readable( type T ) {
     38trait readable( type T ) {
    3939        forall( dtype is_type | istream( is_type ) ) is_type * ?<<?( is_type *, T );
    4040};
     
    4343forall( dtype is_type | istream( is_type ) ) is_type * ?>>?( is_type *, int* );
    4444
    45 context iterator( type iterator_type, type elt_type ) {
     45trait iterator( type iterator_type, type elt_type ) {
    4646        iterator_type ?++( iterator_type* );
    4747        iterator_type ++?( iterator_type* );
  • src/examples/minmax.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 12:17:53 2016
    13 // Update Count     : 47
     12// Last Modified On : Mon Feb 29 23:45:16 2016
     13// Update Count     : 49
    1414//
    1515
     
    2323
    2424        sout | "char\t\t\t"                                     | 'z' | ' ' | 'a' | "\tmin " | min( 'z', 'a' ) | endl;
    25         sout | "signed int\t\t"                         | 4 | ' ' | 3 | "\tmin " | min( 4, 3 ) | endl;
    26         sout | "unsigned int\t\t"                       | 4u | ' ' | 3u | "\tmin " | min( 4u, 3u ) | endl;
    27         sout | "signed long int\t\t"            | 4l | ' ' | 3l | "\tmin " | min( 4l, 3l ) | endl;
    28         sout | "unsigned long int\t"            | 4ul | ' ' | 3ul | "\tmin " | min( 4ul, 3ul ) | endl;
    29         sout | "signed long long int\t"         | 4ll | ' ' | 3ll | "\tmin " | min( 4ll, 3ll ) | endl;
    30         sout | "unsigned long long int\t"       | 4ull | ' ' | 3ull | "\tmin " | min( 4ull, 3ull ) | endl;
    31         sout | "float\t\t\t"                            | 4.0f | ' ' | 3.1f | "\tmin " | min( 4.0f, 3.1f ) | endl;
    32         sout | "double\t\t\t"                           | 4.0 | ' ' | 3.1 | "\tmin " | min( 4.0, 3.1 ) | endl;
    33         sout | "long double\t\t"                        | 4.0l | ' ' | 3.1l | "\tmin " | min( 4.0l, 3.1l ) | endl;
     25        sout | "signed int\t\t"                         | 4 | 3 | "\tmin" | min( 4, 3 ) | endl;
     26        sout | "unsigned int\t\t"                       | 4u | 3u | "\tmin" | min( 4u, 3u ) | endl;
     27        sout | "signed long int\t\t"            | 4l | 3l | "\tmin" | min( 4l, 3l ) | endl;
     28        sout | "unsigned long int\t"            | 4ul | 3ul | "\tmin" | min( 4ul, 3ul ) | endl;
     29        sout | "signed long long int\t"         | 4ll | 3ll | "\tmin" | min( 4ll, 3ll ) | endl;
     30        sout | "unsigned long long int\t"       | 4ull | 3ull | "\tmin" | min( 4ull, 3ull ) | endl;
     31        sout | "float\t\t\t"                            | 4.0f | 3.1f | "\tmin" | min( 4.0f, 3.1f ) | endl;
     32        sout | "double\t\t\t"                           | 4.0 | 3.1 | "\tmin" | min( 4.0, 3.1 ) | endl;
     33        sout | "long double\t\t"                        | 4.0l | 3.1l | "\tmin" | min( 4.0l, 3.1l ) | endl;
    3434
    3535        sout | endl;
    3636
    3737        sout | "char\t\t\t"                                     | 'z' | ' ' | 'a' | "\tmax " | max( 'z', 'a' ) | endl;
    38         sout | "signed int\t\t"                         | 4 | ' ' | 3 | "\tmax " | max( 4, 3 ) | endl;
    39         sout | "unsigned int\t\t"                       | 4u | ' ' | 3u | "\tmax " | max( 4u, 3u ) | endl;
    40         sout | "signed long int\t\t"            | 4l | ' ' | 3l | "\tmax " | max( 4l, 3l ) | endl;
    41         sout | "unsigned long int\t"            | 4ul | ' ' | 3ul | "\tmax " | max( 4ul, 3ul ) | endl;
    42         sout | "signed long long int\t"         | 4ll | ' ' | 3ll | "\tmax " | max( 4ll, 3ll ) | endl;
    43         sout | "unsigned long long int\t"       | 4ull | ' ' | 3ull | "\tmax " | max( 4ull, 3ull ) | endl;
    44         sout | "float\t\t\t"                            | 4.0f | ' ' | 3.1f | "\tmax " | max( 4.0f, 3.1f ) | endl;
    45         sout | "double\t\t\t"                           | 4.0 | ' ' | 3.1 | "\tmax " | max( 4.0, 3.1 ) | endl;
    46         sout | "long double\t\t"                        | 4.0l | ' ' | 3.1l | "\tmax " | max( 4.0l, 3.1l ) | endl;
     38        sout | "signed int\t\t"                         | 4 | 3 | "\tmax" | max( 4, 3 ) | endl;
     39        sout | "unsigned int\t\t"                       | 4u | 3u | "\tmax" | max( 4u, 3u ) | endl;
     40        sout | "signed long int\t\t"            | 4l | 3l | "\tmax" | max( 4l, 3l ) | endl;
     41        sout | "unsigned long int\t"            | 4ul | 3ul | "\tmax" | max( 4ul, 3ul ) | endl;
     42        sout | "signed long long int\t"         | 4ll | 3ll | "\tmax" | max( 4ll, 3ll ) | endl;
     43        sout | "unsigned long long int\t"       | 4ull | 3ull | "\tmax" | max( 4ull, 3ull ) | endl;
     44        sout | "float\t\t\t"                            | 4.0f | 3.1f | "\tmax" | max( 4.0f, 3.1f ) | endl;
     45        sout | "double\t\t\t"                           | 4.0 | 3.1 | "\tmax" | max( 4.0, 3.1 ) | endl;
     46        sout | "long double\t\t"                        | 4.0l | 3.1l | "\tmax" | max( 4.0l, 3.1l ) | endl;
    4747} // main
    4848
  • src/examples/prolog.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:25:52 2015
    13 // Update Count     : 1
     12// Last Modified On : Wed Mar  2 18:11:18 2016
     13// Update Count     : 2
    1414//
    1515
     
    2525void is_integer( int x ) {}
    2626
    27 context ArithmeticType( type T ) {
     27trait ArithmeticType( type T ) {
    2828        void is_arithmetic( T );
    2929};
    3030
    31 context IntegralType( type T | ArithmeticType( T ) ) {
     31trait IntegralType( type T | ArithmeticType( T ) ) {
    3232        void is_integer( T );
    3333};
  • src/examples/quad.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 12:19:24 2016
    13 // Update Count     : 6
     12// Last Modified On : Tue Mar  1 08:24:56 2016
     13// Update Count     : 7
    1414//
    1515
     
    2828int main() {
    2929        int N = 2;
    30         sout | "result of quad of " | N | " is " | quad( N ) | endl;
     30        sout | "result of quad of" | N | "is" | quad( N ) | endl;
    3131}
    3232
  • src/examples/sum.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Feb 16 23:49:31 2016
    13 // Update Count     : 189
     12// Last Modified On : Wed Mar  2 18:12:01 2016
     13// Update Count     : 194
    1414//
    1515
    1616#include <fstream>
    1717
    18 context sumable( type T ) {
     18trait sumable( type T ) {
    1919        const T 0;
    2020        T ?+?( T, T );
     
    4747                a[i] = v;
    4848        } // for
    49         sout | "sum from " | low | " to " | High | " is "
    50                  | (int)sum( size, a ) | ", check " | (int)s | endl;
     49        sout | "sum from" | low | "to" | High | "is"
     50                 | (int)sum( size, a ) | "" | ", check" | (int)s | endl;
    5151
    5252        int s = 0, a[size], v = low;
     
    5555                a[i] = (int)v;
    5656        } // for
    57         sout | "sum from " | low | " to " | High | " is "
    58                  | sum( size, (int *)a ) | ", check " | (int)s | endl;
     57        sout | "sum from" | low | "to" | High | "is"
     58                 | sum( size, (int *)a ) | "" | ", check" | (int)s | endl;
    5959
    6060        float s = 0.0, a[size], v = low / 10.0;
     
    6363                a[i] = (float)v;
    6464        } // for
    65         sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is "
    66                  | sum( size, (float *)a ) | ", check " | (float)s | endl;
     65        sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
     66                 | sum( size, (float *)a ) | "" | ", check" | (float)s | endl;
    6767
    6868        double s = 0, a[size], v = low / 10.0;
     
    7171                a[i] = (double)v;
    7272        } // for
    73         sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is "
    74                  | sum( size, (double *)a ) | ", check " | (double)s | endl;
     73        sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
     74                 | sum( size, (double *)a ) | "" | ", check" | (double)s | endl;
    7575
    7676        struct S { int i, j; } 0 = { 0, 0 }, 1 = { 1, 1 };
     
    7979        S ++?( S *t ) { *t += 1; return *t; }
    8080        S ?++( S *t ) { S temp = *t; *t += 1; return temp; }
    81         ofstream * ?|?( ofstream * os, S v ) { return os | v.i | ' ' | v.j; }
     81        ofstream * ?|?( ofstream * os, S v ) { return os | v.i | v.j; }
    8282
    8383        S s = 0, a[size], v = { low, low };
     
    8686                a[i] = (S)v;
    8787        } // for
    88         sout | "sum from " | low | " to " | High | " is "
    89                  | sum( size, (S *)a ) | ", check " | (S)s | endl;
     88        sout | "sum from" | low | "to" | High | "is"
     89                 | sum( size, (S *)a ) | "" | ", check" | (S)s | endl;
    9090} // main
    9191
  • src/examples/swap.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 12:22:12 2016
    13 // Update Count     : 64
     12// Last Modified On : Wed Mar  2 16:15:11 2016
     13// Update Count     : 65
    1414//
    1515
     
    5454
    5555        float f1 = 1.5, f2 = 2.5;
    56         sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\t\tswap ";
     56        sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\tswap ";
    5757        swap( &f1, &f2 );
    5858        sout | '\t' | f1 | ' ' | f2 | endl;
    5959
    6060        double d1 = 1.5, d2 = 2.5;
    61         sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\t\tswap ";
     61        sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\tswap ";
    6262        swap( &d1, &d2 );
    6363        sout | '\t' | d1 | ' ' | d2 | endl;
    6464
    6565        long double ld1 = 1.5, ld2 = 2.5;
    66         sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\t\tswap ";
     66        sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\tswap ";
    6767        swap( &ld1, &ld2 );
    6868        sout | '\t' | ld1 | ' ' | ld2 | endl;
  • src/examples/tests/vector_test.out.txt

    r9d7b3ea r36ebd03  
    11enter N elements and C-d on a separate line:
    22Array elements:
    3 1 2 3 4 5 
     31 2 3 4 5
    44Array elements reversed:
    5 5 4 3 2 1 
     55 4 3 2 1
  • src/libcfa/Makefile.in

    r9d7b3ea r36ebd03  
    231231          esac; \
    232232        done; \
    233         echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libcfa/Makefile'; \
     233        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libcfa/Makefile'; \
    234234        $(am__cd) $(top_srcdir) && \
    235           $(AUTOMAKE) --gnu src/libcfa/Makefile
     235          $(AUTOMAKE) --foreign src/libcfa/Makefile
    236236.PRECIOUS: Makefile
    237237Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
  • src/libcfa/builtins.cf

    r9d7b3ea r36ebd03  
    390390int __builtin_sprintf(char *, const char *, ...);
    391391int __builtin_sscanf(const char *, const char *, ...);
    392 int __builtin_vfprintf(struct _IO_FILE *, const char *, void **);
    393 int __builtin_vfscanf(struct _IO_FILE *, const char *, void **);
    394 int __builtin_vprintf(const char *, void **);
    395 int __builtin_vscanf(const char *, void **);
    396 int __builtin_vsnprintf(char *, unsigned long, const char *, void **);
    397 int __builtin_vsprintf(char *, const char *, void **);
    398 int __builtin_vsscanf(const char *, const char *, void **);
     392int __builtin_vfprintf(struct _IO_FILE *, const char *, __builtin_va_list);
     393int __builtin_vfscanf(struct _IO_FILE *, const char *, __builtin_va_list);
     394int __builtin_vprintf(const char *, __builtin_va_list);
     395int __builtin_vscanf(const char *, __builtin_va_list);
     396int __builtin_vsnprintf(char *, unsigned long, const char *, __builtin_va_list);
     397int __builtin_vsprintf(char *, const char *, __builtin_va_list);
     398int __builtin_vsscanf(const char *, const char *, __builtin_va_list);
    399399int __builtin_isalnum(int);
    400400int __builtin_isalpha(int);
     
    534534void __builtin_unwind_init();
    535535void __builtin_update_setjmp_buf(void *, int);
    536 void __builtin_va_copy(void **, void **);
    537 void __builtin_va_end(void **);
    538 void __builtin_va_start(void **, ...);
     536void __builtin_va_copy(__builtin_va_list, __builtin_va_list);
     537void __builtin_va_end(__builtin_va_list);
     538void __builtin_va_start(__builtin_va_list, ...);
    539539int __builtin_va_arg_pack();
    540540int __builtin_va_arg_pack_len();
     
    563563int __builtin___snprintf_chk(char *, unsigned long, int, unsigned long, const char *, ...);
    564564int __builtin___sprintf_chk(char *, int, unsigned long, const char *, ...);
    565 int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, void **);
    566 int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, void **);
     565int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, __builtin_va_list);
     566int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, __builtin_va_list);
    567567int __builtin___fprintf_chk(struct _IO_FILE *, int, const char *, ...);
    568568int __builtin___printf_chk(int, const char *, ...);
    569 int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, void **);
    570 int __builtin___vprintf_chk(int, const char *, void **);
     569int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, __builtin_va_list);
     570int __builtin___vprintf_chk(int, const char *, __builtin_va_list);
    571571void __cyg_profile_func_enter(void *, void *);
    572572void __cyg_profile_func_exit(void *, void *);
     
    583583const char * __builtin_FUNCTION();
    584584int __builtin_LINE();
    585 typedef void ** __builtin_va_list;
    586585extern const char *__PRETTY_FUNCTION__;
    587586typedef int wchar_t;
  • src/libcfa/fstream

    r9d7b3ea r36ebd03  
    77// fstream --
    88//
    9 // Author           : Richard C. Bilson
     9// Author           : Peter A. Buhr
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 14:02:01 2016
    13 // Update Count     : 22
     12// Last Modified On : Wed Mar  2 15:08:14 2016
     13// Update Count     : 78
    1414//
    1515
     
    1919#include "iostream"
    2020
    21 // implement context ostream
    22 struct ofstream;
     21enum { separateSize = 16 };
     22struct ofstream { void *file; int separate; char separator[separateSize]; };
    2323
    24 int fail( ofstream * os );
    25 int flush( ofstream * os );
    26 void open( ofstream ** os, const char * name, const char * mode );
    27 void close( ofstream * os );
    28 ofstream * write( ofstream * os, const char * data, streamsize_type size );
     24_Bool sepPrt( ofstream * );
     25void sepOn( ofstream * );
     26void sepOff( ofstream * );
     27void sepSet( ofstream *, const char * );
     28const char * sepGet( ofstream * );
     29void sepDisable( ofstream * );
     30void sepEnable( ofstream * );
     31int fail( ofstream * );
     32int flush( ofstream * );
     33void open( ofstream *, const char * name, const char * mode );
     34void close( ofstream * );
     35ofstream * write( ofstream *, const char * data, unsigned long int size );
     36int prtfmt( ofstream *, const char fmt[], ... );
    2937
    3038extern ofstream * sout, * serr;
    3139
    3240// implement context istream
    33 struct ifstream;
     41struct ifstream { void *file; };
    3442
    3543int fail( ifstream * is );
    3644int eof( ifstream * is );
    37 void open( ifstream ** is, const char * name, const char * mode );
     45void open( ifstream * is, const char * name, const char * mode );
    3846void close( ifstream * is );
    39 ifstream * get( ifstream * is, int * data );
    40 ifstream * read( ifstream * is, char * data, streamsize_type size );
     47ifstream * read( ifstream * is, char * data, unsigned long int size );
    4148ifstream * ungetc( ifstream * is, char c );
     49int scanfmt( ifstream *, const char fmt[], ... );
    4250
    4351extern ifstream *sin;
     
    4957// tab-width: 4 //
    5058// End: //
     59
  • src/libcfa/fstream.c

    r9d7b3ea r36ebd03  
    77// fstream.c --
    88//
    9 // Author           : Richard C. Bilson
     9// Author           : Peter A. Buhr
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 14:03:05 2016
    13 // Update Count     : 76
     12// Last Modified On : Mon Feb 29 18:41:10 2016
     13// Update Count     : 162
    1414//
    1515
     
    1717
    1818extern "C" {
    19 #include <stdio.h>
    20 #include <stdlib.h>
     19#include <stdio.h>                                                                              // vfprintf, vfscanf
     20#include <stdlib.h>                                                                             // exit
     21#include <stdarg.h>                                                                             // varargs
     22#include <string.h>                                                                             // strlen
     23#include <float.h>                                                                              // DBL_DIG, LDBL_DIG
     24#include <complex.h>                                                                    // creal, cimag
    2125}
    22 
    23 struct ofstream {
    24         FILE *file;
    25 };
    2626
    2727#define IO_MSG "I/O error "
    2828
     29_Bool sepPrt( ofstream * os ) { return os->separate == 1; }
     30void sepOn( ofstream * os ) { if ( os->separate != 2 ) os->separate = 1; }
     31void sepOff( ofstream * os ) { if ( os->separate != 2 ) os->separate = 0; }
     32void sepSet( ofstream * os, const char * s ) {
     33        strncpy( &(os->separator[0]), s, separateSize - 1 );
     34        os->separator[separateSize - 1] = '\0';
     35} // sepSet
     36const char * sepGet( ofstream * os ) { return &(os->separator[0]); }
     37void sepDisable( ofstream *os ) { os->separate = 2; }
     38void sepEnable( ofstream *os ) { os->separate = 0; }
     39
    2940int fail( ofstream * os ) {
    30         return ferror( os->file );
     41        return ferror( (FILE *)(os->file) );
    3142} // fail
    3243
    3344int flush( ofstream * os ) {
    34         return fflush( os->file );
     45        return fflush( (FILE *)(os->file) );
    3546} // flush
    3647
    37 void open( ofstream ** os, const char * name, const char * mode ) {
    38         FILE *t = fopen( name, mode );
    39         if ( t == 0 ) {                                                                         // do not change unless successful
     48void open( ofstream * os, const char * name, const char * mode ) {
     49        FILE *file = fopen( name, mode );
     50        if ( file == 0 ) {                                                                      // do not change unless successful
    4051                perror( IO_MSG "open output" );
    4152                exit( EXIT_FAILURE );
    4253        } // if
    43         (*os)->file = t;
     54        os->file = file;
     55        sepOff( os );
     56        sepSet( os, " " );
    4457} // open
    4558
    4659void close( ofstream * os ) {
    47         if ( os->file == stdout || os->file == stderr ) return;
     60        if ( (FILE *)(os->file) == stdout || (FILE *)(os->file) == stderr ) return;
    4861
    49         if ( fclose( os->file ) == EOF ) {
     62        if ( fclose( (FILE *)(os->file) ) == EOF ) {
    5063                perror( IO_MSG "close output" );
    5164        } // if
    5265} // close
    5366
    54 ofstream * write( ofstream * os, const char * data, streamsize_type size ) {
     67ofstream * write( ofstream * os, const char * data, unsigned long int size ) {
    5568        if ( fail( os ) ) {
    5669                fprintf( stderr, "attempt write I/O on failed stream\n" );
     
    5871        } // if
    5972
    60         if ( fwrite( data, 1, size, os->file ) != size ) {
     73        if ( fwrite( data, 1, size, (FILE *)(os->file) ) != size ) {
    6174                perror( IO_MSG "write" );
    6275                exit( EXIT_FAILURE );
     
    6578} // write
    6679
    67 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_) };
     80int prtfmt( ofstream * os, const char fmt[], ... ) {
     81    va_list args;
     82
     83    va_start( args, fmt );
     84    int len = vfprintf( (FILE *)(os->file), fmt, args );
     85        if ( len == EOF ) {
     86                if ( ferror( (FILE *)(os->file) ) ) {
     87                        fprintf( stderr, "invalid write\n" );
     88                        exit( EXIT_FAILURE );
     89                } // if
     90        } // if
     91    va_end( args );
     92        return len;
     93} // prtfmt
     94
     95
     96static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 0, { ' ', '\0' } };
    6897ofstream *sout = &soutFile;
    69 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_) };
     98static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 0, { ' ', '\0' } };
    7099ofstream *serr = &serrFile;
     100
    71101
    72102//---------------------------------------
    73103
    74 struct ifstream {
    75         FILE *file;
    76 };
    77104
    78105int fail( ifstream * is ) {
    79         return ferror( is->file );
     106        return ferror( (FILE *)(is->file) );
    80107} // fail
    81108
    82109int eof( ifstream * is ) {
    83         return feof( is->file );
     110        return feof( (FILE *)(is->file) );
    84111} // eof
    85112
    86 ifstream * get( ifstream * is, int * data ) {
    87         if ( fscanf( is->file, "%d", data ) == EOF ) {
    88                 if ( ferror( is->file ) ) {
    89                         fprintf( stderr, "invalid int read\n" );
    90                         exit( EXIT_FAILURE );
    91                 } // if
     113void open( ifstream * is, const char * name, const char * mode ) {
     114        FILE *t = fopen( name, mode );
     115        if ( t == 0 ) {                                                                         // do not change unless successful
     116                perror( IO_MSG "open input" );
     117                exit( EXIT_FAILURE );
    92118        } // if
    93         return is;
    94 } // read
     119        is->file = t;
     120} // open
    95121
    96 ifstream * read( ifstream * is, char * data, streamsize_type size ) {
     122void close( ifstream * is ) {
     123        if ( (FILE *)(is->file) == stdin ) return;
     124
     125        if ( fclose( (FILE *)(is->file) ) == EOF ) {
     126                perror( IO_MSG "close input" );
     127        } // if
     128} // close
     129
     130ifstream * read( ifstream * is, char * data, unsigned long int size ) {
    97131        if ( fail( is ) ) {
    98132                fprintf( stderr, "attempt read I/O on failed stream\n" );
     
    100134        } // if
    101135
    102         if ( fread( data, size, 1, is->file ) == 0 ) {
     136        if ( fread( data, size, 1, (FILE *)(is->file) ) == 0 ) {
    103137                perror( IO_MSG "read" );
    104138                exit( EXIT_FAILURE );
     
    113147        } // if
    114148
    115         if ( ungetc( c, is->file ) == EOF ) {
     149        if ( ungetc( c, (FILE *)(is->file) ) == EOF ) {
    116150                perror( IO_MSG "ungetc" );
    117151                exit( EXIT_FAILURE );
     
    120154} // ungetc
    121155
    122 void open( ifstream ** is, const char * name, const char * mode ) {
    123         FILE *t = fopen( name, mode );
    124         if ( t == 0 ) {                                                                         // do not change unless successful
    125                 perror( IO_MSG "open input" );
    126                 exit( EXIT_FAILURE );
     156int scanfmt( ifstream * is, const char fmt[], ... ) {
     157    va_list args;
     158
     159    va_start( args, fmt );
     160    int len = vfscanf( (FILE *)(is->file), fmt, args );
     161        if ( len == EOF ) {
     162                if ( ferror( (FILE *)(is->file) ) ) {
     163                        fprintf( stderr, "invalid read\n" );
     164                        exit( EXIT_FAILURE );
     165                } // if
    127166        } // if
    128         (*is)->file = t;
    129 } // open
     167    va_end( args );
     168        return len;
     169} // prtfmt
    130170
    131 void close( ifstream * is ) {
    132         if ( is->file == stdin ) return;
    133 
    134         if ( fclose( is->file ) == EOF ) {
    135                 perror( IO_MSG "close input" );
    136         } // if
    137 } // close
    138171
    139172static ifstream sinFile = { (FILE *)(&_IO_2_1_stdin_) };
  • src/libcfa/iostream

    r9d7b3ea r36ebd03  
    77// iostream --
    88//
    9 // Author           : Richard C. Bilson
     9// Author           : Peter A. Buhr
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 14:04:24 2016
    13 // Update Count     : 32
     12// Last Modified On : Wed Mar  2 18:05:27 2016
     13// Update Count     : 85
    1414//
    1515
    16 #ifndef IOSTREAM_H
    17 #define IOSTREAM_H
     16#ifndef __IOSTREAM_H__
     17#define __IOSTREAM_H__
    1818
    1919#include "iterator"
    2020
    21 typedef unsigned long streamsize_type;
    22 
    23 context ostream( dtype ostype ) {
     21trait ostream( dtype ostype ) {
     22        _Bool sepPrt( ostype * );
     23        void sepOn( ostype * );
     24        void sepOff( ostype * );
     25        void sepSet( ostype *, const char * );
     26        const char * sepGet( ostype * );
     27        void sepDisable( ostype * );
     28        void sepEnable( ostype * );
    2429        int fail( ostype * );
    2530        int flush( ostype * );
    26         ostype * write( ostype *, const char *, streamsize_type );
     31        void open( ostype * os, const char * name, const char * mode );
     32        void close( ostype * os );
     33        ostype * write( ostype *, const char *, unsigned long int );
     34        int prtfmt( ostype *, const char fmt[], ... );
    2735};
    28 context writeable( type T ) {
     36
     37trait writeable( otype T ) {
    2938        forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T );
    3039};
     
    3342
    3443forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char );
     44
     45forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, short int );
     46forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned short int );
    3547forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, int );
    3648forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned int );
     
    3951forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long int );
    4052forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long long int );
     53
    4154forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float ); // FIX ME: should not be required
    4255forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double );
    4356forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double );
     57
    4458forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float _Complex );
    4559forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double _Complex );
    4660forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double _Complex );
     61
    4762forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * );
    4863forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * );
    4964
    50 forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) retostype * ?|?( ostype *os, retostype * (* manip)(ostype*) );
     65forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) );
    5166forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * );
     67forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
     68forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * );
    5269
    5370// writes the range [begin, end) to the given stream
    54 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
     71forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
    5572void write( iterator_type begin, iterator_type end, os_type *os );
    5673
    57 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
     74forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
    5875void write_reverse( iterator_type begin, iterator_type end, os_type *os );
    5976
    6077//---------------------------------------
    6178
    62 context istream( dtype istype ) {
     79trait istream( dtype istype ) {
    6380        int fail( istype * );
    6481        int eof( istype * );
    65         istype * get( istype *, int * );
    66         istype * read( istype *, char *, streamsize_type );
     82        void open( istype * is, const char * name, const char * mode );
     83        void close( istype * is );
     84        istype * read( istype *, char *, unsigned long int );
    6785        istype * ungetc( istype *, char );
     86        int scanfmt( istype *, const char fmt[], ... );
    6887};
    6988
    70 context readable( type T ) {
     89trait readable( otype T ) {
    7190        forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T );
    7291};
    7392
    74 forall( dtype istype | istream( istype ) )
    75 istype * ?|?( istype *, char * );
     93forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char * );
    7694
    77 forall( dtype istype | istream( istype ) )
    78 istype * ?|?( istype *, int * );
     95forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, short int * );
     96forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned short int * );
     97forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, int * );
     98forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned int * );
     99forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long int * );
     100forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long long int * );
     101forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long int * );
     102forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long long int * );
    79103
    80 #endif // IOSTREAM_H
     104forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float * );
     105forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double * );
     106forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double * );
     107
     108forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float _Complex * );
     109forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double _Complex * );
     110forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex * );
     111
     112struct _Istream_str1 { char * s; };
     113_Istream_str1 str( char * );
     114forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str1 );
     115
     116struct _Istream_str2 { char * s; int size; };
     117_Istream_str2 str( char *, int size );
     118forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str2 );
     119
     120#endif // __IOSTREAM_H__
    81121
    82122// Local Variables: //
  • src/libcfa/iostream.c

    r9d7b3ea r36ebd03  
    77// iostream.c --
    88//
    9 // Author           : Richard C. Bilson
     9// Author           : Peter A. Buhr
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 14:19:56 2016
    13 // Update Count     : 76
     12// Last Modified On : Wed Mar  2 18:06:35 2016
     13// Update Count     : 208
    1414//
    1515
     
    2121#include <float.h>                                                                              // DBL_DIG, LDBL_DIG
    2222#include <complex.h>                                                                    // creal, cimag
     23#include <ctype.h>                                                                              // isspace, ispunct
    2324}
    2425
    2526forall( dtype ostype | ostream( ostype ) )
    2627ostype * ?|?( ostype *os, char c ) {
    27         return write( os, &c, 1 );
     28        prtfmt( os, "%c", c );
     29        return os;
     30} // ?|?
     31
     32forall( dtype ostype | ostream( ostype ) )
     33ostype * ?|?( ostype *os, short int si ) {
     34        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     35        prtfmt( os, "%hd", si );
     36        return os;
     37} // ?|?
     38
     39forall( dtype ostype | ostream( ostype ) )
     40ostype * ?|?( ostype *os, unsigned short int usi ) {
     41        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     42        prtfmt( os, "%hu", usi );
     43        return os;
    2844} // ?|?
    2945
    3046forall( dtype ostype | ostream( ostype ) )
    3147ostype * ?|?( ostype *os, int i ) {
    32         char buffer[32];
    33         return write( os, buffer, sprintf( buffer, "%d", i ) );
    34 } // ?|?
    35 
    36 forall( dtype ostype | ostream( ostype ) )
    37 ostype * ?|?( ostype *os, unsigned int i ) {
    38         char buffer[32];
    39         return write( os, buffer, sprintf( buffer, "%u", i ) );
    40 } // ?|?
    41 
    42 forall( dtype ostype | ostream( ostype ) )
    43 ostype * ?|?( ostype *os, long int i ) {
    44         char buffer[32];
    45         return write( os, buffer, sprintf( buffer, "%ld", i ) );
    46 } // ?|?
    47 
    48 forall( dtype ostype | ostream( ostype ) )
    49 ostype * ?|?( ostype *os, long long int i ) {
    50         char buffer[32];
    51         return write( os, buffer, sprintf( buffer, "%lld", i ) );
    52 } // ?|?
    53 
    54 forall( dtype ostype | ostream( ostype ) )
    55 ostype * ?|?( ostype *os, unsigned long int i ) {
    56         char buffer[32];
    57         return write( os, buffer, sprintf( buffer, "%lu", i ) );
    58 } // ?|?
    59 
    60 forall( dtype ostype | ostream( ostype ) )
    61 ostype * ?|?( ostype *os, unsigned long long int i ) {
    62         char buffer[32];
    63         return write( os, buffer, sprintf( buffer, "%llu", i ) );
     48        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     49        prtfmt( os, "%d", i );
     50        return os;
     51} // ?|?
     52
     53forall( dtype ostype | ostream( ostype ) )
     54ostype * ?|?( ostype *os, unsigned int ui ) {
     55        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     56        prtfmt( os, "%u", ui );
     57        return os;
     58} // ?|?
     59
     60forall( dtype ostype | ostream( ostype ) )
     61ostype * ?|?( ostype *os, long int li ) {
     62        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     63        prtfmt( os, "%ld", li );
     64        return os;
     65} // ?|?
     66
     67forall( dtype ostype | ostream( ostype ) )
     68ostype * ?|?( ostype *os, unsigned long int uli ) {
     69        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     70        prtfmt( os, "%lu", uli );
     71        return os;
     72} // ?|?
     73
     74forall( dtype ostype | ostream( ostype ) )
     75ostype * ?|?( ostype *os, long long int lli ) {
     76        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     77        prtfmt( os, "%lld", lli );
     78        return os;
     79} // ?|?
     80
     81forall( dtype ostype | ostream( ostype ) )
     82ostype * ?|?( ostype *os, unsigned long long int ulli ) {
     83        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     84        prtfmt( os, "%llu", ulli );
     85        return os;
    6486} // ?|?
    6587
    6688forall( dtype ostype | ostream( ostype ) )
    6789ostype * ?|?( ostype *os, float f ) {
    68         char buffer[32];
    69         return write( os, buffer, sprintf( buffer, "%g", f ) );
     90        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     91        prtfmt( os, "%g", f );
     92        return os;
    7093} // ?|?
    7194
    7295forall( dtype ostype | ostream( ostype ) )
    7396ostype * ?|?( ostype *os, double d ) {
    74         char buffer[32];
    75         return write( os, buffer, sprintf( buffer, "%.*lg", DBL_DIG, d ) );
    76 } // ?|?
    77 
    78 forall( dtype ostype | ostream( ostype ) )
    79 ostype * ?|?( ostype *os, long double d ) {
    80         char buffer[32];
    81         return write( os, buffer, sprintf( buffer, "%.*Lg", LDBL_DIG, d ) );
    82 } // ?|?
    83 
    84 forall( dtype ostype | ostream( ostype ) )
    85 ostype * ?|?( ostype *os, float _Complex c ) {
    86         return os | crealf( c ) | (cimagf( c ) < 0 ? "" : "+") | cimagf( c ) | 'i';
    87 } // ?|?
    88 
    89 forall( dtype ostype | ostream( ostype ) )
    90 ostype * ?|?( ostype *os, double _Complex c ) {
    91         return os | creal( c ) | (cimag( c ) < 0 ? "" : "+") | cimag( c ) | 'i';
    92 } // ?|?
    93 
    94 forall( dtype ostype | ostream( ostype ) )
    95 ostype * ?|?( ostype *os, long double _Complex c ) {
    96         return os | creall( c ) | (cimagl( c ) < 0 ? "" : "+") | cimagl( c ) | 'i';
     97        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     98        prtfmt( os, "%.*lg", DBL_DIG, d );
     99        return os;
     100} // ?|?
     101
     102forall( dtype ostype | ostream( ostype ) )
     103ostype * ?|?( ostype *os, long double ld ) {
     104        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     105        prtfmt( os, "%.*Lg", LDBL_DIG, ld );
     106        return os;
     107} // ?|?
     108
     109forall( dtype ostype | ostream( ostype ) )
     110ostype * ?|?( ostype *os, float _Complex fc ) {
     111        os | crealf( fc );
     112        if ( cimagf( fc ) >= 0 ) os | '+';
     113        os | "" | cimagf( fc ) | 'i';
     114        return os;
     115} // ?|?
     116
     117forall( dtype ostype | ostream( ostype ) )
     118ostype * ?|?( ostype *os, double _Complex dc ) {
     119        os | creal( dc );
     120        if ( cimag( dc ) >= 0 ) os | '+';
     121        os | "" | cimag( dc ) | 'i';
     122        return os;
     123} // ?|?
     124
     125forall( dtype ostype | ostream( ostype ) )
     126ostype * ?|?( ostype *os, long double _Complex ldc ) {
     127        os | creall( ldc );
     128        if ( cimagl( ldc ) >= 0 ) os | '+';
     129        os | "" | cimagl( ldc ) | 'i';
     130        return os;
     131} // ?|?
     132
     133forall( dtype ostype | ostream( ostype ) )
     134ostype * ?|?( ostype *os, const char *cp ) {
     135        int len = strlen( cp );
     136        // null string => no separator
     137  if ( len == 0 ) { sepOff( os ); return os; }
     138        // first character NOT spacing or special punctuation => add left separator
     139        if ( sepPrt( os ) && isspace( cp[0] ) == 0 && cp[0] != '.' && cp[0] != ',' ) {
     140                prtfmt( os, "%s", sepGet( os ) );
     141        } // if
     142        // last character is spacing or special punctuation => turn off separator for next item
     143        unsigned int posn = len - 1;
     144        if ( isspace( cp[posn] ) || cp[posn] == ':' || cp[posn] == '$' ) {
     145                sepOff( os );
     146        } else {
     147                sepOn( os );
     148        } // if
     149        return write( os, cp, len );
    97150} // ?|?
    98151
    99152forall( dtype ostype | ostream( ostype ) )
    100153ostype * ?|?( ostype *os, const void *p ) {
    101         char buffer[32];
    102         return write( os, buffer, sprintf( buffer, "%p", p ) );
    103 } // ?|?
    104 
    105 forall( dtype ostype | ostream( ostype ) )
    106 ostype * ?|?( ostype *os, const char *cp ) {
    107         return write( os, cp, strlen( cp ) );
    108 } // ?|?
    109 
    110 
    111 forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) )
    112 retostype * ?|?( ostype *os, retostype * (*manip)(ostype*) ) {
    113   return manip( os );
    114 }
     154        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     155        prtfmt( os, "%p", p );
     156        return os;
     157} // ?|?
     158
     159
     160forall( dtype ostype | ostream( ostype ) )
     161ostype * ?|?( ostype *os, ostype * (* manip)( ostype * ) ) {
     162        return manip( os );
     163} // ?|?
    115164
    116165forall( dtype ostype | ostream( ostype ) )
    117166ostype * endl( ostype * os ) {
    118         os | "\n";
     167        os | '\n';
    119168        flush( os );
     169        sepOff( os );
    120170        return os;
    121171} // endl
    122172
     173forall( dtype ostype | ostream( ostype ) )
     174ostype * sepOn( ostype * os ) {
     175        sepOn( os );
     176        return os;
     177} // sepOn
     178
     179forall( dtype ostype | ostream( ostype ) )
     180ostype * sepOff( ostype * os ) {
     181        sepOff( os );
     182        return os;
     183} // sepOff
     184
    123185//---------------------------------------
    124186
    125 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ),
    126                 dtype os_type | ostream( os_type ) )
    127 void write( iterator_type begin, iterator_type end, os_type *os ) {
    128         void print( elt_type i ) { os | i | ' '; }
     187forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
     188void write( iteratortype begin, iteratortype end, ostype *os ) {
     189        void print( elttype i ) { os | i; }
    129190        for_each( begin, end, print );
    130191} // ?|?
    131192
    132 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ),
    133                 dtype os_type | ostream( os_type ) )
    134 void write_reverse( iterator_type begin, iterator_type end, os_type *os ) {
    135         void print( elt_type i ) { os | i | ' '; }
     193forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
     194void write_reverse( iteratortype begin, iteratortype end, ostype *os ) {
     195        void print( elttype i ) { os | i; }
    136196        for_each_reverse( begin, end, print );
    137197} // ?|?
     
    140200
    141201forall( dtype istype | istream( istype ) )
    142 istype * ?|?( istype *is, char *cp ) {
    143         return read( is, cp, 1 );
    144 } // ?|?
    145 
    146 forall( dtype istype | istream( istype ) )
    147 istype * ?|?( istype *is, int *ip ) {
    148         return get( is, ip );
    149 } // ?|?
     202istype * ?|?( istype * is, char * c ) {
     203        scanfmt( is, "%c", c );
     204        return is;
     205} // ?|?
     206
     207forall( dtype istype | istream( istype ) )
     208istype * ?|?( istype * is, short int * si ) {
     209        scanfmt( is, "%hd", si );
     210        return is;
     211} // ?|?
     212
     213forall( dtype istype | istream( istype ) )
     214istype * ?|?( istype * is, unsigned short int * usi ) {
     215        scanfmt( is, "%hu", usi );
     216        return is;
     217} // ?|?
     218
     219forall( dtype istype | istream( istype ) )
     220istype * ?|?( istype * is, int * i ) {
     221        scanfmt( is, "%d", i );
     222        return is;
     223} // ?|?
     224
     225forall( dtype istype | istream( istype ) )
     226istype * ?|?( istype * is, unsigned int * ui ) {
     227        scanfmt( is, "%u", ui );
     228        return is;
     229} // ?|?
     230
     231forall( dtype istype | istream( istype ) )
     232istype * ?|?( istype * is, long int * li ) {
     233        scanfmt( is, "%ld", li );
     234        return is;
     235} // ?|?
     236
     237forall( dtype istype | istream( istype ) )
     238istype * ?|?( istype * is, unsigned long int * ulli ) {
     239        scanfmt( is, "%lu", ulli );
     240        return is;
     241} // ?|?
     242
     243forall( dtype istype | istream( istype ) )
     244istype * ?|?( istype * is, long long int * lli ) {
     245        scanfmt( is, "%lld", lli );
     246        return is;
     247} // ?|?
     248
     249forall( dtype istype | istream( istype ) )
     250istype * ?|?( istype * is, unsigned long long int * ulli ) {
     251        scanfmt( is, "%llu", ulli );
     252        return is;
     253} // ?|?
     254
     255
     256forall( dtype istype | istream( istype ) )
     257istype * ?|?( istype * is, float * f ) {
     258        scanfmt( is, "%f", f );
     259        return is;
     260} // ?|?
     261
     262forall( dtype istype | istream( istype ) )
     263istype * ?|?( istype * is, double * d ) {
     264        scanfmt( is, "%lf", d );
     265        return is;
     266} // ?|?
     267
     268forall( dtype istype | istream( istype ) )
     269istype * ?|?( istype * is, long double * ld ) {
     270        scanfmt( is, "%Lf", ld );
     271        return is;
     272} // ?|?
     273
     274
     275forall( dtype istype | istream( istype ) )
     276istype * ?|?( istype * is, float _Complex * fc ) {
     277        float re, im;
     278        scanfmt( is, "%g%gi", &re, &im );
     279        *fc = re + im * _Complex_I;
     280        return is;
     281} // ?|?
     282
     283forall( dtype istype | istream( istype ) )
     284istype * ?|?( istype * is, double _Complex * dc ) {
     285        double re, im;
     286        scanfmt( is, "%lf%lfi", &re, &im );
     287        *dc = re + im * _Complex_I;
     288        return is;
     289} // ?|?
     290
     291forall( dtype istype | istream( istype ) )
     292istype * ?|?( istype * is, long double _Complex * ldc ) {
     293        long double re, im;
     294        scanfmt( is, "%Lf%Lfi", &re, &im );
     295        *ldc = re + im * _Complex_I;
     296        return is;
     297} // ?|?
     298
     299_Istream_str1 str( char * s ) { _Istream_str1 s = { s }; return s; }
     300forall( dtype istype | istream( istype ) )
     301istype * ?|?( istype * is, _Istream_str1 str ) {
     302        scanfmt( is, "%s", str.s );
     303        return is;
     304} // str
     305
     306_Istream_str2 str( char * s, int size ) { _Istream_str2 s = { s, size }; return s; }
     307forall( dtype istype | istream( istype ) )
     308istype * ?|?( istype * is, _Istream_str2 str ) {
     309        char buf[16];
     310        sprintf( buf, "%%%ds", str.size );
     311        scanfmt( is, buf, str.s );
     312        return is;
     313} // str
    150314
    151315// Local Variables: //
  • src/libcfa/iterator

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jan 27 23:49:13 2016
    13 // Update Count     : 7
     12// Last Modified On : Wed Mar  2 18:06:05 2016
     13// Update Count     : 9
    1414//
    1515
     
    1818
    1919// An iterator can be used to traverse a data structure.
    20 context iterator( type iterator_type, type elt_type ) {
     20trait iterator( otype iterator_type, otype elt_type ) {
    2121        // point to the next element
    2222//      iterator_type ?++( iterator_type * );
     
    3232};
    3333
    34 context iterator_for( type iterator_type, type collection_type, type elt_type | iterator( iterator_type, elt_type ) ) {
     34trait iterator_for( otype iterator_type, otype collection_type, otype elt_type | iterator( iterator_type, elt_type ) ) {
    3535//      [ iterator_type begin, iterator_type end ] get_iterators( collection_type );
    3636        iterator_type begin( collection_type );
     
    3838};
    3939
    40 forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
     40forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
    4141void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
    4242
    43 forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
     43forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
    4444void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
    4545
  • src/libcfa/iterator.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jan 26 17:16:07 2016
    13 // Update Count     : 26
     12// Last Modified On : Wed Mar  2 18:08:11 2016
     13// Update Count     : 27
    1414//
    1515
    1616#include "iterator"
    1717
    18 forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
     18forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
    1919void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
    2020        for ( iterator_type i = begin; i != end; ++i ) {
     
    2323}
    2424
    25 forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
     25forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
    2626void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
    2727        for ( iterator_type i = end; i != begin; ) {
  • src/libcfa/prelude.cf

    r9d7b3ea r36ebd03  
     1# 2 "prelude.cf"  // needed for error messages from this file
    12//                               -*- Mode: C -*-
    23//
     
    89// Created On       : Sat Nov 29 07:23:41 2014
    910// Last Modified By : Peter A. Buhr
    10 // Last Modified On : Mon Jan  4 11:13:26 2016
    11 // Update Count     : 81
     11// Last Modified On : Wed Mar  2 18:03:41 2016
     12// Update Count     : 89
    1213//
    1314
     
    6364long double _Complex    ?--( long double _Complex * ),          ?--( volatile long double _Complex * );
    6465
    65 forall( type T ) T *                     ?++(                T ** );
    66 forall( type T ) const T *               ?++( const          T ** );
    67 forall( type T ) volatile T *            ?++(       volatile T ** );
    68 forall( type T ) const volatile T *      ?++( const volatile T ** );
    69 forall( type T ) T *                     ?--(                T ** );
    70 forall( type T ) const T *               ?--( const          T ** );
    71 forall( type T ) volatile T *            ?--(       volatile T ** );
    72 forall( type T ) const volatile T *      ?--( const volatile T ** );
    73 
    74 forall( type T ) lvalue T                ?[?](                T *,          ptrdiff_t );
    75 forall( type T ) const lvalue T          ?[?]( const          T *,          ptrdiff_t );
    76 forall( type T ) volatile lvalue T       ?[?](       volatile T *,          ptrdiff_t );
    77 forall( type T ) const volatile lvalue T ?[?]( const volatile T *,          ptrdiff_t );
    78 forall( type T ) lvalue T                ?[?](          ptrdiff_t,                T * );
    79 forall( type T ) const lvalue T          ?[?](          ptrdiff_t, const          T * );
    80 forall( type T ) volatile lvalue T       ?[?](          ptrdiff_t,       volatile T * );
    81 forall( type T ) const volatile lvalue T ?[?](          ptrdiff_t, const volatile T * );
     66forall( otype T ) T *                    ?++(                T ** );
     67forall( otype T ) const T *              ?++( const          T ** );
     68forall( otype T ) volatile T *           ?++(       volatile T ** );
     69forall( otype T ) const volatile T *     ?++( const volatile T ** );
     70forall( otype T ) T *                    ?--(                T ** );
     71forall( otype T ) const T *              ?--( const          T ** );
     72forall( otype T ) volatile T *           ?--(       volatile T ** );
     73forall( otype T ) const volatile T *     ?--( const volatile T ** );
     74
     75forall( otype T ) lvalue T               ?[?](                T *,          ptrdiff_t );
     76forall( otype T ) const lvalue T         ?[?]( const          T *,          ptrdiff_t );
     77forall( otype T ) volatile lvalue T      ?[?](       volatile T *,          ptrdiff_t );
     78forall( otype T ) const volatile lvalue T ?[?]( const volatile T *,         ptrdiff_t );
     79forall( otype T ) lvalue T               ?[?](          ptrdiff_t,                T * );
     80forall( otype T ) const lvalue T         ?[?](          ptrdiff_t, const          T * );
     81forall( otype T ) volatile lvalue T      ?[?](          ptrdiff_t,       volatile T * );
     82forall( otype T ) const volatile lvalue T ?[?](         ptrdiff_t, const volatile T * );
    8283
    8384// ------------------------------------------------------------
     
    101102long double _Complex    ++?( long double _Complex * ),          --?( long double _Complex * );
    102103
    103 forall( type T ) T *                     ++?(                T ** );
    104 forall( type T ) const T *               ++?( const          T ** );
    105 forall( type T ) volatile T *            ++?(       volatile T ** );
    106 forall( type T ) const volatile T *      ++?( const volatile T ** );
    107 forall( type T ) T *                     --?(                T ** );
    108 forall( type T ) const T *               --?( const          T ** );
    109 forall( type T ) volatile T *            --?(       volatile T ** );
    110 forall( type T ) const volatile T *      --?( const volatile T ** );
    111 
    112 forall( type T ) lvalue T                *?(                 T * );
    113 forall( type T ) const lvalue T          *?( const           T * );
    114 forall( type T ) volatile lvalue T       *?(       volatile  T * );
    115 forall( type T ) const volatile lvalue T *?( const volatile  T * );
     104forall( otype T ) T *                    ++?(                T ** );
     105forall( otype T ) const T *              ++?( const          T ** );
     106forall( otype T ) volatile T *           ++?(       volatile T ** );
     107forall( otype T ) const volatile T *     ++?( const volatile T ** );
     108forall( otype T ) T *                    --?(                T ** );
     109forall( otype T ) const T *              --?( const          T ** );
     110forall( otype T ) volatile T *           --?(       volatile T ** );
     111forall( otype T ) const volatile T *     --?( const volatile T ** );
     112
     113forall( otype T ) lvalue T               *?(                 T * );
     114forall( otype T ) const lvalue T                 *?( const           T * );
     115forall( otype T ) volatile lvalue T      *?(       volatile  T * );
     116forall( otype T ) const volatile lvalue T *?( const volatile  T * );
    116117forall( ftype FT ) lvalue FT             *?( FT * );
    117118
     
    183184long double _Complex    ?+?( long double _Complex, long double _Complex ),      ?-?( long double _Complex, long double _Complex );
    184185
    185 forall( type T ) T *                    ?+?(                T *,          ptrdiff_t );
    186 forall( type T ) T *                    ?+?(          ptrdiff_t,                T * );
    187 forall( type T ) const T *              ?+?( const          T *,          ptrdiff_t );
    188 forall( type T ) const T *              ?+?(          ptrdiff_t, const          T * );
    189 forall( type T ) volatile T *           ?+?(       volatile T *,          ptrdiff_t );
    190 forall( type T ) volatile T *           ?+?(          ptrdiff_t,       volatile T * );
    191 forall( type T ) const volatile T *     ?+?( const volatile T *,          ptrdiff_t );
    192 forall( type T ) const volatile T *     ?+?(          ptrdiff_t, const volatile T * );
    193 forall( type T ) T *                    ?-?(                T *,          ptrdiff_t );
    194 forall( type T ) const T *              ?-?( const          T *,          ptrdiff_t );
    195 forall( type T ) volatile T *           ?-?(       volatile T *,          ptrdiff_t );
    196 forall( type T ) const volatile T *     ?-?( const volatile T *,          ptrdiff_t );
    197 forall( type T ) ptrdiff_t              ?-?( const volatile T *, const volatile T * );
     186forall( otype T ) T *                   ?+?(                T *,          ptrdiff_t );
     187forall( otype T ) T *                   ?+?(          ptrdiff_t,                T * );
     188forall( otype T ) const T *             ?+?( const          T *,          ptrdiff_t );
     189forall( otype T ) const T *             ?+?(          ptrdiff_t, const          T * );
     190forall( otype T ) volatile T *          ?+?(       volatile T *,          ptrdiff_t );
     191forall( otype T ) volatile T *          ?+?(          ptrdiff_t,       volatile T * );
     192forall( otype T ) const volatile T *    ?+?( const volatile T *,          ptrdiff_t );
     193forall( otype T ) const volatile T *    ?+?(          ptrdiff_t, const volatile T * );
     194forall( otype T ) T *                   ?-?(                T *,          ptrdiff_t );
     195forall( otype T ) const T *             ?-?( const          T *,          ptrdiff_t );
     196forall( otype T ) volatile T *          ?-?(       volatile T *,          ptrdiff_t );
     197forall( otype T ) const volatile T *    ?-?( const volatile T *,          ptrdiff_t );
     198forall( otype T ) ptrdiff_t             ?-?( const volatile T *, const volatile T * );
    198199
    199200// ------------------------------------------------------------
     
    431432forall( ftype FT ) FT *                 ?=?( FT * volatile *, forall( ftype FT2 ) FT2 * );
    432433
    433 forall( type T ) T *                    ?+=?(                T *          *, ptrdiff_t );
    434 forall( type T ) T *                    ?+=?(                T * volatile *, ptrdiff_t );
    435 forall( type T ) const T *              ?+=?( const          T *          *, ptrdiff_t );
    436 forall( type T ) const T *              ?+=?( const          T * volatile *, ptrdiff_t );
    437 forall( type T ) volatile T *           ?+=?(       volatile T *          *, ptrdiff_t );
    438 forall( type T ) volatile T *           ?+=?(       volatile T * volatile *, ptrdiff_t );
    439 forall( type T ) const volatile T *     ?+=?( const volatile T *          *, ptrdiff_t );
    440 forall( type T ) const volatile T *     ?+=?( const volatile T * volatile *, ptrdiff_t );
    441 forall( type T ) T *                    ?-=?(                T *          *, ptrdiff_t );
    442 forall( type T ) T *                    ?-=?(                T * volatile *, ptrdiff_t );
    443 forall( type T ) const T *              ?-=?( const          T *          *, ptrdiff_t );
    444 forall( type T ) const T *              ?-=?( const          T * volatile *, ptrdiff_t );
    445 forall( type T ) volatile T *           ?-=?(       volatile T *          *, ptrdiff_t );
    446 forall( type T ) volatile T *           ?-=?(       volatile T * volatile *, ptrdiff_t );
    447 forall( type T ) const volatile T *     ?-=?( const volatile T *          *, ptrdiff_t );
    448 forall( type T ) const volatile T *     ?-=?( const volatile T * volatile *, ptrdiff_t );
     434forall( otype T ) T *                   ?+=?(                T *          *, ptrdiff_t );
     435forall( otype T ) T *                   ?+=?(                T * volatile *, ptrdiff_t );
     436forall( otype T ) const T *             ?+=?( const          T *          *, ptrdiff_t );
     437forall( otype T ) const T *             ?+=?( const          T * volatile *, ptrdiff_t );
     438forall( otype T ) volatile T *          ?+=?(       volatile T *          *, ptrdiff_t );
     439forall( otype T ) volatile T *          ?+=?(       volatile T * volatile *, ptrdiff_t );
     440forall( otype T ) const volatile T *    ?+=?( const volatile T *          *, ptrdiff_t );
     441forall( otype T ) const volatile T *    ?+=?( const volatile T * volatile *, ptrdiff_t );
     442forall( otype T ) T *                   ?-=?(                T *          *, ptrdiff_t );
     443forall( otype T ) T *                   ?-=?(                T * volatile *, ptrdiff_t );
     444forall( otype T ) const T *             ?-=?( const          T *          *, ptrdiff_t );
     445forall( otype T ) const T *             ?-=?( const          T * volatile *, ptrdiff_t );
     446forall( otype T ) volatile T *          ?-=?(       volatile T *          *, ptrdiff_t );
     447forall( otype T ) volatile T *          ?-=?(       volatile T * volatile *, ptrdiff_t );
     448forall( otype T ) const volatile T *    ?-=?( const volatile T *          *, ptrdiff_t );
     449forall( otype T ) const volatile T *    ?-=?( const volatile T * volatile *, ptrdiff_t );
    449450
    450451_Bool                   ?=?( _Bool *, _Bool ),                                  ?=?( volatile _Bool *, _Bool );
  • src/libcfa/stdlib

    r9d7b3ea r36ebd03  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Feb  5 15:21:18 2016
    13 // Update Count     : 61
     12// Last Modified On : Wed Mar  2 17:38:21 2016
     13// Update Count     : 64
    1414//
    1515
     
    2020} // extern "C"
    2121
    22 forall( type T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
    23 forall( type T ) T * memset( T * ptr );                                 // remove when default value available
     22forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
     23forall( otype T ) T * memset( T * ptr );                                        // remove when default value available
    2424
    25 forall( type T ) T * malloc( void );
    26 forall( type T ) T * malloc( char fill );
    27 forall( type T ) T * malloc( size_t size );
    28 forall( type T ) T * malloc( T * ptr, size_t size );
    29 forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill );
    30 forall( type T ) T * calloc( size_t size );
    31 forall( type T ) T * realloc( T * ptr, size_t size );
    32 forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill );
     25forall( otype T ) T * malloc( void );
     26forall( otype T ) T * malloc( char fill );
     27forall( otype T ) T * malloc( T * ptr, size_t size );
     28forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );
     29forall( otype T ) T * calloc( size_t size );
     30forall( otype T ) T * realloc( T * ptr, size_t size );
     31forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );
    3332
    34 forall( type T ) T * aligned_alloc( size_t alignment );
    35 forall( type T ) T * memalign( size_t alignment );              // deprecated
    36 forall( type T ) int posix_memalign( T ** ptr, size_t alignment );
     33forall( otype T ) T * aligned_alloc( size_t alignment );
     34forall( otype T ) T * memalign( size_t alignment );             // deprecated
     35forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
    3736
    3837//---------------------------------------
     
    6665//---------------------------------------
    6766
    68 forall( type T | { int ?<?( T, T ); } )
     67forall( otype T | { int ?<?( T, T ); } )
    6968T * bsearch( const T key, const T * arr, size_t dimension );
    7069
    71 forall( type T | { int ?<?( T, T ); } )
     70forall( otype T | { int ?<?( T, T ); } )
    7271void qsort( const T * arr, size_t dimension );
    7372
    7473//---------------------------------------
    7574
    76 forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )
     75forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
    7776[ T, T ] div( T t1, T t2 );
    7877
     
    108107//---------------------------------------
    109108
    110 forall( type T | { int ?<?( T, T ); } )
     109forall( otype T | { int ?<?( T, T ); } )
    111110T min( const T t1, const T t2 );
    112111
    113 forall( type T | { int ?>?( T, T ); } )
     112forall( otype T | { int ?>?( T, T ); } )
    114113T max( const T t1, const T t2 );
    115114
    116 forall( type T )
     115forall( otype T )
    117116void swap( T * t1, T * t2 );
    118117
  • src/libcfa/stdlib.c

    r9d7b3ea r36ebd03  
    1010// Created On       : Thu Jan 28 17:10:29 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 10 15:45:56 2016
    13 // Update Count     : 140
     12// Last Modified On : Wed Mar  2 17:38:47 2016
     13// Update Count     : 143
    1414//
    1515
     
    2727} // extern "C"
    2828
    29 forall( type T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill
     29forall( otype T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill
    3030        printf( "memset1\n" );
    3131    return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) );
    3232} // memset
    33 forall( type T ) T * memset( T * ptr ) {                                // remove when default value available
     33forall( otype T ) T * memset( T * ptr ) {                               // remove when default value available
    3434        printf( "memset2\n" );
    3535    return (T *)memset( ptr, 0, malloc_usable_size( ptr ) );
    3636} // memset
    3737
    38 forall( type T ) T * malloc( void ) {
     38forall( otype T ) T * malloc( void ) {
    3939        printf( "malloc1\n" );
    4040    return (T *)malloc( sizeof(T) );
    4141} // malloc
    42 forall( type T ) T * malloc( size_t size ) {
     42forall( otype T ) T * malloc( size_t size ) {
    4343        printf( "malloc2\n" );
    4444    return (T *)(void *)malloc( size );
    4545} // malloc
    46 forall( type T ) T * malloc( char fill ) {
     46forall( otype T ) T * malloc( char fill ) {
    4747        printf( "malloc3\n" );
    4848        T * ptr = (T *)malloc( sizeof(T) );
     
    5050} // malloc
    5151
    52 forall( type T ) T * calloc( size_t size ) {
     52forall( otype T ) T * calloc( size_t size ) {
    5353        printf( "calloc\n" );
    5454    return (T *)calloc( size, sizeof(T) );
    5555} // calloc
    5656
    57 forall( type T ) T * realloc( T * ptr, size_t size ) {
     57forall( otype T ) T * realloc( T * ptr, size_t size ) {
    5858        printf( "realloc1\n" );
    5959    return (T *)(void *)realloc( (void *)ptr, size );
    6060} // realloc
    61 forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
     61forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
    6262        printf( "realloc2\n" );
    6363    char * nptr = (T *)(void *)realloc( (void *)ptr, size );
     
    6767} // realloc
    6868
    69 forall( type T ) T * malloc( T * ptr, size_t size ) {
     69forall( otype T ) T * malloc( T * ptr, size_t size ) {
    7070        printf( "malloc4\n" );
    7171    return (T *)realloc( ptr, size );
    7272} // malloc
    73 forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
     73forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
    7474        printf( "malloc5\n" );
    7575    return (T *)realloc( ptr, size, fill );
    7676} // malloc
    7777
    78 forall( type T ) T * aligned_alloc( size_t alignment ) {
     78forall( otype T ) T * aligned_alloc( size_t alignment ) {
    7979        printf( "aligned_alloc\n" );
    8080    return (T *)memalign( alignment, sizeof(T) );
    8181} // aligned_alloc
    8282
    83 forall( type T ) T * memalign( size_t alignment ) {
     83forall( otype T ) T * memalign( size_t alignment ) {
    8484        printf( "memalign\n" );
    8585    return (T *)memalign( alignment, sizeof(T) );
    8686} // memalign
    8787
    88 forall( type T ) int posix_memalign( T ** ptr, size_t alignment ) {
     88forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ) {
    8989        printf( "posix_memalign\n" );
    9090    return posix_memalign( (void **)ptr, alignment, sizeof(T) );
     
    123123        return ulli;
    124124}
     125
    125126float ato( const char * ptr ) {
    126127        float f;
     
    138139        return ld;
    139140}
     141
    140142float _Complex ato( const char * ptr ) {
    141143        float re, im;
     
    172174        return strtoull( sptr, eptr, base );
    173175}
     176
    174177float strto( const char * sptr, char ** eptr ) {
    175178        return strtof( sptr, eptr );
     
    181184        return strtold( sptr, eptr );
    182185}
     186
    183187float _Complex strto( const char * sptr, char ** eptr ) {
    184188        float re, im;
     
    208212//---------------------------------------
    209213
    210 forall( type T | { int ?<?( T, T ); } )
     214forall( otype T | { int ?<?( T, T ); } )
    211215T * bsearch( const T key, const T * arr, size_t dimension ) {
    212216        int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; }
     
    214218} // bsearch
    215219
    216 forall( type T | { int ?<?( T, T ); } )
     220forall( otype T | { int ?<?( T, T ); } )
    217221void qsort( const T * arr, size_t dimension ) {
    218222        int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; }
     
    222226//---------------------------------------
    223227
    224 forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )
     228forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
    225229[ T, T ] div( T t1, T t2 ) { /* return [ t1 / t2, t1 % t2 ]; */ }
    226230
     
    253257//---------------------------------------
    254258
    255 forall( type T | { int ?<?( T, T ); } )
     259forall( otype T | { int ?<?( T, T ); } )
    256260T min( const T t1, const T t2 ) {
    257261        return t1 < t2 ? t1 : t2;
    258262} // min
    259263
    260 forall( type T | { int ?>?( T, T ); } )
     264forall( otype T | { int ?>?( T, T ); } )
    261265T max( const T t1, const T t2 ) {
    262266        return t1 > t2 ? t1 : t2;
    263267} // max
    264268
    265 forall( type T )
     269forall( otype T )
    266270void swap( T * t1, T * t2 ) {
    267271        T temp = *t1;
Note: See TracChangeset for help on using the changeset viewer.