Changeset 1048b31


Ignore:
Timestamp:
May 2, 2016, 3:28:16 PM (9 years ago)
Author:
Rob Schluntz <rschlunt@…>
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, with_gc
Children:
1b7ea43
Parents:
1f6e009 (diff), e945826 (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' into global-init

Files:
14 added
3 deleted
49 edited
2 moved

Legend:

Unmodified
Added
Removed
  • doc/refrat/Makefile

    r1f6e009 r1048b31  
    11## Define the appropriate configuration variables.
    22
    3 Macros =
    4 TeXLIB = .:${Macros}:
     3TeXLIB = .:../bibliography/:../LaTeXmacros/:
    54LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex
    6 BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex
     5BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex
    76
    87## Define the text source files.
     
    4443        dvips $< -o $@
    4544
    46 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib
     45${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \
     46                ../LaTeXmacros/common.tex ../LaTeXmacros/indexstyle ../bibliography/cfa.bib
    4747        # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
    4848        if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
     
    5454        -${BibTeX} ${basename $@}
    5555        # Make index from *.aux entries and input index at end of document
    56         makeindex -s indexstyle ${basename $@}.idx
     56        makeindex -s ../LaTeXmacros/indexstyle ${basename $@}.idx
    5757        ${LaTeX} ${basename $@}.tex
    5858        # Run again to get index title into table of contents
  • doc/refrat/refrat.tex

    r1f6e009 r1048b31  
     1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%%
     2%%
     3%% Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
     4%%
     5%% The contents of this file are covered under the licence agreement in the
     6%% file "LICENCE" distributed with Cforall.
     7%%
     8%% refrat.tex --
     9%%
     10%% Author           : Peter A. Buhr
     11%% Created On       : Wed Apr  6 14:52:25 2016
     12%% Last Modified By : Peter A. Buhr
     13%% Last Modified On : Sat Apr 30 13:45:40 2016
     14%% Update Count     : 29
     15%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     16
    117% requires tex packages: texlive-base texlive-latex-base tex-common texlive-humanities texlive-latex-extra texlive-fonts-recommended
     18
     19% red highlighting ®...® (registered trademark sumbol)
     20% blue highlighting ©...© (copyright symbol)
     21% latex escape §...§ (section symbol)
     22% keyword escape ¶...¶ (pilcrow symbol)
     23% math escape $...$ (dollar symbol)
    224
    325\documentclass[openright,twoside]{report}
     
    527
    628% Latex packages used in the document.
    7 
    829\usepackage{fullpage,times}
    930\usepackage{xspace}
     
    1132\usepackage{listings}
    1233\usepackage{comment}
    13 \usepackage{latexsym}                                   % \Box
    14 \usepackage{mathptmx}                                   % better math font with "times"
     34\usepackage{latexsym}                                   % \Box
     35\usepackage{mathptmx}                                   % better math font with "times"
    1536\usepackage[pagewise]{lineno}
    1637\renewcommand{\linenumberfont}{\scriptsize\sffamily}
     
    2142%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    2243
    23 % Names used in the document.
    24 
    25 \newcommand{\CFA}{C$\forall$\xspace}    % set language symbolic name
    26 \newcommand{\CFL}{Cforall\xspace}               % set language text name
    27 \newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
    28 \def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
     44% Bespoke macros used in the document.
     45\input{common}
    2946
    3047%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    3148
    32 % Bespoke macros used in the document.
    33 
    34 \makeatletter
    35 % allow escape sequence in lstinline
    36 %\usepackage{etoolbox}
    37 %\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}}
    38 
    39 \renewcommand\small{%
    40    \@setfontsize\small{8.5}{11}%
    41    \abovedisplayskip 8.5pt \@plus 3pt \@minus 4pt
    42    \abovedisplayshortskip \z@ \@plus 2pt
    43    \belowdisplayshortskip 4pt \@plus 2pt \@minus 2pt
    44    \def\@listi{\leftmargin\leftmargini
    45                \topsep 4pt \@plus 2pt \@minus 2pt
    46                \parsep 2pt \@pluspt \@minuspt
    47                \itemsep \parsep}%
    48    \belowdisplayskip \abovedisplayskip
    49 }
    50 \usepackage{relsize}            % must be after change to small
    51 
    52 \renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}}
    53 \renewenvironment{itemize}{\begin{list}{\labelitemi}{\topsep=5pt\itemsep=5pt\parsep=0pt}}{\end{list}}
    54 
    55 %  Reduce size of chapter/section titles
    56 \def\@makechapterhead#1{%
    57   \vspace*{50\p@}%
    58   {\parindent \z@ \raggedright \normalfont
    59     \ifnum \c@secnumdepth >\m@ne
    60         \large\bfseries \@chapapp\space \thechapter
    61         \par\nobreak
    62         \vskip 5\p@
    63     \fi
    64     \interlinepenalty\@M
    65     \Large \bfseries #1\par\nobreak
    66     \vskip 50\p@
    67   }}
    68 \def\@makeschapterhead#1{%
    69   \vspace*{50\p@}%
    70   {\parindent \z@ \raggedright
    71     \normalfont
    72     \interlinepenalty\@M
    73     \Large \bfseries  #1\par\nobreak
    74     \vskip 50\p@
    75   }}
    76 \renewcommand\section{\@startsection{section}{1}{\z@}{-3.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\large\bfseries}}
    77 \renewcommand\subsection{\@startsection{subsection}{2}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
    78 \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
    79 \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{-1em}{\normalfont\normalsize\bfseries}}
    80 
    81 % index macros
    82 \newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
    83 \newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
    84 \newcommand{\see}[1]{\emph{see} #1}
    85 
    86 % Define some commands that produce formatted index entries suitable for cross-references.
    87 % ``\spec'' produces entries for specifications of entities.  ``\impl'' produces entries for their
    88 % implementations, and ``\use'' for their uses.
    89 
    90 %  \newcommand{\bold}[1]{{\bf #1}}
    91 %  \def\spec{\@bsphack\begingroup
    92 %             \def\protect##1{\string##1\space}\@sanitize
    93 %             \@wrxref{|bold}}
    94 \def\impl{\@bsphack\begingroup
    95           \def\protect##1{\string##1\space}\@sanitize
    96           \@wrxref{|definition}}
    97 \newcommand{\indexcode}[1]{{\lstinline$#1$}}
    98 \def\use{\@bsphack\begingroup
    99          \def\protect##1{\string##1\space}\@sanitize
    100          \@wrxref{|hyperpage}}
    101 \def\@wrxref#1#2{\let\thepage\relax
    102     \xdef\@gtempa{\write\@indexfile{\string
    103     \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa
    104     \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
    105 %\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}}
    106 %\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
    107 
    108 % inline text and lowercase index: \Index{inline and lowercase index text}
    109 % inline text and as-in index: \Index[as-is index text]{inline text}
    110 % inline text but index with different as-is text: \Index[index text]{inline text}
    111 \newcommand{\Index}{\@ifstar\@sIndex\@Index}
    112 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
    113 \newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
    114 \makeatother
    115 
    116 % blocks and titles
    117 \newenvironment{rationale}{%
    118   \begin{quotation}\noindent$\Box$\enspace
    119 }{%
    120   \hfill\enspace$\Box$\end{quotation}
    121 }%
    122 \newcommand{\define}[1]{\emph{#1\/}\index{#1}}
    123 \newcommand{\rewrite}{\(\Rightarrow\)}
    124 \newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent}
    125 \newcommand{\examples}{\paragraph{Examples}~\par\noindent}
    126 \newcommand{\semantics}{\paragraph{Semantics}~\par\noindent}
    127 \newcommand{\constraints}{\paragraph{Constraints}~\par\noindent}
    128 \newcommand{\predefined}{\paragraph{Predefined Identifiers}~\par\noindent}
    129 
    130 % BNF macros
    131 \def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]}
    132 \let\endsyntax=\endtrivlist
    133 \newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}}
    134 \newcommand{\rhs}{\hfil\break\hbox{\hskip1in}}
    135 \newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}}
    136 \newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}}
    137 \newcommand{\opt}{$_{opt}$\ }
    138 
    139 % adjust varioref package with default "section" and "page" titles, and optional title with faraway page numbers
    140 % \VRef{label} => Section 2.7, \VPageref{label} => page 17
    141 % \VRef[Figure]{label} => Figure 3.4, \VPageref{label} => page 17
    142 \renewcommand{\reftextfaceafter}{\unskip}
    143 \renewcommand{\reftextfacebefore}{\unskip}
    144 \renewcommand{\reftextafter}{\unskip}
    145 \renewcommand{\reftextbefore}{\unskip}
    146 \renewcommand{\reftextfaraway}[1]{\unskip, p.~\pageref{#1}}
    147 \renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}}
    148 \newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}}
    149 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
    150 
    151 % CFA based on ANSI C
    152 \lstdefinelanguage{CFA}[ANSI]{C}%
    153 {morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,trait,disable,dtype,enable,
    154         fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,otype,restrict,_Static_assert,
    155         _Thread_local,throw,throwResume,try,},
    156 }%
    157 
    158 \lstset{
    159 language=CFA,
    160 columns=flexible,
    161 basicstyle=\sf\relsize{-1},
    162 tabsize=4,
    163 xleftmargin=\parindent,
    164 escapechar=@,
    165 keepspaces=true,
    166 showstringspaces=false,
    167 showlines=true,
    168 }%
    169 
    170 \makeatletter
    171 % replace/adjust listings characters that look bad in sanserif
    172 \lst@CCPutMacro
    173 \lst@ProcessOther{"2D}{\lst@ttfamily{-{}}{{\ttfamily\upshape -}}} % replace minus
    174 \lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than
    175 \lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than
    176 \lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % replace circumflex
    177 \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore
    178 \lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % replace tilde
    179 %\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde
    180 \@empty\z@\@empty
    181 \makeatother
    182 
    183 \setcounter{secnumdepth}{3}     % number subsubsections
    184 \setcounter{tocdepth}{3}                % subsubsections in table of contents
     49\setcounter{secnumdepth}{3}                             % number subsubsections
     50\setcounter{tocdepth}{3}                                % subsubsections in table of contents
    18551\makeindex
    18652
     
    18955\begin{document}
    19056\pagestyle{headings}
    191 \linenumbers                                    % comment out to turn off line numbering
     57\linenumbers                                            % comment out to turn off line numbering
    19258
    19359\title{\Huge
     60\vspace*{1in}
    19461\CFA (\CFL) Reference Manual and Rationale
    19562}% title
     
    22693
    22794This document is a reference manual and rationale for \CFA, a polymorphic extension of the C programming language.
    228 It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and occasionally compares \CFA to {\CC} \cite{c++}.
     95It makes frequent reference to the {\c11} standard \cite{C11}, and occasionally compares \CFA to {\CC} \cite{C++}.
    22996
    23097The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering differs).
     
    264131\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
    265132\Index{name space}, instead of hiding them.
    266 The outer declaration is hidden if the two declarations have \Index{compatible type}, or if one declares an array type and the other declares a pointer type and the element type and pointed-at type are compatible, or if one has function type and the other is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or
    267 \lstinline$typedef$\use{typedef} declaration and the other is not.  The outer declaration becomes
     133The 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
     134\lstinline@typedef@\use{typedef} declaration and the other is not.  The outer declaration becomes
    268135\Index{visible} when the scope of the inner declaration terminates.
    269136\begin{rationale}
    270 Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same scope;
     137Hence, a \CFA program can declare an \lstinline@int v@ and a \lstinline@float v@ in the same scope;
    271138a {\CC} program can not.
    272139\end{rationale}
     
    282149Identifiers with \Index{no linkage} always denote unique entities.
    283150\begin{rationale}
    284 A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$;
     151A \CFA program can declare an \lstinline@extern int v@ and an \lstinline@extern float v@;
    285152a C program cannot.
    286153\end{rationale}
     
    305172\end{lstlisting}
    306173
    307 The type parameters in an instantiation of a generic type must satisfy any constraints in the forall specifier on the type generator declaration, e.g., \lstinline$sumable$.
     174The 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@.
    308175The instantiation then has the semantics that would result if the type parameters were substituted into the type generator declaration by macro substitution.
    309176
     
    366233In \CFA, these conversions play a role in overload resolution, and collectively are called the \define{safe arithmetic conversion}s.
    367234
    368 Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$.
    369 Let \(unsigned_{mr}\) be the unsigned integer type with maximal rank.
     235Let \lstinline@int$_r$@ and \lstinline@unsigned$_r$@ be the signed and unsigned integer types with integer conversion rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$.
     236Let \lstinline@unsigned$_{mr}$@ be the unsigned integer type with maximal rank.
    370237
    371238The following conversions are \emph{direct} safe arithmetic conversions.
     
    374241The \Index{integer promotion}s.
    375242\item
    376 For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\) to \(unsigned_r\).
    377 \item
    378 For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\).
    379 \item
    380 Conversion from \(unsigned_{mr}\) to \lstinline$float$.
     243For every rank $r$ greater than or equal to the rank of \lstinline@int@, conversion from \lstinline@int$_r$@ to \lstinline@unsigned$_r$@.
     244\item
     245For every rank $r$ greater than or equal to the rank of \lstinline@int@, where \lstinline@int$_{r+1}$@ exists and can represent all values of \lstinline@unsigned$_r$@, conversion from \lstinline@unsigned$_r$@ to \lstinline@int$_{r+1}$@.
     246\item
     247Conversion from \lstinline@unsigned$_{mr}$@ to \lstinline@float@.
    381248\item
    382249Conversion from an enumerated type to its compatible integer type.
    383250\item
    384 Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to \lstinline$long double$.
    385 \item
    386 Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$, and from \lstinline$double _Complex$ to \lstinline$long double _Complex$.
     251Conversion from \lstinline@float@ to \lstinline@double@, and from \lstinline@double@ to \lstinline@long double@.
     252\item
     253Conversion from \lstinline@float _Complex@ to \lstinline@double _Complex@, and from \lstinline@double _Complex@ to \lstinline@long double _Complex@.
    387254\begin{sloppypar}
    388255\item
    389 Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from \lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the implementation supports imaginary types.
     256Conversion from \lstinline@float _Imaginary@ to \lstinline@double _Imaginary@, and from \lstinline@double _Imaginary@ to \lstinline@long double _Imaginary@, if the implementation supports imaginary types.
    390257\end{sloppypar}
    391258\end{itemize}
    392259
    393 If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic conversion.
     260If 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.
    394261
    395262\begin{rationale}
     
    414281        int x, y;
    415282};
    416 void move_by( struct point * p1, struct point * p2 ) {@\impl{move_by}@
     283void move_by( struct point * p1, struct point * p2 ) {§\impl{move_by}§
    417284        p1->x += p2.x;
    418285        p1->y += p2.y;
     
    424291move_to( &cp1, &cp2 );
    425292\end{lstlisting}
    426 Thanks to implicit conversion, the two arguments that \lstinline$move_by()$ receives are pointers to
    427 \lstinline$cp1$'s second member and \lstinline$cp2$'s second member.
     293Thanks to implicit conversion, the two arguments that \lstinline@move_by()@ receives are pointers to
     294\lstinline@cp1@'s second member and \lstinline@cp2@'s second member.
    428295
    429296
     
    467334a direct safe arithmetic conversion;
    468335\item
    469 from any object type or incomplete type to \lstinline$void$;
    470 \item
    471 from a pointer to any non-\lstinline$void$ type to a pointer to \lstinline$void$;
     336from any object type or incomplete type to \lstinline@void@;
     337\item
     338from a pointer to any non-\lstinline@void@ type to a pointer to \lstinline@void@;
    472339\item
    473340from a pointer to any type to a pointer to a more qualified version of the type\index{qualified type};
     
    480347Conversions that are not safe conversions are \define{unsafe conversion}s.
    481348\begin{rationale}
    482 As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type.
     349As in C, there is an implicit conversion from \lstinline@void *@ to any pointer type.
    483350This is clearly dangerous, and {\CC} does not have this implicit conversion.
    484351\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.
     
    506373\begin{itemize}
    507374\item
    508 The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1.
    509 The cost of an implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and then to \lstinline$double$.
    510 
    511 \item
    512 If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2:
    513 \lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$.
    514 Otherwise, \lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1.
    515 
    516 \item
    517 If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost of \lstinline$unsigned$ to \lstinline$long$ is 1.
     375The cost of an implicit conversion from \lstinline@int@ to \lstinline@long@ is 1.
     376The 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@.
     377
     378\item
     379If \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:
     380\lstinline@unsigned short@ to \lstinline@int@ to \lstinline@unsigned@.
     381Otherwise, \lstinline@unsigned short@ is converted directly to \lstinline@unsigned@, and the cost is 1.
     382
     383\item
     384If \lstinline@long@ can represent all the values of \lstinline@unsigned@, then the conversion cost of \lstinline@unsigned@ to \lstinline@long@ is 1.
    518385Otherwise, the conversion is an unsafe conversion, and its conversion cost is undefined.
    519386\end{itemize}
     
    523390\begin{syntax}
    524391\oldlhs{keyword}
    525         \rhs \lstinline$forall$
    526         \rhs \lstinline$lvalue$
    527         \rhs \lstinline$trait$
    528         \rhs \lstinline$dtype$
    529         \rhs \lstinline$ftype$
    530         \rhs \lstinline$type$
     392        \rhs \lstinline@forall@
     393        \rhs \lstinline@lvalue@
     394        \rhs \lstinline@trait@
     395        \rhs \lstinline@dtype@
     396        \rhs \lstinline@ftype@
     397        \rhs \lstinline@otype@
    531398\end{syntax}
    532399
     
    535402
    536403\CFA allows operator \Index{overloading} by associating operators with special function identifiers.
    537 Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them as overloadable identifiers.
     404Furthermore, 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.
    538405Programmers can use these identifiers to declare functions and objects that implement operators and constants for their own types.
    539406
     
    544411\begin{syntax}
    545412\oldlhs{identifier}
    546 \rhs \lstinline$0$
    547 \rhs \lstinline$1$
     413\rhs \lstinline@0@
     414\rhs \lstinline@1@
    548415\end{syntax}
    549416
    550 \index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0} and ``\lstinline$1$''\impl{1} are identifiers.
     417\index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline@0@''\impl{0} and ``\lstinline@1@''\impl{1} are identifiers.
    551418No other tokens defined by the rules for integer constants are considered to be identifiers.
    552419\begin{rationale}
    553 Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C.
     420Why ``\lstinline@0@'' and ``\lstinline@1@''? Those integers have special status in C.
    554421All scalar types can be incremented and decremented, which is defined in terms of adding or subtracting 1.
    555 The operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any scalar arguments, and are defined in terms of comparison against 0.
     422The operations ``\lstinline@&&@'', ``\lstinline@||@'', and ``\lstinline@!@'' can be applied to any scalar arguments, and are defined in terms of comparison against 0.
    556423A \nonterm{constant-expression} that evaluates to 0 is effectively compatible with every pointer type.
    557424
    558425In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to 0 as a special case.
    559426However, 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.
    560 Defining special constants for a user-defined type is more efficient than defining a conversion to the type from \lstinline$_Bool$.
    561 
    562 Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers have special status in C.
    563 A facility that let programmers declare specific constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement.
     427Defining special constants for a user-defined type is more efficient than defining a conversion to the type from \lstinline@_Bool@.
     428
     429Why \emph{just} ``\lstinline@0@'' and ``\lstinline@1@''? Why not other integers? No other integers have special status in C.
     430A facility that let programmers declare specific constants---``\lstinline@const Rational 12@'', for instance---would not be much of an improvement.
    564431Some facility for defining the creation of values of programmer-defined types from arbitrary integer tokens would be needed.
    565432The complexity of such a feature doesn't seem worth the gain.
     
    577444\begin{tabular}[t]{ll}
    578445%identifier & operation \\ \hline
    579 \lstinline$?[?]$ & subscripting \impl{?[?]}\\
    580 \lstinline$?()$ & function call \impl{?()}\\
    581 \lstinline$?++$ & postfix increment \impl{?++}\\
    582 \lstinline$?--$ & postfix decrement \impl{?--}\\
    583 \lstinline$++?$ & prefix increment \impl{++?}\\
    584 \lstinline$--?$ & prefix decrement \impl{--?}\\
    585 \lstinline$*?$ & dereference \impl{*?}\\
    586 \lstinline$+?$ & unary plus \impl{+?}\\
    587 \lstinline$-?$ & arithmetic negation \impl{-?}\\
    588 \lstinline$~?$ & bitwise negation \impl{~?}\\
    589 \lstinline$!?$ & logical complement \impl{"!?}\\
    590 \lstinline$?*?$ & multiplication \impl{?*?}\\
    591 \lstinline$?/?$ & division \impl{?/?}\\
     446\lstinline@?[?]@ & subscripting \impl{?[?]}\\
     447\lstinline@?()@ & function call \impl{?()}\\
     448\lstinline@?++@ & postfix increment \impl{?++}\\
     449\lstinline@?--@ & postfix decrement \impl{?--}\\
     450\lstinline@++?@ & prefix increment \impl{++?}\\
     451\lstinline@--?@ & prefix decrement \impl{--?}\\
     452\lstinline@*?@ & dereference \impl{*?}\\
     453\lstinline@+?@ & unary plus \impl{+?}\\
     454\lstinline@-?@ & arithmetic negation \impl{-?}\\
     455\lstinline@~?@ & bitwise negation \impl{~?}\\
     456\lstinline@!?@ & logical complement \impl{"!?}\\
     457\lstinline@?*?@ & multiplication \impl{?*?}\\
     458\lstinline@?/?@ & division \impl{?/?}\\
    592459\end{tabular}\hfil
    593460\begin{tabular}[t]{ll}
    594461%identifier & operation \\ \hline
    595 \lstinline$?%?$ & remainder \impl{?%?}\\
    596 \lstinline$?+?$ & addition \impl{?+?}\\
    597 \lstinline$?-?$ & subtraction \impl{?-?}\\
    598 \lstinline$?<<?$ & left shift \impl{?<<?}\\
    599 \lstinline$?>>?$ & right shift \impl{?>>?}\\
    600 \lstinline$?<?$ & less than \impl{?<?}\\
    601 \lstinline$?<=?$ & less than or equal \impl{?<=?}\\
    602 \lstinline$?>=?$ & greater than or equal \impl{?>=?}\\
    603 \lstinline$?>?$ & greater than \impl{?>?}\\
    604 \lstinline$?==?$ & equality \impl{?==?}\\
    605 \lstinline$?!=?$ & inequality \impl{?"!=?}\\
    606 \lstinline$?&?$ & bitwise AND \impl{?&?}\\
     462\lstinline@?%?@ & remainder \impl{?%?}\\
     463\lstinline@?+?@ & addition \impl{?+?}\\
     464\lstinline@?-?@ & subtraction \impl{?-?}\\
     465\lstinline@?<<?@ & left shift \impl{?<<?}\\
     466\lstinline@?>>?@ & right shift \impl{?>>?}\\
     467\lstinline@?<?@ & less than \impl{?<?}\\
     468\lstinline@?<=?@ & less than or equal \impl{?<=?}\\
     469\lstinline@?>=?@ & greater than or equal \impl{?>=?}\\
     470\lstinline@?>?@ & greater than \impl{?>?}\\
     471\lstinline@?==?@ & equality \impl{?==?}\\
     472\lstinline@?!=?@ & inequality \impl{?"!=?}\\
     473\lstinline@?&?@ & bitwise AND \impl{?&?}\\
    607474\end{tabular}\hfil
    608475\begin{tabular}[t]{ll}
    609476%identifier & operation \\ \hline
    610 \lstinline$?^?$ & exclusive OR \impl{?^?}\\
    611 \lstinline$?|?$ & inclusive OR \impl{?"|?}\\
    612 \lstinline$?=?$ & simple assignment \impl{?=?}\\
    613 \lstinline$?*=?$ & multiplication assignment \impl{?*=?}\\
    614 \lstinline$?/=?$ & division assignment \impl{?/=?}\\
    615 \lstinline$?%=?$ & remainder assignment \impl{?%=?}\\
    616 \lstinline$?+=?$ & addition assignment \impl{?+=?}\\
    617 \lstinline$?-=?$ & subtraction assignment \impl{?-=?}\\
    618 \lstinline$?<<=?$ & left-shift assignment \impl{?<<=?}\\
    619 \lstinline$?>>=?$ & right-shift assignment \impl{?>>=?}\\
    620 \lstinline$?&=?$ & bitwise AND assignment \impl{?&=?}\\
    621 \lstinline$?^=?$ & exclusive OR assignment \impl{?^=?}\\
    622 \lstinline$?|=?$ & inclusive OR assignment \impl{?"|=?}\\
     477\lstinline@?^?@ & exclusive OR \impl{?^?}\\
     478\lstinline@?|?@ & inclusive OR \impl{?"|?}\\
     479\lstinline@?=?@ & simple assignment \impl{?=?}\\
     480\lstinline@?*=?@ & multiplication assignment \impl{?*=?}\\
     481\lstinline@?/=?@ & division assignment \impl{?/=?}\\
     482\lstinline@?%=?@ & remainder assignment \impl{?%=?}\\
     483\lstinline@?+=?@ & addition assignment \impl{?+=?}\\
     484\lstinline@?-=?@ & subtraction assignment \impl{?-=?}\\
     485\lstinline@?<<=?@ & left-shift assignment \impl{?<<=?}\\
     486\lstinline@?>>=?@ & right-shift assignment \impl{?>>=?}\\
     487\lstinline@?&=?@ & bitwise AND assignment \impl{?&=?}\\
     488\lstinline@?^=?@ & exclusive OR assignment \impl{?^=?}\\
     489\lstinline@?|=?@ & inclusive OR assignment \impl{?"|=?}\\
    623490\end{tabular}
    624491\hfil
     
    635502
    636503\begin{rationale}
    637 The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs.  For instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a
    638 \CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''.
     504The 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
     505\CFA compiler detects a syntax error because it treats ``\lstinline@?--@'' as an identifier, not as the two tokens ``\lstinline@?@'' and ``\lstinline@--@''.
    639506\end{rationale}
    640507
     
    643510\begin{itemize}
    644511\item
    645 The logical operators ``\lstinline$&&$'' and ``\lstinline$||$'', and the conditional operator
    646 ``\lstinline$?:$''.
     512The logical operators ``\lstinline@&&@'' and ``\lstinline@||@'', and the conditional operator
     513``\lstinline@?:@''.
    647514These 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.
    648 Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$'' for user-defined types is enough to allow them to be used in logical expressions.
     515Note 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.
    649516
    650517\item
     
    655522\item
    656523The ``address of'' operator.
    657 It would seem useful to define a unary ``\lstinline$&$'' operator that returns values of some programmer-defined pointer-like type.
     524It would seem useful to define a unary ``\lstinline@&@'' operator that returns values of some programmer-defined pointer-like type.
    658525The problem lies with the type of the operator.
    659 Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type
    660 \lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$.
    661 The expression might be treated as a call to the unary function ``\lstinline$&?$''.
    662 Now what is the type of the function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by value, and there is no way to create a useful pointer-like result from a value.
    663 Hence the parameter must have type \lstinline$T *$.
    664 But then the expression must be rewritten as ``\lstinline$p = &?( &x )$''
     526Consider the expression ``\lstinline@p = &x@'', where \lstinline@x@ is of type
     527\lstinline@T@ and \lstinline@p@ has the programmer-defined type \lstinline@T_ptr@.
     528The expression might be treated as a call to the unary function ``\lstinline@&?@''.
     529Now 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.
     530Hence the parameter must have type \lstinline@T *@.
     531But then the expression must be rewritten as ``\lstinline@p = &?( &x )@''
    665532---which doesn't seem like progress!
    666533
    667534The 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''.
    668 It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$.
    669 
    670 \item
    671 The \lstinline$sizeof$ operator.
     535It seems simpler to define a conversion function from \lstinline@T *@ to \lstinline@T_ptr@.
     536
     537\item
     538The \lstinline@sizeof@ operator.
    672539It is already defined for every object type, and intimately tied into the language's storage allocation model.
    673540Redefining it seems pointless.
    674541
    675542\item
    676 The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''.
     543The ``member of'' operators ``\lstinline@.@'' and ``\lstinline@->@''.
    677544These are not really infix operators, since their right ``operand'' is not a value or object.
    678545
     
    711578The ``fewest unsafe conversions'' rule ensures that the usual conversions are done, if possible.
    712579The ``lowest total expression cost'' rule chooses the proper common type.
    713 The odd-looking ``highest argument conversion cost'' rule ensures that, when unary expressions must be converted, conversions of function results are preferred to conversion of function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$.
     580The 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@.
    714581
    715582The ``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.
    716583It also gives preference to monomorphic values (such as the
    717 \lstinline$int$ \lstinline$0$) over polymorphic values (such as the \Index{null pointer}
    718 \lstinline$0$\use{0}).
     584\lstinline@int@ \lstinline@0@) over polymorphic values (such as the \Index{null pointer}
     585\lstinline@0@\use{0}).
    719586However, interpretations that call polymorphic functions are preferred to interpretations that perform unsafe conversions, because those conversions potentially lose accuracy or violate strong typing.
    720587
    721588There are two notable differences between \CFA's overload resolution rules and the rules for
    722 {\CC} defined in \cite{c++}.
     589{\CC} defined in \cite{C++}.
    723590First, the result type of a function plays a role.
    724591In {\CC}, a function call must be completely resolved based on the arguments to the call in most circumstances.
     
    736603\begin{rationale}
    737604Predefined functions and constants have internal linkage because that simplifies optimization in traditional compile-and-link environments.
    738 For instance, ``\lstinline$an_int + an_int$'' is equivalent to ``\lstinline$?+?(an_int, an_int)$''.
     605For instance, ``\lstinline@an_int + an_int@'' is equivalent to ``\lstinline@?+?(an_int, an_int)@''.
    739606If integer addition has not been redefined in the current scope, a compiler can generate code to perform the addition directly.
    740607If predefined functions had external linkage, this optimization would be difficult.
     
    762629\rhs \nonterm{constant}
    763630\rhs \nonterm{string-literal}
    764 \rhs \lstinline$($ \nonterm{expression} \lstinline$)$
     631\rhs \lstinline@(@ \nonterm{expression} \lstinline@)@
    765632\rhs \nonterm{generic-selection}
    766633\end{syntax}
     
    768635\predefined
    769636\begin{lstlisting}
    770 const int 1;@\use{1}@
    771 const int 0;@\use{0}@
     637const int 1;§\use{1}§
     638const int 0;§\use{0}§
    772639forall( dtype DT ) DT * const 0;
    773640forall( ftype FT ) FT * const 0;
     
    778645
    779646A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type and value defined by {\c11}.
    780 The predefined integer identifiers ``\lstinline$1$'' and ``\lstinline$0$'' have the integer values 1 and 0, respectively.
    781 The other two predefined ``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when specialized\index{specialization} with a data type or function type respectively, produce a null pointer of that type.
     647The predefined integer identifiers ``\lstinline@1@'' and ``\lstinline@0@'' have the integer values 1 and 0, respectively.
     648The 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.
    782649
    783650A parenthesised expression has the same interpretations as the contained \nonterm{expression}.
    784651
    785652\examples
    786 The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe conversion from \lstinline$void *$ to \lstinline$const void *$.
     653The 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 *@.
    787654In each case, the null pointer conversion is better\index{best valid interpretations} than the unsafe conversion of the integer
    788 \lstinline$0$ to a pointer.
     655\lstinline@0@ to a pointer.
    789656
    790657\begin{rationale}
     
    792659
    793660\CFA does not have C's concept of ``null pointer constants'', which are not typed values but special strings of tokens.
    794 The C token ``\lstinline$0$'' is an expression of type \lstinline$int$ with the value ``zero'', and it \emph{also} is a null pointer constant.
     661The C token ``\lstinline@0@'' is an expression of type \lstinline@int@ with the value ``zero'', and it \emph{also} is a null pointer constant.
    795662Similarly,
    796 ``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer, and it also is a null pointer constant.
    797 However, in C, ``\lstinline$(void *)(void *)0$'' is
     663``\lstinline@(void *)0@ is an expression of type \lstinline@(void *)@ whose value is a null pointer, and it also is a null pointer constant.
     664However, in C, ``\lstinline@(void *)(void *)0@'' is
    798665\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.
    799666
     
    802669\begin{lstlisting}
    803670forall( dtype DT ) DT * const 0;
    804 \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.
     671\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.
    805672The only such value is the null pointer.
    806673Therefore the type \emph{alone} is enough to identify a null pointer.
     
    812679
    813680\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.
    814 If a generic selection has no \lstinline$default$ generic association, the best interpretation of its controlling expression shall have type compatible with exactly one of the types named in its generic association list.
     681If 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.
    815682
    816683\semantics
     
    823690\lhs{postfix-expression}
    824691\rhs \nonterm{primary-expression}
    825 \rhs \nonterm{postfix-expression} \lstinline$[$ \nonterm{expression} \lstinline$]$
    826 \rhs \nonterm{postfix-expression} \lstinline$($
    827          \nonterm{argument-expression-list}\opt \lstinline$)$
    828 \rhs \nonterm{postfix-expression} \lstinline$.$ \nonterm{identifier}
    829 \rhs \nonterm{postfix-expression} \lstinline$->$ \nonterm{identifier}
    830 \rhs \nonterm{postfix-expression} \lstinline$++$
    831 \rhs \nonterm{postfix-expression} \lstinline$--$
    832 \rhs \lstinline$($ \nonterm{type-name} \lstinline$)$ \lstinline${$ \nonterm{initializer-list} \lstinline$}$
    833 \rhs \lstinline$($ \nonterm{type-name} \lstinline$)$ \lstinline${$ \nonterm{initializer-list} \lstinline$,$ \lstinline$}$
     692\rhs \nonterm{postfix-expression} \lstinline@[@ \nonterm{expression} \lstinline@]@
     693\rhs \nonterm{postfix-expression} \lstinline@(@
     694         \nonterm{argument-expression-list}\opt \lstinline@)@
     695\rhs \nonterm{postfix-expression} \lstinline@.@ \nonterm{identifier}
     696\rhs \nonterm{postfix-expression} \lstinline@->@ \nonterm{identifier}
     697\rhs \nonterm{postfix-expression} \lstinline@++@
     698\rhs \nonterm{postfix-expression} \lstinline@--@
     699\rhs \lstinline@(@ \nonterm{type-name} \lstinline@)@ \lstinline@{@ \nonterm{initializer-list} \lstinline@}@
     700\rhs \lstinline@(@ \nonterm{type-name} \lstinline@)@ \lstinline@{@ \nonterm{initializer-list} \lstinline@,@ \lstinline@}@
    834701\lhs{argument-expression-list}
    835702\rhs \nonterm{assignment-expression}
    836 \rhs \nonterm{argument-expression-list} \lstinline$,$
     703\rhs \nonterm{argument-expression-list} \lstinline@,@
    837704         \nonterm{assignment-expression}
    838705\end{syntax}
     
    840707\rewriterules
    841708\begin{lstlisting}
    842 a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type@\use{?[?]}@
    843 a[b] @\rewrite@ ?[?]( a, b ) // otherwise
    844 a( @\emph{arguments}@ ) @\rewrite@ ?()( a, @\emph{arguments}@ )@\use{?()}@
    845 a++ @\rewrite@ ?++(&( a ))@\use{?++}@
    846 a-- @\rewrite@ ?--(&( a ))@\use{?--}@
     709a[b] §\rewrite§ ?[?]( b, a ) // if a has integer type§\use{?[?]}§
     710a[b] §\rewrite§ ?[?]( a, b ) // otherwise
     711a( §\emph{arguments}§ ) §\rewrite§ ?()( a, §\emph{arguments}§ )§\use{?()}§
     712a++ §\rewrite§ ?++(&( a ))§\use{?++}§
     713a-- §\rewrite§ ?--(&( a ))§\use{?--}§
    847714\end{lstlisting}
    848715
     
    852719\predefined
    853720\begin{lstlisting}
    854 forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@
     721forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t );§\use{ptrdiff_t}§
    855722forall( otype T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t );
    856723forall( otype T ) lvalue const T ?[?]( const T *, ptrdiff_t );
     
    872739The interpretations of subscript expressions are the interpretations of the corresponding function call expressions.
    873740\begin{rationale}
    874 C defines subscripting as pointer arithmetic in a way that makes \lstinline$a[i]$ and
    875 \lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline$?[?]$.
     741C defines subscripting as pointer arithmetic in a way that makes \lstinline@a[i]@ and
     742\lstinline@i[a]@ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline@?[?]@.
    876743
    877744Subscript expressions are rewritten as function calls that pass the first parameter by value.
    878745This is somewhat unfortunate, since array-like types tend to be large.
    879 The alternative is to use the rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''.
    880 However, C semantics forbid this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which does not have an address.
     746The alternative is to use the rewrite rule ``\lstinline@a[b]@ \rewrite \lstinline@?[?](&(a), b)@''.
     747However, C semantics forbid this approach: the \lstinline@a@ in ``\lstinline@a[b]@'' can be an arbitrary pointer value, which does not have an address.
    881748
    882749The repetitive form of the predefined identifiers shows up a deficiency\index{deficiencies!pointers
     
    893760\nonterm{postfix-expression} in a function call may have some interpretations that are function designators and some that are not.
    894761
    895 For those interpretations of the \nonterm{postfix-expression} that are not function designators, the expression is rewritten and becomes a call of a function named ``\lstinline$?()$''.
     762For 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@?()@''.
    896763The valid interpretations of the rewritten expression are determined in the manner described below.
    897764
     
    901768\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
    902769\item if the function designator's type does not include a prototype or if the argument corresponds to
    903 ``\lstinline$...$'' in a prototype, a \Index{default argument promotion} is applied to it.
     770``\lstinline@...@'' in a prototype, a \Index{default argument promotion} is applied to it.
    904771\end{itemize}
    905772The type of the valid interpretation is the return type of the function designator.
     
    909776\begin{itemize}
    910777\item
    911 If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the implicit argument must be an object type;
    912 if it uses \lstinline$dtype$, the implicit argument must be an object type or an incomplete type;
    913 and if it uses \lstinline$ftype$, the implicit argument must be a function type.
     778If the declaration of the implicit parameter uses \Index{type-class} \lstinline@type@\use{type}, the implicit argument must be an object type;
     779if it uses \lstinline@dtype@, the implicit argument must be an object type or an incomplete type;
     780and if it uses \lstinline@ftype@, the implicit argument must be a function type.
    914781
    915782\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.
     
    930797\begin{rationale}
    931798One 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}.
    932 For instance, it should be possible to replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( otype T ) T f( T );$'' without affecting any calls of \lstinline$f$.
     799For instance, it should be possible to replace a function ``\lstinline@int f( int );@'' with ``\lstinline@forall( otype T ) T f( T );@'' without affecting any calls of \lstinline@f@.
    933800
    934801\CFA\index{deficiencies!generalizability} does not fully possess this property, because
     
    944811f = g( d, f );          // (3) (unsafe conversion to float)
    945812\end{lstlisting}
    946 If \lstinline$g$ was replaced by ``\lstinline$forall( otype T ) T g( T, T );$'', the first and second calls would be unaffected, but the third would change: \lstinline$f$ would be converted to
    947 \lstinline$double$, and the result would be a \lstinline$double$.
    948 
    949 Another example is the function ``\lstinline$void h( int *);$''.
     813If \lstinline@g@ was replaced by ``\lstinline@forall( otype T ) T g( T, T );@'', the first and second calls would be unaffected, but the third would change: \lstinline@f@ would be converted to
     814\lstinline@double@, and the result would be a \lstinline@double@.
     815
     816Another example is the function ``\lstinline@void h( int *);@''.
    950817This function can be passed a
    951 \lstinline$void *$ argument, but the generalization ``\lstinline$forall( otype T ) void h( T *);$'' can not.
    952 In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an object type.
    953 If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any} object type, which is undesirable.
     818\lstinline@void *@ argument, but the generalization ``\lstinline@forall( otype T ) void h( T *);@'' can not.
     819In this case, \lstinline@void@ is not a valid value for \lstinline@T@ because it is not an object type.
     820If unsafe conversions were allowed, \lstinline@T@ could be inferred to be \emph{any} object type, which is undesirable.
    954821\end{rationale}
    955822
    956823\examples
    957 A function called ``\lstinline$?()$'' might be part of a numerical differentiation package.
     824A function called ``\lstinline@?()@'' might be part of a numerical differentiation package.
    958825\begin{lstlisting}
    959826extern otype Derivative;
     
    966833d = sin_dx( 12.9 );
    967834\end{lstlisting}
    968 Here, the only interpretation of \lstinline$sin_dx$ is as an object of type \lstinline$Derivative$.
    969 For that interpretation, the function call is treated as ``\lstinline$?()( sin_dx, 12.9 )$''.
     835Here, the only interpretation of \lstinline@sin_dx@ is as an object of type \lstinline@Derivative@.
     836For that interpretation, the function call is treated as ``\lstinline@?()( sin_dx, 12.9 )@''.
    970837\begin{lstlisting}
    971838int f( long );          // (1)
     
    974841int i = f( 5 );         // calls (1)
    975842\end{lstlisting}
    976 Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit \lstinline$int$ to \lstinline$long$ conversion.
    977 The other functions do not, since the second requires two arguments, and since there is no implicit conversion from \lstinline$int$ to \lstinline$int *$ that could be used with the third function.
     843Function (1) provides a valid interpretation of ``\lstinline@f( 5 )@'', using an implicit \lstinline@int@ to \lstinline@long@ conversion.
     844The 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.
    978845
    979846\begin{lstlisting}
     
    981848double d = h( 1.5 );
    982849\end{lstlisting}
    983 ``\lstinline$1.5$'' is a \lstinline$double$ constant, so \lstinline$T$ is inferred to be
    984 \lstinline$double$, and the result of the function call is a \lstinline$double$.
     850``\lstinline@1.5@'' is a \lstinline@double@ constant, so \lstinline@T@ is inferred to be
     851\lstinline@double@, and the result of the function call is a \lstinline@double@.
    985852
    986853\begin{lstlisting}
     
    997864g( i, p );                      // calls (4)
    998865\end{lstlisting}
    999 The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is chosen because it is less polymorphic than (4).
     866The 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).
    1000867
    1001868For the second call, (7) is again discarded.
    1002 Of the remaining interpretations for (4), (5), and (6) (with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least polymorphic.
     869Of the remaining interpretations for (4), (5), and (6) (with \lstinline@i@ converted to \lstinline@long@), (6) is chosen because it is the least polymorphic.
    1003870
    1004871The third call has valid interpretations for all of the functions;
     
    1009876forall( otype T ) T min( T, T );
    1010877double max( double, double );
    1011 trait min_max( T ) {@\impl{min_max}@
     878trait min_max( T ) {§\impl{min_max}§
    1012879        T min( T, T );
    1013880        T max( T, T );
     
    1016883shuffle( 9, 10 );
    1017884\end{lstlisting}
    1018 The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and
    1019 \lstinline$min$ must be specialized with \lstinline$T$ bound to \lstinline$double$.
     885The 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
     886\lstinline@min@ must be specialized with \lstinline@T@ bound to \lstinline@double@.
    1020887\begin{lstlisting}
    1021888extern void q( int );           // (8)
     
    1025892r( 0 );
    1026893\end{lstlisting}
    1027 The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9).
    1028 The former is chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}.
    1029 For the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has \emph{no} declared parameter types.
     894The \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).
     895The former is chosen because the \lstinline@int@ \lstinline@0@ is \Index{less polymorphic}.
     896For the same reason, \lstinline@int@ \lstinline@0@ is passed to \lstinline@r()@, even though it has \emph{no} declared parameter types.
    1030897
    1031898
    1032899\subsubsection{Structure and union members}
    1033900
    1034 \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$.
    1035 If two or more interpretations of \lstinline$s$ have members named
    1036 \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.
    1037 If an interpretation of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other
    1038 \lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type.
     901\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@.
     902If two or more interpretations of \lstinline@s@ have members named
     903\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.
     904If an interpretation of \lstinline@s@ has a member \lstinline@m@ whose type is not compatible with any other
     905\lstinline@s@'s \lstinline@m@, then the expression has an interpretation with the member's type.
    1039906The expression has no other interpretations.
    1040907
    1041 The expression ``\lstinline$p->m$'' has the same interpretations as the expression
    1042 ``\lstinline$(*p).m$''.
     908The expression ``\lstinline@p->m@'' has the same interpretations as the expression ``\lstinline@(*p).m@''.
    1043909
    1044910
     
    11351001        * ?--( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    11361002\end{lstlisting}
    1137 For every extended integer type \lstinline$X$ there exist
     1003For every extended integer type \lstinline@X@ there exist
    11381004% Don't use predefined: keep this out of prelude.cf.
    11391005\begin{lstlisting}
     
    11411007  ?--( volatile X * ), ?--( _Atomic volatile X * );
    11421008\end{lstlisting}
    1143 For every complete enumerated type \lstinline$E$ there exist
     1009For every complete enumerated type \lstinline@E@ there exist
    11441010% Don't use predefined: keep this out of prelude.cf.
    11451011\begin{lstlisting}
     
    11491015
    11501016\begin{rationale}
    1151 Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald has pointed out, this forces the modified operand of such expressions to be an lvalue.
     1017Note 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.
    11521018This partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues.
    11531019\end{rationale}
     
    11551021\begin{rationale}
    11561022In C, a semantic rule requires that pointer operands of increment and decrement be pointers to object types.
    1157 Hence, \lstinline$void *$ objects cannot be incremented.
    1158 In \CFA, the restriction follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the type parameter \lstinline$T$.
     1023Hence, \lstinline@void *@ objects cannot be incremented.
     1024In \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@.
    11591025\end{rationale}
    11601026
    11611027\semantics
    11621028First, each interpretation of the operand of an increment or decrement expression is considered separately.
    1163 For each interpretation that is a bit-field or is declared with the
    1164 \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.
     1029For each interpretation that is a bit-field or is declared with the \Indexc{register}\index{storage-class specifier}, the expression has one valid interpretation, with the type of the operand, and the expression is ambiguous if the operand is.
    11651030
    11661031For the remaining interpretations, the expression is rewritten, and the interpretations of the expression are the interpretations of the corresponding function call.
     
    11751040\end{lstlisting}
    11761041\begin{sloppypar}
    1177 Since \lstinline$&(vs)$ has type \lstinline$volatile short int *$, the best valid interpretation of
    1178 \lstinline$vs++$ calls the \lstinline$?++$ function with the \lstinline$volatile short *$ parameter.
    1179 \lstinline$s++$ does the same, applying the safe conversion from \lstinline$short int *$ to
    1180 \lstinline$volatile short int *$.
    1181 Note that there is no conversion that adds an \lstinline$_Atomic$ qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid interpretation.
     1042Since \lstinline@&(vs)@ has type \lstinline@volatile short int *@, the best valid interpretation of
     1043\lstinline@vs++@ calls the \lstinline@?++@ function with the \lstinline@volatile short *@ parameter.
     1044\lstinline@s++@ does the same, applying the safe conversion from \lstinline@short int *@ to \lstinline@volatile short int *@.
     1045Note 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.
    11821046\end{sloppypar}
    11831047
    1184 There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$, and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$ has no valid interpretations.
    1185 
    1186 The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the \lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the \lstinline$volatile$ qualifier.
     1048There 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.
     1049
     1050The 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.
    11871051\begin{lstlisting}
    11881052char * const restrict volatile * restrict volatile pqpc;
     
    11911055ppc++;
    11921056\end{lstlisting}
    1193 Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$, the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring \lstinline$T$ to be \lstinline$char *$.
    1194 
    1195 \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$.
     1057Since \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 *@.
     1058
     1059\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@.
    11961060
    11971061\begin{rationale}
     
    12071071\begin{enumerate}
    12081072\item
    1209 ``\lstinline$char * p; p++;$''.
    1210 The argument to \lstinline$?++$ has type \lstinline$char * *$, and the result has type \lstinline$char *$.
    1211 The expression would be valid if \lstinline$?++$ were declared by
     1073``\lstinline@char * p; p++;@''.
     1074The argument to \lstinline@?++@ has type \lstinline@char * *@, and the result has type \lstinline@char *@.
     1075The expression would be valid if \lstinline@?++@ were declared by
    12121076\begin{lstlisting}
    12131077forall( otype T ) T * ?++( T * * );
    1214 \end{lstlisting} with \lstinline$T$ inferred to be \lstinline$char$.
    1215 
    1216 \item
    1217 ``\lstinline$char *restrict volatile qp; qp++$''.
    1218 The result again has type \lstinline$char *$, but the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the hypothetical function declared in point 1.
     1078\end{lstlisting} with \lstinline@T@ inferred to be \lstinline@char@.
     1079
     1080\item
     1081``\lstinline@char *restrict volatile qp; qp++@''.
     1082The 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.
    12191083Hence the actual predefined function is
    12201084\begin{lstlisting}
    12211085forall( otype T ) T * ?++( T * restrict volatile * );
    1222 \end{lstlisting} which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add
    1223 \lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so constant pointers cannot be incremented.)
    1224 
    1225 \item
    1226 ``\lstinline$char *_Atomic ap; ap++$''.
    1227 The result again has type \lstinline$char *$, but no safe conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable.
    1228 A separate overloading of \lstinline$?++$ is required.
    1229 
    1230 \item
    1231 ``\lstinline$char const volatile * pq; pq++$''.
     1086\end{lstlisting} which also accepts a \lstinline@char * *@ argument, because of the safe conversions that add
     1087\lstinline@volatile@ and \lstinline@restrict@ qualifiers. (The parameter is not const-qualified, so constant pointers cannot be incremented.)
     1088
     1089\item
     1090``\lstinline@char *_Atomic ap; ap++@''.
     1091The result again has type \lstinline@char *@, but no safe conversion adds an \lstinline@_Atomic@ qualifier, so the function in point 2 is not applicable.
     1092A separate overloading of \lstinline@?++@ is required.
     1093
     1094\item
     1095``\lstinline@char const volatile * pq; pq++@''.
    12321096Here the result has type
    1233 \lstinline$char const volatile *$, so a new overloading is needed:
     1097\lstinline@char const volatile *@, so a new overloading is needed:
    12341098\begin{lstlisting}
    12351099forall( otype T ) T const volatile * ?++( T const volatile *restrict volatile * );
     
    12381102 
    12391103\item
    1240 ``\lstinline$float *restrict * prp; prp++$''.
    1241 The \lstinline$restrict$ qualifier is handled just like \lstinline$const$ and \lstinline$volatile$ in the previous case:
     1104``\lstinline@float *restrict * prp; prp++@''.
     1105The \lstinline@restrict@ qualifier is handled just like \lstinline@const@ and \lstinline@volatile@ in the previous case:
    12421106\begin{lstlisting}
    12431107forall( otype T ) T restrict * ?++( T restrict *restrict volatile * );
    1244 \end{lstlisting} with \lstinline$T$ inferred to be \lstinline$float *$.
    1245 This looks odd, because {\c11} contains a constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$ is not syntactically a pointer type. \CFA loosens the constraint.
     1108\end{lstlisting} with \lstinline@T@ inferred to be \lstinline@float *@.
     1109This 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.
    12461110\end{enumerate}
    12471111\end{rationale}
     
    12591123\lhs{unary-expression}
    12601124\rhs \nonterm{postfix-expression}
    1261 \rhs \lstinline$++$ \nonterm{unary-expression}
    1262 \rhs \lstinline$--$ \nonterm{unary-expression}
     1125\rhs \lstinline@++@ \nonterm{unary-expression}
     1126\rhs \lstinline@--@ \nonterm{unary-expression}
    12631127\rhs \nonterm{unary-operator} \nonterm{cast-expression}
    1264 \rhs \lstinline$sizeof$ \nonterm{unary-expression}
    1265 \rhs \lstinline$sizeof$ \lstinline$($ \nonterm{type-name} \lstinline$)$
    1266 \lhs{unary-operator} one of \rhs \lstinline$&$ \lstinline$*$ \lstinline$+$ \lstinline$-$ \lstinline$~$ \lstinline$!$
     1128\rhs \lstinline@sizeof@ \nonterm{unary-expression}
     1129\rhs \lstinline@sizeof@ \lstinline@(@ \nonterm{type-name} \lstinline@)@
     1130\lhs{unary-operator} one of \rhs \lstinline@&@ \lstinline@*@ \lstinline@+@ \lstinline@-@ \lstinline@~@ \lstinline@!@
    12671131\end{syntax}
    12681132
    12691133\rewriterules
    12701134\begin{lstlisting}
    1271 *a      @\rewrite@ *?( a ) @\use{*?}@
    1272 +a      @\rewrite@ +?( a ) @\use{+?}@
    1273 -a      @\rewrite@ -?( a ) @\use{-?}@
    1274 ~a      @\rewrite@ ~?( a ) @\use{~?}@
    1275 !a      @\rewrite@ !?( a ) @\use{"!?}@
    1276 ++a     @\rewrite@ ++?(&( a )) @\use{++?}@
    1277 --a     @\rewrite@ --?(&( a )) @\use{--?}@
     1135*a      §\rewrite§ *?( a ) §\use{*?}§
     1136+a      §\rewrite§ +?( a ) §\use{+?}§
     1137-a      §\rewrite§ -?( a ) §\use{-?}§
     1138~a      §\rewrite§ ~?( a ) §\use{~?}§
     1139!a      §\rewrite§ !?( a ) §\use{"!?}§
     1140++a     §\rewrite§ ++?(&( a )) §\use{++?}§
     1141--a     §\rewrite§ --?(&( a )) §\use{--?}§
    12781142\end{lstlisting}
    12791143
     
    13711235        * --?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    13721236\end{lstlisting}
    1373 For every extended integer type \lstinline$X$ there exist
     1237For every extended integer type \lstinline@X@ there exist
    13741238% Don't use predefined: keep this out of prelude.cf.
    13751239\begin{lstlisting}
     
    13791243        --?( _Atomic volatile X * );
    13801244\end{lstlisting}
    1381 For every complete enumerated type \lstinline$E$ there exist
     1245For every complete enumerated type \lstinline@E@ there exist
    13821246% Don't use predefined: keep this out of prelude.cf.
    13831247\begin{lstlisting}
     
    14161280
    14171281\constraints
    1418 The operand of the unary ``\lstinline$&$'' operator shall have exactly one
     1282The operand of the unary ``\lstinline@&@'' operator shall have exactly one
    14191283\Index{interpretation}\index{ambiguous interpretation}, which shall be unambiguous.
    14201284
    14211285\semantics
    1422 The ``\lstinline$&$'' expression has one interpretation which is of type \lstinline$T *$, where
    1423 \lstinline$T$ is the type of the operand.
     1286The ``\lstinline@&@'' expression has one interpretation which is of type \lstinline@T *@, where
     1287\lstinline@T@ is the type of the operand.
    14241288
    14251289The interpretations of an indirection expression are the interpretations of the corresponding function call.
     
    14501314forall( ftype FT ) int !?( FT * );
    14511315\end{lstlisting}
    1452 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     1316For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@ there exist
    14531317% Don't use predefined: keep this out of prelude.cf.
    14541318\begin{lstlisting}
     
    14631327\begin{lstlisting}
    14641328long int li;
    1465 void eat_double( double );@\use{eat_double}@
    1466 eat_double(-li ); // @\rewrite@ eat_double( -?( li ) );
    1467 \end{lstlisting}
    1468 The valid interpretations of ``\lstinline$-li$'' (assuming no extended integer types exist) are
     1329void eat_double( double );§\use{eat_double}§
     1330eat_double(-li ); // §\rewrite§ eat_double( -?( li ) );
     1331\end{lstlisting}
     1332The valid interpretations of ``\lstinline@-li@'' (assuming no extended integer types exist) are
    14691333\begin{center}
    14701334\begin{tabular}{llc} interpretation & result type & expression conversion cost \\
    14711335\hline
    1472 \lstinline$-?( (int)li )$                                       & \lstinline$int$                                       & (unsafe) \\
    1473 \lstinline$-?( (unsigned)li)$                           & \lstinline$unsigned int$                      & (unsafe) \\
    1474 \lstinline$-?( (long)li)$                                       & \lstinline$long$                                      & 0 \\
    1475 \lstinline$-?( (long unsigned int)li)$          & \lstinline$long unsigned int$         & 1 \\
    1476 \lstinline$-?( (long long int)li)$                      & \lstinline$long long int$                     & 2 \\
    1477 \lstinline$-?( (long long unsigned int)li)$     & \lstinline$long long unsigned int$& 3 \\
    1478 \lstinline$-?( (float)li)$                                      & \lstinline$float$                                     & 4 \\
    1479 \lstinline$-?( (double)li)$                                     & \lstinline$double$                            & 5 \\
    1480 \lstinline$-?( (long double)li)$                        & \lstinline$long double$                       & 6 \\
    1481 \lstinline$-?( (_Complex float)li)$                     & \lstinline$float$                                     & (unsafe) \\
    1482 \lstinline$-?( (_Complex double)li)$            & \lstinline$double$                            & (unsafe) \\
    1483 \lstinline$-?( (_Complex long double)li)$       & \lstinline$long double$                       & (unsafe) \\
     1336\lstinline@-?( (int)li )@                                       & \lstinline@int@                                       & (unsafe) \\
     1337\lstinline@-?( (unsigned)li)@                           & \lstinline@unsigned int@                      & (unsafe) \\
     1338\lstinline@-?( (long)li)@                                       & \lstinline@long@                                      & 0 \\
     1339\lstinline@-?( (long unsigned int)li)@          & \lstinline@long unsigned int@         & 1 \\
     1340\lstinline@-?( (long long int)li)@                      & \lstinline@long long int@                     & 2 \\
     1341\lstinline@-?( (long long unsigned int)li)@     & \lstinline@long long unsigned int@& 3 \\
     1342\lstinline@-?( (float)li)@                                      & \lstinline@float@                                     & 4 \\
     1343\lstinline@-?( (double)li)@                                     & \lstinline@double@                            & 5 \\
     1344\lstinline@-?( (long double)li)@                        & \lstinline@long double@                       & 6 \\
     1345\lstinline@-?( (_Complex float)li)@                     & \lstinline@float@                                     & (unsafe) \\
     1346\lstinline@-?( (_Complex double)li)@            & \lstinline@double@                            & (unsafe) \\
     1347\lstinline@-?( (_Complex long double)li)@       & \lstinline@long double@                       & (unsafe) \\
    14841348\end{tabular}
    14851349\end{center}
    1486 The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument conversion and the cost of the entire expression, are
     1350The valid interpretations of the \lstinline@eat_double@ call, with the cost of the argument conversion and the cost of the entire expression, are
    14871351\begin{center}
    14881352\begin{tabular}{lcc} interpretation & argument cost & expression cost \\
    14891353\hline
    1490 \lstinline$eat_double( (double)-?( (int)li) )$                                  & 7                     & (unsafe) \\
    1491 \lstinline$eat_double( (double)-?( (unsigned)li) )$                             & 6                     & (unsafe) \\
    1492 \lstinline$eat_double( (double)-?(li) )$                                                & 5                     & \(0+5=5\) \\
    1493 \lstinline$eat_double( (double)-?( (long unsigned int)li) )$    & 4                     & \(1+4=5\) \\
    1494 \lstinline$eat_double( (double)-?( (long long int)li) )$                & 3                     & \(2+3=5\) \\
    1495 \lstinline$eat_double( (double)-?( (long long unsigned int)li) )$& 2            & \(3+2=5\) \\
    1496 \lstinline$eat_double( (double)-?( (float)li) )$                                & 1                     & \(4+1=5\) \\
    1497 \lstinline$eat_double( (double)-?( (double)li) )$                               & 0                     & \(5+0=5\) \\
    1498 \lstinline$eat_double( (double)-?( (long double)li) )$                  & (unsafe)      & (unsafe) \\
    1499 \lstinline$eat_double( (double)-?( (_Complex float)li) )$               & (unsafe)      & (unsafe) \\
    1500 \lstinline$eat_double( (double)-?( (_Complex double)li) )$              & (unsafe)      & (unsafe) \\
    1501 \lstinline$eat_double( (double)-?( (_Complex long double)li) )$ & (unsafe)      & (unsafe) \\
     1354\lstinline@eat_double( (double)-?( (int)li) )@                                  & 7                     & (unsafe) \\
     1355\lstinline@eat_double( (double)-?( (unsigned)li) )@                             & 6                     & (unsafe) \\
     1356\lstinline@eat_double( (double)-?(li) )@                                                & 5                     & \(0+5=5\) \\
     1357\lstinline@eat_double( (double)-?( (long unsigned int)li) )@    & 4                     & \(1+4=5\) \\
     1358\lstinline@eat_double( (double)-?( (long long int)li) )@                & 3                     & \(2+3=5\) \\
     1359\lstinline@eat_double( (double)-?( (long long unsigned int)li) )@& 2            & \(3+2=5\) \\
     1360\lstinline@eat_double( (double)-?( (float)li) )@                                & 1                     & \(4+1=5\) \\
     1361\lstinline@eat_double( (double)-?( (double)li) )@                               & 0                     & \(5+0=5\) \\
     1362\lstinline@eat_double( (double)-?( (long double)li) )@                  & (unsafe)      & (unsafe) \\
     1363\lstinline@eat_double( (double)-?( (_Complex float)li) )@               & (unsafe)      & (unsafe) \\
     1364\lstinline@eat_double( (double)-?( (_Complex double)li) )@              & (unsafe)      & (unsafe) \\
     1365\lstinline@eat_double( (double)-?( (_Complex long double)li) )@ & (unsafe)      & (unsafe) \\
    15021366\end{tabular}
    15031367\end{center}
    1504 Each has result type \lstinline$void$, so the best must be selected.
     1368Each has result type \lstinline@void@, so the best must be selected.
    15051369The interpretations involving unsafe conversions are discarded.
    15061370The remainder have equal expression conversion costs, so the
    15071371``highest argument conversion cost'' rule is invoked, and the chosen interpretation is
    1508 \lstinline$eat_double( (double)-?(li) )$.
    1509 
    1510 
    1511 \subsubsection{The \lstinline$sizeof$ and \lstinline$_Alignof$ operators}
     1372\lstinline@eat_double( (double)-?(li) )@.
     1373
     1374
     1375\subsubsection[The sizeof and \_Alignof operators]{The \lstinline@sizeof@ and \lstinline@_Alignof@ operators}
    15121376
    15131377\constraints
    1514 The operand of \lstinline$sizeof$ or \lstinline$_Alignof$ shall not be \lstinline$type$,
    1515 \lstinline$dtype$, or \lstinline$ftype$.
    1516 
    1517 When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one interpretation, of type \lstinline$size_t$.
    1518 
    1519 When \lstinline$sizeof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
     1378The operand of \lstinline@sizeof@ or \lstinline@_Alignof@ shall not be \lstinline@type@, \lstinline@dtype@, or \lstinline@ftype@.
     1379
     1380When 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@.
     1381
     1382When \lstinline@sizeof@ is applied to an identifier declared by a \nonterm{type-declaration} or a
    15201383\nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand.
    15211384When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression.
    15221385
    1523 When \lstinline$_Alignof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
     1386When \lstinline@_Alignof@ is applied to an identifier declared by a \nonterm{type-declaration} or a
    15241387\nonterm{type-parameter}, it yields the alignment requirement of the type that implements the operand.
    15251388When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression.
     
    15281391otype Pair = struct { int first, second; };
    15291392size_t p_size = sizeof(Pair);           // constant expression
    1530 extern otype Rational;@\use{Rational}@
     1393extern otype Rational;§\use{Rational}§
    15311394size_t c_size = sizeof(Rational);       // non-constant expression
    15321395forall(type T) T f(T p1, T p2) {
     
    15351398}
    15361399\end{lstlisting}
    1537 ``\lstinline$sizeof Rational$'', although not statically known, is fixed.
    1538 Within \lstinline$f()$,
    1539 ``\lstinline$sizeof(T)$'' is fixed for each call of \lstinline$f()$, but may vary from call to call.
     1400``\lstinline@sizeof Rational@'', although not statically known, is fixed.
     1401Within \lstinline@f()@,
     1402``\lstinline@sizeof(T)@'' is fixed for each call of \lstinline@f()@, but may vary from call to call.
    15401403\end{rationale}
    15411404
     
    15461409\lhs{cast-expression}
    15471410\rhs \nonterm{unary-expression}
    1548 \rhs \lstinline$($ \nonterm{type-name} \lstinline$)$ \nonterm{cast-expression}
     1411\rhs \lstinline@(@ \nonterm{type-name} \lstinline@)@ \nonterm{cast-expression}
    15491412\end{syntax}
    15501413
    15511414\constraints
    1552 The \nonterm{type-name} in a \nonterm{cast-expression} shall not be \lstinline$type$,
    1553 \lstinline$dtype$, or \lstinline$ftype$.
     1415The \nonterm{type-name} in a \nonterm{cast-expression} shall not be \lstinline@type@,
     1416\lstinline@dtype@, or \lstinline@ftype@.
    15541417
    15551418\semantics
    15561419
    1557 In a \Index{cast expression} ``\lstinline$($\nonterm{type-name}\lstinline$)e$'', if
    1558 \nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is the only interpretation of the cast expression;
    1559 otherwise, \lstinline$e$ shall have some interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast expression is the cast of the interpretation that can be converted at the lowest cost.
     1420In a \Index{cast expression} ``\lstinline@(@\nonterm{type-name}\lstinline@)e@'', if
     1421\nonterm{type-name} is the type of an interpretation of \lstinline@e@, then that interpretation is the only interpretation of the cast expression;
     1422otherwise, \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.
    15601423The 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.
    15611424
     
    15701433\lhs{multiplicative-expression}
    15711434\rhs \nonterm{cast-expression}
    1572 \rhs \nonterm{multiplicative-expression} \lstinline$*$ \nonterm{cast-expression}
    1573 \rhs \nonterm{multiplicative-expression} \lstinline$/$ \nonterm{cast-expression}
    1574 \rhs \nonterm{multiplicative-expression} \lstinline$%$ \nonterm{cast-expression}
     1435\rhs \nonterm{multiplicative-expression} \lstinline@*@ \nonterm{cast-expression}
     1436\rhs \nonterm{multiplicative-expression} \lstinline@/@ \nonterm{cast-expression}
     1437\rhs \nonterm{multiplicative-expression} \lstinline@%@ \nonterm{cast-expression}
    15751438\end{syntax}
    15761439
    15771440\rewriterules
    15781441\begin{lstlisting}
    1579 a * b @\rewrite@ ?*?( a, b )@\use{?*?}@
    1580 a / b @\rewrite@ ?/?( a, b )@\use{?/?}@
    1581 a % b @\rewrite@ ?%?( a, b )@\use{?%?}@
     1442a * b §\rewrite§ ?*?( a, b )§\use{?*?}§
     1443a / b §\rewrite§ ?/?( a, b )§\use{?/?}§
     1444a % b §\rewrite§ ?%?( a, b )§\use{?%?}§
    15821445\end{lstlisting}
    15831446
     
    16061469        ?*?( _Complex long double, _Complex long double ), ?/?( _Complex long double, _Complex long double );
    16071470\end{lstlisting}
    1608 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     1471For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@ there exist
    16091472% Don't use predefined: keep this out of prelude.cf.
    16101473\begin{lstlisting}
     
    16241487int i;
    16251488long li;
    1626 void eat_double( double );@\use{eat_double}@
     1489void eat_double( double );§\use{eat_double}§
    16271490eat_double( li % i );
    16281491\end{lstlisting}
    1629 ``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''.
    1630 The valid interpretations of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and the cost of converting the result to \lstinline$double$ (assuming no extended integer types are present ) are
     1492``\lstinline@li % i@'' is rewritten as ``\lstinline@?%?(li, i )@''.
     1493The 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
    16311494\begin{center}
    16321495\begin{tabular}{lcc} interpretation & argument cost & result cost \\
    16331496\hline
    1634 \lstinline$ ?%?( (int)li, i )$                                                                          & (unsafe)      & 6     \\
    1635 \lstinline$ ?%?( (unsigned)li,(unsigned)i )$                                            & (unsafe)      & 5     \\
    1636 \lstinline$ ?%?( li, (long)i )$                                                                         & 1                     & 4     \\
    1637 \lstinline$ ?%?( (long unsigned)li,(long unsigned)i )$                          & 3                     & 3     \\
    1638 \lstinline$ ?%?( (long long)li,(long long)i )$                                          & 5                     & 2     \\
    1639 \lstinline$ ?%?( (long long unsigned)li, (long long unsigned)i )$       & 7                     & 1     \\
     1497\lstinline@ ?%?( (int)li, i )@                                                                          & (unsafe)      & 6     \\
     1498\lstinline@ ?%?( (unsigned)li,(unsigned)i )@                                            & (unsafe)      & 5     \\
     1499\lstinline@ ?%?( li, (long)i )@                                                                         & 1                     & 4     \\
     1500\lstinline@ ?%?( (long unsigned)li,(long unsigned)i )@                          & 3                     & 3     \\
     1501\lstinline@ ?%?( (long long)li,(long long)i )@                                          & 5                     & 2     \\
     1502\lstinline@ ?%?( (long long unsigned)li, (long long unsigned)i )@       & 7                     & 1     \\
    16401503\end{tabular}
    16411504\end{center}
    1642 The best interpretation of \lstinline$eat_double( li, i )$ is
    1643 \lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the lowest total cost.
    1644 
    1645 \begin{rationale}
    1646 {\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
    1647 \lstinline$s$ is a \lstinline$short int$, ``\lstinline$s *s$'' does not have type \lstinline$short int$;
    1648 it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches that pattern;
    1649 it does not predefine ``\lstinline$short ?*?( short, short )$''.
     1505The best interpretation of \lstinline@eat_double( li, i )@ is
     1506\lstinline@eat_double( (double)?%?(li, (long)i ))@, which has no unsafe conversions and the lowest total cost.
     1507
     1508\begin{rationale}
     1509{\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
     1510\lstinline@s@ is a \lstinline@short int@, ``\lstinline@s *s@'' does not have type \lstinline@short int@;
     1511it is treated as ``\lstinline@( (int)s ) * ( (int)s )@'', and has type \lstinline@int@. \CFA matches that pattern;
     1512it does not predefine ``\lstinline@short ?*?( short, short )@''.
    16501513
    16511514These ``missing'' operators limit polymorphism.
     
    16561519square( s );
    16571520\end{lstlisting}
    1658 Since \CFA does not define a multiplication operator for \lstinline$short int$,
    1659 \lstinline$square( s )$ is treated as \lstinline$square( (int)s )$, and the result has type
    1660 \lstinline$int$.
     1521Since \CFA does not define a multiplication operator for \lstinline@short int@,
     1522\lstinline@square( s )@ is treated as \lstinline@square( (int)s )@, and the result has type
     1523\lstinline@int@.
    16611524This is mildly surprising, but it follows the {\c11} operator pattern.
    16621525
     
    16681531\end{lstlisting}
    16691532This has no valid interpretations, because \CFA has no conversion from ``array of
    1670 \lstinline$short int$'' to ``array of \lstinline$int$''.
     1533\lstinline@short int@'' to ``array of \lstinline@int@''.
    16711534The alternatives in such situations include
    16721535\begin{itemize}
    16731536\item
    1674 Defining monomorphic overloadings of \lstinline$product$ for \lstinline$short$ and the other
     1537Defining monomorphic overloadings of \lstinline@product@ for \lstinline@short@ and the other
    16751538``small'' types.
    16761539\item
    1677 Defining ``\lstinline$short ?*?( short, short )$'' within the scope containing the call to
    1678 \lstinline$product$.
    1679 \item
    1680 Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to the operator's argument type.
     1540Defining ``\lstinline@short ?*?( short, short )@'' within the scope containing the call to
     1541\lstinline@product@.
     1542\item
     1543Defining \lstinline@product@ to take as an argument a conversion function from the ``small'' type to the operator's argument type.
    16811544\end{itemize}
    16821545\end{rationale}
     
    16881551\lhs{additive-expression}
    16891552\rhs \nonterm{multiplicative-expression}
    1690 \rhs \nonterm{additive-expression} \lstinline$+$ \nonterm{multiplicative-expression}
    1691 \rhs \nonterm{additive-expression} \lstinline$-$ \nonterm{multiplicative-expression}
     1553\rhs \nonterm{additive-expression} \lstinline@+@ \nonterm{multiplicative-expression}
     1554\rhs \nonterm{additive-expression} \lstinline@-@ \nonterm{multiplicative-expression}
    16921555\end{syntax}
    16931556
    16941557\rewriterules
    16951558\begin{lstlisting}
    1696 a + b @\rewrite@ ?+?( a, b )@\use{?+?}@
    1697 a - b @\rewrite@ ?-?( a, b )@\use{?-?}@
     1559a + b §\rewrite§ ?+?( a, b )§\use{?+?}§
     1560a - b §\rewrite§ ?-?( a, b )§\use{?-?}§
    16981561\end{lstlisting}
    16991562
     
    17481611        * ?-?( _Atomic const restrict volatile T *, _Atomic const restrict volatile T * );
    17491612\end{lstlisting}
    1750 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     1613For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@ there exist
    17511614% Don't use predefined: keep this out of prelude.cf.
    17521615\begin{lstlisting}
     
    17581621
    17591622\begin{rationale}
    1760 \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.
     1623\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.
    17611624It 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.
    1762 The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an unsigned type.
     1625The {\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.
    17631626\end{rationale}
    17641627
     
    17691632\lhs{shift-expression}
    17701633\rhs \nonterm{additive-expression}
    1771 \rhs \nonterm{shift-expression} \lstinline$<<$ \nonterm{additive-expression}
    1772 \rhs \nonterm{shift-expression} \lstinline$>>$ \nonterm{additive-expression}
     1634\rhs \nonterm{shift-expression} \lstinline@<<@ \nonterm{additive-expression}
     1635\rhs \nonterm{shift-expression} \lstinline@>>@ \nonterm{additive-expression}
    17731636\end{syntax}
    17741637
    17751638\rewriterules \use{?>>?}%use{?<<?}
    17761639\begin{lstlisting}
    1777 a << b @\rewrite@ ?<<?( a, b )
    1778 a >> b @\rewrite@ ?>>?( a, b )
     1640a << b §\rewrite§ ?<<?( a, b )
     1641a >> b §\rewrite§ ?>>?( a, b )
    17791642\end{lstlisting}
    17801643
     
    17881651long long unsigned int ?<<?( long long unsigned int, int ), ?>>?( long long unsigned int, int);
    17891652\end{lstlisting}
    1790 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     1653For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@ there exist
    17911654% Don't use predefined: keep this out of prelude.cf.
    17921655\begin{lstlisting}
     
    18081671\lhs{relational-expression}
    18091672\rhs \nonterm{shift-expression}
    1810 \rhs \nonterm{relational-expression} \lstinline$< $ \nonterm{shift-expression}
    1811 \rhs \nonterm{relational-expression} \lstinline$> $ \nonterm{shift-expression}
    1812 \rhs \nonterm{relational-expression} \lstinline$<=$ \nonterm{shift-expression}
    1813 \rhs \nonterm{relational-expression} \lstinline$>=$ \nonterm{shift-expression}
     1673\rhs \nonterm{relational-expression} \lstinline@< @ \nonterm{shift-expression}
     1674\rhs \nonterm{relational-expression} \lstinline@> @ \nonterm{shift-expression}
     1675\rhs \nonterm{relational-expression} \lstinline@<=@ \nonterm{shift-expression}
     1676\rhs \nonterm{relational-expression} \lstinline@>=@ \nonterm{shift-expression}
    18141677\end{syntax}
    18151678
    18161679\rewriterules\use{?>?}\use{?>=?}%use{?<?}%use{?<=?}
    18171680\begin{lstlisting}
    1818 a < b @\rewrite@ ?<?( a, b )
    1819 a > b @\rewrite@ ?>?( a, b )
    1820 a <= b @\rewrite@ ?<=?( a, b )
    1821 a >= b @\rewrite@ ?>=?( a, b )
     1681a < b §\rewrite§ ?<?( a, b )
     1682a > b §\rewrite§ ?>?( a, b )
     1683a <= b §\rewrite§ ?<=?( a, b )
     1684a >= b §\rewrite§ ?>=?( a, b )
    18221685\end{lstlisting}
    18231686
     
    18511714        ?>=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * );
    18521715\end{lstlisting}
    1853 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     1716For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@ there exist
    18541717% Don't use predefined: keep this out of prelude.cf.
    18551718\begin{lstlisting}
     
    18691732\lhs{equality-expression}
    18701733\rhs \nonterm{relational-expression}
    1871 \rhs \nonterm{equality-expression} \lstinline$==$ \nonterm{relational-expression}
    1872 \rhs \nonterm{equality-expression} \lstinline$!=$ \nonterm{relational-expression}
     1734\rhs \nonterm{equality-expression} \lstinline@==@ \nonterm{relational-expression}
     1735\rhs \nonterm{equality-expression} \lstinline@!=@ \nonterm{relational-expression}
    18731736\end{syntax}
    18741737
    18751738\rewriterules
    18761739\begin{lstlisting}
    1877 a == b @\rewrite@ ?==?( a, b )@\use{?==?}@
    1878 a != b @\rewrite@ ?!=?( a, b )@\use{?"!=?}@
     1740a == b §\rewrite§ ?==?( a, b )§\use{?==?}§
     1741a != b §\rewrite§ ?!=?( a, b )§\use{?"!=?}§
    18791742\end{lstlisting}
    18801743
     
    19291792        ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ), ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * );
    19301793\end{lstlisting}
    1931 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     1794For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@ there exist
    19321795% Don't use predefined: keep this out of prelude.cf.
    19331796\begin{lstlisting}
     
    19371800
    19381801\begin{rationale}
    1939 The polymorphic equality operations come in three styles: comparisons between pointers of compatible types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and between the \Index{null pointer} constant and pointers to any type.
     1802The 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.
    19401803In the last case, a special constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA type system.
    19411804\end{rationale}
     
    19581821\lhs{AND-expression}
    19591822\rhs \nonterm{equality-expression}
    1960 \rhs \nonterm{AND-expression} \lstinline$&$ \nonterm{equality-expression}
     1823\rhs \nonterm{AND-expression} \lstinline@&@ \nonterm{equality-expression}
    19611824\end{syntax}
    19621825
    19631826\rewriterules
    19641827\begin{lstlisting}
    1965 a & b @\rewrite@ ?&?( a, b )@\use{?&?}@
     1828a & b §\rewrite§ ?&?( a, b )§\use{?&?}§
    19661829\end{lstlisting}
    19671830
     
    19751838long long unsigned int ?&?( long long unsigned int, long long unsigned int );
    19761839\end{lstlisting}
    1977 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     1840For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@ there exist
    19781841% Don't use predefined: keep this out of prelude.cf.
    19791842\begin{lstlisting}
     
    19901853\lhs{exclusive-OR-expression}
    19911854\rhs \nonterm{AND-expression}
    1992 \rhs \nonterm{exclusive-OR-expression} \lstinline$^$ \nonterm{AND-expression}
     1855\rhs \nonterm{exclusive-OR-expression} \lstinline@^@ \nonterm{AND-expression}
    19931856\end{syntax}
    19941857
    19951858\rewriterules
    19961859\begin{lstlisting}
    1997 a ^ b @\rewrite@ ?^?( a, b )@\use{?^?}@
     1860a ^ b §\rewrite§ ?^?( a, b )§\use{?^?}§
    19981861\end{lstlisting}
    19991862
     
    20071870long long unsigned int ?^?( long long unsigned int, long long unsigned int );
    20081871\end{lstlisting}
    2009 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     1872For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@ there exist
    20101873% Don't use predefined: keep this out of prelude.cf.
    20111874\begin{lstlisting}
     
    20221885\lhs{inclusive-OR-expression}
    20231886\rhs \nonterm{exclusive-OR-expression}
    2024 \rhs \nonterm{inclusive-OR-expression} \lstinline$|$ \nonterm{exclusive-OR-expression}
     1887\rhs \nonterm{inclusive-OR-expression} \lstinline@|@ \nonterm{exclusive-OR-expression}
    20251888\end{syntax}
    20261889
    20271890\rewriterules\use{?"|?}
    20281891\begin{lstlisting}
    2029 a | b @\rewrite@ ?|?( a, b )
     1892a | b §\rewrite§ ?|?( a, b )
    20301893\end{lstlisting}
    20311894
     
    20391902long long unsigned int ?|?( long long unsigned int, long long unsigned int );
    20401903\end{lstlisting}
    2041 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     1904For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@ there exist
    20421905% Don't use predefined: keep this out of prelude.cf.
    20431906\begin{lstlisting}
     
    20541917\lhs{logical-AND-expression}
    20551918\rhs \nonterm{inclusive-OR-expression}
    2056 \rhs \nonterm{logical-AND-expression} \lstinline$&&$ \nonterm{inclusive-OR-expression}
     1919\rhs \nonterm{logical-AND-expression} \lstinline@&&@ \nonterm{inclusive-OR-expression}
    20571920\end{syntax}
    20581921
    2059 \semantics The operands of the expression ``\lstinline$a && b$'' are treated as
    2060 ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be unambiguous.
    2061 The expression has only one interpretation, which is of type \lstinline$int$.
    2062 \begin{rationale}
    2063 When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has not been redefined for those types, the compiler can optimize away the function calls.
    2064 
    2065 A common C idiom omits comparisons to \lstinline$0$ in the controlling expressions of loops and
    2066 \lstinline$if$ statements.
    2067 For instance, the loop below iterates as long as \lstinline$rp$ points at a \lstinline$Rational$ value that is non-zero.
    2068 
    2069 \begin{lstlisting}
    2070 extern otype Rational;@\use{Rational}@
    2071 extern const Rational 0;@\use{0}@
     1922\semantics The operands of the expression ``\lstinline@a && b@'' are treated as
     1923``\lstinline@(int)((a)!=0)@'' and ``\lstinline@(int)((b)!=0)@'', which shall both be unambiguous.
     1924The expression has only one interpretation, which is of type \lstinline@int@.
     1925\begin{rationale}
     1926When 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.
     1927
     1928A common C idiom omits comparisons to \lstinline@0@ in the controlling expressions of loops and
     1929\lstinline@if@ statements.
     1930For instance, the loop below iterates as long as \lstinline@rp@ points at a \lstinline@Rational@ value that is non-zero.
     1931
     1932\begin{lstlisting}
     1933extern otype Rational;§\use{Rational}§
     1934extern const Rational 0;§\use{0}§
    20721935extern int ?!=?( Rational, Rational );
    20731936Rational *rp;
    20741937while ( rp && *rp ) { ... }
    20751938\end{lstlisting}
    2076 The logical expression calls the \lstinline$Rational$ inequality operator, passing it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result.
    2077 In contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$ conversion to \lstinline$*rp$ in the equivalent situation.
    2078 The conversion to \lstinline$int$ would produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was not written with this situation in mind.
     1939The 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.
     1940In contrast, {\CC} would apply a programmer-defined \lstinline@Rational@-to-\lstinline@int@ conversion to \lstinline@*rp@ in the equivalent situation.
     1941The 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.
    20791942\end{rationale}
    20801943
     
    20851948\lhs{logical-OR-expression}
    20861949\rhs \nonterm{logical-AND-expression}
    2087 \rhs \nonterm{logical-OR-expression} \lstinline$||$ \nonterm{logical-AND-expression}
     1950\rhs \nonterm{logical-OR-expression} \lstinline@||@ \nonterm{logical-AND-expression}
    20881951\end{syntax}
    20891952
    20901953\semantics
    20911954
    2092 The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous.
    2093 The expression has only one interpretation, which is of type \lstinline$int$.
     1955The operands of the expression ``\lstinline@a || b@'' are treated as ``\lstinline@(int)((a)!=0)@'' and ``\lstinline@(int)((b))!=0)@'', which shall both be unambiguous.
     1956The expression has only one interpretation, which is of type \lstinline@int@.
    20941957
    20951958
     
    20991962\lhs{conditional-expression}
    21001963\rhs \nonterm{logical-OR-expression}
    2101 \rhs \nonterm{logical-OR-expression} \lstinline$?$ \nonterm{expression}
    2102          \lstinline$:$ \nonterm{conditional-expression}
     1964\rhs \nonterm{logical-OR-expression} \lstinline@?@ \nonterm{expression}
     1965         \lstinline@:@ \nonterm{conditional-expression}
    21031966\end{syntax}
    21041967
    21051968\semantics
    2106 In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and third operands both have an interpretation with \lstinline$void$ type, then the expression has an interpretation with type \lstinline$void$, equivalent to
     1969In 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
    21071970\begin{lstlisting}
    21081971( int)(( a)!=0) ? ( void)( b) : ( void)( c)
    21091972\end{lstlisting}
    21101973
    2111 If the second and third operands both have interpretations with non-\lstinline$void$ types, the expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'', with \lstinline$cond$ declared as
     1974If 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
    21121975\begin{lstlisting}
    21131976forall( otype T ) T cond( int, T, T );
     
    21612024rand() ? i : l;
    21622025\end{lstlisting}
    2163 The best interpretation infers the expression's type to be \lstinline$long$ and applies the safe
    2164 \lstinline$int$-to-\lstinline$long$ conversion to \lstinline$i$.
     2026The best interpretation infers the expression's type to be \lstinline@long@ and applies the safe
     2027\lstinline@int@-to-\lstinline@long@ conversion to \lstinline@i@.
    21652028
    21662029\begin{lstlisting}
     
    21692032rand() ? cip : vip;
    21702033\end{lstlisting}
    2171 The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second and third operands to add \lstinline$volatile$ and \lstinline$const$ qualifiers, respectively.
     2034The 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.
    21722035
    21732036\begin{lstlisting}
    21742037rand() ? cip : 0;
    21752038\end{lstlisting}
    2176 The expression has type \lstinline$const int *$, with a specialization conversion applied to
    2177 \lstinline$0$.
     2039The expression has type \lstinline@const int *@, with a specialization conversion applied to
     2040\lstinline@0@.
    21782041
    21792042
     
    21862049         \nonterm{assignment-expression}
    21872050\lhs{assignment-operator} one of
    2188 \rhs \lstinline$=$\ \ \lstinline$*=$\ \ \lstinline$/=$\ \ \lstinline$%=$\ \ \lstinline$+=$\ \ \lstinline$-=$\ \ 
    2189          \lstinline$<<=$\ \ \lstinline$>>=$\ \ \lstinline$&=$\ \ \lstinline$^=$\ \ \lstinline$|=$
     2051\rhs \lstinline@=@\ \ \lstinline@*=@\ \ \lstinline@/=@\ \ \lstinline@%=@\ \ \lstinline@+=@\ \ \lstinline@-=@\ \ 
     2052         \lstinline@<<=@\ \ \lstinline@>>=@\ \ \lstinline@&=@\ \ \lstinline@^=@\ \ \lstinline@|=@
    21902053\end{syntax}
    21912054
     
    21962059\use{?>>=?}\use{?&=?}\use{?^=?}\use{?"|=?}%use{?<<=?}
    21972060\begin{lstlisting}
    2198 a @$\leftarrow$@ b @\rewrite@ ?@$\leftarrow$@?( &( a ), b )
     2061a §$\leftarrow$§ b §\rewrite§ ?§$\leftarrow$§?( &( a ), b )
    21992062\end{lstlisting}
    22002063
    22012064\semantics
    22022065Each interpretation of the left operand of an assignment expression is considered separately.
    2203 For each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class specifier, the expression has one valid interpretation, with the type of the left operand.
     2066For 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.
    22042067The right operand is cast to that type, and the assignment expression is ambiguous if either operand is.
    22052068For the remaining interpretations, the expression is rewritten, and the interpretations of the assignment expression are the interpretations of the corresponding function call.
     
    24342297\end{lstlisting}
    24352298\begin{rationale}
    2436 The pattern of overloadings for simple assignment resembles that of pointer increment and decrement, except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter, instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete type.
    2437 \end{rationale}
    2438 
    2439 For every complete structure or union type \lstinline$S$ there exist
     2299The 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.
     2300\end{rationale}
     2301
     2302For every complete structure or union type \lstinline@S@ there exist
    24402303% Don't use predefined: keep this out of prelude.cf.
    24412304\begin{lstlisting}
     
    24432306\end{lstlisting}
    24442307
    2445 For every extended integer type \lstinline$X$ there exist
     2308For every extended integer type \lstinline@X@ there exist
    24462309% Don't use predefined: keep this out of prelude.cf.
    24472310\begin{lstlisting}
     
    24492312\end{lstlisting}
    24502313
    2451 For every complete enumerated type \lstinline$E$ there exist
     2314For every complete enumerated type \lstinline@E@ there exist
    24522315% Don't use predefined: keep this out of prelude.cf.
    24532316\begin{lstlisting}
     
    24552318\end{lstlisting}
    24562319\begin{rationale}
    2457 The right-hand argument is \lstinline$int$ because enumeration constants have type \lstinline$int$.
     2320The right-hand argument is \lstinline@int@ because enumeration constants have type \lstinline@int@.
    24582321\end{rationale}
    24592322
     
    27162579\end{lstlisting}
    27172580
    2718 For every extended integer type \lstinline$X$ there exist
     2581For every extended integer type \lstinline@X@ there exist
    27192582% Don't use predefined: keep this out of prelude.cf.
    27202583\begin{lstlisting}
     
    27312594\end{lstlisting}
    27322595
    2733 For every complete enumerated type \lstinline$E$ there exist
     2596For every complete enumerated type \lstinline@E@ there exist
    27342597% Don't use predefined: keep this out of prelude.cf.
    27352598\begin{lstlisting}
     
    27522615\lhs{expression}
    27532616\rhs \nonterm{assignment-expression}
    2754 \rhs \nonterm{expression} \lstinline$,$ \nonterm{assignment-expression}
     2617\rhs \nonterm{expression} \lstinline@,@ \nonterm{assignment-expression}
    27552618\end{syntax}
    27562619
    27572620\semantics
    2758 In the comma expression ``\lstinline$a, b$'', the first operand is interpreted as
    2759 ``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}.
     2621In the comma expression ``\lstinline@a, b@'', the first operand is interpreted as
     2622``\lstinline@( void )(a)@'', which shall be unambiguous\index{ambiguous interpretation}.
    27602623The interpretations of the expression are the interpretations of the second operand.
    27612624
     
    27922655{ ... }
    27932656\end{lstlisting}
    2794 Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the second.
     2657Without the rule, \lstinline@Complex@ would be a type in the first case, and a parameter name in the second.
    27952658\end{rationale}
    27962659
     
    28182681\examples
    28192682\begin{lstlisting}
    2820 struct point {@\impl{point}@
     2683struct point {§\impl{point}§
    28212684        int x, y;
    28222685};
    2823 struct color_point {@\impl{color_point}@
     2686struct color_point {§\impl{color_point}§
    28242687        enum { RED, BLUE, GREEN } color;
    28252688        struct point;
     
    28282691cp.x = 0;
    28292692cp.color = RED;
    2830 struct literal {@\impl{literal}@
     2693struct literal {§\impl{literal}§
    28312694        enum { NUMBER, STRING } tag;
    28322695        union {
     
    28492712\begin{syntax}
    28502713\lhs{forall-specifier}
    2851 \rhs \lstinline$forall$ \lstinline$($ \nonterm{type-parameter-list} \lstinline$)$
     2714\rhs \lstinline@forall@ \lstinline@(@ \nonterm{type-parameter-list} \lstinline@)@
    28522715\end{syntax}
    28532716
     
    28612724} mkPair( T, T ); // illegal
    28622725\end{lstlisting}
    2863 If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the members' type be?
     2726If an instance of \lstinline@struct Pair@ was declared later in the current scope, what would the members' type be?
    28642727\end{rationale}
    28652728\end{comment}
     
    28682731The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type identifiers, function and object identifiers with \Index{no linkage}.
    28692732
    2870 If, in the declaration ``\lstinline$T D$'', \lstinline$T$ contains \nonterm{forall-specifier}s and
    2871 \lstinline$D$ has the form
    2872 \begin{lstlisting}
    2873 D( @\normalsize\nonterm{parameter-type-list}@ )
    2874 \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
     2733If, in the declaration ``\lstinline@T D@'', \lstinline@T@ contains \nonterm{forall-specifier}s and
     2734\lstinline@D@ has the form
     2735\begin{lstlisting}
     2736D( §\normalsize\nonterm{parameter-type-list}§ )
     2737\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
    28752738\nonterm{type-parameter-list} or it and an inferred parameter are used as arguments of a
    28762739\Index{specification} in one of the \nonterm{forall-specifier}s.
     
    28832746If this restriction were lifted, it would be possible to write
    28842747\begin{lstlisting}
    2885 forall( otype T ) T * alloc( void );@\use{alloc}@ int *p = alloc();
    2886 \end{lstlisting}
    2887 Here \lstinline$alloc()$ would receive \lstinline$int$ as an inferred argument, and return an
    2888 \lstinline$int *$.
    2889 In general, if a call to \lstinline$alloc()$ is a subexpression of an expression involving polymorphic functions and overloaded identifiers, there could be considerable distance between the call and the subexpression that causes \lstinline$T$ to be bound.
    2890 
    2891 With the current restriction, \lstinline$alloc()$ must be given an argument that determines
    2892 \lstinline$T$:
    2893 \begin{lstlisting}
    2894 forall( otype T ) T * alloc( T initial_value );@\use{alloc}@
     2748forall( otype T ) T * alloc( void );§\use{alloc}§ int *p = alloc();
     2749\end{lstlisting}
     2750Here \lstinline@alloc()@ would receive \lstinline@int@ as an inferred argument, and return an
     2751\lstinline@int *@.
     2752In 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.
     2753
     2754With the current restriction, \lstinline@alloc()@ must be given an argument that determines
     2755\lstinline@T@:
     2756\begin{lstlisting}
     2757forall( otype T ) T * alloc( T initial_value );§\use{alloc}§
    28952758\end{lstlisting}
    28962759\end{rationale}
     
    29172780forall( otype T ) T fT( T );
    29182781\end{lstlisting}
    2919 \lstinline$fi()$ takes an \lstinline$int$ and returns an \lstinline$int$. \lstinline$fT()$ takes a
    2920 \lstinline$T$ and returns a \lstinline$T$, for any type \lstinline$T$.
     2782\lstinline@fi()@ takes an \lstinline@int@ and returns an \lstinline@int@. \lstinline@fT()@ takes a
     2783\lstinline@T@ and returns a \lstinline@T@, for any type \lstinline@T@.
    29212784\begin{lstlisting}
    29222785int (*pfi )( int ) = fi;
    29232786forall( otype T ) T (*pfT )( T ) = fT;
    29242787\end{lstlisting}
    2925 \lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not polymorphic, but the function it points at is.
     2788\lstinline@pfi@ and \lstinline@pfT@ are pointers to functions. \lstinline@pfT@ is not polymorphic, but the function it points at is.
    29262789\begin{lstlisting}
    29272790int (*fvpfi( void ))( int ) {
     
    29322795}
    29332796\end{lstlisting}
    2934 \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.
     2797\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.
    29352798\begin{lstlisting}
    29362799forall( otype T ) int ( *fTpfi( T ) )( int );
     
    29382801forall( otype T, otype U ) U ( *fTpfU( T ) )( U );
    29392802\end{lstlisting}
    2940 \lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function taking an integer and returning an integer.
    2941 It could return \lstinline$pfi$. \lstinline$fTpfT()$ is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning
    2942 \lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$.
    2943 For instance, in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and
    2944 ``\lstinline$fTpfT("yes")("no")$'' are legal, but ``\lstinline$fTpfT(17)("no")$'' is illegal.
    2945 \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
    2946 \lstinline$char *$.
     2803\lstinline@fTpfi()@ is a polymorphic function that returns a pointer to a monomorphic function taking an integer and returning an integer.
     2804It could return \lstinline@pfi@. \lstinline@fTpfT()@ is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning
     2805\lstinline@T@, where \lstinline@T@ is an inferred parameter of \lstinline@fTpfT()@.
     2806For 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
     2807``\lstinline@fTpfT("yes")("no")@'' are legal, but ``\lstinline@fTpfT(17)("no")@'' is illegal.
     2808\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
     2809\lstinline@char *@.
    29472810\begin{lstlisting}
    29482811forall( otype T, otype U, otype V ) U * f( T *, U, V * const );
    29492812forall( otype U, otype V, otype W ) U * g( V *, U, W * const );
    29502813\end{lstlisting}
    2951 The functions \lstinline$f()$ and \lstinline$g()$ have compatible types.
     2814The functions \lstinline@f()@ and \lstinline@g()@ have compatible types.
    29522815Let \(f\) and \(g\) be their types;
    2953 then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\)
    2954 = \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$.
     2816then \(f_1\) = \lstinline@T@, \(f_2\) = \lstinline@U@, \(f_3\) = \lstinline@V@, \(g_1\)
     2817= \lstinline@V@, \(g_2\) = \lstinline@U@, and \(g_3\) = \lstinline@W@.
    29552818Replacing every \(f_i\) by \(g_i\) in \(f\) gives
    29562819\begin{lstlisting}
     
    29582821\end{lstlisting} which has a return type and parameter list that is compatible with \(g\).
    29592822\begin{rationale}
    2960 The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave room for inferred parameters of ordinary types in case parameterized types get added one day.
     2823The 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.
    29612824
    29622825Even without parameterized types, I might try to allow
     
    29842847\subsection{Type qualifiers}
    29852848
    2986 \CFA defines a new type qualifier \lstinline$lvalue$\impl{lvalue}\index{lvalue}.
     2849\CFA defines a new type qualifier \lstinline@lvalue@\impl{lvalue}\index{lvalue}.
    29872850\begin{syntax}
    29882851\oldlhs{type-qualifier}
    2989 \rhs \lstinline$lvalue$
     2852\rhs \lstinline@lvalue@
    29902853\end{syntax}
    29912854
    29922855\constraints
    2993 \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.
     2856\Indexc{restrict} Types other than type parameters and pointer types whose referenced type is an object type shall not be restrict-qualified.
    29942857
    29952858\semantics
    2996 An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not establish any special semantics in that case.
     2859An object's type may be a restrict-qualified type parameter.
     2860\lstinline@restrict@ does not establish any special semantics in that case.
    29972861
    29982862\begin{rationale}
     
    30002864\end{rationale}
    30012865
    3002 \lstinline$lvalue$ may be used to qualify the return type of a function type.
    3003 Let \lstinline$T$ be an unqualified version of a type;
     2866\lstinline@lvalue@ may be used to qualify the return type of a function type.
     2867Let \lstinline@T@ be an unqualified version of a type;
    30042868then the result of calling a function with return type
    3005 \lstinline$lvalue T$ is a \Index{modifiable lvalue} of type \lstinline$T$.
    3006 \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.
    3007 \begin{rationale}
    3008 The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the return type of a function if the \lstinline$lvalue$ qualifier is also used.
     2869\lstinline@lvalue T@ is a \Index{modifiable lvalue} of type \lstinline@T@.
     2870\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.
     2871\begin{rationale}
     2872The \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.
    30092873\end{rationale}
    30102874
     
    30132877
    30142878\begin{rationale}
    3015 \lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to object of type \lstinline$T$) type.
     2879\lstinline@lvalue@ provides some of the functionality of {\CC}'s ``\lstinline@T&@'' ( reference to object of type \lstinline@T@) type.
    30162880Reference types have four uses in {\CC}.
    30172881\begin{itemize}
    30182882\item
    3019 They are necessary for user-defined operators that return lvalues, such as ``subscript'' and
    3020 ``dereference''.
    3021 
    3022 \item
    3023 A reference can be used to define an alias for a complicated lvalue expression, as a way of getting some of the functionality of the Pascal \lstinline$with$ statement.
     2883They are necessary for user-defined operators that return lvalues, such as ``subscript'' and ``dereference''.
     2884
     2885\item
     2886A 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.
    30242887The following {\CC} code gives an example.
    30252888\begin{lstlisting}
     
    30342897A reference parameter can be used to allow a function to modify an argument without forcing the caller to pass the address of the argument.
    30352898This is most useful for user-defined assignment operators.
    3036 In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and the two expressions
     2899In {\CC}, plain assignment is done by a function called ``\lstinline@operator=@'', and the two expressions
    30372900\begin{lstlisting}
    30382901a = b;
    30392902operator=( a, b );
    30402903\end{lstlisting} are equivalent.
    3041 If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''.
     2904If \lstinline@a@ and \lstinline@b@ are of type \lstinline@T@, then the first parameter of \lstinline@operator=@ must have type ``\lstinline@T&@''.
    30422905It cannot have type
    3043 \lstinline$T$, because then assignment couldn't alter the variable, and it can't have type
    3044 ``\lstinline$T *$'', because the assignment would have to be written ``\lstinline$&a = b;$''.
    3045 
    3046 In the case of user-defined operators, this could just as well be handled by using pointer types and by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to
    3047 ``\lstinline$operator=(&( a), b )$''.
    3048 Reference parameters of ``normal'' functions are Bad Things, because they remove a useful property of C function calls: an argument can only be modified by a function if it is preceded by ``\lstinline$&$''.
     2906\lstinline@T@, because then assignment couldn't alter the variable, and it can't have type
     2907``\lstinline@T *@'', because the assignment would have to be written ``\lstinline@&a = b;@''.
     2908
     2909In 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
     2910``\lstinline@operator=(&( a), b )@''.
     2911Reference 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@&@''.
    30492912
    30502913\item
    30512914References to \Index{const-qualified} types can be used instead of value parameters.  Given the
    3052 {\CC} function call ``\lstinline$fiddle( a_thing )$'', where the type of \lstinline$a_thing$ is
    3053 \lstinline$Thing$, the type of \lstinline$fiddle$ could be either of
     2915{\CC} function call ``\lstinline@fiddle( a_thing )@'', where the type of \lstinline@a_thing@ is
     2916\lstinline@Thing@, the type of \lstinline@fiddle@ could be either of
    30542917\begin{lstlisting}
    30552918void fiddle( Thing );
    30562919void fiddle( const Thing & );
    30572920\end{lstlisting}
    3058 If the second form is used, then constructors and destructors are not invoked to create a temporary variable at the call site ( and it is bad style for the caller to make any assumptions about such things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by aliases.
    3059 The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too large or their constructors or destructors are too expensive.
     2921If 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.
     2922The reference form might be chosen for efficiency's sake if \lstinline@Thing@s are too large or their constructors or destructors are too expensive.
    30602923An implementation may switch between them without causing trouble for well-behaved clients.
    30612924This leaves the implementor to define ``too large'' and ``too expensive''.
     
    30652928void fiddle( const volatile Thing );
    30662929\end{lstlisting} with call-by-reference.
    3067 Since it knows all about the size of \lstinline$Thing$s and the parameter passing mechanism, it should be able to come up with a better definition of ``too large'', and may be able to make a good guess at ``too expensive''.
     2930Since 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''.
    30682931\end{itemize}
    30692932
     
    30852948\begin{syntax}
    30862949\lhs{spec-definition}
    3087 \rhs \lstinline$spec$ \nonterm{identifier}
    3088         \lstinline$($ \nonterm{type-parameter-list} \lstinline$)$
    3089         \lstinline${$ \nonterm{spec-declaration-list}\opt \lstinline$}$
     2950\rhs \lstinline@spec@ \nonterm{identifier}
     2951        \lstinline@(@ \nonterm{type-parameter-list} \lstinline@)@
     2952        \lstinline@{@ \nonterm{spec-declaration-list}\opt \lstinline@}@
    30902953\lhs{spec-declaration-list}
    3091 \rhs \nonterm{spec-declaration} \lstinline$;$
    3092 \rhs \nonterm{spec-declaration-list} \nonterm{spec-declaration} \lstinline$;$
     2954\rhs \nonterm{spec-declaration} \lstinline@;@
     2955\rhs \nonterm{spec-declaration-list} \nonterm{spec-declaration} \lstinline@;@
    30932956\lhs{spec-declaration}
    30942957\rhs \nonterm{specifier-qualifier-list} \nonterm{declarator-list}
    30952958\lhs{declarator-list}
    30962959\rhs \nonterm{declarator}
    3097 \rhs \nonterm{declarator-list} \lstinline$,$ \nonterm{declarator}
     2960\rhs \nonterm{declarator-list} \lstinline@,@ \nonterm{declarator}
    30982961\end{syntax}
    30992962\begin{rationale}
     
    31172980\rhs \nonterm{assertion-list} \nonterm{assertion}
    31182981\lhs{assertion}
    3119 \rhs \lstinline$|$ \nonterm{identifier} \lstinline$($ \nonterm{type-name-list} \lstinline$)$
    3120 \rhs \lstinline$|$ \nonterm{spec-declaration}
     2982\rhs \lstinline@|@ \nonterm{identifier} \lstinline@(@ \nonterm{type-name-list} \lstinline@)@
     2983\rhs \lstinline@|@ \nonterm{spec-declaration}
    31212984\lhs{type-name-list}
    31222985\rhs \nonterm{type-name}
    3123 \rhs \nonterm{type-name-list} \lstinline$,$ \nonterm{type-name}
     2986\rhs \nonterm{type-name-list} \lstinline@,@ \nonterm{type-name}
    31242987\end{syntax}
    31252988
     
    31282991The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}.
    31292992If the
    3130 \nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type name of an \Index{object type};
    3131 if it uses \lstinline$dtype$, the argument shall be the type name of an object type or an \Index{incomplete type};
    3132 and if it uses \lstinline$ftype$, the argument shall be the type name of a \Index{function type}.
     2993\nonterm{type-parameter} uses type-class \lstinline@type@\use{type}, the argument shall be the type name of an \Index{object type};
     2994if it uses \lstinline@dtype@, the argument shall be the type name of an object type or an \Index{incomplete type};
     2995and if it uses \lstinline@ftype@, the argument shall be the type name of a \Index{function type}.
    31332996
    31342997\semantics
     
    31433006\examples
    31443007\begin{lstlisting}
    3145 forall( otype T | T ?*?( T, T ))@\use{?*?}@
    3146 T square( T val ) {@\impl{square}@
     3008forall( otype T | T ?*?( T, T ))§\use{?*?}§
     3009T square( T val ) {§\impl{square}§
    31473010        return val + val;
    31483011}
    3149 trait summable( otype T ) {@\impl{summable}@
    3150         T ?+=?( T *, T );@\use{?+=?}@
    3151         const T 0;@\use{0}@
     3012trait summable( otype T ) {§\impl{summable}§
     3013        T ?+=?( T *, T );§\use{?+=?}§
     3014        const T 0;§\use{0}§
    31523015};
    3153 trait list_of( otype List, otype Element ) {@\impl{list_of}@
     3016trait list_of( otype List, otype Element ) {§\impl{list_of}§
    31543017        Element car( List );
    31553018        List cdr( List );
     
    31603023trait sum_list( otype List, otype Element | summable( Element ) | list_of( List, Element ) ) {};
    31613024\end{lstlisting}
    3162 \lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added up.
    3163 The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion parameters
     3025\lstinline@sum_list@ contains seven declarations, which describe a list whose elements can be added up.
     3026The assertion ``\lstinline@|sum_list( i_list, int )@''\use{sum_list} produces the assertion parameters
    31643027\begin{lstlisting}
    31653028int ?+=?( int *, int );
     
    31783041\lhs{type-parameter-list}
    31793042\rhs \nonterm{type-parameter}
    3180 \rhs \nonterm{type-parameter-list} \lstinline$,$ \nonterm{type-parameter}
     3043\rhs \nonterm{type-parameter-list} \lstinline@,@ \nonterm{type-parameter}
    31813044\lhs{type-parameter}
    31823045\rhs \nonterm{type-class} \nonterm{identifier} \nonterm{assertion-list}\opt
    31833046\lhs{type-class}
    3184 \rhs \lstinline$type$
    3185 \rhs \lstinline$dtype$
    3186 \rhs \lstinline$ftype$
     3047\rhs \lstinline@type@
     3048\rhs \lstinline@dtype@
     3049\rhs \lstinline@ftype@
    31873050\lhs{type-declaration}
    3188 \rhs \nonterm{storage-class-specifier}\opt \lstinline$type$ \nonterm{type-declarator-list} \verb|;|
     3051\rhs \nonterm{storage-class-specifier}\opt \lstinline@type@ \nonterm{type-declarator-list} \verb|;|
    31893052\lhs{type-declarator-list}
    31903053\rhs \nonterm{type-declarator}
    3191 \rhs \nonterm{type-declarator-list} \lstinline$,$ \nonterm{type-declarator}
     3054\rhs \nonterm{type-declarator-list} \lstinline@,@ \nonterm{type-declarator}
    31923055\lhs{type-declarator}
    3193 \rhs \nonterm{identifier} \nonterm{assertion-list}\opt \lstinline$=$ \nonterm{type-name}
     3056\rhs \nonterm{identifier} \nonterm{assertion-list}\opt \lstinline@=@ \nonterm{type-name}
    31943057\rhs \nonterm{identifier} \nonterm{assertion-list}\opt
    31953058\end{syntax}
     
    32023065
    32033066An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}.
    3204 Identifiers declared with type-class \lstinline$type$\use{type} are \Index{object type}s;
     3067Identifiers declared with type-class \lstinline@type@\use{type} are \Index{object type}s;
    32053068those declared with type-class
    3206 \lstinline$dtype$\use{dtype} are \Index{incomplete type}s;
     3069\lstinline@dtype@\use{dtype} are \Index{incomplete type}s;
    32073070and those declared with type-class
    3208 \lstinline$ftype$\use{ftype} are \Index{function type}s.
     3071\lstinline@ftype@\use{ftype} are \Index{function type}s.
    32093072The 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}.
    32103073
     
    32143077Within 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.
    32153078
    3216 A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}.
     3079A 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}.
    32173080If a
    32183081\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).
     
    32343097
    32353098A type declaration without an initializer and with \Index{storage-class specifier}
    3236 \lstinline$extern$\use{extern} is an \define{opaque type declaration}.
     3099\lstinline@extern@\use{extern} is an \define{opaque type declaration}.
    32373100Opaque types are
    32383101\Index{object type}s.
     
    32493112\end{rationale}
    32503113
    3251 An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a value of \Index{type-class} \lstinline$dtype$.
    3252 An object type\index{object types} which is not a qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$.
     3114An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a value of \Index{type-class} \lstinline@dtype@.
     3115An 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@.
    32533116A
    3254 \Index{function type} is a value of type-class \lstinline$ftype$.
     3117\Index{function type} is a value of type-class \lstinline@ftype@.
    32553118\begin{rationale}
    32563119Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which omits the identifier being declared.
     
    32623125Type qualifiers are a weak point of C's type system.
    32633126Consider the standard library function
    3264 \lstinline$strchr()$ which, given a string and a character, returns a pointer to the first occurrence of the character in the string.
    3265 \begin{lstlisting}
    3266 char *strchr( const char *s, int c ) {@\impl{strchr}@
     3127\lstinline@strchr()@ which, given a string and a character, returns a pointer to the first occurrence of the character in the string.
     3128\begin{lstlisting}
     3129char *strchr( const char *s, int c ) {§\impl{strchr}§
    32673130        char real_c = c; // done because c was declared as int.
    32683131        for ( ; *s != real_c; s++ )
     
    32713134}
    32723135\end{lstlisting}
    3273 The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be used to search a constant string, but the return type must be \lstinline$char *$, because the result might be used to modify a non-constant string.
     3136The 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.
    32743137Hence the body must perform a cast, and ( even worse)
    3275 \lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings.
    3276 What is needed is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has exactly the same qualifiers.
     3138\lstinline@strchr()@ provides a type-safe way to attempt to modify constant strings.
     3139What is needed is some way to say that \lstinline@s@'s type might contain qualifiers, and the result type has exactly the same qualifiers.
    32773140Polymorphic functions do not provide a fix for this deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of type values.
    3278 Instead, overloading can be used to define \lstinline$strchr()$ for each combination of qualifiers.
     3141Instead, overloading can be used to define \lstinline@strchr()@ for each combination of qualifiers.
    32793142\end{rationale}
    32803143
     
    33013164\end{lstlisting}
    33023165Without this restriction, \CFA might require ``module initialization'' code ( since
    3303 \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$.
     3166\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@.
    33043167
    33053168A 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.
     
    33183181\nonterm{struct-declaration}, type declarations can not be structure members.
    33193182The form of
    3320 \nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline$type$.
     3183\nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline@type@.
    33213184Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued expressions.
    33223185It also side-steps the problem of type-valued expressions producing different values in different declarations.
     
    33333196#include <stdlib.h>
    33343197T * new( otype T ) { return ( T * )malloc( sizeof( T) ); };
    3335 @\ldots@ int * ip = new( int );
    3336 \end{lstlisting}
    3337 This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the meaning of \lstinline$T$ in the scope that contains \lstinline$new$;
     3198§\ldots§ int * ip = new( int );
     3199\end{lstlisting}
     3200This 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@;
    33383201it could be undefined, or a type name, or a function or variable name.
    33393202Nothing good can result from such a situation.
     
    33523215f2( v2 );
    33533216\end{lstlisting}
    3354 \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]$.
     3217\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]@.
    33553218
    33563219A translation unit containing the declarations
    33573220\begin{lstlisting}
    3358 extern type Complex;@\use{Complex}@ // opaque type declaration
    3359 extern float abs( Complex );@\use{abs}@
    3360 \end{lstlisting} can contain declarations of complex numbers, which can be passed to \lstinline$abs$.
    3361 Some other translation unit must implement \lstinline$Complex$ and \lstinline$abs$.
     3221extern type Complex;§\use{Complex}§ // opaque type declaration
     3222extern float abs( Complex );§\use{abs}§
     3223\end{lstlisting} can contain declarations of complex numbers, which can be passed to \lstinline@abs@.
     3224Some other translation unit must implement \lstinline@Complex@ and \lstinline@abs@.
    33623225That unit might contain the declarations
    33633226\begin{lstlisting}
    3364 otype Complex = struct { float re, im; };@\impl{Complex}@
    3365 Complex cplx_i = { 0.0, 1.0 };@\impl{cplx_i}@
    3366 float abs( Complex c ) {@\impl{abs( Complex )}@
     3227otype Complex = struct { float re, im; };§\impl{Complex}§
     3228Complex cplx_i = { 0.0, 1.0 };§\impl{cplx_i}§
     3229float abs( Complex c ) {§\impl{abs( Complex )}§
    33673230        return sqrt( c.re * c.re + c.im * c.im );
    33683231}
    33693232\end{lstlisting}
    3370 Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can be retrieved.
    3371 
    3372 \begin{lstlisting}
    3373 otype Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight.
    3374 Time_of_day ?+?( Time_of_day t1, int seconds ) {@\impl{?+?}@
     3233Note that \lstinline@c@ is implicitly converted to a \lstinline@struct@ so that its components can be retrieved.
     3234
     3235\begin{lstlisting}
     3236otype Time_of_day = int;§\impl{Time_of_day}§ // seconds since midnight.
     3237Time_of_day ?+?( Time_of_day t1, int seconds ) {§\impl{?+?}§
    33753238        return (( int)t1 + seconds ) % 86400;
    33763239}
    33773240\end{lstlisting}
    3378 \lstinline$t1$ must be cast to its implementation type to prevent infinite recursion.
     3241\lstinline@t1@ must be cast to its implementation type to prevent infinite recursion.
    33793242
    33803243\begin{rationale}
    33813244Within the scope of a type definition, an instance of the type can be viewed as having that type or as having the implementation type.
    3382 In the \lstinline$Time_of_day$ example, the difference is important.
     3245In the \lstinline@Time_of_day@ example, the difference is important.
    33833246Different languages have treated the distinction between the abstraction and the implementation in different ways.
    33843247\begin{itemize}
    33853248\item
    3386 Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies.
    3387 Two primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views.
    3388 \item
    3389 The Simula class \cite{Simula87} is essentially a record type.
     3249Inside a Clu cluster \cite{CLU}, the declaration of an instance states which view applies.
     3250Two primitives called \lstinline@up@ and \lstinline@down@ can be used to convert between the views.
     3251\item
     3252The Simula class \cite{SIMULA87} is essentially a record type.
    33903253Since 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.
    33913254In {\CC}
    3392 \cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be overloaded.
     3255\cite{C++}, operations on class instances include assignment and ``\lstinline@&@'', which can be overloaded.
    33933256A ``scope resolution'' operator can be used inside the class to specify whether the abstract or implementation version of the operation should be used.
    33943257\item
    3395 An Ada derived type definition \cite{ada} creates a new type from an old type, and also implicitly declares derived subprograms that correspond to the existing subprograms that use the old type as a parameter type or result type.
     3258An 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.
    33963259The derived subprograms are clones of the existing subprograms with the old type replaced by the derived type.
    33973260Literals and aggregates of the old type are also cloned.
     
    34033266In this case, explicit conversions between the derived type and the old type can be used.
    34043267\end{itemize}
    3405 \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$.
     3268\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@.
    34063269\end{rationale}
    34073270
     
    34093272\subsubsection{Default functions and objects}
    34103273
    3411 A declaration\index{type declaration} of a type identifier \lstinline$T$ with type-class
    3412 \lstinline$type$ implicitly declares a \define{default assignment} function
    3413 \lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$.
     3274A declaration\index{type declaration} of a type identifier \lstinline@T@ with type-class
     3275\lstinline@type@ implicitly declares a \define{default assignment} function
     3276\lstinline@T ?=?( T *, T )@\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline@T@.
    34143277\begin{rationale}
    34153278Assignment 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).
    34163279Without this rule, nearly every inferred type parameter would need an accompanying assignment assertion parameter.
    34173280If a type parameter should not have an assignment operation,
    3418 \lstinline$dtype$ should be used.
     3281\lstinline@dtype@ should be used.
    34193282If 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.
    34203283\end{rationale}
    34213284
    3422 A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment function.
    3423 A definition\index{type definition} of a type identifier \lstinline$T$ with implementation type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and
     3285A 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.
     3286A 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
    34243287\define{default object}s as declared by the assertion declarations.
    3425 The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$.
     3288The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline@T@.
    34263289Their values are determined as follows:
    34273290\begin{itemize}
    34283291\item
    3429 If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced by \lstinline$T$ is compatible with the type of the default object, then the default object is initialized with that object.
    3430 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default object.
     3292If 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.
     3293Otherwise the scope of the declaration of \lstinline@T@ must contain a definition of the default object.
    34313294
    34323295\item
    3433 If at the definition of \lstinline$T$ there is visible a declaration of a function with the same name as the default function, and if the type of that function with all occurrence of \lstinline$I$ replaced by \lstinline$T$ is compatible with the type of the default function, then the default function calls that function after converting its arguments and returns the converted result.
    3434 
    3435 Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that at the definition of \lstinline$T$ there is visible a declaration of a function with the same name as the default function, and the type of that function with all occurrences of the anonymous member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the default function, then the default function calls that function after converting its arguments and returns the result.
    3436 
    3437 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default function.
     3296If 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.
     3297
     3298Otherwise, 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.
     3299
     3300Otherwise the scope of the declaration of \lstinline@T@ must contain a definition of the default function.
    34383301\end{itemize}
    34393302\begin{rationale}
     
    34413304\end{rationale}
    34423305
    3443 A function or object with the same type and name as a default function or object that is declared within the scope of the definition of \lstinline$T$ replaces the default function or object.
     3306A 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.
    34443307
    34453308\examples
     
    34513314Pair b = { 1, 1 };
    34523315\end{lstlisting}
    3453 The definition of \lstinline$Pair$ implicitly defines two objects \lstinline$a$ and \lstinline$b$.
    3454 \lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$.
     3316The definition of \lstinline@Pair@ implicitly defines two objects \lstinline@a@ and \lstinline@b@.
     3317\lstinline@Pair a@ inherits its value from the \lstinline@struct impl a@.
    34553318The definition of
    3456 \lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value from.
     3319\lstinline@Pair b@ is compulsory because there is no \lstinline@struct impl b@ to construct a value from.
    34573320\begin{lstlisting}
    34583321trait ss( otype T ) {
     
    34603323        void munge( T * );
    34613324}
    3462 otype Whatsit | ss( Whatsit );@\use{Whatsit}@
    3463 otype Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@
     3325otype Whatsit | ss( Whatsit );§\use{Whatsit}§
     3326otype Doodad | ss( Doodad ) = struct doodad {§\use{Doodad}§
    34643327        Whatsit; // anonymous member
    34653328        int extra;
     
    34673330Doodad clone( Doodad ) { ... }
    34683331\end{lstlisting}
    3469 The definition of \lstinline$Doodad$ implicitly defines three functions:
     3332The definition of \lstinline@Doodad@ implicitly defines three functions:
    34703333\begin{lstlisting}
    34713334Doodad ?=?( Doodad *, Doodad );
     
    34733336void munge( Doodad * );
    34743337\end{lstlisting}
    3475 The assignment function inherits \lstinline$struct doodad$'s assignment function because the types match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout.
    3476 \lstinline$munge()$ inherits \lstinline$Whatsit$'s \lstinline$munge()$ because the types match when
    3477 \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
    3478 \lstinline$Doodad$'s \lstinline$clone()$'s type.
     3338The assignment function inherits \lstinline@struct doodad@'s assignment function because the types match when \lstinline@struct doodad@ is replaced by \lstinline@Doodad@ throughout.
     3339\lstinline@munge()@ inherits \lstinline@Whatsit@'s \lstinline@munge()@ because the types match when
     3340\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
     3341\lstinline@Doodad@'s \lstinline@clone()@'s type.
    34793342Hence the definition of
    3480 ``\lstinline$Doodad clone( Doodad )$'' is necessary.
     3343``\lstinline@Doodad clone( Doodad )@'' is necessary.
    34813344
    34823345Default functions and objects are subject to the normal scope rules.
    34833346\begin{lstlisting}
    3484 otype T = @\ldots@;
    3485 T a_T = @\ldots@;               // Default assignment used.
     3347otype T = §\ldots§;
     3348T a_T = §\ldots§;               // Default assignment used.
    34863349T ?=?( T *, T );
    3487 T a_T = @\ldots@;               // Programmer-defined assignment called.
     3350T a_T = §\ldots§;               // Programmer-defined assignment called.
    34883351\end{lstlisting}
    34893352\begin{rationale}
     
    35183381\begin{syntax}
    35193382\oldlhs{labeled-statement}
    3520 \rhs \lstinline$case$ \nonterm{case-value-list} : \nonterm{statement}
     3383\rhs \lstinline@case@ \nonterm{case-value-list} : \nonterm{statement}
    35213384\lhs{case-value-list}
    35223385\rhs \nonterm{case-value}
    3523 \rhs \nonterm{case-value-list} \lstinline$,$ \nonterm{case-value}
     3386\rhs \nonterm{case-value-list} \lstinline@,@ \nonterm{case-value}
    35243387\lhs{case-value}
    35253388\rhs \nonterm{constant-expression}
    35263389\rhs \nonterm{subrange}
    35273390\lhs{subrange}
    3528 \rhs \nonterm{constant-expression} \lstinline$~$ \nonterm{constant-expression}
     3391\rhs \nonterm{constant-expression} \lstinline@~@ \nonterm{constant-expression}
    35293392\end{syntax}
    35303393
     
    35393402case 1~4, 9~14, 27~32:
    35403403\end{lstlisting}
    3541 The \lstinline$case$ and \lstinline$default$ clauses are restricted within the \lstinline$switch$ and \lstinline$choose$ statements, precluding Duff's device.
     3404The \lstinline@case@ and \lstinline@default@ clauses are restricted within the \lstinline@switch@ and \lstinline@choose@ statements, precluding Duff's device.
    35423405
    35433406
    35443407\subsection{Expression and null statements}
    35453408
    3546 The expression in an expression statement is treated as being cast to \lstinline$void$.
     3409The expression in an expression statement is treated as being cast to \lstinline@void@.
    35473410
    35483411
     
    35513414\begin{syntax}
    35523415\oldlhs{selection-statement}
    3553 \rhs \lstinline$choose$ \lstinline$($ \nonterm{expression} \lstinline$)$ \nonterm{statement}
     3416\rhs \lstinline@choose@ \lstinline@(@ \nonterm{expression} \lstinline@)@ \nonterm{statement}
    35543417\end{syntax}
    35553418
    3556 The controlling expression \lstinline$E$ in the \lstinline$switch$ and \lstinline$choose$ statement:
     3419The controlling expression \lstinline@E@ in the \lstinline@switch@ and \lstinline@choose@ statement:
    35573420\begin{lstlisting}
    35583421switch ( E ) ...
     
    35603423\end{lstlisting} may have more than one interpretation, but it shall have only one interpretation with an integral type.
    35613424An \Index{integer promotion} is performed on the expression if necessary.
    3562 The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type.
     3425The constant expressions in \lstinline@case@ statements with the switch are converted to the promoted type.
    35633426
    35643427
    35653428\setcounter{subsubsection}{3}
    3566 \subsubsection{The \lstinline$choose$ statement}
    3567 
    3568 The \lstinline$choose$ statement is the same as the \lstinline$switch$ statement except control transfers to the end of the \lstinline$choose$ statement at a \lstinline$case$ or \lstinline$default$ labeled statement.
    3569 The \lstinline$fallthru$ statement is used to fall through to the next \lstinline$case$ or \lstinline$default$ labeled statement.
     3429\subsubsection[The choose statement]{The \lstinline@choose@ statement}
     3430
     3431The \lstinline@choose@ statement is the same as the \lstinline@switch@ statement except control transfers to the end of the \lstinline@choose@ statement at a \lstinline@case@ or \lstinline@default@ labeled statement.
     3432The \lstinline@fallthru@ statement is used to fall through to the next \lstinline@case@ or \lstinline@default@ labeled statement.
    35703433The following have identical meaning:
    35713434\begin{flushleft}
     
    35923455\end{tabular}
    35933456\end{flushleft}
    3594 The \lstinline$choose$ statement addresses the problem of accidental fall-through associated with the \lstinline$switch$ statement.
     3457The \lstinline@choose@ statement addresses the problem of accidental fall-through associated with the \lstinline@switch@ statement.
    35953458
    35963459
    35973460\subsection{Iteration statements}
    35983461
    3599 The controlling expression \lstinline$E$ in the loops
     3462The controlling expression \lstinline@E@ in the loops
    36003463\begin{lstlisting}
    36013464if ( E ) ...
    36023465while ( E ) ...
    36033466do ... while ( E );
    3604 \end{lstlisting} is treated as ``\lstinline$( int )((E)!=0)$''.
     3467\end{lstlisting} is treated as ``\lstinline@( int )((E)!=0)@''.
    36053468
    36063469The statement
    36073470\begin{lstlisting}
    3608 for ( a; b; c ) @\ldots@
     3471for ( a; b; c ) §\ldots§
    36093472\end{lstlisting} is treated as
    36103473\begin{lstlisting}
     
    36173480\begin{syntax}
    36183481\oldlhs{jump-statement}
    3619 \rhs \lstinline$continue$ \nonterm{identifier}\opt
    3620 \rhs \lstinline$break$ \nonterm{identifier}\opt
     3482\rhs \lstinline@continue@ \nonterm{identifier}\opt
     3483\rhs \lstinline@break@ \nonterm{identifier}\opt
    36213484\rhs \ldots
    3622 \rhs \lstinline$throw$ \nonterm{assignment-expression}\opt
    3623 \rhs \lstinline$throwResume$ \nonterm{assignment-expression}\opt \nonterm{at-expression}\opt
    3624 \lhs{at-expression} \lstinline$_At$ \nonterm{assignment-expression}
     3485\rhs \lstinline@throw@ \nonterm{assignment-expression}\opt
     3486\rhs \lstinline@throwResume@ \nonterm{assignment-expression}\opt \nonterm{at-expression}\opt
     3487\lhs{at-expression} \lstinline@_At@ \nonterm{assignment-expression}
    36253488\end{syntax}
    36263489
    3627 Labeled \lstinline$continue$ and \lstinline$break$ allow useful but restricted control-flow that reduces the need for the \lstinline$goto$ statement for exiting multiple nested control-structures.
     3490Labeled \lstinline@continue@ and \lstinline@break@ allow useful but restricted control-flow that reduces the need for the \lstinline@goto@ statement for exiting multiple nested control-structures.
    36283491\begin{lstlisting}
    36293492L1: {                                                   // compound
     
    36523515
    36533516\setcounter{subsubsection}{1}
    3654 \subsubsection{The \lstinline$continue$ statement}
    3655 
    3656 The identifier in a \lstinline$continue$ statement shall name a label located on an enclosing iteration statement.
    3657 
    3658 
    3659 \subsubsection{The \lstinline$break$ statement}
    3660 
    3661 The identifier in a \lstinline$break$ statement shall name a label located on an enclosing compound, selection or iteration statement.
    3662 
    3663 
    3664 \subsubsection{The \lstinline$return$ statement}
    3665 
    3666 An expression in a \lstinline$return$ statement is treated as being cast to the result type of the function.
    3667 
    3668 
    3669 \subsubsection{The \lstinline$throw$ statement}
     3517\subsubsection[The continue statement]{The \lstinline@continue@ statement}
     3518
     3519The identifier in a \lstinline@continue@ statement shall name a label located on an enclosing iteration statement.
     3520
     3521
     3522\subsubsection[The break statement]{The \lstinline@break@ statement}
     3523
     3524The identifier in a \lstinline@break@ statement shall name a label located on an enclosing compound, selection or iteration statement.
     3525
     3526
     3527\subsubsection[The return statement]{The \lstinline@return@ statement}
     3528
     3529An expression in a \lstinline@return@ statement is treated as being cast to the result type of the function.
     3530
     3531
     3532\subsubsection[The throw statement]{The \lstinline@throw@ statement}
    36703533
    36713534When an exception is raised, \Index{propagation} directs control from a raise in the source execution to a handler in the faulting execution.
    36723535
    36733536
    3674 \subsubsection{The \lstinline$throwResume$ statement}
     3537\subsubsection[The throwResume statement]{The \lstinline@throwResume@ statement}
    36753538
    36763539
     
    36793542\begin{syntax}
    36803543\lhs{exception-statement}
    3681 \rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{handler-list}
    3682 \rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{finally-clause}
    3683 \rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{handler-list} \nonterm{finally-clause}
     3544\rhs \lstinline@try@ \nonterm{compound-statement} \nonterm{handler-list}
     3545\rhs \lstinline@try@ \nonterm{compound-statement} \nonterm{finally-clause}
     3546\rhs \lstinline@try@ \nonterm{compound-statement} \nonterm{handler-list} \nonterm{finally-clause}
    36843547\lhs{handler-list}
    36853548\rhs \nonterm{handler-clause}
    3686 \rhs \lstinline$catch$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
    3687 \rhs \nonterm{handler-clause} \lstinline$catch$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
    3688 \rhs \lstinline$catchResume$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
    3689 \rhs \nonterm{handler-clause} \lstinline$catchResume$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
     3549\rhs \lstinline@catch@ \lstinline@(@ \ldots \lstinline@)@ \nonterm{compound-statement}
     3550\rhs \nonterm{handler-clause} \lstinline@catch@ \lstinline@(@ \ldots \lstinline@)@ \nonterm{compound-statement}
     3551\rhs \lstinline@catchResume@ \lstinline@(@ \ldots \lstinline@)@ \nonterm{compound-statement}
     3552\rhs \nonterm{handler-clause} \lstinline@catchResume@ \lstinline@(@ \ldots \lstinline@)@ \nonterm{compound-statement}
    36903553\lhs{handler-clause}
    3691 \rhs \lstinline$catch$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
    3692 \rhs \nonterm{handler-clause} \lstinline$catch$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
    3693 \rhs \lstinline$catchResume$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
    3694 \rhs \nonterm{handler-clause} \lstinline$catchResume$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
     3554\rhs \lstinline@catch@ \lstinline@(@ \nonterm{exception-declaration} \lstinline@)@ \nonterm{compound-statement}
     3555\rhs \nonterm{handler-clause} \lstinline@catch@ \lstinline@(@ \nonterm{exception-declaration} \lstinline@)@ \nonterm{compound-statement}
     3556\rhs \lstinline@catchResume@ \lstinline@(@ \nonterm{exception-declaration} \lstinline@)@ \nonterm{compound-statement}
     3557\rhs \nonterm{handler-clause} \lstinline@catchResume@ \lstinline@(@ \nonterm{exception-declaration} \lstinline@)@ \nonterm{compound-statement}
    36953558\lhs{finally-clause}
    3696 \rhs \lstinline$finally$ \nonterm{compound-statement}
     3559\rhs \lstinline@finally@ \nonterm{compound-statement}
    36973560\lhs{exception-declaration}
    36983561\rhs \nonterm{type-specifier}
     
    37023565\rhs \nonterm{new-abstract-declarator-tuple}
    37033566\lhs{asynchronous-statement}
    3704 \rhs \lstinline$enable$ \nonterm{identifier-list} \nonterm{compound-statement}
    3705 \rhs \lstinline$disable$ \nonterm{identifier-list} \nonterm{compound-statement}
     3567\rhs \lstinline@enable@ \nonterm{identifier-list} \nonterm{compound-statement}
     3568\rhs \lstinline@disable@ \nonterm{identifier-list} \nonterm{compound-statement}
    37063569\end{syntax}
    37073570
     
    37093572
    37103573
    3711 \subsubsection{The \lstinline$try$ statement}
    3712 
    3713 The \lstinline$try$ statement is a block with associated handlers, called a \Index{guarded block};
     3574\subsubsection[The try statement]{The \lstinline@try@ statement}
     3575
     3576The \lstinline@try@ statement is a block with associated handlers, called a \Index{guarded block};
    37143577all other blocks are \Index{unguarded block}s.
    3715 A \lstinline$goto$, \lstinline$break$, \lstinline$return$, or \lstinline$continue$ statement can be used to transfer control out of a try block or handler, but not into one.
    3716 
    3717 
    3718 \subsubsection{The \lstinline$enable$/\lstinline$disable$ statements}
    3719 
    3720 The \lstinline$enable$/\lstinline$disable$ statements toggle delivery of \Index{asynchronous exception}s.
     3578A \lstinline@goto@, \lstinline@break@, \lstinline@return@, or \lstinline@continue@ statement can be used to transfer control out of a try block or handler, but not into one.
     3579
     3580
     3581\subsubsection[The enable/disable statements]{The \lstinline@enable@/\lstinline@disable@ statements}
     3582
     3583The \lstinline@enable@/\lstinline@disable@ statements toggle delivery of \Index{asynchronous exception}s.
    37213584
    37223585
     
    37283591\subsection{Predefined macro names}
    37293592
    3730 The implementation shall define the macro names \lstinline$__LINE__$, \lstinline$__FILE__$,
    3731 \lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard.
    3732 It shall not define the macro name \lstinline$__STDC__$.
    3733 
    3734 In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the decimal constant 1.
     3593The implementation shall define the macro names \lstinline@__LINE__@, \lstinline@__FILE__@,
     3594\lstinline@__DATE__@, and \lstinline@__TIME__@, as in the {\c11} standard.
     3595It shall not define the macro name \lstinline@__STDC__@.
     3596
     3597In addition, the implementation shall define the macro name \lstinline@__CFORALL__@ to be the decimal constant 1.
    37353598
    37363599
     
    37493612The pointer, integral, and floating-point types are all \define{scalar types}.
    37503613All of these types can be logically negated and compared.
    3751 The assertion ``\lstinline$scalar( Complex )$'' should be read as ``type \lstinline$Complex$ is scalar''.
    3752 \begin{lstlisting}
    3753 trait scalar( otype T ) {@\impl{scalar}@
     3614The assertion ``\lstinline@scalar( Complex )@'' should be read as ``type \lstinline@Complex@ is scalar''.
     3615\begin{lstlisting}
     3616trait scalar( otype T ) {§\impl{scalar}§
    37543617        int !?( T );
    37553618        int ?<?( T, T ), ?<=?( T, T ), ?==?( T, T ), ?>=?( T, T ), ?>?( T, T ), ?!=?( T, T );
     
    37613624This is equivalent to inheritance of specifications.
    37623625\begin{lstlisting}
    3763 trait arithmetic( otype T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@
     3626trait arithmetic( otype T | scalar( T ) ) {§\impl{arithmetic}§§\use{scalar}§
    37643627        T +?( T ), -?( T );
    37653628        T ?*?( T, T ), ?/?( T, T ), ?+?( T, T ), ?-?( T, T );
     
    37673630\end{lstlisting}
    37683631
    3769 The various flavors of \lstinline$char$ and \lstinline$int$ and the enumerated types make up the
     3632The various flavors of \lstinline@char@ and \lstinline@int@ and the enumerated types make up the
    37703633\define{integral types}.
    37713634\begin{lstlisting}
    3772 trait integral( otype T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@
     3635trait integral( otype T | arithmetic( T ) ) {§\impl{integral}§§\use{arithmetic}§
    37733636        T ~?( T );
    37743637        T ?&?( T, T ), ?|?( T, T ), ?^?( T, T );
     
    37843647The only operation that can be applied to all modifiable lvalues is simple assignment.
    37853648\begin{lstlisting}
    3786 trait m_lvalue( otype T ) {@\impl{m_lvalue}@
     3649trait m_lvalue( otype T ) {§\impl{m_lvalue}§
    37873650        T ?=?( T *, T );
    37883651};
     
    37943657Scalars can also be incremented and decremented.
    37953658\begin{lstlisting}
    3796 trait m_l_scalar( otype T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@
    3797         T ?++( T * ), ?--( T * );@\use{scalar}@@\use{m_lvalue}@
     3659trait m_l_scalar( otype T | scalar( T ) | m_lvalue( T ) ) {§\impl{m_l_scalar}§
     3660        T ?++( T * ), ?--( T * );§\use{scalar}§§\use{m_lvalue}§
    37983661        T ++?( T * ), --?( T * );
    37993662};
     
    38013664
    38023665Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic.
    3803 Note that this results in the ``inheritance'' of \lstinline$scalar$ along both paths.
    3804 \begin{lstlisting}
    3805 trait m_l_arithmetic( otype T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@
    3806         T ?/=?( T *, T ), ?*=?( T *, T );@\use{m_l_scalar}@@\use{arithmetic}@
     3666Note that this results in the ``inheritance'' of \lstinline@scalar@ along both paths.
     3667\begin{lstlisting}
     3668trait m_l_arithmetic( otype T | m_l_scalar( T ) | arithmetic( T ) ) {§\impl{m_l_arithmetic}§
     3669        T ?/=?( T *, T ), ?*=?( T *, T );§\use{m_l_scalar}§§\use{arithmetic}§
    38073670        T ?+=?( T *, T ), ?-=?( T *, T );
    38083671};
    3809 trait m_l_integral( otype T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@
    3810         T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );@\use{m_l_arithmetic}@
    3811         T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );@\use{integral}@
     3672trait m_l_integral( otype T | m_l_arithmetic( T ) | integral( T ) ) {§\impl{m_l_integral}§
     3673        T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );§\use{m_l_arithmetic}§
     3674        T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );§\use{integral}§
    38123675};
    38133676\end{lstlisting}
     
    38173680
    38183681Array 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
    3819 ``\lstinline$a[i]$'' is equivalent to the dereferencing expression ``\lstinline$(*( a+( i )))$''.
    3820 Technically, pointer arithmetic and pointer comparisons other than ``\lstinline$==$'' and
    3821 ``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not enforce those restrictions.
     3682``\lstinline@a[i]@'' is equivalent to the dereferencing expression ``\lstinline@(*( a+( i )))@''.
     3683Technically, pointer arithmetic and pointer comparisons other than ``\lstinline@==@'' and
     3684``\lstinline@!=@'' are only defined for pointers to array elements, but the type system does not enforce those restrictions.
    38223685Consequently, there is no need for a separate ``array type'' specification.
    38233686
    38243687Pointer types are scalar types.
    3825 Like other scalar types, they have ``\lstinline$+$'' and
    3826 ``\lstinline$-$'' operators, but the types do not match the types of the operations in
    3827 \lstinline$arithmetic$, so these operators cannot be consolidated in \lstinline$scalar$.
    3828 \begin{lstlisting}
    3829 trait pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@
     3688Like other scalar types, they have ``\lstinline@+@'' and
     3689``\lstinline@-@'' operators, but the types do not match the types of the operations in
     3690\lstinline@arithmetic@, so these operators cannot be consolidated in \lstinline@scalar@.
     3691\begin{lstlisting}
     3692trait pointer( type P | scalar( P ) ) {§\impl{pointer}§§\use{scalar}§
    38303693        P ?+?( P, long int ), ?+?( long int, P ), ?-?( P, long int );
    38313694        ptrdiff_t ?-?( P, P );
    38323695};
    3833 trait m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@
     3696trait m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {§\impl{m_l_pointer}§
    38343697        P ?+=?( P *, long int ), ?-=?( P *, long int );
    38353698        P ?=?( P *, void * );
     
    38403703Specifications 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.
    38413704Different specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not included in types.
    3842 The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as
    3843 ``\lstinline$Safe_pointer$ acts like a pointer to \lstinline$int$''.
    3844 \begin{lstlisting}
    3845 trait ptr_to( type P | pointer( P ), otype T ) {@\impl{ptr_to}@@\use{pointer}@
     3705The assertion ``\lstinline@|ptr_to( Safe_pointer, int )@'' should be read as
     3706``\lstinline@Safe_pointer@ acts like a pointer to \lstinline@int@''.
     3707\begin{lstlisting}
     3708trait ptr_to( otype P | pointer( P ), otype T ) {§\impl{ptr_to}§§\use{pointer}§
    38463709        lvalue T *?( P );
    38473710        lvalue T ?[?]( P, long int );
    38483711};
    3849 trait ptr_to_const( type P | pointer( P ), otype T ) {@\impl{ptr_to_const}@
     3712trait ptr_to_const( otype P | pointer( P ), otype T ) {§\impl{ptr_to_const}§
    38503713        const lvalue T *?( P );
    3851         const lvalue T ?[?]( P, long int );@\use{pointer}@
     3714        const lvalue T ?[?]( P, long int );§\use{pointer}§
    38523715};
    3853 trait ptr_to_volatile( type P | pointer( P ), otype T ) }@\impl{ptr_to_volatile}@
     3716trait ptr_to_volatile( otype P | pointer( P ), otype T ) }§\impl{ptr_to_volatile}§
    38543717        volatile lvalue T *?( P );
    3855         volatile lvalue T ?[?]( P, long int );@\use{pointer}@
     3718        volatile lvalue T ?[?]( P, long int );§\use{pointer}§
    38563719};
    3857 trait ptr_to_const_volatile( type P | pointer( P ), otype T ) }@\impl{ptr_to_const_volatile}@
    3858         const volatile lvalue T *?( P );@\use{pointer}@
     3720trait ptr_to_const_volatile( otype P | pointer( P ), otype T ) }§\impl{ptr_to_const_volatile}§
     3721        const volatile lvalue T *?( P );§\use{pointer}§
    38593722        const volatile lvalue T ?[?]( P, long int );
    38603723};
    38613724\end{lstlisting}
    38623725
    3863 Assignment to pointers is more complicated than is the case with other types, because the target's type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to a ``\lstinline$const T *$'', a ``\lstinline$volatile T *$'', and a ``\lstinline$const volatile T *$''.
     3726Assignment 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 *@''.
    38643727Again, the pointed-at type is passed in, so that assertions can connect these specifications to the
    3865 ``\lstinline$ptr_to$'' specifications.
    3866 \begin{lstlisting}
    3867 trait m_l_ptr_to( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to}@ otype T | ptr_to( P, T )@\use{ptr_to}@ {
     3728``\lstinline@ptr_to@'' specifications.
     3729\begin{lstlisting}
     3730trait m_l_ptr_to( otype P | m_l_pointer( P ),§\use{m_l_pointer}§§\impl{m_l_ptr_to}§ otype T | ptr_to( P, T )§\use{ptr_to}§ {
    38683731        P ?=?( P *, T * );
    38693732        T * ?=?( T **, P );
    38703733};
    3871 trait m_l_ptr_to_const( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_const}@ otype T | ptr_to_const( P, T )@\use{ptr_to_const}@) {
     3734trait m_l_ptr_to_const( otype P | m_l_pointer( P ),§\use{m_l_pointer}§§\impl{m_l_ptr_to_const}§ otype T | ptr_to_const( P, T )§\use{ptr_to_const}§) {
    38723735        P ?=?( P *, const T * );
    38733736        const T * ?=?( const T **, P );
    38743737};
    3875 trait m_l_ptr_to_volatile( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_volatile}@ otype T | ptr_to_volatile( P, T )) {@\use{ptr_to_volatile}@
     3738trait m_l_ptr_to_volatile( otype P | m_l_pointer( P ),§\use{m_l_pointer}§§\impl{m_l_ptr_to_volatile}§ otype T | ptr_to_volatile( P, T )) {§\use{ptr_to_volatile}§
    38763739        P ?=?( P *, volatile T * );
    38773740        volatile T * ?=?( volatile T **, P );
    38783741};
    3879 trait 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}@
    3880                 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}@
     3742trait m_l_ptr_to_const_volatile( otype P | ptr_to_const_volatile( P ),§\use{ptr_to_const_volatile}§§\impl{m_l_ptr_to_const_volatile}§
     3743                otype 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}§
    38813744        P ?=?( P *, const volatile T * );
    38823745        const volatile T * ?=?( const volatile T **, P );
     
    38873750An 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.
    38883751\begin{lstlisting}
    3889 trait 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 ) ) {
     3752trait 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 ) ) {
    38903753        MyP ?=?( MyP *, CP );
    38913754        CP ?=?( CP *, MyP );
    38923755};
    38933756\end{lstlisting}
    3894 The assertion ``\lstinline$| m_l_ptr_like( Safe_ptr, const int * )$'' should be read as
    3895 ``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''.
     3757The assertion ``\lstinline@| m_l_ptr_like( Safe_ptr, const int * )@'' should be read as
     3758``\lstinline@Safe_ptr@ is a pointer type like \lstinline@const int *@''.
    38963759This specification has two defects, compared to the original four: there is no automatic assertion that dereferencing a
    3897 \lstinline$MyP$ produces an lvalue of the type that \lstinline$CP$ points at, and the
    3898 ``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed to \lstinline$CP$ really is a pointer type.
     3760\lstinline@MyP@ produces an lvalue of the type that \lstinline@CP@ points at, and the
     3761``\lstinline@|m_l_pointer( CP )@'' assertion provides only a weak assurance that the argument passed to \lstinline@CP@ really is a pointer type.
    38993762
    39003763
     
    39023765
    39033766Different operators often have related meanings;
    3904 for instance, in C, ``\lstinline$+$'',
    3905 ``\lstinline$+=$'', and the two versions of ``\lstinline$++$'' perform variations of addition.
     3767for instance, in C, ``\lstinline@+@'',
     3768``\lstinline@+=@'', and the two versions of ``\lstinline@++@'' perform variations of addition.
    39063769Languages 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.
    39073770Completeness and consistency is left to the good taste and discretion of the programmer.
     
    39163779The different comparison operators have obvious relationships, but there is no obvious subset of the operations to use in the implementation of the others.
    39173780However, 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;
    3918 the library function \lstinline$strcmp$ is an example.
    3919 
    3920 C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation, returns 1 if its operand compares equal to 0, and 0 otherwise.
     3781the library function \lstinline@strcmp@ is an example.
     3782
     3783C and \CFA have an extra, non-obvious comparison operator: ``\lstinline@!@'', logical negation, returns 1 if its operand compares equal to 0, and 0 otherwise.
    39213784\begin{lstlisting}
    39223785trait comparable( otype T ) {
     
    39673830
    39683831Note 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
    3969 \lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$.
     3832\lstinline@int_base@, \lstinline@arith_base@ and \lstinline@comparable@.
    39703833Note also that these declarations provide guidance and assistance, but they do not define an absolutely minimal set of requirements.
    3971 A truly minimal implementation of an arithmetic type might only provide
    3972 \lstinline$0$, \lstinline$1$, and \lstinline$?-=?$, which would be used by polymorphic
    3973 \lstinline$?+=?$, \lstinline$?*=?$, and \lstinline$?/=?$ functions.
    3974 
    3975 Note also that \lstinline$short$ is an integer type in C11 terms, but has no operations!
     3834A truly minimal implementation of an arithmetic type might only provide \lstinline@0@, \lstinline@1@, and \lstinline@?-=?@, which would be used by polymorphic \lstinline@?+=?@, \lstinline@?*=?@, and \lstinline@?/=?@ functions.
     3835
     3836Note also that \lstinline@short@ is an integer type in C11 terms, but has no operations!
    39763837
    39773838
     
    39803841
    39813842Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers.
    3982 This gets into \lstinline$noalias$ territory.
    3983 Qualifying anything (``\lstinline$short restrict rs$'') means pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers.
     3843This gets into \lstinline@noalias@ territory.
     3844Qualifying anything (``\lstinline@short restrict rs@'') means pointer parameters of \lstinline@?++@, etc, would need restrict qualifiers.
    39843845
    39853846Enumerated types.
     
    39913852Color, enum Color ) really make sense? ?++ does, but it adds (int)1.
    39923853
    3993 Operators on {,signed,unsigned} char and other small types. ?<? harmless;
     3854Operators on {,signed,unsigned} char and other small types. \lstinline@?<?@ harmless;
    39943855?*? questionable for chars.
    39953856Generic selections make these choices visible.
     
    39973858``promotion'' function?
    39983859
    3999 \lstinline$register$ assignment might be handled as assignment to a temporary with copying back and forth, but copying must not be done by assignment.
    4000 
    4001 Don't use ptrdiff\_t by name in the predefineds.
     3860\lstinline@register@ assignment might be handled as assignment to a temporary with copying back and forth, but copying must not be done by assignment.
     3861
     3862Don't use \lstinline@ptrdiff_t@ by name in the predefineds.
    40023863
    40033864Polymorphic objects.
     
    40063867
    40073868\bibliographystyle{plain}
    4008 \bibliography{refrat}
     3869\bibliography{cfa}
    40093870
    40103871
  • doc/user/Makefile

    r1f6e009 r1048b31  
    11## Define the appropriate configuration variables.
    22
    3 TeXLIB = .::
     3TeXLIB = .:../bibliography/:../LaTeXmacros/:
    44LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex
    5 BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex
     5BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex
    66
    77## Define the text source files.
     
    1212
    1313FIGURES = ${addsuffix .tex, \
     14Cdecl \
    1415}
    1516
     
    4344        dvips $< -o $@
    4445
    45 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib /usr/local/bibliographies/pl.bib
     46${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \
     47                ../LaTeXmacros/common.tex ../LaTeXmacros/indexstyle ../bibliography/cfa.bib
    4648        # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
    4749        if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
     
    5355        -${BibTeX} ${basename $@}
    5456        # Make index from *.aux entries and input index at end of document
    55         makeindex -s indexstyle ${basename $@}.idx
     57        makeindex -s ../LaTeXmacros/indexstyle ${basename $@}.idx
    5658        ${LaTeX} ${basename $@}.tex
    5759        # Run again to get index title into table of contents
  • doc/user/user.tex

    r1f6e009 r1048b31  
     1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%%
     2%%
     3%% Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
     4%%
     5%% The contents of this file are covered under the licence agreement in the
     6%% file "LICENCE" distributed with Cforall.
     7%%
     8%% user.tex --
     9%%
     10%% Author           : Peter A. Buhr
     11%% Created On       : Wed Apr  6 14:53:29 2016
     12%% Last Modified By : Peter A. Buhr
     13%% Last Modified On : Sat Apr 30 13:54:32 2016
     14%% Update Count     : 221
     15%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     16
    117% requires tex packages: texlive-base texlive-latex-base tex-common texlive-humanities texlive-latex-extra texlive-fonts-recommended
     18
     19% red highlighting ®...® (registered trademark sumbol)
     20% blue highlighting ©...© (copyright symbol)
     21% latex escape §...§ (section symbol)
     22% keyword escape ¶...¶ (pilcrow symbol)
     23% math escape $...$ (dollar symbol)
    224
    325\documentclass[openright,twoside]{article}
     
    527
    628% Latex packages used in the document.
    7 
     29\usepackage[T1]{fontenc}                                % allow Latin1 (extended ASCII) characters
     30\usepackage{textcomp}
     31\usepackage[latin1]{inputenc}
     32\usepackage{upquote}
    833\usepackage{fullpage,times}
     34\usepackage{epic,eepic}
    935\usepackage{xspace}
    1036\usepackage{varioref}
     
    1238\usepackage{footmisc}
    1339\usepackage{comment}
    14 \usepackage{latexsym}                                   % \Box
    15 \usepackage{mathptmx}                                   % better math font with "times"
     40\usepackage{latexsym}                                   % \Box
     41\usepackage{mathptmx}                                   % better math font with "times"
    1642\usepackage[pagewise]{lineno}
    1743\renewcommand{\linenumberfont}{\scriptsize\sffamily}
     
    2248%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    2349
     50% Bespoke macros used in the document.
     51\input{common}
     52
     53%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     54
    2455% Names used in the document.
    2556
    26 \newcommand{\CFA}{C$\forall$\xspace}    % set language symbolic name
    27 \newcommand{\CFL}{Cforall\xspace}               % set language text name
    28 \newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
    29 \def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
     57\newcommand{\Version}{1.0.0}
    3058\newcommand{\CS}{C\raisebox{-0.9ex}{\large$^\sharp$}\xspace}
    3159
    3260%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    3361
    34 % Bespoke macros used in the document.
    35 
    36 \makeatletter
    37 % allow escape sequence in lstinline
    38 %\usepackage{etoolbox}
    39 %\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}}
    40 
    41 \renewcommand\small{%
    42    \@setfontsize\small{8.5}{11}%
    43    \abovedisplayskip 8.5pt \@plus 3pt \@minus 4pt
    44    \abovedisplayshortskip \z@ \@plus 2pt
    45    \belowdisplayshortskip 4pt \@plus 2pt \@minus 2pt
    46    \def\@listi{\leftmargin\leftmargini
    47                \topsep 4pt \@plus 2pt \@minus 2pt
    48                \parsep 2pt \@pluspt \@minuspt
    49                \itemsep \parsep}%
    50    \belowdisplayskip \abovedisplayskip
    51 }
    52 \usepackage{relsize}            % must be after change to small
    53 
    54 \renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}}
    55 \renewenvironment{itemize}{\begin{list}{\labelitemi}{\topsep=5pt\itemsep=5pt\parsep=0pt}}{\end{list}}
    56 
    57 %  Reduce size of section titles
    58 \renewcommand\section{\@startsection{section}{1}{\z@}{-3.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\large\bfseries}}
    59 \renewcommand\subsection{\@startsection{subsection}{2}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
    60 \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
    61 \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{-1em}{\normalfont\normalsize\bfseries}}
    62 
    63 % index macros
    64 \newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
    65 \newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
    66 \newcommand{\see}[1]{\emph{see} #1}
    67 
    68 % Define some commands that produce formatted index entries suitable for cross-references.
    69 % ``\spec'' produces entries for specifications of entities.  ``\impl'' produces entries for their
    70 % implementations, and ``\use'' for their uses.
    71 
    72 %  \newcommand{\bold}[1]{{\bf #1}}
    73 %  \def\spec{\@bsphack\begingroup
    74 %             \def\protect##1{\string##1\space}\@sanitize
    75 %             \@wrxref{|bold}}
    76 \def\impl{\@bsphack\begingroup
    77           \def\protect##1{\string##1\space}\@sanitize
    78           \@wrxref{|definition}}
    79 \newcommand{\indexcode}[1]{{\lstinline$#1$}}
    80 \def\use{\@bsphack\begingroup
    81          \def\protect##1{\string##1\space}\@sanitize
    82          \@wrxref{|hyperpage}}
    83 \def\@wrxref#1#2{\let\thepage\relax
    84     \xdef\@gtempa{\write\@indexfile{\string
    85     \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa
    86     \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
    87 %\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}}
    88 %\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
    89 
    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}
    93 \newcommand{\Index}{\@ifstar\@sIndex\@Index}
    94 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
    95 \newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
    96 
    97 \newcommand{\newtermFontInline}{\emph}
    98 \newcommand{\newterm}{\@ifstar\@snewterm\@newterm}
    99 \newcommand{\@newterm}[2][\@empty]{\lowercase{\def\temp{#2}}{\newtermFontInline{#2}}\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
    100 \newcommand{\@snewterm}[2][\@empty]{{\newtermFontInline{#2}}\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
    101 \makeatother
    102 
    103 % blocks and titles
    104 \newenvironment{quote2}{%
    105         \list{}{\lstset{resetmargins=true}\leftmargin=\parindent\rightmargin\leftmargin}%
    106         \item\relax
    107 }{%
    108         \endlist
    109 }% quote2
    110 \newenvironment{rationale}{%
    111   \begin{quotation}\noindent$\Box$\enspace
    112 }{%
    113   \hfill\enspace$\Box$\end{quotation}
    114 }%
    115 \newcommand{\define}[1]{\emph{#1\/}\index{#1}}
    116 \newcommand{\rewrite}{\(\Rightarrow\)}
    117 \newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent}
    118 \newcommand{\examples}{\paragraph{Examples}~\par\noindent}
    119 \newcommand{\semantics}{\paragraph{Semantics}~\par\noindent}
    120 \newcommand{\constraints}{\paragraph{Constraints}~\par\noindent}
    121 \newcommand{\predefined}{\paragraph{Predefined Identifiers}~\par\noindent}
    122 
    123 % BNF macros
    124 \def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]}
    125 \let\endsyntax=\endtrivlist
    126 \newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}}
    127 \newcommand{\rhs}{\hfil\break\hbox{\hskip1in}}
    128 \newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}}
    129 \newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}}
    130 \newcommand{\opt}{$_{opt}$\ }
    131 
    132 % adjust varioref package with default "section" and "page" titles, and optional title with faraway page numbers
    133 % \VRef{label} => Section 2.7, \VPageref{label} => page 17
    134 % \VRef[Figure]{label} => Figure 3.4, \VPageref{label} => page 17
    135 \renewcommand{\reftextfaceafter}{\unskip}
    136 \renewcommand{\reftextfacebefore}{\unskip}
    137 \renewcommand{\reftextafter}{\unskip}
    138 \renewcommand{\reftextbefore}{\unskip}
    139 \renewcommand{\reftextfaraway}[1]{\unskip, p.~\pageref{#1}}
    140 \renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}}
    141 \newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}}
    142 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
    143 
    144 % Go programming language
    145 \lstdefinelanguage{Golang}%
    146   {morekeywords=[1]{package,import,func,type,struct,return,defer,panic, recover,select,var,const,iota,},%
    147    morekeywords=[2]{string,uint,uint8,uint16,uint32,uint64,int,int8,int16, int32,int64,
    148                 bool,float32,float64,complex64,complex128,byte,rune,uintptr, error,interface},%
    149    morekeywords=[3]{map,slice,make,new,nil,len,cap,copy,close,true,false, delete,append,real,imag,complex,chan,},%
    150    morekeywords=[4]{for,break,continue,range,goto,switch,case,fallthrough,if, else,default,},%
    151    morekeywords=[5]{Println,Printf,Error,},%
    152    sensitive=true,%
    153    morecomment=[l]{//},%
    154    morecomment=[s]{/*}{*/},%
    155    morestring=[b]',%
    156    morestring=[b]",%
    157    morestring=[s]{`}{`},%
    158 }
    159 
    160 % CFA based on ANSI C
    161 \lstdefinelanguage{CFA}[ANSI]{C}%
    162 {morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,trait,disable,dtype,enable,
    163         fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,otype,restrict,_Static_assert,
    164         _Thread_local,throw,throwResume,try,},
    165 }%
    166 
    167 \lstset{
    168 language=CFA,
    169 columns=flexible,
    170 basicstyle=\sf\relsize{-1},
    171 tabsize=4,
    172 xleftmargin=\parindent,
    173 escapechar=@,
    174 mathescape=true,
    175 keepspaces=true,
    176 showstringspaces=false,
    177 showlines=true,
    178 }%
    179 
    180 \makeatletter
    181 % replace/adjust listings characters that look bad in sanserif
    182 \lst@CCPutMacro
    183 \lst@ProcessOther{"2D}{\lst@ttfamily{-{}}{{\ttfamily\upshape -}}} % replace minus
    184 \lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than
    185 \lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than
    186 \lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % replace circumflex
    187 \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore
    188 \lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % replace tilde
    189 %\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde
    190 \@empty\z@\@empty
    191 \makeatother
    192 
    193 \setcounter{secnumdepth}{3}     % number subsubsections
    194 \setcounter{tocdepth}{3}                % subsubsections in table of contents
     62\setcounter{secnumdepth}{3}                             % number subsubsections
     63\setcounter{tocdepth}{3}                                % subsubsections in table of contents
    19564\makeindex
    19665
     
    19968\begin{document}
    20069\pagestyle{headings}
    201 \linenumbers                                    % comment out to turn off line numbering
     70\linenumbers                                            % comment out to turn off line numbering
    20271
    20372\title{\Huge
     
    21382}% author
    21483\date{
    215 DRAFT\\\today
     84DRAFT \\
     85\today
    21686}% date
    21787
     
    241111
    242112\CFA\footnote{Pronounced ``C-for-all'', and written \CFA, CFA, or \CFL.} is a modern general-purpose programming-language, designed an as evolutionary step forward from the C programming language.
    243 The syntax of the \CFA language builds from that of C, and should look immediately familiar to C programmers.
     113The syntax of the \CFA language builds from C, and should look immediately familiar to C programmers.
    244114% Any language feature that is not described here can be assumed to be using the standard C11 syntax.
    245 \CFA has added many modern programming-language features, which directly leads to increased safety and productivity, while maintaining interoperability with existing C programs, and maintaining C-like performance.
     115\CFA adds many modern programming-language features, which directly leads to increased safety and productivity, while maintaining interoperability with existing C programs and achieving C performance.
    246116Like C, \CFA is a statically typed, procedural language with a low-overhead runtime, meaning there is no global garbage-collection.
    247117The primary new features include parametric-polymorphism routines and types, exceptions, concurrency, and modules.
     
    254124New programs can be written in \CFA using a combination of C and \CFA features.
    255125\CC had a similar goal 30 years ago, but has struggled over the intervening time to incorporate modern programming-language features because of early design choices.
    256 \CFA has 30 years of hindsight and a much cleaner starting point than \CC.
     126\CFA has 30 years of hindsight and clean starting point.
    257127
    258128Like \CC, there may be both an old and new ways to achieve the same effect.
     
    279149\end{quote2}
    280150Both programs output the same result.
    281 While the \CFA I/O looks similar to the \CC style of output, there are several important differences, such as automatic spacing between variables as in Python (see also~\VRef{s:IOLibrary}).
     151While the \CFA I/O looks similar to the \CC output style, there are several important differences, such as automatic spacing between variables as in Python (see also~\VRef{s:IOLibrary}).
    282152
    283153This document is a reference manual for the \CFA programming language, targeted at \CFA programmers.
    284 Implementers may also refer to the \CFA Programming Language Specification for details about the language syntax and semantics.
     154Implementers may refer to the \CFA Programming Language Specification for details about the language syntax and semantics.
    285155In its current state, this document covers the intended core features of the language.
    286156Changes to the syntax and additional features are expected to be included in later revisions.
     
    294164The original \CFA project~\cite{Ditchfield92} extended the C type system with parametric polymorphism and overloading, as opposed to the \CC approach of object-oriented extensions to the C type-system.
    295165A first implementation of the core Cforall language was created~\cite{Bilson03,Esteves04}, but at the time there was little interesting in extending C, so work did not continue.
    296 As the saying goes, ``What goes around, comes around'', and there is now renewed interest in the C programming language, so the \CFA project has been restarted.
    297 
    298 
    299 \section{Motivation: Why fix C?}
     166As the saying goes, ``What goes around, comes around'', and there is now renewed interest in the C programming language because of legacy code-bases, so the \CFA project has been restarted.
     167
     168
     169\section{Why fix C?}
    300170
    301171Even with all its problems, C is a very popular programming language because it allows writing software at virtually any level in a computer system without restriction.
     
    314184Java~\cite{Java8}, Go~\cite{Go}, Rust~\cite{Rust} and D~\cite{D} are examples of the revolutionary approach for modernizing C/\CC, resulting in a new language rather than an extension of the descendent.
    315185These languages have different syntax and semantics from C, and do not interoperate directly with C, largely because of garbage collection.
    316 As a result, there is a significant learning curve to move to these languages, and C legacy-code must be complete rewritten.
     186As a result, there is a significant learning curve to move to these languages, and C legacy-code must be rewritten.
    317187These costs can be prohibitive for many companies with a large software base in C/\CC, and many programmers that require retraining to a new programming language.
    318188
     
    331201This feature allows users of \CFA to take advantage of the existing panoply of C libraries from inside their \CFA code.
    332202In fact, one of the biggest issues for any new programming language is establishing a minimum level of library code to support a large body of activities.
    333 Programming-language developers often state that adequate library support costs many times more than designing and implementing the language itself.
     203Programming-language developers often state that adequate library support takes more work than designing and implementing the language itself.
    334204Like \CC, \CFA starts with immediate access to all exiting C libraries, and in many cases, can easily wrap library routines with simpler and safer interfaces, at very low cost.
    335205
     
    338208Whereas, \CFA wraps each of these routines into one with the common name \lstinline@abs@.
    339209\begin{lstlisting}
     210char abs( char );
    340211extern "C" {
    341 #include <stdlib.h>                     // provide C prototype for integer "abs" routine
     212int abs( int );                         // use default C routine for int
    342213} // extern "C"
    343 
    344 char abs( char );
    345 long int abs( long int );       // @{\CFA}@ overload name "abs" for other types
     214long int abs( long int );
    346215long long int abs( long long int );
    347216float abs( float );
     
    360229The name ``\lstinline@abs@'' evokes the notion of absolute value, and many mathematical types provide the notion of absolute value.
    361230Hence, knowing the name \lstinline@abs@ should be sufficient to apply it to any type where it is applicable.
    362 The time savings and safety of using one name uniformly versus @N@ unique names should not be underestimated.
    363 
    364 
    365 \section{Compiling \CFA}
     231The time savings and safety of using one name uniformly versus $N$ unique names should not be underestimated.
     232
     233
     234\section[Compiling CFA Program]{Compiling \CFA Program}
    366235
    367236The command \lstinline@cfa@ is used to compile \CFA program(s).
    368 This command works like the GNU \lstinline@gcc@ command, e.g.:
    369 \begin{lstlisting}
    370 cfa [ gcc-options ] C/@{\CFA}@-files [ assembler/loader-files ]
    371 \end{lstlisting}
    372 The following additional option is available:
     237This command works like the GNU \lstinline@gcc@\index{gcc} command, e.g.:
     238\begin{lstlisting}
     239cfa [ gcc-options ] C/§\CFA§-files [ assembler/loader-files ]
     240\end{lstlisting}
     241\indexc{cfa}\index{compilation!cfa@\lstinline$cfa$}
     242By default, \CFA programs having the following \lstinline@gcc@ flags turned on:
    373243\begin{description}
    374 \item
    375 \hspace*{-4pt}\lstinline@-CFA@
     244\item\hspace*{-4pt}\Indexc{-std=gnu99}\index{compilation option!-std=gnu99@{\lstinline$-std=gnu99$}}
     245The 1999 C standard plus GNU extensions.
     246\item\hspace*{-4pt}\Indexc{-fgnu89-¶inline¶}\index{compilation option!-fgnu89-inline@{\lstinline$-fgnu89-¶inline¶$}}
     247Use the traditional GNU semantics for inline routines in C99 mode.
     248\end{description}
     249The following new \CFA option is available:
     250\begin{description}
     251\item\hspace*{-4pt}\Indexc{-CFA}\index{compilation option!-CFA@{\lstinline$-CFA$}}
    376252Only the C preprocessor and the \CFA translator steps are performed and the transformed program is written to standard output, which makes it possible to examine the code generated by the \CFA translator.
    377253\end{description}
    378254
     255The following preprocessor variables are available:
     256\begin{description}
     257\item\hspace*{-4pt}\Indexc{__CFA__}\index{preprocessor variables!__CFA__@{\lstinline$__CFA__$}}
     258is always available during preprocessing and its value is the current major \Index{version number} of \CFA.\footnote{
     259The C preprocessor allows only integer values in a preprocessor variable so a value like ``\Version'' is not allowed.
     260Hence, the need to have three variables for the major, minor and patch version number.}
     261
     262\item\hspace*{-4pt}\Indexc{__CFA_MINOR__}\index{preprocessor variables!__CFA_MINOR__@{\lstinline$__CFA_MINOR__$}}
     263is always available during preprocessing and its value is the current minor \Index{version number} of \CFA.
     264
     265\item\hspace*{-4pt}\Indexc{__CFA_PATCH__}\index{preprocessor variables!__CFA_PATCH__@\lstinline$__CFA_PATCH__$}
     266is always available during preprocessing and its value is the current patch \Index{version number} of \CFA.
     267
     268\item\hspace*{-4pt}\Indexc{__CFORALL__}\index{preprocessor variables!__CFORALL__@\lstinline$__CFORALL__$}
     269is always available during preprocessing and it has no value.
     270\end{description}
     271
     272These preprocessor variables allow conditional compilation of programs that must work differently in these situations.
     273For example, to toggle between C and \CFA extensions, using the following:
     274\begin{lstlisting}
     275#ifndef __CFORALL__
     276#include <stdio.h>                      // C header file
     277#else
     278#include <fstream>                      // §\CFA{}§ header file
     279#endif
     280\end{lstlisting}
     281which conditionally includes the correct header file, if the program is compiled using \lstinline@gcc@ or \lstinline@cfa@.
     282
    379283
    380284\section{Underscores in Constants}
     
    382286Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, e.g.:
    383287\begin{lstlisting}
    384 2_147_483_648;                          // decimal constant
     2882®_®147®_®483®_®648;                            // decimal constant
    38528956_ul;                                          // decimal unsigned long constant
    3862900_377;                                          // octal constant
     
    408312the type suffixes \lstinline@U@, \lstinline@L@, etc. may start with an underscore \lstinline@1_U@, \lstinline@1_ll@ or \lstinline@1.0E10_f@.
    409313\end{enumerate}
    410 It is significantly easier to read and type long constants when they are broken up into smaller groupings (most cultures use comma or period among digits for the same purpose).
     314It is significantly easier to read and enter long constants when they are broken up into smaller groupings (most cultures use comma or period among digits for the same purpose).
    411315This extension is backwards compatible, matches with the use of underscore in variable names, and appears in Ada and Java.
    412316
     
    417321C declaration syntax is notoriously confusing and error prone.
    418322For example, many C programmers are confused by a declaration as simple as:
    419 \begin{lstlisting}
    420 int *x[ 10 ]
    421 \end{lstlisting}
    422 Is this a pointer to an array of 10 integers or an array of 10 pointers to integers?
     323\begin{quote2}
     324\begin{tabular}{@{}ll@{}}
     325\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
     326int *x[ 5 ]
     327\end{lstlisting}
     328&
     329\raisebox{-0.75\totalheight}{\input{Cdecl}}
     330\end{tabular}
     331\end{quote2}
     332Is this an array of 5 pointers to integers or a pointer to an array of 5 integers?
    423333Another example of confusion results from the fact that a routine name and its parameters are embedded within the return type, mimicking the way the return value is used at the routine's call site.
    424334For example, a routine returning a pointer to an array of integers is defined and used in the following way:
    425335\begin{lstlisting}
    426 int (*f())[ 10 ] {...};
    427 ... (*f())[ 3 ] += 1;           // definition mimics usage
     336int (*f())[ 5 ] {...};  // definition mimics usage
     337... (*f())[ 3 ] += 1;
    428338\end{lstlisting}
    429339Essentially, the return type is wrapped around the routine name in successive layers (like an onion).
     
    434344The only exception is bit field specification, which always appear to the right of the base type.
    435345C and the new \CFA declarations may appear together in the same program block, but cannot be mixed within a specific declaration.
    436 Unsupported are K\&R C declarations where the base type defaults to \lstinline@int@, if no type is specified\footnote{
    437 At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each structure declaration and type name~\cite[\S~6.7.2(2)]{C11}},
    438 e.g.:
    439 \begin{lstlisting}
    440 x;                                      // int x
    441 *y;                                     // int *y
    442 f( p1, p2 );            // int f( int p1, int p2 );
    443 f( p1, p2 ) {}          // int f( int p1, int p2 ) {}
    444 \end{lstlisting}
    445346
    446347In \CFA declarations, the same tokens are used as in C: the character \lstinline@*@ is used to indicate a pointer, square brackets \lstinline@[@\,\lstinline@]@ are used to represent an array, and parentheses \lstinline@()@ are used to indicate a routine parameter.
     
    451352\multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}       & \multicolumn{1}{c}{\textbf{C}}        \\
    452353\begin{lstlisting}
    453 * int x, y;
     354®* int x, y;®
    454355\end{lstlisting}
    455356&
     
    464365\multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}       & \multicolumn{1}{c@{\hspace{20pt}}}{\textbf{C}}        \\
    465366\begin{lstlisting}
    466 [ 10 ] int z;
    467 [ 10 ] * char w;
    468 * [ 10 ] double v;
     367[ 5 ] int z;
     368[ 5 ] * char w;
     369* [ 5 ] double v;
    469370struct s {
    470 int f0:3;
     371        int f0:3;
    471372        * int f1;
    472         [ 10 ] * int f2;
     373        [ 5 ] * int f2;
    473374};
    474375\end{lstlisting}
    475376&
    476377\begin{lstlisting}
    477 int z[ 10 ];
    478 char *w[ 10 ];
    479 double (*v)[ 10 ];
     378int z[ 5 ];
     379char *w[ 5 ];
     380double (*v)[ 5 ];
    480381struct s {
    481382        int f0:3;
    482383        int *f1;
    483         int *f2[ 10 ]
     384        int *f2[ 5 ]
    484385};
    485386\end{lstlisting}
    486387&
    487388\begin{lstlisting}
    488 // array of 10 integers
    489 // array of 10 pointers to char
    490 // pointer to array of 10 doubles
     389// array of 5 integers
     390// array of 5 pointers to char
     391// pointer to array of 5 doubles
    491392
    492393// common bit field syntax
     
    497398\end{tabular}
    498399\end{quote2}
    499 
    500 As stated above, the two styles of declaration may appear together in the same block.
    501 Therefore, a programmer has the option of either continuing to use traditional C declarations or take advantage of the new style.
    502 Clearly, both styles need to be supported for some time due to existing C-style header-files, particularly for UNIX systems.
    503 In general, mixing declaration styles in a routine or even a translation unit is not recommended, as it makes a program more difficult to read.
    504 Therefore, it is suggested that an entire translation unit be written in one declaration style or the other.
    505400
    506401All type qualifiers, i.e., \lstinline@const@ and \lstinline@volatile@, are used in the normal way with the new declarations but appear left to right, e.g.:
     
    510405\begin{lstlisting}
    511406const * const int x;
    512 const * [ 10 ] const int y;
     407const * [ 5 ] const int y;
    513408\end{lstlisting}
    514409&
    515410\begin{lstlisting}
    516411int const * const x;
    517 const int (* const y)[ 10 ]
     412const int (* const y)[ 5 ]
    518413\end{lstlisting}
    519414&
    520415\begin{lstlisting}
    521416// const pointer to const integer
    522 // const pointer to array of 10 const integers
     417// const pointer to array of 5 const integers
    523418\end{lstlisting}
    524419\end{tabular}
     
    530425\multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}       & \multicolumn{1}{c@{\hspace{20pt}}}{\textbf{C}}        \\
    531426\begin{lstlisting}
    532 extern [ 10 ] int x;
     427extern [ 5 ] int x;
    533428static * const int y;
    534429\end{lstlisting}
    535430&
    536431\begin{lstlisting}
    537 int extern x[ 10 ];
     432int extern x[ 5 ];
    538433const int static *y;
    539434\end{lstlisting}
    540435&
    541436\begin{lstlisting}
    542 // externally visible array of 10 integers
     437// externally visible array of 5 integers
    543438// internally visible pointer to constant int
    544439\end{lstlisting}
    545440\end{tabular}
    546441\end{quote2}
     442
     443Unsupported are K\&R C declarations where the base type defaults to \lstinline@int@, if no type is specified\footnote{
     444At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each structure declaration and type name~\cite[\S~6.7.2(2)]{C11}},
     445e.g.:
     446\begin{lstlisting}
     447x;                                              // int x
     448*y;                                             // int *y
     449f( p1, p2 );                    // int f( int p1, int p2 );
     450f( p1, p2 ) {}                  // int f( int p1, int p2 ) {}
     451\end{lstlisting}
     452
     453As stated above, the two styles of declaration may appear together in the same block.
     454Therefore, a programmer has the option of either continuing to use traditional C declarations or take advantage of the new style.
     455Clearly, both styles need to be supported for some time due to existing C-style header-files, particularly for UNIX systems.
    547456
    548457
     
    555464\begin{lstlisting}
    556465y = (* int)x;
    557 i = sizeof([ 10 ] * int);
     466i = sizeof([ 5 ] * int);
    558467\end{lstlisting}
    559468&
    560469\begin{lstlisting}
    561470y = (int *)x;
    562 i = sizeof(int *[ 10 ]);
     471i = sizeof(int *[ 5 ]);
    563472\end{lstlisting}
    564473\end{tabular}
     
    571480The point of the new syntax is to allow returning multiple values from a routine~\cite{CLU,Galletly96}, e.g.:
    572481\begin{lstlisting}
    573 [ int o1, int o2, char o3 ] f( int i1, char i2, char i3 ) {
    574         @\emph{routine body}@
     482®[ int o1, int o2, char o3 ]® f( int i1, char i2, char i3 ) {
     483        §\emph{routine body}§
    575484}
    576485\end{lstlisting}
     
    583492Declaration qualifiers can only appear at the start of a routine definition, e.g.:
    584493\begin{lstlisting}
    585 extern [ int x ] g( int y ) {}
     494extern [ int x ] g( int y ) {§\,§}
    586495\end{lstlisting}
    587496Lastly, if there are no output parameters or input parameters, the brackets and/or parentheses must still be specified;
    588497in both cases the type is assumed to be void as opposed to old style C defaults of int return type and unknown parameter types, respectively, as in:
    589498\begin{lstlisting}
    590 [ ] g();                                        // no input or output parameters
     499[§\,§] g();                                             // no input or output parameters
    591500[ void ] g( void );                     // no input or output parameters
    592501\end{lstlisting}
     
    600509\CFA style declarations cannot be used to declare parameters for K\&R style routine definitions because of the following ambiguity:
    601510\begin{lstlisting}
    602 int (*f(x))[ 10 ] int x; {}
    603 \end{lstlisting}
    604 The string ``\lstinline@int (*f(x))[ 10 ]@'' declares a K\&R style routine of type returning a pointer to an array of 10 integers, while the string ``\lstinline@[ 10 ] int x@'' declares a \CFA style parameter x of type array of 10 integers.
     511int (*f(x))[ 5 ] int x; {}
     512\end{lstlisting}
     513The string ``\lstinline@int (*f(x))[ 5 ]@'' declares a K\&R style routine of type returning a pointer to an array of 5 integers, while the string ``\lstinline@[ 5 ] int x@'' declares a \CFA style parameter x of type array of 5 integers.
    605514Since the strings overlap starting with the open bracket, \lstinline@[@, there is an ambiguous interpretation for the string.
    606515As well, \CFA-style declarations cannot be used to declare parameters for C-style routine-definitions because of the following ambiguity:
     
    621530\begin{lstlisting}
    622531#define ptoa( n, d ) int (*n)[ d ]
    623 int f( ptoa(p,10) ) ...         // expands to int f( int (*p)[ 10 ] )
    624 [ int ] f( ptoa(p,10) ) ...     // expands to [ int ] f( int (*p)[ 10 ] )
     532int f( ptoa(p,5) ) ...          // expands to int f( int (*p)[ 5 ] )
     533[ int ] f( ptoa(p,5) ) ...      // expands to [ int ] f( int (*p)[ 5 ] )
    625534\end{lstlisting}
    626535Again, programmers are highly encouraged to use one declaration form or the other, rather than mixing the forms.
     
    639548Because the value in the return variable is automatically returned when a \CFA routine terminates, the \lstinline@return@ statement \emph{does not} contain an expression, as in:
    640549\begin{lstlisting}
    641 [ int x ] f() {
     550®[ int x ]® f() {
    642551        ... x = 0; ... x = y; ...
    643         return; // implicitly return x
     552        ®return;® // implicitly return x
    644553}
    645554\end{lstlisting}
     
    697606for example, the following is incorrect:
    698607\begin{lstlisting}
    699 * [ int x ] f () fp;            // routine name ``f'' is not allowed
     608* [ int x ] f () fp;            // routine name "f" is not allowed
    700609\end{lstlisting}
    701610
     
    703612\section{Named and Default Arguments}
    704613
    705 Named and default arguments~\cite{Hardgrave76}.\footnote{
     614Named and default arguments~\cite{Hardgrave76}\footnote{
    706615Francez~\cite{Francez77} proposed a further extension to the named-parameter passing style, which specifies what type of communication (by value, by reference, by name) the argument is passed to the routine.}
    707616are two mechanisms to simplify routine call.
     
    864773\subsection{Type Nesting}
    865774
    866 C allows \Index{type nesting}, but the nested types are hoisted\index{type!hoisting} (refactored) into the enclosing scope.
     775\CFA allows \Index{type nesting}, and type qualification of the nested types, where as C hoists\index{type hoisting} (refactors) nested types into the enclosing scope and has no type qualification.
    867776\begin{quote2}
    868777\begin{tabular}{@{}l@{\hspace{30pt}}l|l@{}}
     
    919828
    920829int fred() {
    921         s.t.c = S.R;
    922         struct S.T t = { S.R, 1, 2 };
    923         enum S.C c;
    924         union S.T.U u;
     830        s.t.c = ®S.®R;  // type qualification
     831        struct ®S.®T t = { ®S.®R, 1, 2 };
     832        enum ®S.®C c;
     833        union ®S.T.®U u;
    925834}
    926835\end{lstlisting}
    927836\end{tabular}
    928837\end{quote2}
    929 
    930 \CFA is C \emph{incompatible} on this issue, and provides semantics similar to \CC.
    931 Nested types are not hoisted and can be referenced using the field selection operator ``\lstinline@.@'', unlike the \CC scope-resolution operator ``\lstinline@::@''.
    932 Given that nested types in C are equivalent to not using them, i.e., they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility.
     838In the left example in C, types \lstinline@C@, \lstinline@U@ and \lstinline@T@ are implicitly hoisted outside of type \lstinline@S@ into the containing block scope.
     839In the right example in \CFA, the types are not hoisted and accessed using the field-selection operator ``\lstinline@.@'' for type qualification, as does Java, rather than the \CC type-selection operator ``\lstinline@::@''.
    933840
    934841
     
    943850which can be used to sort in ascending and descending order by locally redefining the less-than operator into greater-than.
    944851\begin{lstlisting}
    945 const unsigned int size = 10;
    946 int a[size];
    947 
    948 qsort( a, size );               // ascending order using built in ?<?
    949 {                                               // descending order by local redefinition
    950         int ?<?( int a, int b ) { return a > b; } // nested routine
    951         qsort( a, size );
    952 }
    953 \end{lstlisting}
    954 
    955 
    956 \section{Incompatible}
    957 
    958 The following incompatibles exist between C and \CFA, and are similar to Annex C for \CC~\cite{ANSI14:C++}.
    959 
    960 \begin{enumerate}
    961 \item
    962 Change type of character literal \lstinline@int@ to \lstinline@char@.
    963 This change allows overloading differentiation argument type matching, e.g.:
    964 \begin{lstlisting}
    965 int function( int i );
    966 int function( char c );
    967 function( 'x' );
    968 \end{lstlisting}
    969 It is preferable that this call match the second version of function rather than the first. \\
    970 Effect on original feature: Change to semantics of well-defined feature. ISO C programs which depend on
    971 \begin{lstlisting}
    972 sizeof('x') == sizeof(int)
    973 \end{lstlisting}
    974 will not work the same as C++ programs. \\
    975 Difficulty of converting: Simple. \\
    976 How widely used: Programs which depend upon sizeof('x') are probably rare.
    977 
    978 \item
    979 Change: String literals made \lstinline@const@ \\
    980 The type of a string literal is changed from \lstinline@array of char@ to \lstinline@array of const char@.
    981 The type of a wide string literal is changed from \lstinline@array of wchar_t@ to \lstinline@array of const wchar_t@. \\
    982 Rationale: This avoids calling an inappropriate overloaded function, which might expect to be able to modify its argument.
    983 Effect on original feature: Change to semantics of well-defined feature. \\
    984 Difficulty of converting: Simple syntactic transformation, because string literals can be converted to \lstinline@char*;@ (4.2).
    985 The most common cases are handled by a new but deprecated standard conversion:
    986 \begin{lstlisting}
    987 char* p = "abc"; // valid in C, deprecated in C++
    988 char* q = expr ? "abc" : "de"; // valid in C, invalid in C++
    989 \end{lstlisting}
    990 How widely used: Programs that have a legitimate reason to treat string literals as pointers to potentially modifiable memory are probably rare.
    991 
    992 \item
    993 Change: C++ does not have \emph{tentative definitions} as in C.
    994 E.g., at file scope,
    995 \begin{lstlisting}
    996 int i;
    997 int i;
    998 \end{lstlisting}
    999 is valid in C, invalid in C++.
    1000 This makes it impossible to define mutually referential file-local static
    1001 objects, if initializers are restricted to the syntactic forms of C. For example,
    1002 \begin{lstlisting}
    1003 struct X { int i; struct X *next; };
    1004 static struct X a;
    1005 static struct X b = { 0, &a };
    1006 static struct X a = { 1, &b };
    1007 \end{lstlisting}
    1008 Rationale: This avoids having different initialization rules for builtin types and userdefined types.
    1009 Effect on original feature: Deletion of semantically welldefined feature. \\
    1010 Difficulty of converting: Semantic transformation.
    1011 In C++, the initializer for one of a set of mutuallyreferential filelocal static objects must invoke a function call to achieve the initialization.
    1012 How widely used: Seldom.
    1013 
    1014 \item
    1015 Change: A struct is a scope in C++, not in C
    1016 Rationale: Class scope is crucial to C++, and a struct is a class.
    1017 Effect on original feature: Change to semantics of well-defined feature.
    1018 Difficulty of converting: Semantic transformation.
    1019 How widely used: C programs use struct extremely frequently, but the change is only noticeable when
    1020 struct, enumeration, or enumerator names are referred to outside the struct. The latter is probably
    1021 rare.
    1022 
    1023 \item
    1024 Change: In C++, the name of a nested class is local to its enclosing class.
    1025 In C the name of the nested class belongs to the same scope as the name of the outermost enclosing class
    1026 Example:
    1027 \begin{lstlisting}
    1028 struct X {
    1029 struct Y { /* ... */ } y;
    1030 };
    1031 struct Y yy; // valid C, invalid C++
    1032 \end{lstlisting}
    1033 Rationale: C++ classes have member functions which require that classes establish scopes. The C rule
    1034 would leave classes as an incomplete scope mechanism which would prevent C++ programmers from maintaining
    1035 locality within a class. A coherent set of scope rules for C++ based on the C rule would be very
    1036 complicated and C++ programmers would be unable to predict reliably the meanings of nontrivial examples
    1037 involving nested or local functions.
    1038 Effect on original feature: Change of semantics of welldefined
    1039 feature.
    1040 Difficulty of converting: Semantic transformation. To make the struct type name visible in the scope of
    1041 the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing
    1042 struct is defined. Example:
    1043 \begin{lstlisting}
    1044 struct Y; // struct Y and struct X are at the same scope
    1045 struct X {
    1046 struct Y { /* ... */ } y;
    1047 };
    1048 \end{lstlisting}
    1049 All the definitions of C struct types enclosed in other struct definitions and accessed outside the scope of
    1050 the enclosing struct could be exported to the scope of the enclosing struct. Note: this is a consequence of
    1051 the difference in scope rules, which is documented in 3.3.
    1052 How widely used: Seldom.
    1053 \end{enumerate}
     852const unsigned int size = 5;
     853int ia[size];
     854...                                             // assign values to array ia
     855qsort( ia, size );              // sort ascending order using builtin ?<?
     856{
     857        ®int ?<?( int x, int y ) { return x > y; }® // nested routine
     858        qsort( ia, size );      // sort descending order by local redefinition
     859}
     860\end{lstlisting}
     861
     862Nested routines are not first-class, meaning a nested routine cannot be returned if it has references to variables in its enclosing blocks;
     863the only exception is references to the external block of the translation unit, as these variables persist for the duration of the program.
     864The following program in undefined in \CFA (and \lstinline@gcc@\index{gcc})
     865\begin{lstlisting}
     866[* [int]( int )] foo() {                // int (*foo())( int )
     867        int ®i® = 7;
     868        int bar( int p ) {
     869                ®i® += 1;                                       // dependent on local variable
     870                sout | ®i® | endl;
     871        }
     872        return bar;                                     // undefined because of local dependence
     873}
     874int main() {
     875        * [int](int) fp = foo();        // int (*fp)(int)
     876    sout | fp( 3 ) | endl;
     877}
     878\end{lstlisting}
     879because
     880
     881Currently, there are no \Index{lambda} expressions, i.e., unnamed routines because routine names are very important to properly select the correct routine.
    1054882
    1055883
     
    1061889The general syntax of a tuple is:
    1062890\begin{lstlisting}
    1063 [ $\emph{exprlist}$ ]
     891[ §\emph{exprlist}§ ]
    1064892\end{lstlisting}
    1065893where \lstinline@$\emph{exprlist}$@ is a list of one or more expressions separated by commas.
     
    1081909The general syntax of a tuple type is:
    1082910\begin{lstlisting}
    1083 [ @\emph{typelist}@ ]
     911[ §\emph{typelist}§ ]
    1084912\end{lstlisting}
    1085913where \lstinline@$\emph{typelist}$@ is a list of one or more legal \CFA or C type specifications separated by commas, which may include other tuple type specifications.
     
    1089917[ double, double, double ]
    1090918[ * int, int * ]                // mix of CFA and ANSI
    1091 [ * [ 10 ] int, * * char, * [ [ int, int ] ] (int, int) ]
     919[ * [ 5 ] int, * * char, * [ [ int, int ] ] (int, int) ]
    1092920\end{lstlisting}
    1093921Like tuples, tuple types may be nested, such as \lstinline@[ [ int, int ], int ]@, which is a 2-element tuple type whose first element is itself a tuple type.
     
    11851013First the right-hand tuple is flattened and then the values are assigned individually.
    11861014Flattening is also performed on tuple types.
    1187 For example, the type \lstinline@[ int, [ int, int ], int ]@ can be coerced, using flattening, into the type lstinline@[ int, int, int, int ]@.
     1015For example, the type \lstinline@[ int, [ int, int ], int ]@ can be coerced, using flattening, into the type \lstinline@[ int, int, int, int ]@.
    11881016
    11891017A \newterm{structuring coercion} is the opposite of flattening;
     
    12111039Mass assignment has the following form:
    12121040\begin{lstlisting}
    1213 [ @\emph{lvalue}@, ..., @\emph{lvalue}@ ] = @\emph{expr}@;
    1214 \end{lstlisting}
    1215 The left-hand side is a tuple of \lstinline@$\emph{lvalues}$@, which is a list of expressions each yielding an address, i.e., any data object that can appear on the left-hand side of a conventional assignment statement.
     1041[ §\emph{lvalue}§, ..., §\emph{lvalue}§ ] = §\emph{expr}§;
     1042\end{lstlisting}
     1043The left-hand side is a tuple of \emph{lvalues}, which is a list of expressions each yielding an address, i.e., any data object that can appear on the left-hand side of a conventional assignment statement.
    12161044\lstinline@$\emph{expr}$@ is any standard arithmetic expression.
    12171045Clearly, the types of the entities being assigned must be type compatible with the value of the expression.
     
    12501078Multiple assignment has the following form:
    12511079\begin{lstlisting}
    1252 [ @\emph{lvalue}@, . . ., @\emph{lvalue}@ ] = [ @\emph{expr}@, . . ., @\emph{expr}@ ];
    1253 \end{lstlisting}
    1254 The left-hand side is a tuple of \lstinline@$\emph{lvalues}$@, and the right-hand side is a tuple of \lstinline@$\emph{expr}$@s.
    1255 Each \lstinline@$\emph{expr}$@ appearing on the righthand side of a multiple assignment statement is assigned to the corresponding \lstinline@$\emph{lvalues}$@ on the left-hand side of the statement using parallel semantics for each assignment.
     1080[ §\emph{lvalue}§, . . ., §\emph{lvalue}§ ] = [ §\emph{expr}§, . . ., §\emph{expr}§ ];
     1081\end{lstlisting}
     1082The left-hand side is a tuple of \emph{lvalues}, and the right-hand side is a tuple of \emph{expr}s.
     1083Each \emph{expr} appearing on the righthand side of a multiple assignment statement is assigned to the corresponding \emph{lvalues} on the left-hand side of the statement using parallel semantics for each assignment.
    12561084An example of multiple assignment is:
    12571085\begin{lstlisting}
     
    12901118Cascade assignment has the following form:
    12911119\begin{lstlisting}
    1292 @\emph{tuple}@ = @\emph{tuple}@ = ... = @\emph{tuple}@;
     1120§\emph{tuple}§ = §\emph{tuple}§ = ... = §\emph{tuple}§;
    12931121\end{lstlisting}
    12941122and it has the same parallel semantics as for mass and multiple assignment.
     
    13081136Its general form is:
    13091137\begin{lstlisting}
    1310 @\emph{expr}@ . [ @\emph{fieldlist}@ ]
    1311 @\emph{expr}@ -> [ @\emph{fieldlist}@ ]
    1312 \end{lstlisting}
    1313 \lstinline@$\emph{expr}$@ is any expression yielding a value of type record, e.g., \lstinline@struct@, \lstinline@union@.
    1314 Each element of \lstinline@$\emph{ fieldlist}$@ is an element of the record specified by \lstinline@$\emph{expr}$@.
     1138§\emph{expr}§ . [ §\emph{fieldlist}§ ]
     1139§\emph{expr}§ -> [ §\emph{fieldlist}§ ]
     1140\end{lstlisting}
     1141\emph{expr} is any expression yielding a value of type record, e.g., \lstinline@struct@, \lstinline@union@.
     1142Each element of \emph{ fieldlist} is an element of the record specified by \emph{expr}.
    13151143A record-field tuple may be used anywhere a tuple can be used. An example of the use of a record-field tuple is
    13161144the following:
     
    13521180\multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}       & \multicolumn{1}{c}{\textbf{C}}        \\
    13531181\begin{lstlisting}
    1354 L1: for ( ... ) {
    1355         L2: for ( ... ) {
    1356                 L3: for ( ... ) {
    1357                         ... break L1; ...
    1358                         ... break L2; ...
    1359                         ... break L3; // or break
     1182®L1:® for ( ... ) {
     1183        ®L2:® for ( ... ) {
     1184                ®L3:® for ( ... ) {
     1185                        ... break ®L1®; ...
     1186                        ... break ®L2®; ...
     1187                        ... break ®L3®; // or break
    13601188                }
    13611189        }
     
    13821210\multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}       & \multicolumn{1}{c}{\textbf{C}}        \\
    13831211\begin{lstlisting}
    1384 L1: for ( ... ) {
    1385         L2: for ( ... ) {
    1386                 L3: for ( ... ) {
    1387                         ... continue L1; ...
    1388                         ... continue L2; ...
    1389                         ... continue L3; ...
     1212®L1®: for ( ... ) {
     1213        ®L2®: for ( ... ) {
     1214                ®L3®: for ( ... ) {
     1215                        ... continue ®L1®; ...
     1216                        ... continue ®L2®; ...
     1217                        ... continue ®L3®; ...
    13901218
    13911219                }
     
    16231451\begin{lstlisting}
    16241452switch ( i ) {
    1625   case 1, 3, 5:
     1453  ®case 1, 3, 5®:
    16261454        ...
    1627   case 2, 4, 6:
     1455  ®case 2, 4, 6®:
    16281456        ...
    16291457}
     
    16341462  case 1: case 3 : case 5:
    16351463        ...
    1636   case 2: case 4 : case 6: /* even values */
     1464  case 2: case 4 : case 6:
    16371465        ...
    16381466}
     
    16551483\begin{lstlisting}
    16561484switch ( i ) {
    1657   case 1~5
     1485  ®case 1~5:®
    16581486        ...
    1659   case 10~15
     1487  ®case 10~15:®
    16601488        ...
    16611489}
     
    16721500&
    16731501\begin{lstlisting}
     1502
    16741503// 1, 2, 3, 4, 5
    16751504
     
    21681997
    21691998
    2170 \section{Generics }
     1999\section{Auto Type-Inferencing}
     2000
     2001Auto type-inferencing occurs in a declaration where a variable's type is inferred from its initialization expression type.
     2002\begin{quote2}
     2003\begin{tabular}{@{}l@{\hspace{30pt}}ll@{}}
     2004\multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CC}}        & \multicolumn{1}{c}{\lstinline@gcc@}\index{gcc} \\
     2005\begin{lstlisting}
     2006
     2007auto j = 3.0 * 4;
     2008int i;
     2009auto k = i;
     2010\end{lstlisting}
     2011&
     2012\begin{lstlisting}
     2013#define expr 3.0 * i
     2014typeof(expr) j = expr;
     2015int i;
     2016typeof(i) k = i;
     2017\end{lstlisting}
     2018&
     2019\begin{lstlisting}
     2020
     2021// use type of initialization expression
     2022
     2023// use type of primary variable
     2024\end{lstlisting}
     2025\end{tabular}
     2026\end{quote2}
     2027The two important capabilities are:
     2028\begin{itemize}
     2029\item
     2030preventing having to determine or write out long generic types,
     2031\item
     2032ensure secondary variables, related to a primary variable, always have the same type.
     2033\end{itemize}
     2034
     2035In \CFA, \lstinline@typedef@ provides a mechanism to alias long type names with short ones, both globally and locally, but not eliminate the use of the short name.
     2036\lstinline@gcc@ provides \lstinline@typeof@ to declare a secondary variable from a primary variable.
     2037\CFA also relies heavily on the specification of the left-hand side of assignment for type inferencing, so in many cases it is crucial to specify the type of the left-hand side to select the correct type of the right-hand expression.
     2038Only for overloaded routines with the same return type is variable type-inferencing possible.
     2039Finally, \lstinline@auto@ presents the programming problem of tracking down a type when the type is actually needed.
     2040For example, given
     2041\begin{lstlisting}
     2042auto j = ®...®
     2043\end{lstlisting}
     2044and the need to write a routine to compute using \lstinline@j@
     2045\begin{lstlisting}
     2046void rtn( ®...® parm );
     2047rtn( j );
     2048\end{lstlisting}
     2049A programmer must work backwards to determine the type of \lstinline@j@'s initialization expression, reconstructing the possibly long generic type-name.
     2050In this situation, having the type name or a short alias is very useful.
     2051
     2052There is also the conundrum in type inferencing of when to \emph{\Index{brand}} a type.
     2053That is, when is the type of the variable more important than the type of its initialization expression.
     2054For example, if a change is made in an initialization expression, it can cause hundreds or thousands of cascading type changes and/or errors.
     2055At some point, a programmer wants the type of the variable to remain constant and the expression to be in error when it changes.
     2056
     2057Given \lstinline@typedef@ and \lstinline@typeof@ in \CFA, and the strong need to use the type of left-hand side in inferencing, auto type-inferencing is not supported at this time.
     2058Should a significant need arise, this feature can be revisited.
     2059
     2060
     2061\section{Generics}
    21712062
    21722063\CFA supports parametric polymorphism to allow users to define generic functions and types.
     
    23682259
    23692260        try {
    2370         throw 13;
     2261                throw 13;
    23712262        }
    23722263        catch(int e) {
    2373         printf(.caught an exception: %d\n., e);
     2264                printf(.caught an exception: %d\n., e);
    23742265        }
    23752266\end{lstlisting}
     
    24572348
    24582349
    2459 \section{I/O Library}
    2460 \label{s:IOLibrary}
    2461 
    2462 The goal for \CFA I/O is to make I/O as simple as possible for the general case, while fully supporting polmorphism and user defined types in a consistent way.
    2463 The general case is printing out a sequence of variables separated by whitespace.
    2464 \begin{lstlisting}
    2465 int x = 0, y = 1, z = 2;
    2466 sout | x | y | z | endl;
    2467 
    2468 cout << x << " " << y << " " << z << endl;
    2469 \end{lstlisting}
    2470 The \CC form takes almost twice as many characters.
    2471 
    2472 The logical-or operator is used because it is the lowest priority overloadable operator, other than assignment.
    2473 Therefore, most output expressions do not require parenthesis.
    2474 \begin{lstlisting}
    2475 int x = 0, y = 1, z = 2;
    2476 sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl;
    2477 
    2478 cout << x * 3 << y + 1 << (z << 2) << (x == y) << (x | y) << (x || y) << (x > z ? 1 : 2) << endl;
    2479 \end{lstlisting}
    2480 
    2481 Finally, the logical-or operator has a link with the Shell pipe-operator for moving data, although data flows in the opposite direction.
    2482 
    2483 \begin{figure}
    2484 \begin{lstlisting}[mathescape=off]
    2485 #include <fstream>
    2486 
    2487 int main() {
    2488         char c;
    2489         short int si;
    2490         unsigned short int usi;
    2491         int i;
    2492         unsigned int ui;
    2493         long int li;
    2494         unsigned long int uli;
    2495         long long int lli;
    2496         unsigned long long int ulli;
    2497         float f;
    2498         double d;
    2499         long double ld;
    2500         float _Complex fc;
    2501         double _Complex dc;
    2502         long double _Complex ldc;
    2503         char s1[10], s2[10];
    2504 
    2505         ifstream in;
    2506         open( &in, "read.data", "r" );
    2507 
    2508         &in | &c
    2509                 | &si | &usi | &i | &ui | &li | &uli | &lli | &ulli
    2510                 | &f | &d | &ld
    2511                 | &fc | &dc | &ldc
    2512                 | str( s1 ) | str( s2, 10 );
    2513 
    2514         sout | c | ' ' | endl
    2515                  | si | usi | i | ui | li | uli | lli | ulli | endl
    2516                  | f | d | ld | endl
    2517                  | f | "" | d | "" | ld | endl;
    2518 
    2519         sepSet( sout, ", $" );
    2520         sout | fc | dc | ldc | endl
    2521                  | sepOn | s1 | sepOff | s2 | endl
    2522                  | s1 | "" | s2 | endl;
    2523 }
    2524 
    2525 $ cat read.data
    2526 A 1 2 3 4 5 6 7 8 1.1 1.2 1.3 1.1+2.3 1.1-2.3 1.1-2.3 abc xyz
    2527 $ a.out
    2528 A
    2529 1 2 3 4 5 6 7 8
    2530 1.1 1.2 1.3
    2531 1.11.21.3
    2532 1.1+2.3i, $1.1-2.3i, $1.1-2.3i
    2533 , $abcxyz
    2534 abcxyz
    2535 \end{lstlisting}
    2536 \end{figure}
    2537 
    2538 
    2539 \section{Standard Library}
    2540 \label{s:StandardLibrary}
    2541 
    2542 The goal of the \CFA standard-library is to wrap many of the existing C library-routines that are explicitly polymorphic into implicitly polymorphic versions.
    2543 
    2544 
    2545 \subsection{malloc}
    2546 
    2547 \begin{lstlisting}
    2548 forall( otype T ) T * malloc( void );
    2549 forall( otype T ) T * malloc( char fill );
    2550 forall( otype T ) T * malloc( T * ptr, size_t size );
    2551 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );
    2552 forall( otype T ) T * calloc( size_t size );
    2553 forall( otype T ) T * realloc( T * ptr, size_t size );
    2554 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );
    2555 
    2556 forall( otype T ) T * aligned_alloc( size_t alignment );
    2557 forall( otype T ) T * memalign( size_t alignment );             // deprecated
    2558 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
    2559 
    2560 forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
    2561 forall( otype T ) T * memset( T * ptr );                                // remove when default value available
    2562 \end{lstlisting}
    2563 
    2564 
    2565 \subsection{ato/strto}
    2566 
    2567 \begin{lstlisting}
    2568 int ato( const char * ptr );
    2569 unsigned int ato( const char * ptr );
    2570 long int ato( const char * ptr );
    2571 unsigned long int ato( const char * ptr );
    2572 long long int ato( const char * ptr );
    2573 unsigned long long int ato( const char * ptr );
    2574 float ato( const char * ptr );
    2575 double ato( const char * ptr );
    2576 long double ato( const char * ptr );
    2577 float _Complex ato( const char * ptr );
    2578 double _Complex ato( const char * ptr );
    2579 long double _Complex ato( const char * ptr );
    2580 
    2581 int strto( const char * sptr, char ** eptr, int base );
    2582 unsigned int strto( const char * sptr, char ** eptr, int base );
    2583 long int strto( const char * sptr, char ** eptr, int base );
    2584 unsigned long int strto( const char * sptr, char ** eptr, int base );
    2585 long long int strto( const char * sptr, char ** eptr, int base );
    2586 unsigned long long int strto( const char * sptr, char ** eptr, int base );
    2587 float strto( const char * sptr, char ** eptr );
    2588 double strto( const char * sptr, char ** eptr );
    2589 long double strto( const char * sptr, char ** eptr );
    2590 float _Complex strto( const char * sptr, char ** eptr );
    2591 double _Complex strto( const char * sptr, char ** eptr );
    2592 long double _Complex strto( const char * sptr, char ** eptr );
    2593 \end{lstlisting}
    2594 
    2595 
    2596 \subsection{bsearch/qsort}
    2597 
    2598 \begin{lstlisting}
    2599 forall( otype T | { int ?<?( T, T ); } )
    2600 T * bsearch( const T key, const T * arr, size_t dimension );
    2601 
    2602 forall( otype T | { int ?<?( T, T ); } )
    2603 void qsort( const T * arr, size_t dimension );
    2604 \end{lstlisting}
    2605 
    2606 
    2607 \subsection{abs}
    2608 
    2609 \begin{lstlisting}
    2610 char abs( char );
    2611 extern "C" {
    2612 int abs( int );         // use default C routine for int
    2613 } // extern
    2614 long int abs( long int );
    2615 long long int abs( long long int );
    2616 float abs( float );
    2617 double abs( double );
    2618 long double abs( long double );
    2619 float _Complex abs( float _Complex );
    2620 double _Complex abs( double _Complex );
    2621 long double _Complex abs( long double _Complex );
    2622 \end{lstlisting}
    2623 
    2624 
    2625 \subsection{random}
    2626 
    2627 \begin{lstlisting}
    2628 void randseed( long int s );
    2629 char random();
    2630 int random();
    2631 unsigned int random();
    2632 long int random();
    2633 unsigned long int random();
    2634 float random();
    2635 double random();
    2636 float _Complex random();
    2637 double _Complex random();
    2638 long double _Complex random();
    2639 \end{lstlisting}
    2640 
    2641 
    2642 \subsection{min/max/swap}
    2643 
    2644 \begin{lstlisting}
    2645 forall( otype T | { int ?<?( T, T ); } )
    2646 T min( const T t1, const T t2 );
    2647 
    2648 forall( otype T | { int ?>?( T, T ); } )
    2649 T max( const T t1, const T t2 );
    2650 
    2651 forall( otype T )
    2652 void swap( T * t1, T * t2 );
    2653 \end{lstlisting}
     2350\section{Syntactic Anomalies}
     2351
     2352The number 0 and 1 are treated specially in \CFA, and can be redefined as variables.
     2353One syntactic anomaly is when a field in an structure is names 0 or 1:
     2354\begin{lstlisting}
     2355struct S {
     2356        int 0, 1;
     2357} s;
     2358\end{lstlisting}
     2359The problem occurs in accesing these fields using the selection operation ``\lstinline@.@'':
     2360\begin{lstlisting}
     2361s.0 = 0;        // ambiguity with floating constant .0
     2362s.1 = 1;        // ambiguity with floating constant .1
     2363\end{lstlisting}
     2364To make this work, a space is required after the field selection:
     2365\begin{lstlisting}
     2366®s.§\textvisiblespace§0® = 0;
     2367®s.§\textvisiblespace§1® = 1;
     2368\end{lstlisting}
     2369While this sytact is awkward, it is unlikely many programers will name fields of a structure 0 or 1.
     2370Like the \CC lexical problem with closing template-syntax, e.g, \lstinline@Foo<Bar<int®>>®@, this issue can be solved with a more powerful lexer/parser.
     2371
     2372There are several ambiguous cases with operator identifiers, e.g., \lstinline@int *?*?()@, where the string \lstinline@*?*?@ can be lexed as \lstinline@*@/\lstinline@?*?@ or \lstinline@*?@/\lstinline@*?@.
     2373Since it is common practise to put a unary operator juxtaposed to an identifier, e.g., \lstinline@*i@, users will be annoyed if they cannot do this with respect to operator identifiers.
     2374Even with this special hack, there are 5 general cases that cannot be handled.
     2375The first case is for the function-call identifier \lstinline@?()@:
     2376\begin{lstlisting}
     2377int *§\textvisiblespace§?()();  // declaration: space required after '*'
     2378*§\textvisiblespace§?()();              // expression: space required after '*'
     2379\end{lstlisting}
     2380Without the space, the string \lstinline@*?()@ is ambiguous without N character look ahead;
     2381it requires scanning ahead to determine if there is a \lstinline@'('@, which is the start of an argument/parameter list.
     2382
     2383The 4 remaining cases occur in expressions:
     2384\begin{lstlisting}
     2385i++§\textvisiblespace§?i:0;             // space required before '?'
     2386i--§\textvisiblespace§?i:0;             // space required before '?'
     2387i§\textvisiblespace§?++i:0;             // space required after '?'
     2388i§\textvisiblespace§?--i:0;             // space required after '?'
     2389\end{lstlisting}
     2390In the first two cases, the string \lstinline@i++?@ is ambiguous, where this string can be lexed as \lstinline@i@ / \lstinline@++?@ or \lstinline@i++@ / \lstinline@?@;
     2391it requires scanning ahead to determine if there is a \lstinline@'('@, which is the start of an argument list.
     2392In the second two cases, the string \lstinline@?++x@ is ambiguous, where this string can be lexed as \lstinline@?++@ / \lstinline@x@ or \lstinline@?@ / y\lstinline@++x@;
     2393it requires scanning ahead to determine if there is a \lstinline@'('@, which is the start of an argument list.
    26542394
    26552395
     
    26762416
    26772417task creates a type with implicit locking, separate stack, and a thread
     2418
    26782419
    26792420\subsection{Monitors}
     
    35763317
    35773318
    3578 \subsection{Comparing Key Features of \CFA}
     3319\subsection[Comparing Key Features of CFA]{Comparing Key Features of \CFA}
    35793320
    35803321
     
    37753516\multicolumn{1}{c|}{\textbf{\CFA/\CC}} & \multicolumn{1}{c|}{\textbf{Go}} & \multicolumn{1}{c}{\textbf{Rust}}   \\
    37763517\hline
    3777 \begin{lstlisting}
     3518\begin{lstlisting}[boxpos=t]
    37783519extern "C" {
    37793520#include <sys/types.h>
     
    37823523}
    37833524size_t fileSize( const char *path ) {
    3784         stat s;
     3525        struct stat s;
    37853526        stat(path, &s);
    37863527        return s.st_size;
     
    37883529\end{lstlisting}
    37893530&
    3790 \begin{lstlisting}
     3531\begin{lstlisting}[boxpos=t]
    37913532/*
    37923533#cgo
     
    38073548\end{lstlisting}
    38083549&
    3809 \begin{lstlisting}
     3550\begin{lstlisting}[boxpos=t]
    38103551use libc::{c_int, size_t};
    3811 
    3812 // The following declarations are
    38133552// translated from sys/stat.h
    38143553#[repr(C)]
     
    38183557        ...
    38193558}
    3820 
    38213559#[link(name = "libc")]
    38223560extern {
     
    38243562        buf: *mut stat_t) -> c_int;
    38253563}
    3826 
    38273564fn fileSize(path: *const u8) -> size_t
    38283565{
    38293566        unsafe {
    3830         let mut buf: stat_t = uninit();
    3831         stat(path, &mut buf);
    3832         buf.st_size
     3567                let mut buf: stat_t = uninit();
     3568                stat(path, &mut buf);
     3569                buf.st_size
    38333570        }
    38343571}
     
    39533690
    39543691
    3955 \subsubsection{Modules/Packages}
     3692\begin{comment}
     3693\subsubsection{Modules / Packages}
    39563694
    39573695\begin{lstlisting}
     
    40323770}
    40333771\end{lstlisting}
     3772\end{comment}
     3773
    40343774
    40353775\subsubsection{Parallel Tasks}
     
    41873927\end{flushleft}
    41883928
     3929\lstset{basicstyle=\sf\relsize{-1}}
     3930
     3931
    41893932\subsection{Summary of Language Comparison}
    41903933
    41913934
    4192 \subsubsection{\CC}
     3935\subsubsection[C++]{\CC}
    41933936
    41943937\CC is a general-purpose programming language.
     
    42553998
    42563999
     4000\appendix
     4001
     4002
     4003\section{Incompatible}
     4004
     4005The following incompatibles exist between C and \CFA, and are similar to Annex C for \CC~\cite{ANSI14:C++}.
     4006
     4007\begin{enumerate}
     4008\item
     4009Change type of character literal \lstinline@int@ to \lstinline@char@.
     4010This change allows overloading differentiation argument type matching, e.g.:
     4011\begin{lstlisting}
     4012int function( int i );
     4013int function( char c );
     4014function( 'x' );
     4015\end{lstlisting}
     4016It is preferable that this call match the second version of function rather than the first. \\
     4017Effect on original feature: Change to semantics of well-defined feature. ISO C programs which depend on
     4018\begin{lstlisting}
     4019sizeof('x') == sizeof(int)
     4020\end{lstlisting}
     4021will not work the same as C++ programs. \\
     4022Difficulty of converting: Simple. \\
     4023How widely used: Programs which depend upon sizeof('x') are probably rare.
     4024
     4025\item
     4026Change: String literals made \lstinline@const@ \\
     4027The type of a string literal is changed from \lstinline@array of char@ to \lstinline@array of const char@.
     4028The type of a wide string literal is changed from \lstinline@array of wchar_t@ to \lstinline@array of const wchar_t@. \\
     4029Rationale: This avoids calling an inappropriate overloaded function, which might expect to be able to modify its argument.
     4030Effect on original feature: Change to semantics of well-defined feature. \\
     4031Difficulty of converting: Simple syntactic transformation, because string literals can be converted to \lstinline@char*;@ (4.2).
     4032The most common cases are handled by a new but deprecated standard conversion:
     4033\begin{lstlisting}
     4034char* p = "abc"; // valid in C, deprecated in C++
     4035char* q = expr ? "abc" : "de"; // valid in C, invalid in C++
     4036\end{lstlisting}
     4037How widely used: Programs that have a legitimate reason to treat string literals as pointers to potentially modifiable memory are probably rare.
     4038
     4039\item
     4040Change: C++ does not have \emph{tentative definitions} as in C.
     4041E.g., at file scope,
     4042\begin{lstlisting}
     4043int i;
     4044int i;
     4045\end{lstlisting}
     4046is valid in C, invalid in C++.
     4047This makes it impossible to define mutually referential file-local static
     4048objects, if initializers are restricted to the syntactic forms of C. For example,
     4049\begin{lstlisting}
     4050struct X { int i; struct X *next; };
     4051static struct X a;
     4052static struct X b = { 0, &a };
     4053static struct X a = { 1, &b };
     4054\end{lstlisting}
     4055Rationale: This avoids having different initialization rules for builtin types and userdefined types.
     4056Effect on original feature: Deletion of semantically welldefined feature. \\
     4057Difficulty of converting: Semantic transformation.
     4058In C++, the initializer for one of a set of mutuallyreferential filelocal static objects must invoke a function call to achieve the initialization.
     4059How widely used: Seldom.
     4060
     4061\item
     4062Change: A struct is a scope in C++, not in C \\
     4063Rationale: Class scope is crucial to C++, and a struct is a class. \\
     4064Effect on original feature: Change to semantics of well-defined feature. \\
     4065Difficulty of converting: Semantic transformation. \\
     4066How widely used: C programs use struct extremely frequently, but the change is only noticeable when struct, enumeration, or enumerator names are referred to outside the struct.
     4067The latter is probably rare.
     4068
     4069\CFA is C \emph{incompatible} on this issue, and provides semantics similar to \CC.
     4070Nested types are not hoisted and can be referenced using the field selection operator ``\lstinline@.@'', unlike the \CC scope-resolution operator ``\lstinline@::@''.
     4071Given that nested types in C are equivalent to not using them, i.e., they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility.
     4072
     4073\item
     4074Change: In C++, the name of a nested class is local to its enclosing class.
     4075In C the name of the nested class belongs to the same scope as the name of the outermost enclosing class
     4076Example:
     4077\begin{lstlisting}
     4078struct X {
     4079struct Y { /* ... */ } y;
     4080};
     4081struct Y yy; // valid C, invalid C++
     4082\end{lstlisting}
     4083Rationale: C++ classes have member functions which require that classes establish scopes.
     4084The C rule would leave classes as an incomplete scope mechanism which would prevent C++ programmers from maintaining locality within a class. A coherent set of scope rules for C++ based on the C rule would be very complicated and C++ programmers would be unable to predict reliably the meanings of nontrivial examples involving nested or local functions.
     4085Effect on original feature: Change of semantics of welldefined feature.
     4086Difficulty of converting: Semantic transformation. To make the struct type name visible in the scope of the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing struct is defined. Example:
     4087\begin{lstlisting}
     4088struct Y; // struct Y and struct X are at the same scope
     4089struct X {
     4090struct Y { /* ... */ } y;
     4091};
     4092\end{lstlisting}
     4093All the definitions of C struct types enclosed in other struct definitions and accessed outside the scope of the enclosing struct could be exported to the scope of the enclosing struct.
     4094Note: this is a consequence of the difference in scope rules, which is documented in 3.3.
     4095How widely used: Seldom.
     4096\end{enumerate}
     4097
     4098
     4099\section{I/O Library}
     4100\label{s:IOLibrary}
     4101\index{input/output library}
     4102
     4103The goal for \CFA I/O is to make I/O as simple as possible for the general case, while fully supporting polmorphism and user defined types in a consistent way.
     4104The general case is printing out a sequence of variables separated by whitespace.
     4105\begin{quote2}
     4106\begin{tabular}{@{}l@{\hspace{30pt}}l@{}}
     4107\multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}       & \multicolumn{1}{c}{\textbf{\CC}}      \\
     4108\begin{lstlisting}
     4109int x = 0, y = 1, z = 2;
     4110®sout® ®|® x ®|® y ®|® z ®| endl®;
     4111\end{lstlisting}
     4112&
     4113\begin{lstlisting}
     4114
     4115cout << x << " " << y << " " << z << endl;
     4116\end{lstlisting}
     4117\end{tabular}
     4118\end{quote2}
     4119The \CFA form is half as many characters, and is similar to \Index{Python} I/O with respect to implicit separators.
     4120
     4121The logical-or operator is used because it is the lowest-priority overloadable operator, other than assignment.
     4122Therefore, fewer output expressions require parenthesis.
     4123\begin{quote2}
     4124\begin{tabular}{@{}ll@{}}
     4125\textbf{\CFA:}
     4126&
     4127\begin{lstlisting}
     4128sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl;
     4129\end{lstlisting}
     4130\\
     4131\textbf{\CC:}
     4132&
     4133\begin{lstlisting}
     4134cout << x * 3 << y + 1 << (z << 2) << (x == y) << (x | y) << (x || y) << (x > z ? 1 : 2) << endl;
     4135\end{lstlisting}
     4136\end{tabular}
     4137\end{quote2}
     4138Finally, the logical-or operator has a link with the Shell pipe-operator for moving data, although data flows in the opposite direction.
     4139
     4140The implicit seperator\index{I/O separator} character (space/blank) is a separator not a terminator.
     4141The rules for implicitly adding the separator are:
     4142\begin{enumerate}
     4143\item
     4144A seperator does not appear at the start or end of a line.
     4145\begin{lstlisting}[belowskip=0pt]
     4146sout | 1 | 2 | 3 | endl;
     4147\end{lstlisting}
     4148\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     41491 2 3
     4150\end{lstlisting}
     4151\item
     4152A seperator does not appear before or after a character literal or variable.
     4153\begin{lstlisting}
     4154sout | '1' | '2' | '3' | endl;
     4155123
     4156\end{lstlisting}
     4157\item
     4158A seperator does not appear before or after a null (empty) C string
     4159\begin{lstlisting}
     4160sout | 1 | "" | 2 | "" | 3 | endl;
     4161123
     4162\end{lstlisting}
     4163which is a local mechanism to disable insertion of the separator character.
     4164\item
     4165A seperator does not appear before a C string starting with the (extended) \Index{ASCII}\index{ASCII!extended} characters: \lstinline[mathescape=off]@([{$£¥¡¿«@
     4166%$
     4167\begin{lstlisting}[mathescape=off]
     4168sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7 | "x ¿" | 8 | "x «" | 9 | endl;
     4169\end{lstlisting}
     4170%$
     4171\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     4172x (1 x [2 x {3 x $4 x £5 x ¥6 x ¡7 x ¿8 x «9
     4173\end{lstlisting}
     4174%$
     4175\item
     4176A seperator does not appear after a C string ending with the (extended) \Index{ASCII}\index{ASCII!extended} characters: \lstinline@,.:;!?)]}%¢»@
     4177\begin{lstlisting}[belowskip=0pt]
     4178sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7 | ") x" | 8 | "] x" | 9 | "} x"
     4179         | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl;
     4180\end{lstlisting}
     4181\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     41821, x 2. x 3: x 4; x 5! x 6? x 7) x 8] x 9} x 10% x 11¢ 12»
     4183\end{lstlisting}
     4184\item
     4185A seperator does not appear before or after a C string begining/ending with the \Index{ASCII} quote or whitespace characters: \lstinline[showspaces=true]@`'" \t\v\f\r\n@
     4186\begin{lstlisting}[belowskip=0pt]
     4187sout | "x`" | 1 | "`x'" | 2 | "'x\"" | 3 | "\"x" | "x " | 4 | " x" | "x\t" | 1 | "\tx" | endl;
     4188\end{lstlisting}
     4189\begin{lstlisting}[mathescape=off,showspaces=true,showtabs=true,aboveskip=0pt,belowskip=0pt]
     4190x`1`x'2'x"3"x x 4 x x   1       x
     4191\end{lstlisting}
     4192\end{enumerate}
     4193The following \CC-style \Index{manipulator}s allow further control over implicit seperation.
     4194\begin{lstlisting}[mathescape=off,belowskip=0pt]
     4195sout | sepOn | 1 | 2 | 3 | sepOn | endl;        // separator at start of line
     4196\end{lstlisting}
     4197\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     4198 1 2 3
     4199\end{lstlisting}
     4200\begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
     4201sout | 1 | sepOff | 2 | 3 | endl;                       // turn off implicit separator temporarily
     4202\end{lstlisting}
     4203\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     420412 3
     4205\end{lstlisting}
     4206\begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
     4207sout | sepDisable | 1 | 2 | 3 | endl;           // turn off implicit separation, affects all subsequent prints
     4208\end{lstlisting}
     4209\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     4210123
     4211\end{lstlisting}
     4212\begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
     4213sout | 1 | sepOn | 2 | 3 | endl;                        // turn on implicit separator temporarily
     4214\end{lstlisting}
     4215\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     42161 23
     4217\end{lstlisting}
     4218\begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
     4219sout | sepEnable | 1 | 2 | 3 | endl;            // turn on implicit separation, affects all subsequent prints
     4220\end{lstlisting}
     4221\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     4222 1 2 3
     4223\end{lstlisting}
     4224\begin{lstlisting}[mathescape=off,aboveskip=0pt,aboveskip=0pt,belowskip=0pt]
     4225sepSet( sout, ", $" );                                          // change separator from " " to ", $"
     4226sout | 1 | 2 | 3 | endl;
     4227\end{lstlisting}
     4228%$
     4229\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt]
     42301, $2, $3
     4231\end{lstlisting}
     4232%$
     4233\begin{comment}
     4234#include <fstream>
     4235
     4236int main() {
     4237        int x = 3, y = 5, z = 7;
     4238        sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl;
     4239        sout | 1 | 2 | 3 | endl;
     4240        sout | '1' | '2' | '3' | endl;
     4241        sout | 1 | "" | 2 | "" | 3 | endl;
     4242        sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7 | "x ¿" | 8 | "x «" | 9 | endl;
     4243        sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7 | ") x" | 8 | "] x" | 9 | "} x"
     4244                 | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl;
     4245        sout | "x`" | 1 | "`x'" | 2 | "'x\"" | 3 | "\"x" | "x " | 4 | " x" | "x\t" | 1 | "\tx" | endl;
     4246        sout | sepOn | 1 | 2 | 3 | sepOn | endl;        // separator at start of line
     4247        sout | 1 | sepOff | 2 | 3 | endl;                       // turn off implicit separator temporarily
     4248        sout | sepDisable | 1 | 2 | 3 | endl;           // turn off implicit separation, affects all subsequent prints
     4249        sout | 1 | sepOn | 2 | 3 | endl;                        // turn on implicit separator temporarily
     4250        sout | sepEnable | 1 | 2 | 3 | endl;            // turn on implicit separation, affects all subsequent prints
     4251        sepSet( sout, ", $" );                                          // change separator from " " to ", $"
     4252        sout | 1 | 2 | 3 | endl;
     4253
     4254}
     4255
     4256// Local Variables: //
     4257// tab-width: 4 //
     4258// End: //
     4259\end{comment}
     4260%$
     4261
     4262
     4263\section{Standard Library}
     4264\label{s:StandardLibrary}
     4265
     4266The goal of the \CFA standard-library is to wrap many of the existing C library-routines that are explicitly polymorphic into implicitly polymorphic versions.
     4267
     4268
     4269\subsection{malloc}
     4270
     4271\begin{lstlisting}
     4272forall( otype T ) T * malloc( void );§\indexc{malloc}§
     4273forall( otype T ) T * malloc( char fill );
     4274forall( otype T ) T * malloc( T * ptr, size_t size );
     4275forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );
     4276forall( otype T ) T * calloc( size_t nmemb );§\indexc{calloc}§
     4277forall( otype T ) T * realloc( T * ptr, size_t size );§\indexc{ato}§
     4278forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );
     4279
     4280forall( otype T ) T * aligned_alloc( size_t alignment );§\indexc{ato}§
     4281forall( otype T ) T * memalign( size_t alignment );             // deprecated
     4282forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
     4283
     4284forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
     4285forall( otype T ) T * memset( T * ptr );                                // remove when default value available
     4286\end{lstlisting}
     4287
     4288
     4289\subsection{ato / strto}
     4290
     4291\begin{lstlisting}
     4292int ato( const char * ptr );§\indexc{ato}§
     4293unsigned int ato( const char * ptr );
     4294long int ato( const char * ptr );
     4295unsigned long int ato( const char * ptr );
     4296long long int ato( const char * ptr );
     4297unsigned long long int ato( const char * ptr );
     4298float ato( const char * ptr );
     4299double ato( const char * ptr );
     4300long double ato( const char * ptr );
     4301float _Complex ato( const char * ptr );
     4302double _Complex ato( const char * ptr );
     4303long double _Complex ato( const char * ptr );
     4304
     4305int strto( const char * sptr, char ** eptr, int base );
     4306unsigned int strto( const char * sptr, char ** eptr, int base );
     4307long int strto( const char * sptr, char ** eptr, int base );
     4308unsigned long int strto( const char * sptr, char ** eptr, int base );
     4309long long int strto( const char * sptr, char ** eptr, int base );
     4310unsigned long long int strto( const char * sptr, char ** eptr, int base );
     4311float strto( const char * sptr, char ** eptr );
     4312double strto( const char * sptr, char ** eptr );
     4313long double strto( const char * sptr, char ** eptr );
     4314float _Complex strto( const char * sptr, char ** eptr );
     4315double _Complex strto( const char * sptr, char ** eptr );
     4316long double _Complex strto( const char * sptr, char ** eptr );
     4317\end{lstlisting}
     4318
     4319
     4320\subsection{bsearch / qsort}
     4321
     4322\begin{lstlisting}
     4323forall( otype T | { int ?<?( T, T ); } )
     4324T * bsearch( const T key, const T * arr, size_t dimension );§\indexc{bsearch}§
     4325
     4326forall( otype T | { int ?<?( T, T ); } )
     4327void qsort( const T * arr, size_t dimension );§\indexc{qsort}§
     4328\end{lstlisting}
     4329
     4330
     4331\subsection{abs}
     4332
     4333\begin{lstlisting}
     4334char abs( char );§\indexc{abs}§
     4335int abs( int );
     4336long int abs( long int );
     4337long long int abs( long long int );
     4338float abs( float );
     4339double abs( double );
     4340long double abs( long double );
     4341float abs( float _Complex );
     4342double abs( double _Complex );
     4343long double abs( long double _Complex );
     4344\end{lstlisting}
     4345
     4346
     4347\subsection{random}
     4348
     4349\begin{lstlisting}
     4350void rand48seed( long int s );§\indexc{rand48seed}§
     4351char rand48();§\indexc{rand48}§
     4352int rand48();
     4353unsigned int rand48();
     4354long int rand48();
     4355unsigned long int rand48();
     4356float rand48();
     4357double rand48();
     4358float _Complex rand48();
     4359double _Complex rand48();
     4360long double _Complex rand48();
     4361\end{lstlisting}
     4362
     4363
     4364\subsection{min / max / swap}
     4365
     4366\begin{lstlisting}
     4367forall( otype T | { int ?<?( T, T ); } )
     4368T min( const T t1, const T t2 );§\indexc{min}§
     4369
     4370forall( otype T | { int ?>?( T, T ); } )
     4371T max( const T t1, const T t2 );§\indexc{max}§
     4372
     4373forall( otype T )
     4374void swap( T * t1, T * t2 );§\indexc{swap}§
     4375\end{lstlisting}
     4376
     4377
     4378\section{Math Library}
     4379\label{s:Math Library}
     4380
     4381The goal of the \CFA math-library is to wrap many of the existing C math library-routines that are explicitly polymorphic into implicitly polymorphic versions.
     4382
     4383
     4384\subsection{General}
     4385
     4386\begin{lstlisting}
     4387float fabs( float );§\indexc{fabs}§
     4388double fabs( double );
     4389long double fabs( long double );
     4390float cabs( float _Complex );
     4391double cabs( double _Complex );
     4392long double cabs( long double _Complex );
     4393
     4394float ?%?( float, float );§\indexc{fmod}§
     4395float fmod( float, float );
     4396double ?%?( double, double );
     4397double fmod( double, double );
     4398long double ?%?( long double, long double );
     4399long double fmod( long double, long double );
     4400
     4401float remainder( float, float );§\indexc{remainder}§
     4402double remainder( double, double );
     4403long double remainder( long double, long double );
     4404
     4405[ int, float ] remquo( float, float );§\indexc{remquo}§
     4406float remquo( float, float, int * );
     4407[ int, double ] remquo( double, double );
     4408double remquo( double, double, int * );
     4409[ int, long double ] remquo( long double, long double );
     4410long double remquo( long double, long double, int * );
     4411
     4412[ int, float ] div( float, float );                                             // alternative name for remquo
     4413float div( float, float, int * );§\indexc{div}§
     4414[ int, double ] div( double, double );
     4415double div( double, double, int * );
     4416[ int, long double ] div( long double, long double );
     4417long double div( long double, long double, int * );
     4418
     4419float fma( float, float, float );§\indexc{fma}§
     4420double fma( double, double, double );
     4421long double fma( long double, long double, long double );
     4422
     4423float fdim( float, float );§\indexc{fdim}§
     4424double fdim( double, double );
     4425long double fdim( long double, long double );
     4426
     4427float nan( const char * );§\indexc{nan}§
     4428double nan( const char * );
     4429long double nan( const char * );
     4430\end{lstlisting}
     4431
     4432
     4433\subsection{Exponential}
     4434
     4435\begin{lstlisting}
     4436float exp( float );§\indexc{exp}§
     4437double exp( double );
     4438long double exp( long double );
     4439float _Complex exp( float _Complex );
     4440double _Complex exp( double _Complex );
     4441long double _Complex exp( long double _Complex );
     4442
     4443float exp2( float );§\indexc{exp2}§
     4444double exp2( double );
     4445long double exp2( long double );
     4446float _Complex exp2( float _Complex );
     4447double _Complex exp2( double _Complex );
     4448long double _Complex exp2( long double _Complex );
     4449
     4450float expm1( float );§\indexc{expm1}§
     4451double expm1( double );
     4452long double expm1( long double );
     4453
     4454float log( float );§\indexc{log}§
     4455double log( double );
     4456long double log( long double );
     4457float _Complex log( float _Complex );
     4458double _Complex log( double _Complex );
     4459long double _Complex log( long double _Complex );
     4460
     4461float log2( float );§\indexc{log2}§
     4462double log2( double );
     4463long double log2( long double );
     4464float _Complex log2( float _Complex );
     4465double _Complex log2( double _Complex );
     4466long double _Complex log2( long double _Complex );
     4467
     4468float log10( float );§\indexc{log10}§
     4469double log10( double );
     4470long double log10( long double );
     4471float _Complex log10( float _Complex );
     4472double _Complex log10( double _Complex );
     4473long double _Complex log10( long double _Complex );
     4474
     4475float log1p( float );§\indexc{log1p}§
     4476double log1p( double );
     4477long double log1p( long double );
     4478
     4479int ilogb( float );§\indexc{ilogb}§
     4480int ilogb( double );
     4481int ilogb( long double );
     4482
     4483float logb( float );§\indexc{logb}§
     4484double logb( double );
     4485long double logb( long double );
     4486\end{lstlisting}
     4487
     4488
     4489\subsection{Power}
     4490
     4491\begin{lstlisting}
     4492float sqrt( float );§\indexc{sqrt}§
     4493double sqrt( double );
     4494long double sqrt( long double );
     4495float _Complex sqrt( float _Complex );
     4496double _Complex sqrt( double _Complex );
     4497long double _Complex sqrt( long double _Complex );
     4498
     4499float cbrt( float );§\indexc{cbrt}§
     4500double cbrt( double );
     4501long double cbrt( long double );
     4502
     4503float hypot( float, float );§\indexc{hypot}§
     4504double hypot( double, double );
     4505long double hypot( long double, long double );
     4506
     4507float pow( float, float );§\indexc{pow}§
     4508double pow( double, double );
     4509long double pow( long double, long double );
     4510float _Complex pow( float _Complex, float _Complex );
     4511double _Complex pow( double _Complex, double _Complex );
     4512long double _Complex pow( long double _Complex, long double _Complex );
     4513\end{lstlisting}
     4514
     4515
     4516\subsection{Trigonometric}
     4517
     4518\begin{lstlisting}
     4519float sin( float );§\indexc{sin}§
     4520double sin( double );
     4521long double sin( long double );
     4522float _Complex sin( float _Complex );
     4523double _Complex sin( double _Complex );
     4524long double _Complex sin( long double _Complex );
     4525
     4526float cos( float );§\indexc{cos}§
     4527double cos( double );
     4528long double cos( long double );
     4529float _Complex cos( float _Complex );
     4530double _Complex cos( double _Complex );
     4531long double _Complex cos( long double _Complex );
     4532
     4533float tan( float );§\indexc{tan}§
     4534double tan( double );
     4535long double tan( long double );
     4536float _Complex tan( float _Complex );
     4537double _Complex tan( double _Complex );
     4538long double _Complex tan( long double _Complex );
     4539
     4540float asin( float );§\indexc{asin}§
     4541double asin( double );
     4542long double asin( long double );
     4543float _Complex asin( float _Complex );
     4544double _Complex asin( double _Complex );
     4545long double _Complex asin( long double _Complex );
     4546
     4547float acos( float );§\indexc{acos}§
     4548double acos( double );
     4549long double acos( long double );
     4550float _Complex acos( float _Complex );
     4551double _Complex acos( double _Complex );
     4552long double _Complex acos( long double _Complex );
     4553
     4554float atan( float );§\indexc{atan}§
     4555double atan( double );
     4556long double atan( long double );
     4557float _Complex atan( float _Complex );
     4558double _Complex atan( double _Complex );
     4559long double _Complex atan( long double _Complex );
     4560
     4561float atan2( float, float );§\indexc{atan2}§
     4562double atan2( double, double );
     4563long double atan2( long double, long double );
     4564
     4565float atan( float, float );                                                             // alternative name for atan2
     4566double atan( double, double );§\indexc{atan}§
     4567long double atan( long double, long double );
     4568\end{lstlisting}
     4569
     4570
     4571\subsection{Hyperbolic}
     4572
     4573\begin{lstlisting}
     4574float sinh( float );§\indexc{sinh}§
     4575double sinh( double );
     4576long double sinh( long double );
     4577float _Complex sinh( float _Complex );
     4578double _Complex sinh( double _Complex );
     4579long double _Complex sinh( long double _Complex );
     4580
     4581float cosh( float );§\indexc{cosh}§
     4582double cosh( double );
     4583long double cosh( long double );
     4584float _Complex cosh( float _Complex );
     4585double _Complex cosh( double _Complex );
     4586long double _Complex cosh( long double _Complex );
     4587
     4588float tanh( float );§\indexc{tanh}§
     4589double tanh( double );
     4590long double tanh( long double );
     4591float _Complex tanh( float _Complex );
     4592double _Complex tanh( double _Complex );
     4593long double _Complex tanh( long double _Complex );
     4594
     4595float asinh( float );§\indexc{asinh}§
     4596double asinh( double );
     4597long double asinh( long double );
     4598float _Complex asinh( float _Complex );
     4599double _Complex asinh( double _Complex );
     4600long double _Complex asinh( long double _Complex );
     4601
     4602float acosh( float );§\indexc{acosh}§
     4603double acosh( double );
     4604long double acosh( long double );
     4605float _Complex acosh( float _Complex );
     4606double _Complex acosh( double _Complex );
     4607long double _Complex acosh( long double _Complex );
     4608
     4609float atanh( float );§\indexc{atanh}§
     4610double atanh( double );
     4611long double atanh( long double );
     4612float _Complex atanh( float _Complex );
     4613double _Complex atanh( double _Complex );
     4614long double _Complex atanh( long double _Complex );
     4615\end{lstlisting}
     4616
     4617
     4618\subsection{Error / Gamma}
     4619
     4620\begin{lstlisting}
     4621float erf( float );§\indexc{erf}§
     4622double erf( double );
     4623long double erf( long double );
     4624float _Complex erf( float _Complex );
     4625double _Complex erf( double _Complex );
     4626long double _Complex erf( long double _Complex );
     4627
     4628float erfc( float );§\indexc{erfc}§
     4629double erfc( double );
     4630long double erfc( long double );
     4631float _Complex erfc( float _Complex );
     4632double _Complex erfc( double _Complex );
     4633long double _Complex erfc( long double _Complex );
     4634
     4635float lgamma( float );§\indexc{lgamma}§
     4636double lgamma( double );
     4637long double lgamma( long double );
     4638float lgamma( float, int * );
     4639double lgamma( double, int * );
     4640long double lgamma( long double, int * );
     4641
     4642float tgamma( float );§\indexc{tgamma}§
     4643double tgamma( double );
     4644long double tgamma( long double );
     4645\end{lstlisting}
     4646
     4647
     4648\subsection{Nearest Integer}
     4649
     4650\begin{lstlisting}
     4651float floor( float );§\indexc{floor}§
     4652double floor( double );
     4653long double floor( long double );
     4654
     4655float ceil( float );§\indexc{ceil}§
     4656double ceil( double );
     4657long double ceil( long double );
     4658
     4659float trunc( float );§\indexc{trunc}§
     4660double trunc( double );
     4661long double trunc( long double );
     4662
     4663float rint( float );§\indexc{rint}§
     4664long double rint( long double );
     4665long int rint( float );
     4666long int rint( double );
     4667long int rint( long double );
     4668long long int rint( float );
     4669long long int rint( double );
     4670long long int rint( long double );
     4671
     4672long int lrint( float );§\indexc{lrint}§
     4673long int lrint( double );
     4674long int lrint( long double );
     4675long long int llrint( float );
     4676long long int llrint( double );
     4677long long int llrint( long double );
     4678
     4679float nearbyint( float );§\indexc{nearbyint}§
     4680double nearbyint( double );
     4681long double nearbyint( long double );
     4682
     4683float round( float );§\indexc{round}§
     4684long double round( long double );
     4685long int round( float );
     4686long int round( double );
     4687long int round( long double );
     4688long long int round( float );
     4689long long int round( double );
     4690long long int round( long double );
     4691
     4692long int lround( float );§\indexc{lround}§
     4693long int lround( double );
     4694long int lround( long double );
     4695long long int llround( float );
     4696long long int llround( double );
     4697long long int llround( long double );
     4698\end{lstlisting}
     4699
     4700
     4701\subsection{Manipulation}
     4702
     4703\begin{lstlisting}
     4704float copysign( float, float );§\indexc{copysign}§
     4705double copysign( double, double );
     4706long double copysign( long double, long double );
     4707
     4708float frexp( float, int * );§\indexc{frexp}§
     4709double frexp( double, int * );
     4710long double frexp( long double, int * );
     4711
     4712float ldexp( float, int );§\indexc{ldexp}§
     4713double ldexp( double, int );
     4714long double ldexp( long double, int );
     4715
     4716[ float, float ] modf( float );§\indexc{modf}§
     4717float modf( float, float * );
     4718[ double, double ] modf( double );
     4719double modf( double, double * );
     4720[ long double, long double ] modf( long double );
     4721long double modf( long double, long double * );
     4722
     4723float nextafter( float, float );§\indexc{nextafter}§
     4724double nextafter( double, double );
     4725long double nextafter( long double, long double );
     4726
     4727float nexttoward( float, long double );§\indexc{nexttoward}§
     4728double nexttoward( double, long double );
     4729long double nexttoward( long double, long double );
     4730
     4731float scalbn( float, int );§\indexc{scalbn}§
     4732double scalbn( double, int );
     4733long double scalbn( long double, int );
     4734
     4735float scalbln( float, long int );§\indexc{scalbln}§
     4736double scalbln( double, long int );
     4737long double scalbln( long double, long int );
     4738\end{lstlisting}
     4739
     4740
     4741\section{Rational Numbers}
     4742\label{s:RationalNumbers}
     4743
     4744Rational numbers are numbers written as a ratio, i.e., as a fraction, where the numerator (top number) and the denominator (bottom number) are whole numbers.
     4745When creating and computing with rational numbers, results are constantly reduced to keep the numerator and denominator as small as possible.
     4746
     4747\begin{lstlisting}
     4748// implementation
     4749struct Rational {§\indexc{Rational}§
     4750        long int numerator, denominator;                                        // invariant: denominator > 0
     4751}; // Rational
     4752
     4753// constants
     4754extern struct Rational 0;
     4755extern struct Rational 1;
     4756
     4757// constructors
     4758Rational rational();
     4759Rational rational( long int n );
     4760Rational rational( long int n, long int d );
     4761
     4762// getter/setter for numerator/denominator
     4763long int numerator( Rational r );
     4764long int numerator( Rational r, long int n );
     4765long int denominator( Rational r );
     4766long int denominator( Rational r, long int d );
     4767
     4768// comparison
     4769int ?==?( Rational l, Rational r );
     4770int ?!=?( Rational l, Rational r );
     4771int ?<?( Rational l, Rational r );
     4772int ?<=?( Rational l, Rational r );
     4773int ?>?( Rational l, Rational r );
     4774int ?>=?( Rational l, Rational r );
     4775
     4776// arithmetic
     4777Rational -?( Rational r );
     4778Rational ?+?( Rational l, Rational r );
     4779Rational ?-?( Rational l, Rational r );
     4780Rational ?*?( Rational l, Rational r );
     4781Rational ?/?( Rational l, Rational r );
     4782
     4783// conversion
     4784double widen( Rational r );
     4785Rational narrow( double f, long int md );
     4786
     4787// I/O
     4788forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, Rational * );
     4789forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, Rational );
     4790\end{lstlisting}
     4791
     4792
    42574793\bibliographystyle{plain}
    4258 \bibliography{/usr/local/bibliographies/pl.bib}
     4794\bibliography{cfa}
    42594795
    42604796
  • src/CodeGen/CodeGenerator.cc

    r1f6e009 r1048b31  
    455455
    456456        void CodeGenerator::visit( UntypedOffsetofExpr *offsetofExpr ) {
    457                 assert( false );
     457                assert( false && "UntypedOffsetofExpr should not reach code generation" );
    458458        }
    459459
     
    464464                output << ", " << mangleName( offsetofExpr->get_member() );
    465465                output << ")";
     466        }
     467
     468        void CodeGenerator::visit( OffsetPackExpr *offsetPackExpr ) {
     469                assert( false && "OffsetPackExpr should not reach code generation" );
    466470        }
    467471 
  • src/CodeGen/CodeGenerator.h

    r1f6e009 r1048b31  
    6565                virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    6666                virtual void visit( OffsetofExpr *offsetofExpr );
     67                virtual void visit( OffsetPackExpr *offsetPackExpr );
    6768                virtual void visit( LogicalExpr *logicalExpr );
    6869                virtual void visit( ConditionalExpr *conditionalExpr );
  • src/GenPoly/Box.cc

    r1f6e009 r1048b31  
    3030#include "FindFunction.h"
    3131#include "ScopedMap.h"
     32#include "ScopedSet.h"
    3233#include "ScrubTyVars.h"
    3334
     
    6263                FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars );
    6364
    64                 /// Key for a unique concrete type; generic base type paired with type parameter list
    65                 struct ConcreteType {
    66                         ConcreteType() : base(NULL), params() {}
    67 
    68                         ConcreteType(AggregateDecl *_base, const std::list< Type* >& _params) : base(_base), params() { cloneAll(_params, params); }
    69 
    70                         ConcreteType(const ConcreteType& that) : base(that.base), params() { cloneAll(that.params, params); }
     65                /// Abstracts type equality for a list of parameter types
     66                struct TypeList {
     67                        TypeList() : params() {}
     68                        TypeList( const std::list< Type* > &_params ) : params() { cloneAll(_params, params); }
     69                        TypeList( std::list< Type* > &&_params ) : params( _params ) {}
     70
     71                        TypeList( const TypeList &that ) : params() { cloneAll(that.params, params); }
     72                        TypeList( TypeList &&that ) : params( std::move( that.params ) ) {}
    7173
    7274                        /// Extracts types from a list of TypeExpr*
    73                         ConcreteType(AggregateDecl *_base, const std::list< TypeExpr* >& _params) : base(_base), params() {
     75                        TypeList( const std::list< TypeExpr* >& _params ) : params() {
    7476                                for ( std::list< TypeExpr* >::const_iterator param = _params.begin(); param != _params.end(); ++param ) {
    7577                                        params.push_back( (*param)->get_type()->clone() );
     
    7779                        }
    7880
    79                         ConcreteType& operator= (const ConcreteType& that) {
     81                        TypeList& operator= ( const TypeList &that ) {
    8082                                deleteAll( params );
     83
    8184                                params.clear();
    82 
    83                                 base = that.base;
    8485                                cloneAll( that.params, params );
    8586
     
    8788                        }
    8889
    89                         ~ConcreteType() { deleteAll( params ); }
    90 
    91                         bool operator== (const ConcreteType& that) const {
    92                                 if ( base != that.base ) return false;
     90                        TypeList& operator= ( TypeList &&that ) {
     91                                deleteAll( params );
     92
     93                                params = std::move( that.params );
     94
     95                                return *this;
     96                        }
     97
     98                        ~TypeList() { deleteAll( params ); }
     99
     100                        bool operator== ( const TypeList& that ) const {
     101                                if ( params.size() != that.params.size() ) return false;
    93102
    94103                                SymTab::Indexer dummy;
    95                                 if ( params.size() != that.params.size() ) return false;
    96104                                for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) {
    97105                                        if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false;
     
    100108                        }
    101109
    102                         AggregateDecl *base;        ///< Base generic type
    103110                        std::list< Type* > params;  ///< Instantiation parameters
    104111                };
    105112
    106                 /// Maps a concrete type to the some value, accounting for scope
    107                 template< typename Value >
     113                /// Maps a key and a TypeList to the some value, accounting for scope
     114                template< typename Key, typename Value >
    108115                class InstantiationMap {
    109                         /// Information about a specific instantiation of a generic type
    110                         struct Instantiation {
    111                                 ConcreteType key;  ///< Instantiation parameters for this type
    112                                 Value *value;      ///< Value for this instantiation
    113 
    114                                 Instantiation() : key(), value(0) {}
    115                                 Instantiation(const ConcreteType &_key, Value *_value) : key(_key), value(_value) {}
    116                         };
    117                         /// Map of generic types to instantiations of them
    118                         typedef std::map< AggregateDecl*, std::vector< Instantiation > > Scope;
    119 
    120                         std::vector< Scope > scopes;  ///< list of scopes, from outermost to innermost
     116                        /// Wraps value for a specific (Key, TypeList) combination
     117                        typedef std::pair< TypeList, Value* > Instantiation;
     118                        /// List of TypeLists paired with their appropriate values
     119                        typedef std::vector< Instantiation > ValueList;
     120                        /// Underlying map type; maps keys to a linear list of corresponding TypeLists and values
     121                        typedef ScopedMap< Key*, ValueList > InnerMap;
     122
     123                        InnerMap instantiations;  ///< instantiations
    121124
    122125                public:
    123126                        /// Starts a new scope
    124                         void beginScope() {
    125                                 Scope scope;
    126                                 scopes.push_back(scope);
    127                         }
     127                        void beginScope() { instantiations.beginScope(); }
    128128
    129129                        /// Ends a scope
    130                         void endScope() {
    131                                 scopes.pop_back();
    132                         }
    133 
    134                         /// Default constructor initializes with one scope
    135                         InstantiationMap() { beginScope(); }
    136 
    137 //              private:
    138                         /// Gets the value for the concrete instantiation of this type, assuming it has already been instantiated in the current scope.
    139                         /// Returns NULL on none such.
    140                         Value *lookup( AggregateDecl *generic, const std::list< TypeExpr* >& params ) {
    141                                 ConcreteType key(generic, params);
    142                                 // scan scopes from innermost out
    143                                 for ( typename std::vector< Scope >::const_reverse_iterator scope = scopes.rbegin(); scope != scopes.rend(); ++scope ) {
    144                                         // skip scope if no instantiations of this generic type
    145                                         typename Scope::const_iterator insts = scope->find( generic );
    146                                         if ( insts == scope->end() ) continue;
    147                                         // look through instantiations for matches to concrete type
    148                                         for ( typename std::vector< Instantiation >::const_iterator inst = insts->second.begin(); inst != insts->second.end(); ++inst ) {
    149                                                 if ( inst->key == key ) return inst->value;
     130                        void endScope() { instantiations.endScope(); }
     131
     132                        /// Gets the value for the (key, typeList) pair, returns NULL on none such.
     133                        Value *lookup( Key *key, const std::list< TypeExpr* >& params ) const {
     134                                TypeList typeList( params );
     135                               
     136                                // scan scopes for matches to the key
     137                                for ( typename InnerMap::const_iterator insts = instantiations.find( key ); insts != instantiations.end(); insts = instantiations.findNext( insts, key ) ) {
     138                                        for ( typename ValueList::const_reverse_iterator inst = insts->second.rbegin(); inst != insts->second.rend(); ++inst ) {
     139                                                if ( inst->first == typeList ) return inst->second;
    150140                                        }
    151141                                }
    152                                 // no matching instantiation found
     142                                // no matching instantiations found
    153143                                return 0;
    154144                        }
    155                 public:
    156 //                      StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)lookup( inst->get_baseStruct(), typeSubs ); }
    157 //                      UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)lookup( inst->get_baseUnion(), typeSubs ); }
    158 
    159 //              private:
    160                         /// Adds a value for a concrete type to the current scope
    161                         void insert( AggregateDecl *generic, const std::list< TypeExpr* > &params, Value *value ) {
    162                                 ConcreteType key(generic, params);
    163                                 scopes.back()[generic].push_back( Instantiation( key, value ) );
    164                         }
    165 //              public:
    166 //                      void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { insert( inst->get_baseStruct(), typeSubs, decl ); }
    167 //                      void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { insert( inst->get_baseUnion(), typeSubs, decl ); }
     145
     146                        /// Adds a value for a (key, typeList) pair to the current scope
     147                        void insert( Key *key, const std::list< TypeExpr* > &params, Value *value ) {
     148                                instantiations[ key ].push_back( Instantiation( TypeList( params ), value ) );
     149                        }
    168150                };
    169151
     
    197179                        virtual void doEndScope();
    198180                  private:
    199                         /// Makes a new temporary array holding the offsets of the fields of `type`, and returns a new variable expression referencing it
    200                         Expression *makeOffsetArray( StructInstType *type );
    201181                        /// Pass the extra type parameters from polymorphic generic arguments or return types into a function application
    202182                        void passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes );
     
    225205                        ObjectDecl *makeTemporary( Type *type );
    226206
    227                         std::map< std::string, DeclarationWithType *> assignOps;
    228                         ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps;
    229                         ScopedMap< std::string, DeclarationWithType* > adapters;
     207                        ScopedMap< std::string, DeclarationWithType *> assignOps;    ///< Currently known type variable assignment operators
     208                        ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps;  ///< Currently known assignment operators
     209                        ScopedMap< std::string, DeclarationWithType* > adapters;     ///< Set of adapter functions in the current scope
     210                       
    230211                        DeclarationWithType *retval;
    231212                        bool useRetval;
     
    233214                };
    234215
    235                 /// Moves polymorphic returns in function types to pointer-type parameters, adds type size and assertion parameters to parameter lists as well
     216                /// * Moves polymorphic returns in function types to pointer-type parameters
     217                /// * adds type size and assertion parameters to parameter lists
    236218                class Pass2 : public PolyMutator {
    237219                  public:
     
    244226                        virtual Type *mutate( PointerType *pointerType );
    245227                        virtual Type *mutate( FunctionType *funcType );
     228                       
    246229                  private:
    247230                        void addAdapters( FunctionType *functionType );
     
    253236                class GenericInstantiator : public DeclMutator {
    254237                        /// Map of (generic type, parameter list) pairs to concrete type instantiations
    255                         InstantiationMap< AggregateDecl > instantiations;
     238                        InstantiationMap< AggregateDecl, AggregateDecl > instantiations;
    256239                        /// Namer for concrete types
    257240                        UniqueName typeNamer;
     
    278261                };
    279262
    280                 /// Replaces member expressions for polymorphic types with calculated add-field-offset-and-dereference;
    281                 /// also fixes offsetof expressions.
    282                 class MemberExprFixer : public PolyMutator {
    283                   public:
     263                /// Replaces member and size/align/offsetof expressions on polymorphic generic types with calculated expressions.
     264                /// * Replaces member expressions for polymorphic types with calculated add-field-offset-and-dereference
     265                /// * Calculates polymorphic offsetof expressions from offset array
     266                /// * Inserts dynamic calculation of polymorphic type layouts where needed
     267                class PolyGenericCalculator : public PolyMutator {
     268                public:
    284269                        template< typename DeclClass >
    285270                        DeclClass *handleDecl( DeclClass *decl, Type *type );
     
    292277                        virtual Type *mutate( FunctionType *funcType );
    293278                        virtual Expression *mutate( MemberExpr *memberExpr );
     279                        virtual Expression *mutate( SizeofExpr *sizeofExpr );
     280                        virtual Expression *mutate( AlignofExpr *alignofExpr );
    294281                        virtual Expression *mutate( OffsetofExpr *offsetofExpr );
     282                        virtual Expression *mutate( OffsetPackExpr *offsetPackExpr );
     283
     284                        virtual void doBeginScope();
     285                        virtual void doEndScope();
     286
     287                private:
     288                        /// Makes a new variable in the current scope with the given name, type & optional initializer
     289                        ObjectDecl *makeVar( const std::string &name, Type *type, Initializer *init = 0 );
     290                        /// returns true if the type has a dynamic layout; such a layout will be stored in appropriately-named local variables when the function returns
     291                        bool findGeneric( Type *ty );
     292                        /// adds type parameters to the layout call; will generate the appropriate parameters if needed
     293                        void addOtypeParamsToLayoutCall( UntypedExpr *layoutCall, const std::list< Type* > &otypeParams );
     294
     295                        /// Enters a new scope for type-variables, adding the type variables from ty
     296                        void beginTypeScope( Type *ty );
     297                        /// Exits the type-variable scope
     298                        void endTypeScope();
     299                       
     300                        ScopedSet< std::string > knownLayouts;          ///< Set of generic type layouts known in the current scope, indexed by sizeofName
     301                        ScopedSet< std::string > knownOffsets;          ///< Set of non-generic types for which the offset array exists in the current scope, indexed by offsetofName
    295302                };
    296303
     
    342349                Pass2 pass2;
    343350                GenericInstantiator instantiator;
    344                 MemberExprFixer memberFixer;
     351                PolyGenericCalculator polyCalculator;
    345352                Pass3 pass3;
    346353               
     
    348355                mutateTranslationUnit/*All*/( translationUnit, pass1 );
    349356                mutateTranslationUnit/*All*/( translationUnit, pass2 );
    350 //              instantiateGeneric( translationUnit );
    351357                instantiator.mutateDeclarationList( translationUnit );
    352                 mutateTranslationUnit/*All*/( translationUnit, memberFixer );
     358                mutateTranslationUnit/*All*/( translationUnit, polyCalculator );
    353359                mutateTranslationUnit/*All*/( translationUnit, pass3 );
    354360        }
     
    384390                for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) {
    385391                        TypeInstType paramType( Type::Qualifiers(), (*param)->get_name(), *param );
    386                         layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( &paramType ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
    387                         layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( &paramType ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
     392                        std::string paramName = mangleType( &paramType );
     393                        layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( paramName ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
     394                        layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( paramName ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
    388395                }
    389396        }
    390397
    391398        /// Builds a layout function declaration
    392         FunctionDecl *buildLayoutFunctionDecl( const std::string &typeName, unsigned int functionNesting, FunctionType *layoutFnType ) {
     399        FunctionDecl *buildLayoutFunctionDecl( AggregateDecl *typeDecl, unsigned int functionNesting, FunctionType *layoutFnType ) {
    393400                // Routines at global scope marked "static" to prevent multiple definitions is separate translation units
    394401                // because each unit generates copies of the default routines for each aggregate.
    395402                FunctionDecl *layoutDecl = new FunctionDecl(
    396                         "__layoutof_" + typeName, functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false );
     403                        layoutofName( typeDecl ), functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false );
    397404                layoutDecl->fixUniqueId();
    398405                return layoutDecl;
     
    461468                PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType );
    462469               
    463                 ObjectDecl *sizeParam = new ObjectDecl( "__sizeof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
     470                ObjectDecl *sizeParam = new ObjectDecl( sizeofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
    464471                layoutFnType->get_parameters().push_back( sizeParam );
    465                 ObjectDecl *alignParam = new ObjectDecl( "__alignof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
     472                ObjectDecl *alignParam = new ObjectDecl( alignofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
    466473                layoutFnType->get_parameters().push_back( alignParam );
    467                 ObjectDecl *offsetParam = new ObjectDecl( "__offsetof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
     474                ObjectDecl *offsetParam = new ObjectDecl( offsetofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
    468475                layoutFnType->get_parameters().push_back( offsetParam );
    469476                addOtypeParams( layoutFnType, otypeParams );
    470477
    471478                // build function decl
    472                 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl->get_name(), functionNesting, layoutFnType );
     479                FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl, functionNesting, layoutFnType );
    473480
    474481                // calculate struct layout in function body
     
    522529                PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType );
    523530               
    524                 ObjectDecl *sizeParam = new ObjectDecl( "__sizeof_" + unionDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
     531                ObjectDecl *sizeParam = new ObjectDecl( sizeofName( unionDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
    525532                layoutFnType->get_parameters().push_back( sizeParam );
    526                 ObjectDecl *alignParam = new ObjectDecl( "__alignof_" + unionDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
     533                ObjectDecl *alignParam = new ObjectDecl( alignofName( unionDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
    527534                layoutFnType->get_parameters().push_back( alignParam );
    528535                addOtypeParams( layoutFnType, otypeParams );
    529536
    530537                // build function decl
    531                 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl->get_name(), functionNesting, layoutFnType );
     538                FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl, functionNesting, layoutFnType );
    532539
    533540                // calculate union layout in function body
     
    653660
    654661                DeclarationWithType *Pass1::mutate( FunctionDecl *functionDecl ) {
    655                         // if this is a polymorphic assignment function, put it in the map for this scope
     662                        // if this is a assignment function, put it in the map for this scope
    656663                        if ( Type *assignedType = isAssignment( functionDecl ) ) {
    657664                                if ( ! dynamic_cast< TypeInstType* >( assignedType ) ) {
     
    662669                        if ( functionDecl->get_statements() ) {         // empty routine body ?
    663670                                doBeginScope();
    664                                 TyVarMap oldtyVars = scopeTyVars;
    665                                 std::map< std::string, DeclarationWithType *> oldassignOps = assignOps;
     671                                scopeTyVars.beginScope();
     672                                assignOps.beginScope();
    666673                                DeclarationWithType *oldRetval = retval;
    667674                                bool oldUseRetval = useRetval;
     
    704711                                functionDecl->set_statements( functionDecl->get_statements()->acceptMutator( *this ) );
    705712
    706                                 scopeTyVars = oldtyVars;
    707                                 assignOps = oldassignOps;
    708                                 // std::cerr << "end FunctionDecl: ";
    709                                 // for ( TyVarMap::iterator i = scopeTyVars.begin(); i != scopeTyVars.end(); ++i ) {
    710                                 //      std::cerr << i->first << " ";
    711                                 // }
    712                                 // std::cerr << "\n";
     713                                scopeTyVars.endScope();
     714                                assignOps.endScope();
    713715                                retval = oldRetval;
    714716                                useRetval = oldUseRetval;
     
    743745                }
    744746
    745                 Expression *Pass1::makeOffsetArray( StructInstType *ty ) {
    746                         std::list< Declaration* > &baseMembers = ty->get_baseStruct()->get_members();
    747 
    748                         // make a new temporary array
    749                         Type *offsetType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    750                         std::stringstream lenGen;
    751                         lenGen << baseMembers.size();
    752                         ConstantExpr *lenExpr = new ConstantExpr( Constant( offsetType->clone(), lenGen.str() ) );
    753                         ObjectDecl *arrayTemp = makeTemporary( new ArrayType( Type::Qualifiers(), offsetType, lenExpr, false, false ) );
    754 
    755                         // build initializer list for temporary
    756                         std::list< Initializer* > inits;
    757                         for ( std::list< Declaration* >::const_iterator member = baseMembers.begin(); member != baseMembers.end(); ++member ) {
    758                                 DeclarationWithType *memberDecl;
    759                                 if ( DeclarationWithType *origMember = dynamic_cast< DeclarationWithType* >( *member ) ) {
    760                                         memberDecl = origMember->clone();
    761                                 } else {
    762                                         memberDecl = new ObjectDecl( (*member)->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, offsetType->clone(), 0 );
    763                                 }
    764                                 inits.push_back( new SingleInit( new OffsetofExpr( ty->clone(), memberDecl ) ) );
    765                         }
    766                         arrayTemp->set_init( new ListInit( inits ) );
    767 
    768                         // return variable pointing to temporary
    769                         return new VariableExpr( arrayTemp );
    770                 }
    771 
    772747                void Pass1::passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes ) {
    773                         Type *polyBase = hasPolyBase( parmType, exprTyVars );
    774                         if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) {
    775                                 std::string sizeName = sizeofName( polyBase );
    776                                 if ( seenTypes.count( sizeName ) ) return;
     748                        Type *polyType = isPolyType( parmType, exprTyVars );
     749                        if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
     750                                std::string typeName = mangleType( polyType );
     751                                if ( seenTypes.count( typeName ) ) return;
    777752
    778753                                arg = appExpr->get_args().insert( arg, new SizeofExpr( argBaseType->clone() ) );
     
    780755                                arg = appExpr->get_args().insert( arg, new AlignofExpr( argBaseType->clone() ) );
    781756                                arg++;
    782                                 if ( dynamic_cast< StructInstType* >( polyBase ) ) {
     757                                if ( dynamic_cast< StructInstType* >( polyType ) ) {
    783758                                        if ( StructInstType *argBaseStructType = dynamic_cast< StructInstType* >( argBaseType ) ) {
    784                                                 arg = appExpr->get_args().insert( arg, makeOffsetArray( argBaseStructType ) );
    785                                                 arg++;
     759                                                // zero-length arrays are forbidden by C, so don't pass offset for empty struct
     760                                                if ( ! argBaseStructType->get_baseStruct()->get_members().empty() ) {
     761                                                        arg = appExpr->get_args().insert( arg, new OffsetPackExpr( argBaseStructType->clone() ) );
     762                                                        arg++;
     763                                                }
    786764                                        } else {
    787765                                                throw SemanticError( "Cannot pass non-struct type for generic struct" );
     
    789767                                }
    790768
    791                                 seenTypes.insert( sizeName );
     769                                seenTypes.insert( typeName );
    792770                        }
    793771                }
     
    931909                                        return;
    932910                                } else if ( arg->get_results().front()->get_isLvalue() ) {
    933                                         // VariableExpr and MemberExpr are lvalues
    934                                         arg = new AddressExpr( arg );
     911                                        // VariableExpr and MemberExpr are lvalues; need to check this isn't coming from the second arg of a comma expression though (not an lvalue)
     912                                        if ( CommaExpr *commaArg = dynamic_cast< CommaExpr* >( arg ) ) {
     913                                                commaArg->set_arg2( new AddressExpr( commaArg->get_arg2() ) );
     914                                        } else {
     915                                                arg = new AddressExpr( arg );
     916                                        }
    935917                                } else {
    936918                                        // use type computed in unification to declare boxed variables
     
    10271009                        } // for
    10281010                }
    1029 
    1030 
    10311011
    10321012                FunctionDecl *Pass1::makeAdapter( FunctionType *adaptee, FunctionType *realType, const std::string &mangleName, const TyVarMap &tyVars ) {
     
    11451125                                addAssign->get_args().push_back( appExpr->get_args().front() );
    11461126                        } // if
    1147                         addAssign->get_args().push_back( new NameExpr( sizeofName( polyType ) ) );
     1127                        addAssign->get_args().push_back( new NameExpr( sizeofName( mangleType( polyType ) ) ) );
    11481128                        addAssign->get_results().front() = appExpr->get_results().front()->clone();
    11491129                        if ( appExpr->get_env() ) {
     
    11721152                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    11731153                                                        multiply->get_args().push_back( appExpr->get_args().back() );
    1174                                                         multiply->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) );
     1154                                                        multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) );
    11751155                                                        ret->get_args().push_back( appExpr->get_args().front() );
    11761156                                                        ret->get_args().push_back( multiply );
     
    11781158                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    11791159                                                        multiply->get_args().push_back( appExpr->get_args().front() );
    1180                                                         multiply->get_args().push_back( new NameExpr( sizeofName( baseType2 ) ) );
     1160                                                        multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) );
    11811161                                                        ret->get_args().push_back( multiply );
    11821162                                                        ret->get_args().push_back( appExpr->get_args().back() );
     
    12411221                                                        UntypedExpr *divide = new UntypedExpr( new NameExpr( "?/?" ) );
    12421222                                                        divide->get_args().push_back( appExpr );
    1243                                                         divide->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) );
     1223                                                        divide->get_args().push_back( new SizeofExpr( baseType1->clone() ) );
    12441224                                                        divide->get_results().push_front( appExpr->get_results().front()->clone() );
    12451225                                                        if ( appExpr->get_env() ) {
     
    12511231                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    12521232                                                        multiply->get_args().push_back( appExpr->get_args().back() );
    1253                                                         multiply->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) );
     1233                                                        multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) );
    12541234                                                        appExpr->get_args().back() = multiply;
    12551235                                                } else if ( baseType2 ) {
    12561236                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    12571237                                                        multiply->get_args().push_back( appExpr->get_args().front() );
    1258                                                         multiply->get_args().push_back( new NameExpr( sizeofName( baseType2 ) ) );
     1238                                                        multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) );
    12591239                                                        appExpr->get_args().front() = multiply;
    12601240                                                } // if
     
    12661246                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    12671247                                                        multiply->get_args().push_back( appExpr->get_args().back() );
    1268                                                         multiply->get_args().push_back( new NameExpr( sizeofName( baseType ) ) );
     1248                                                        multiply->get_args().push_back( new SizeofExpr( baseType->clone() ) );
    12691249                                                        appExpr->get_args().back() = multiply;
    12701250                                                } // if
     
    13031283                        std::list< Expression *>::iterator paramBegin = appExpr->get_args().begin();
    13041284
    1305                         TyVarMap exprTyVars;
     1285                        TyVarMap exprTyVars( (TypeDecl::Kind)-1 );
    13061286                        makeTyVarMap( function, exprTyVars );
    13071287                        ReferenceToType *polyRetType = isPolyRet( function );
     
    13261306
    13271307                        boxParams( appExpr, function, arg, exprTyVars );
    1328 
    13291308                        passAdapters( appExpr, function, exprTyVars );
    13301309
     
    14061385                                if ( TypeInstType *typeInst = dynamic_cast< TypeInstType *>( retval->get_type() ) ) {
    14071386                                        // find assignment operator for type variable
    1408                                         std::map< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() );
     1387                                        ScopedMap< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() );
    14091388                                        if ( assignIter == assignOps.end() ) {
    14101389                                                throw SemanticError( "Attempt to return dtype or ftype object in ", returnStmt->get_expr() );
     
    14281407                                        std::list< TypeDecl* >::const_iterator forallIt = forallParams.begin();
    14291408                                        for ( ; tyIt != tyParams.end() && forallIt != forallParams.end(); ++tyIt, ++forallIt ) {
    1430                                                 if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue; // skip types with no assign op (ftype/dtype)
    1431 
    1432                                                 std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions();
    1433                                                 assert( ! asserts.empty() && "Type param needs assignment operator assertion" );
    1434                                                 DeclarationWithType *actualDecl = asserts.front();
    1435                                                 TypeInstType *actualType = isTypeInstAssignment( actualDecl );
    1436                                                 assert( actualType && "First assertion of type with assertions should be assignment operator" );
     1409                                                // Add appropriate mapping to assignment expression environment
    14371410                                                TypeExpr *formalTypeExpr = dynamic_cast< TypeExpr* >( *tyIt );
    14381411                                                assert( formalTypeExpr && "type parameters must be type expressions" );
    14391412                                                Type *formalType = formalTypeExpr->get_type();
    1440                                                 assignExpr->get_env()->add( actualType->get_name(), formalType );
    1441                                                
     1413                                                assignExpr->get_env()->add( (*forallIt)->get_name(), formalType );
     1414
     1415                                                // skip types with no assign op (ftype/dtype)
     1416                                                if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue;
     1417
     1418                                                // find assignment operator for formal type
    14421419                                                DeclarationWithType *assertAssign = 0;
    14431420                                                if ( TypeInstType *formalTypeInstType = dynamic_cast< TypeInstType* >( formalType ) ) {
    1444                                                         std::map< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() );
     1421                                                        ScopedMap< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() );
    14451422                                                        if ( assertAssignIt == assignOps.end() ) {
    14461423                                                                throw SemanticError( "No assignment operation found for ", formalTypeInstType );
     
    14531430                                                        }
    14541431                                                }
    1455                                                
    1456 
     1432
     1433                                                // add inferred parameter for field assignment operator to assignment expression
     1434                                                std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions();
     1435                                                assert( ! asserts.empty() && "Type param needs assignment operator assertion" );
     1436                                                DeclarationWithType *actualDecl = asserts.front();
    14571437                                                assignExpr->get_inferParams()[ actualDecl->get_uniqueId() ]
    14581438                                                        = ParamEntry( assertAssign->get_uniqueId(), assertAssign->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertAssign ) );
     
    14801460
    14811461                Type * Pass1::mutate( PointerType *pointerType ) {
    1482                         TyVarMap oldtyVars = scopeTyVars;
     1462                        scopeTyVars.beginScope();
    14831463                        makeTyVarMap( pointerType, scopeTyVars );
    14841464
    14851465                        Type *ret = Mutator::mutate( pointerType );
    14861466
    1487                         scopeTyVars = oldtyVars;
     1467                        scopeTyVars.endScope();
    14881468                        return ret;
    14891469                }
    14901470
    14911471                Type * Pass1::mutate( FunctionType *functionType ) {
    1492                         TyVarMap oldtyVars = scopeTyVars;
     1472                        scopeTyVars.beginScope();
    14931473                        makeTyVarMap( functionType, scopeTyVars );
    14941474
    14951475                        Type *ret = Mutator::mutate( functionType );
    14961476
    1497                         scopeTyVars = oldtyVars;
     1477                        scopeTyVars.endScope();
    14981478                        return ret;
    14991479                }
     
    15601540
    15611541                Type * Pass2::mutate( PointerType *pointerType ) {
    1562                         TyVarMap oldtyVars = scopeTyVars;
     1542                        scopeTyVars.beginScope();
    15631543                        makeTyVarMap( pointerType, scopeTyVars );
    15641544
    15651545                        Type *ret = Mutator::mutate( pointerType );
    15661546
    1567                         scopeTyVars = oldtyVars;
     1547                        scopeTyVars.endScope();
    15681548                        return ret;
    15691549                }
    15701550
    15711551                Type *Pass2::mutate( FunctionType *funcType ) {
    1572                         TyVarMap oldtyVars = scopeTyVars;
     1552                        scopeTyVars.beginScope();
    15731553                        makeTyVarMap( funcType, scopeTyVars );
    15741554
     
    15871567                        ObjectDecl newPtr( "", DeclarationNode::NoStorageClass, LinkageSpec::C, 0,
    15881568                                           new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ), 0 );
    1589 //   ObjectDecl *newFunPtr = new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ), 0 );
    15901569                        for ( std::list< TypeDecl *>::const_iterator tyParm = funcType->get_forall().begin(); tyParm != funcType->get_forall().end(); ++tyParm ) {
    15911570                                ObjectDecl *sizeParm, *alignParm;
     
    15931572                                if ( (*tyParm)->get_kind() == TypeDecl::Any ) {
    15941573                                        TypeInstType parmType( Type::Qualifiers(), (*tyParm)->get_name(), *tyParm );
     1574                                        std::string parmName = mangleType( &parmType );
    15951575
    15961576                                        sizeParm = newObj.clone();
    1597                                         sizeParm->set_name( sizeofName( &parmType ) );
     1577                                        sizeParm->set_name( sizeofName( parmName ) );
    15981578                                        last = funcType->get_parameters().insert( last, sizeParm );
    15991579                                        ++last;
    16001580
    16011581                                        alignParm = newObj.clone();
    1602                                         alignParm->set_name( alignofName( &parmType ) );
     1582                                        alignParm->set_name( alignofName( parmName ) );
    16031583                                        last = funcType->get_parameters().insert( last, alignParm );
    16041584                                        ++last;
     
    16151595                        std::set< std::string > seenTypes; // sizeofName for generic types we've seen
    16161596                        for ( std::list< DeclarationWithType* >::const_iterator fnParm = last; fnParm != funcType->get_parameters().end(); ++fnParm ) {
    1617                                 Type *polyBase = hasPolyBase( (*fnParm)->get_type(), scopeTyVars );
    1618                                 if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) {
    1619                                         std::string sizeName = sizeofName( polyBase );
    1620                                         if ( seenTypes.count( sizeName ) ) continue;
     1597                                Type *polyType = isPolyType( (*fnParm)->get_type(), scopeTyVars );
     1598                                if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
     1599                                        std::string typeName = mangleType( polyType );
     1600                                        if ( seenTypes.count( typeName ) ) continue;
    16211601
    16221602                                        ObjectDecl *sizeParm, *alignParm, *offsetParm;
    16231603                                        sizeParm = newObj.clone();
    1624                                         sizeParm->set_name( sizeName );
     1604                                        sizeParm->set_name( sizeofName( typeName ) );
    16251605                                        last = funcType->get_parameters().insert( last, sizeParm );
    16261606                                        ++last;
    16271607
    16281608                                        alignParm = newObj.clone();
    1629                                         alignParm->set_name( alignofName( polyBase ) );
     1609                                        alignParm->set_name( alignofName( typeName ) );
    16301610                                        last = funcType->get_parameters().insert( last, alignParm );
    16311611                                        ++last;
    16321612
    1633                                         if ( dynamic_cast< StructInstType* >( polyBase ) ) {
    1634                                                 offsetParm = newPtr.clone();
    1635                                                 offsetParm->set_name( offsetofName( polyBase ) );
    1636                                                 last = funcType->get_parameters().insert( last, offsetParm );
    1637                                                 ++last;
     1613                                        if ( StructInstType *polyBaseStruct = dynamic_cast< StructInstType* >( polyType ) ) {
     1614                                                // NOTE zero-length arrays are illegal in C, so empty structs have no offset array
     1615                                                if ( ! polyBaseStruct->get_baseStruct()->get_members().empty() ) {
     1616                                                        offsetParm = newPtr.clone();
     1617                                                        offsetParm->set_name( offsetofName( typeName ) );
     1618                                                        last = funcType->get_parameters().insert( last, offsetParm );
     1619                                                        ++last;
     1620                                                }
    16381621                                        }
    16391622
    1640                                         seenTypes.insert( sizeName );
     1623                                        seenTypes.insert( typeName );
    16411624                                }
    16421625                        }
     
    16481631                        mutateAll( funcType->get_parameters(), *this );
    16491632
    1650                         scopeTyVars = oldtyVars;
     1633                        scopeTyVars.endScope();
    16511634                        return funcType;
    16521635                }
     
    18411824                }
    18421825
    1843 ////////////////////////////////////////// MemberExprFixer ////////////////////////////////////////////////////
     1826////////////////////////////////////////// PolyGenericCalculator ////////////////////////////////////////////////////
     1827
     1828                void PolyGenericCalculator::beginTypeScope( Type *ty ) {
     1829                        scopeTyVars.beginScope();
     1830                        makeTyVarMap( ty, scopeTyVars );
     1831                }
     1832
     1833                void PolyGenericCalculator::endTypeScope() {
     1834                        scopeTyVars.endScope();
     1835                }
    18441836
    18451837                template< typename DeclClass >
    1846                 DeclClass * MemberExprFixer::handleDecl( DeclClass *decl, Type *type ) {
    1847                         TyVarMap oldtyVars = scopeTyVars;
    1848                         makeTyVarMap( type, scopeTyVars );
     1838                DeclClass * PolyGenericCalculator::handleDecl( DeclClass *decl, Type *type ) {
     1839                        beginTypeScope( type );
     1840                        knownLayouts.beginScope();
     1841                        knownOffsets.beginScope();
    18491842
    18501843                        DeclClass *ret = static_cast< DeclClass *>( Mutator::mutate( decl ) );
    18511844
    1852                         scopeTyVars = oldtyVars;
     1845                        knownOffsets.endScope();
     1846                        knownLayouts.endScope();
     1847                        endTypeScope();
    18531848                        return ret;
    18541849                }
    18551850
    1856                 ObjectDecl * MemberExprFixer::mutate( ObjectDecl *objectDecl ) {
     1851                ObjectDecl * PolyGenericCalculator::mutate( ObjectDecl *objectDecl ) {
    18571852                        return handleDecl( objectDecl, objectDecl->get_type() );
    18581853                }
    18591854
    1860                 DeclarationWithType * MemberExprFixer::mutate( FunctionDecl *functionDecl ) {
     1855                DeclarationWithType * PolyGenericCalculator::mutate( FunctionDecl *functionDecl ) {
    18611856                        return handleDecl( functionDecl, functionDecl->get_functionType() );
    18621857                }
    18631858
    1864                 TypedefDecl * MemberExprFixer::mutate( TypedefDecl *typedefDecl ) {
     1859                TypedefDecl * PolyGenericCalculator::mutate( TypedefDecl *typedefDecl ) {
    18651860                        return handleDecl( typedefDecl, typedefDecl->get_base() );
    18661861                }
    18671862
    1868                 TypeDecl * MemberExprFixer::mutate( TypeDecl *typeDecl ) {
     1863                TypeDecl * PolyGenericCalculator::mutate( TypeDecl *typeDecl ) {
    18691864                        scopeTyVars[ typeDecl->get_name() ] = typeDecl->get_kind();
    18701865                        return Mutator::mutate( typeDecl );
    18711866                }
    18721867
    1873                 Type * MemberExprFixer::mutate( PointerType *pointerType ) {
    1874                         TyVarMap oldtyVars = scopeTyVars;
    1875                         makeTyVarMap( pointerType, scopeTyVars );
     1868                Type * PolyGenericCalculator::mutate( PointerType *pointerType ) {
     1869                        beginTypeScope( pointerType );
    18761870
    18771871                        Type *ret = Mutator::mutate( pointerType );
    18781872
    1879                         scopeTyVars = oldtyVars;
     1873                        endTypeScope();
    18801874                        return ret;
    18811875                }
    18821876
    1883                 Type * MemberExprFixer::mutate( FunctionType *functionType ) {
    1884                         TyVarMap oldtyVars = scopeTyVars;
    1885                         makeTyVarMap( functionType, scopeTyVars );
    1886 
    1887                         Type *ret = Mutator::mutate( functionType );
    1888 
    1889                         scopeTyVars = oldtyVars;
     1877                Type * PolyGenericCalculator::mutate( FunctionType *funcType ) {
     1878                        beginTypeScope( funcType );
     1879
     1880                        // make sure that any type information passed into the function is accounted for
     1881                        for ( std::list< DeclarationWithType* >::const_iterator fnParm = funcType->get_parameters().begin(); fnParm != funcType->get_parameters().end(); ++fnParm ) {
     1882                                // condition here duplicates that in Pass2::mutate( FunctionType* )
     1883                                Type *polyType = isPolyType( (*fnParm)->get_type(), scopeTyVars );
     1884                                if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
     1885                                        knownLayouts.insert( mangleType( polyType ) );
     1886                                }
     1887                        }
     1888                       
     1889                        Type *ret = Mutator::mutate( funcType );
     1890
     1891                        endTypeScope();
    18901892                        return ret;
    18911893                }
    18921894
    1893                 Statement *MemberExprFixer::mutate( DeclStmt *declStmt ) {
     1895                Statement *PolyGenericCalculator::mutate( DeclStmt *declStmt ) {
    18941896                        if ( ObjectDecl *objectDecl = dynamic_cast< ObjectDecl *>( declStmt->get_decl() ) ) {
    1895                                 if ( isPolyType( objectDecl->get_type(), scopeTyVars ) ) {
     1897                                if ( findGeneric( objectDecl->get_type() ) ) {
    18961898                                        // change initialization of a polymorphic value object
    18971899                                        // to allocate storage with alloca
    18981900                                        Type *declType = objectDecl->get_type();
    18991901                                        UntypedExpr *alloc = new UntypedExpr( new NameExpr( "__builtin_alloca" ) );
    1900                                         alloc->get_args().push_back( new NameExpr( sizeofName( declType ) ) );
     1902                                        alloc->get_args().push_back( new NameExpr( sizeofName( mangleType( declType ) ) ) );
    19011903
    19021904                                        delete objectDecl->get_init();
     
    19301932                        ConstantExpr *fieldIndex = new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), offset_namer.str() ) );
    19311933                        UntypedExpr *fieldOffset = new UntypedExpr( new NameExpr( "?[?]" ) );
    1932                         fieldOffset->get_args().push_back( new NameExpr( offsetofName( objectType ) ) );
     1934                        fieldOffset->get_args().push_back( new NameExpr( offsetofName( mangleType( objectType ) ) ) );
    19331935                        fieldOffset->get_args().push_back( fieldIndex );
    19341936                        return fieldOffset;
     
    19451947                }
    19461948               
    1947                 Expression *MemberExprFixer::mutate( MemberExpr *memberExpr ) {
     1949                Expression *PolyGenericCalculator::mutate( MemberExpr *memberExpr ) {
    19481950                        // mutate, exiting early if no longer MemberExpr
    19491951                        Expression *expr = Mutator::mutate( memberExpr );
     
    19621964                        Type *objectType = hasPolyBase( objectDecl->get_type(), scopeTyVars, &tyDepth );
    19631965                        if ( ! objectType ) return memberExpr;
     1966                        findGeneric( objectType ); // ensure layout for this type is available
    19641967
    19651968                        Expression *newMemberExpr = 0;
     
    19931996                }
    19941997
    1995                 Expression *MemberExprFixer::mutate( OffsetofExpr *offsetofExpr ) {
     1998                ObjectDecl *PolyGenericCalculator::makeVar( const std::string &name, Type *type, Initializer *init ) {
     1999                        ObjectDecl *newObj = new ObjectDecl( name, DeclarationNode::NoStorageClass, LinkageSpec::C, 0, type, init );
     2000                        stmtsToAdd.push_back( new DeclStmt( noLabels, newObj ) );
     2001                        return newObj;
     2002                }
     2003
     2004                void PolyGenericCalculator::addOtypeParamsToLayoutCall( UntypedExpr *layoutCall, const std::list< Type* > &otypeParams ) {
     2005                        for ( std::list< Type* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) {
     2006                                if ( findGeneric( *param ) ) {
     2007                                        // push size/align vars for a generic parameter back
     2008                                        std::string paramName = mangleType( *param );
     2009                                        layoutCall->get_args().push_back( new NameExpr( sizeofName( paramName ) ) );
     2010                                        layoutCall->get_args().push_back( new NameExpr( alignofName( paramName ) ) );
     2011                                } else {
     2012                                        layoutCall->get_args().push_back( new SizeofExpr( (*param)->clone() ) );
     2013                                        layoutCall->get_args().push_back( new AlignofExpr( (*param)->clone() ) );
     2014                                }
     2015                        }
     2016                }
     2017
     2018                /// returns true if any of the otype parameters have a dynamic layout and puts all otype parameters in the output list
     2019                bool findGenericParams( std::list< TypeDecl* > &baseParams, std::list< Expression* > &typeParams, std::list< Type* > &out ) {
     2020                        bool hasDynamicLayout = false;
     2021
     2022                        std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin();
     2023                        std::list< Expression* >::const_iterator typeParam = typeParams.begin();
     2024                        for ( ; baseParam != baseParams.end() && typeParam != typeParams.end(); ++baseParam, ++typeParam ) {
     2025                                // skip non-otype parameters
     2026                                if ( (*baseParam)->get_kind() != TypeDecl::Any ) continue;
     2027                                TypeExpr *typeExpr = dynamic_cast< TypeExpr* >( *typeParam );
     2028                                assert( typeExpr && "all otype parameters should be type expressions" );
     2029
     2030                                Type *type = typeExpr->get_type();
     2031                                out.push_back( type );
     2032                                if ( isPolyType( type ) ) hasDynamicLayout = true;
     2033                        }
     2034                        assert( baseParam == baseParams.end() && typeParam == typeParams.end() );
     2035
     2036                        return hasDynamicLayout;
     2037                }
     2038
     2039                bool PolyGenericCalculator::findGeneric( Type *ty ) {
     2040                        if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) {
     2041                                // duplicate logic from isPolyType()
     2042                                if ( env ) {
     2043                                        if ( Type *newType = env->lookup( typeInst->get_name() ) ) {
     2044                                                return findGeneric( newType );
     2045                                        } // if
     2046                                } // if
     2047                                if ( scopeTyVars.find( typeInst->get_name() ) != scopeTyVars.end() ) {
     2048                                        // NOTE assumes here that getting put in the scopeTyVars included having the layout variables set
     2049                                        return true;
     2050                                }
     2051                                return false;
     2052                        } else if ( StructInstType *structTy = dynamic_cast< StructInstType* >( ty ) ) {
     2053                                // check if this type already has a layout generated for it
     2054                                std::string typeName = mangleType( ty );
     2055                                if ( knownLayouts.find( typeName ) != knownLayouts.end() ) return true;
     2056
     2057                                // check if any of the type parameters have dynamic layout; if none do, this type is (or will be) monomorphized
     2058                                std::list< Type* > otypeParams;
     2059                                if ( ! findGenericParams( *structTy->get_baseParameters(), structTy->get_parameters(), otypeParams ) ) return false;
     2060
     2061                                // insert local variables for layout and generate call to layout function
     2062                                knownLayouts.insert( typeName );  // done early so as not to interfere with the later addition of parameters to the layout call
     2063                                Type *layoutType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
     2064
     2065                                int n_members = structTy->get_baseStruct()->get_members().size();
     2066                                if ( n_members == 0 ) {
     2067                                        // all empty structs have the same layout - size 1, align 1
     2068                                        makeVar( sizeofName( typeName ), layoutType, new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) );
     2069                                        makeVar( alignofName( typeName ), layoutType->clone(), new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) );
     2070                                        // NOTE zero-length arrays are forbidden in C, so empty structs have no offsetof array
     2071                                } else {
     2072                                        ObjectDecl *sizeVar = makeVar( sizeofName( typeName ), layoutType );
     2073                                        ObjectDecl *alignVar = makeVar( alignofName( typeName ), layoutType->clone() );
     2074                                        ObjectDecl *offsetVar = makeVar( offsetofName( typeName ), new ArrayType( Type::Qualifiers(), layoutType->clone(), new ConstantExpr( Constant::from( n_members ) ), false, false ) );
     2075
     2076                                        // generate call to layout function
     2077                                        UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( layoutofName( structTy->get_baseStruct() ) ) );
     2078                                        layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( sizeVar ) ) );
     2079                                        layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( alignVar ) ) );
     2080                                        layoutCall->get_args().push_back( new VariableExpr( offsetVar ) );
     2081                                        addOtypeParamsToLayoutCall( layoutCall, otypeParams );
     2082
     2083                                        stmtsToAdd.push_back( new ExprStmt( noLabels, layoutCall ) );
     2084                                }
     2085
     2086                                return true;
     2087                        } else if ( UnionInstType *unionTy = dynamic_cast< UnionInstType* >( ty ) ) {
     2088                                // check if this type already has a layout generated for it
     2089                                std::string typeName = mangleType( ty );
     2090                                if ( knownLayouts.find( typeName ) != knownLayouts.end() ) return true;
     2091
     2092                                // check if any of the type parameters have dynamic layout; if none do, this type is (or will be) monomorphized
     2093                                std::list< Type* > otypeParams;
     2094                                if ( ! findGenericParams( *unionTy->get_baseParameters(), unionTy->get_parameters(), otypeParams ) ) return false;
     2095
     2096                                // insert local variables for layout and generate call to layout function
     2097                                knownLayouts.insert( typeName );  // done early so as not to interfere with the later addition of parameters to the layout call
     2098                                Type *layoutType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
     2099
     2100                                ObjectDecl *sizeVar = makeVar( sizeofName( typeName ), layoutType );
     2101                                ObjectDecl *alignVar = makeVar( alignofName( typeName ), layoutType->clone() );
     2102
     2103                                // generate call to layout function
     2104                                UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( layoutofName( unionTy->get_baseUnion() ) ) );
     2105                                layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( sizeVar ) ) );
     2106                                layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( alignVar ) ) );
     2107                                addOtypeParamsToLayoutCall( layoutCall, otypeParams );
     2108
     2109                                stmtsToAdd.push_back( new ExprStmt( noLabels, layoutCall ) );
     2110
     2111                                return true;
     2112                        }
     2113
     2114                        return false;
     2115                }
     2116
     2117                Expression *PolyGenericCalculator::mutate( SizeofExpr *sizeofExpr ) {
     2118                        Type *ty = sizeofExpr->get_type();
     2119                        if ( findGeneric( ty ) ) {
     2120                                Expression *ret = new NameExpr( sizeofName( mangleType( ty ) ) );
     2121                                delete sizeofExpr;
     2122                                return ret;
     2123                        }
     2124                        return sizeofExpr;
     2125                }
     2126
     2127                Expression *PolyGenericCalculator::mutate( AlignofExpr *alignofExpr ) {
     2128                        Type *ty = alignofExpr->get_type();
     2129                        if ( findGeneric( ty ) ) {
     2130                                Expression *ret = new NameExpr( alignofName( mangleType( ty ) ) );
     2131                                delete alignofExpr;
     2132                                return ret;
     2133                        }
     2134                        return alignofExpr;
     2135                }
     2136
     2137                Expression *PolyGenericCalculator::mutate( OffsetofExpr *offsetofExpr ) {
    19962138                        // mutate, exiting early if no longer OffsetofExpr
    19972139                        Expression *expr = Mutator::mutate( offsetofExpr );
     
    20002142
    20012143                        // only mutate expressions for polymorphic structs/unions
    2002                         Type *ty = isPolyType( offsetofExpr->get_type(), scopeTyVars );
    2003                         if ( ! ty ) return offsetofExpr;
    2004 
     2144                        Type *ty = offsetofExpr->get_type();
     2145                        if ( ! findGeneric( ty ) ) return offsetofExpr;
     2146                       
    20052147                        if ( StructInstType *structType = dynamic_cast< StructInstType* >( ty ) ) {
    20062148                                // replace offsetof expression by index into offset array
     
    20182160                }
    20192161
     2162                Expression *PolyGenericCalculator::mutate( OffsetPackExpr *offsetPackExpr ) {
     2163                        StructInstType *ty = offsetPackExpr->get_type();
     2164
     2165                        Expression *ret = 0;
     2166                        if ( findGeneric( ty ) ) {
     2167                                // pull offset back from generated type information
     2168                                ret = new NameExpr( offsetofName( mangleType( ty ) ) );
     2169                        } else {
     2170                                std::string offsetName = offsetofName( mangleType( ty ) );
     2171                                if ( knownOffsets.find( offsetName ) != knownOffsets.end() ) {
     2172                                        // use the already-generated offsets for this type
     2173                                        ret = new NameExpr( offsetName );
     2174                                } else {
     2175                                        knownOffsets.insert( offsetName );
     2176
     2177                                        std::list< Declaration* > &baseMembers = ty->get_baseStruct()->get_members();
     2178                                        Type *offsetType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
     2179
     2180                                        // build initializer list for offset array
     2181                                        std::list< Initializer* > inits;
     2182                                        for ( std::list< Declaration* >::const_iterator member = baseMembers.begin(); member != baseMembers.end(); ++member ) {
     2183                                                DeclarationWithType *memberDecl;
     2184                                                if ( DeclarationWithType *origMember = dynamic_cast< DeclarationWithType* >( *member ) ) {
     2185                                                        memberDecl = origMember->clone();
     2186                                                } else {
     2187                                                        memberDecl = new ObjectDecl( (*member)->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, offsetType->clone(), 0 );
     2188                                                }
     2189                                                inits.push_back( new SingleInit( new OffsetofExpr( ty->clone(), memberDecl ) ) );
     2190                                        }
     2191
     2192                                        // build the offset array and replace the pack with a reference to it
     2193                                        ObjectDecl *offsetArray = makeVar( offsetName, new ArrayType( Type::Qualifiers(), offsetType, new ConstantExpr( Constant::from( baseMembers.size() ) ), false, false ),
     2194                                                        new ListInit( inits ) );
     2195                                        ret = new VariableExpr( offsetArray );
     2196                                }
     2197                        }
     2198
     2199                        delete offsetPackExpr;
     2200                        return ret;
     2201                }
     2202
     2203                void PolyGenericCalculator::doBeginScope() {
     2204                        knownLayouts.beginScope();
     2205                        knownOffsets.beginScope();
     2206                }
     2207
     2208                void PolyGenericCalculator::doEndScope() {
     2209                        knownLayouts.endScope();
     2210                        knownOffsets.endScope();
     2211                }
     2212
    20202213////////////////////////////////////////// Pass3 ////////////////////////////////////////////////////
    20212214
    20222215                template< typename DeclClass >
    20232216                DeclClass * Pass3::handleDecl( DeclClass *decl, Type *type ) {
    2024                         TyVarMap oldtyVars = scopeTyVars;
     2217                        scopeTyVars.beginScope();
    20252218                        makeTyVarMap( type, scopeTyVars );
    20262219
     
    20282221                        ScrubTyVars::scrub( decl, scopeTyVars );
    20292222
    2030                         scopeTyVars = oldtyVars;
     2223                        scopeTyVars.endScope();
    20312224                        return ret;
    20322225                }
     
    20582251
    20592252                Type * Pass3::mutate( PointerType *pointerType ) {
    2060                         TyVarMap oldtyVars = scopeTyVars;
     2253                        scopeTyVars.beginScope();
    20612254                        makeTyVarMap( pointerType, scopeTyVars );
    20622255
    20632256                        Type *ret = Mutator::mutate( pointerType );
    20642257
    2065                         scopeTyVars = oldtyVars;
     2258                        scopeTyVars.endScope();
    20662259                        return ret;
    20672260                }
    20682261
    20692262                Type * Pass3::mutate( FunctionType *functionType ) {
    2070                         TyVarMap oldtyVars = scopeTyVars;
     2263                        scopeTyVars.beginScope();
    20712264                        makeTyVarMap( functionType, scopeTyVars );
    20722265
    20732266                        Type *ret = Mutator::mutate( functionType );
    20742267
    2075                         scopeTyVars = oldtyVars;
     2268                        scopeTyVars.endScope();
    20762269                        return ret;
    20772270                }
  • src/GenPoly/FindFunction.cc

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

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

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

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

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

    r1f6e009 r1048b31  
    1717#define _SCOPEDMAP_H
    1818
     19#include <cassert>
    1920#include <iterator>
    2021#include <map>
     
    5051                        typedef typename scope_list::size_type size_type;
    5152
     53                        /// Checks if this iterator points to a valid item
     54                        bool is_valid() const {
     55                                return it != (*scopes)[i].end();
     56                        }
     57
     58                        /// Increments on invalid
     59                        iterator& next_valid() {
     60                                if ( ! is_valid() ) { ++(*this); }
     61                                return *this;
     62                        }
     63
     64                        /// Decrements on invalid
     65                        iterator& prev_valid() {
     66                                if ( ! is_valid() ) { --(*this); }
     67                                return *this;
     68                        }
     69
    5270                        iterator(scope_list const &_scopes, const wrapped_iterator &_it, size_type _i)
    5371                                : scopes(&_scopes), it(_it), i(_i) {}
     
    6785                                        --i;
    6886                                        it = (*scopes)[i].begin();
    69                                         return *this;
    70                                 }
    71                                 ++it;
    72                                 return *this;
     87                                } else {
     88                                        ++it;
     89                                }
     90                                return next_valid();
    7391                        }
    7492                        iterator& operator++ (int) { iterator tmp = *this; ++(*this); return tmp; }
     
    8199                                }
    82100                                --it;
    83                                 return *this;
     101                                return prev_valid();
    84102                        }
    85103                        iterator& operator-- (int) { iterator tmp = *this; --(*this); return tmp; }
     
    104122                        typedef typename scope_list::size_type size_type;
    105123
     124                        /// Checks if this iterator points to a valid item
     125                        bool is_valid() const {
     126                                return it != (*scopes)[i].end();
     127                        }
     128
     129                        /// Increments on invalid
     130                        const_iterator& next_valid() {
     131                                if ( ! is_valid() ) { ++(*this); }
     132                                return *this;
     133                        }
     134
     135                        /// Decrements on invalid
     136                        const_iterator& prev_valid() {
     137                                if ( ! is_valid() ) { --(*this); }
     138                                return *this;
     139                        }
     140
    106141                        const_iterator(scope_list const &_scopes, const wrapped_const_iterator &_it, size_type _i)
    107142                                : scopes(&_scopes), it(_it), i(_i) {}
     
    126161                                        --i;
    127162                                        it = (*scopes)[i].begin();
    128                                         return *this;
    129                                 }
    130                                 ++it;
    131                                 return *this;
     163                                } else {
     164                                        ++it;
     165                                }
     166                                return next_valid();
    132167                        }
    133168                        const_iterator& operator++ (int) { const_iterator tmp = *this; ++(*this); return tmp; }
     
    140175                                }
    141176                                --it;
    142                                 return *this;
     177                                return prev_valid();
    143178                        }
    144179                        const_iterator& operator-- (int) { const_iterator tmp = *this; --(*this); return tmp; }
     
    164199                void endScope() {
    165200                        scopes.pop_back();
     201                        assert( ! scopes.empty() );
    166202                }
    167203
     
    169205                ScopedMap() { beginScope(); }
    170206
    171                 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1); }
    172                 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1); }
    173                 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1); }
     207                iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
     208                const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
     209                const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
    174210                iterator end() { return iterator(scopes, scopes[0].end(), 0); }
    175211                const_iterator end() const { return const_iterator(scopes, scopes[0].end(), 0); }
     
    188224                        return end();
    189225                }
    190                 const_iterator find( const Key &key ) const { return const_iterator( find( key ) ); }
     226                const_iterator find( const Key &key ) const {
     227                                return const_iterator( const_cast< ScopedMap< Key, Value >* >(this)->find( key ) );
     228                }
    191229               
    192230                /// Finds the given key in the outermost scope inside the given scope where it occurs
     
    200238                        return end();
    201239                }
    202                 const_iterator findNext( const_iterator &it, const Key &key ) const { return const_iterator( findNext( it, key ) ); }
     240                const_iterator findNext( const_iterator &it, const Key &key ) const {
     241                                return const_iterator( const_cast< ScopedMap< Key, Value >* >(this)->findNext( it, key ) );
     242                }
    203243
    204244                /// Inserts the given key-value pair into the outermost scope
     
    208248                }
    209249                std::pair< iterator, bool > insert( const Key &key, const Value &value ) { return insert( std::make_pair( key, value ) ); }
    210                
     250
     251                Value& operator[] ( const Key &key ) {
     252                        iterator slot = find( key );
     253                        if ( slot != end() ) return slot->second;
     254                        return insert( key, Value() ).first->second;
     255                }
    211256        };
    212257} // namespace GenPoly
  • src/GenPoly/ScrubTyVars.cc

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

    r1f6e009 r1048b31  
    7575                        void visit( UntypedOffsetofExpr * ) { throw 0; }
    7676                        void visit( OffsetofExpr * ) { throw 0; }
     77                        void visit( OffsetPackExpr * ) { throw 0; }
    7778                        void visit( AttrExpr * ) { throw 0; }
    7879                        void visit( LogicalExpr * ) { throw 0; }
  • src/Parser/DeclarationNode.cc

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

    r1f6e009 r1048b31  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Mar 13 12:34:38 2016
    13 // Update Count     : 272
     12// Last Modified On : Fri Apr  8 15:43:05 2016
     13// Update Count     : 296
    1414//
    1515
     
    2222
    2323#include "ParseNode.h"
     24#include "TypeData.h"
    2425#include "SynTree/Constant.h"
    2526#include "SynTree/Expression.h"
     27#include "SynTree/Declaration.h"
    2628#include "Common/UnimplementedError.h"
    2729#include "parseutility.h"
     
    872874}
    873875
     876
     877CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}
     878CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}
     879
     880CompoundLiteralNode::~CompoundLiteralNode() {
     881        delete kids;
     882        delete type;
     883}
     884
     885CompoundLiteralNode *CompoundLiteralNode::clone() const {
     886        return new CompoundLiteralNode( *this );
     887}
     888
     889void CompoundLiteralNode::print( std::ostream &os, int indent ) const {
     890        os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;
     891
     892        os << string( indent + 2, ' ' ) << "type:" << endl;
     893        if ( type != 0 )
     894                type->print( os, indent + 4 );
     895
     896        os << string( indent + 2, ' ' ) << "initialization:" << endl;
     897        if ( kids != 0 )
     898                kids->printList( os, indent + 4 );
     899}
     900
     901void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {
     902        os << "( ";
     903        if ( type ) type->print( os );
     904        os << ", ";
     905        if ( kids ) kids->printOneLine( os );
     906        os << ") ";
     907}
     908
     909Expression *CompoundLiteralNode::build() const {
     910        Declaration * newDecl = type->build();                          // compound literal type
     911        if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
     912                return new CompoundLiteralExpr( newDeclWithType->get_type(), kids->build() );
     913        // these types do not have associated type information
     914        } else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl )  ) {
     915                return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), kids->build() );
     916        } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl )  ) {
     917                return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), kids->build() );
     918        } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl )  ) {
     919                return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), kids->build() );
     920        } else {
     921                assert( false );
     922        } // if
     923}
     924
     925
    874926ExpressionNode *flattenCommas( ExpressionNode *list ) {
    875927        if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) {
  • src/Parser/ParseNode.h

    r1f6e009 r1048b31  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // ParseNode.h -- 
     7// ParseNode.h --
    88//
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 13:28:16 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:26:35 2016
    13 // Update Count     : 190
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Mon Apr 11 11:50:52 2016
     13// Update Count     : 205
    1414//
    1515
     
    108108
    109109        ConstantNode( Type, std::string * );
    110         ConstantNode( const ConstantNode &other ) : value( *new std::string( other.value ) ) {};
     110        ConstantNode( const ConstantNode &other ) : type( other.type ), btype( other.btype), value( *new std::string( other.value ) ) {};
    111111        ~ConstantNode() { delete &value; }
    112112
     
    177177        enum Type { TupleC, Comma, TupleFieldSel, // n-adic
    178178                                // triadic
    179                                 Cond, NCond, 
     179                                Cond, NCond,
    180180                                // diadic
    181                                 SizeOf, AlignOf, OffsetOf, Attr, CompLit, Plus, Minus, Mul, Div, Mod, Or, And, 
    182                                 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq, 
     181                                SizeOf, AlignOf, OffsetOf, Attr, CompLit, Plus, Minus, Mul, Div, Mod, Or, And,
     182                                BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
    183183                                Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
    184184                                Index, FieldSel, PFieldSel, Range,
     
    309309        ValofExprNode( const ValofExprNode &other );
    310310        ~ValofExprNode();
    311  
     311
    312312        virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
    313313
     
    333333        enum BuiltinType { Valist };
    334334
    335         static const char *storageName[]; 
     335        static const char *storageName[];
    336336        static const char *qualifierName[];
    337337        static const char *basicTypeName[];
     
    427427class StatementNode : public ParseNode {
    428428  public:
    429         enum Type { Exp,   If,        Switch,  Case,    Default,  Choose,   Fallthru, 
     429        enum Type { Exp,   If,        Switch,  Case,    Default,  Choose,   Fallthru,
    430430                                While, Do,        For,
    431431                                Goto,  Continue,  Break,   Return,  Throw,
     
    535535        bool aggregate;
    536536        ExpressionNode *designator; // may be list
     537        InitializerNode *kids;
     538};
     539
     540class CompoundLiteralNode : public ExpressionNode {
     541  public:
     542        CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
     543        CompoundLiteralNode( const CompoundLiteralNode &type );
     544        ~CompoundLiteralNode();
     545
     546        virtual CompoundLiteralNode *clone() const;
     547
     548        DeclarationNode *get_type() const { return type; }
     549        CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
     550
     551        InitializerNode *get_initializer() const { return kids; }
     552        CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
     553
     554        void print( std::ostream &, int indent = 0 ) const;
     555        void printOneLine( std::ostream &, int indent = 0 ) const;
     556
     557        virtual Expression *build() const;
     558  private:
     559        DeclarationNode *type;
    537560        InitializerNode *kids;
    538561};
  • src/Parser/TypedefTable.cc

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

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

    r1f6e009 r1048b31  
    590590#define YYFINAL  249
    591591/* YYLAST -- Last index in YYTABLE.  */
    592 #define YYLAST   11290
     592#define YYLAST   11449
    593593
    594594/* YYNTOKENS -- Number of terminals.  */
    595595#define YYNTOKENS  133
    596596/* YYNNTS -- Number of nonterminals.  */
    597 #define YYNNTS  238
     597#define YYNNTS  240
    598598/* YYNRULES -- Number of rules.  */
    599 #define YYNRULES  752
     599#define YYNRULES  754
    600600/* YYNRULES -- Number of states.  */
    601 #define YYNSTATES  1579
     601#define YYNSTATES  1581
    602602
    603603/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
     
    691691    1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,  1258,
    692692    1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,  1286,
    693     1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1316,  1324,
    694     1327,  1330,  1333,  1335,  1338,  1341,  1345,  1348,  1352,  1354,
    695     1357,  1361,  1364,  1367,  1372,  1373,  1375,  1378,  1381,  1383,
    696     1384,  1386,  1389,  1392,  1398,  1405,  1408,  1411,  1416,  1417,
    697     1420,  1421,  1423,  1425,  1427,  1433,  1439,  1445,  1447,  1453,
    698     1459,  1469,  1471,  1477,  1478,  1480,  1482,  1488,  1490,  1492,
    699     1498,  1504,  1506,  1510,  1514,  1519,  1521,  1523,  1525,  1527,
    700     1530,  1532,  1536,  1540,  1542,  1545,  1547,  1551,  1553,  1555,
    701     1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1573,  1576,
    702     1578,  1580,  1582,  1585,  1586,  1589,  1592,  1594,  1599,  1600,
    703     1602,  1605,  1609,  1614,  1617,  1620,  1622,  1625,  1627,  1630,
    704     1636,  1642,  1650,  1657,  1659,  1662,  1665,  1669,  1671,  1674,
    705     1677,  1682,  1685,  1690,  1691,  1696,  1699,  1701,  1703,  1705,
    706     1706,  1709,  1715,  1721,  1735,  1737,  1739,  1743,  1747,  1750,
    707     1754,  1758,  1761,  1766,  1768,  1775,  1785,  1786,  1798,  1800,
    708     1804,  1808,  1812,  1814,  1816,  1822,  1825,  1831,  1832,  1834,
    709     1836,  1840,  1841,  1843,  1845,  1847,  1849,  1850,  1857,  1860,
    710     1862,  1865,  1870,  1873,  1877,  1881,  1885,  1890,  1896,  1902,
    711     1908,  1915,  1917,  1919,  1921,  1925,  1926,  1932,  1933,  1935,
    712     1937,  1940,  1947,  1949,  1953,  1954,  1956,  1961,  1963,  1965,
    713     1967,  1969,  1972,  1974,  1977,  1980,  1982,  1986,  1989,  1993,
    714     1997,  2000,  2005,  2010,  2014,  2023,  2027,  2030,  2032,  2035,
    715     2042,  2051,  2055,  2058,  2062,  2066,  2071,  2076,  2080,  2082,
    716     2084,  2086,  2091,  2098,  2102,  2105,  2109,  2113,  2118,  2123,
    717     2127,  2130,  2132,  2135,  2138,  2140,  2144,  2147,  2151,  2155,
    718     2158,  2163,  2168,  2172,  2179,  2188,  2192,  2195,  2197,  2200,
    719     2203,  2206,  2210,  2214,  2217,  2222,  2227,  2231,  2238,  2247,
    720     2251,  2254,  2256,  2259,  2262,  2264,  2266,  2269,  2273,  2277,
    721     2280,  2285,  2292,  2301,  2303,  2306,  2309,  2311,  2314,  2317,
    722     2321,  2325,  2327,  2332,  2337,  2341,  2347,  2356,  2360,  2363,
    723     2367,  2369,  2375,  2381,  2388,  2395,  2397,  2400,  2403,  2405,
    724     2408,  2411,  2415,  2419,  2421,  2426,  2431,  2435,  2441,  2450,
    725     2454,  2456,  2459,  2461,  2464,  2471,  2477,  2484,  2492,  2500,
    726     2502,  2505,  2508,  2510,  2513,  2516,  2520,  2524,  2526,  2531,
    727     2536,  2540,  2549,  2553,  2555,  2557,  2560,  2562,  2564,  2567,
    728     2571,  2574,  2578,  2581,  2585,  2589,  2592,  2597,  2601,  2604,
    729     2608,  2611,  2616,  2620,  2623,  2630,  2637,  2644,  2652,  2654,
    730     2657,  2659,  2661,  2663,  2666,  2670,  2673,  2677,  2680,  2684,
    731     2688,  2693,  2696,  2700,  2705,  2708,  2714,  2720,  2727,  2734,
    732     2735,  2737,  2738
     693    1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1311,  1318,
     694    1326,  1329,  1332,  1335,  1337,  1340,  1343,  1347,  1350,  1354,
     695    1356,  1359,  1363,  1366,  1369,  1374,  1375,  1377,  1380,  1383,
     696    1385,  1386,  1388,  1391,  1394,  1400,  1403,  1404,  1412,  1415,
     697    1420,  1421,  1424,  1425,  1427,  1429,  1431,  1437,  1443,  1449,
     698    1451,  1457,  1463,  1473,  1475,  1481,  1482,  1484,  1486,  1492,
     699    1494,  1496,  1502,  1508,  1510,  1514,  1518,  1523,  1525,  1527,
     700    1529,  1531,  1534,  1536,  1540,  1544,  1546,  1549,  1551,  1555,
     701    1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1573,  1575,
     702    1577,  1580,  1582,  1584,  1586,  1589,  1590,  1593,  1596,  1598,
     703    1603,  1604,  1606,  1609,  1613,  1618,  1621,  1624,  1626,  1629,
     704    1631,  1634,  1640,  1646,  1654,  1661,  1663,  1666,  1669,  1673,
     705    1675,  1678,  1681,  1686,  1689,  1694,  1695,  1700,  1703,  1705,
     706    1707,  1709,  1710,  1713,  1719,  1725,  1739,  1741,  1743,  1747,
     707    1751,  1754,  1758,  1762,  1765,  1770,  1772,  1779,  1789,  1790,
     708    1802,  1804,  1808,  1812,  1816,  1818,  1820,  1826,  1829,  1835,
     709    1836,  1838,  1840,  1844,  1845,  1847,  1849,  1851,  1853,  1854,
     710    1861,  1864,  1866,  1869,  1874,  1877,  1881,  1885,  1889,  1894,
     711    1900,  1906,  1912,  1919,  1921,  1923,  1925,  1929,  1930,  1936,
     712    1937,  1939,  1941,  1944,  1951,  1953,  1957,  1958,  1960,  1965,
     713    1967,  1969,  1971,  1973,  1976,  1978,  1981,  1984,  1986,  1990,
     714    1993,  1997,  2001,  2004,  2009,  2014,  2018,  2027,  2031,  2034,
     715    2036,  2039,  2046,  2055,  2059,  2062,  2066,  2070,  2075,  2080,
     716    2084,  2086,  2088,  2090,  2095,  2102,  2106,  2109,  2113,  2117,
     717    2122,  2127,  2131,  2134,  2136,  2139,  2142,  2144,  2148,  2151,
     718    2155,  2159,  2162,  2167,  2172,  2176,  2183,  2192,  2196,  2199,
     719    2201,  2204,  2207,  2210,  2214,  2218,  2221,  2226,  2231,  2235,
     720    2242,  2251,  2255,  2258,  2260,  2263,  2266,  2268,  2270,  2273,
     721    2277,  2281,  2284,  2289,  2296,  2305,  2307,  2310,  2313,  2315,
     722    2318,  2321,  2325,  2329,  2331,  2336,  2341,  2345,  2351,  2360,
     723    2364,  2367,  2371,  2373,  2379,  2385,  2392,  2399,  2401,  2404,
     724    2407,  2409,  2412,  2415,  2419,  2423,  2425,  2430,  2435,  2439,
     725    2445,  2454,  2458,  2460,  2463,  2465,  2468,  2475,  2481,  2488,
     726    2496,  2504,  2506,  2509,  2512,  2514,  2517,  2520,  2524,  2528,
     727    2530,  2535,  2540,  2544,  2553,  2557,  2559,  2561,  2564,  2566,
     728    2568,  2571,  2575,  2578,  2582,  2585,  2589,  2593,  2596,  2601,
     729    2605,  2608,  2612,  2615,  2620,  2624,  2627,  2634,  2641,  2648,
     730    2656,  2658,  2661,  2663,  2665,  2667,  2670,  2674,  2677,  2681,
     731    2684,  2688,  2692,  2697,  2700,  2704,  2709,  2712,  2718,  2724,
     732    2731,  2738,  2739,  2741,  2742
    733733};
    734734
     
    736736static const yytype_int16 yyrhs[] =
    737737{
    738      299,     0,    -1,    -1,    -1,    79,    -1,    80,    -1,    81,
     738     301,     0,    -1,    -1,    -1,    79,    -1,    80,    -1,    81,
    739739      -1,    72,    -1,    76,    -1,   140,    -1,    72,    -1,    76,
    740740      -1,    72,    -1,   140,    -1,    83,    -1,    84,    -1,    82,
     
    745745     112,    -1,   143,    85,   139,    -1,   143,    85,   111,   134,
    746746     146,   135,   112,    -1,   143,    86,    -1,   143,    87,    -1,
    747      109,   272,   110,   114,   276,   369,   115,    -1,   143,   114,
     747     109,   274,   110,   114,   278,   371,   115,    -1,   143,   114,
    748748     144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
    749749     163,    -1,   139,   117,   163,    -1,   111,   134,   163,   135,
     
    755755     141,    -1,    86,   148,    -1,    87,   148,    -1,    40,   150,
    756756      -1,   149,   150,    -1,   118,   150,    -1,   119,   150,    -1,
    757       37,   148,    -1,    37,   109,   272,   110,    -1,    38,   109,
    758      272,   116,   139,   110,    -1,    76,    -1,    76,   109,   273,
     757      37,   148,    -1,    37,   109,   274,   110,    -1,    38,   109,
     758     274,   116,   139,   110,    -1,    76,    -1,    76,   109,   275,
    759759     110,    -1,    76,   109,   145,   110,    -1,    66,   148,    -1,
    760       66,   109,   272,   110,    -1,    94,   139,    -1,   120,    -1,
    761      121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   272,
    762      110,   150,    -1,   109,   272,   110,   165,    -1,   150,    -1,
     760      66,   109,   274,   110,    -1,    94,   139,    -1,   120,    -1,
     761     121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   274,
     762     110,   150,    -1,   109,   274,   110,   165,    -1,   150,    -1,
    763763     151,   119,   150,    -1,   151,   124,   150,    -1,   151,   125,
    764764     150,    -1,   151,    -1,   152,   121,   151,    -1,   152,   122,
     
    773773     117,   161,    -1,   160,   130,   168,   117,   165,    -1,   161,
    774774      -1,   161,    -1,   148,   131,   163,    -1,   148,   167,   163,
    775       -1,   165,   370,    -1,    -1,   163,    -1,   111,   112,    -1,
     775      -1,   165,   372,    -1,    -1,   163,    -1,   111,   112,    -1,
    776776     111,   134,   163,   135,   112,    -1,   111,   134,   116,   166,
    777777     135,   112,    -1,   111,   134,   163,   116,   166,   135,   112,
     
    782782     176,    -1,   177,    -1,   189,    -1,   191,    -1,   192,    -1,
    783783     197,    -1,   128,   143,   114,   144,   115,   132,    -1,   139,
    784      117,   309,   170,    -1,   114,   115,    -1,   114,   134,   134,
     784     117,   311,   170,    -1,   114,   115,    -1,   114,   134,   134,
    785785     208,   173,   135,   115,    -1,   174,    -1,   173,   134,   174,
    786       -1,   211,    -1,    40,   211,    -1,   305,    -1,   170,   135,
     786      -1,   211,    -1,    40,   211,    -1,   307,    -1,   170,   135,
    787787      -1,   170,    -1,   175,   170,    -1,   169,   132,    -1,    41,
    788788     109,   168,   110,   170,    -1,    41,   109,   168,   110,   170,
     
    791791     109,   168,   110,   182,    -1,    53,   109,   168,   110,   114,
    792792     134,   204,   185,   115,    -1,   162,    -1,   162,    96,   162,
    793       -1,   307,    -1,   178,    -1,   179,   116,   178,    -1,    44,
     793      -1,   309,    -1,   178,    -1,   179,   116,   178,    -1,    44,
    794794     179,   117,    -1,    45,   117,    -1,   180,    -1,   181,   180,
    795795      -1,   181,   170,    -1,    -1,   184,    -1,   181,   175,    -1,
     
    813813     134,   196,   135,   110,   172,   135,    -1,   194,    59,   109,
    814814     134,   134,   196,   135,   110,   172,   135,    -1,    60,   172,
    815       -1,   224,    -1,   224,   306,    -1,   224,   354,    -1,   363,
    816      139,    -1,   363,    -1,    64,   198,   109,   141,   110,   132,
     815      -1,   224,    -1,   224,   308,    -1,   224,   356,    -1,   365,
     816     139,    -1,   365,    -1,    64,   198,   109,   141,   110,   132,
    817817      -1,    64,   198,   109,   141,   117,   199,   110,   132,    -1,
    818818      64,   198,   109,   141,   117,   199,   117,   199,   110,   132,
     
    826826      -1,   211,    -1,   205,   134,   211,    -1,   135,    -1,   207,
    827827      -1,   221,    -1,   207,   134,   221,    -1,    -1,   209,    -1,
    828       29,   210,   132,    -1,   209,    29,   210,   132,    -1,   271,
    829       -1,   210,   116,   271,    -1,   212,    -1,   221,    -1,   213,
     828      29,   210,   132,    -1,   209,    29,   210,   132,    -1,   273,
     829      -1,   210,   116,   273,    -1,   212,    -1,   221,    -1,   213,
    830830     135,   132,    -1,   218,   135,   132,    -1,   215,   135,   132,
    831       -1,   290,   135,   132,    -1,   293,   135,   132,    -1,   214,
    832      274,    -1,   230,   214,   274,    -1,   213,   135,   116,   134,
    833      269,   274,    -1,   364,   269,   308,    -1,   367,   269,   308,
    834       -1,   226,   367,   269,   308,    -1,   216,    -1,   226,   216,
     831      -1,   292,   135,   132,    -1,   295,   135,   132,    -1,   214,
     832     276,    -1,   230,   214,   276,    -1,   213,   135,   116,   134,
     833     271,   276,    -1,   366,   271,   310,    -1,   369,   271,   310,
     834      -1,   226,   369,   271,   310,    -1,   216,    -1,   226,   216,
    835835      -1,   230,   216,    -1,   230,   226,   216,    -1,   215,   135,
    836      116,   134,   269,    -1,   111,   112,   269,   109,   134,   257,
    837      135,   110,    -1,   367,   269,   109,   134,   257,   135,   110,
    838       -1,   217,   269,   109,   134,   257,   135,   110,    -1,   111,
    839      134,   259,   135,   112,    -1,   111,   134,   259,   135,   116,
    840      134,   260,   135,   112,    -1,     3,   214,    -1,     3,   216,
    841       -1,   218,   135,   116,   134,   139,    -1,     3,   224,   306,
    842       -1,   219,   135,   116,   134,   306,    -1,   226,     3,   224,
    843      306,    -1,   224,     3,   306,    -1,   224,     3,   226,   306,
     836     116,   134,   271,    -1,   111,   112,   271,   109,   134,   259,
     837     135,   110,    -1,   369,   271,   109,   134,   259,   135,   110,
     838      -1,   217,   271,   109,   134,   259,   135,   110,    -1,   111,
     839     134,   261,   135,   112,    -1,   111,   134,   261,   135,   116,
     840     134,   262,   135,   112,    -1,     3,   214,    -1,     3,   216,
     841      -1,   218,   135,   116,   134,   139,    -1,     3,   224,   308,
     842      -1,   219,   135,   116,   134,   308,    -1,   226,     3,   224,
     843     308,    -1,   224,     3,   308,    -1,   224,     3,   226,   308,
    844844      -1,     3,   139,   131,   163,    -1,   220,   135,   116,   134,
    845845     139,   131,   163,    -1,   222,   135,   132,    -1,   219,   135,
    846846     132,    -1,   220,   135,   132,    -1,   239,   135,   132,    -1,
    847      223,   306,   308,   274,    -1,   222,   116,   309,   306,   308,
    848      274,    -1,   235,    -1,   239,    -1,   241,    -1,   280,    -1,
    849      236,    -1,   240,    -1,   242,    -1,   281,    -1,    -1,   226,
    850       -1,   227,    -1,   226,   227,    -1,   228,    -1,   311,    -1,
     847     223,   308,   310,   276,    -1,   222,   116,   311,   308,   310,
     848     276,    -1,   235,    -1,   239,    -1,   241,    -1,   282,    -1,
     849     236,    -1,   240,    -1,   242,    -1,   283,    -1,    -1,   226,
     850      -1,   227,    -1,   226,   227,    -1,   228,    -1,   313,    -1,
    851851      10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
    852       -1,    13,   109,   229,   283,   110,    -1,   231,    -1,   226,
     852      -1,    13,   109,   229,   285,   110,    -1,   231,    -1,   226,
    853853     231,    -1,   230,   226,   231,    -1,   232,    -1,   231,   232,
    854854      -1,   233,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
     
    860860      -1,   237,    -1,   225,   238,   225,    -1,   234,    -1,   226,
    861861     234,    -1,   237,   227,    -1,   237,   234,    -1,    28,   109,
    862      273,   110,    -1,    28,   109,   168,   110,    -1,    78,   109,
    863      273,   110,    -1,    78,   109,   168,   110,    -1,   240,    -1,
     862     275,   110,    -1,    28,   109,   168,   110,    -1,    78,   109,
     863     275,   110,    -1,    78,   109,   168,   110,    -1,   240,    -1,
    864864     230,   240,    -1,   239,   232,    -1,   239,   232,   226,    -1,
    865865     243,    -1,   226,   243,    -1,   240,   227,    -1,   242,    -1,
    866866     230,   242,    -1,   241,   232,    -1,   241,   232,   226,    -1,
    867867      74,    -1,   226,    74,    -1,   242,   227,    -1,   244,    -1,
    868      254,    -1,   245,   114,   246,   115,    -1,   245,   271,    -1,
    869      245,   271,   114,   246,   115,    -1,   245,   109,   289,   110,
    870      114,   246,   115,    -1,   245,   282,    -1,    31,   309,    -1,
    871       32,   309,    -1,   247,    -1,   246,   247,    -1,   248,   132,
    872       -1,    40,   248,   132,    -1,   249,   132,    -1,    40,   249,
    873      132,    -1,   363,    -1,   363,   271,    -1,   248,   116,   271,
    874       -1,   248,   116,    -1,   224,   250,    -1,   249,   116,   309,
    875      250,    -1,    -1,   252,    -1,   315,   251,    -1,   328,   251,
    876       -1,   354,    -1,    -1,   252,    -1,   117,   162,    -1,    30,
    877      309,    -1,   253,   114,   255,   369,   115,    -1,   253,   271,
    878      114,   255,   369,   115,    -1,   253,   271,    -1,   271,   256,
    879       -1,   255,   116,   271,   256,    -1,    -1,   131,   162,    -1,
    880       -1,   258,    -1,   260,    -1,   259,    -1,   259,   135,   116,
    881      134,   260,    -1,   260,   135,   116,   134,    96,    -1,   259,
    882      135,   116,   134,    96,    -1,   264,    -1,   260,   135,   116,
    883      134,   264,    -1,   259,   135,   116,   134,   264,    -1,   259,
    884      135,   116,   134,   260,   135,   116,   134,   264,    -1,   265,
    885       -1,   260,   135,   116,   134,   265,    -1,    -1,   262,    -1,
    886      263,    -1,   263,   135,   116,   134,    96,    -1,   267,    -1,
    887      266,    -1,   263,   135,   116,   134,   267,    -1,   263,   135,
    888      116,   134,   266,    -1,   266,    -1,   359,   269,   370,    -1,
    889      367,   269,   370,    -1,   226,   367,   269,   370,    -1,   216,
    890       -1,   267,    -1,   359,    -1,   367,    -1,   226,   367,    -1,
    891      368,    -1,   223,   333,   370,    -1,   223,   337,   370,    -1,
    892      223,    -1,   223,   348,    -1,   139,    -1,   268,   116,   139,
    893       -1,   137,    -1,    74,    -1,    75,    -1,   138,    -1,    74,
    894       -1,    75,    -1,   139,    -1,    74,    -1,    75,    -1,   363,
    895       -1,   224,    -1,   224,   354,    -1,   363,    -1,   368,    -1,
    896      224,    -1,   224,   342,    -1,    -1,   131,   275,    -1,   107,
    897      275,    -1,   163,    -1,   114,   276,   369,   115,    -1,    -1,
    898      275,    -1,   277,   275,    -1,   276,   116,   275,    -1,   276,
    899      116,   277,   275,    -1,   278,   117,    -1,   271,   117,    -1,
    900      279,    -1,   278,   279,    -1,    80,    -1,   113,   271,    -1,
    901      111,   134,   163,   135,   112,    -1,   111,   134,   307,   135,
    902      112,    -1,   111,   134,   162,    96,   162,   135,   112,    -1,
    903      113,   111,   134,   146,   135,   112,    -1,   281,    -1,   230,
    904      281,    -1,   280,   232,    -1,   280,   232,   226,    -1,   282,
    905       -1,   226,   282,    -1,   281,   227,    -1,    75,   109,   289,
    906      110,    -1,   284,   370,    -1,   283,   116,   284,   370,    -1,
    907       -1,   286,   271,   285,   287,    -1,   224,   333,    -1,    33,
    908       -1,    35,    -1,    34,    -1,    -1,   287,   288,    -1,   129,
    909      271,   109,   289,   110,    -1,   129,   114,   134,   295,   115,
    910       -1,   129,   109,   134,   283,   135,   110,   114,   134,   295,
    911      115,   109,   289,   110,    -1,   273,    -1,   163,    -1,   289,
    912      116,   273,    -1,   289,   116,   163,    -1,    33,   291,    -1,
    913      231,    33,   291,    -1,   290,   116,   291,    -1,   292,   287,
    914       -1,   292,   287,   131,   273,    -1,   271,    -1,   270,   109,
    915      134,   283,   135,   110,    -1,    36,   271,   109,   134,   283,
    916      135,   110,   114,   115,    -1,    -1,    36,   271,   109,   134,
    917      283,   135,   110,   114,   294,   295,   115,    -1,   296,    -1,
    918      295,   134,   296,    -1,   297,   135,   132,    -1,   298,   135,
    919      132,    -1,   214,    -1,   216,    -1,   297,   135,   116,   134,
    920      269,    -1,   224,   306,    -1,   298,   135,   116,   134,   306,
    921       -1,    -1,   300,    -1,   302,    -1,   300,   134,   302,    -1,
    922       -1,   300,    -1,   211,    -1,   304,    -1,   197,    -1,    -1,
    923        5,    82,   303,   114,   301,   115,    -1,    40,   302,    -1,
    924      305,    -1,   320,   172,    -1,   324,   134,   206,   172,    -1,
    925      215,   172,    -1,   223,   320,   172,    -1,   226,   320,   172,
    926       -1,   230,   320,   172,    -1,   230,   226,   320,   172,    -1,
    927      223,   324,   134,   206,   172,    -1,   226,   324,   134,   206,
    928      172,    -1,   230,   324,   134,   206,   172,    -1,   230,   226,
    929      324,   134,   206,   172,    -1,   315,    -1,   320,    -1,   328,
    930       -1,   162,   123,   162,    -1,    -1,    64,   109,   141,   110,
    931      309,    -1,    -1,   310,    -1,   311,    -1,   310,   311,    -1,
    932       39,   109,   109,   312,   110,   110,    -1,   313,    -1,   312,
    933      116,   313,    -1,    -1,   314,    -1,   314,   109,   169,   110,
    934       -1,   269,    -1,   233,    -1,   234,    -1,   227,    -1,   316,
    935      309,    -1,   317,    -1,   318,   309,    -1,   319,   309,    -1,
    936      137,    -1,   109,   316,   110,    -1,   119,   315,    -1,   119,
    937      226,   315,    -1,   109,   317,   110,    -1,   316,   346,    -1,
    938      109,   317,   110,   346,    -1,   109,   318,   110,   347,    -1,
    939      109,   318,   110,    -1,   109,   317,   110,   109,   134,   261,
    940      135,   110,    -1,   109,   319,   110,    -1,   321,   309,    -1,
    941      322,    -1,   323,   309,    -1,   316,   109,   134,   261,   135,
    942      110,    -1,   109,   322,   110,   109,   134,   261,   135,   110,
    943       -1,   109,   321,   110,    -1,   119,   320,    -1,   119,   226,
    944      320,    -1,   109,   322,   110,    -1,   109,   322,   110,   346,
    945       -1,   109,   323,   110,   347,    -1,   109,   323,   110,    -1,
    946      325,    -1,   326,    -1,   327,    -1,   316,   109,   268,   110,
    947       -1,   109,   326,   110,   109,   268,   110,    -1,   109,   325,
    948      110,    -1,   119,   324,    -1,   119,   226,   324,    -1,   109,
    949      326,   110,    -1,   109,   326,   110,   346,    -1,   109,   327,
    950      110,   347,    -1,   109,   327,   110,    -1,   329,   309,    -1,
    951      330,    -1,   331,   309,    -1,   332,   309,    -1,   338,    -1,
    952      109,   329,   110,    -1,   119,   328,    -1,   119,   226,   328,
    953       -1,   109,   330,   110,    -1,   329,   346,    -1,   109,   330,
    954      110,   346,    -1,   109,   331,   110,   347,    -1,   109,   331,
    955      110,    -1,   329,   109,   134,   261,   135,   110,    -1,   109,
    956      330,   110,   109,   134,   261,   135,   110,    -1,   109,   332,
    957      110,    -1,   316,   309,    -1,   334,    -1,   335,   309,    -1,
    958      336,   309,    -1,   119,   333,    -1,   119,   226,   333,    -1,
    959      109,   334,   110,    -1,   316,   352,    -1,   109,   334,   110,
    960      346,    -1,   109,   335,   110,   347,    -1,   109,   335,   110,
    961       -1,   316,   109,   134,   261,   135,   110,    -1,   109,   334,
    962      110,   109,   134,   261,   135,   110,    -1,   109,   336,   110,
    963       -1,   338,   309,    -1,   339,    -1,   340,   309,    -1,   341,
    964      309,    -1,    74,    -1,    75,    -1,   119,   337,    -1,   119,
    965      226,   337,    -1,   109,   339,   110,    -1,   338,   352,    -1,
    966      109,   339,   110,   352,    -1,   338,   109,   134,   261,   135,
    967      110,    -1,   109,   339,   110,   109,   134,   261,   135,   110,
    968       -1,   343,    -1,   344,   309,    -1,   345,   309,    -1,   119,
    969       -1,   119,   226,    -1,   119,   342,    -1,   119,   226,   342,
    970       -1,   109,   343,   110,    -1,   346,    -1,   109,   343,   110,
    971      346,    -1,   109,   344,   110,   347,    -1,   109,   344,   110,
    972       -1,   109,   134,   261,   135,   110,    -1,   109,   343,   110,
    973      109,   134,   261,   135,   110,    -1,   109,   345,   110,    -1,
    974      111,   112,    -1,   111,   112,   347,    -1,   347,    -1,   111,
    975      134,   163,   135,   112,    -1,   111,   134,   119,   135,   112,
    976       -1,   347,   111,   134,   163,   135,   112,    -1,   347,   111,
    977      134,   119,   135,   112,    -1,   349,    -1,   350,   309,    -1,
    978      351,   309,    -1,   119,    -1,   119,   226,    -1,   119,   348,
    979       -1,   119,   226,   348,    -1,   109,   349,   110,    -1,   352,
    980       -1,   109,   349,   110,   352,    -1,   109,   350,   110,   347,
    981       -1,   109,   350,   110,    -1,   109,   134,   261,   135,   110,
    982       -1,   109,   349,   110,   109,   134,   261,   135,   110,    -1,
    983      109,   351,   110,    -1,   353,    -1,   353,   347,    -1,   347,
    984       -1,   111,   112,    -1,   111,   134,   226,   119,   135,   112,
    985       -1,   111,   134,   226,   135,   112,    -1,   111,   134,   226,
    986      163,   135,   112,    -1,   111,   134,     7,   225,   163,   135,
    987      112,    -1,   111,   134,   226,     7,   163,   135,   112,    -1,
    988      355,    -1,   356,   309,    -1,   357,   309,    -1,   119,    -1,
    989      119,   226,    -1,   119,   354,    -1,   119,   226,   354,    -1,
    990      109,   355,   110,    -1,   346,    -1,   109,   355,   110,   346,
    991       -1,   109,   356,   110,   347,    -1,   109,   356,   110,    -1,
    992      109,   355,   110,   109,   134,   261,   135,   110,    -1,   109,
    993      357,   110,    -1,   359,    -1,   367,    -1,   226,   367,    -1,
    994      360,    -1,   361,    -1,   119,   224,    -1,   226,   119,   224,
    995       -1,   119,   368,    -1,   226,   119,   368,    -1,   119,   358,
    996       -1,   226,   119,   358,    -1,   111,   112,   224,    -1,   362,
    997      224,    -1,   111,   112,   347,   224,    -1,   362,   347,   224,
    998       -1,   347,   224,    -1,   111,   112,   360,    -1,   362,   360,
    999       -1,   111,   112,   347,   360,    -1,   362,   347,   360,    -1,
    1000      347,   360,    -1,   111,   134,   226,   119,   135,   112,    -1,
    1001      111,   134,   226,   163,   135,   112,    -1,   111,   134,   230,
    1002      163,   135,   112,    -1,   111,   134,   230,   226,   163,   135,
    1003      112,    -1,   367,    -1,   226,   367,    -1,   364,    -1,   365,
    1004       -1,   366,    -1,   119,   224,    -1,   226,   119,   224,    -1,
    1005      119,   368,    -1,   226,   119,   368,    -1,   119,   363,    -1,
    1006      226,   119,   363,    -1,   111,   112,   224,    -1,   111,   112,
    1007      347,   224,    -1,   347,   224,    -1,   111,   112,   365,    -1,
    1008      111,   112,   347,   365,    -1,   347,   365,    -1,   111,   134,
    1009      260,   135,   112,    -1,   111,   112,   109,   257,   110,    -1,
    1010      367,   109,   134,   257,   135,   110,    -1,   217,   109,   134,
    1011      257,   135,   110,    -1,    -1,   116,    -1,    -1,   131,   163,
    1012       -1
     868     255,    -1,   246,   114,   247,   115,    -1,   246,   273,    -1,
     869      -1,   246,   273,   245,   114,   247,   115,    -1,   246,   109,
     870     291,   110,   114,   247,   115,    -1,   246,   284,    -1,    31,
     871     311,    -1,    32,   311,    -1,   248,    -1,   247,   248,    -1,
     872     249,   132,    -1,    40,   249,   132,    -1,   250,   132,    -1,
     873      40,   250,   132,    -1,   365,    -1,   365,   273,    -1,   249,
     874     116,   273,    -1,   249,   116,    -1,   224,   251,    -1,   250,
     875     116,   311,   251,    -1,    -1,   253,    -1,   317,   252,    -1,
     876     330,   252,    -1,   356,    -1,    -1,   253,    -1,   117,   162,
     877      -1,    30,   311,    -1,   254,   114,   257,   371,   115,    -1,
     878     254,   273,    -1,    -1,   254,   273,   256,   114,   257,   371,
     879     115,    -1,   273,   258,    -1,   257,   116,   273,   258,    -1,
     880      -1,   131,   162,    -1,    -1,   260,    -1,   262,    -1,   261,
     881      -1,   261,   135,   116,   134,   262,    -1,   262,   135,   116,
     882     134,    96,    -1,   261,   135,   116,   134,    96,    -1,   266,
     883      -1,   262,   135,   116,   134,   266,    -1,   261,   135,   116,
     884     134,   266,    -1,   261,   135,   116,   134,   262,   135,   116,
     885     134,   266,    -1,   267,    -1,   262,   135,   116,   134,   267,
     886      -1,    -1,   264,    -1,   265,    -1,   265,   135,   116,   134,
     887      96,    -1,   269,    -1,   268,    -1,   265,   135,   116,   134,
     888     269,    -1,   265,   135,   116,   134,   268,    -1,   268,    -1,
     889     361,   271,   372,    -1,   369,   271,   372,    -1,   226,   369,
     890     271,   372,    -1,   216,    -1,   269,    -1,   361,    -1,   369,
     891      -1,   226,   369,    -1,   370,    -1,   223,   335,   372,    -1,
     892     223,   339,   372,    -1,   223,    -1,   223,   350,    -1,   139,
     893      -1,   270,   116,   139,    -1,   137,    -1,    74,    -1,    75,
     894      -1,   138,    -1,    74,    -1,    75,    -1,   139,    -1,    74,
     895      -1,    75,    -1,   365,    -1,   224,    -1,   224,   356,    -1,
     896     365,    -1,   370,    -1,   224,    -1,   224,   344,    -1,    -1,
     897     131,   277,    -1,   107,   277,    -1,   163,    -1,   114,   278,
     898     371,   115,    -1,    -1,   277,    -1,   279,   277,    -1,   278,
     899     116,   277,    -1,   278,   116,   279,   277,    -1,   280,   117,
     900      -1,   273,   117,    -1,   281,    -1,   280,   281,    -1,    80,
     901      -1,   113,   273,    -1,   111,   134,   163,   135,   112,    -1,
     902     111,   134,   309,   135,   112,    -1,   111,   134,   162,    96,
     903     162,   135,   112,    -1,   113,   111,   134,   146,   135,   112,
     904      -1,   283,    -1,   230,   283,    -1,   282,   232,    -1,   282,
     905     232,   226,    -1,   284,    -1,   226,   284,    -1,   283,   227,
     906      -1,    75,   109,   291,   110,    -1,   286,   372,    -1,   285,
     907     116,   286,   372,    -1,    -1,   288,   273,   287,   289,    -1,
     908     224,   335,    -1,    33,    -1,    35,    -1,    34,    -1,    -1,
     909     289,   290,    -1,   129,   273,   109,   291,   110,    -1,   129,
     910     114,   134,   297,   115,    -1,   129,   109,   134,   285,   135,
     911     110,   114,   134,   297,   115,   109,   291,   110,    -1,   275,
     912      -1,   163,    -1,   291,   116,   275,    -1,   291,   116,   163,
     913      -1,    33,   293,    -1,   231,    33,   293,    -1,   292,   116,
     914     293,    -1,   294,   289,    -1,   294,   289,   131,   275,    -1,
     915     273,    -1,   272,   109,   134,   285,   135,   110,    -1,    36,
     916     273,   109,   134,   285,   135,   110,   114,   115,    -1,    -1,
     917      36,   273,   109,   134,   285,   135,   110,   114,   296,   297,
     918     115,    -1,   298,    -1,   297,   134,   298,    -1,   299,   135,
     919     132,    -1,   300,   135,   132,    -1,   214,    -1,   216,    -1,
     920     299,   135,   116,   134,   271,    -1,   224,   308,    -1,   300,
     921     135,   116,   134,   308,    -1,    -1,   302,    -1,   304,    -1,
     922     302,   134,   304,    -1,    -1,   302,    -1,   211,    -1,   306,
     923      -1,   197,    -1,    -1,     5,    82,   305,   114,   303,   115,
     924      -1,    40,   304,    -1,   307,    -1,   322,   172,    -1,   326,
     925     134,   206,   172,    -1,   215,   172,    -1,   223,   322,   172,
     926      -1,   226,   322,   172,    -1,   230,   322,   172,    -1,   230,
     927     226,   322,   172,    -1,   223,   326,   134,   206,   172,    -1,
     928     226,   326,   134,   206,   172,    -1,   230,   326,   134,   206,
     929     172,    -1,   230,   226,   326,   134,   206,   172,    -1,   317,
     930      -1,   322,    -1,   330,    -1,   162,   123,   162,    -1,    -1,
     931      64,   109,   141,   110,   311,    -1,    -1,   312,    -1,   313,
     932      -1,   312,   313,    -1,    39,   109,   109,   314,   110,   110,
     933      -1,   315,    -1,   314,   116,   315,    -1,    -1,   316,    -1,
     934     316,   109,   169,   110,    -1,   271,    -1,   233,    -1,   234,
     935      -1,   227,    -1,   318,   311,    -1,   319,    -1,   320,   311,
     936      -1,   321,   311,    -1,   137,    -1,   109,   318,   110,    -1,
     937     119,   317,    -1,   119,   226,   317,    -1,   109,   319,   110,
     938      -1,   318,   348,    -1,   109,   319,   110,   348,    -1,   109,
     939     320,   110,   349,    -1,   109,   320,   110,    -1,   109,   319,
     940     110,   109,   134,   263,   135,   110,    -1,   109,   321,   110,
     941      -1,   323,   311,    -1,   324,    -1,   325,   311,    -1,   318,
     942     109,   134,   263,   135,   110,    -1,   109,   324,   110,   109,
     943     134,   263,   135,   110,    -1,   109,   323,   110,    -1,   119,
     944     322,    -1,   119,   226,   322,    -1,   109,   324,   110,    -1,
     945     109,   324,   110,   348,    -1,   109,   325,   110,   349,    -1,
     946     109,   325,   110,    -1,   327,    -1,   328,    -1,   329,    -1,
     947     318,   109,   270,   110,    -1,   109,   328,   110,   109,   270,
     948     110,    -1,   109,   327,   110,    -1,   119,   326,    -1,   119,
     949     226,   326,    -1,   109,   328,   110,    -1,   109,   328,   110,
     950     348,    -1,   109,   329,   110,   349,    -1,   109,   329,   110,
     951      -1,   331,   311,    -1,   332,    -1,   333,   311,    -1,   334,
     952     311,    -1,   340,    -1,   109,   331,   110,    -1,   119,   330,
     953      -1,   119,   226,   330,    -1,   109,   332,   110,    -1,   331,
     954     348,    -1,   109,   332,   110,   348,    -1,   109,   333,   110,
     955     349,    -1,   109,   333,   110,    -1,   331,   109,   134,   263,
     956     135,   110,    -1,   109,   332,   110,   109,   134,   263,   135,
     957     110,    -1,   109,   334,   110,    -1,   318,   311,    -1,   336,
     958      -1,   337,   311,    -1,   338,   311,    -1,   119,   335,    -1,
     959     119,   226,   335,    -1,   109,   336,   110,    -1,   318,   354,
     960      -1,   109,   336,   110,   348,    -1,   109,   337,   110,   349,
     961      -1,   109,   337,   110,    -1,   318,   109,   134,   263,   135,
     962     110,    -1,   109,   336,   110,   109,   134,   263,   135,   110,
     963      -1,   109,   338,   110,    -1,   340,   311,    -1,   341,    -1,
     964     342,   311,    -1,   343,   311,    -1,    74,    -1,    75,    -1,
     965     119,   339,    -1,   119,   226,   339,    -1,   109,   341,   110,
     966      -1,   340,   354,    -1,   109,   341,   110,   354,    -1,   340,
     967     109,   134,   263,   135,   110,    -1,   109,   341,   110,   109,
     968     134,   263,   135,   110,    -1,   345,    -1,   346,   311,    -1,
     969     347,   311,    -1,   119,    -1,   119,   226,    -1,   119,   344,
     970      -1,   119,   226,   344,    -1,   109,   345,   110,    -1,   348,
     971      -1,   109,   345,   110,   348,    -1,   109,   346,   110,   349,
     972      -1,   109,   346,   110,    -1,   109,   134,   263,   135,   110,
     973      -1,   109,   345,   110,   109,   134,   263,   135,   110,    -1,
     974     109,   347,   110,    -1,   111,   112,    -1,   111,   112,   349,
     975      -1,   349,    -1,   111,   134,   163,   135,   112,    -1,   111,
     976     134,   119,   135,   112,    -1,   349,   111,   134,   163,   135,
     977     112,    -1,   349,   111,   134,   119,   135,   112,    -1,   351,
     978      -1,   352,   311,    -1,   353,   311,    -1,   119,    -1,   119,
     979     226,    -1,   119,   350,    -1,   119,   226,   350,    -1,   109,
     980     351,   110,    -1,   354,    -1,   109,   351,   110,   354,    -1,
     981     109,   352,   110,   349,    -1,   109,   352,   110,    -1,   109,
     982     134,   263,   135,   110,    -1,   109,   351,   110,   109,   134,
     983     263,   135,   110,    -1,   109,   353,   110,    -1,   355,    -1,
     984     355,   349,    -1,   349,    -1,   111,   112,    -1,   111,   134,
     985     226,   119,   135,   112,    -1,   111,   134,   226,   135,   112,
     986      -1,   111,   134,   226,   163,   135,   112,    -1,   111,   134,
     987       7,   225,   163,   135,   112,    -1,   111,   134,   226,     7,
     988     163,   135,   112,    -1,   357,    -1,   358,   311,    -1,   359,
     989     311,    -1,   119,    -1,   119,   226,    -1,   119,   356,    -1,
     990     119,   226,   356,    -1,   109,   357,   110,    -1,   348,    -1,
     991     109,   357,   110,   348,    -1,   109,   358,   110,   349,    -1,
     992     109,   358,   110,    -1,   109,   357,   110,   109,   134,   263,
     993     135,   110,    -1,   109,   359,   110,    -1,   361,    -1,   369,
     994      -1,   226,   369,    -1,   362,    -1,   363,    -1,   119,   224,
     995      -1,   226,   119,   224,    -1,   119,   370,    -1,   226,   119,
     996     370,    -1,   119,   360,    -1,   226,   119,   360,    -1,   111,
     997     112,   224,    -1,   364,   224,    -1,   111,   112,   349,   224,
     998      -1,   364,   349,   224,    -1,   349,   224,    -1,   111,   112,
     999     362,    -1,   364,   362,    -1,   111,   112,   349,   362,    -1,
     1000     364,   349,   362,    -1,   349,   362,    -1,   111,   134,   226,
     1001     119,   135,   112,    -1,   111,   134,   226,   163,   135,   112,
     1002      -1,   111,   134,   230,   163,   135,   112,    -1,   111,   134,
     1003     230,   226,   163,   135,   112,    -1,   369,    -1,   226,   369,
     1004      -1,   366,    -1,   367,    -1,   368,    -1,   119,   224,    -1,
     1005     226,   119,   224,    -1,   119,   370,    -1,   226,   119,   370,
     1006      -1,   119,   365,    -1,   226,   119,   365,    -1,   111,   112,
     1007     224,    -1,   111,   112,   349,   224,    -1,   349,   224,    -1,
     1008     111,   112,   367,    -1,   111,   112,   349,   367,    -1,   349,
     1009     367,    -1,   111,   134,   262,   135,   112,    -1,   111,   112,
     1010     109,   259,   110,    -1,   369,   109,   134,   259,   135,   110,
     1011      -1,   217,   109,   134,   259,   135,   110,    -1,    -1,   116,
     1012      -1,    -1,   131,   163,    -1
    10131013};
    10141014
     
    10521052    1368,  1374,  1375,  1377,  1379,  1384,  1386,  1388,  1390,  1395,
    10531053    1396,  1398,  1400,  1405,  1406,  1408,  1413,  1414,  1416,  1418,
    1054     1423,  1425,  1427,  1432,  1433,  1437,  1439,  1441,  1443,  1445,
    1055     1450,  1452,  1457,  1459,  1464,  1465,  1467,  1468,  1473,  1474,
    1056     1476,  1478,  1483,  1485,  1491,  1492,  1494,  1497,  1500,  1505,
    1057     1506,  1511,  1516,  1520,  1522,  1524,  1529,  1531,  1537,  1538,
    1058     1546,  1547,  1551,  1552,  1553,  1555,  1557,  1564,  1565,  1567,
    1059     1569,  1574,  1575,  1581,  1582,  1586,  1587,  1592,  1593,  1594,
    1060     1596,  1604,  1605,  1607,  1610,  1612,  1616,  1617,  1618,  1620,
    1061     1622,  1626,  1631,  1639,  1640,  1649,  1651,  1656,  1657,  1658,
    1062     1662,  1663,  1664,  1668,  1669,  1670,  1674,  1675,  1676,  1681,
    1063     1682,  1683,  1684,  1690,  1691,  1693,  1698,  1699,  1704,  1705,
    1064     1706,  1707,  1708,  1723,  1724,  1729,  1730,  1738,  1740,  1742,
    1065     1745,  1747,  1749,  1772,  1773,  1775,  1777,  1782,  1783,  1785,
    1066     1790,  1795,  1796,  1802,  1801,  1805,  1809,  1811,  1813,  1819,
    1067     1820,  1825,  1830,  1832,  1837,  1839,  1840,  1842,  1847,  1849,
    1068     1851,  1856,  1858,  1863,  1868,  1876,  1882,  1881,  1895,  1896,
    1069     1901,  1902,  1906,  1911,  1916,  1924,  1929,  1940,  1941,  1952,
    1070     1953,  1959,  1960,  1964,  1965,  1966,  1969,  1968,  1979,  1984,
    1071     1989,  1995,  2004,  2010,  2016,  2022,  2028,  2036,  2042,  2050,
    1072     2056,  2065,  2066,  2067,  2071,  2075,  2077,  2082,  2083,  2087,
    1073     2088,  2093,  2099,  2100,  2103,  2105,  2106,  2110,  2111,  2112,
    1074     2113,  2147,  2149,  2150,  2152,  2157,  2162,  2167,  2169,  2171,
    1075     2176,  2178,  2180,  2182,  2187,  2189,  2199,  2201,  2202,  2207,
    1076     2209,  2211,  2216,  2218,  2220,  2225,  2227,  2229,  2238,  2239,
    1077     2240,  2244,  2246,  2248,  2253,  2255,  2257,  2262,  2264,  2266,
    1078     2281,  2283,  2284,  2286,  2291,  2292,  2297,  2299,  2301,  2306,
    1079     2308,  2310,  2312,  2317,  2319,  2321,  2331,  2333,  2334,  2336,
    1080     2341,  2343,  2345,  2350,  2352,  2354,  2356,  2361,  2363,  2365,
    1081     2396,  2398,  2399,  2401,  2406,  2411,  2419,  2421,  2423,  2428,
    1082     2430,  2435,  2437,  2451,  2452,  2454,  2459,  2461,  2463,  2465,
    1083     2467,  2472,  2473,  2475,  2477,  2482,  2484,  2486,  2492,  2494,
    1084     2496,  2500,  2502,  2504,  2506,  2520,  2521,  2523,  2528,  2530,
    1085     2532,  2534,  2536,  2541,  2542,  2544,  2546,  2551,  2553,  2555,
    1086     2561,  2562,  2564,  2573,  2576,  2578,  2581,  2583,  2585,  2598,
    1087     2599,  2601,  2606,  2608,  2610,  2612,  2614,  2619,  2620,  2622,
    1088     2624,  2629,  2631,  2639,  2640,  2641,  2646,  2647,  2651,  2653,
    1089     2655,  2657,  2659,  2661,  2668,  2670,  2672,  2674,  2676,  2678,
    1090     2680,  2682,  2684,  2686,  2691,  2693,  2695,  2700,  2726,  2727,
    1091     2729,  2733,  2734,  2738,  2740,  2742,  2744,  2746,  2748,  2755,
    1092     2757,  2759,  2761,  2763,  2765,  2770,  2775,  2777,  2779,  2797,
    1093     2799,  2804,  2805
     1054    1423,  1425,  1427,  1432,  1433,  1437,  1439,  1445,  1444,  1448,
     1055    1450,  1455,  1457,  1462,  1464,  1469,  1470,  1472,  1473,  1478,
     1056    1479,  1481,  1483,  1488,  1490,  1496,  1497,  1499,  1502,  1505,
     1057    1510,  1511,  1516,  1521,  1525,  1527,  1533,  1532,  1539,  1541,
     1058    1547,  1548,  1556,  1557,  1561,  1562,  1563,  1565,  1567,  1574,
     1059    1575,  1577,  1579,  1584,  1585,  1591,  1592,  1596,  1597,  1602,
     1060    1603,  1604,  1606,  1614,  1615,  1617,  1620,  1622,  1626,  1627,
     1061    1628,  1630,  1632,  1636,  1641,  1649,  1650,  1659,  1661,  1666,
     1062    1667,  1668,  1672,  1673,  1674,  1678,  1679,  1680,  1684,  1685,
     1063    1686,  1691,  1692,  1693,  1694,  1700,  1701,  1703,  1708,  1709,
     1064    1714,  1715,  1716,  1717,  1718,  1733,  1734,  1739,  1740,  1748,
     1065    1750,  1752,  1755,  1757,  1759,  1782,  1783,  1785,  1787,  1792,
     1066    1793,  1795,  1800,  1805,  1806,  1812,  1811,  1815,  1819,  1821,
     1067    1823,  1829,  1830,  1835,  1840,  1842,  1847,  1849,  1850,  1852,
     1068    1857,  1859,  1861,  1866,  1868,  1873,  1878,  1886,  1892,  1891,
     1069    1905,  1906,  1911,  1912,  1916,  1921,  1926,  1934,  1939,  1950,
     1070    1951,  1962,  1963,  1969,  1970,  1974,  1975,  1976,  1979,  1978,
     1071    1989,  1994,  1999,  2005,  2014,  2020,  2026,  2032,  2038,  2046,
     1072    2052,  2060,  2066,  2075,  2076,  2077,  2081,  2085,  2087,  2092,
     1073    2093,  2097,  2098,  2103,  2109,  2110,  2113,  2115,  2116,  2120,
     1074    2121,  2122,  2123,  2157,  2159,  2160,  2162,  2167,  2172,  2177,
     1075    2179,  2181,  2186,  2188,  2190,  2192,  2197,  2199,  2209,  2211,
     1076    2212,  2217,  2219,  2221,  2226,  2228,  2230,  2235,  2237,  2239,
     1077    2248,  2249,  2250,  2254,  2256,  2258,  2263,  2265,  2267,  2272,
     1078    2274,  2276,  2291,  2293,  2294,  2296,  2301,  2302,  2307,  2309,
     1079    2311,  2316,  2318,  2320,  2322,  2327,  2329,  2331,  2341,  2343,
     1080    2344,  2346,  2351,  2353,  2355,  2360,  2362,  2364,  2366,  2371,
     1081    2373,  2375,  2406,  2408,  2409,  2411,  2416,  2421,  2429,  2431,
     1082    2433,  2438,  2440,  2445,  2447,  2461,  2462,  2464,  2469,  2471,
     1083    2473,  2475,  2477,  2482,  2483,  2485,  2487,  2492,  2494,  2496,
     1084    2502,  2504,  2506,  2510,  2512,  2514,  2516,  2530,  2531,  2533,
     1085    2538,  2540,  2542,  2544,  2546,  2551,  2552,  2554,  2556,  2561,
     1086    2563,  2565,  2571,  2572,  2574,  2583,  2586,  2588,  2591,  2593,
     1087    2595,  2608,  2609,  2611,  2616,  2618,  2620,  2622,  2624,  2629,
     1088    2630,  2632,  2634,  2639,  2641,  2649,  2650,  2651,  2656,  2657,
     1089    2661,  2663,  2665,  2667,  2669,  2671,  2678,  2680,  2682,  2684,
     1090    2686,  2688,  2690,  2692,  2694,  2696,  2701,  2703,  2705,  2710,
     1091    2736,  2737,  2739,  2743,  2744,  2748,  2750,  2752,  2754,  2756,
     1092    2758,  2765,  2767,  2769,  2771,  2773,  2775,  2780,  2785,  2787,
     1093    2789,  2807,  2809,  2814,  2815
    10941094};
    10951095#endif
     
    11561156  "sue_declaration_specifier", "sue_type_specifier",
    11571157  "typedef_declaration_specifier", "typedef_type_specifier",
    1158   "elaborated_type_name", "aggregate_name", "aggregate_key",
     1158  "elaborated_type_name", "aggregate_name", "$@2", "aggregate_key",
    11591159  "field_declaration_list", "field_declaration",
    11601160  "new_field_declaring_list", "field_declaring_list", "field_declarator",
    11611161  "bit_subrange_size_opt", "bit_subrange_size", "enum_key", "enum_name",
    1162   "enumerator_list", "enumerator_value_opt", "new_parameter_type_list_opt",
    1163   "new_parameter_type_list", "new_parameter_list",
    1164   "new_abstract_parameter_list", "parameter_type_list_opt",
    1165   "parameter_type_list", "parameter_list", "new_parameter_declaration",
    1166   "new_abstract_parameter_declaration", "parameter_declaration",
    1167   "abstract_parameter_declaration", "identifier_list",
    1168   "identifier_or_type_name", "no_01_identifier_or_type_name",
    1169   "no_attr_identifier_or_type_name", "type_name_no_function", "type_name",
    1170   "initializer_opt", "initializer", "initializer_list", "designation",
    1171   "designator_list", "designator", "typegen_declaration_specifier",
    1172   "typegen_type_specifier", "typegen_name", "type_parameter_list",
    1173   "type_parameter", "$@2", "type_class", "assertion_list_opt", "assertion",
    1174   "type_name_list", "type_declaring_list", "type_declarator",
    1175   "type_declarator_name", "trait_specifier", "$@3",
    1176   "trait_declaration_list", "trait_declaration",
     1162  "$@3", "enumerator_list", "enumerator_value_opt",
     1163  "new_parameter_type_list_opt", "new_parameter_type_list",
     1164  "new_parameter_list", "new_abstract_parameter_list",
     1165  "parameter_type_list_opt", "parameter_type_list", "parameter_list",
     1166  "new_parameter_declaration", "new_abstract_parameter_declaration",
     1167  "parameter_declaration", "abstract_parameter_declaration",
     1168  "identifier_list", "identifier_or_type_name",
     1169  "no_01_identifier_or_type_name", "no_attr_identifier_or_type_name",
     1170  "type_name_no_function", "type_name", "initializer_opt", "initializer",
     1171  "initializer_list", "designation", "designator_list", "designator",
     1172  "typegen_declaration_specifier", "typegen_type_specifier",
     1173  "typegen_name", "type_parameter_list", "type_parameter", "$@4",
     1174  "type_class", "assertion_list_opt", "assertion", "type_name_list",
     1175  "type_declaring_list", "type_declarator", "type_declarator_name",
     1176  "trait_specifier", "$@5", "trait_declaration_list", "trait_declaration",
    11771177  "new_trait_declaring_list", "trait_declaring_list", "translation_unit",
    11781178  "external_definition_list", "external_definition_list_opt",
    1179   "external_definition", "$@4", "external_function_definition",
     1179  "external_definition", "$@6", "external_function_definition",
    11801180  "function_definition", "declarator", "subrange", "asm_name_opt",
    11811181  "attribute_list_opt", "attribute_list", "attribute",
     
    12691269     236,   237,   237,   237,   237,   238,   238,   238,   238,   239,
    12701270     239,   239,   239,   240,   240,   240,   241,   241,   241,   241,
    1271      242,   242,   242,   243,   243,   244,   244,   244,   244,   244,
    1272      245,   245,   246,   246,   247,   247,   247,   247,   248,   248,
    1273      248,   248,   249,   249,   250,   250,   250,   250,   250,   251,
    1274      251,   252,   253,   254,   254,   254,   255,   255,   256,   256,
    1275      257,   257,   258,   258,   258,   258,   258,   259,   259,   259,
    1276      259,   260,   260,   261,   261,   262,   262,   263,   263,   263,
    1277      263,   264,   264,   264,   264,   264,   265,   265,   265,   265,
    1278      265,   266,   266,   267,   267,   268,   268,   269,   269,   269,
    1279      270,   270,   270,   271,   271,   271,   272,   272,   272,   273,
    1280      273,   273,   273,   274,   274,   274,   275,   275,   276,   276,
    1281      276,   276,   276,   277,   277,   278,   278,   279,   279,   279,
    1282      279,   279,   279,   280,   280,   280,   280,   281,   281,   281,
    1283      282,   283,   283,   285,   284,   284,   286,   286,   286,   287,
    1284      287,   288,   288,   288,   289,   289,   289,   289,   290,   290,
    1285      290,   291,   291,   292,   292,   293,   294,   293,   295,   295,
    1286      296,   296,   297,   297,   297,   298,   298,   299,   299,   300,
    1287      300,   301,   301,   302,   302,   302,   303,   302,   302,   304,
    1288      304,   304,   305,   305,   305,   305,   305,   305,   305,   305,
    1289      305,   306,   306,   306,   307,   308,   308,   309,   309,   310,
    1290      310,   311,   312,   312,   313,   313,   313,   314,   314,   314,
    1291      314,   315,   315,   315,   315,   316,   316,   317,   317,   317,
    1292      318,   318,   318,   318,   319,   319,   320,   320,   320,   321,
    1293      321,   321,   322,   322,   322,   323,   323,   323,   324,   324,
    1294      324,   325,   325,   325,   326,   326,   326,   327,   327,   327,
    1295      328,   328,   328,   328,   329,   329,   330,   330,   330,   331,
    1296      331,   331,   331,   332,   332,   332,   333,   333,   333,   333,
    1297      334,   334,   334,   335,   335,   335,   335,   336,   336,   336,
    1298      337,   337,   337,   337,   338,   338,   339,   339,   339,   340,
    1299      340,   341,   341,   342,   342,   342,   343,   343,   343,   343,
    1300      343,   344,   344,   344,   344,   345,   345,   345,   346,   346,
    1301      346,   347,   347,   347,   347,   348,   348,   348,   349,   349,
    1302      349,   349,   349,   350,   350,   350,   350,   351,   351,   351,
    1303      352,   352,   352,   353,   353,   353,   353,   353,   353,   354,
    1304      354,   354,   355,   355,   355,   355,   355,   356,   356,   356,
    1305      356,   357,   357,   358,   358,   358,   359,   359,   360,   360,
    1306      360,   360,   360,   360,   361,   361,   361,   361,   361,   361,
    1307      361,   361,   361,   361,   362,   362,   362,   362,   363,   363,
    1308      363,   364,   364,   365,   365,   365,   365,   365,   365,   366,
    1309      366,   366,   366,   366,   366,   367,   368,   368,   368,   369,
    1310      369,   370,   370
     1271     242,   242,   242,   243,   243,   244,   244,   245,   244,   244,
     1272     244,   246,   246,   247,   247,   248,   248,   248,   248,   249,
     1273     249,   249,   249,   250,   250,   251,   251,   251,   251,   251,
     1274     252,   252,   253,   254,   255,   255,   256,   255,   257,   257,
     1275     258,   258,   259,   259,   260,   260,   260,   260,   260,   261,
     1276     261,   261,   261,   262,   262,   263,   263,   264,   264,   265,
     1277     265,   265,   265,   266,   266,   266,   266,   266,   267,   267,
     1278     267,   267,   267,   268,   268,   269,   269,   270,   270,   271,
     1279     271,   271,   272,   272,   272,   273,   273,   273,   274,   274,
     1280     274,   275,   275,   275,   275,   276,   276,   276,   277,   277,
     1281     278,   278,   278,   278,   278,   279,   279,   280,   280,   281,
     1282     281,   281,   281,   281,   281,   282,   282,   282,   282,   283,
     1283     283,   283,   284,   285,   285,   287,   286,   286,   288,   288,
     1284     288,   289,   289,   290,   290,   290,   291,   291,   291,   291,
     1285     292,   292,   292,   293,   293,   294,   294,   295,   296,   295,
     1286     297,   297,   298,   298,   299,   299,   299,   300,   300,   301,
     1287     301,   302,   302,   303,   303,   304,   304,   304,   305,   304,
     1288     304,   306,   306,   306,   307,   307,   307,   307,   307,   307,
     1289     307,   307,   307,   308,   308,   308,   309,   310,   310,   311,
     1290     311,   312,   312,   313,   314,   314,   315,   315,   315,   316,
     1291     316,   316,   316,   317,   317,   317,   317,   318,   318,   319,
     1292     319,   319,   320,   320,   320,   320,   321,   321,   322,   322,
     1293     322,   323,   323,   323,   324,   324,   324,   325,   325,   325,
     1294     326,   326,   326,   327,   327,   327,   328,   328,   328,   329,
     1295     329,   329,   330,   330,   330,   330,   331,   331,   332,   332,
     1296     332,   333,   333,   333,   333,   334,   334,   334,   335,   335,
     1297     335,   335,   336,   336,   336,   337,   337,   337,   337,   338,
     1298     338,   338,   339,   339,   339,   339,   340,   340,   341,   341,
     1299     341,   342,   342,   343,   343,   344,   344,   344,   345,   345,
     1300     345,   345,   345,   346,   346,   346,   346,   347,   347,   347,
     1301     348,   348,   348,   349,   349,   349,   349,   350,   350,   350,
     1302     351,   351,   351,   351,   351,   352,   352,   352,   352,   353,
     1303     353,   353,   354,   354,   354,   355,   355,   355,   355,   355,
     1304     355,   356,   356,   356,   357,   357,   357,   357,   357,   358,
     1305     358,   358,   358,   359,   359,   360,   360,   360,   361,   361,
     1306     362,   362,   362,   362,   362,   362,   363,   363,   363,   363,
     1307     363,   363,   363,   363,   363,   363,   364,   364,   364,   364,
     1308     365,   365,   365,   366,   366,   367,   367,   367,   367,   367,
     1309     367,   368,   368,   368,   368,   368,   368,   369,   370,   370,
     1310     370,   371,   371,   372,   372
    13111311};
    13121312
     
    13501350       3,     1,     2,     2,     2,     4,     4,     4,     4,     1,
    13511351       2,     2,     3,     1,     2,     2,     1,     2,     2,     3,
    1352        1,     2,     2,     1,     1,     4,     2,     5,     7,     2,
    1353        2,     2,     1,     2,     2,     3,     2,     3,     1,     2,
    1354        3,     2,     2,     4,     0,     1,     2,     2,     1,     0,
    1355        1,     2,     2,     5,     6,     2,     2,     4,     0,     2,
    1356        0,     1,     1,     1,     5,     5,     5,     1,     5,     5,
    1357        9,     1,     5,     0,     1,     1,     5,     1,     1,     5,
    1358        5,     1,     3,     3,     4,     1,     1,     1,     1,     2,
    1359        1,     3,     3,     1,     2,     1,     3,     1,     1,     1,
    1360        1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
    1361        1,     1,     2,     0,     2,     2,     1,     4,     0,     1,
    1362        2,     3,     4,     2,     2,     1,     2,     1,     2,     5,
    1363        5,     7,     6,     1,     2,     2,     3,     1,     2,     2,
    1364        4,     2,     4,     0,     4,     2,     1,     1,     1,     0,
    1365        2,     5,     5,    13,     1,     1,     3,     3,     2,     3,
    1366        3,     2,     4,     1,     6,     9,     0,    11,     1,     3,
    1367        3,     3,     1,     1,     5,     2,     5,     0,     1,     1,
    1368        3,     0,     1,     1,     1,     1,     0,     6,     2,     1,
    1369        2,     4,     2,     3,     3,     3,     4,     5,     5,     5,
    1370        6,     1,     1,     1,     3,     0,     5,     0,     1,     1,
    1371        2,     6,     1,     3,     0,     1,     4,     1,     1,     1,
    1372        1,     2,     1,     2,     2,     1,     3,     2,     3,     3,
    1373        2,     4,     4,     3,     8,     3,     2,     1,     2,     6,
    1374        8,     3,     2,     3,     3,     4,     4,     3,     1,     1,
    1375        1,     4,     6,     3,     2,     3,     3,     4,     4,     3,
    1376        2,     1,     2,     2,     1,     3,     2,     3,     3,     2,
    1377        4,     4,     3,     6,     8,     3,     2,     1,     2,     2,
    1378        2,     3,     3,     2,     4,     4,     3,     6,     8,     3,
    1379        2,     1,     2,     2,     1,     1,     2,     3,     3,     2,
    1380        4,     6,     8,     1,     2,     2,     1,     2,     2,     3,
    1381        3,     1,     4,     4,     3,     5,     8,     3,     2,     3,
    1382        1,     5,     5,     6,     6,     1,     2,     2,     1,     2,
     1352       1,     2,     2,     1,     1,     4,     2,     0,     6,     7,
     1353       2,     2,     2,     1,     2,     2,     3,     2,     3,     1,
     1354       2,     3,     2,     2,     4,     0,     1,     2,     2,     1,
     1355       0,     1,     2,     2,     5,     2,     0,     7,     2,     4,
     1356       0,     2,     0,     1,     1,     1,     5,     5,     5,     1,
     1357       5,     5,     9,     1,     5,     0,     1,     1,     5,     1,
     1358       1,     5,     5,     1,     3,     3,     4,     1,     1,     1,
     1359       1,     2,     1,     3,     3,     1,     2,     1,     3,     1,
     1360       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
     1361       2,     1,     1,     1,     2,     0,     2,     2,     1,     4,
     1362       0,     1,     2,     3,     4,     2,     2,     1,     2,     1,
     1363       2,     5,     5,     7,     6,     1,     2,     2,     3,     1,
     1364       2,     2,     4,     2,     4,     0,     4,     2,     1,     1,
     1365       1,     0,     2,     5,     5,    13,     1,     1,     3,     3,
     1366       2,     3,     3,     2,     4,     1,     6,     9,     0,    11,
     1367       1,     3,     3,     3,     1,     1,     5,     2,     5,     0,
     1368       1,     1,     3,     0,     1,     1,     1,     1,     0,     6,
     1369       2,     1,     2,     4,     2,     3,     3,     3,     4,     5,
     1370       5,     5,     6,     1,     1,     1,     3,     0,     5,     0,
     1371       1,     1,     2,     6,     1,     3,     0,     1,     4,     1,
     1372       1,     1,     1,     2,     1,     2,     2,     1,     3,     2,
     1373       3,     3,     2,     4,     4,     3,     8,     3,     2,     1,
     1374       2,     6,     8,     3,     2,     3,     3,     4,     4,     3,
     1375       1,     1,     1,     4,     6,     3,     2,     3,     3,     4,
     1376       4,     3,     2,     1,     2,     2,     1,     3,     2,     3,
     1377       3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
     1378       2,     2,     2,     3,     3,     2,     4,     4,     3,     6,
     1379       8,     3,     2,     1,     2,     2,     1,     1,     2,     3,
     1380       3,     2,     4,     6,     8,     1,     2,     2,     1,     2,
    13831381       2,     3,     3,     1,     4,     4,     3,     5,     8,     3,
    1384        1,     2,     1,     2,     6,     5,     6,     7,     7,     1,
    1385        2,     2,     1,     2,     2,     3,     3,     1,     4,     4,
    1386        3,     8,     3,     1,     1,     2,     1,     1,     2,     3,
    1387        2,     3,     2,     3,     3,     2,     4,     3,     2,     3,
    1388        2,     4,     3,     2,     6,     6,     6,     7,     1,     2,
    1389        1,     1,     1,     2,     3,     2,     3,     2,     3,     3,
    1390        4,     2,     3,     4,     2,     5,     5,     6,     6,     0,
    1391        1,     0,     2
     1382       2,     3,     1,     5,     5,     6,     6,     1,     2,     2,
     1383       1,     2,     2,     3,     3,     1,     4,     4,     3,     5,
     1384       8,     3,     1,     2,     1,     2,     6,     5,     6,     7,
     1385       7,     1,     2,     2,     1,     2,     2,     3,     3,     1,
     1386       4,     4,     3,     8,     3,     1,     1,     2,     1,     1,
     1387       2,     3,     2,     3,     2,     3,     3,     2,     4,     3,
     1388       2,     3,     2,     4,     3,     2,     6,     6,     6,     7,
     1389       1,     2,     1,     1,     1,     2,     3,     2,     3,     2,
     1390       3,     3,     4,     2,     3,     4,     2,     5,     5,     6,
     1391       6,     0,     1,     0,     2
    13921392};
    13931393
     
    13991399     294,   294,   315,   313,   316,   314,   317,   318,   300,   302,
    14001400     301,     0,   303,   329,   321,   326,   324,   325,   323,   322,
    1401      327,   328,   333,   330,   331,   332,   547,   547,   547,     0,
     1401     327,   328,   333,   330,   331,   332,   549,   549,   549,     0,
    14021402       0,     0,   294,   220,   304,   319,   320,     7,   360,     0,
    1403        8,    14,    15,     0,     2,   294,   565,     9,   525,   523,
    1404      247,     3,   453,     3,   260,     0,     3,     3,     3,   248,
     1403       8,    14,    15,     0,     2,   294,   567,     9,   527,   525,
     1404     247,     3,   455,     3,   260,     0,     3,     3,     3,   248,
    14051405       3,     0,     0,     0,   295,   296,   298,   294,   307,   310,
    14061406     312,   341,   286,   334,   339,   287,   349,   288,   356,   353,
    1407      363,     0,     0,   364,   289,   473,   477,     3,     3,     0,
    1408        2,   519,   524,   529,   299,     0,     0,   547,   577,   547,
    1409        2,   588,   589,   590,   294,     0,   731,   732,     0,    12,
     1407     363,     0,     0,   364,   289,   475,   479,     3,     3,     0,
     1408       2,   521,   526,   531,   299,     0,     0,   549,   579,   549,
     1409       2,   590,   591,   592,   294,     0,   733,   734,     0,    12,
    14101410     294,     0,    13,   270,   271,     0,   295,   290,   291,   292,
    1411      293,   526,   305,   392,   548,   549,   370,   371,    12,   444,
    1412      445,    11,   440,   443,     0,   503,   498,   489,   444,   445,
    1413        0,     0,   528,   221,     0,   294,     0,     0,     0,     0,
    1414        0,     0,     0,     0,   294,   294,     2,     0,   733,   295,
    1415      582,   594,   737,   730,   728,   735,     0,     0,     0,   254,
    1416        2,     0,   532,   438,   439,   437,     0,     0,     0,     0,
    1417      547,     0,   634,   635,     0,     0,   545,   541,   547,   562,
    1418      547,   547,   542,     2,   543,   547,   601,   547,   547,   604,
     1411     293,   528,   305,   393,   550,   551,   371,   372,    12,   446,
     1412     447,    11,   442,   445,     0,   505,   500,   491,   446,   447,
     1413       0,     0,   530,   221,     0,   294,     0,     0,     0,     0,
     1414       0,     0,     0,     0,   294,   294,     2,     0,   735,   295,
     1415     584,   596,   739,   732,   730,   737,     0,     0,     0,   254,
     1416       2,     0,   534,   440,   441,   439,     0,     0,     0,     0,
     1417     549,     0,   636,   637,     0,     0,   547,   543,   549,   564,
     1418     549,   549,   544,     2,   545,   549,   603,   549,   549,   606,
    14191419       0,     0,     0,   294,   294,   313,   361,     2,   294,   261,
    1420      297,   308,   342,   354,   478,     0,     2,     0,   453,   262,
    1421      295,   335,   350,   357,   474,     0,     2,     0,   311,   336,
    1422      343,   344,     0,   351,   355,   358,   362,   445,   294,   294,
    1423      366,   369,     0,   395,   475,   479,     0,     0,     0,     1,
    1424      294,     2,   530,   576,   578,   294,     2,   741,   295,   744,
    1425      545,   545,   295,     0,     0,     0,   273,   547,   542,     2,
    1426      294,     0,     0,   294,   550,     2,   501,     2,   554,     0,
     1420     297,   308,   342,   354,   480,     0,     2,     0,   455,   262,
     1421     295,   335,   350,   357,   476,     0,     2,     0,   311,   336,
     1422     343,   344,     0,   351,   355,   358,   362,   447,   294,   294,
     1423     366,   370,     0,   395,   477,   481,     0,     0,     0,     1,
     1424     294,     2,   532,   578,   580,   294,     2,   743,   295,   746,
     1425     547,   547,   295,     0,     0,     0,   273,   549,   544,     2,
     1426     294,     0,     0,   294,   552,     2,   503,     2,   556,     0,
    14271427       0,     0,     0,     0,     0,    18,    59,     4,     5,     6,
    14281428      16,     0,     0,     0,   294,     2,     0,   294,    65,    66,
    14291429      67,    68,    48,    19,    49,    22,    47,    69,     0,    72,
    14301430      76,    79,    82,    87,    90,    92,    94,    96,    98,   100,
    1431      105,   495,   751,   451,   494,     0,   449,   450,     0,   566,
    1432      581,   584,   587,   593,   596,   599,   360,     0,     2,   739,
    1433        0,   294,   742,     2,   294,     3,   425,     0,   433,   295,
    1434      294,   307,   334,   287,   349,   356,     3,     3,   407,   411,
    1435      421,   426,   473,   294,   427,   706,   707,   294,   428,   430,
    1436      294,     2,   583,   595,   729,     2,     2,   249,     2,   458,
    1437        0,   456,   455,   454,   141,     2,     2,   251,     2,     2,
     1431     105,   497,   753,   453,   496,     0,   451,   452,     0,   568,
     1432     583,   586,   589,   595,   598,   601,   360,     0,     2,   741,
     1433       0,   294,   744,     2,   294,     3,   427,     0,   435,   295,
     1434     294,   307,   334,   287,   349,   356,     3,     3,   409,   413,
     1435     423,   428,   475,   294,   429,   708,   709,   294,   430,   432,
     1436     294,     2,   585,   597,   731,     2,     2,   249,     2,   460,
     1437       0,   458,   457,   456,   141,     2,     2,   251,     2,     2,
    14381438     250,     2,   281,     2,   282,     0,   280,     0,     0,     0,
    1439        0,     0,     0,     0,     0,     0,   567,   606,     0,   453,
    1440        2,   561,   570,   660,   563,   564,   533,   294,     2,   600,
    1441      609,   602,   603,     0,   276,   294,   294,   340,   295,     0,
    1442      295,     0,   294,   734,   738,   736,   534,   294,   545,   255,
    1443      263,   309,     0,     2,   535,   294,   499,   337,   338,   283,
    1444      352,   359,     0,   294,     2,   384,   294,   372,     0,     0,
    1445      378,   728,   294,   749,   398,     0,   476,   500,   252,   253,
    1446      520,   294,   435,     0,   294,   237,     0,     2,   239,     0,
     1439       0,     0,     0,     0,     0,     0,   569,   608,     0,   455,
     1440       2,   563,   572,   662,   565,   566,   535,   294,     2,   602,
     1441     611,   604,   605,     0,   276,   294,   294,   340,   295,     0,
     1442     295,     0,   294,   736,   740,   738,   536,   294,   547,   255,
     1443     263,   309,     0,     2,   537,   294,   501,   337,   338,   283,
     1444     352,   359,     0,   294,     2,   385,   294,   373,     0,     0,
     1445     379,   730,     0,   751,   400,     0,   478,   502,   252,   253,
     1446     522,   294,   437,     0,   294,   237,     0,     2,   239,     0,
    14471447     295,     0,   257,     2,   258,   278,     0,     0,     2,   294,
    1448      545,   294,   486,   488,   487,     0,     0,   751,     0,   294,
    1449        0,   294,   490,   294,   560,   558,   559,   557,     0,   552,
    1450      555,     0,     0,   294,    56,   294,    69,    52,   294,    62,
    1451      294,   294,    50,    51,    64,     2,   127,     0,     0,   447,
    1452        0,   446,   111,   294,    54,    55,    17,     0,    29,    30,
     1448     547,   294,   488,   490,   489,     0,     0,   753,     0,   294,
     1449       0,   294,   492,   294,   562,   560,   561,   559,     0,   554,
     1450     557,     0,     0,   294,    56,   294,    69,    52,   294,    62,
     1451     294,   294,    50,    51,    64,     2,   127,     0,     0,   449,
     1452       0,   448,   111,   294,    54,    55,    17,     0,    29,    30,
    14531453      35,     2,     0,    35,   117,   118,   119,   120,   121,   122,
    14541454     123,   124,   125,   126,     0,     0,    53,     0,     0,     0,
    14551455       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1456        0,     0,     0,     0,     0,     0,     0,   108,     2,   646,
    1457      452,   643,   547,   547,   651,   480,   294,     2,   585,   586,
    1458        0,   597,   598,     0,     2,   740,   743,   111,   294,     2,
    1459      294,     0,   708,   295,   712,   703,   704,   710,     0,     2,
    1460        2,   668,   547,   751,   617,   547,   547,   751,   547,   631,
    1461      547,   547,   682,   434,   665,   547,   547,   673,   680,   294,
    1462      429,   295,     0,     0,   294,   718,   295,   723,   751,   715,
    1463      294,   720,   751,   294,   294,   294,     0,   111,     0,    18,
    1464        5,     2,     0,    19,     0,   459,   749,     0,     0,   465,
    1465      241,     0,   294,     0,     0,     0,   545,   569,   573,   575,
    1466      605,   608,   612,   615,   568,   607,     0,   284,   658,     0,
     1456       0,     0,     0,     0,     0,     0,     0,   108,     2,   648,
     1457     454,   645,   549,   549,   653,   482,   294,     2,   587,   588,
     1458       0,   599,   600,     0,     2,   742,   745,   111,   294,     2,
     1459     294,     0,   710,   295,   714,   705,   706,   712,     0,     2,
     1460       2,   670,   549,   753,   619,   549,   549,   753,   549,   633,
     1461     549,   549,   684,   436,   667,   549,   549,   675,   682,   294,
     1462     431,   295,     0,     0,   294,   720,   295,   725,   753,   717,
     1463     294,   722,   753,   294,   294,   294,     0,   111,     0,    18,
     1464       5,     2,     0,    19,     0,   461,   751,     0,     0,   467,
     1465     241,     0,   294,     0,     0,     0,   547,   571,   575,   577,
     1466     607,   610,   614,   617,   570,   609,     0,   284,   660,     0,
    14671467     294,   277,     0,     0,     0,     0,   275,     2,     0,   259,
    1468      536,   294,     0,     0,     0,     0,   294,   294,     0,     0,
    1469      692,   382,   385,   389,   547,   389,   697,   388,   689,   547,
    1470      547,   365,   373,   381,   374,   547,   376,   379,   294,   750,
    1471        0,     0,   396,   749,   295,     3,   414,     3,   418,   417,
    1472      591,     0,   531,   294,     3,     3,   294,   433,   295,     3,
    1473      427,   428,     2,     0,     0,     0,   485,   306,   294,   481,
    1474      483,     3,     2,     2,     0,   502,     3,     0,   554,   129,
     1468     538,   294,     0,     0,     0,     0,   294,   294,     0,     0,
     1469     694,   383,   386,   390,   549,   390,   699,   389,   691,   549,
     1470     549,   365,   374,   382,   375,   549,   377,   380,   294,   752,
     1471       0,     0,   398,     0,   295,     3,   416,     3,   420,   419,
     1472     593,     0,   533,   294,     3,     3,   294,   435,   295,     3,
     1473     429,   430,     2,     0,     0,     0,   487,   306,   294,   483,
     1474     485,     3,     2,     2,     0,   504,     3,     0,   556,   129,
    14751475       0,     0,   222,     0,     0,     0,     2,     0,     0,    36,
    1476        0,     0,   111,   294,    20,     0,    21,     0,   692,   448,
     1476       0,     0,   111,   294,    20,     0,    21,     0,   694,   450,
    14771477       0,   109,     3,     2,    27,     2,     0,    33,     0,     2,
    14781478      25,     0,   106,   107,    73,    74,    75,    77,    78,    80,
    14791479      81,    85,    86,    83,    84,    88,    89,    91,    93,    95,
    1480       97,    99,     0,     0,   752,   294,     0,     0,     0,   647,
    1481      648,   644,   645,   497,   496,   294,     0,     3,   294,   714,
    1482      294,   719,   295,   294,   294,   294,   662,   705,   661,     2,
    1483      294,     0,     0,     0,     0,     0,     0,     0,     0,   683,
    1484        0,   669,   620,   636,   670,     2,   616,   623,   431,   618,
    1485      619,   432,     2,   630,   639,   632,   633,   666,   667,   681,
    1486      709,   713,   711,   751,   268,     2,   745,     2,   422,   717,
    1487      722,   423,     0,   401,     3,     3,     3,     3,   453,     3,
    1488        0,     2,   468,   464,   750,     0,   460,   467,     2,   463,
    1489      466,     0,   294,   242,   264,     3,   272,   274,     0,   453,
    1490        2,   571,   572,     2,   610,   611,     0,   659,   537,     3,
    1491      346,   345,   348,   347,   294,   538,     0,   539,   294,   375,
    1492      377,     2,     0,     0,     0,     0,   104,   391,   693,   694,
    1493      386,   390,   387,   690,   691,   380,   384,   367,   398,   393,
    1494      399,     0,     0,     0,   436,   240,     0,     0,     3,     2,
    1495      668,   429,     0,   527,     0,   751,   489,     0,   294,   294,
    1496      294,     0,   551,   553,   130,     0,     0,   215,     0,     0,
     1480      97,    99,     0,     0,   754,   294,     0,     0,     0,   649,
     1481     650,   646,   647,   499,   498,   294,     0,     3,   294,   716,
     1482     294,   721,   295,   294,   294,   294,   664,   707,   663,     2,
     1483     294,     0,     0,     0,     0,     0,     0,     0,     0,   685,
     1484       0,   671,   622,   638,   672,     2,   618,   625,   433,   620,
     1485     621,   434,     2,   632,   641,   634,   635,   668,   669,   683,
     1486     711,   715,   713,   753,   268,     2,   747,     2,   424,   719,
     1487     724,   425,     0,   403,     3,     3,     3,     3,   455,     3,
     1488       0,     2,   470,   466,   752,     0,   462,   469,     2,   465,
     1489     468,     0,   294,   242,   264,     3,   272,   274,     0,   455,
     1490       2,   573,   574,     2,   612,   613,     0,   661,   539,     3,
     1491     346,   345,   348,   347,   294,   540,     0,   541,   294,   376,
     1492     378,     2,     0,     0,     0,     0,   104,   392,   695,   696,
     1493     387,   391,   388,   692,   693,   381,   385,   294,   400,   394,
     1494     401,   751,     0,     0,   438,   240,     0,     0,     3,     2,
     1495     670,   431,     0,   529,     0,   753,   491,     0,   294,   294,
     1496     294,     0,   553,   555,   130,     0,     0,   215,     0,     0,
    14971497       0,   223,   224,    57,     0,    63,   294,     0,    61,    60,
    1498        0,   128,   693,   458,    70,    71,   110,   115,     3,   109,
     1498       0,   128,   695,   460,    70,    71,   110,   115,     3,   109,
    14991499       0,     0,     0,    24,    35,     3,     0,    32,   102,     0,
    1500        3,   650,   654,   657,   649,     3,   592,     3,   716,   721,
    1501        2,   294,     3,     3,   295,     0,     3,   622,   626,   629,
    1502      638,   672,   676,   679,   294,     3,   621,   637,   671,   294,
    1503      294,   424,   294,   294,   746,     0,     0,     0,     0,   256,
    1504        0,   104,     0,     3,     3,     0,   461,     0,   457,     0,
     1500       3,   652,   656,   659,   651,     3,   594,     3,   718,   723,
     1501       2,   294,     3,     3,   295,     0,     3,   624,   628,   631,
     1502     640,   674,   678,   681,   294,     3,   623,   639,   673,   294,
     1503     294,   426,   294,   294,   748,     0,     0,     0,     0,   256,
     1504       0,   104,     0,     3,     3,     0,   463,     0,   459,     0,
    15051505       0,   245,   294,     0,     0,   129,     0,     0,     0,     0,
    15061506       0,   129,     0,     0,   109,   109,     2,     0,     0,     0,
    15071507       3,   131,   132,     2,   143,   133,   134,   135,   136,   137,
    1508      138,   145,   147,     0,     0,     0,   285,   294,   294,   547,
    1509        0,   540,   294,   111,   696,   700,   702,   695,   383,   397,
    1510      394,   579,     2,   664,   663,     0,   669,     2,   482,   484,
    1511      504,     3,   512,   513,     0,     2,   508,     3,     3,     0,
    1512        0,   556,   222,     0,     0,     0,   222,     0,     0,     3,
    1513       37,   749,   109,     0,     3,   661,    42,     3,    40,     3,
    1514       34,     0,     3,   101,   103,     0,     2,   652,   653,     0,
    1515        0,   294,     0,     0,     0,     3,   638,     0,     2,   624,
    1516      625,     2,   640,     2,   674,   675,     0,     0,     3,     0,
    1517        3,     3,     3,     3,   409,   408,   412,     2,     2,   748,
    1518      747,   112,     0,     0,     0,     0,     3,   462,     3,     0,
    1519      243,   146,     3,   295,   294,     0,     0,     0,     0,     2,
    1520      191,     0,   189,     0,     0,     0,     0,     0,     0,     0,
    1521        0,   111,     0,   547,   151,   148,   294,     0,     0,   267,
    1522      279,     3,     3,   546,   613,   368,     2,   698,   699,   294,
    1523      266,   294,     0,   515,   492,   294,     0,     0,   491,   506,
    1524        0,     0,     0,   216,     0,   225,    58,   109,     0,     0,
    1525      116,   113,     0,     0,     0,     0,     0,     0,    23,     0,
    1526      655,   294,   580,   265,   724,   725,   726,     0,   677,   294,
    1527      294,   294,     3,     3,     0,   685,     0,     0,     0,     0,
    1528      294,   294,     3,   544,   469,   470,     0,     0,   246,   295,
    1529        0,     0,     0,     0,   294,   192,   190,     0,   187,   193,
    1530        0,     0,     0,     0,   197,   200,   198,   194,     0,   195,
    1531       35,   129,   144,   142,   244,     0,     0,   294,   416,   420,
    1532      419,     0,   509,     2,   510,     2,   511,   505,   294,   228,
    1533        0,   226,     0,   228,     3,   661,    31,   114,     2,    45,
    1534        2,    43,    41,    28,   112,    26,     3,   727,     3,     3,
    1535        3,     0,     0,   684,   686,   627,   641,   269,     2,   406,
    1536        3,   405,     0,   472,   469,   129,     0,     0,   129,     3,
    1537        0,   129,   188,     0,     2,     2,   209,   199,     0,     0,
    1538        0,     0,   140,   574,   614,     3,     2,     0,     0,     2,
    1539      229,     0,     0,   217,     0,     0,     0,     0,     0,     0,
    1540        0,     0,     0,   687,   688,   294,     0,   471,   152,     0,
    1541        0,     2,   165,   129,   154,     0,   182,     0,   129,     0,
    1542        2,   156,     0,     2,     0,     2,     2,     2,   196,    32,
    1543        0,   294,   514,   516,   507,     0,     0,     0,     0,   114,
    1544       38,     3,     3,   656,   628,   642,   678,   410,   129,   158,
    1545      161,     0,   160,   164,     3,   167,   166,     0,   129,   184,
    1546      129,     3,     0,   294,     0,   294,     0,     2,     0,     2,
    1547      139,   701,     2,   230,   231,     0,   227,   218,     0,     0,
    1548        0,   153,     0,     0,   163,   233,   168,     2,   235,   183,
    1549        0,   186,   172,   201,     3,   210,   214,   203,     3,     0,
    1550      294,     0,   294,     0,     0,     0,    39,    46,    44,   159,
    1551      162,   129,     0,   169,   294,   129,   129,     0,   173,     0,
    1552        0,   692,   211,   212,   213,     0,   202,     3,   204,     3,
    1553      294,   219,   232,   149,   170,   155,   129,   236,   185,   180,
    1554      178,   174,   157,   129,     0,   693,     0,     0,     0,     0,
    1555      150,   171,   181,   175,   179,   178,   176,     3,     3,     0,
    1556        0,   493,   177,   205,   207,     3,     3,   206,   208
     1508     138,   145,   147,     0,     0,     0,   285,   294,   294,   549,
     1509       0,   542,   294,   111,   698,   702,   704,   697,   384,   368,
     1510     399,     0,   581,     2,   666,   665,     0,   671,     2,   484,
     1511     486,   506,     3,   514,   515,     0,     2,   510,     3,     3,
     1512       0,     0,   558,   222,     0,     0,     0,   222,     0,     0,
     1513       3,    37,   751,   109,     0,     3,   663,    42,     3,    40,
     1514       3,    34,     0,     3,   101,   103,     0,     2,   654,   655,
     1515       0,     0,   294,     0,     0,     0,     3,   640,     0,     2,
     1516     626,   627,     2,   642,     2,   676,   677,     0,     0,     3,
     1517       0,     3,     3,     3,     3,   411,   410,   414,     2,     2,
     1518     750,   749,   112,     0,     0,     0,     0,     3,   464,     3,
     1519       0,   243,   146,     3,   295,   294,     0,     0,     0,     0,
     1520       2,   191,     0,   189,     0,     0,     0,     0,     0,     0,
     1521       0,     0,   111,     0,   549,   151,   148,   294,     0,     0,
     1522     267,   279,     3,     3,   548,   615,   369,     2,   700,   701,
     1523     397,   294,   266,   294,     0,   517,   494,   294,     0,     0,
     1524     493,   508,     0,     0,     0,   216,     0,   225,    58,   109,
     1525       0,     0,   116,   113,     0,     0,     0,     0,     0,     0,
     1526      23,     0,   657,   294,   582,   265,   726,   727,   728,     0,
     1527     679,   294,   294,   294,     3,     3,     0,   687,     0,     0,
     1528       0,     0,   294,   294,     3,   546,   471,   472,     0,     0,
     1529     246,   295,     0,     0,     0,     0,   294,   192,   190,     0,
     1530     187,   193,     0,     0,     0,     0,   197,   200,   198,   194,
     1531       0,   195,    35,   129,   144,   142,   244,     0,     0,   294,
     1532     418,   422,   421,     0,   511,     2,   512,     2,   513,   507,
     1533     294,   228,     0,   226,     0,   228,     3,   663,    31,   114,
     1534       2,    45,     2,    43,    41,    28,   112,    26,     3,   729,
     1535       3,     3,     3,     0,     0,   686,   688,   629,   643,   269,
     1536       2,   408,     3,   407,     0,   474,   471,   129,     0,     0,
     1537     129,     3,     0,   129,   188,     0,     2,     2,   209,   199,
     1538       0,     0,     0,     0,   140,   576,   616,     3,     2,     0,
     1539       0,     2,   229,     0,     0,   217,     0,     0,     0,     0,
     1540       0,     0,     0,     0,     0,   689,   690,   294,     0,   473,
     1541     152,     0,     0,     2,   165,   129,   154,     0,   182,     0,
     1542     129,     0,     2,   156,     0,     2,     0,     2,     2,     2,
     1543     196,    32,     0,   294,   516,   518,   509,     0,     0,     0,
     1544       0,   114,    38,     3,     3,   658,   630,   644,   680,   412,
     1545     129,   158,   161,     0,   160,   164,     3,   167,   166,     0,
     1546     129,   184,   129,     3,     0,   294,     0,   294,     0,     2,
     1547       0,     2,   139,   703,     2,   230,   231,     0,   227,   218,
     1548       0,     0,     0,   153,     0,     0,   163,   233,   168,     2,
     1549     235,   183,     0,   186,   172,   201,     3,   210,   214,   203,
     1550       3,     0,   294,     0,   294,     0,     0,     0,    39,    46,
     1551      44,   159,   162,   129,     0,   169,   294,   129,   129,     0,
     1552     173,     0,     0,   694,   211,   212,   213,     0,   202,     3,
     1553     204,     3,   294,   219,   232,   149,   170,   155,   129,   236,
     1554     185,   180,   178,   174,   157,   129,     0,   695,     0,     0,
     1555       0,     0,   150,   171,   181,   175,   179,   178,   176,     3,
     1556       3,     0,     0,   495,   177,   205,   207,     3,     3,   206,
     1557     208
    15571558};
    15581559
     
    15611562{
    15621563      -1,   840,   475,   302,    46,   132,   133,   303,   304,   305,
    1563      306,   786,   787,  1147,  1148,   307,   308,   309,   310,   311,
     1564     306,   786,   787,  1148,  1149,   307,   308,   309,   310,   311,
    15641565     312,   313,   314,   315,   316,   317,   318,   319,   320,  1052,
    1565      526,   997,   322,   998,   555,   974,  1079,  1543,  1081,  1082,
    1566     1083,  1084,  1544,  1085,  1086,  1460,  1461,  1422,  1423,  1424,
    1567     1522,  1523,  1527,  1528,  1563,  1564,  1087,  1380,  1088,  1089,
    1568     1314,  1315,  1316,  1504,  1090,   144,   980,   981,   982,  1401,
    1569     1485,  1496,  1497,   476,   477,   902,   903,  1060,    49,    50,
     1566     526,   997,   322,   998,   555,   974,  1079,  1545,  1081,  1082,
     1567    1083,  1084,  1546,  1085,  1086,  1462,  1463,  1424,  1425,  1426,
     1568    1524,  1525,  1529,  1530,  1565,  1566,  1087,  1382,  1088,  1089,
     1569    1316,  1317,  1318,  1506,  1090,   144,   980,   981,   982,  1403,
     1570    1487,  1498,  1499,   476,   477,   902,   903,  1060,    49,    50,
    15701571      51,    52,    53,   346,   157,    56,    57,    58,    59,    60,
    15711572     348,    62,    63,   262,    65,    66,   273,   350,   351,    69,
    15721573      70,    71,    72,   117,    74,   203,   353,   118,    77,   119,
    1573       79,    80,    81,   456,   457,   458,   459,   701,   940,   702,
    1574       82,    83,   463,   722,   882,   883,   356,   357,   725,   726,
    1575      727,   358,   359,   360,   361,   473,   340,   134,   135,   530,
    1576      324,   169,   655,   656,   657,   658,   659,    84,   120,    86,
    1577      496,   497,   966,   498,   276,   502,   325,    87,   136,   137,
    1578       88,  1338,  1125,  1126,  1127,  1128,    89,    90,   743,    91,
    1579      272,    92,    93,   186,  1054,   689,   411,   124,    94,   508,
    1580      509,   510,   187,   267,   189,   190,   191,   268,    97,    98,
    1581       99,   100,   101,   102,   103,   194,   195,   196,   197,   198,
    1582      852,   614,   615,   616,   617,   199,   619,   620,   621,   580,
    1583      581,   582,   583,   706,   104,   623,   624,   625,   626,   627,
    1584      628,   939,   708,   709,   710,   604,   364,   365,   366,   367,
    1585      326,   163,   106,   107,   108,   369,   720,   577
     1574      79,    80,   462,    81,   456,   457,   458,   459,   701,   940,
     1575     702,    82,    83,   465,   463,   722,   882,   883,   356,   357,
     1576     725,   726,   727,   358,   359,   360,   361,   473,   340,   134,
     1577     135,   530,   324,   169,   655,   656,   657,   658,   659,    84,
     1578     120,    86,   496,   497,   966,   498,   276,   502,   325,    87,
     1579     136,   137,    88,  1340,  1126,  1127,  1128,  1129,    89,    90,
     1580     743,    91,   272,    92,    93,   186,  1054,   689,   411,   124,
     1581      94,   508,   509,   510,   187,   267,   189,   190,   191,   268,
     1582      97,    98,    99,   100,   101,   102,   103,   194,   195,   196,
     1583     197,   198,   852,   614,   615,   616,   617,   199,   619,   620,
     1584     621,   580,   581,   582,   583,   706,   104,   623,   624,   625,
     1585     626,   627,   628,   939,   708,   709,   710,   604,   364,   365,
     1586     366,   367,   326,   163,   106,   107,   108,   369,   720,   577
    15861587};
    15871588
    15881589/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    15891590   STATE-NUM.  */
    1590 #define YYPACT_NINF -1356
     1591#define YYPACT_NINF -1332
    15911592static const yytype_int16 yypact[] =
    15921593{
    1593     5863,  4890, -1356,    65, -1356, -1356, -1356, -1356, -1356, -1356,
    1594    -1356,     9, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
    1595    -1356, -1356, -1356, -1356, -1356, -1356,   139,   139,   139,  1216,
    1596      781,    63,  4761,   238, -1356, -1356, -1356, -1356, -1356,   165,
    1597    -1356, -1356, -1356,   572,   207,  2350, -1356, -1356, -1356, -1356,
    1598    -1356, -1356,    59,   217, -1356,  1506, -1356, -1356, -1356, -1356,
    1599      220,  1734,   341,    66,  7480, -1356, -1356,  9240,  1240, -1356,
    1600    -1356, -1356,  1320,   351,  3183,  1125,   757,  1320,  1149, -1356,
    1601    -1356,  1042,   895, -1356,  1320,  1227, -1356,   243, -1356,   378,
    1602      403, -1356, -1356, -1356, -1356,   303,   217,   139, -1356,   139,
    1603    -1356, -1356, -1356, -1356,  9019,  1506, -1356, -1356,  1506, -1356,
    1604     9774,   314, -1356, -1356, -1356,  1811,  9812, -1356,   726,   726,
    1605      726, -1356, -1356, -1356,   139, -1356, -1356, -1356,   353,   381,
    1606      400, -1356, -1356, -1356,   417, -1356, -1356, -1356, -1356, -1356,
    1607      424,   436, -1356, -1356,    28,  8867,  2398,   371,   447,   459,
    1608      467,   482,   495,   557,  8670,  6999,   468,   584, -1356,  9350,
    1609    -1356, -1356, -1356, -1356,   594, -1356,   335,  4628,  4628, -1356,
    1610      575,   352, -1356, -1356, -1356, -1356,   602,   432,   434,   470,
    1611      139,   624, -1356, -1356,  1734,  1711,   656, -1356,    68, -1356,
    1612      139,   139,   217, -1356, -1356,    93, -1356,   139,   139, -1356,
    1613     2093,   670,   699,   726,  6910, -1356, -1356,   654,  2350, -1356,
    1614    -1356,  1320, -1356, -1356, -1356,   217, -1356,  1506,    59, -1356,
    1615     7819, -1356,   726,   726,   726,   217, -1356,  1216, -1356,  6673,
    1616    -1356, -1356,   659,   726, -1356,   726, -1356,   165,  8867,  8784,
    1617      714, -1356,   781,   740,   726, -1356,  1216,   737,   749, -1356,
    1618     4761,   791, -1356, -1356, -1356,  4061, -1356, -1356,  7390, -1356,
    1619      656,    62,  9812, 10718,  1811,  2093, -1356,   152, -1356, -1356,
    1620     9774,  1506,   770,  7511, -1356, -1356,   269, -1356,  3425,   779,
    1621      827,  3643,   814, 10872, 10930, -1356,   817, -1356, -1356, -1356,
    1622    -1356, 10949, 10949,   791,  8525,   818, 10872,  8981, -1356, -1356,
    1623    -1356, -1356, -1356, -1356,   855, -1356,   889,  2173, 10872, -1356,
    1624      498,   751,   809,   524,   880,   822,   831,   819,   869,     5,
    1625    -1356, -1356,   883,    64, -1356,   116, -1356, -1356,  2398, -1356,
    1626    -1356,   516,   900, -1356,   644,   900,   913,   165, -1356, -1356,
    1627      915,  9019, -1356,   916,  8639, -1356, -1356,  1004,  1539,  8240,
    1628     6910,  1320, -1356,  1320,   726,   726, -1356, -1356, -1356, -1356,
    1629    -1356, -1356,   726,  9885,  1506, -1356, -1356,  9923,  1500, -1356,
    1630     7969, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   929,  5043,
    1631    10872, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
    1632    -1356, -1356, -1356, -1356, -1356,  1811, -1356,   876,   936,   938,
    1633      944,   885,   947,   954,   957,  1711, -1356, -1356,   930,    59,
    1634      960, -1356, -1356,   970, -1356, -1356, -1356,  4061, -1356, -1356,
    1635    -1356, -1356, -1356,  2093, -1356,  8867,  8867, -1356,   726,  1811,
    1636     7030,  1506,  8313, -1356, -1356, -1356, -1356,  4061,    62, -1356,
    1637    -1356,  1320,   217, -1356, -1356,  4061, -1356,  6793, -1356, -1356,
    1638      726,   726,   472,  9953,   974,  1092,  5671, -1356,   521,   543,
    1639      781, -1356,  8784,   976,   959,   781,   726, -1356, -1356, -1356,
    1640    -1356, 10252, -1356,   560,  6550, -1356,   217,   981, -1356,  1811,
    1641    11070, 10776, -1356, -1356, -1356, -1356,   921,  2093, -1356,  8386,
    1642      656,  6061, -1356, -1356, -1356,   820,   612,   883,   781,  7511,
    1643     1338,  9774, -1356,  7511, -1356, -1356, -1356, -1356,   638, -1356,
    1644      994,   827,   255,  8525, -1356,  9953, -1356, -1356,  8525, -1356,
    1645     8753,  8525, -1356, -1356, -1356,   993, -1356,   665,   998,   161,
    1646     1002, -1356,  9490,  6639, -1356, -1356, -1356,   290, -1356, -1356,
    1647    10795, -1356,   366, 10795, -1356, -1356, -1356, -1356, -1356, -1356,
    1648    -1356, -1356, -1356, -1356, 10718, 10718, -1356, 10872, 10872, 10872,
    1649    10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872,
    1650    10872, 10872, 10872, 10872, 10872,  5362, 10718, -1356,    64,  1168,
    1651    -1356, -1356,   139,   139, -1356, -1356,  8867, -1356, -1356,   970,
    1652      791, -1356,   970, 10853, -1356, -1356, -1356,  3524,  6639,  1016,
    1653     9095,  1028, -1356, 10035, -1356, -1356,   594, -1356,  1029,   776,
    1654     1036,  1922,   164,   883, -1356,   139,   139,   883,   174, -1356,
    1655      139,   139,   970, -1356, -1356,   139,   139, -1356,   900, 10065,
    1656     1506, 11215,   233,   347, 10065, -1356, 10214, -1356,   883, -1356,
    1657     9885, -1356,   125,  7935,  7935,  7935,  1506, -1356,  6115,  1033,
    1658      414,   929,  1150,  1037,  1038, -1356,  1054,  4628,   555, -1356,
    1659     1124,  1506,  7935,   791,  1811,   791,   656,   704,   900, -1356,
    1660    -1356,   729,   900, -1356, -1356, -1356,   827, -1356,   900,   217,
    1661    10252, -1356,   666,  1061,   679,  1062, -1356,  1065,   217, -1356,
    1662    -1356,  4061,   217,  1059,   553,   573, 10103,  7119,  1590, 10872,
    1663     1954, -1356, -1356,  1066,    39,  1066, -1356, -1356, -1356,   139,
    1664      139, -1356, -1356,   781, -1356,   139, -1356, -1356,  9630,   781,
    1665     1069, 10872, -1356,   976, 11215, -1356, -1356,  1075, -1356, -1356,
    1666    -1356,   791, -1356, 11143, 10872, -1356,  7935,   588,  8240, -1356,
    1667    -1356,   594,  1072,  1077,   820,  2542, -1356, -1356,  7511, -1356,
    1668    -1356,  1074, -1356, -1356,  1088, -1356,  1074,  1090,  3425, 10718,
    1669      205,  1073,    47,  1094,  1082,  1100,   818,  1102,  1110, -1356,
    1670     1113,  1117,  9661,  6759, -1356, 10718, -1356,   161,  1861, -1356,
    1671     6396, 10718,  1120, -1356, -1356,   929,   689, -1356, 10718, -1356,
    1672    -1356,   865, -1356, -1356, -1356, -1356, -1356,   498,   498,   751,
    1673      751,   809,   809,   809,   809,   524,   524,   880,   822,   831,
    1674      819,   869, 10872,   875, -1356, 10252,  1119,  1140,  1142,  1168,
    1675    -1356, -1356, -1356, -1356, -1356, 10252,   691, 10872,  7935, -1356,
    1676     9885, -1356,  7239,  9209,  8905,  6999, -1356, -1356, -1356,   776,
    1677    10252,   927,  1145,  1152,  1158,  1159,  1162,  1166,  1172, -1356,
    1678     4275,  1922, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
    1679    -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   970,
    1680    -1356, -1356, -1356,   883, -1356, -1356, -1356, -1356, -1356, -1356,
    1681    -1356, -1356,  1176, -1356,  1183,  1185, -1356, -1356,    59,  1120,
    1682     6115, -1356, -1356, -1356,  5043,  1144, -1356, -1356, -1356, -1356,
    1683    -1356,   781,  6242,  1231, -1356, -1356, -1356, -1356,  1165,    59,
    1684    -1356, -1356,   970, -1356, -1356,   970,    29,   970, -1356, -1356,
    1685    -1356, -1356, -1356, -1356,  9380, -1356,   217, -1356,  8784, -1356,
    1686    -1356,  1190,   906,  1187,  1193,  1198, -1356, -1356,  1954, -1356,
    1687    -1356, -1356, -1356, -1356, -1356, -1356,  1092, -1356,   959, -1356,
    1688    -1356,  1195,  1202,  1201, -1356, -1356,  1206,  1210, -1356,   588,
    1689     2182, -1356,   533, -1356,  2542,   883, -1356,  1213,  7511, 10176,
    1690     8867,  1220, -1356, -1356,  1218,  1222,  1224, -1356, 10872,   230,
    1691       -1,  1219, -1356,  1225,   791,  1225,  6639, 10718, -1356, -1356,
    1692     1225, -1356,  1861,  5043, -1356, -1356, -1356, -1356,  1236, 10718,
    1693     1233,   791,  6115, -1356, 10795, -1356,   791, -1356, -1356, 10718,
    1694    -1356,   782,   900, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
    1695      929,  8639, -1356, -1356,  7359,  1237, -1356,   807,   900, -1356,
    1696      825,   836,   900, -1356,   726,  4460, -1356, -1356, -1356, 10252,
    1697    10252, -1356,  8313,  8313, -1356,  1241,  1248,  1246,  1259, -1356,
    1698     1262,   672,   244,  1120, -1356,   791, -1356,  4628, -1356, 10718,
    1699      578, -1356,  6519,  1267,  1271, 10660,  1272,  1277,   122,   304,
    1700      298, 10718,  1279,   217, 10718, 10718,  1280,   678,  1254,  1261,
    1701    -1356, -1356, -1356,  1284, -1356, -1356, -1356, -1356, -1356, -1356,
    1702    -1356, -1356, -1356,   781,  1290, 10718, -1356, 10252, 10252,   139,
    1703     1292, -1356,  9743,  9520,   847,   900, -1356, -1356, -1356, -1356,
    1704    -1356, -1356, -1356, -1356, -1356,  1293,  2182, -1356, -1356,  1275,
    1705    -1356,  1074, -1356, -1356,  1811,  1296, -1356, -1356, -1356,   706,
    1706     1291, -1356,    47,  1305, 10872,  1288,    47,    47,  1314,  1310,
    1707    -1356,  1054, 10718,  1315,  1236,   711,   214,  1317, -1356,  1310,
    1708    -1356,  1323,  1317, -1356, -1356,  1328, -1356, -1356,   970,  1329,
    1709     1330,  6879,  1331,  1339,  1341, -1356, -1356,  1340, -1356, -1356,
    1710      970, -1356, -1356, -1356, -1356,   970, 10718, 10718, 10872,  1344,
    1711    -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
    1712    -1356, -1356, 10872, 10872,  1347,  1349,  1317, -1356, -1356,   781,
    1713    -1356, -1356, -1356,  7746, 10176, 10718, 10718,  1394, 10718, -1356,
    1714    -1356,  1333, -1356,  1334, 10718,  1335,  1343, 10718,   992,  1345,
    1715       36,  8158,  1229,   139, -1356, -1356,  6242,  1348,   585, -1356,
    1716    -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   970, 10478,
    1717    -1356,  8386,  1360, -1356, -1356, 10176,   592,   598, -1356,  1356,
    1718     1355,   827,  1366, -1356,   179, -1356, -1356, 10718,  1368,  1363,
    1719    -1356, -1356,  1369,   484,   663,   791,  1376,  1378, -1356,  1380,
    1720    -1356, 10252, -1356, -1356, -1356, -1356, -1356,  1382, -1356, 10252,
    1721    10252, 10252, -1356, -1356,  1386, -1356,  1389,  1392,  1393,   682,
    1722     8008,  8124, -1356, -1356,   370, -1356,  1396,  1397, -1356,  8459,
    1723      715,   725,  1395,   760,  6377, -1356, -1356,   641, -1356, -1356,
    1724      796,  1402,  1403,   217,  1453,   961, -1356, -1356, 10718, -1356,
    1725    10795, 10660, -1356, -1356, -1356,  1406,  1407, 10252, -1356, -1356,
    1726    -1356,  1405, -1356, -1356, -1356, -1356, -1356, -1356, 10176,   827,
    1727      287, -1356,  1388,   827,  1236,   361, -1356, -1356, -1356, -1356,
    1728    -1356, -1356, -1356, -1356,  1408, -1356, -1356, -1356, -1356, -1356,
    1729    -1356,  1411,  1412, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
    1730     1418, -1356,  1417, -1356, -1356, 10660,   272, 10718, 10660, -1356,
    1731     1422, 10718, -1356,   306,  1438,  1441, -1356, -1356,  1430,  1431,
    1732     1413,   918, -1356, -1356, -1356, -1356, -1356,  1506,  1811,  1433,
    1733      855,   946, 10872, -1356,   801,  1439, 10718,   791,   791,  1442,
    1734     1448,  1449,  1450, -1356, -1356,  8313,  1452, -1356,  1535, 10872,
    1735     1462, -1356, -1356, 10571, -1356,   803, -1356,  1460, 10660,  1463,
    1736    -1356, -1356,  1489, -1356,  1493, -1356,  1511,  1512, -1356,  1480,
    1737     1508, 10176, -1356, -1356, -1356,   827,   791,  1514,  1484,  1509,
    1738    -1356,  1317,  1317, -1356, -1356, -1356, -1356, -1356, 10660,   301,
    1739    -1356,   958, -1356, -1356,  7597, -1356, -1356,  1502, 10718, -1356,
    1740    10718,  7597,   217,  9953,   217,  9953,  1515, -1356,  1522, -1356,
    1741    -1356, -1356,  1520,   855, -1356,   811, -1356, -1356, 10718,  1526,
    1742     1527, -1356, 10872, 10872, -1356, -1356,  1055,   154, -1356, -1356,
    1743     1510, -1356,  1055, -1356, -1356,  1716,   791, -1356, -1356,   217,
    1744     9953,   217,  9953,  1532,  1517,   791, -1356, -1356, -1356, -1356,
    1745    -1356, 10571,  1528,  1055,  7673, 10718, 10482,  1531,  1055,  1537,
    1746     1716,  2045, -1356, -1356, -1356,  1545, -1356, -1356, -1356, -1356,
    1747     8867, -1356, -1356, -1356, 10349, -1356, 10571, -1356, -1356,  1529,
    1748    10256, -1356, -1356, 10482,   217,  2045,   217,  1558,  1559,   815,
    1749    -1356, 10349, -1356, -1356, -1356, 10256, -1356, -1356, -1356,   217,
    1750      217, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356
     1594    3506,  8076, -1332,    12, -1332, -1332, -1332, -1332, -1332, -1332,
     1595   -1332,    61, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
     1596   -1332, -1332, -1332, -1332, -1332, -1332,   102,   102,   102,  1011,
     1597    1062,    86,  5961,   228, -1332, -1332, -1332, -1332, -1332,   138,
     1598   -1332, -1332, -1332,   684,   144,  9470, -1332, -1332, -1332, -1332,
     1599   -1332, -1332,   190,   182, -1332,  1658, -1332, -1332, -1332, -1332,
     1600     201,  1834,   303,    32,  4928, -1332, -1332,  9508,  1650, -1332,
     1601   -1332, -1332,   615,   401,  4443,   184,   589,   615,  1225, -1332,
     1602   -1332,   848,   938, -1332,   615,  1259, -1332,   301, -1332,   486,
     1603     503, -1332, -1332, -1332, -1332,   316,   182,   102, -1332,   102,
     1604   -1332, -1332, -1332, -1332,  9240,  1658, -1332, -1332,  1658, -1332,
     1605    9354,   391, -1332, -1332, -1332,  1948,  9876, -1332,   810,   810,
     1606     810, -1332, -1332, -1332,   102, -1332, -1332, -1332,   426,   447,
     1607     456, -1332, -1332, -1332,   477, -1332, -1332, -1332, -1332, -1332,
     1608     485,   495, -1332, -1332,    36,  8974,  2459,   272,   545,   579,
     1609     623,   632,   671,   733,  8777,  7372,   596,   719, -1332,  9546,
     1610   -1332, -1332, -1332, -1332,   739, -1332,   209,  3245,  3245, -1332,
     1611     760,   213, -1332, -1332, -1332, -1332,   770,   237,   353,   362,
     1612     102,   755, -1332, -1332,  1834,  1803,   846, -1332,    70, -1332,
     1613     102,   102,   182, -1332, -1332,    98, -1332,   102,   102, -1332,
     1614    2479,   820,   843,   810,  5405, -1332, -1332,   844,  9470, -1332,
     1615   -1332,   615, -1332, -1332, -1332,   182, -1332,  1658,   190, -1332,
     1616    7926, -1332,   810,   810,   810,   182, -1332,  1011, -1332,  2880,
     1617   -1332, -1332,   827,   810, -1332,   810, -1332,   138,  8974,  8891,
     1618     857, -1332,  1062,   864,   810, -1332,  1011,   870,   879, -1332,
     1619    5961,   735, -1332, -1332, -1332,  9437, -1332, -1332,  3894, -1332,
     1620     846,    69,  9876,  6310,  1948,  2479, -1332,   114, -1332, -1332,
     1621    9354,  1658,   875, 11374, -1332, -1332,   546, -1332, 11116,   886,
     1622     926, 10861,   905, 10919, 10938, -1332,   919, -1332, -1332, -1332,
     1623   -1332, 10996, 10996,   735,  8632,   928, 10919,  9088, -1332, -1332,
     1624   -1332, -1332, -1332, -1332,   949, -1332,   840,  2531, 10919, -1332,
     1625     516,   336,   425,   270,   704,   934,   936,   960,   997,    52,
     1626   -1332, -1332,   974,   356, -1332,   290, -1332, -1332,  2459, -1332,
     1627   -1332,   600,   996, -1332,   701,   996,  1007,   138, -1332, -1332,
     1628    1010,  9240, -1332,  1018,  8746, -1332, -1332,  1849,  1084,  8347,
     1629    5405,   615, -1332,   615,   810,   810, -1332, -1332, -1332, -1332,
     1630   -1332, -1332,   810,  9914,  1658, -1332, -1332,  9987,  1975, -1332,
     1631    9012, -1332, -1332, -1332, -1332, -1332, -1332, -1332,  1030,  3059,
     1632   10919, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
     1633   -1332, -1332, -1332, -1332, -1332,  1948, -1332,   773,  1012,  1034,
     1634    1040,   889,  1045,  1051,  1053,  1803, -1332, -1332,  1063,   190,
     1635    1064, -1332, -1332,  1066, -1332, -1332, -1332,  9437, -1332, -1332,
     1636   -1332, -1332, -1332,  2479, -1332,  8974,  8974, -1332,   810,  1948,
     1637    6923,  1658,  8420, -1332, -1332, -1332, -1332,  9437,    69, -1332,
     1638   -1332,   615,   182, -1332, -1332,  9437, -1332,  3625, -1332, -1332,
     1639     810,   810,   464, 10025,  1068,   907,  9695, -1332,   437,   475,
     1640    1062, -1332,  1067,  1069,  1047,  1070,   810, -1332, -1332, -1332,
     1641   -1332, 10283, -1332,   522,  6793, -1332,   182,  1074, -1332,  1948,
     1642   11198,  6368, -1332, -1332, -1332, -1332,   939,  2479, -1332,  8493,
     1643     846,  5374, -1332, -1332, -1332,   828,   610,   974,  1062, 11374,
     1644     861,  9354, -1332, 11374, -1332, -1332, -1332, -1332,   618, -1332,
     1645    1073,   926,   326,  8632, -1332, 10025, -1332, -1332,  8632, -1332,
     1646    8860,  8632, -1332, -1332, -1332,  1077, -1332,   619,  1082,   630,
     1647    1087, -1332,  5066,  7012, -1332, -1332, -1332,    47, -1332, -1332,
     1648   10784, -1332,   474, 10784, -1332, -1332, -1332, -1332, -1332, -1332,
     1649   -1332, -1332, -1332, -1332,  6310,  6310, -1332, 10919, 10919, 10919,
     1650   10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919,
     1651   10919, 10919, 10919, 10919, 10919,  4001,  6310, -1332,   356,   777,
     1652   -1332, -1332,   102,   102, -1332, -1332,  8974, -1332, -1332,  1066,
     1653     735, -1332,  1066, 10842, -1332, -1332, -1332,  6075,  7012,  1086,
     1654    9202,  1093, -1332, 10055, -1332, -1332,   739, -1332,  1094,   690,
     1655    1096,  1090,   157,   974, -1332,   102,   102,   974,   166, -1332,
     1656     102,   102,  1066, -1332, -1332,   102,   102, -1332,   996, 10137,
     1657    1658, 11343,   372,   531, 10137, -1332,  6678, -1332,   974, -1332,
     1658    9914, -1332,   285,  8042,  8042,  8042,  1658, -1332,  5183,  1085,
     1659     453,  1030,   955,  1095,  1097, -1332,  1099,  3245,   590, -1332,
     1660    1182,  1658,  8042,   735,  1948,   735,   846,   706,   996, -1332,
     1661   -1332,   806,   996, -1332, -1332, -1332,   926, -1332,   996,   182,
     1662   10283, -1332,   647,  1107,   688,  1108, -1332,  1109,   182, -1332,
     1663   -1332,  9437,   182,  1105,   497,   502, 10167,  7492,  1400, 10919,
     1664    1678, -1332, -1332,  1103,    62,  1103, -1332, -1332, -1332,   102,
     1665     102, -1332, -1332,  1062, -1332,   102, -1332, -1332,  8891,  1062,
     1666    1110, 10919, -1332,  1062, 11343, -1332, -1332,  1113, -1332, -1332,
     1667   -1332,   735, -1332, 11271, 10919, -1332,  8042,   718,  8347, -1332,
     1668   -1332,   739,  1114,  1115,   828,  2655, -1332, -1332, 11374, -1332,
     1669   -1332,  1116, -1332, -1332,  1122, -1332,  1116,  1123, 11116,  6310,
     1670     163,  1092,    54,  1131,  1128,  1135,   928,  1130,  1138, -1332,
     1671    1140,  1141,  9733,  7132, -1332,  6310, -1332,   630,  1274, -1332,
     1672    5523,  6310,  1139, -1332, -1332,  1030,   695, -1332,  6310, -1332,
     1673   -1332,   741, -1332, -1332, -1332, -1332, -1332,   516,   516,   336,
     1674     336,   425,   425,   425,   425,   270,   270,   704,   934,   936,
     1675     960,   997, 10919,   754, -1332, 10283,  1150,  1151,  1153,   777,
     1676   -1332, -1332, -1332, -1332, -1332, 10283,   748, 10919,  8042, -1332,
     1677    9914, -1332,  7612,  9316,  9126,  7372, -1332, -1332, -1332,   690,
     1678   10283,   950,  1164,  1165,  1171,  1172,  1179,  1180,  1181, -1332,
     1679    3591,  1090, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
     1680   -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,  1066,
     1681   -1332, -1332, -1332,   974, -1332, -1332, -1332, -1332, -1332, -1332,
     1682   -1332, -1332,  1183, -1332,  1184,  1187, -1332, -1332,   190,  1139,
     1683    5183, -1332, -1332, -1332,  3059,  1185, -1332, -1332, -1332, -1332,
     1684   -1332,  1062,  6532,  1270, -1332, -1332, -1332, -1332,  1173,   190,
     1685   -1332, -1332,  1066, -1332, -1332,  1066,   152,  1066, -1332, -1332,
     1686   -1332, -1332, -1332, -1332,  9584, -1332,   182, -1332,  8891, -1332,
     1687   -1332,  1193,   795,  1199,  1200,  1204, -1332, -1332,  1678, -1332,
     1688   -1332, -1332, -1332, -1332, -1332, -1332,   907,  9763,  1047, -1332,
     1689   -1332,  1069,  1205,  1201, -1332, -1332,  1206,  1207, -1332,   718,
     1690    1989, -1332,   634, -1332,  2655,   974, -1332,  1211, 11374, 10205,
     1691    8974,  1214, -1332, -1332,  1212,  1217,  1213, -1332, 10919,   229,
     1692     205,  1215, -1332,  1202,   735,  1202,  7012,  6310, -1332, -1332,
     1693    1202, -1332,  1274,  3059, -1332, -1332, -1332, -1332,  1220,  6310,
     1694    1228,   735,  5183, -1332, 10784, -1332,   735, -1332, -1332,  6310,
     1695   -1332,   863,   996, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
     1696    1030,  8746, -1332, -1332,  7732,  1219, -1332,   876,   996, -1332,
     1697     883,   896,   996, -1332,   810,  4775, -1332, -1332, -1332, 10283,
     1698   10283, -1332,  8420,  8420, -1332,  1221,  1226,  1233,  1235, -1332,
     1699    1234,   643,   137,  1139, -1332,   735, -1332,  3245, -1332,  6310,
     1700     517, -1332,  6892,  1245,  1249, 10726,  1253,  1258,   330,   380,
     1701     387,  6310,  1265,   182,  6310,  6310,  1256,   294,  1269,  1250,
     1702   -1332, -1332, -1332,  1277, -1332, -1332, -1332, -1332, -1332, -1332,
     1703   -1332, -1332, -1332,  1062,  1285,  6310, -1332, 10283, 10283,   102,
     1704    1287, -1332,  9845,  9622,   932,   996, -1332, -1332, -1332, -1332,
     1705   -1332,  1286, -1332, -1332, -1332, -1332,  1293,  1989, -1332, -1332,
     1706    1275, -1332,  1116, -1332, -1332,  1948,  1290, -1332, -1332, -1332,
     1707     749,  1292, -1332,    54,  1295, 10919,  1279,    54,    54,  1305,
     1708    1301, -1332,  1099,  6310,  1308,  1220,   605,    89,  1306, -1332,
     1709    1301, -1332,  1312,  1306, -1332, -1332,  1317, -1332, -1332,  1066,
     1710    1319,  1322,  7252,  1323,  1325,  1326, -1332, -1332,  1329, -1332,
     1711   -1332,  1066, -1332, -1332, -1332, -1332,  1066,  6310,  6310, 10919,
     1712    1330, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
     1713   -1332, -1332, -1332, 10919, 10919,  1332,  1335,  1306, -1332, -1332,
     1714    1062, -1332, -1332, -1332,  7853, 10205,  6310,  6310,  1394,  6310,
     1715   -1332, -1332,  1321, -1332,  1324,  6310,  1327,  1331,  6310,  1013,
     1716    1333,    97,  8265,  1262,   102, -1332, -1332,  6532,  1334,   537,
     1717   -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,  1066,
     1718   -1332, 10544, -1332,  8493,  1345, -1332, -1332, 10205,   562,   563,
     1719   -1332,  1343,  1344,   926,  1352, -1332,   450, -1332, -1332,  6310,
     1720    1355,  1349, -1332, -1332,  1356,   543,   613,   735,  1357,  1358,
     1721   -1332,  1361, -1332, 10283, -1332, -1332, -1332, -1332, -1332,  1365,
     1722   -1332, 10283, 10283, 10283, -1332, -1332,  1367, -1332,  1368,  1371,
     1723    1372,   668,  8115,  8231, -1332, -1332,   457, -1332,  1376,  1378,
     1724   -1332,  8566,   750,   782,  1387,   793,  6762, -1332, -1332,   598,
     1725   -1332, -1332,   803,  1388,  1393,   182,  1445,   882, -1332, -1332,
     1726    6310, -1332, 10784, 10726, -1332, -1332, -1332,  1396,  1404, 10283,
     1727   -1332, -1332, -1332,  1401, -1332, -1332, -1332, -1332, -1332, -1332,
     1728   10205,   926,   254, -1332,  1384,   926,  1220,   366, -1332, -1332,
     1729   -1332, -1332, -1332, -1332, -1332, -1332,  1405, -1332, -1332, -1332,
     1730   -1332, -1332, -1332,  1406,  1409, -1332, -1332, -1332, -1332, -1332,
     1731   -1332, -1332,  1414, -1332,  1413, -1332, -1332, 10726,    84,  6310,
     1732   10726, -1332,  1417,  6310, -1332,    99,  1433,  1434, -1332, -1332,
     1733    1422,  1425,  1408,   852, -1332, -1332, -1332, -1332, -1332,  1658,
     1734    1948,  1421,   949,   918, 10919, -1332,   832,  1426,  6310,   735,
     1735     735,  1427,  1431,  1440,  1441, -1332, -1332,  8420,  1428, -1332,
     1736    1501, 10919,  1437, -1332, -1332, 10637, -1332,   845, -1332,  1424,
     1737   10726,  1436, -1332, -1332,  1460, -1332,  1461, -1332,  1476,  1481,
     1738   -1332,  1446,  1471, 10205, -1332, -1332, -1332,   926,   735,  1472,
     1739    1452,  1468, -1332,  1306,  1306, -1332, -1332, -1332, -1332, -1332,
     1740   10726,   295, -1332,   940, -1332, -1332,  5671, -1332, -1332,  1454,
     1741    6310, -1332,  6310,  5671,   182, 10025,   182, 10025,  1478, -1332,
     1742    1482, -1332, -1332, -1332,  1480,   949, -1332,   850, -1332, -1332,
     1743    6310,  1479,  1487, -1332, 10919, 10919, -1332, -1332,  1054,   123,
     1744   -1332, -1332,  1465, -1332,  1054, -1332, -1332,  1818,   735, -1332,
     1745   -1332,   182, 10025,   182, 10025,  1492,  1474,   735, -1332, -1332,
     1746   -1332, -1332, -1332, 10637,  1488,  1054,  6242,  6310, 10548,  1495,
     1747    1054,  1502,  1818,  2347, -1332, -1332, -1332,  1505, -1332, -1332,
     1748   -1332, -1332,  8974, -1332, -1332, -1332, 10415, -1332, 10637, -1332,
     1749   -1332,  1484, 10322, -1332, -1332, 10548,   182,  2347,   182,  1509,
     1750    1510,   853, -1332, 10415, -1332, -1332, -1332, 10322, -1332, -1332,
     1751   -1332,   182,   182, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
     1752   -1332
    17511753};
    17521754
     
    17541756static const yytype_int16 yypgoto[] =
    17551757{
    1756    -1356,  4068,  1513, -1356,  1381, -1356,    41,     0,  -254, -1356,
    1757      593,  -523,  -482,  -960,  -143,  5028, -1356,  -101,   576,   581,
    1758      386,   577,  1101,  1105,  1106,  1099,  1107, -1356,  -593,  -585,
    1759     4966,  -933,  -708,  -942, -1356,  -273,  -719,   379, -1356,  1404,
    1760    -1356,   457, -1092, -1356, -1356,   195, -1356,  -844, -1059,   308,
    1761    -1356, -1356, -1356, -1356,   124, -1118, -1356, -1356, -1356, -1356,
    1762    -1356, -1356,   382, -1355,    53, -1356,  -496, -1356,   558,   349,
    1763    -1356,   226, -1356,  -307, -1356, -1356, -1356,   610,  -832, -1356,
    1764    -1356,    13,  -961,   169,  2725, -1356, -1356, -1356,   -79, -1356,
    1765      189,   845,  -184,  1482,  3902, -1356, -1356,   192,   133,   657,
    1766     -251,  1620, -1356,  1796, -1356, -1356,   156,  2416, -1356,  2575,
    1767      798, -1356, -1356,  -404,  -428,  1252,  1253,   761,  1003,   302,
    1768    -1356, -1356,  1245,   764,  -253, -1356,   -24,  -132,  -469, -1356,
    1769    -1356,  -983,  -881,     4,   862,  1128,   -43, -1356,   561,  -100,
    1770     -262,  -193,  -152,   721,   826, -1356,  1071, -1356,  2692,   907,
    1771     -449,   971, -1356, -1356,   765, -1356,  -227, -1356,   -60, -1356,
    1772    -1356, -1356, -1248,   485, -1356, -1356, -1356,  1242, -1356,    45,
    1773    -1356, -1356,  -846,  -109, -1333,  -138,  3289, -1356,  1880, -1356,
    1774      969, -1356,  -161,   268,  -181,  -177,  -175,     2,   -39,   -35,
    1775      -33,   769,    30,    31,    69,  -146,  -162,  -151,  -147,  -140,
    1776     -277,  -521,  -506,  -484,  -575,  -313,  -516, -1356, -1356,  -528,
    1777     1156,  1157,  1163,  2484,  4688,  -570,  -557,  -534,  -533,  -478,
    1778    -1356,  -432,  -693,  -685,  -681,  -580,  -201,  -236, -1356, -1356,
    1779      265,   180,   -86, -1356,  3600,   232,  -625,  -376
     1758   -1332,  4383,  1919, -1332,  1457, -1332,    41,     0,  -257, -1332,
     1759     544,  -527,  -514,  -956,  -190,  3713, -1332,  1485,   580,   585,
     1760     548,   602,  1055,  1052,  1056,  1059,  1061, -1332,  -217,  -341,
     1761    5350,  -699,  -697,  -922, -1332,   -83,  -701,  -678, -1332,   561,
     1762   -1332,   399, -1087, -1332, -1332,   141, -1332, -1329,  -838,   252,
     1763   -1332, -1332, -1332, -1332,    71, -1078, -1332, -1332, -1332, -1332,
     1764   -1332, -1332,   325, -1308,    57, -1332,  -297, -1332,   504,   305,
     1765   -1332,   173, -1332,  -305, -1332, -1332, -1332,   558,  -799, -1332,
     1766   -1332,    11, -1027,   151,   658, -1332, -1332, -1332,   -52, -1332,
     1767     117,   913,  -200,  1494,  4071, -1332, -1332,    19,   107,   365,
     1768    -232,  1565, -1332,  2150, -1332, -1332,   134,  2571, -1332,  3063,
     1769    1550, -1332, -1332, -1332,  -643,  -431,  1210,  1216,   707,   947,
     1770     188, -1332, -1332, -1332,   945,   723,  -404, -1332,  -520,  -362,
     1771     293, -1332, -1332,  -990,  -995,   965,  1194,  1083,   304, -1332,
     1772     150,   317,   -75,  -197,  -129,   679,   781, -1332,  1020, -1332,
     1773    3338,  1566,  -427,   948, -1332, -1332,   710, -1332,  -230, -1332,
     1774     -89, -1332, -1332, -1332, -1266,   433, -1332, -1332, -1332,  1195,
     1775   -1332,    22, -1332, -1332,  -865,  -105, -1331,   -98,  1750, -1332,
     1776    2253, -1332,   929, -1332,  -168,   288,  -180,  -179,  -173,     2,
     1777     -34,   -29,   -28,   687,    75,    77,    92,  -161,  -162,  -153,
     1778    -151,  -148,  -320,  -530,  -516,  -495,  -552,  -307,  -529, -1332,
     1779   -1332,  -506,  1106,  1117,  1121,  2218,  5180,  -562,  -569,  -544,
     1780    -538,  -550, -1332,  -429,  -691,  -685,  -671,  -611,  -246,  -241,
     1781   -1332, -1332,  1149,   273,   -84, -1332,  3714,    76,  -612,  -441
    17801782};
    17811783
     
    17831785   positive, shift that token.  If negative, reduce the rule which
    17841786   number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1785 #define YYTABLE_NINF -523
     1787#define YYTABLE_NINF -525
    17861788static const yytype_int16 yytable[] =
    17871789{
    1788       47,   112,    96,   398,   148,   933,   266,   399,   149,   400,
    1789      150,   452,   176,   934,   113,   382,   383,   935,   259,   427,
    1790      791,   527,   401,   707,   406,   439,   512,   505,   712,   112,
    1791      112,   895,    47,   402,    96,   618,   853,   403,   768,   407,
    1792      975,   854,   111,    47,   404,    47,  1152,   160,   409,   871,
    1793      751,   820,   846,    48,   756,    47,  1092,  1144,   718,  1184,
    1794     1185,    47,   260,   192,    47,   261,   215,    47,   342,   225,
    1795     1091,   613,   995,   151,   152,   847,   848,   142,    31,   279,
    1796      218,   112,   112,   398,   933,    48,  1462,   399,   842,   400,
    1797     1399,   424,   934,   845,   201,  1196,   935,   779,   951,  1318,
    1798      574,  1202,   401,   843,   406,    47,   936,    31,    47,  1135,
    1799      679,   536,   153,   402,   937,    47,  1136,   403,   122,   407,
    1800     1508,   749,   482,   484,   404,   844,   408,   637,   936,   290,
    1801      688,   641,    31,    68,   857,   575,   950,   280,   692,  1099,
    1802      864,  1219,  1220,   605,   202,   148,    47,   121,   160,   149,
    1803      410,   150,   682,   684,    47,  1537,    75,  1539,   978,    47,
    1804     1462,   372,  1186,   683,   685,    68,   167,   446,  1319,    54,
    1805      114,   483,   141,   578,   438,   410,   478,   251,    31,   410,
    1806      105,   105,   517,   579,    47,    47,   467,   160,    75,    61,
    1807      168,    31,    67,  1482,   109,   534,   535,   211,  -234,  -234,
    1808       47,    54,   418,    31,   410,    41,    42,   556,    47,  1260,
    1809      160,   919,   105,    31,   151,   152,   677,    47,   746,  1008,
    1810       47,    61,   442,   842,    67,   148,   585,   112,   490,   149,
    1811     1201,   150,   586,   209,   483,   507,   219,   858,   843,   755,
    1812      527,   861,   112,   535,   674,   527,   112,   105,   527,   143,
    1813       47,   112,    96,   153,  1210,   596,   576,   760,   770,   675,
    1814      844,   488,   878,   410,    47,    47,   881,   160,    95,  -234,
    1815      777,    47,   410,   855,   145,   610,  1037,   165,    47,   535,
    1816      778,  1038,   846,   862,   342,   610,   666,   536,   740,  1342,
    1817      712,  1014,   472,   112,   703,   470,  1343,  1051,   618,  1263,
    1818       95,  1154,   813,    48,   176,   847,   848,  1184,  1185,   705,
    1819      162,   147,   536,    95,   681,  1344,  1419,  1420,   842,   154,
    1820      686,   638,   976,  1025,   824,   642,   674,  1264,    47,   188,
    1821      372,   170,    95,   843,   524,    95,   180,   536,   478,  1134,
    1822     1192,   675,   165,  1202,   200,   874,  1010,    47,    47,   875,
    1823     1419,  1420,  1216,   441,  -290,   844,  1015,   739,   478,   246,
    1824     1186,   831,   109,   857,    47,   761,   478,  1193,    47,   536,
    1825      109,  1026,   762,    41,    42,   162,   109,   327,   249,   653,
    1826     1092,    41,    42,    68,   926,   936,  1421,    41,    42,   440,
    1827      854,   886,   887,  1133,  1091,    47,  1402,  1492,   500,   605,
    1828      501,   783,   846,  -518,   880,    47,    75,   372,  1551,   905,
    1829     1186,    75,   251,   763,    95,   764,  1153,  1214,   765,    54,
    1830     1430,   771,   916,    47,  1193,   847,   848,    95,   605,    47,
    1831      105,    47,  1457,   605,  1550,  1566,  1212,  1521,   109,    61,
    1832      435,   871,    67,  1526,   479,   263,   342,  1451,  1452,    41,
    1833       42,   376,   397,   188,  1561,    47,   794,   795,   796,   876,
    1834      112,  1565,   -10,   877,  1546,   112,  1051,   377,   386,  1553,
    1835      327,  -112,  1381,   434,   112,   728,    95,   789,  1406,    47,
    1836      251,   329,   211,   958,   387,  -112,  -112,    47,    95,   372,
    1837     -441,    47,  -112,    96,  -467,    47,   740,  1041,   112,   535,
    1838      112,  -112,   435,  1202,   460,   896,  1107,   505,   979,  -442,
    1839     1202,   885,   885,   885,   707,   111,  1259,   398,    95,  1121,
    1840      653,   399,  1150,   400,  1102,  -467,   275,  -467,   909,   165,
    1841      885,  -467,   486,   277,  1186,   434,   401,   112,   618,   406,
    1842      653,   936,   112,   653,    48,   278,  1038,   402,   389,  1252,
    1843      391,   403,  1172,  1174,   407,   907,   109,   330,   404,   531,
    1844     1107,   767,   162,  1202,   390,   739,   392,    41,    42,   331,
    1845     1181,  1182,   740,    75,  1036,  1017,   607,   332,   784,  1466,
    1846      370,   767,   693,   790,   767,  1379,   393,   873,   586,  1118,
    1847      112,   140,   333,    75,  1019,  1348,    95,    47,   831,   936,
    1848      936,    75,   394,   888,   885,   334,   479,  1292,  1293,    47,
    1849      342,    47,   478,   211,   564,   565,   612,   557,   904,   884,
    1850      884,   884,   558,   559,    68,   587,   479,   410,  1231,  1232,
    1851       47,   472,  1498,   535,   479,   897,  1250,   713,   884,  1498,
    1852     1254,   739,   240,   243,    37,   876,    47,    75,    40,  1117,
    1853      566,   567,   112,   714,   955,    41,    42,   327,   327,   715,
    1854       54,    47,  1429,   112,    47,   112,   898,   335,   652,   713,
    1855      730,   105,   899,   188,   712,   716,   731,  1466,   737,   994,
    1856       61,    43,  1466,    67,   728,   929,   342,  1036,   831,   715,
    1857      384,   146,  1547,   371,  1199,  1049,   885,   959,    47,   610,
    1858       47,  1199,  1466,   375,   906,   930,   908,   960,  1333,  1466,
    1859     1200,   388,   884,   112,  1335,   507,  1096,  1324,   460,   112,
    1860      408,   460,   747,   704,  1334,   228,   535,   460,   748,   229,
    1861     1336,   112,   233,   327,   235,   109,     8,     9,    10,    11,
    1862       12,   244,  1056,  1129,    47,    47,    41,    42,   757,  1500,
    1863      285,  1501,   327,   590,   758,   410,   396,   775,    47,    95,
    1864     -291,    41,    42,   612,   441,    31,   431,     8,     9,    10,
    1865       11,    12,   954,  1382,  1350,   774,   920,   674,   531,   425,
    1866      531,   775,   775,   531,  -105,   703,   531,   521,  -105,   922,
    1867      833,   449,   675,    34,  1367,   775,    31,  1391,  1368,  1003,
    1868      705,  1016,  1356,   464,   884,  1004,  1548,   731,   426,   936,
    1869     1358,  1359,  1360,   910,   161,   410,  1248,  1447,   327,   728,
    1870      605,  -112,   586,  -112,    34,  1375,   936,  -112,   462,   728,
    1871      193,   775,   607,   216,  1459,  1376,   226,   933,   913,    47,
    1872      410,   775,  -112,  -112,   728,   934,   115,    75,    37,   935,
    1873     1176,    47,    40,   109,   465,   138,   139,   211,  1395,    41,
    1874       42,   872,   213,   109,    41,    42,   607,   831,   228,   468,
    1875     1378,   211,   560,   561,    41,    42,   775,   841,   979,   612,
    1876      479,   469,   979,   979,   491,   839,   737,   610,   511,    75,
    1877      158,  1156,    37,   410,   653,   611,    40,   562,   563,   936,
    1878      936,   112,   653,    41,    42,  1197,  1383,  1519,  1459,   290,
    1879     1183,  1448,   775,  1467,   213,   161,  1168,  1445,   410,   775,
    1880      535,  1514,   479,   515,    47,  1571,   520,  1515,   373,   744,
    1881      532,   586,  1300,  1301,  1171,  1303,   610,   536,    47,   745,
    1882      654,  1307,   570,  1078,  1310,  1173,    47,   610,   572,   257,
    1883      801,   802,   803,   804,   161,   158,  1236,   213,   410,   571,
    1884      740,   517,   737,   573,    47,   211,   932,   109,   704,   138,
    1885      139,   214,   568,   569,   537,   538,   539,   161,    41,    42,
    1886     1007,  1004,  1122,   460,   112,   251,   329,   410,   241,   443,
    1887      323,   775,  1009,   653,   418,   670,   410,  1340,   540,   339,
    1888      541,   112,   542,   543,   653,   941,   112,   941,   228,   242,
    1889      233,   338,   841,   612,   576,  1243,   329,   410,   213,  1388,
    1890     1389,   717,  -438,   214,   594,  1138,   464,   833,   597,   739,
    1891      488,   329,   410,  1439,  1004,    68,   855,   329,   610,   676,
    1892      740,   647,  1146,   728,   728,   767,   667,  1146,   668,   429,
    1893     1311,  1312,  1313,   433,   669,   112,   213,   671,    75,   750,
    1894      213,   754,  1445,  1446,   672,   653,   214,   673,   112,   112,
    1895      112,    54,   678,  1533,  1493,  1494,    37,   535,   173,   174,
    1896       40,   256,   105,   323,   455,  1400,   696,    41,    42,  1400,
    1897      721,    61,   719,   112,    67,  -238,  1146,   373,   228,  1419,
    1898     1420,   728,   728,   759,  1425,   772,  1078,   841,   776,  1211,
    1899     1213,  1215,   780,   371,   109,   433,   138,   237,   495,   612,
    1900     1349,  1351,  1352,  1107,    47,    41,    42,   214,   834,     2,
    1901      205,     4,     5,     6,     7,   342,   797,   798,  1123,   529,
    1902      836,   838,   158,   799,   800,   805,   806,   213,   849,   105,
    1903      -12,   238,  -292,   901,   -13,   893,   239,   441,  1370,     8,
    1904        9,    10,    11,    12,    37,   214,   182,   183,    40,   214,
    1905      894,   921,   923,   928,   373,    41,    42,   924,     8,     9,
    1906       10,    11,    12,   699,   949,  -415,   595,  -522,    31,   602,
    1907      748,  1483,   963,   460,    35,    68,    36,   970,   984,   112,
    1908      972,   698,   327,   410,   983,   977,   704,    31,   635,   699,
    1909      985,   700,   639,   892,   704,   339,    34,   218,    75,   987,
    1910      988,    47,   109,   989,   138,   139,   653,   990,   213,  1011,
    1911     -293,    54,   612,    41,    42,    34,   999,     8,     9,    10,
    1912       11,    12,   105,  1329,     2,   205,     4,     5,     6,     7,
    1913     1012,   479,  1013,   872,  1204,  1027,   214,    -3,  1122,  1058,
    1914     1093,   891,  1028,   112,   112,   112,    31,  1078,  1029,  1030,
    1915      323,   323,  1031,   227,   945,   728,  1032,   578,   213,   410,
    1916      948,  1080,  1033,   728,   728,   728,  1044,   579,   128,  1443,
    1917      129,   130,   131,  -403,    34,  -402,  1095,  1104,   455,    41,
    1918       42,   455,  1103,  1105,  1146,  1146,  1146,   455,  1106,    35,
    1919     1110,    36,  1111,  1559,   537,   538,   539,  1112,  1113,   115,
    1920      653,   653,  1114,  1120,     2,   205,     4,     5,     6,     7,
    1921     1130,   728,  1131,   729,   775,  1137,   211,   214,   540,   993,
    1922      541,  1132,   542,  1320,   495,  1145,   323,  1166,   495,   398,
    1923      737,  1122,  1142,   399,  1442,   400,  1189,  1187,   529,    68,
    1924      529,   767,  1078,   529,  1188,   323,   529,   460,   401,  1190,
    1925      406,  1223,   209,   219,  1191,   653,  1205,   339,   653,   402,
    1926     1206,  1208,    75,   403,   105,   407,  1209,   214,  1217,    35,
    1927      404,    36,  1221,  1224,   674,    54,  1532,    47,    47,    -3,
    1928     1229,   213,  1234,  1240,   500,  1249,   105,   112,   112,   675,
    1929      109,  1244,   138,   139,  1123,    61,  1078,  1251,    67,  1078,
    1930     1253,    41,    42,   653,  1256,   105,  1257,  1261,   653,   213,
    1931      737,   323,   441,  1265,   213,  1268,   175,    68,  1270,  1272,
    1932     1273,  1302,   829,  1274,  1207,   602,   112,   752,  1146,  1146,
    1933     1278,  1275,   753,  1276,  1122,   654,  1285,   172,   653,  1294,
    1934       75,  1295,  1061,  1323,  1078,  1305,  1306,  1308,   440,  1078,
    1935     1331,  1337,  1339,    54,   870,  1309,  1341,  1317,  1346,   602,
    1936     1345,  1347,    64,   116,   105,   879,   175,  1484,  1353,   175,
    1937     1354,   148,  1355,   479,  1357,   149,  1204,   150,  1363,  1078,
    1938      252,  1364,  1365,  1366,  1377,    47,   112,  1123,  1373,  1374,
    1939      214,  1384,  1385,  1313,    64,   112,  1393,  1394,   105,  1396,
    1940     1403,   653,   213,  1413,  1414,  1406,   653,   159,  -404,  1417,
    1941       47,    47,  1428,   160,  1432,   175,   213,  1434,   214,  1436,
    1942     1437,   339,   729,   214,   653,  1438,   653,  1534,  1444,   220,
    1943      653,  1449,  1453,   653,   654,    47,  1542,   372,  1454,  1455,
    1944     1456,   653,  1078,   455,   166,   653,   171,  1078,  1368,   177,
    1945      178,   179,    37,   181,   173,   174,    40,  1458,    37,  1463,
    1946      173,   174,    40,    41,    42,  1078,   258,  1078,   232,    41,
    1947       42,  1078,  1468,   495,  1078,  1470,   416,    68,   175,  1472,
    1948      247,   248,  1078,  1474,    68,  1080,  1078,  1476,  1478,   375,
    1949     1123,    37,  1480,   182,   183,    40,  1487,   339,  1481,   436,
    1950       75,   105,    41,    42,  1486,  1509,  1488,    75,   328,   444,
    1951      213,   214,  1511,    54,  1499,  1513,   258,   349,  1517,  1518,
    1952       54,  1540,  1525,  1545,   105,   214,  1552,  1554,   609,  1541,
    1953      610,   105,   175,   479,  1061,  1556,  1204,    68,   611,   175,
    1954      479,  1562,    37,  1204,   182,   183,    40,   405,  1569,  1570,
    1955     1222,   807,   810,    41,    42,  1018,   808,   729,   809,   829,
    1956       75,   811,   423,  1322,   212,   428,   430,   729,  1520,  1572,
    1957      159,  1431,  1404,    54,   231,  1255,  1387,  1502,   528,   698,
    1958     1392,   410,   729,  1228,   105,   694,   695,  1108,   942,   700,
    1959      723,   447,  1109,   479,  1141,   450,  1204,   451,   826,   965,
    1960     1057,     8,     9,    10,    11,    12,   466,   973,   175,   900,
    1961     1332,  1119,    64,   742,   816,   817,   212,   480,  1506,   214,
    1962     1506,   818,     0,     0,     0,   175,     0,   487,     0,   175,
    1963       31,     0,     0,     0,  1418,   430,     0,  1426,     0,     0,
    1964     1298,     0,     0,     0,     0,     0,     0,     0,     0,   829,
    1965        0,     0,   327,   455,     0,  1506,     0,  1506,    34,   212,
    1966        0,     0,     0,    37,     0,   182,   183,    40,    37,     0,
    1967      182,   183,    40,     0,    41,    42,    73,     0,   486,    41,
    1968       42,     0,  1465,     0,     0,     0,    37,  1469,   182,   183,
    1969       40,     0,   175,   495,  1124,   323,     0,    41,    42,     0,
    1970      184,     0,   213,   258,     0,  1530,   603,   410,    73,     0,
    1971      185,     0,   631,     0,     0,  1531,     0,  1491,     0,     0,
    1972      212,     0,     0,   184,     0,   636,   690,     0,     0,   636,
    1973        0,     0,   258,   185,     0,     0,     0,   601,   608,     0,
    1974        0,     0,     0,   221,     0,     0,   870,     0,     0,   632,
    1975      633,     8,     9,    10,    11,    12,     0,     0,   212,     0,
    1976      732,     0,   212,    37,     0,   182,   183,    40,     0,     0,
    1977        0,     0,     0,     0,    41,    42,     0,     0,   506,   480,
    1978       31,   729,   729,     0,     0,     0,   125,   125,   125,     0,
    1979        0,     0,     0,     0,   349,     0,     0,   528,     0,   480,
    1980      264,     0,   528,  1560,     0,   528,     0,   480,    34,  1560,
    1981      265,   214,     8,     9,    10,    11,    12,     0,     0,     0,
    1982     1560,     0,     0,     0,  1560,     0,     0,   455,   829,     0,
    1983        0,   352,     0,   724,     0,     0,   430,     0,     0,   729,
    1984      729,    31,     0,     0,     8,     9,    10,    11,    12,   212,
    1985      777,   738,   410,    64,     0,     0,     0,   125,   175,   125,
    1986      778,   430,     0,     0,     0,   430,     0,     0,     0,    34,
    1987        0,     0,     0,    31,    37,     0,   182,   183,    40,     0,
    1988        0,   213,     0,     0,   274,    41,    42,     0,     0,     0,
    1989        0,   175,     0,     0,   258,   349,     0,     0,     0,     0,
    1990        0,    34,     0,     0,     0,   448,    37,   175,   182,   183,
    1991       40,   609,     0,   610,     0,     0,     0,    41,    42,     0,
    1992        0,   611,   175,     0,     0,     0,    73,     0,     0,     0,
    1993      212,    73,     0,     0,     0,     8,     9,    10,    11,    12,
    1994      125,   819,     0,   698,     0,   410,   339,   212,   125,     0,
    1995      125,   125,     0,   700,     0,   125,     0,   125,   125,   636,
    1996      832,     0,   603,   918,    31,     0,     0,     0,     0,     0,
    1997     1124,     0,   925,   851,     0,     0,   927,   213,     0,     0,
    1998      212,  1330,     0,     8,     9,    10,    11,    12,     0,     0,
    1999      214,   603,    34,     0,     0,     0,   603,    37,     0,   182,
    2000      183,    40,   636,     0,     0,   349,   349,   349,    41,    42,
    2001        0,     0,    31,   729,     0,     0,     0,     0,     0,   175,
    2002        0,   729,   729,   729,   349,     0,   221,   125,     0,     0,
    2003        0,     0,     0,     0,  1530,     0,   410,     0,     0,     0,
    2004       34,     0,   724,     0,  1531,    37,     0,   182,   183,    40,
    2005        0,     0,     0,   480,     0,     0,    41,    42,   258,   738,
    2006        0,     0,   938,  1124,     0,     0,     0,     0,     0,   729,
    2007        0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
    2008        0,     0,   264,     0,     0,     0,   214,     0,     0,     0,
    2009        0,     0,   265,    73,     0,   480,     0,     0,   349,     0,
    2010        0,    31,     0,   212,     0,     0,     0,   964,   352,     0,
    2011      430,     0,     0,    73,     0,     0,     0,     0,   952,     0,
    2012      953,    73,     0,     0,     0,     0,     0,   956,   957,    34,
    2013        0,   212,   962,     0,   258,   738,   212,     0,     0,     0,
    2014      992,     0,     0,     0,   967,     0,     0,   352,     0,   971,
    2015      544,   545,   546,   547,   548,   549,   550,   551,   552,   553,
    2016        0,     0,     0,     0,     0,   352,  1124,    73,     0,     0,
    2017        0,   959,     0,   610,     0,  1000,     0,   724,     0,     0,
    2018        0,   960,     0,     0,   554,   175,     0,   724,     0,     0,
    2019      349,     0,   636,     0,     0,  1024,   636,   832,  1505,     0,
    2020     1505,     0,   724,     0,     0,     0,     0,     0,     0,   352,
    2021     1101,     0,  1035,     0,     0,     0,     0,     0,     0,     0,
    2022      601,     0,     0,     0,   212,     0,     0,     0,     0,     0,
    2023        0,     0,     0,     0,     0,  1505,     0,  1505,   212,     0,
     1790      47,   112,    96,   427,   398,   399,   768,   933,   452,   148,
     1791     266,   400,   113,   934,   149,   150,   791,   406,   871,    67,
     1792     259,   439,   401,   512,   407,   712,   707,   935,   613,   112,
     1793     112,   402,    47,   403,    96,  1203,   404,  1092,   382,   383,
     1794     846,   618,   111,    47,   895,    47,   505,   160,  1187,   854,
     1795    1153,    67,  1185,  1186,   142,    47,   749,    48,   975,   853,
     1796     201,    47,   857,   192,    47,   847,   215,    47,   864,   225,
     1797     342,   848,   751,   820,  1401,   947,   756,  1145,   218,   842,
     1798     845,   112,   112,   995,   398,   399,   933,   279,   409,    48,
     1799    1464,   400,   934,   843,   121,   424,  1468,   406,   605,  1197,
     1800     779,    31,   401,  1091,   407,    47,   935,    68,    47,    31,
     1801     202,   402,   679,   403,   844,    47,   404,    61,   151,   109,
     1802     152,   165,   637,   884,   884,   884,   641,   739,  1421,  1422,
     1803      41,    42,   688,   408,    75,   153,   290,    31,   446,    68,
     1804     692,    31,   884,  1421,  1422,   280,    47,   574,   160,    61,
     1805     148,    54,   114,    31,    47,   149,   150,   467,   783,    47,
     1806    1320,   372,   482,   484,  1464,   978,    75,  -234,  -234,  1510,
     1807     122,   211,   858,   410,  1265,   746,   861,  1484,   483,   251,
     1808     140,   410,   575,    54,    47,    47,   165,   160,     2,   205,
     1809       4,     5,     6,     7,  1468,   141,    31,   878,  1423,  1468,
     1810      47,   881,  1266,   478,  1539,    31,  1541,   418,    47,   410,
     1811     160,   527,   677,  1432,   842,   209,   884,    47,   219,  1468,
     1812      47,   327,   442,   488,  1080,   410,  1468,   112,   843,  1321,
     1813     148,   240,   243,  1193,   536,   149,   150,   674,  -234,   143,
     1814     886,   887,   112,   740,   675,   536,   112,   145,  1187,   844,
     1815      47,   112,    96,    35,   760,    36,   154,   596,   905,   151,
     1816    1194,   152,  1099,  1202,    47,    47,   855,   160,   610,    67,
     1817     846,    47,   470,   105,   105,   862,   153,   610,    47,  1203,
     1818     976,   885,   885,   885,   435,  1102,   342,   703,    95,  1038,
     1819     666,   857,   472,   112,   705,   847,   170,   167,  1187,  1037,
     1820     885,   848,  1185,  1186,   618,   105,   200,    48,   884,   842,
     1821    1025,   536,  1155,  1014,   327,  1136,    -3,   180,   681,   674,
     1822      95,   168,  1137,   843,   686,   376,   675,   441,    47,   386,
     1823     372,   147,   958,    95,   524,   739,   536,  1346,  1135,  1111,
     1824     105,   377,   682,   684,   844,   387,   435,    47,    47,   188,
     1825     683,   685,    95,   389,   605,    95,   831,    68,   937,   176,
     1826     564,   565,  1092,  1404,    47,   478,   285,    61,    47,   390,
     1827    1217,   440,   479,   165,   885,  1220,  1221,    41,    42,   653,
     1828     950,   251,   329,   605,    75,   478,   926,  1208,   605,    75,
     1829     846,  1494,   464,   478,   483,    47,   566,   567,   854,   880,
     1830     585,    54,   109,   521,  -290,    47,   586,   372,   536,   260,
     1831     871,   739,   261,    41,    42,   847,   576,   246,  1194,   916,
     1832     607,   848,  1187,    47,  1017,   251,   755,  1459,  1091,    47,
     1833     527,    47,  1041,   228,    95,   527,   761,   229,   527,  1203,
     1834     233,  1552,   235,   762,  1262,   770,  1203,    95,   342,   244,
     1835    1553,   740,   109,  1453,  1454,    47,   211,   560,   561,   109,
     1836     112,  1563,  1211,    41,    42,   578,   885,   410,  1567,   391,
     1837      41,    42,   397,   188,   112,   579,  -112,  1568,   393,    47,
     1838    1173,  1175,   936,  1408,   874,   392,   249,    47,   875,   372,
     1839    1151,    47,   813,    96,   394,    47,    95,  -112,   112,  1203,
     1840     112,   327,   327,  -520,   936,   979,  1215,  1383,    95,  1107,
     1841      67,   824,  1213,   562,   563,   111,   712,   707,   398,   399,
     1842     653,   438,   263,   105,  1119,   400,   505,   740,   896,   654,
     1843    1261,  1036,   406,  -469,   479,   -10,   401,   112,    95,   407,
     1844     653,  1122,   112,   653,   618,   402,   109,   403,    48,  1080,
     1845     404,    75,   486,   713,   479,  1038,  -443,    41,    42,   907,
     1846    1344,   767,   479,  1107,  -469,  -444,  -469,  1345,   909,   714,
     1847    -469,    75,  -112,  -112,   693,   490,   228,   327,   784,    75,
     1848     586,   767,   507,   790,   767,   789,   275,   211,  -112,  1019,
     1849     112,   715,  -291,   831,   277,  1008,   327,    47,    68,     8,
     1850       9,    10,    11,    12,   278,  1381,   737,   716,    61,    47,
     1851     717,    47,   342,   713,   172,   109,    95,   833,   715,     2,
     1852     205,     4,     5,     6,     7,    75,    41,    42,    31,   929,
     1853      47,   472,   730,  1200,   930,   557,   612,  1134,   731,   478,
     1854     558,   559,    54,   876,  1036,  1394,    47,   877,   750,  1201,
     1855     754,   176,   112,  1200,  1350,   330,    34,   252,    55,    55,
     1856    1523,    47,   327,   112,    47,   112,  1528,  1500,   638,  1326,
     1857     897,   712,   642,  1051,  1500,   500,   607,   501,  1335,  1337,
     1858    1184,   955,  1431,   831,    35,   109,    36,  1548,   342,   331,
     1859      55,  1049,  1555,   188,  1336,  1338,    41,    42,    47,  1420,
     1860      47,   898,  1428,   652,   906,   872,   908,   899,   370,   587,
     1861     607,   410,  1096,   112,   775,  -112,   228,  -112,   233,   112,
     1862     747,  -112,    55,   112,  1352,    55,   748,  1549,   757,   774,
     1863    1384,   112,   161,   332,   758,   775,  -112,  -112,   441,   777,
     1864    1130,   410,   333,   704,    47,    47,   876,  1467,   193,   778,
     1865    1118,   216,  1471,   416,   226,  -105,    37,   920,    47,  -105,
     1866      40,   936,    37,   775,   105,  1056,    40,    41,    42,  1502,
     1867     674,  1503,   954,    41,    42,   605,   436,   675,   703,    95,
     1868    1369,   334,  1493,   612,  1370,   705,   444,     8,     9,    10,
     1869      11,    12,  1154,    43,  1254,  1393,   568,   569,   922,   839,
     1870     739,   610,   892,   146,   775,  1003,   228,   109,   479,   611,
     1871     590,  1004,   410,   347,   737,   910,    31,   410,    41,    42,
     1872       8,     9,    10,    11,    12,    75,  1550,   959,   371,   610,
     1873     763,   211,   764,   161,  1177,   765,  1252,   960,   771,    47,
     1874    1256,   933,  1051,   335,    34,   211,   373,   934,   375,    31,
     1875     479,    47,  1294,  1295,   833,   528,  1007,  1004,  1016,  1250,
     1876    1377,   935,   831,   945,   731,   586,   775,    75,  1562,   948,
     1877     775,  1009,   161,   464,  1562,   384,   979,    34,    55,   388,
     1878     979,   979,   251,   329,   410,  1562,   578,   396,   410,  1562,
     1879     737,   941,  1378,   941,   653,   161,   579,   841,   775,   612,
     1880      37,   112,   653,  1380,    40,   329,   410,   443,    55,   775,
     1881     408,    41,    42,  1385,   115,   913,   740,   410,   936,   775,
     1882     109,    67,   138,   237,    47,   537,   538,   539,  1198,   425,
     1883    1372,    41,    42,   109,   873,   138,   139,   744,    47,   211,
     1884    1390,  1391,  1450,  1078,    41,    42,    47,   745,  1447,   540,
     1885     888,   541,   426,   542,   543,  1469,   431,   238,   158,   449,
     1886    1516,   775,   239,  1573,    47,   904,  1517,  1441,  1004,   586,
     1887     752,  -367,  1157,   919,   410,   753,   936,   936,  -396,    37,
     1888    1123,   182,   183,    40,   112,  1169,   932,   410,   704,   491,
     1889      41,    42,  1172,   653,   610,   511,  1342,   740,   418,   670,
     1890     410,   112,   468,   690,   653,  1174,   112,   610,   290,    68,
     1891     109,   469,   138,   139,   515,   373,   698,   257,   410,    61,
     1892    1245,    41,    42,   158,   699,  1139,   700,   109,   520,   138,
     1893     139,   536,   841,   612,  1447,  1448,    75,   732,    41,    42,
     1894     532,  1237,  1147,   410,   654,   767,   327,  1147,   488,   329,
     1895     410,  1061,   242,    54,   570,   112,  1495,  1496,   323,   855,
     1896     329,   610,   507,  1449,   571,   653,   891,   339,   112,   112,
     1897     112,  1313,  1314,  1315,   528,  1351,  1353,  1354,  1535,   528,
     1898    1461,  1205,   528,   128,  1402,   129,   130,   131,  1402,   572,
     1899     347,   573,   373,   112,    41,    42,  1147,   872,  1421,  1422,
     1900       8,     9,    10,    11,    12,   576,  1078,   338,  1010,  1212,
     1901    1214,  1216,   801,   802,   803,   804,  -440,   429,  1015,   594,
     1902    1124,   433,   667,  1302,  1303,    47,  1305,   841,  1107,    31,
     1903     597,   441,  1309,  1026,   109,  1312,   138,   139,   342,   612,
     1904     797,   798,   647,   654,   668,    41,    42,   799,   800,    55,
     1905     669,   323,   455,  1521,  1461,   671,    37,    34,   182,   183,
     1906      40,   672,    37,   673,   182,   183,    40,    41,    42,    68,
     1907     805,   806,   676,    41,    42,   105,   678,   256,   721,   479,
     1908     696,   718,   759,   433,   723,   719,   495,   936,  -238,   772,
     1909    1485,   347,   776,   609,   162,   610,    75,   780,   834,   609,
     1910     112,   610,   -12,   611,   936,   836,   838,   529,   849,   611,
     1911     158,   901,   -13,    54,   893,   894,   218,   921,   923,   928,
     1912     699,   924,    47,  -417,   977,   949,   704,   653,  -292,  -524,
     1913     963,   970,   748,   972,   704,     8,     9,    10,    11,    12,
     1914     918,   983,   105,  1061,   984,   985,    67,   987,   988,   925,
     1915     989,   990,   612,   927,   595,   999,   347,   602,  1123,   162,
     1916    1011,  1012,  -293,  1013,    31,   112,   112,   112,  1078,     8,
     1917       9,    10,    11,    12,  1027,  1028,   635,   936,   936,   737,
     1918     639,  1029,  1030,   339,     8,     9,    10,    11,    12,  1031,
     1919    1032,  1033,    34,  1044,  -405,  1445,  1427,  -404,    31,  1093,
     1920    1058,   347,   347,   347,  1095,  1103,  1147,  1147,  1147,  1104,
     1921    1105,   211,  1561,    31,  1106,  1112,   993,  1113,  1114,  1115,
     1922     347,  1121,   653,   653,  1131,  1205,    34,  1132,   775,  1167,
     1923    1133,  1138,  1182,  1183,    68,   105,  1143,  1188,   323,   323,
     1924    1146,    34,  1189,  1190,    61,  1191,  1192,   537,   538,   539,
     1925    1300,  1123,   398,   399,  1206,   209,   219,   434,  1207,   400,
     1926     737,    75,  1209,   767,  1078,   406,   455,  1210,  1222,   455,
     1927     401,   540,   407,   541,  1218,   542,  1322,   653,    54,   402,
     1928     653,   403,  1225,   777,   404,   410,  1224,   115,   460,   674,
     1929    1232,  1233,    -3,   778,   347,  1230,   675,  1235,  1124,    47,
     1930      47,  1240,  1534,  1242,   500,  1246,  1251,  1253,   441,   112,
     1931     112,  1255,   495,    68,   323,  1258,   495,  1259,  1078,   434,
     1932    1263,  1078,  1267,   479,  1270,   653,   529,  1272,   529,  1274,
     1933     653,   529,  1275,   323,   529,  1276,   728,  1277,  1278,  1280,
     1934      75,  1304,  1287,   531,  1296,   339,   162,  1297,   112,  1325,
     1935    1147,  1147,   440,  1307,  1123,  1333,  1308,    54,  1339,  1310,
     1936     653,  1341,  1343,  1311,  1348,  1319,  1078,  1347,  1349,  1355,
     1937    1356,  1078,    37,  1357,   182,   183,    40,  1359,   105,  1365,
     1938    1366,  1367,  1368,    41,    42,  1205,   347,  1101,  1375,  1486,
     1939    1376,  1124,  1205,   347,    64,   116,  1379,  1386,   148,   323,
     1940     105,  1078,  1387,   149,   150,  1315,  1395,    47,   112,   698,
     1941     829,   410,   175,   602,  1396,  1398,  1405,   112,  1415,   700,
     1942     105,  1416,  1408,   653,  -406,  1419,    64,  1430,   653,  1434,
     1943    1436,  1438,    47,    47,  1439,   160,  1446,  1455,  1451,   159,
     1944    1440,  1456,   870,  1460,  1370,  1205,   653,   602,   653,  1536,
     1945    1457,  1458,   653,   879,  1465,   653,  1470,    47,  1544,   372,
     1946      55,   220,   175,   653,  1078,   175,  1358,   653,  1472,  1078,
     1947    1474,  1476,  1478,    68,  1360,  1361,  1362,  1480,  1482,   105,
     1948      68,  1483,  1488,   479,  1489,  1490,  1501,  1078,  1511,  1078,
     1949     479,  1519,  1513,  1078,  1124,  1515,  1078,  1527,   258,  1520,
     1950      75,  1542,   460,  1547,  1078,   460,  1543,    75,  1078,   339,
     1951    1554,   175,  1556,   105,   213,  1558,  1564,    54,   327,  1571,
     1952    1572,  1223,  1397,   808,    54,   807,  1324,    55,   809,   212,
     1953     214,   455,   810,    68,  1219,   811,  1522,  1433,  1574,   231,
     1954     328,  1389,  1257,   479,   347,   728,  1504,   241,   258,   349,
     1955    1406,  1229,   942,  1108,     2,   205,     4,     5,     6,     7,
     1956      75,   495,   531,   694,   531,   729,   213,   531,   951,   695,
     1957     531,  1110,  1142,   826,   175,  1057,  1120,    54,   900,   405,
     1958    1334,   212,   214,   227,   816,   339,   742,   973,     8,     9,
     1959      10,    11,    12,     0,   423,   817,   965,   428,   430,   818,
     1960     347,   347,   159,  1444,     0,     0,     0,     0,     0,   213,
     1961       0,     0,     0,     0,     0,     0,   105,    31,     0,    35,
     1962      55,    36,     0,   447,   212,   214,     0,   450,   175,   451,
     1963      37,     0,   173,   174,    40,   175,     0,     0,   466,   105,
     1964       0,    41,    42,  1018,    64,    34,   105,   829,     0,   480,
     1965      37,     0,   182,   183,    40,     0,     0,     0,     0,   487,
     1966       0,    41,    42,     0,     0,     0,     0,   430,   517,     0,
     1967     213,     0,     0,     0,     0,     0,   123,   126,   127,     0,
     1968     728,   534,   535,     0,     0,   212,   214,   698,     0,   410,
     1969     728,     0,     0,   556,     0,     0,     0,   700,     0,   105,
     1970       0,     0,     0,     0,   175,   728,     0,     0,   213,     0,
     1971       0,     0,   213,     8,     9,    10,    11,    12,     0,     0,
     1972     486,   175,     0,   212,   214,   175,     0,   212,   214,   535,
     1973       0,     0,     0,     0,     0,   258,     0,   829,   603,     0,
     1974       0,   455,    31,   506,   631,     0,     0,   253,     0,   254,
     1975       0,     0,     0,     0,     0,     0,     0,   636,     0,     0,
     1976     455,   636,    55,    55,   258,   535,     0,   460,     0,     0,
     1977      34,     0,     0,     0,   729,    37,  1388,   182,   183,    40,
     1978       0,   495,  1125,   323,     0,    55,    41,    42,   175,     0,
     1979      37,     0,   182,   183,    40,     0,     0,     0,     0,   213,
     1980       0,    41,    42,     0,     0,    55,    37,     0,   182,   183,
     1981      40,   480,   184,     0,   212,   214,     0,    41,    42,     0,
     1982       0,    37,   185,   173,   174,    40,   349,  1532,     0,   410,
     1983     395,   480,    41,    42,   870,     0,     0,  1533,     0,   480,
     1984     414,   415,     0,   184,     0,   419,     0,   421,   422,     0,
     1985     347,   347,     0,   185,     0,     0,     0,     0,   371,    55,
     1986       0,     0,     0,     0,    55,   724,     0,     0,   430,     0,
     1987     166,     0,   171,     0,     0,   177,   178,   179,     0,   181,
     1988     213,     0,     0,   738,     0,    64,     0,     0,     0,     0,
     1989       0,     0,     0,   430,   232,   212,   214,   430,    55,     8,
     1990       9,    10,    11,    12,   728,   728,   247,   248,     0,   729,
     1991       0,     0,   212,     0,     0,   455,   829,     0,     0,   729,
     1992      37,     0,   182,   183,    40,     0,   258,   349,    31,     0,
     1993     213,    41,    42,     0,   729,  1505,     0,  1509,     0,     0,
     1994       0,     0,   794,   795,   796,   212,   214,    37,     0,   173,
     1995     174,    40,     0,     0,   175,     0,    34,   264,    41,    42,
     1996       0,     0,   728,   728,     0,     0,     0,   265,     0,     0,
     1997       0,     0,  1538,   819,  1540,   347,     0,   460,     0,     0,
     1998       0,     0,     0,     0,   375,   535,     0,   175,     0,     0,
     1999       0,   636,   832,     0,   603,     0,   460,     0,   959,     0,
     2000     610,    55,     0,   175,     0,   851,     0,     0,   960,     0,
     2001       0,     0,     0,     0,     0,     0,     0,  1569,   175,  1570,
     2002       0,     0,     0,   603,    55,     0,     0,     0,   603,     0,
     2003       0,    55,  1577,  1578,   636,   339,     0,   349,   349,   349,
     2004       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2005      73,     0,     0,   213,     0,     0,   349,     0,     0,     0,
     2006    1125,     0,     0,     0,     0,     0,     0,     0,   212,   214,
     2007       0,     0,     0,     0,   724,     0,     0,     0,     0,     0,
     2008       0,   213,    73,     0,    55,   480,   213,     0,     0,     0,
     2009     258,   738,     0,     0,   938,     0,   212,   214,     0,     0,
     2010       0,   212,   214,     0,     0,     0,  1331,     0,     0,     0,
     2011       0,     0,     0,     0,     0,   175,     0,   221,     0,   535,
     2012       0,     0,     0,     0,     0,     0,     0,   480,     0,     0,
     2013     349,     0,     0,   729,   729,     0,     0,     0,   728,   964,
     2014       0,     0,   430,     0,     0,     0,   728,   728,   728,     0,
     2015       0,   460,     0,  1125,     0,     0,     0,     0,     0,     0,
     2016       0,     0,     0,   601,   608,   994,   258,   738,     0,     0,
     2017       0,     0,   992,     0,   213,   632,   633,     0,     0,   125,
     2018     125,   125,     0,     0,     0,     0,     0,     0,   213,   212,
     2019     214,   729,   729,     0,   728,     0,     0,     0,     0,     0,
     2020       0,     0,     0,   212,   214,   352,     0,     0,     0,   724,
     2021       0,     0,   535,     0,     0,     0,     0,     0,     0,   724,
     2022       0,     0,   349,   506,   636,     0,     0,  1024,   636,   832,
     2023       0,     0,   821,   822,   724,     0,     0,     0,     0,     0,
     2024       0,     0,     0,     0,  1035,     0,     0,     0,     0,     0,
     2025     125,     0,   125,     0,     0,     0,  1125,     8,     9,    10,
     2026      11,    12,   856,     0,     0,   859,   860,     0,   863,     0,
     2027     865,   866,     0,     0,     0,   867,   868,   274,     0,   448,
     2028       0,   175,   213,     0,     0,     0,    31,     0,  1507,     0,
     2029    1507,     0,     0,     0,     0,     0,    64,   212,   214,     0,
     2030      73,     0,     0,     0,     0,    73,   412,     0,     0,     0,
     2031       0,     0,     0,   420,    34,     0,     0,     0,   636,    37,
     2032       0,   182,   183,    40,     0,  1507,     0,  1507,     0,     0,
     2033      41,    42,     0,   125,     0,  1332,     0,     0,     0,     0,
     2034       0,   125,     0,   125,   125,     0,     0,     0,   125,     0,
     2035     125,   125,     0,     0,  1117,   323,  1532,     0,   410,   943,
     2036     944,     0,   430,   116,     0,   946,  1533,   729,     0,     8,
     2037       9,    10,    11,    12,     0,   729,   729,   729,     0,     0,
     2038     349,     0,     0,     0,     0,   412,     0,     0,     0,     8,
     2039       9,    10,    11,    12,     0,     0,     0,     0,    31,     0,
     2040     221,     0,     0,     0,     0,     0,   535,     0,     0,     0,
     2041       0,     0,     0,     0,     0,   603,     0,     0,    31,     0,
     2042     125,     0,     0,   729,     0,     0,    34,     0,   428,     0,
     2043       0,    37,     0,   724,   724,    40,   349,   349,     0,     0,
     2044       0,   584,    41,    42,     0,     0,    34,   517,     0,   588,
     2045       0,    37,   591,   182,   183,    40,  1204,     0,     0,     0,
     2046       0,     0,    41,    42,     0,     0,     0,    73,    43,     0,
     2047       0,    76,     0,     0,   213,     0,     0,     0,   146,     0,
     2048       0,     0,   352,     0,     0,     0,     0,    73,   264,   212,
     2049     214,   724,   724,     0,     0,    73,     0,   636,   265,     0,
     2050       0,     0,     0,    76,     0,     0,     0,     0,     0,     0,
     2051       0,     0,     0,     0,     0,   412,     0,     0,     0,   420,
     2052       0,   352,     0,     0,  1508,     0,  1508,     0,   544,   545,
     2053     546,   547,   548,   549,   550,   551,   552,   553,   222,   352,
     2054       0,    73,     0,     0,   952,     0,   953,     0,     0,     0,
     2055       0,     0,     0,   956,   957,     0,   738,     0,   962,     0,
     2056       0,  1508,   554,  1508,   535,     8,     9,    10,    11,    12,
     2057     967,     0,     0,     0,     0,   971,     0,     0,     0,   175,
     2058       0,     0,     0,   352,     0,     0,     0,     0,     0,     0,
     2059       0,     0,     0,     0,    31,     0,     0,     0,     0,  1301,
     2060       0,  1000,     0,     0,   412,     0,     0,     0,     0,     0,
     2061       0,     0,     0,     0,     0,     0,   258,     0,     0,     0,
     2062       0,    64,    34,     0,     0,     0,   354,    37,     0,     0,
     2063       0,    40,     0,     0,     0,   724,     0,   738,    41,    42,
     2064       0,   116,     0,     0,     0,     0,   601,     0,   352,     0,
     2065       0,     0,     0,     0,   213,     0,     0,     0,     0,     0,
     2066       0,     0,     0,     0,   744,     0,     0,   724,     0,   212,
     2067     214,     0,     0,     0,   745,   724,   724,   724,     0,     0,
     2068       0,     0,     0,     0,     0,     0,   349,   349,     0,     0,
     2069       0,     0,     0,   352,   352,   352,   584,   584,     0,     0,
     2070    1204,     0,     0,  1045,  1046,  1047,  1048,     0,  1050,     0,
     2071       0,     0,   352,     0,     0,     0,     0,     0,     0,     0,
     2072       0,    76,     0,   724,  1094,     0,    76,     0,     0,     0,
     2073     352,     0,     0,     0,   116,   125,   125,     0,  1100,     0,
     2074       0,    73,     0,     0,     0,     0,     0,   352,     0,  1234,
     2075       0,   213,     0,     0,     0,     0,   175,     0,     0,     0,
     2076       0,     0,     0,     0,     0,   125,   212,   214,   125,   125,
     2077       0,   125,     0,   125,   125,     0,     0,  1116,   125,   125,
     2078       0,     0,     0,    73,     0,   911,   352,     0,     0,   914,
    20242079       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2025       18,    19,    20,    21,    22,    23,    24,    25,   506,     0,
    2026       26,    27,    28,     0,    64,   323,     0,     0,     0,    31,
    2027        0,     0,     0,     0,   352,     0,     0,  1045,  1046,  1047,
    2028     1048,     0,  1050,     0,     0,     0,   636,     0,     8,     9,
    2029       10,    11,    12,     0,     0,     0,    76,    34,  1094,     0,
    2030        0,     0,    37,     0,    38,    39,    40,     0,     0,     0,
    2031        0,     0,  1100,    41,    42,     0,     0,    31,     0,   352,
    2032      352,   352,  1116,     0,     0,     0,     0,     0,    76,     0,
    2033      430,   116,   212,     0,     0,     0,     0,     0,   352,    43,
    2034        0,   156,   125,   125,     0,    34,     0,     0,   349,    45,
    2035       37,  1115,     0,     0,    40,     0,   352,  1218,     0,     0,
    2036        0,    41,    42,   222,     0,     0,     0,    73,     0,     0,
    2037        0,     0,   125,   352,     0,   125,   125,     0,   125,     0,
    2038      125,   125,     0,   603,     0,   125,   125,    43,     0,     0,
    2039        0,  1143,     0,     0,     0,     0,   428,   146,  1151,     0,
    2040        0,   724,   724,  1155,   349,   349,     0,     0,  1159,    73,
    2041     1160,     0,   352,     0,  1162,  1163,  1164,     0,     0,  1167,
    2042        0,     0,     0,     0,  1203,     0,     0,     0,  1179,     0,
    2043        0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
    2044        0,     0,     0,     0,     0,     0,  1194,  1195,     0,   352,
    2045        0,   354,     0,     0,     0,    78,     0,     0,     0,   724,
    2046      724,    31,     0,     0,   125,   636,     0,     0,     0,   125,
    2047      125,     0,     0,  1225,     0,   125,  1227,     0,     0,     0,
    2048        0,     0,   175,     0,     0,     0,     0,    78,     0,    34,
    2049        0,   352,     0,     0,    37,     0,     0,     0,    40,     0,
    2050        0,   352,     0,     0,   352,    41,    42,     0,     0,   221,
    2051        0,   352,     0,     0,  1242,     0,   352,     0,     0,     0,
    2052     1246,  1247,   223,   738,   212,     0,     0,     0,     0,     0,
    2053        0,   744,  1258,     0,     0,     0,     0,  1262,     0,     0,
    2054     1266,   745,  1267,     0,     0,  1269,    76,     0,     0,     0,
    2055        0,    76,   412,     0,     0,     0,     0,     0,  1277,   420,
    2056        0,     0,     0,     0,     0,     0,  1299,     0,     0,     0,
    2057        0,  1284,    85,  1286,  1287,  1288,  1289,     0,    73,     0,
    2058        0,     0,     0,   258,     0,     0,     0,     0,    64,  1296,
    2059        0,  1297,     0,     0,     0,   171,     0,  1386,     0,     0,
    2060        0,   724,     0,   738,    85,    55,    55,   116,     0,     0,
     2080      18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
     2081       0,   349,     0,     0,     0,     0,     0,  1144,     0,    31,
     2082       0,   222,   412,   352,  1152,     0,     0,     0,     0,  1156,
     2083       0,     0,     0,     0,  1160,     0,  1161,   116,     0,     0,
     2084    1163,  1164,  1165,     0,     0,  1168,     0,    34,     0,     0,
     2085       0,     0,     0,     0,  1180,     0,     0,   125,  -294,     0,
     2086    1204,     0,   125,   125,     0,   352,     0,  1204,   125,     0,
     2087       0,     0,  1195,  1196,  1323,   352,     0,     0,   352,     0,
     2088       0,     0,     0,   221,     0,   352,     0,     0,    76,     0,
     2089     352,     0,     0,     0,     0,     0,     0,     0,     0,  1226,
     2090       0,     0,  1228,   354,     0,     0,     0,     0,    76,     0,
     2091       0,     0,     0,     0,     0,     0,    76,     0,     0,     0,
     2092    1204,     0,     0,     0,     0,     0,     0,  1557,     0,     0,
     2093       0,     0,     0,     0,     0,     0,     0,   584,     0,     0,
     2094       0,  1244,   354,     0,     0,     0,     0,  1248,  1249,     0,
     2095       0,     0,    73,     0,     0,     0,     0,     0,     0,  1260,
     2096     354,     0,    76,    78,  1264,     0,     0,  1268,     0,  1269,
     2097       0,     0,  1271,     0,     0,     0,     0,     0,     0,     0,
     2098       0,     0,     0,     0,     0,  1279,     0,     0,     0,     0,
     2099       0,     0,     0,     0,     0,    78,   281,   282,  1286,   283,
     2100    1288,  1289,  1290,  1291,   354,     0,     0,     0,     0,     0,
     2101       0,     0,     0,     0,     0,     0,  1298,     0,  1299,     0,
     2102       0,     0,   171,     0,     0,   284,     0,     0,     0,     0,
     2103     223,   649,     0,   138,   139,   286,   352,     0,   287,   650,
     2104     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2105     412,  1327,  1328,   293,     0,     0,     0,     0,     0,     0,
     2106       0,     0,     0,     0,     0,     0,     0,     0,   294,   354,
     2107     651,     0,   652,   379,     0,     0,     0,   296,   380,   298,
     2108     299,   300,   301,     0,     0,     0,     0,     0,     0,   352,
     2109     352,     0,   352,   352,     0,     0,     0,     0,     0,     0,
     2110       0,     0,     0,  1363,  1364,     0,     0,     0,     0,     0,
     2111       0,     0,    73,  1374,   354,   354,   354,     0,   355,     0,
     2112       0,     0,     0,     0,     0,     0,     0,     0,     0,  1158,
     2113       0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
     2114       0,     0,     0,     0,     0,  1170,     0,   352,   352,     0,
     2115       0,   354,     0,     0,     0,     0,     0,     0,     0,     0,
     2116       0,     0,    76,     0,     0,  1407,     0,     0,   354,     0,
     2117       0,     0,     0,     0,     0,     0,     0,  1411,     0,  1412,
     2118    1413,  1414,   281,   282,     0,   283,     0,     0,     0,     0,
     2119       0,  1418,     0,     0,     0,     0,     0,     0,     0,     0,
     2120    1429,     0,     0,     0,    76,     0,     0,   354,     0,     0,
     2121       0,   284,   352,    78,     0,     0,  1442,   285,    78,     0,
     2122       0,   286,  1238,     0,   287,   288,   289,   290,    41,    42,
     2123       0,   291,   292,     0,     0,     0,     0,     0,    85,   293,
     2124       0,     0,     0,     0,   354,     0,     0,     0,     0,     0,
     2125       0,     0,   125,     0,   294,   221,   378,     0,     0,   379,
     2126       0,     0,     0,   296,   380,   298,   299,   300,   301,     0,
     2127      85,     0,  1491,  1492,     0,     0,     0,    73,     0,     0,
     2128       0,     0,     0,     0,     0,  1497,   354,     0,     0,     0,
     2129       0,   352,  1497,   352,     0,     0,   354,     0,     0,   354,
     2130       0,     0,     0,     0,   222,   224,   354,     0,     0,     0,
     2131       0,   354,     0,   223,     0,     0,     0,     0,     0,     0,
     2132       0,     0,     0,   352,     0,  1531,     0,     0,     0,  1537,
     2133       0,   352,   352,   352,     0,     0,     0,     0,     0,     0,
     2134       0,     0,   352,   352,     0,     0,     0,     0,     0,     0,
     2135       0,     0,     0,     0,     0,     0,    73,     0,  1559,     0,
     2136    1560,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2137       0,     0,     0,    76,     0,     0,     0,   125,     0,   352,
     2138      78,     0,     0,     0,     0,     0,     0,     0,  1575,  1576,
     2139       0,     0,     0,   362,     0,   355,  1579,  1580,     0,     0,
     2140      78,     0,     0,     0,     0,     0,  -519,     0,    78,     1,
     2141       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
     2142      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2143      22,    23,    24,    25,   355,     0,    26,    27,    28,    29,
     2144       0,     0,    30,     0,     0,    31,    32,     0,     0,     0,
     2145       0,     0,   355,     0,    78,     0,     0,   354,     0,     0,
     2146       0,     0,     0,     0,     0,     0,     0,   352,     0,     0,
     2147      33,     0,     0,    34,     0,    35,     0,    36,    37,     0,
     2148      38,    39,    40,     0,     0,     0,     0,     0,    85,    41,
     2149      42,     0,     0,    85,     0,     0,   355,     0,  1034,     0,
     2150       0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
     2151     354,   354,     0,   354,   354,    43,    73,    44,     0,     0,
     2152       0,     0,     0,    73,     0,    45,     0,     0,   281,   282,
     2153      31,   283,     0,    76,     0,     8,     9,    10,    11,    12,
     2154      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2155      23,    24,    25,  -295,     0,     0,     0,   284,    34,     0,
     2156       0,   355,     0,   285,    31,     0,     0,   286,   354,   354,
     2157     287,   288,   289,   290,    41,    42,    73,   291,   292,     0,
     2158       0,     0,     0,     0,     0,   293,     0,     0,   224,     0,
     2159       0,     0,    34,     0,     0,     0,     0,     0,     0,     0,
     2160     294,     0,   378,  -295,     0,     0,   355,   355,   355,   296,
     2161     827,   298,   299,   300,   301,     0,     0,     0,     0,     0,
     2162       0,     0,     0,     0,     0,   355,     0,     0,     0,     0,
     2163       0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
     2164       0,     0,     0,   355,     0,     0,     0,     0,     0,     0,
     2165       0,     0,     0,     0,    78,    85,     0,     0,     0,   164,
    20612166     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2062        0,     0,     0,     0,  1325,  1326,     0,     0,     0,     0,
    2063        0,   412,     0,   724,     0,     0,     0,    55,     0,   224,
    2064        0,   724,   724,   724,     0,     0,   222,     0,     0,     0,
    2065        0,     0,   349,   349,     0,     0,     0,     0,   175,     0,
    2066        0,     0,   352,     0,     0,     0,  1203,     0,     0,    55,
    2067        0,     0,    55,     0,     0,  1361,  1362,     0,     0,     0,
    2068        0,     0,     0,     0,     0,  1372,     0,   584,     0,   724,
    2069        0,     0,     0,     0,     0,   588,     0,     0,   591,     0,
    2070      116,     0,     0,   212,     0,    78,     0,     0,     0,     0,
    2071       78,     0,     0,    76,     0,   352,   352,     0,   352,   352,
    2072        0,     0,     0,     0,     0,     0,     0,   362,   354,     0,
    2073        0,     0,     0,    76,     0,     0,     0,  1405,    73,     0,
    2074        0,    76,     0,     0,     0,     0,     0,     0,     0,  1409,
    2075        0,  1410,  1411,  1412,     0,     0,  1503,     0,  1507,     0,
    2076      347,   412,     0,  1416,     0,   420,     0,   354,     0,     0,
    2077        0,     0,  1427,   352,   352,     0,     0,   349,     0,     0,
    2078        0,     0,     0,     0,     0,   354,     0,    76,  1440,     0,
    2079        0,     0,     0,  1536,     0,  1538,     0,     0,     0,   212,
    2080        0,     0,     0,   116,     0,   223,     0,     0,     0,     0,
     2167     362,     0,     0,     0,     0,    85,   222,     0,   217,     0,
     2168       0,     0,     0,    85,     0,     0,     0,     0,     0,     0,
     2169       0,     0,     0,     0,     0,     0,    78,     0,    76,   355,
     2170       0,     0,     0,     0,     0,     0,     0,     0,     0,   362,
     2171       0,     0,   354,     0,   354,     0,     0,     0,     0,     0,
     2172       0,     0,     0,     0,   164,     0,     0,   362,     0,    85,
     2173     271,     0,     0,     0,     0,     0,   355,     0,     0,     0,
     2174       0,     0,     0,     0,   354,     0,     0,     0,     0,     0,
     2175       0,     0,   354,   354,   354,     0,     0,     0,     0,   164,
     2176       0,     0,     0,   354,   354,     0,     0,     0,     0,   368,
     2177       0,   362,     0,   374,     0,     0,     0,    76,   355,     0,
     2178       0,     0,     0,     0,     0,     0,     0,     0,   355,     0,
     2179       0,   355,     0,     0,     0,     0,   223,     0,   355,     0,
     2180     354,     0,     0,   355,     8,     9,    10,    11,    12,    13,
     2181      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2182      24,    25,   164,     0,    26,    27,    28,     0,     0,     0,
     2183       0,     0,     0,    31,   217,     0,   362,     0,     0,     0,
    20812184       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2082        0,     0,    85,     0,     0,    55,  1203,    85,     0,   354,
    2083        0,     0,     0,  1203,     0,     0,     0,   352,  1567,     0,
    2084     1568,     0,     0,     0,  1489,  1490,     0,     0,     0,     0,
    2085      412,     0,     0,  1575,  1576,    55,     0,  1495,     0,   125,
    2086        0,     0,     0,     0,  1495,     0,     0,     0,     0,     0,
    2087        0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
    2088      221,     0,     0,     0,     0,     0,  1203,   355,     0,     0,
    2089        0,     0,    78,  1555,   354,     0,     0,  1529,     0,     0,
    2090       78,  1535,    73,     0,     0,     0,     0,     0,     0,     0,
    2091        0,     0,     0,     0,     0,   352,     0,   352,     0,     0,
    2092        0,     0,   224,     0,     0,     0,   355,     0,     0,     0,
    2093     1557,     0,  1558,     0,     0,     0,     0,     0,     0,   354,
    2094      354,   354,   584,   584,   355,     0,    78,   352,     0,     0,
    2095        0,     0,     0,     0,     0,   352,   352,   352,   354,     0,
    2096     1573,  1574,     0,     0,     0,     0,   352,   352,  1577,  1578,
    2097        0,     0,     0,     0,     0,     0,   354,     0,     0,     0,
    2098       73,     0,     0,   125,     0,     0,     0,    76,   355,    85,
    2099        0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
    2100        0,     0,     0,   352,   362,     0,     0,     0,     0,    85,
    2101        0,     0,     0,     0,     0,     0,     0,    85,     0,     0,
    2102        0,     0,     0,     0,     0,     0,     0,     0,     0,    76,
    2103        0,   911,   354,     0,     0,   914,     0,   347,     0,     0,
    2104        0,     0,     0,   362,     0,     0,     0,     0,     0,     0,
    2105        0,     0,     0,   355,     0,     0,     0,     0,     0,     0,
    2106        0,   362,     0,    85,     0,     0,     0,     0,   412,   354,
    2107        0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2185       0,     0,   164,   461,     0,     0,     0,     0,     0,     0,
     2186       0,    34,     0,     0,     0,    78,     0,     0,   206,    39,
     2187       0,     0,     0,     0,     0,     0,   374,     0,     0,     0,
     2188       0,   362,   362,   362,   164,     0,     0,     0,   354,     0,
     2189       0,     0,     0,     0,   514,     0,   516,   519,     0,     0,
     2190     362,     0,     0,     0,   522,   523,     0,     0,   461,   516,
     2191     516,   164,     0,   270,     0,     0,     0,     0,   362,     0,
     2192       0,   516,     0,     0,     0,     0,     0,     0,     0,    85,
     2193       0,     0,     0,     0,     0,   362,     0,    76,   281,   282,
     2194       0,   283,     0,     0,    76,     0,     0,     0,     0,   355,
     2195       0,     0,     0,     0,     0,     0,     0,   516,   606,     0,
     2196       0,     0,     0,   630,     0,     0,     0,   284,     0,     0,
     2197       0,    85,     0,   285,   362,     0,     0,   286,     0,     0,
     2198     287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
     2199       0,     0,     0,   516,     0,   293,     0,    76,     0,     0,
     2200       0,     0,   355,   355,     0,   355,   355,     0,     0,     0,
     2201     294,   362,   378,     0,     0,     0,     0,     0,   812,   296,
     2202     380,   298,   299,   300,   301,    78,     0,     0,     0,     0,
     2203       0,     0,     0,     0,     0,   210,     0,     0,     0,   164,
     2204     164,     0,     0,     0,     0,   230,   368,   234,     0,   236,
     2205       0,     0,     0,   362,     0,     0,   245,     0,     0,     0,
     2206     355,   355,     0,   362,     0,     0,   362,   461,     0,     0,
     2207     461,   224,     0,   362,     0,     0,     0,     0,   362,     0,
     2208       0,     0,     0,     0,     0,     0,     0,   210,     0,   234,
     2209     236,   245,     0,     0,     0,     0,     0,     0,     0,     0,
     2210       0,     0,     0,   741,     0,     0,     0,     0,     0,     0,
     2211       0,     0,     0,     0,     0,   164,     0,     0,     0,     0,
     2212       0,     0,     0,     0,     0,   355,     0,   461,     0,   461,
     2213     210,     0,   461,     0,   164,   461,     0,     0,     0,     0,
     2214      85,     0,     0,     0,     0,     0,     0,   368,     0,     0,
     2215       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2216       0,     0,     0,     0,     0,     0,     0,     0,   223,     0,
     2217     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
     2218     516,   516,   516,   516,   516,   516,   516,   516,     0,     0,
     2219      78,   210,     0,   234,   236,   245,     0,     0,     0,     0,
     2220     164,     0,     0,     0,   355,     0,   355,     0,     0,     0,
     2221       0,     0,   368,   516,   606,     0,     0,   837,     0,     0,
     2222       0,     0,     0,     0,   362,     0,     0,     0,     0,   210,
     2223       0,     0,     0,   210,     0,     0,   355,     0,     0,     0,
     2224       0,     0,     0,   606,   355,   355,   355,     0,   606,   504,
     2225       0,     0,     0,     0,     0,   355,   355,   368,   368,   368,
     2226       0,     0,     0,     0,     0,     0,     0,     0,     0,    78,
     2227       0,     0,     0,     0,     0,     0,   368,   362,   362,     0,
     2228     362,   362,     0,     0,     0,     0,     0,     0,     0,     0,
     2229       0,     0,   355,     0,     0,     0,     0,     0,     0,   210,
     2230      85,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2231       0,   741,   516,     0,     0,     0,     0,     0,     0,     0,
     2232     210,     0,     0,     0,     0,   234,   236,   155,     0,     0,
     2233       0,     0,   461,   245,   516,   362,   362,     0,     0,     0,
     2234       0,     0,     0,     0,     0,     0,     0,   516,     0,     0,
     2235     368,     0,   961,     8,     9,    10,    11,    12,    13,    14,
    21082236      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2109       25,   352,     0,     0,     0,     0,    55,     0,   355,   355,
    2110      355,     0,    31,     0,     0,   362,     0,     0,     0,     0,
    2111        0,   354,     0,     0,     0,     0,     0,   355,     0,     0,
    2112        0,   354,     0,     0,   354,     0,     0,     0,     0,   222,
    2113       34,   354,     0,     0,     0,   355,   354,     0,   347,     0,
    2114       73,     0,     0,     0,     0,     0,    78,    73,     0,     0,
    2115        0,     0,   355,     0,     0,     0,     0,     0,     0,     0,
     2237      25,     0,     0,   250,     0,     0,   210,     0,     0,     0,
     2238     355,     0,    31,   255,     0,     0,     0,   741,     0,     0,
     2239       0,     0,     0,   516,   210,     0,     0,     0,     0,   210,
     2240     362,   210,     0,     0,     0,     0,     0,     0,     0,     0,
     2241      34,     0,     0,     0,     0,     0,     0,     0,   210,     0,
     2242       0,   210,   210,     0,     0,   516,     0,     0,     0,    78,
     2243       0,     0,     0,     0,     0,     0,    78,   210,     0,   155,
     2244     516,     0,   368,   224,     0,     0,   630,     0,     0,   368,
     2245       0,   210,     0,   385,     0,     0,     0,     0,   210,     0,
     2246       0,     0,     0,     0,     0,    85,     0,     0,     0,     0,
     2247       0,     0,     0,     0,     0,     0,   417,     0,     0,   362,
     2248       0,   362,     0,     0,     0,     0,     0,     0,     0,    78,
     2249     432,     0,     0,     0,     0,     0,     0,     0,     0,   437,
     2250       0,     0,     0,     0,     0,     0,     0,     0,     0,   445,
     2251       0,   362,     0,     0,     0,     0,     0,     0,     0,   362,
     2252     362,   362,     0,     0,     0,     0,     0,     0,     0,     0,
     2253     362,   362,     0,     0,   471,     0,     0,     0,     0,   481,
     2254       0,     0,   461,     0,    85,     0,     0,     0,     0,     0,
     2255       0,     0,   489,     0,     0,     0,     0,     0,   499,     0,
     2256     503,   461,     0,     0,     0,     0,     0,   362,     0,     0,
     2257       0,     0,     0,     0,   210,     0,     0,     0,   533,     0,
     2258       0,     0,     0,     0,   164,     0,     0,     0,     0,     0,
     2259       0,   516,     0,     0,     0,     0,     0,     0,     0,     0,
     2260     368,     0,   210,     0,     0,     0,     0,   210,     0,     0,
    21162261       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2117      362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2118        0,     0,     0,   584,     0,     0,     0,     0,    78,     0,
    2119        0,   355,     0,     0,     0,   123,   126,   127,    76,     0,
    2120       73,     0,     0,   347,     0,     0,     0,     0,     0,     0,
    2121        0,     0,     0,     0,     0,   362,   362,   362,     0,     0,
    2122        0,     0,     0,     0,     0,     0,     0,     0,   355,     0,
    2123        0,     0,     0,     0,   362,     0,     0,     0,     0,     0,
    2124        0,     0,     0,     0,     0,     0,     0,     0,   347,   347,
    2125      347,     0,   362,     0,     0,     0,     0,     0,     0,     0,
    2126        0,     0,     0,    85,     0,     0,   253,   347,   254,   362,
    2127      355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2128      355,     0,   354,   355,     0,     0,     0,     0,   223,     0,
    2129      355,     0,     0,     0,     0,   355,   412,     0,     0,     0,
    2130        0,     0,     0,     0,     0,    85,     0,     0,   362,     2,
    2131      205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2262       0,   593,   516,     0,     0,     0,   598,     0,     0,     0,
     2263       0,     0,     0,     0,   516,   606,     0,     0,     0,     0,
     2264       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2265       0,     0,     0,     0,   644,   362,   368,   368,   645,   646,
     2266       0,   648,     0,     0,     0,     0,     0,     0,   660,   661,
     2267       0,   662,   663,     0,   664,   516,   665,     0,     0,     0,
     2268       0,     0,  1178,     0,     0,     8,     9,    10,    11,    12,
     2269       0,     0,     0,   593,     0,   210,     0,     0,     0,     0,
     2270       0,   680,     0,     0,    85,     0,     0,     0,     0,   210,
     2271       0,    85,   281,   282,    31,   283,   461,     0,     0,     0,
     2272       0,     0,     0,     0,     0,     0,   691,     0,     0,   504,
     2273       0,     0,     0,     0,     0,     0,     0,   697,     0,     0,
     2274       0,   284,    34,     0,     0,     0,     0,   285,   516,     0,
     2275       0,   286,     0,     0,   287,   288,   289,   290,    41,    42,
     2276     733,   291,   292,     0,    85,     0,   736,     0,     0,   293,
     2277       0,   471,     0,     0,     0,     0,   741,     0,     0,     0,
     2278       0,     0,     0,     0,   294,     0,   378,     0,     0,     0,
     2279     210,     0,   516,   296,  1179,   298,   299,   300,   301,     0,
     2280       0,     0,     0,   210,     0,     0,   516,   516,   773,     0,
     2281       0,     0,     0,     0,     0,     0,     0,     0,   217,     0,
     2282       0,     0,   210,     0,   788,     0,     0,     0,     0,     0,
     2283       0,   204,     2,   205,     4,     5,     6,     7,     8,     9,
     2284      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2285      20,    21,    22,    23,    24,    25,     0,   741,    26,    27,
     2286      28,   815,     0,     0,     0,     0,     0,    31,     0,     0,
     2287     825,     0,     0,     0,     0,     0,     0,   828,     0,     0,
     2288       0,     0,   835,     0,     0,     0,     0,     0,     0,     0,
     2289       0,     0,     0,   850,     0,    34,     0,    35,     0,    36,
     2290      37,     0,   206,    39,    40,     0,   368,   368,     0,   210,
     2291       0,    41,    42,     0,     0,   217,     0,     0,     0,     0,
     2292       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2293       0,     0,     0,     0,   890,   210,     0,    43,     0,   207,
     2294       0,     0,     0,     0,     0,     0,     0,   208,     0,     0,
     2295       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2296       0,     0,     0,   210,     0,     0,     0,     0,     0,     0,
     2297     835,     0,     0,     0,     0,     0,     8,     9,    10,    11,
     2298      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2299      22,    23,    24,    25,  -294,   210,    26,    27,    28,     0,
     2300       0,     0,     0,     0,     0,    31,   210,     0,     0,     0,
     2301       0,     0,     0,     0,     0,     0,     0,   516,     0,     0,
     2302       0,     0,     0,     0,     0,   250,     0,     0,     0,     0,
     2303       0,   368,     0,    34,   516,   968,   969,     0,     0,     0,
     2304      38,    39,     0,     0,  -294,     0,     0,     0,     0,   986,
     2305       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2306       0,     0,     0,     0,     0,     0,  1001,     0,  1002,     0,
     2307       0,     0,  1006,     0,     0,   643,     0,   338,     0,     0,
     2308       0,     0,     0,     0,     0,   110,     0,     0,   210,   461,
     2309       0,   461,     0,     0,     0,     0,     0,     0,     0,     0,
     2310       0,     0,     0,     0,     0,     0,     0,   516,   516,     0,
     2311       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2312     281,   282,     0,   283,     0,     0,   461,     0,   461,     0,
     2313       0,     0,     0,     0,     0,     0,     0,     0,  1039,     0,
     2314       0,     0,     0,     0,     0,  1040,     0,     0,     0,   284,
     2315       0,     0,     0,     0,     0,   285,   164,     0,  1042,   286,
     2316    1043,     0,   287,   288,   289,   290,    41,    42,     0,   291,
     2317     292,     0,     0,     0,  1055,   210,     0,   293,     0,     0,
     2318       0,  1059,     0,     0,     0,     0,     0,     0,     0,     0,
     2319       0,     0,   294,  1097,   378,     0,  1098,     0,     0,   781,
     2320       0,   296,   380,   298,   299,   300,   301,     0,     0,     0,
     2321       0,     0,     0,     0,   598,     0,     0,     0,     0,     0,
     2322       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2323       0,     0,     0,     0,   341,   363,     0,     0,     0,     0,
     2324       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2325       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2326       0,     0,     0,     0,     0,     0,     0,     0,   413,     0,
     2327       0,     0,   210,     0,     0,   413,     0,     1,     2,     3,
     2328       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2329      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2330      24,    25,     0,  1162,    26,    27,    28,    29,     0,     0,
     2331      30,     0,     0,    31,    32,     8,     9,    10,    11,    12,
    21322332      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2133       23,    24,    25,     0,     0,   354,   354,     0,   354,   354,
    2134        0,   347,     0,     0,    31,   362,     0,     0,     0,   395,
    2135        0,     0,     0,     0,     0,     0,     0,    78,    76,   414,
    2136      415,     0,     0,     0,   419,     0,   421,   422,     0,     0,
    2137        0,     0,    34,     0,    35,  1157,    36,    37,     0,   173,
    2138      174,    40,     0,     0,     0,     0,     0,   362,    41,    42,
    2139        0,  1169,     0,   354,   354,     0,     0,   362,     0,     0,
    2140      362,     0,     0,     0,     0,   224,     0,   362,     0,     0,
    2141        0,     0,   362,     0,     8,     9,    10,    11,    12,    13,
    2142       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2143       24,    25,  -294,   347,    26,    27,    28,     0,     0,     0,
    2144      347,   355,     0,    31,     0,     0,     0,     0,     0,     0,
    2145        0,     0,     0,     0,     0,     0,     0,   354,     0,     0,
    2146        0,     0,     0,     0,     0,     0,     0,     0,  1237,     0,
    2147        0,    34,     0,     0,    85,     0,    37,     0,   336,   337,
    2148       40,     0,  -294,     0,     0,     0,     0,    41,    42,     0,
    2149        0,     0,     0,     0,   355,   355,     0,   355,   355,     0,
    2150      222,     0,     0,     0,     0,     0,     0,    55,     0,     0,
    2151        0,     0,     0,   643,     0,   338,     0,    78,     0,     0,
    2152        0,     0,    76,   634,     0,   164,     0,     0,     0,     0,
    2153        0,     0,     0,     0,     0,   354,     0,   354,     0,     0,
    2154        0,     0,     0,     0,   217,     0,     0,     0,     0,     0,
    2155        0,     0,   355,   355,     0,     0,     0,     0,   362,     0,
    2156      281,   282,     0,   283,     0,     0,     0,   354,     0,     0,
    2157        0,     0,     0,     0,    55,   354,   354,   354,     0,     0,
    2158        0,     0,     0,     0,     0,     0,   354,   354,     0,   284,
    2159      164,   347,     0,     0,     0,   285,   271,     0,     0,   286,
    2160       76,     0,   287,   288,   289,   290,    41,    42,     0,   291,
    2161      292,   362,   362,     0,   362,   362,   355,   293,     0,     0,
    2162        0,     0,     0,   354,     0,   164,     0,     0,     0,     0,
    2163        0,     0,   513,     0,    85,   368,     0,     0,     0,   374,
    2164        0,   296,   380,   298,   299,   300,   301,   347,   347,     0,
    2165        0,     0,     0,     0,     0,     0,     0,     0,     0,   223,
    2166        0,     0,     0,     0,     0,     0,     0,    55,     0,   362,
    2167      362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2168        0,    78,     0,     0,     0,     0,     0,     0,   164,     0,
    2169        0,     0,     0,     0,   355,     0,   355,     0,     0,     0,
    2170      217,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2171        0,   354,     0,     0,     0,     0,     0,     0,   164,   461,
    2172        0,     0,     0,     0,     0,     0,   355,     0,     0,     0,
    2173        0,     0,     0,   362,   355,   355,   355,     0,     0,     0,
    2174        0,     0,   374,     0,     0,   355,   355,     0,     0,     0,
    2175      164,   821,   822,     0,     0,     0,     0,     0,     0,    78,
    2176       76,     0,     0,     0,     0,     0,     0,    76,     0,     0,
    2177        0,     0,     0,     0,   461,     0,   224,   164,     0,     0,
    2178        0,   856,   355,     0,   859,   860,     0,   863,     0,   865,
    2179      866,     0,     0,     0,   867,   868,     0,     0,    85,     0,
    2180        0,     0,     0,     0,     0,     0,     0,     0,    55,    55,
    2181        0,   362,     0,   362,     0,     0,     0,     0,     0,     0,
    2182       76,     0,     0,     0,   606,     0,     0,     0,     0,   630,
    2183        0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
    2184        0,     0,     0,   362,     0,     0,   210,     0,     0,     0,
    2185       55,   362,   362,   362,     0,     0,   230,     0,   234,     0,
    2186      236,     0,   362,   362,     0,     0,     0,   245,     0,     0,
    2187      355,     0,     0,     0,     0,     0,    85,     0,   943,   944,
    2188        0,     0,     0,     0,   946,     0,     0,     0,     0,     0,
    2189        0,     0,     0,     0,     0,   347,   347,     0,   210,   362,
    2190      234,   236,   245,     0,    55,   164,   164,     0,     0,    55,
    2191        0,     0,   368,     0,     0,     0,     0,     0,     0,    78,
    2192        0,     0,     0,     0,     0,     0,    78,     0,     0,     0,
    2193        0,     0,     0,   461,     0,     0,   461,     0,     0,     0,
    2194        0,   210,   461,    55,   474,     2,   205,     4,     5,     6,
     2333      23,    24,    25,     0,     0,    26,    27,    28,    33,     0,
     2334       0,    34,     0,    35,    31,    36,    37,   413,    38,    39,
     2335      40,     0,     0,     0,     0,     0,     0,    41,    42,   533,
     2336       0,     0,     0,     0,     0,     0,  1227,     0,     0,     0,
     2337       0,     0,    34,     0,     0,     0,     0,     0,     0,    38,
     2338      39,     0,     0,    43,     0,    44,     0,     0,     0,  -523,
     2339       0,     0,     0,    45,     0,   321,  1241,     0,     0,     0,
     2340       0,  1243,     0,   413,     0,   345,     0,     0,     0,  1247,
     2341       0,   413,   589,     0,   413,   592,     0,   381,   381,     0,
     2342       0,     0,     0,     0,   363,     0,     0,     0,   622,     0,
     2343       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2344    1273,     0,     0,     0,     0,     0,     0,   640,     0,     0,
     2345     341,     0,  1281,     0,     0,  1282,     0,  1283,     0,     0,
     2346     281,   282,     0,   283,     0,     0,     0,     0,     0,     0,
     2347       0,  1292,  1293,     0,     0,     0,     0,   413,     0,     0,
     2348       0,   413,     0,     0,     0,     0,     0,     0,   321,   284,
     2349       0,     0,     0,  1306,     0,   285,     0,     0,     0,   286,
     2350       0,     0,   287,   288,   289,   290,    41,    42,     0,   291,
     2351     292,     0,   363,   485,     0,     0,     0,   293,     0,     0,
     2352    1329,     0,     0,     0,     0,     0,     0,     0,   210,     0,
     2353       0,     0,   294,     0,   378,   413,     0,   993,     0,     0,
     2354       0,   296,   380,   298,   299,   300,   301,     0,     0,     0,
     2355       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2356       0,     0,     0,     0,     0,     0,   413,     0,     0,   363,
     2357       0,     0,     0,     0,     1,     2,   205,     4,     5,     6,
    21952358       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2196       17,    18,    19,    20,    21,    22,    23,    24,    25,   741,
    2197        0,    26,    27,    28,     0,     0,     0,     0,     0,    78,
    2198       31,   164,     0,     0,     0,     0,     0,   362,     0,     0,
    2199        0,     0,   155,   461,     0,   461,     0,     0,   461,     0,
    2200      164,   461,   210,     0,   234,   236,   245,     0,    34,     0,
    2201       35,     0,    36,   368,     0,    38,    39,     0,     0,     0,
    2202      347,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2203        0,     0,     0,     0,     0,     0,    85,     0,   250,     0,
    2204      210,     0,     0,    85,   210,     0,    55,     0,   255,     0,
    2205        0,     0,     0,     0,     0,    -3,     0,     0,     0,     0,
    2206      504,     0,     0,     0,     0,     0,   164,     0,     0,    55,
    2207        0,     0,     0,     0,     0,     0,    55,     0,   368,     0,
    2208      606,     0,     0,   837,     0,     0,     0,     0,     0,     0,
    2209        0,     0,     0,     0,     0,     0,    85,     0,     0,     0,
    2210        0,     0,     0,     0,   155,     0,     0,     0,     0,   606,
    2211      210,     0,     0,     0,   606,     0,     0,     0,   385,     0,
    2212        0,     0,     0,   368,   368,   368,     0,     0,     0,    55,
    2213        0,   210,     0,     0,     0,     0,   234,   236,     0,     0,
    2214        0,   417,   368,     0,   245,     0,     0,     0,     0,     0,
    2215        0,     0,     0,     0,     0,   432,     0,     0,     0,     0,
    2216        0,     0,  1034,     0,   437,     8,     9,    10,    11,    12,
    2217        0,     0,     0,     0,   445,     0,     0,   741,     0,     0,
    2218        0,     0,     0,     0,     0,     0,     0,   210,     0,     0,
    2219        0,     0,   281,   282,    31,   283,     0,     0,   461,   471,
    2220        0,     0,     0,     0,   481,   210,     0,     0,     0,     0,
    2221      210,     0,   210,     0,     0,     0,   368,   489,   961,     0,
    2222        0,   284,    34,   499,     0,   503,     0,   285,     0,   210,
    2223        0,   286,   210,   210,   287,   288,   289,   290,    41,    42,
    2224        0,   291,   292,   533,     0,     0,     0,     0,   210,   293,
    2225        0,     0,     0,   741,     0,     0,     0,     0,     0,     0,
    2226        0,     0,   210,     0,   294,     0,   378,     0,  1233,   210,
    2227        0,     0,     0,   296,   827,   298,   299,   300,   301,     0,
    2228        0,     0,     0,     0,     0,     0,   593,     0,     0,     0,
    2229        0,   598,     0,     0,     0,     0,     0,     0,     0,     0,
    2230        0,     0,     0,     0,     0,     0,     0,     0,   368,     0,
    2231        0,     0,   630,     0,     0,   368,     0,     0,     0,   644,
    2232        0,     0,     0,   645,   646,     0,   648,     0,     0,     0,
    2233        0,     0,     0,   660,   661,     0,   662,   663,     0,   664,
    2234        0,   665,     0,     0,     0,     0,     0,  1177,     0,     0,
    2235        8,     9,    10,    11,    12,     0,     0,     0,   593,     0,
    2236        0,     0,     0,     0,     0,     0,   680,     0,     0,     0,
    2237        0,     0,     0,     0,     0,     0,     0,   281,   282,    31,
    2238      283,     0,     0,     0,     0,   210,     0,     0,     0,     0,
    2239        0,   691,  1321,     0,     0,     0,     0,     0,     0,     0,
    2240        0,     0,   697,     0,     0,     0,   284,    34,   461,     0,
    2241        0,     0,   285,   210,     0,     0,   286,     0,   210,   287,
    2242      288,   289,   290,    41,    42,   733,   291,   292,     0,     0,
    2243        0,   736,     0,     0,   293,     0,   471,     0,     0,     0,
    2244        0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
    2245      164,   378,     0,     0,     0,     0,     0,     0,   296,  1178,
    2246      298,   299,   300,   301,     0,     0,   368,     0,     0,     0,
    2247        0,     0,     0,   773,     0,     0,     0,     0,     0,     0,
    2248        0,     0,     0,     0,     0,     0,     0,     0,     0,   788,
    2249        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2250        0,   606,     0,     0,     0,     0,   210,     0,     0,     0,
    2251        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2252      210,     0,   368,   368,     0,     0,   815,     0,     0,     0,
    2253        0,     0,     0,     0,     0,   825,     0,     0,     0,     0,
    2254      504,     0,   828,     0,     0,   281,   282,   835,   283,     0,
    2255        0,     0,     0,     0,     0,     0,     0,     0,   850,     0,
    2256        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2257        0,     0,     0,     0,   284,     0,     0,     0,     0,     0,
    2258      285,     0,   461,     0,   286,     0,     0,   287,   288,   289,
    2259      290,    41,    42,     0,   291,   292,     0,     0,     0,   890,
    2260        0,   210,   293,     0,     0,     0,     0,     0,     0,     0,
    2261        0,     0,     0,     0,   210,     0,     0,   294,     0,   378,
    2262        0,     0,   379,     0,     0,     0,   296,   380,   298,   299,
    2263      300,   301,     0,   210,     0,   835,     0,     0,     0,     0,
    2264        0,   741,     0,     0,     1,     2,     3,     4,     5,     6,
     2359      17,    18,    19,    20,    21,    22,    23,    24,    25,  -294,
     2360       0,    26,    27,    28,    29,     0,     0,    30,     0,   413,
     2361      31,     0,   341,   363,     0,     0,     0,     0,  1399,     0,
     2362    1400,     0,     0,     0,     0,     0,     0,     0,     0,   381,
     2363       0,     0,     0,  1409,     0,  1410,     0,     0,    34,     0,
     2364      35,     0,    36,     0,     0,    38,    39,     0,     0,  -294,
     2365       0,     0,     0,  1417,     0,     0,     0,     0,   413,   413,
     2366       0,     0,     0,     0,     0,     0,     0,     0,     0,  1435,
     2367    1437,     0,     0,     0,     0,     0,     0,   830,   363,     0,
     2368     363,  1443,    44,     0,  1247,     0,     0,     0,     0,   622,
     2369     110,   622,   622,     0,     0,     0,     0,     0,   622,     0,
     2370       0,     0,     0,     0,     0,     0,  1466,     0,   869,   363,
     2371       0,     0,     0,     0,   363,  1473,     0,     0,  1475,     0,
     2372    1477,  1479,  1481,   363,   363,   363,     0,     0,     0,     0,
     2373       0,   735,     0,     0,     0,     0,     0,     0,     0,     0,
     2374       0,     0,   363,     0,     0,     0,     0,   413,   912,     0,
     2375       0,   413,   915,     0,     0,     0,     0,     0,   917,     0,
     2376       0,     0,  1512,     0,  1514,     0,     0,  1247,     0,     0,
     2377     769,     0,     0,     0,     0,     0,   341,   363,   413,     0,
     2378     413,     0,  1526,   782,   413,     0,     0,     0,     0,     0,
     2379     769,     0,     0,   769,     0,     0,     0,     0,     0,     0,
     2380       0,     0,     0,     0,   792,   793,     0,     0,     0,     0,
     2381       0,     0,     0,     0,     0,     0,   363,   622,     0,     0,
     2382       0,     0,     0,     0,     0,     0,   814,     0,     0,     0,
     2383       0,     0,     0,     0,     0,     0,   823,     0,     0,     0,
     2384       0,     0,     0,   345,     0,     0,     0,     0,   782,     0,
     2385       0,     0,   341,   363,     0,     0,     0,   413,   413,     0,
     2386       0,     0,     0,     0,     1,     2,     3,     4,     5,     6,
    22652387       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    22662388      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2267        0,    26,    27,    28,    29,     0,     0,    30,     0,     0,
    2268       31,    32,     0,   217,     0,     0,     0,     0,     0,     0,
    2269      250,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2270      968,   969,     0,     0,     0,    33,     0,     0,    34,     0,
    2271       35,     0,    36,    37,   986,    38,    39,    40,     0,     0,
    2272      210,   741,   341,   363,    41,    42,     0,     0,     0,     0,
    2273        0,  1001,     0,  1002,     0,     0,     0,  1006,     0,     0,
    2274        0,     0,     0,     0,     0,     0,   210,     0,     0,     0,
    2275       43,     0,    44,     0,     0,     0,   413,     0,     0,     0,
    2276       45,     0,     0,   413,     0,     0,     0,     0,     0,     0,
    2277      368,   368,     0,     0,   210,     0,     0,     0,     0,   217,
    2278        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2279       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2280       26,    27,    28,  1039,     0,     0,   210,     0,     0,    31,
    2281     1040,     0,     0,     0,     0,     0,     0,   210,     0,     0,
    2282        0,     0,     0,  1042,     0,  1043,     0,     0,     0,     0,
    2283        0,     0,     0,     0,     0,   413,     0,    34,     0,  1055,
    2284        0,     0,   109,     0,    38,    39,  1059,     0,     0,     0,
    2285        0,     0,     0,    41,    42,     0,     0,     0,  1097,     0,
    2286        0,  1098,     0,     0,     0,     0,     0,     0,     0,     0,
    2287        0,     0,     0,     0,     0,     0,     0,     0,     0,   598,
    2288        0,    44,     0,     0,     0,     0,     0,     0,     0,   110,
    2289        0,   413,     0,     0,     0,   368,     0,     0,   210,   413,
    2290      589,     0,   413,   592,     0,     0,     0,     0,     0,     0,
    2291        0,     0,   363,     0,     0,     0,   622,     0,     0,     0,
    2292        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2293        0,     0,     0,     0,     0,   640,     0,     0,   341,     0,
    2294        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2295        0,     0,     0,   461,     0,   461,     0,     0,     0,     0,
    2296      281,   282,     0,   283,     0,   413,     0,     0,  1161,   413,
    2297        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2298        0,     0,     0,     0,     0,   210,     0,     0,     0,   284,
    2299      461,   321,   461,     0,     0,   649,     0,   138,   139,   286,
    2300      363,   345,   287,   650,   289,   290,    41,    42,     0,   291,
    2301      292,     0,     0,   381,   381,     0,     0,   293,     0,     0,
    2302      164,     0,     0,   413,   533,     0,     0,     0,     0,     0,
    2303        0,  1226,   294,     0,   651,     0,   652,   379,     0,     0,
    2304        0,   296,   380,   298,   299,   300,   301,     0,     0,     0,
    2305        0,     0,     0,     0,   413,     0,     0,   363,     0,     0,
    2306     1239,     0,     0,     0,     0,  1241,     0,     0,     0,     0,
    2307        0,     0,     0,  1245,     0,     0,     0,     0,     0,     0,
    2308        0,   210,     0,     0,   321,     0,     0,     0,     0,     0,
    2309        0,     0,     0,     0,     0,     0,     0,   413,     0,     0,
    2310      341,   363,     0,     0,  1271,     0,     0,     0,     0,   485,
    2311        0,     0,     0,     0,     0,     0,  1279,     0,     0,  1280,
    2312        0,  1281,     0,     0,     0,     0,     0,     0,     0,     0,
    2313        0,     0,     0,     0,     0,  1290,  1291,     0,     0,     0,
    2314        0,     0,     0,     0,     0,     0,   413,   413,     0,     0,
    2315        0,     0,     0,     0,     0,     0,     0,  1304,     0,     0,
    2316        0,     0,     0,     0,     0,   830,   363,     0,   363,     0,
    2317        0,     0,     0,     0,     0,     0,     0,   622,     0,   622,
    2318      622,     0,     0,     0,  1327,     0,   622,     0,     0,   514,
    2319        0,   516,   519,     0,     0,     0,   869,   363,     0,   522,
    2320      523,     0,   363,     0,   516,   516,     0,     0,     0,     0,
    2321        0,   363,   363,   363,     0,     0,   516,     0,     0,     0,
    2322        0,     0,     0,     0,     0,   381,     0,     0,     0,     0,
    2323      363,     0,     0,     0,     0,   413,   912,     0,     0,   413,
    2324      915,     0,     0,     0,     0,     0,   917,     0,     0,     0,
    2325        0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
    2326        0,     0,     0,     0,   341,   363,   413,     0,   413,     0,
    2327        0,     0,   413,     0,     0,     0,     0,     0,     0,   281,
    2328      282,  1397,   283,  1398,     0,     0,     0,     0,   516,     0,
    2329        0,     0,     0,     0,     0,     0,  1407,     0,  1408,     0,
    2330        0,     0,     0,     0,   363,   622,     0,     0,   284,     0,
    2331        0,     0,     0,     0,   285,     0,  1415,     0,   286,     0,
    2332        0,   287,   288,   289,   290,    41,    42,   735,   291,   292,
    2333        0,     0,  1433,  1435,     0,     0,   293,   210,     0,     0,
    2334      341,   363,     0,     0,  1441,   413,   413,  1245,     0,     0,
    2335        0,   294,     0,   378,     0,     0,     0,     0,     0,   812,
    2336      296,   380,   298,   299,   300,   301,   769,     0,     0,  1464,
    2337        0,     0,     0,     0,     0,     0,     0,     0,  1471,   782,
    2338        0,  1473,     0,  1475,  1477,  1479,   769,   413,     0,   769,
    2339        0,     0,     0,     0,     0,     0,   363,     0,     0,     0,
    2340      792,   793,   830,   363,     0,     0,     0,   622,     0,   622,
    2341        0,     0,     0,     0,     0,     0,     0,     0,     0,   622,
    2342        0,     0,   814,     0,     0,  1510,     0,  1512,     0,     0,
    2343     1245,     0,   823,     0,     0,     0,     0,     0,     0,   345,
    2344        0,     0,     0,     0,   782,  1524,     0,     0,     0,     0,
    2345        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2346        0,     0,     0,     0,     0,   516,   516,   516,   516,   516,
    2347      516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
    2348      516,   516,   516,     0,     0,     0,     0,     0,     0,     0,
    2349        0,     0,   830,     0,   889,     0,     0,     0,     0,     0,
    2350      413,     0,     0,   381,     0,     0,   413,     0,   516,     0,
    2351        0,     0,     0,     0,   413,     0,     0,     0,     0,     0,
    2352        0,     0,     0,     0,     0,     0,     0,   622,   622,     0,
    2353        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2354        0,     0,     0,   345,     0,     0,     0,     0,     0,     0,
    2355        0,     0,     0,     0,   363,     0,     0,     0,     0,     0,
    2356      413,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2357       17,    18,    19,    20,    21,    22,    23,    24,    25,   413,
    2358     1158,    26,    27,    28,     0,     0,     0,     0,     0,   363,
    2359       31,   453,     0,     0,     0,   413,  1170,     0,   622,   622,
    2360     1175,     0,     0,     0,     0,     0,     0,   516,     0,     0,
    2361      363,   363,     0,     0,     0,     0,     0,     0,    34,   782,
    2362        0,   991,     0,     0,     0,    38,    39,   996,     0,   516,
    2363        0,     0,     0,     0,  1005,     0,     0,     0,     0,     0,
    2364        0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
    2365        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2366        0,     0,   454,     0,     0,     0,   711,     0,     0,     0,
    2367      110,   830,   413,  1238,     0,     0,     0,     0,  1022,  1023,
    2368        0,   345,     0,     0,   622,     0,     0,     0,   516,     0,
    2369        0,     0,     0,     0,     0,     0,   345,     0,     0,     0,
     2389       0,    26,    27,    28,    29,     0,     0,    30,   889,   413,
     2390      31,    32,     0,     0,     0,     0,     0,   381,   363,     0,
     2391       0,     0,     0,     0,   830,   363,     0,     0,     0,   622,
     2392       0,   622,     0,     0,     0,    33,     0,     0,    34,     0,
     2393      35,   622,    36,    37,     0,    38,    39,    40,     0,     0,
     2394       0,     0,     0,     0,    41,    42,     0,   345,     0,     0,
    23702395       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    23712396       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2372      516,     0,     0,     0,     0,     0,     0,     0,     0,   363,
    2373        0,     0,     0,     0,     0,   516,  1053,     0,     0,     0,
    2374      381,     0,     0,  -517,     0,     0,     1,     2,     3,     4,
    2375        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2376       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2377       25,     0,     0,    26,    27,    28,    29,     0,     0,    30,
    2378        0,     0,    31,    32,     0,     0,     0,     0,     0,   341,
     2397      43,     0,    44,     0,     0,     0,     0,     0,     0,     0,
     2398      45,     0,     0,     0,     0,     8,     9,    10,    11,    12,
     2399      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2400      23,    24,    25,  -294,   830,    26,    27,    28,     0,     0,
     2401       0,     0,   413,     0,    31,     0,     0,     0,   413,     0,
     2402       0,     0,     0,   782,     0,   991,   413,     0,     0,     0,
     2403       0,   996,     0,     0,     0,     0,     0,     0,  1005,   622,
     2404     622,     0,    34,     0,     0,     0,     0,    37,     0,   336,
     2405     337,    40,     0,  -294,     0,     0,     0,     0,    41,    42,
     2406       0,     0,     0,     0,     0,     0,   363,     0,     0,     0,
     2407       0,     0,   413,     0,     0,     0,     0,     0,     0,     0,
     2408       0,     0,  1022,  1023,   643,   345,   338,     0,     0,     0,
     2409       0,   413,  1159,     0,   634,     0,     0,     0,     0,     0,
     2410     345,   363,     0,     0,     0,     0,     0,   413,  1171,     0,
     2411     622,   622,  1176,     0,     0,     0,     0,     0,     0,     0,
     2412       0,     0,   363,   363,     0,     0,     0,     0,     0,     0,
    23792413       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2380        0,     0,     0,     0,     0,     0,     0,    33,     0,   363,
    2381       34,     0,    35,     0,    36,    37,   321,    38,    39,    40,
    2382        0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
    2383        0,     0,  1139,  1140,     0,     0,     0,     0,     0,   381,
    2384        0,     0,     0,     0,     0,   996,     0,     0,  1149,     0,
    2385      769,     0,    43,     0,    44,     0,     0,     0,   363,   363,
    2386        0,     0,    45,     0,     0,     0,     0,     0,     0,     0,
    2387     1165,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2388        0,  1180,     0,     0,     0,     0,   516,     0,     0,     0,
     2414    1053,     0,     0,     0,   381,     1,     2,   205,     4,     5,
     2415       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2416      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2417       0,     0,    26,    27,    28,    29,     0,     0,    30,     0,
     2418       0,    31,     0,   830,   413,  1239,     0,     0,     0,     0,
     2419       0,     0,     0,     0,     0,     0,     0,   622,     0,     0,
     2420       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
     2421       0,    35,     0,    36,     0,     0,    38,    39,     0,     0,
     2422     321,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2423       0,     0,     0,     0,     0,     0,  1140,  1141,     0,     0,
     2424       0,     0,   363,   381,     0,     0,     0,   281,   282,   996,
     2425     283,     0,  1150,    44,   769,     0,     0,     0,     0,     0,
     2426       0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
     2427       0,     0,     0,     0,  1166,     0,   284,     0,     0,     0,
     2428       0,     0,   285,     0,     0,  1181,   286,     0,     0,   287,
     2429     288,   289,   290,    41,    42,     0,   291,   292,     0,     0,
     2430       0,     0,   341,     0,   293,   281,   282,   381,   283,  1199,
     2431       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
     2432       0,   378,     0,   363,   996,   996,     0,     0,   296,   380,
     2433     298,   299,   300,   301,   284,     0,     0,     0,     0,     0,
     2434     285,     0,     0,     0,   286,  1231,     0,   287,   288,   289,
     2435     290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
     2436       0,     0,   293,     0,     0,     0,     0,     0,     0,     0,
     2437       0,     0,   363,   363,     0,     0,     0,   294,     0,   378,
     2438       0,     0,     0,     0,     0,     0,   296,   734,   298,   299,
     2439     300,   301,     0,   996,     0,     0,     0,     0,     0,     0,
    23892440       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2390        0,     0,     0,   381,     0,  1198,     0,     0,     0,     0,
    2391        0,     0,     0,     0,     0,     0,     0,   516,     0,     0,
    2392      996,   996,     0,     0,     0,     0,     0,     0,     0,   516,
    2393        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2394        0,  1230,     0,     0,     1,     2,     3,     4,     5,     6,
    2395        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2396       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2397      516,    26,    27,    28,    29,     0,     0,    30,     0,     0,
    2398       31,    32,     0,   363,     0,     0,     0,     0,   996,     0,
    2399        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2400        0,     0,     0,     0,     0,    33,     0,   889,    34,     0,
    2401       35,     0,    36,    37,     0,    38,    39,    40,     0,     0,
    2402        0,     0,  1282,  1283,    41,    42,     0,     0,     0,     0,
    2403        0,     0,   281,   282,     0,   283,     0,     0,     0,     0,
    2404        0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
    2405       43,     0,    44,     0,     0,     0,  -521,     0,     0,     0,
    2406       45,   284,     0,     0,     0,     0,     0,   285,     0,     0,
    2407        0,   286,     0,   413,   287,   288,   289,   290,    41,    42,
    2408        0,   291,   292,     0,     0,     0,   516,     0,     0,   293,
    2409        0,     0,     0,     0,     0,     0,     0,     0,   413,   413,
    2410      516,   516,     0,   996,   294,     0,   378,     0,     0,     0,
    2411        0,   781,     0,   296,   380,   298,   299,   300,   301,     0,
    2412        0,     0,     0,   413,     0,     1,     2,   205,     4,     5,
     2441       0,     0,   889,     0,     0,     0,     0,     0,     0,     0,
     2442       0,     0,     0,     0,     0,     0,     0,  1284,  1285,     0,
     2443       0,     0,     0,     0,     0,     1,     2,   205,     4,     5,
    24132444       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    24142445      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    24152446       0,     0,    26,    27,    28,    29,     0,     0,    30,   281,
    2416      282,    31,  1062,  1063,  1390,  1064,   769,     0,  1065,  1066,
     2447     282,    31,  1062,  1063,     0,  1064,     0,     0,  1065,  1066,
    24172448    1067,  1068,  1069,  1070,  1071,  1072,     0,     0,     0,  1073,
    2418        0,     0,     0,  1074,  1075,     0,    33,     0,   284,    34,
    2419        0,    35,     0,    36,   649,     0,    38,    39,   286,     0,
     2449       0,     0,     0,  1074,  1075,     0,    33,   363,   284,    34,
     2450       0,    35,     0,    36,   649,     0,    38,    39,   286,   996,
    24202451       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    24212452       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     
    24232454       0,   294,     0,  1076,     0,     0,   170,     0,     0,     0,
    24242455     296,   297,   298,   299,   300,   301,     0,     0,     0,     0,
    2425     1077,     0,  1450,     0,  -129,     0,     0,     0,     0,     0,
    2426        1,     2,   205,     4,     5,     6,     7,     8,     9,    10,
    2427       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2428       21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
    2429       29,     0,     0,    30,   281,   282,    31,   283,     0,     0,
     2456    1077,     0,     0,     0,  -129,     0,     0,     0,     0,     0,
     2457    1392,     0,   769,     0,     0,     0,     0,     0,     0,     0,
     2458       0,     0,     0,     0,     0,     0,     0,   413,     8,     9,
     2459      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2460      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
     2461      28,     0,   413,   413,     0,     0,     0,    31,     0,     0,
    24302462       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2431      516,     0,     0,   281,   282,     0,   283,     0,     0,     0,
    2432        0,     0,     0,   284,    34,     0,    35,   516,    36,   285,
    2433        0,    38,    39,   286,  1516,     0,   287,   288,   289,   290,
    2434       41,    42,   284,   291,   292,     0,     0,     0,   285,     0,
    2435        0,   293,   286,     0,     0,   287,   288,   289,   290,    41,
    2436       42,     0,   291,   292,     0,     0,   294,     0,  1076,     0,
    2437      293,     0,     0,     0,     0,   296,   297,   298,   299,   300,
    2438      301,     0,     0,     0,     0,   294,   321,   378,     0,  -129,
    2439      993,     0,     0,     0,   296,   380,   298,   299,   300,   301,
    2440      516,   516,     1,     2,   205,     4,     5,     6,     7,     8,
    2441        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2442       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2443       27,    28,    29,     0,     0,    30,   281,   282,    31,   283,
    2444        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2445       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2446       26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
    2447       36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
    2448      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2449        0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
    2450        0,     0,   109,     0,    38,    39,     0,     0,   294,     0,
    2451       44,     0,     0,    41,    42,     0,     0,   296,   297,   298,
    2452      299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
    2453        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2454       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2455       27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
    2456        0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2463       0,     0,     0,     0,     0,     0,     0,   413,     0,     0,
     2464       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
     2465       0,     0,   206,    39,     0,     0,     0,     0,  1452,     0,
     2466       0,     0,     0,     0,     0,     1,     2,   205,     4,     5,
     2467       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2468      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2469       0,     0,    26,    27,    28,    29,     0,   629,    30,   281,
     2470     282,    31,   283,     8,     9,    10,    11,    12,    13,    14,
    24572471      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2458       25,  -294,     0,     0,     0,   284,    34,     0,    35,     0,
    2459       36,   285,    31,    38,    39,   286,     0,     0,   287,   288,
    2460      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2461        0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
    2462       34,     0,     0,     0,     0,     0,     0,     0,   294,     0,
    2463      343,  -294,     0,     0,     0,   781,     0,   296,   344,   298,
    2464      299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
    2465        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2466       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2467       27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
    2468        0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2472      25,     0,     0,    26,    27,    28,     0,     0,   284,    34,
     2473       0,    35,    31,    36,   285,     0,    38,    39,   286,     0,
     2474    1518,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2475       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2476      34,     0,     0,     0,     0,   109,     0,    38,    39,     0,
     2477       0,   294,     0,  1076,     0,     0,    41,    42,     0,     0,
     2478     296,   297,   298,   299,   300,   301,     0,     0,     0,     0,
     2479       0,     0,   321,     0,  -129,     1,     2,   205,     4,     5,
     2480       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2481      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2482       0,     0,    26,    27,    28,    29,     0,     0,    30,   281,
     2483     282,    31,   283,     8,     9,    10,    11,    12,    13,    14,
    24692484      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2470       25,  -295,     0,     0,     0,   284,    34,     0,    35,     0,
    2471       36,   285,    31,    38,    39,   286,     0,     0,   287,   288,
    2472      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2473        0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
    2474       34,     0,     0,     0,     0,     0,     0,     0,   294,     0,
    2475      931,  -295,     0,     0,     0,   781,     0,   296,   344,   298,
    2476      299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
    2477        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2478       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2479       27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
    2480        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2481       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2482       26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
    2483       36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
    2484      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2485        0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
    2486        0,     0,     0,     0,    38,    39,     0,     0,   294,     0,
    2487      931,     0,     0,     0,     0,   781,     0,   296,   600,   298,
    2488      299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
    2489        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2490       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2491       27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
    2492        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2493       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2494       26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
    2495       36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
    2496      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2497        0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
    2498        0,     0,     0,     0,   206,    39,     0,     0,   294,     0,
    2499      343,     0,     0,     0,     0,     0,     0,   296,   344,   298,
    2500      299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
    2501        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2502       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2503       27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2485      25,     0,     0,    26,    27,    28,     0,     0,   284,    34,
     2486       0,    35,    31,    36,   285,     0,    38,    39,   286,     0,
     2487       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2488       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2489      34,     0,     0,     0,     0,     0,     0,   206,    39,     0,
     2490       0,   294,     0,    44,     0,     0,     0,     0,     0,     0,
     2491     296,   297,   298,   299,   300,   301,     2,   205,     4,     5,
     2492       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2493      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2494       0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
     2495     282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
     2496       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2497       0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
     2498       0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
     2499       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2500       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2501       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2502       0,   294,     0,   343,     0,     0,     0,     0,   781,     0,
     2503     296,   344,   298,   299,   300,   301,     2,   205,     4,     5,
     2504       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2505      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2506       0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
     2507     282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
     2508       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2509       0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
     2510       0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
     2511       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2512       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2513       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2514       0,   294,     0,   931,     0,     0,     0,     0,   781,     0,
     2515     296,   344,   298,   299,   300,   301,     2,   205,     4,     5,
     2516       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2517      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2518       0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
     2519     282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
     2520       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2521       0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
     2522       0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
     2523       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2524       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2525       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2526       0,   294,     0,   931,     0,     0,     0,     0,   781,     0,
     2527     296,   600,   298,   299,   300,   301,     2,   205,     4,     5,
     2528       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2529      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2530       0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
     2531     282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
     2532       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2533       0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
     2534       0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
     2535       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2536       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2537       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2538       0,   294,     0,   343,     0,     0,     0,     0,     0,     0,
     2539     296,   344,   298,   299,   300,   301,     2,   205,     4,     5,
     2540       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2541      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2542       0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
     2543     282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
     2544       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2545       0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
     2546       0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
     2547       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2548       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2549       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2550       0,   294,     0,   931,     0,     0,     0,     0,     0,     0,
     2551     296,   344,   298,   299,   300,   301,     2,   205,     4,     5,
     2552       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2553      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2554       0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
     2555     282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
     2556       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2557       0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
     2558       0,    35,     0,    36,   285,     0,   206,    39,   286,     0,
     2559       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2560       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2561       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2562       0,   294,     0,  1020,     0,     0,     0,     0,     0,     0,
     2563     296,  1021,   298,   299,   300,   301,     2,   205,     4,     5,
     2564       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2565      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2566       0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
     2567     282,    31,   283,     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,     0,     0,   284,    34,
     2570       0,    35,     0,    36,   285,     0,   206,    39,   286,     0,
     2571       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2572       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2573       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2574       0,   294,     0,   378,     0,     0,     0,     0,     0,     0,
     2575     296,   380,   298,   299,   300,   301,   204,     2,   205,     4,
     2576       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2577      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2578      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
     2579       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
    25042580       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    25052581       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2506        0,     0,     0,     0,     0,   284,    34,     0,    35,     0,
    2507       36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
    2508      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2509        0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
    2510        0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
    2511      931,     0,     0,     0,     0,     0,     0,   296,   344,   298,
    2512      299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
    2513        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2514       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2515       27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2582      34,     0,    35,     0,    36,     0,     0,   206,    39,     0,
     2583       2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
     2584      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2585      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
     2586       0,     0,     0,     0,   207,    31,     0,     0,     0,     0,
     2587       0,     0,   270,     0,     0,     0,     0,     0,     0,     0,
    25162588       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2589       0,     0,     0,    34,     0,    35,     0,    36,    37,     0,
     2590     206,    39,    40,     0,     0,     0,     0,     0,     0,    41,
     2591      42,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    25172592       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2518        0,     0,     0,     0,     0,   284,    34,     0,    35,     0,
    2519       36,   285,     0,   206,    39,   286,     0,     0,   287,   288,
    2520      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2521        0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
    2522        0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
    2523     1020,     0,     0,     0,     0,     0,     0,   296,  1021,   298,
    2524      299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
    2525        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2526       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2527       27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
    2528        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2529       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2530       26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
    2531       36,   285,     0,   206,    39,   286,     0,     0,   287,   288,
    2532      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2533        0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
    2534        0,     0,     0,     0,   206,    39,     0,     0,   294,     0,
    2535      378,     0,     0,     0,     0,     0,     0,   296,   380,   298,
    2536      299,   300,   301,   204,     2,   205,     4,     5,     6,     7,
    2537        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2538       18,    19,    20,    21,    22,    23,    24,    25,     0,   270,
    2539       26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
    2540        0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2593       0,     0,     0,     0,     0,    43,     0,   207,     0,     0,
     2594       0,     0,     0,     0,     0,   208,     2,   205,     4,     5,
     2595       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2596      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2597       0,     0,    26,    27,    28,     0,     0,     0,     0,     0,
     2598       0,    31,     0,     0,     0,     0,     8,     9,    10,    11,
     2599      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2600      22,    23,    24,    25,     0,     0,    26,    27,    28,    34,
     2601       0,    35,     0,    36,     0,    31,    38,    39,     0,     2,
     2602     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2603      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2604      23,    24,    25,    34,     0,    26,    27,    28,   109,     0,
     2605      38,    39,  -402,   687,    31,     0,     0,     0,     0,    41,
     2606      42,   634,     0,     0,     0,     0,     0,     0,     0,     0,
     2607       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2608       0,     0,    34,     0,    35,     0,    36,    44,     0,    38,
     2609      39,     0,     0,     0,     0,   110,     0,     0,     0,     0,
     2610       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2611       0,  1371,     0,     0,     0,     0,     0,     0,     0,     0,
     2612       0,     0,     0,     0,     0,     0,   687,     0,     0,     0,
     2613       0,     0,     0,     0,   634,     2,   205,     4,     5,     6,
     2614       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    25412615      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2542        0,    26,    27,    28,   492,   493,   494,    34,     0,    35,
    2543       31,    36,    37,     0,   206,    39,    40,     0,     0,     0,
    2544        0,     0,     0,    41,    42,     0,     0,     0,     0,     0,
    2545        0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
    2546        0,     0,     0,     0,     0,    38,    39,     0,     0,    43,
    2547        0,   207,     0,     0,     0,     0,     0,     0,     0,   208,
    2548        1,     2,   205,     4,     5,     6,     7,     8,     9,    10,
     2616       0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
     2617      31,     0,     0,     0,     0,     8,     9,    10,    11,    12,
     2618      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2619      23,    24,    25,  -294,     0,    26,    27,    28,    34,     0,
     2620      35,     0,    36,     0,    31,    38,    39,     0,     0,     0,
     2621       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2622       0,     0,     0,     0,     0,     0,     0,  1373,     0,     0,
     2623       0,     0,    34,     0,     0,     0,     0,    37,     0,   336,
     2624     337,    40,   687,  -294,     0,     0,     0,     0,    41,    42,
     2625     634,     2,   205,     4,     5,     6,     7,     8,     9,    10,
    25492626      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2550       21,    22,    23,    24,    25,  -294,     0,    26,    27,    28,
    2551       29,     0,     0,    30,     0,     0,    31,     0,     0,     0,
     2627      21,    22,    23,    24,    25,     0,   338,    26,    27,    28,
     2628       0,     0,     0,     0,   110,     0,    31,     0,     0,     0,
    25522629       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    25532630       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    25542631       0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
    2555        0,    38,    39,     0,     0,  -294,     1,     2,   205,     4,
    2556        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2557       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2558       25,     0,     0,    26,    27,    28,    29,     0,    44,    30,
    2559        0,     0,    31,     0,     0,     0,   110,     0,     0,     0,
    2560        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2561        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2562       34,     0,    35,     0,    36,     0,     0,    38,    39,   204,
    2563        2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
    2564       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2565       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2566        0,     0,     0,     0,    44,    31,     0,     0,     0,     0,
    2567        0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
    2568        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2569        0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
    2570      206,    39,     0,     2,   205,     4,     5,     6,     7,     8,
    2571        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2572       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2573       27,    28,     0,     0,     0,     0,     0,   207,    31,     0,
    2574        0,     0,     0,     0,     0,   270,     0,     0,     0,     0,
    2575        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2576        0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
    2577       36,    37,     0,   206,    39,    40,     0,     0,     0,     0,
    2578        0,     0,    41,    42,     0,     0,     0,     0,     0,     0,
    2579        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2580        0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
    2581      207,     0,     0,     0,     0,     0,     0,     0,   208,     2,
    2582      205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2583       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2584       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2585        0,     0,     0,     0,    31,     0,     0,     0,     0,     8,
    2586        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2587       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2588       27,    28,    34,     0,    35,     0,    36,     0,    31,    38,
    2589       39,     0,     2,   205,     4,     5,     6,     7,     8,     9,
    2590       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2591       20,    21,    22,    23,    24,    25,    34,     0,    26,    27,
    2592       28,     0,     0,    38,    39,  -400,   687,    31,     0,     0,
    2593        0,     0,     0,     0,   634,     0,     0,     0,     0,     0,
    2594        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2595        0,     0,     0,     0,     0,    34,     0,    35,   643,    36,
    2596      338,     0,    38,    39,     0,     0,     0,     0,   110,     0,
    2597        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2598        0,     0,     0,     0,  1369,     0,     0,     0,     0,     0,
    2599        0,     0,     0,     0,     0,     0,     0,     0,     0,   687,
    2600        0,     0,     0,     0,     0,     0,     0,   634,     2,   205,
    2601        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    2602       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2603       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2604        0,     0,     0,    31,     0,     0,     0,     0,     8,     9,
    2605       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2606       20,    21,    22,    23,    24,    25,  -294,     0,    26,    27,
    2607       28,    34,     0,    35,     0,    36,     0,    31,    38,    39,
    2608        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2609        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2610     1371,     0,     0,     0,     0,    34,     0,     0,     0,     0,
    2611       37,     0,   336,   337,    40,   687,  -294,     0,     0,     0,
    2612        0,    41,    42,   634,     2,   205,     4,     5,     6,     7,
     2632       0,   206,    39,     0,     2,   205,     4,     5,     6,     7,
    26132633       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2614       18,    19,    20,    21,    22,    23,    24,    25,     0,   338,
    2615       26,    27,    28,     0,     0,     0,     0,   110,     0,    31,
    2616        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2634      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2635      26,    27,    28,     0,     0,     0,     0,     0,   269,    31,
     2636       0,     0,     0,     0,     0,     0,   629,     0,     0,     0,
    26172637       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26182638       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
    2619        0,    36,     0,     0,   206,    39,     0,     2,   205,     4,
     2639       0,    36,     0,     0,    38,    39,     0,     2,   205,     4,
    26202640       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    26212641      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    26222642      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2623        0,   269,    31,     0,     0,     0,     0,     0,     0,   629,
     2643       0,   687,    31,     0,     0,     0,     0,     0,     0,   634,
    26242644       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26252645       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     
    26282648      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    26292649      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2630        0,     0,     0,     0,   687,    31,     0,     0,     0,     0,
     2650       0,     0,     0,     0,   599,    31,     0,     0,     0,     0,
    26312651       0,     0,   634,     0,     0,     0,     0,     0,     0,     0,
    26322652       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26332653       0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
    2634       38,    39,     0,     2,   205,     4,     5,     6,     7,     8,
    2635        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2636       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2637       27,    28,     0,     0,     0,     0,     0,   599,    31,     0,
    2638        0,     0,     0,     0,     0,   634,     0,     0,     0,     0,
     2654     206,    39,     8,     9,    10,    11,    12,    13,    14,    15,
     2655      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2656       0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
     2657     282,    31,   283,     0,     0,     0,     0,   207,     0,     0,
     2658       0,     0,     0,     0,     0,   270,     0,     0,     0,     0,
     2659       0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
     2660       0,     0,     0,     0,   285,     0,    38,    39,   286,     0,
     2661       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2662       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    26392663       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2640        0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
    2641       36,     0,     0,   206,    39,     8,     9,    10,    11,    12,
     2664       0,   294,     0,   525,     0,     0,   170,     0,     0,     0,
     2665     296,   297,   298,   299,   300,   301,     8,     9,    10,    11,
     2666      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2667      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
     2668       0,     0,     0,   281,   282,    31,   283,     8,     9,    10,
     2669      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2670      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
     2671       0,     0,   284,    34,     0,     0,    31,     0,   285,     0,
     2672      38,    39,   286,     0,     0,   287,   288,   289,   290,    41,
     2673      42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
     2674     293,     0,     0,     0,    34,     0,     0,     0,     0,    37,
     2675       0,   336,   337,    40,     0,   294,     0,   599,    -3,     0,
     2676      41,    42,     0,     0,   296,   600,   298,   299,   300,   301,
     2677       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2678      18,    19,    20,    21,    22,    23,    24,    25,   338,     0,
     2679      26,    27,    28,     0,     0,     0,   110,   281,   282,    31,
     2680     283,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2681      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2682       0,    26,    27,    28,     0,     0,   284,    34,     0,     0,
     2683      31,   453,   649,     0,    38,    39,   286,     0,     0,   287,
     2684     288,   289,   290,    41,    42,     0,   291,   292,     0,     0,
     2685       0,     0,     0,     0,   293,     0,     0,     0,    34,     0,
     2686       0,     0,     0,     0,     0,    38,    39,     0,     0,   294,
     2687     -35,   766,     0,     0,     0,     0,     0,     0,   296,   297,
     2688     298,   299,   300,   301,     8,     9,    10,    11,    12,    13,
     2689      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2690      24,    25,   454,     0,    26,    27,    28,     0,     0,     0,
     2691     110,   281,   282,    31,   283,     0,     0,     0,     0,     0,
     2692       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
     2693      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2694     284,    34,    26,    27,    28,     0,   285,     0,    38,    39,
     2695     286,    31,     0,   287,   288,   289,   290,    41,    42,     0,
     2696     291,   292,     0,     0,     0,     0,     0,     0,   293,     0,
     2697       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
     2698       0,     0,     0,   294,     0,   295,    38,    39,     0,     0,
     2699       0,     0,   296,   297,   298,   299,   300,   301,     8,     9,
     2700      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2701      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
     2702      28,   643,     0,   338,     0,   281,   282,    31,   283,     0,
     2703       0,   110,     0,     0,     0,     0,     8,     9,    10,    11,
     2704      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2705      22,    23,    24,    25,   284,    34,    26,    27,    28,     0,
     2706     285,     0,    38,    39,   286,    31,     0,   287,   288,   289,
     2707     290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
     2708       0,     0,   293,     0,     0,     0,     0,     0,     0,     0,
     2709       0,     0,     0,    34,     0,     0,     0,   294,     0,   156,
     2710      38,    39,     0,     0,     0,     0,   296,   297,   298,   299,
     2711     300,   301,     8,     9,    10,    11,    12,    13,    14,    15,
     2712      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2713       0,     0,    26,    27,    28,   643,     0,   338,     0,   281,
     2714     282,    31,   283,     0,     0,   634,     0,     0,     0,     0,
     2715       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2716      18,    19,    20,    21,    22,    23,    24,    25,   284,    34,
     2717      26,    27,    28,     0,   285,     0,    38,    39,   286,    31,
     2718       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2719       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2720       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
     2721       0,   294,     0,   599,    38,    39,     0,     0,     0,     0,
     2722     296,   600,   298,   299,   300,   301,     8,     9,    10,    11,
     2723      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2724      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
     2725       0,   256,     0,   281,   282,    31,   283,     0,     0,   110,
     2726       0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
     2727      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2728      24,    25,   284,    34,    26,    27,    28,     0,   285,     0,
     2729      38,    39,   286,    31,     0,   287,   288,   289,   290,    41,
     2730      42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
     2731     293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2732       0,    34,     0,     0,     0,   294,     0,   378,    38,    39,
     2733       0,     0,     0,     0,   296,   380,   298,   299,   300,   301,
     2734     474,     2,   205,     4,     5,     6,     7,     8,     9,    10,
     2735      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2736      21,    22,    23,    24,    25,   156,     0,    26,    27,    28,
     2737       0,     0,     0,   110,     0,     0,    31,     0,     0,     0,
     2738       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2739      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2740      26,    27,    28,     0,    34,     0,    35,     0,    36,    31,
     2741       0,    38,    39,     0,     0,     0,     0,     0,     8,     9,
     2742      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2743      20,    21,    22,    23,    24,    25,     0,    34,    26,    27,
     2744      28,     0,    37,     0,    38,    39,    40,    31,     0,     0,
     2745       0,    -3,     0,    41,    42,     0,     8,     9,    10,    11,
     2746      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2747      22,    23,    24,    25,     0,    34,    26,    27,    28,    43,
     2748      37,   156,    38,    39,    40,    31,     0,     0,     0,    45,
     2749       0,    41,    42,     0,     8,     9,    10,    11,    12,    13,
     2750      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2751      24,    25,     0,    34,    26,    27,    28,    43,    37,    44,
     2752     206,    39,    40,    31,     0,     0,     0,    45,     0,    41,
     2753      42,     0,     8,     9,    10,    11,    12,    13,    14,    15,
     2754      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2755    -294,    34,    26,    27,    28,    43,    37,   269,   336,   337,
     2756      40,    31,     0,     0,     0,   208,     0,    41,    42,     0,
     2757       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2758       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
     2759       0,     0,     0,   643,     0,   338,    38,    39,     0,     0,
     2760    -294,     0,     0,   634,     0,     8,     9,    10,    11,    12,
    26422761      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    26432762      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2644        0,     0,   281,   282,    31,   283,     0,     0,     0,     0,
    2645      207,     0,     0,     0,     0,     0,     0,     0,   270,     0,
    2646        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2647        0,   284,    34,     0,     0,     0,     0,   285,     0,    38,
    2648       39,   286,     0,     0,   287,   288,   289,   290,    41,    42,
    2649        0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
    2650        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2651        0,     0,     0,     0,   294,     0,   525,     0,     0,   170,
    2652        0,     0,     0,   296,   297,   298,   299,   300,   301,     8,
    2653        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2654       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2655       27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
    2656        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2657       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2658       26,    27,    28,     0,     0,   284,    34,     0,     0,    31,
    2659        0,   285,     0,    38,    39,   286,     0,     0,   287,   288,
    2660      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2661        0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
    2662        0,     0,    37,     0,   336,   337,    40,     0,   294,     0,
    2663      599,    -3,     0,    41,    42,     0,     0,   296,   600,   298,
    2664      299,   300,   301,     8,     9,    10,    11,    12,    13,    14,
     2763       0,   643,     0,   338,    31,   453,     0,     0,     0,     0,
     2764       0,   634,     0,     8,     9,    10,    11,    12,    13,    14,
    26652765      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2666       25,   338,     0,    26,    27,    28,     0,     0,     0,   110,
    2667      281,   282,    31,   283,     8,     9,    10,    11,    12,    13,
    2668       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2669       24,    25,     0,     0,    26,    27,    28,     0,     0,   284,
    2670       34,     0,     0,    31,   453,   649,     0,    38,    39,   286,
    2671        0,     0,   287,   288,   289,   290,    41,    42,     0,   291,
    2672      292,     0,     0,     0,     0,     0,     0,   293,     0,     0,
    2673        0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
    2674        0,     0,   294,   -35,   766,     0,     0,     0,     0,     0,
    2675        0,   296,   297,   298,   299,   300,   301,     8,     9,    10,
    2676       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2677       21,    22,    23,    24,    25,   454,     0,    26,    27,    28,
    2678        0,     0,     0,   110,   281,   282,    31,   283,     0,     0,
    2679        0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
    2680       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2681       23,    24,    25,   284,    34,    26,    27,    28,     0,   285,
    2682        0,    38,    39,   286,    31,     0,   287,   288,   289,   290,
    2683       41,    42,     0,   291,   292,     0,     0,     0,     0,     0,
    2684        0,   293,     0,     0,     0,     0,     0,     0,     0,     0,
    2685        0,     0,    34,     0,     0,     0,   294,     0,   295,    38,
    2686       39,     0,     0,     0,     0,   296,   297,   298,   299,   300,
    2687      301,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2688       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2689        0,    26,    27,    28,   643,     0,   338,     0,   281,   282,
    2690       31,   283,     0,     0,   634,     0,     0,     0,     0,     8,
    2691        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2692       19,    20,    21,    22,    23,    24,    25,   284,    34,    26,
    2693       27,    28,     0,   285,     0,    38,    39,   286,    31,     0,
    2694      287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
    2695        0,     0,     0,     0,     0,   293,     0,     0,     0,     0,
    2696        0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
    2697      294,     0,   156,    38,    39,     0,     0,     0,     0,   296,
    2698      297,   298,   299,   300,   301,     8,     9,    10,    11,    12,
    2699       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2700       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2701      256,     0,   281,   282,    31,   283,     0,     0,   110,     0,
    2702        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2703        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2704        0,   284,    34,     0,     0,     0,     0,   285,     0,    38,
    2705       39,   286,     0,     0,   287,   288,   289,   290,    41,    42,
    2706        0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
    2707        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2708        0,     0,     0,     0,   294,     0,   599,     0,     0,     0,
    2709        0,     0,     0,   296,   600,   298,   299,   300,   301,     8,
    2710        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2711       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2712       27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
    2713        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2714       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2715       26,    27,    28,     0,     0,   284,    34,     0,     0,    31,
    2716        0,   285,     0,    38,    39,   286,     0,     0,   287,   288,
    2717      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2718        0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
    2719        0,     0,    37,     0,    38,    39,    40,     0,   294,     0,
    2720      378,     0,     0,    41,    42,     0,     0,   296,   380,   298,
    2721      299,   300,   301,     0,     0,     0,     0,     0,     0,     0,
    2722        0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
    2723        0,    44,     0,     0,     0,     0,     0,     0,     0,    45,
    2724        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2725       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2726       26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
    2727        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2728       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2729       26,    27,    28,     0,     0,     0,     0,    34,     0,    31,
    2730        0,     0,    37,     0,   206,    39,    40,     0,     0,     0,
    2731        0,     0,     0,    41,    42,     0,     0,     0,     0,     0,
    2732        0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
    2733        0,     0,    37,     0,   336,   337,    40,     0,     0,    43,
    2734        0,   269,     0,    41,    42,     0,     0,     0,     0,   208,
    2735        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2736        0,     0,     0,     0,     0,     0,     0,     0,     0,   643,
    2737        0,   338,     0,     0,     0,     0,     0,     0,     0,   634,
    2738        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2739       18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
    2740       26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
    2741        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2742       18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
    2743       26,    27,    28,     0,     0,     0,     0,    34,     0,    31,
    2744        0,     0,     0,     0,    38,    39,     0,     0,  -294,     0,
    2745        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2746        0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
    2747        0,     0,     0,     0,    38,    39,     0,     0,  -294,   643,
    2748        0,   338,     0,     0,     0,     0,     0,     0,     0,   110,
    2749        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2750        0,     0,     0,     0,     0,     0,     0,     0,     0,   643,
    2751        0,   338,     0,     0,     0,     0,     0,     0,     0,   634,
    2752        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2753       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2754       26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
    2755      453,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2756       17,    18,    19,    20,    21,    22,    23,    24,    25,  -294,
    2757        0,    26,    27,    28,     0,     0,     0,    34,     0,     0,
    2758       31,     0,     0,     0,    38,    39,     0,     0,     0,     0,
    2759        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2760        0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
    2761        0,     0,     0,     0,     0,    38,    39,     0,     0,  -294,
    2762        0,   454,     0,     0,     0,   947,     0,     0,     0,   110,
    2763        0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
    2764       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2765       25,     0,   338,    26,    27,    28,     0,     0,     0,     0,
    2766      110,     0,    31,   453,     8,     9,    10,    11,    12,    13,
    2767       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2768       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2769       34,     0,     0,    31,     0,     0,     0,    38,    39,     0,
    2770        0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
    2771       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2772        0,    34,    26,    27,    28,     0,     0,     0,    38,    39,
    2773        0,    31,     0,     0,   454,     0,     0,     0,  1235,     0,
    2774        0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
    2775        0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
    2776        0,     0,     0,     0,     0,   156,   206,    39,     0,     0,
    2777        0,     0,     0,   110,     0,     8,     9,    10,    11,    12,
    2778       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2779       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2780        0,     0,     0,   269,    31,     0,     0,     0,     0,     0,
    2781        0,   270,     0,     8,     9,    10,    11,    12,    13,    14,
    2782       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2783       25,     0,    34,    26,    27,    28,     0,     0,     0,    38,
     2766      25,  -294,    34,    26,    27,    28,     0,     0,     0,    38,
    27842767      39,     0,    31,     8,     9,    10,    11,    12,    13,    14,
    27852768      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    27862769      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2787       34,     0,    31,     0,     0,     0,   256,    38,    39,     0,
    2788        0,     0,     0,     0,   634,     0,     0,     0,     0,     0,
     2770      34,     0,    31,   453,     0,     0,   454,    38,    39,     0,
     2771     711,  -294,     0,     0,   110,     0,     0,     0,     0,     0,
    27892772       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    27902773      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
    27912774       0,     0,     0,     0,   338,     0,     0,     0,     0,     0,
    2792        0,     0,   634,     0,     0,     8,     9,    10,    11,    12,
     2775       0,     0,   110,     0,     0,     8,     9,    10,    11,    12,
    27932776      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2794       23,    24,    25,     0,   454,    26,    27,    28,     0,     0,
    2795        0,     0,   110,     0,    31,     8,     9,    10,    11,    12,
     2777      23,    24,    25,     0,   454,    26,    27,    28,  1109,     0,
     2778       0,     0,   110,     0,    31,   453,     8,     9,    10,    11,
     2779      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2780      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
     2781       0,     0,    34,     0,     0,    31,     0,     0,     0,    38,
     2782      39,     0,     0,     0,     8,     9,    10,    11,    12,    13,
     2783      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2784      24,    25,     0,    34,    26,    27,    28,     0,     0,     0,
     2785     206,    39,     0,    31,     0,     0,   454,     0,     0,     0,
     2786    1236,     0,     0,     0,   110,     0,     0,     0,     0,     0,
     2787       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2788       0,    34,     0,     0,     0,     0,     0,   269,    38,    39,
     2789       0,     0,     0,     0,     0,   270,     0,     8,     9,    10,
     2790      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2791      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
     2792       0,     0,     0,     0,     0,   256,    31,     0,     0,     0,
     2793       0,     0,     0,   634,     0,     8,     9,    10,    11,    12,
     2794      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2795      23,    24,    25,     0,    34,    26,    27,    28,     0,     0,
     2796       0,    38,    39,     0,    31,     8,     9,    10,    11,    12,
    27962797      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    27972798      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2798        0,     0,    34,     0,    31,     0,     0,     0,     0,   206,
    2799       39,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2799       0,     0,    34,     0,    31,     0,     0,     0,   338,    38,
     2800      39,     0,     0,     0,     0,     0,   634,     0,     0,     0,
     2801       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2802       0,     0,    34,     0,     0,     0,     0,     0,     0,   206,
     2803      39,     0,     0,     0,     0,     0,   454,     0,     0,     0,
     2804       0,     0,     0,     0,   110,     0,     0,     8,     9,    10,
     2805      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2806      21,    22,    23,    24,    25,     0,   269,    26,    27,    28,
     2807       0,     0,     0,     0,   629,     0,    31,     8,     9,    10,
     2808      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2809      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
     2810       0,     0,     0,     0,    34,     0,    31,     0,     0,     0,
     2811       0,    38,    39,     0,     0,     8,     9,    10,    11,    12,
     2812      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2813      23,    24,    25,     0,    34,    26,    27,    28,     0,     0,
     2814       0,    38,    39,     0,    31,     0,     0,     0,   599,     0,
     2815       0,     0,     0,     0,     0,     0,   634,     0,     0,     0,
     2816       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2817       0,     0,    34,     0,     0,     0,     0,     0,   338,    38,
     2818      39,     0,     0,     0,     0,     0,   110,     2,   205,     4,
     2819       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    28002820      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2801       25,     0,    34,    26,    27,    28,     0,     0,     0,    38,
    2802       39,     0,    31,     0,     0,     0,   269,     0,     0,     0,
    2803        0,     0,     0,     0,   629,     0,     0,     0,     0,     0,
     2821      25,     0,     0,    26,    27,    28,    44,     0,     0,     0,
     2822       0,     0,    31,     0,   110,     0,     0,     0,     0,     0,
    28042823       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2805       34,     0,     0,     0,     0,     0,   599,    38,    39,     0,
    2806        0,     0,     0,     0,   634,     0,     8,     9,    10,    11,
    2807       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2808       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2809        0,     0,     0,     0,   338,    31,     0,     0,     0,     0,
    2810        0,     0,   110,     0,     8,     9,    10,    11,    12,    13,
     2824       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2825      34,     0,    35,     0,    36,     0,     0,    38,    39,   281,
     2826     282,     0,   283,  1063,     0,  1064,     0,     0,  1065,  1066,
     2827    1067,  1068,  1069,  1070,  1071,  1072,     0,     0,  1551,  1073,
     2828       0,     0,     0,  1074,  1075,     0,    33,     0,   284,     0,
     2829       0,     0,     0,  -415,   649,     0,     0,     0,   286,     0,
     2830       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2831       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2832       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2833       0,   294,     0,   378,     0,     0,   170,     0,     0,     0,
     2834     296,   380,   298,   299,   300,   301,     0,     0,     0,     0,
     2835    1077,     0,   281,   282,  -129,   283,  1063,     0,  1064,     0,
     2836       0,  1065,  1066,  1067,  1068,  1069,  1070,  1071,  1072,     0,
     2837       0,     0,  1073,     0,     0,     0,  1074,  1075,     0,    33,
     2838       0,   284,     0,     0,     0,     0,     0,   649,     0,     0,
     2839       0,   286,     0,     0,   287,   288,   289,   290,    41,    42,
     2840       0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
     2841       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2842       0,     0,     0,     0,   294,     0,   378,     0,     0,   170,
     2843       0,     0,     0,   296,   380,   298,   299,   300,   301,     0,
     2844       0,     0,     0,  1077,     0,     0,     0,  -129,     2,   205,
     2845       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    28112846      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2812       24,    25,     0,    34,    26,    27,    28,     0,     0,     0,
    2813       38,    39,     0,    31,     0,     0,     2,   205,     4,     5,
    2814        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2815       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2816        0,    34,    26,    27,    28,     0,     0,    44,   206,    39,
    2817        0,    31,     0,   281,   282,   110,   283,  1063,     0,  1064,
     2847      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
     2848       0,     0,     0,    31,     0,   281,   282,     0,   283,  1063,
     2849       0,  1064,  1421,  1422,  1065,  1066,  1067,  1068,  1069,  1070,
     2850    1071,  1072,     0,     0,  1551,  1073,     0,     0,     0,  1074,
     2851    1075,    34,    33,    35,   284,    36,     0,     0,    38,    39,
     2852     649,     0,     0,     0,   286,     0,     0,   287,   288,   289,
     2853     290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
     2854    1330,     0,   293,     0,     0,     0,     0,     0,     0,     0,
     2855       0,     0,     0,     0,     0,     0,     0,   294,     0,   378,
     2856       0,     0,   170,     0,     0,     0,   296,   380,   298,   299,
     2857     300,   301,     0,     0,   281,   282,  1077,   283,  1063,     0,
     2858    1064,  1421,  1422,  1065,  1066,  1067,  1068,  1069,  1070,  1071,
     2859    1072,     0,     0,     0,  1073,     0,     0,     0,  1074,  1075,
     2860       0,    33,     0,   284,     0,     0,     0,     0,     0,   649,
     2861       0,     0,     0,   286,     0,     0,   287,   288,   289,   290,
     2862      41,    42,     0,   291,   292,     0,     0,     0,     0,     0,
     2863       0,   293,     0,     0,     0,     0,     0,     0,     0,     0,
     2864       0,     0,     0,     0,     0,     0,   294,     0,   378,     0,
     2865       0,   170,     0,     0,     0,   296,   380,   298,   299,   300,
     2866     301,     0,     0,   281,   282,  1077,   283,  1063,     0,  1064,
    28182867       0,     0,  1065,  1066,  1067,  1068,  1069,  1070,  1071,  1072,
    2819        0,     0,  1549,  1073,     0,     0,     0,  1074,  1075,    34,
    2820       33,    35,   284,    36,     0,     0,    38,    39,   649,     0,
    2821        0,     0,   286,   629,     0,   287,   288,   289,   290,    41,
     2868       0,     0,     0,  1073,     0,     0,     0,  1074,  1075,     0,
     2869      33,     0,   284,     0,     0,     0,     0,     0,   649,     0,
     2870       0,     0,   286,     0,     0,   287,   288,   289,   290,    41,
     2871      42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
     2872     293,   281,   282,     0,   283,     0,     0,     0,     0,     0,
     2873       0,     0,     0,     0,     0,   294,     0,   378,     0,     0,
     2874     170,     0,     0,     0,   296,   380,   298,   299,   300,   301,
     2875     284,     0,     0,     0,  1077,     0,   649,     0,     0,     0,
     2876     286,     0,     0,   287,   288,   289,   290,    41,    42,     0,
     2877     291,   292,     0,     0,     0,     0,     0,     0,   293,   281,
     2878     282,     0,   283,     0,     0,     0,     0,     0,     0,     0,
     2879       0,     0,     0,   294,     0,   785,     0,     0,   281,   282,
     2880       0,   283,   296,   380,   298,   299,   300,   301,   284,     0,
     2881       0,     0,     0,     0,   285,     0,     0,     0,   286,     0,
     2882       0,   287,   288,   289,   290,    41,    42,   284,   291,   292,
     2883       0,     0,     0,   285,     0,     0,   293,   286,     0,     0,
     2884     287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
     2885       0,   294,     0,   378,     0,   293,   281,   282,     0,   283,
     2886     296,   827,   298,   299,   300,   301,     0,     0,     0,     0,
     2887     513,     0,     0,     0,     0,   281,   282,     0,   283,   296,
     2888     380,   298,   299,   300,   301,   284,     0,     0,     0,     0,
     2889       0,   285,     0,     0,     0,   286,     0,     0,   287,   288,
     2890     289,   290,    41,    42,   284,   291,   292,     0,     0,     0,
     2891     285,     0,     0,   293,   286,     0,     0,   287,   288,   289,
     2892     290,    41,    42,     0,   291,   292,     0,     0,   294,     0,
     2893       0,     0,   293,   281,   282,     0,   283,   296,   380,   298,
     2894     299,   300,   301,     0,     0,     0,     0,   518,     0,     0,
     2895       0,     0,     0,     0,     0,     0,   296,   380,   298,   299,
     2896     300,   301,   284,     0,     0,     0,     0,     0,   285,     0,
     2897       0,     0,   286,     0,     0,   287,   288,   289,   290,    41,
    28222898      42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
    28232899     293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2824        0,     0,  -413,     0,     0,   294,     0,   378,     0,     0,
    2825      170,     0,     0,     0,   296,   380,   298,   299,   300,   301,
    2826        0,     0,     0,     0,  1077,     0,   281,   282,  -129,   283,
    2827     1063,     0,  1064,     0,     0,  1065,  1066,  1067,  1068,  1069,
    2828     1070,  1071,  1072,     0,     0,     0,  1073,     0,     0,     0,
    2829     1074,  1075,     0,    33,     0,   284,     0,     0,     0,     0,
    2830        0,   649,     0,     0,     0,   286,     0,     0,   287,   288,
    2831      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2832        0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
    2833        0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
    2834      378,     0,     0,   170,     0,     0,     0,   296,   380,   298,
    2835      299,   300,   301,     0,     0,     0,     0,  1077,     0,     0,
    2836        0,  -129,     2,   205,     4,     5,     6,     7,     8,     9,
     2900       0,     0,     0,     0,     0,   521,     0,     0,     0,     0,
     2901       0,     0,     0,     0,   296,   380,   298,   299,   300,   301,
     2902       2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
     2903      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2904      22,    23,    24,    25,     0,     0,     0,     0,     0,     0,
     2905       0,     0,     0,     0,     0,    31,     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       0,     0,     0,    34,     0,    35,     0,    36,    37,     0,
     2909     173,   174,    40,     0,     0,     0,     0,     0,     0,    41,
     2910      42,   204,     2,   205,     4,     5,     6,     7,     8,     9,
    28372911      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    28382912      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
    2839       28,     0,     0,     0,     0,     0,     0,    31,     0,   281,
    2840      282,     0,   283,  1063,     0,  1064,  1419,  1420,  1065,  1066,
    2841     1067,  1068,  1069,  1070,  1071,  1072,     0,     0,  1549,  1073,
    2842        0,     0,     0,  1074,  1075,    34,    33,    35,   284,    36,
    2843        0,     0,    38,    39,   649,     0,     0,     0,   286,     0,
    2844        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2845        0,     0,     0,     0,  1328,     0,   293,     0,     0,     0,
    2846        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2847        0,   294,     0,   378,     0,     0,   170,     0,     0,     0,
    2848      296,   380,   298,   299,   300,   301,     0,     0,   281,   282,
    2849     1077,   283,  1063,     0,  1064,  1419,  1420,  1065,  1066,  1067,
    2850     1068,  1069,  1070,  1071,  1072,     0,     0,     0,  1073,     0,
    2851        0,     0,  1074,  1075,     0,    33,     0,   284,     0,     0,
    2852        0,     0,     0,   649,     0,     0,     0,   286,     0,     0,
    2853      287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
    2854        0,     0,     0,     0,     0,   293,     0,     0,     0,     0,
    2855        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2856      294,     0,   378,     0,     0,   170,     0,     0,     0,   296,
    2857      380,   298,   299,   300,   301,     0,     0,   281,   282,  1077,
    2858      283,  1063,     0,  1064,     0,     0,  1065,  1066,  1067,  1068,
    2859     1069,  1070,  1071,  1072,     0,     0,     0,  1073,     0,     0,
    2860        0,  1074,  1075,     0,    33,     0,   284,     0,     0,     0,
    2861        0,     0,   649,     0,     0,     0,   286,     0,     0,   287,
    2862      288,   289,   290,    41,    42,     0,   291,   292,     0,     0,
    2863        0,     0,     0,     0,   293,   281,   282,     0,   283,     0,
    2864        0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
    2865        0,   378,     0,     0,   170,     0,     0,     0,   296,   380,
    2866      298,   299,   300,   301,   284,     0,     0,     0,  1077,     0,
    2867      285,     0,     0,     0,   286,     0,     0,   287,   288,   289,
    2868      290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
    2869        0,     0,   293,   281,   282,     0,   283,     0,     0,     0,
    2870        0,     0,     0,     0,     0,     0,     0,   294,     0,   378,
    2871        0,     0,   281,   282,     0,   283,   296,   380,   298,   299,
    2872      300,   301,   284,     0,     0,     0,     0,     0,   285,     0,
    2873        0,     0,   286,     0,     0,   287,   288,   289,   290,    41,
    2874       42,   284,   291,   292,     0,     0,     0,   649,     0,     0,
    2875      293,   286,     0,     0,   287,   288,   289,   290,    41,    42,
    2876        0,   291,   292,     0,     0,   294,     0,   378,     0,   293,
    2877      281,   282,     0,   283,   296,   734,   298,   299,   300,   301,
    2878        0,     0,     0,     0,   294,     0,   785,     0,     0,   281,
    2879      282,     0,   283,   296,   380,   298,   299,   300,   301,   284,
    2880        0,     0,     0,     0,     0,   285,     0,     0,     0,   286,
    2881        0,     0,   287,   288,   289,   290,    41,    42,   284,   291,
    2882      292,     0,     0,     0,   285,     0,     0,   293,   286,     0,
    2883        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2884        0,     0,   294,     0,   378,     0,   293,   281,   282,     0,
    2885      283,   296,   827,   298,   299,   300,   301,     0,     0,     0,
    2886        0,   294,     0,     0,     0,     0,   281,   282,     0,   283,
    2887      296,   380,   298,   299,   300,   301,   284,     0,     0,     0,
    2888        0,     0,   285,     0,     0,     0,   286,     0,     0,   287,
    2889      288,   289,   290,    41,    42,   284,   291,   292,     0,     0,
    2890        0,   285,     0,     0,   293,   286,     0,     0,   287,   288,
    2891      289,   290,    41,    42,     0,   291,   292,     0,     0,   518,
    2892        0,     0,     0,   293,     0,     0,     0,     0,   296,   380,
    2893      298,   299,   300,   301,     0,     0,     0,     0,   521,     0,
    2894        0,     0,     0,     0,     0,     0,     0,   296,   380,   298,
    2895      299,   300,   301,   204,     2,   205,     4,     5,     6,     7,
    2896        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2897       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2898       26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
     2913      28,     0,     0,     0,     0,     0,     0,    31,     0,     0,
    28992914       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    29002915       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2901        0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
    2902        0,    36,     0,     0,   206,    39,   474,     2,   205,     4,
     2916       0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
     2917       0,     0,   206,    39,   474,     2,   205,     4,     5,     6,
     2918       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2919      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2920       0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
     2921      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2922       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2923       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
     2924      35,     0,    36,     0,     0,    38,    39,     2,   205,     4,
    29032925       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    29042926      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    29052927      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2906        0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
     2928       0,     0,    31,     0,     8,     9,    10,    11,    12,    13,
     2929      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2930      24,    25,     0,     0,    26,    27,    28,   492,   493,   494,
     2931      34,     0,    35,    31,    36,     0,     0,   206,    39,     0,
    29072932       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    29082933       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2909       34,     0,    35,     0,    36,     0,     0,    38,    39,     2,
    2910      205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2911       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2912       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2913        0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
    2914        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2915        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2916        0,     0,    34,     0,    35,     0,    36,     0,     0,   206,
    2917       39
     2934       0,    34,     0,     0,     0,     0,     0,     0,    38,    39
    29182935};
    29192936
    29202937#define yypact_value_is_default(yystate) \
    2921   ((yystate) == (-1356))
     2938  ((yystate) == (-1332))
    29222939
    29232940#define yytable_value_is_error(yytable_value) \
     
    29262943static const yytype_int16 yycheck[] =
    29272944{
    2928        0,     1,     0,   184,    43,   698,   115,   184,    43,   184,
    2929       43,   238,    55,   698,     1,   167,   168,   698,   104,   203,
    2930      543,   294,   184,   455,   185,   218,   280,   278,   456,    29,
    2931       30,   656,    32,   184,    32,   348,   611,   184,   520,   185,
    2932      759,   611,     1,    43,   184,    45,  1006,    45,   186,   629,
    2933      499,   579,   609,     0,   503,    55,   902,   999,   462,  1042,
    2934     1043,    61,   105,    61,    64,   108,    64,    67,   154,    67,
    2935      902,   348,   780,    43,    43,   609,   609,    32,    39,    51,
    2936       67,    81,    82,   264,   777,    32,  1419,   264,   609,   264,
    2937     1338,   200,   777,   609,    28,  1055,   777,   529,   723,    63,
    2938       95,  1062,   264,   609,   265,   105,   699,    39,   108,   110,
    2939      417,    82,    43,   264,   699,   115,   117,   264,   109,   265,
    2940     1475,   497,   260,   261,   264,   609,    64,   363,   721,    82,
    2941      437,   367,    39,     0,   612,   130,   721,   109,   445,   110,
    2942      618,  1074,  1075,   344,    78,   184,   146,    82,   146,   184,
    2943      111,   184,   425,   426,   154,  1510,     0,  1512,   111,   159,
    2944     1493,   159,  1043,   425,   426,    32,   107,   227,   132,     0,
    2945        1,   109,   109,   109,   217,   111,   255,   109,    39,   111,
    2946        0,     1,   283,   119,   184,   185,   246,   185,    32,     0,
    2947      131,    39,     0,  1441,    72,   296,   297,    64,    44,    45,
    2948      200,    32,   109,    39,   111,    83,    84,   308,   208,  1142,
    2949      208,   680,    32,    39,   184,   184,   409,   217,   495,   812,
    2950      220,    32,   220,   744,    32,   264,   110,   227,   271,   264,
    2951     1062,   264,   116,    64,   109,   278,    67,   613,   744,   501,
    2952      513,   617,   242,   344,   405,   518,   246,    67,   521,    11,
    2953      250,   251,   250,   184,   132,   341,   131,   511,   520,   405,
    2954      744,   109,   638,   111,   264,   265,   642,   265,     0,   115,
    2955      109,   271,   111,   109,   109,   111,   851,    45,   278,   380,
    2956      119,   851,   839,   109,   370,   111,   395,    82,   489,   110,
    2957      718,   819,   251,   293,   455,   250,   117,   890,   611,    85,
    2958       32,  1009,   575,   250,   347,   839,   839,  1290,  1291,   455,
    2959       45,    43,    82,    45,   423,  1257,    44,    45,   839,   112,
    2960      429,   364,   117,   839,   586,   368,   487,   113,   328,    61,
    2961      328,   114,    64,   839,   293,    67,   116,    82,   417,   109,
    2962       96,   487,   110,  1304,     3,   112,   815,   347,   348,   116,
    2963       44,    45,  1071,   220,     3,   839,   825,   489,   437,   116,
    2964     1241,   597,    72,   841,   364,   110,   445,   123,   368,    82,
    2965       72,   840,   117,    83,    84,   110,    72,   145,     0,   379,
    2966     1226,    83,    84,   250,   691,   978,   114,    83,    84,   220,
    2967      960,   644,   645,   978,  1226,   395,   109,    96,   129,   600,
    2968      131,   111,   959,     0,   640,   405,   250,   405,  1526,   662,
    2969     1291,   255,   109,   513,   146,   515,  1009,   119,   518,   250,
    2970      114,   521,   676,   423,   123,   959,   959,   159,   629,   429,
    2971      250,   431,  1415,   634,  1526,  1553,   132,  1496,    72,   250,
    2972      208,  1021,   250,  1502,   255,   131,   532,  1407,  1408,    83,
    2973       84,   116,   184,   185,  1546,   455,   557,   558,   559,   112,
    2974      460,  1553,   109,   116,  1523,   465,  1059,   132,   116,  1528,
    2975      238,   110,  1304,   208,   474,   471,   208,   111,   117,   479,
    2976      109,   110,   349,   736,   132,   115,   116,   487,   220,   487,
    2977      109,   491,   131,   491,    80,   495,   697,   873,   498,   600,
    2978      500,   131,   270,  1464,   239,   657,   938,   758,   762,   109,
    2979     1471,   643,   644,   645,   946,   474,  1141,   698,   250,   968,
    2980      520,   698,  1004,   698,   928,   111,   109,   113,   666,   297,
    2981      662,   117,   264,   109,  1415,   270,   698,   537,   851,   700,
    2982      540,  1134,   542,   543,   491,   109,  1116,   698,   116,  1134,
    2983      116,   698,  1030,  1031,   700,   664,    72,   110,   698,   294,
    2984      992,   520,   297,  1524,   132,   697,   132,    83,    84,   110,
    2985     1039,  1040,   773,   417,   851,   828,   344,   110,   537,  1423,
    2986      112,   540,   110,   542,   543,  1304,   116,   630,   116,   965,
    2987      590,    30,   110,   437,   830,   111,   328,   597,   834,  1192,
    2988     1193,   445,   132,   646,   736,   110,   417,  1192,  1193,   609,
    2989      696,   611,   691,   480,    90,    91,   348,   119,   661,   643,
    2990      644,   645,   124,   125,   491,   109,   437,   111,  1097,  1098,
    2991      630,   590,  1464,   734,   445,    80,  1132,   116,   662,  1471,
    2992     1136,   773,    81,    82,    72,   112,   646,   491,    76,   116,
    2993      126,   127,   652,   132,   733,    83,    84,   425,   426,   116,
    2994      491,   661,  1381,   663,   664,   665,   111,   110,   113,   116,
    2995      110,   491,   117,   405,  1102,   132,   116,  1521,   489,   780,
    2996      491,   109,  1526,   491,   680,   132,   772,   964,   924,   116,
    2997      115,   119,  1524,   109,   116,   888,   828,   109,   698,   111,
    2998      700,   116,  1546,   109,   663,   132,   665,   119,   116,  1553,
    2999      132,   109,   736,   713,   116,   758,   909,   132,   453,   719,
    3000       64,   456,   110,   455,   132,    68,   827,   462,   116,    72,
    3001      132,   731,    75,   501,    77,    72,    10,    11,    12,    13,
    3002       14,    84,   894,   970,   744,   745,    83,    84,   110,  1468,
    3003       72,  1470,   520,   109,   116,   111,   132,   116,   758,   491,
    3004        3,    83,    84,   495,   631,    39,   112,    10,    11,    12,
    3005       13,    14,   731,   132,   111,   110,   110,   938,   513,   109,
    3006      515,   116,   116,   518,   112,   946,   521,   109,   116,   110,
    3007      598,   132,   938,    67,   112,   116,    39,  1320,   116,   110,
    3008      946,   110,  1271,   242,   828,   116,  1525,   116,   109,  1402,
    3009     1279,  1280,  1281,   109,    45,   111,   110,  1402,   586,   815,
    3010     1021,   110,   116,   112,    67,   110,  1419,   116,   114,   825,
    3011       61,   116,   600,    64,  1419,   110,    67,  1530,   109,   839,
    3012      111,   116,   131,   132,   840,  1530,     1,   691,    72,  1530,
    3013     1034,   851,    76,    72,   114,    74,    75,   724,  1327,    83,
    3014       84,   629,    64,    72,    83,    84,   634,  1103,   211,   132,
    3015      110,   738,   121,   122,    83,    84,   116,   609,  1132,   611,
    3016      691,   132,  1136,  1137,   114,   109,   697,   111,   109,   733,
    3017       45,   109,    72,   111,   894,   119,    76,    88,    89,  1492,
    3018     1493,   901,   902,    83,    84,  1057,   110,  1492,  1493,    82,
    3019     1042,   110,   116,   110,   116,   146,   109,   116,   111,   116,
    3020     1021,   110,   733,   109,   924,   110,   109,   116,   159,   109,
    3021      112,   116,  1205,  1206,   109,  1208,   111,    82,   938,   119,
    3022      379,  1214,   120,   902,  1217,   109,   946,   111,   129,   104,
    3023      564,   565,   566,   567,   185,   110,   109,   159,   111,   128,
    3024     1161,  1062,   773,    94,   964,   832,   698,    72,   700,    74,
    3025       75,    64,    92,    93,    85,    86,    87,   208,    83,    84,
    3026      115,   116,   969,   718,   984,   109,   110,   111,    81,   220,
    3027      145,   116,   117,   993,   109,   110,   111,  1251,   109,   154,
    3028      111,  1001,   113,   114,  1004,   703,  1006,   705,   351,   114,
    3029      353,   111,   744,   745,   131,  1124,   110,   111,   220,    58,
    3030       59,   460,   109,   116,   109,   984,   465,   835,   112,  1161,
    3031      109,   110,   111,   115,   116,   902,   109,   110,   111,   109,
    3032     1241,   112,  1001,  1039,  1040,  1004,   110,  1006,   110,   204,
    3033       58,    59,    60,   208,   110,  1055,   258,   110,   902,   498,
    3034      262,   500,   116,   117,   110,  1065,   159,   110,  1068,  1069,
    3035     1070,   902,   112,  1505,   116,   117,    72,  1178,    74,    75,
    3036       76,   111,   902,   238,   239,  1339,   112,    83,    84,  1343,
    3037      131,   902,   116,  1093,   902,   114,  1055,   328,   441,    44,
    3038       45,  1097,  1098,   109,  1377,   112,  1065,   839,   110,  1068,
    3039     1069,  1070,   110,   109,    72,   270,    74,    75,   273,   851,
    3040     1263,  1264,  1265,  1555,  1124,    83,    84,   220,   112,     4,
    3041        5,     6,     7,     8,     9,  1221,   560,   561,   969,   294,
    3042      112,   112,   297,   562,   563,   568,   569,   349,   112,   969,
    3043      117,   109,     3,    29,   117,   117,   114,  1024,  1290,    10,
    3044       11,    12,    13,    14,    72,   258,    74,    75,    76,   262,
    3045      116,   110,   110,   114,   405,    83,    84,   112,    10,    11,
    3046       12,    13,    14,   117,   115,   110,   341,   115,    39,   344,
    3047      116,  1445,   115,   928,    69,  1062,    71,   109,   116,  1199,
    3048      110,   109,   970,   111,   110,   132,   938,    39,   363,   117,
    3049      110,   119,   367,   652,   946,   370,    67,  1204,  1062,   117,
    3050      110,  1221,    72,   110,    74,    75,  1226,   110,   430,   110,
    3051        3,  1062,   964,    83,    84,    67,   116,    10,    11,    12,
    3052       13,    14,  1062,  1239,     4,     5,     6,     7,     8,     9,
    3053      110,  1062,   110,  1021,  1062,   110,   349,   132,  1245,   115,
    3054       29,   111,   110,  1263,  1264,  1265,    39,  1226,   110,   110,
    3055      425,   426,   110,    33,   713,  1271,   110,   109,   480,   111,
    3056      719,   902,   110,  1279,  1280,  1281,   110,   119,    72,  1398,
    3057       74,    75,    76,   110,    67,   110,   131,   110,   453,    83,
    3058       84,   456,   112,   110,  1263,  1264,  1265,   462,   110,    69,
    3059      115,    71,   110,  1540,    85,    86,    87,   116,   112,   474,
    3060     1320,  1321,   112,   110,     4,     5,     6,     7,     8,     9,
    3061      110,  1327,   110,   471,   116,   116,  1203,   430,   109,   114,
    3062      111,   117,   113,   114,   499,   112,   501,   110,   503,  1530,
    3063     1161,  1338,   116,  1530,  1397,  1530,   110,   116,   513,  1226,
    3064      515,  1320,  1321,   518,   116,   520,   521,  1102,  1530,   110,
    3065     1531,   117,  1203,  1204,   112,  1375,   109,   532,  1378,  1530,
    3066      109,   109,  1226,  1530,  1204,  1531,   109,   480,   109,    69,
    3067     1530,    71,   112,   132,  1555,  1226,  1505,  1397,  1398,   115,
    3068      110,   603,   110,   110,   129,   114,  1226,  1407,  1408,  1555,
    3069       72,   115,    74,    75,  1245,  1226,  1375,   112,  1226,  1378,
    3070      132,    83,    84,  1423,   110,  1245,   116,   112,  1428,   631,
    3071     1241,   586,  1299,   116,   636,   112,    55,  1304,   110,   110,
    3072      110,    47,   597,   112,  1065,   600,  1446,   109,  1407,  1408,
    3073      110,   112,   114,   112,  1441,   894,   112,    53,  1458,   112,
    3074     1304,   112,   901,   115,  1423,   132,   132,   132,  1299,  1428,
    3075      110,   115,   117,  1304,   629,   132,   110,   132,   115,   634,
    3076      112,   112,     0,     1,  1304,   640,   105,  1446,   112,   108,
    3077      112,  1530,   112,  1304,   112,  1530,  1304,  1530,   112,  1458,
    3078       96,   112,   110,   110,   109,  1505,  1506,  1338,   112,   112,
    3079      603,   109,   109,    60,    32,  1515,   110,   110,  1338,   114,
    3080      132,  1521,   724,   112,   112,   117,  1526,    45,   110,   112,
    3081     1530,  1531,   110,  1531,    96,   154,   738,    96,   631,   109,
    3082      109,   696,   680,   636,  1544,   132,  1546,  1506,   115,    67,
    3083     1550,   112,   110,  1553,   993,  1555,  1515,  1555,   110,   110,
    3084      110,  1561,  1521,   718,    51,  1565,    53,  1526,   116,    56,
    3085       57,    58,    72,    60,    74,    75,    76,    42,    72,   117,
    3086       74,    75,    76,    83,    84,  1544,   104,  1546,    75,    83,
    3087       84,  1550,   132,   748,  1553,   132,   192,  1464,   217,   110,
    3088       87,    88,  1561,   110,  1471,  1226,  1565,    96,    96,   109,
    3089     1441,    72,   132,    74,    75,    76,   132,   772,   110,   215,
    3090     1464,  1441,    83,    84,   110,   110,   117,  1471,   146,   225,
    3091      832,   724,   110,  1464,   132,   115,   154,   155,   112,   112,
    3092     1471,   109,   132,   115,  1464,   738,   115,   110,   109,   132,
    3093      111,  1471,   271,  1464,  1093,   110,  1464,  1524,   119,   278,
    3094     1471,   132,    72,  1471,    74,    75,    76,   185,   110,   110,
    3095     1077,   570,   573,    83,    84,   830,   571,   815,   572,   834,
    3096     1524,   574,   200,  1226,    64,   203,   204,   825,  1493,  1565,
    3097      208,  1383,  1343,  1524,    74,  1137,  1314,  1471,   294,   109,
    3098     1321,   111,   840,  1093,  1524,   453,   453,   946,   705,   119,
    3099      465,   229,   948,  1524,   993,   233,  1524,   235,   590,   748,
    3100      894,    10,    11,    12,    13,    14,   244,   758,   347,   658,
    3101     1245,   966,   250,   491,   578,   578,   116,   255,  1473,   832,
    3102     1475,   578,    -1,    -1,    -1,   364,    -1,   265,    -1,   368,
    3103       39,    -1,    -1,    -1,  1375,   273,    -1,  1378,    -1,    -1,
    3104     1199,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   924,
    3105       -1,    -1,  1540,   928,    -1,  1510,    -1,  1512,    67,   159,
    3106       -1,    -1,    -1,    72,    -1,    74,    75,    76,    72,    -1,
    3107       74,    75,    76,    -1,    83,    84,     0,    -1,  1530,    83,
    3108       84,    -1,  1423,    -1,    -1,    -1,    72,  1428,    74,    75,
    3109       76,    -1,   431,   968,   969,   970,    -1,    83,    84,    -1,
    3110      109,    -1,  1024,   341,    -1,   109,   344,   111,    32,    -1,
    3111      119,    -1,   350,    -1,    -1,   119,    -1,  1458,    -1,    -1,
    3112      220,    -1,    -1,   109,    -1,   363,   442,    -1,    -1,   367,
    3113       -1,    -1,   370,   119,    -1,    -1,    -1,   344,   345,    -1,
    3114       -1,    -1,    -1,    67,    -1,    -1,  1021,    -1,    -1,   356,
    3115      357,    10,    11,    12,    13,    14,    -1,    -1,   258,    -1,
    3116      476,    -1,   262,    72,    -1,    74,    75,    76,    -1,    -1,
    3117       -1,    -1,    -1,    -1,    83,    84,    -1,    -1,   278,   417,
    3118       39,  1039,  1040,    -1,    -1,    -1,    26,    27,    28,    -1,
    3119       -1,    -1,    -1,    -1,   432,    -1,    -1,   513,    -1,   437,
    3120      109,    -1,   518,  1544,    -1,   521,    -1,   445,    67,  1550,
    3121      119,  1024,    10,    11,    12,    13,    14,    -1,    -1,    -1,
    3122     1561,    -1,    -1,    -1,  1565,    -1,    -1,  1102,  1103,    -1,
    3123       -1,   155,    -1,   471,    -1,    -1,   474,    -1,    -1,  1097,
    3124     1098,    39,    -1,    -1,    10,    11,    12,    13,    14,   349,
    3125      109,   489,   111,   491,    -1,    -1,    -1,    97,   597,    99,
    3126      119,   499,    -1,    -1,    -1,   503,    -1,    -1,    -1,    67,
    3127       -1,    -1,    -1,    39,    72,    -1,    74,    75,    76,    -1,
    3128       -1,  1203,    -1,    -1,   124,    83,    84,    -1,    -1,    -1,
    3129       -1,   630,    -1,    -1,   532,   533,    -1,    -1,    -1,    -1,
    3130       -1,    67,    -1,    -1,    -1,   229,    72,   646,    74,    75,
    3131       76,   109,    -1,   111,    -1,    -1,    -1,    83,    84,    -1,
    3132       -1,   119,   661,    -1,    -1,    -1,   250,    -1,    -1,    -1,
    3133      430,   255,    -1,    -1,    -1,    10,    11,    12,    13,    14,
    3134      180,   579,    -1,   109,    -1,   111,  1221,   447,   188,    -1,
    3135      190,   191,    -1,   119,    -1,   195,    -1,   197,   198,   597,
    3136      598,    -1,   600,   679,    39,    -1,    -1,    -1,    -1,    -1,
    3137     1245,    -1,   688,   611,    -1,    -1,   692,  1299,    -1,    -1,
    3138      480,  1239,    -1,    10,    11,    12,    13,    14,    -1,    -1,
    3139     1203,   629,    67,    -1,    -1,    -1,   634,    72,    -1,    74,
    3140       75,    76,   640,    -1,    -1,   643,   644,   645,    83,    84,
    3141       -1,    -1,    39,  1271,    -1,    -1,    -1,    -1,    -1,   758,
    3142       -1,  1279,  1280,  1281,   662,    -1,   350,   267,    -1,    -1,
     2945       0,     1,     0,   203,   184,   184,   520,   698,   238,    43,
     2946     115,   184,     1,   698,    43,    43,   543,   185,   629,     0,
     2947     104,   218,   184,   280,   185,   456,   455,   698,   348,    29,
     2948      30,   184,    32,   184,    32,  1062,   184,   902,   167,   168,
     2949     609,   348,     1,    43,   656,    45,   278,    45,  1043,   611,
     2950    1006,    32,  1042,  1043,    32,    55,   497,     0,   759,   611,
     2951      28,    61,   612,    61,    64,   609,    64,    67,   618,    67,
     2952     154,   609,   499,   579,  1340,   718,   503,   999,    67,   609,
     2953     609,    81,    82,   780,   264,   264,   777,    51,   186,    32,
     2954    1421,   264,   777,   609,    82,   200,  1425,   265,   344,  1055,
     2955     529,    39,   264,   902,   265,   105,   777,     0,   108,    39,
     2956      78,   264,   417,   264,   609,   115,   264,     0,    43,    72,
     2957      43,    45,   363,   643,   644,   645,   367,   489,    44,    45,
     2958      83,    84,   437,    64,     0,    43,    82,    39,   227,    32,
     2959     445,    39,   662,    44,    45,   109,   146,    95,   146,    32,
     2960     184,     0,     1,    39,   154,   184,   184,   246,   111,   159,
     2961      63,   159,   260,   261,  1495,   111,    32,    44,    45,  1477,
     2962     109,    64,   613,   111,    85,   495,   617,  1443,   109,   109,
     2963      30,   111,   130,    32,   184,   185,   110,   185,     4,     5,
     2964       6,     7,     8,     9,  1523,   109,    39,   638,   114,  1528,
     2965     200,   642,   113,   255,  1512,    39,  1514,   109,   208,   111,
     2966     208,   294,   409,   114,   744,    64,   736,   217,    67,  1548,
     2967     220,   145,   220,   109,   902,   111,  1555,   227,   744,   132,
     2968     264,    81,    82,    96,    82,   264,   264,   405,   115,    11,
     2969     644,   645,   242,   489,   405,    82,   246,   109,  1243,   744,
     2970     250,   251,   250,    69,   511,    71,   112,   341,   662,   184,
     2971     123,   184,   110,  1062,   264,   265,   109,   265,   111,   250,
     2972     839,   271,   250,     0,     1,   109,   184,   111,   278,  1306,
     2973     117,   643,   644,   645,   208,   928,   370,   455,     0,   851,
     2974     395,   841,   251,   293,   455,   839,   114,   107,  1293,   851,
     2975     662,   839,  1292,  1293,   611,    32,     3,   250,   828,   839,
     2976     839,    82,  1009,   819,   238,   110,   132,   116,   423,   487,
     2977      32,   131,   117,   839,   429,   116,   487,   220,   328,   116,
     2978     328,    43,   736,    45,   293,   697,    82,  1259,   109,   951,
     2979      67,   132,   425,   426,   839,   132,   270,   347,   348,    61,
     2980     425,   426,    64,   116,   600,    67,   597,   250,   699,    55,
     2981      90,    91,  1227,   109,   364,   417,    72,   250,   368,   132,
     2982    1071,   220,   255,   297,   736,  1074,  1075,    83,    84,   379,
     2983     721,   109,   110,   629,   250,   437,   691,  1065,   634,   255,
     2984     959,    96,   242,   445,   109,   395,   126,   127,   960,   640,
     2985     110,   250,    72,   109,     3,   405,   116,   405,    82,   105,
     2986    1021,   773,   108,    83,    84,   959,   131,   116,   123,   676,
     2987     344,   959,  1417,   423,   828,   109,   501,  1417,  1227,   429,
     2988     513,   431,   873,    68,   146,   518,   110,    72,   521,  1466,
     2989      75,  1528,    77,   117,  1143,   520,  1473,   159,   532,    84,
     2990    1528,   697,    72,  1409,  1410,   455,   349,   121,   122,    72,
     2991     460,  1548,   132,    83,    84,   109,   828,   111,  1555,   116,
     2992      83,    84,   184,   185,   474,   119,   110,  1555,   116,   479,
     2993    1030,  1031,   699,   117,   112,   132,     0,   487,   116,   487,
     2994    1004,   491,   575,   491,   132,   495,   208,   131,   498,  1526,
     2995     500,   425,   426,     0,   721,   762,   119,  1306,   220,   938,
     2996     491,   586,   132,    88,    89,   474,   947,   946,   698,   698,
     2997     520,   217,   131,   250,   965,   698,   758,   773,   657,   379,
     2998    1142,   851,   700,    80,   417,   109,   698,   537,   250,   700,
     2999     540,   968,   542,   543,   851,   698,    72,   698,   491,  1227,
     3000     698,   417,   264,   116,   437,  1117,   109,    83,    84,   664,
     3001     110,   520,   445,   992,   111,   109,   113,   117,   666,   132,
     3002     117,   437,   115,   116,   110,   271,   211,   501,   537,   445,
     3003     116,   540,   278,   542,   543,   111,   109,   480,   131,   830,
     3004     590,   116,     3,   834,   109,   812,   520,   597,   491,    10,
     3005      11,    12,    13,    14,   109,  1306,   489,   132,   491,   609,
     3006     460,   611,   696,   116,    53,    72,   328,   598,   116,     4,
     3007       5,     6,     7,     8,     9,   491,    83,    84,    39,   132,
     3008     630,   590,   110,   116,   132,   119,   348,   978,   116,   691,
     3009     124,   125,   491,   112,   964,  1323,   646,   116,   498,   132,
     3010     500,   347,   652,   116,   111,   110,    67,    96,     0,     1,
     3011    1498,   661,   586,   663,   664,   665,  1504,  1466,   364,   132,
     3012      80,  1102,   368,   890,  1473,   129,   600,   131,   116,   116,
     3013    1042,   733,  1383,   924,    69,    72,    71,  1525,   772,   110,
     3014      32,   888,  1530,   405,   132,   132,    83,    84,   698,  1377,
     3015     700,   111,  1380,   113,   663,   629,   665,   117,   112,   109,
     3016     634,   111,   909,   713,   116,   110,   351,   112,   353,   719,
     3017     110,   116,    64,   723,   111,    67,   116,  1526,   110,   110,
     3018     132,   731,    45,   110,   116,   116,   131,   132,   631,   109,
     3019     970,   111,   110,   455,   744,   745,   112,  1425,    61,   119,
     3020     116,    64,  1430,   192,    67,   112,    72,   110,   758,   116,
     3021      76,   978,    72,   116,   491,   894,    76,    83,    84,  1470,
     3022     938,  1472,   731,    83,    84,  1021,   215,   938,   946,   491,
     3023     112,   110,  1460,   495,   116,   946,   225,    10,    11,    12,
     3024      13,    14,  1009,   109,  1135,  1322,    92,    93,   110,   109,
     3025    1162,   111,   652,   119,   116,   110,   441,    72,   691,   119,
     3026     109,   116,   111,   155,   697,   109,    39,   111,    83,    84,
     3027      10,    11,    12,    13,    14,   691,  1527,   109,   109,   111,
     3028     513,   724,   515,   146,  1034,   518,  1133,   119,   521,   839,
     3029    1137,  1532,  1059,   110,    67,   738,   159,  1532,   109,    39,
     3030     733,   851,  1193,  1194,   835,   294,   115,   116,   110,   110,
     3031     110,  1532,  1103,   713,   116,   116,   116,   733,  1546,   719,
     3032     116,   117,   185,   723,  1552,   115,  1133,    67,   220,   109,
     3033    1137,  1138,   109,   110,   111,  1563,   109,   132,   111,  1567,
     3034     773,   703,   110,   705,   894,   208,   119,   609,   116,   611,
     3035      72,   901,   902,   110,    76,   110,   111,   220,   250,   116,
     3036      64,    83,    84,   110,     1,   109,  1162,   111,  1135,   116,
     3037      72,   902,    74,    75,   924,    85,    86,    87,  1057,   109,
     3038    1292,    83,    84,    72,   630,    74,    75,   109,   938,   832,
     3039      58,    59,   110,   902,    83,    84,   946,   119,   116,   109,
     3040     646,   111,   109,   113,   114,   110,   112,   109,    45,   132,
     3041     110,   116,   114,   110,   964,   661,   116,   115,   116,   116,
     3042     109,   114,   109,   680,   111,   114,  1193,  1194,   114,    72,
     3043     969,    74,    75,    76,   984,   109,   698,   111,   700,   114,
     3044      83,    84,   109,   993,   111,   109,  1253,  1243,   109,   110,
     3045     111,  1001,   132,   442,  1004,   109,  1006,   111,    82,   902,
     3046      72,   132,    74,    75,   109,   328,   109,   104,   111,   902,
     3047    1125,    83,    84,   110,   117,   984,   119,    72,   109,    74,
     3048      75,    82,   744,   745,   116,   117,   902,   476,    83,    84,
     3049     112,   109,  1001,   111,   894,  1004,   970,  1006,   109,   110,
     3050     111,   901,   114,   902,   120,  1055,   116,   117,   145,   109,
     3051     110,   111,   758,  1404,   128,  1065,   111,   154,  1068,  1069,
     3052    1070,    58,    59,    60,   513,  1265,  1266,  1267,  1507,   518,
     3053    1421,  1062,   521,    72,  1341,    74,    75,    76,  1345,   129,
     3054     432,    94,   405,  1093,    83,    84,  1055,  1021,    44,    45,
     3055      10,    11,    12,    13,    14,   131,  1065,   111,   815,  1068,
     3056    1069,  1070,   564,   565,   566,   567,   109,   204,   825,   109,
     3057     969,   208,   110,  1206,  1207,  1125,  1209,   839,  1557,    39,
     3058     112,  1024,  1215,   840,    72,  1218,    74,    75,  1222,   851,
     3059     560,   561,   112,   993,   110,    83,    84,   562,   563,   491,
     3060     110,   238,   239,  1494,  1495,   110,    72,    67,    74,    75,
     3061      76,   110,    72,   110,    74,    75,    76,    83,    84,  1062,
     3062     568,   569,   109,    83,    84,   902,   112,   111,   131,  1062,
     3063     112,   114,   109,   270,   114,   116,   273,  1404,   114,   112,
     3064    1447,   533,   110,   109,    45,   111,  1062,   110,   112,   109,
     3065    1200,   111,   117,   119,  1421,   112,   112,   294,   112,   119,
     3066     297,    29,   117,  1062,   117,   116,  1205,   110,   110,   114,
     3067     117,   112,  1222,   110,   132,   115,   938,  1227,     3,   115,
     3068     115,   109,   116,   110,   946,    10,    11,    12,    13,    14,
     3069     679,   110,   969,  1093,   116,   110,  1227,   117,   110,   688,
     3070     110,   110,   964,   692,   341,   116,   598,   344,  1247,   110,
     3071     110,   110,     3,   110,    39,  1265,  1266,  1267,  1227,    10,
     3072      11,    12,    13,    14,   110,   110,   363,  1494,  1495,  1162,
     3073     367,   110,   110,   370,    10,    11,    12,    13,    14,   110,
     3074     110,   110,    67,   110,   110,  1400,  1379,   110,    39,    29,
     3075     115,   643,   644,   645,   131,   112,  1265,  1266,  1267,   110,
     3076     110,  1204,  1542,    39,   110,   110,   114,   116,   112,   112,
     3077     662,   110,  1322,  1323,   110,  1306,    67,   110,   116,   110,
     3078     117,   116,  1039,  1040,  1227,  1062,   116,   116,   425,   426,
     3079     112,    67,   116,   110,  1227,   110,   112,    85,    86,    87,
     3080    1200,  1340,  1532,  1532,   109,  1204,  1205,   208,   109,  1532,
     3081    1243,  1227,   109,  1322,  1323,  1533,   453,   109,   112,   456,
     3082    1532,   109,  1533,   111,   109,   113,   114,  1377,  1227,  1532,
     3083    1380,  1532,   132,   109,  1532,   111,   117,   474,   239,  1557,
     3084    1097,  1098,   115,   119,   736,   110,  1557,   110,  1247,  1399,
     3085    1400,   115,  1507,   110,   129,   115,   114,   112,  1301,  1409,
     3086    1410,   132,   499,  1306,   501,   110,   503,   116,  1377,   270,
     3087     112,  1380,   116,  1306,   112,  1425,   513,   110,   515,   110,
     3088    1430,   518,   110,   520,   521,   112,   471,   112,   112,   110,
     3089    1306,    47,   112,   294,   112,   532,   297,   112,  1448,   115,
     3090    1409,  1410,  1301,   132,  1443,   110,   132,  1306,   115,   132,
     3091    1460,   117,   110,   132,   115,   132,  1425,   112,   112,   112,
     3092     112,  1430,    72,   112,    74,    75,    76,   112,  1205,   112,
     3093     112,   110,   110,    83,    84,  1466,   828,   926,   112,  1448,
     3094     112,  1340,  1473,   835,     0,     1,   109,   109,  1532,   586,
     3095    1227,  1460,   109,  1532,  1532,    60,   110,  1507,  1508,   109,
     3096     597,   111,    55,   600,   110,   114,   132,  1517,   112,   119,
     3097    1247,   112,   117,  1523,   110,   112,    32,   110,  1528,    96,
     3098      96,   109,  1532,  1533,   109,  1533,   115,   110,   112,    45,
     3099     132,   110,   629,    42,   116,  1526,  1546,   634,  1548,  1508,
     3100     110,   110,  1552,   640,   117,  1555,   132,  1557,  1517,  1557,
     3101     902,    67,   105,  1563,  1523,   108,  1273,  1567,   132,  1528,
     3102     110,   110,    96,  1466,  1281,  1282,  1283,    96,   132,  1306,
     3103    1473,   110,   110,  1466,   132,   117,   132,  1546,   110,  1548,
     3104    1473,   112,   110,  1552,  1443,   115,  1555,   132,   104,   112,
     3105    1466,   109,   453,   115,  1563,   456,   132,  1473,  1567,   696,
     3106     115,   154,   110,  1340,    64,   110,   132,  1466,  1542,   110,
     3107     110,  1077,  1329,   571,  1473,   570,  1227,   969,   572,    64,
     3108      64,   718,   573,  1526,  1073,   574,  1495,  1385,  1567,    74,
     3109     146,  1316,  1138,  1526,   986,   680,  1473,    81,   154,   155,
     3110    1345,  1093,   705,   946,     4,     5,     6,     7,     8,     9,
     3111    1526,   748,   513,   453,   515,   471,   116,   518,   723,   453,
     3112     521,   948,   993,   590,   217,   894,   966,  1526,   658,   185,
     3113    1247,   116,   116,    33,   578,   772,   491,   758,    10,    11,
     3114      12,    13,    14,    -1,   200,   578,   748,   203,   204,   578,
     3115    1042,  1043,   208,  1399,    -1,    -1,    -1,    -1,    -1,   159,
     3116      -1,    -1,    -1,    -1,    -1,    -1,  1443,    39,    -1,    69,
     3117    1062,    71,    -1,   229,   159,   159,    -1,   233,   271,   235,
     3118      72,    -1,    74,    75,    76,   278,    -1,    -1,   244,  1466,
     3119      -1,    83,    84,   830,   250,    67,  1473,   834,    -1,   255,
     3120      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,   265,
     3121      -1,    83,    84,    -1,    -1,    -1,    -1,   273,   283,    -1,
     3122     220,    -1,    -1,    -1,    -1,    -1,    26,    27,    28,    -1,
     3123     815,   296,   297,    -1,    -1,   220,   220,   109,    -1,   111,
     3124     825,    -1,    -1,   308,    -1,    -1,    -1,   119,    -1,  1526,
     3125      -1,    -1,    -1,    -1,   347,   840,    -1,    -1,   258,    -1,
     3126      -1,    -1,   262,    10,    11,    12,    13,    14,    -1,    -1,
     3127    1532,   364,    -1,   258,   258,   368,    -1,   262,   262,   344,
     3128      -1,    -1,    -1,    -1,    -1,   341,    -1,   924,   344,    -1,
     3129      -1,   928,    39,   278,   350,    -1,    -1,    97,    -1,    99,
     3130      -1,    -1,    -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,
     3131     947,   367,  1204,  1205,   370,   380,    -1,   718,    -1,    -1,
     3132      67,    -1,    -1,    -1,   680,    72,  1315,    74,    75,    76,
     3133      -1,   968,   969,   970,    -1,  1227,    83,    84,   431,    -1,
     3134      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,   349,
     3135      -1,    83,    84,    -1,    -1,  1247,    72,    -1,    74,    75,
     3136      76,   417,   109,    -1,   349,   349,    -1,    83,    84,    -1,
     3137      -1,    72,   119,    74,    75,    76,   432,   109,    -1,   111,
     3138     180,   437,    83,    84,  1021,    -1,    -1,   119,    -1,   445,
     3139     190,   191,    -1,   109,    -1,   195,    -1,   197,   198,    -1,
     3140    1292,  1293,    -1,   119,    -1,    -1,    -1,    -1,   109,  1301,
     3141      -1,    -1,    -1,    -1,  1306,   471,    -1,    -1,   474,    -1,
     3142      51,    -1,    53,    -1,    -1,    56,    57,    58,    -1,    60,
     3143     430,    -1,    -1,   489,    -1,   491,    -1,    -1,    -1,    -1,
     3144      -1,    -1,    -1,   499,    75,   430,   430,   503,  1340,    10,
     3145      11,    12,    13,    14,  1039,  1040,    87,    88,    -1,   815,
     3146      -1,    -1,   447,    -1,    -1,  1102,  1103,    -1,    -1,   825,
     3147      72,    -1,    74,    75,    76,    -1,   532,   533,    39,    -1,
     3148     480,    83,    84,    -1,   840,  1474,    -1,  1476,    -1,    -1,
     3149      -1,    -1,   557,   558,   559,   480,   480,    72,    -1,    74,
     3150      75,    76,    -1,    -1,   597,    -1,    67,   109,    83,    84,
     3151      -1,    -1,  1097,  1098,    -1,    -1,    -1,   119,    -1,    -1,
     3152      -1,    -1,  1511,   579,  1513,  1417,    -1,   928,    -1,    -1,
     3153      -1,    -1,    -1,    -1,   109,   600,    -1,   630,    -1,    -1,
     3154      -1,   597,   598,    -1,   600,    -1,   947,    -1,   109,    -1,
     3155     111,  1443,    -1,   646,    -1,   611,    -1,    -1,   119,    -1,
     3156      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1556,   661,  1558,
     3157      -1,    -1,    -1,   629,  1466,    -1,    -1,    -1,   634,    -1,
     3158      -1,  1473,  1571,  1572,   640,  1222,    -1,   643,   644,   645,
     3159      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3160       0,    -1,    -1,   603,    -1,    -1,   662,    -1,    -1,    -1,
     3161    1247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   603,   603,
     3162      -1,    -1,    -1,    -1,   680,    -1,    -1,    -1,    -1,    -1,
     3163      -1,   631,    32,    -1,  1526,   691,   636,    -1,    -1,    -1,
     3164     696,   697,    -1,    -1,   700,    -1,   631,   631,    -1,    -1,
     3165      -1,   636,   636,    -1,    -1,    -1,  1241,    -1,    -1,    -1,
     3166      -1,    -1,    -1,    -1,    -1,   758,    -1,    67,    -1,   734,
     3167      -1,    -1,    -1,    -1,    -1,    -1,    -1,   733,    -1,    -1,
     3168     736,    -1,    -1,  1039,  1040,    -1,    -1,    -1,  1273,   745,
     3169      -1,    -1,   748,    -1,    -1,    -1,  1281,  1282,  1283,    -1,
     3170      -1,  1102,    -1,  1340,    -1,    -1,    -1,    -1,    -1,    -1,
     3171      -1,    -1,    -1,   344,   345,   780,   772,   773,    -1,    -1,
     3172      -1,    -1,   778,    -1,   724,   356,   357,    -1,    -1,    26,
     3173      27,    28,    -1,    -1,    -1,    -1,    -1,    -1,   738,   724,
     3174     724,  1097,  1098,    -1,  1329,    -1,    -1,    -1,    -1,    -1,
     3175      -1,    -1,    -1,   738,   738,   155,    -1,    -1,    -1,   815,
     3176      -1,    -1,   827,    -1,    -1,    -1,    -1,    -1,    -1,   825,
     3177      -1,    -1,   828,   758,   830,    -1,    -1,   833,   834,   835,
     3178      -1,    -1,   582,   583,   840,    -1,    -1,    -1,    -1,    -1,
     3179      -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,    -1,    -1,
     3180      97,    -1,    99,    -1,    -1,    -1,  1443,    10,    11,    12,
     3181      13,    14,   612,    -1,    -1,   615,   616,    -1,   618,    -1,
     3182     620,   621,    -1,    -1,    -1,   625,   626,   124,    -1,   229,
     3183      -1,   924,   832,    -1,    -1,    -1,    39,    -1,  1475,    -1,
     3184    1477,    -1,    -1,    -1,    -1,    -1,   902,   832,   832,    -1,
     3185     250,    -1,    -1,    -1,    -1,   255,   188,    -1,    -1,    -1,
     3186      -1,    -1,    -1,   195,    67,    -1,    -1,    -1,   924,    72,
     3187      -1,    74,    75,    76,    -1,  1512,    -1,  1514,    -1,    -1,
     3188      83,    84,    -1,   180,    -1,  1241,    -1,    -1,    -1,    -1,
     3189      -1,   188,    -1,   190,   191,    -1,    -1,    -1,   195,    -1,
     3190     197,   198,    -1,    -1,   960,  1542,   109,    -1,   111,   709,
     3191     710,    -1,   968,   969,    -1,   715,   119,  1273,    -1,    10,
     3192      11,    12,    13,    14,    -1,  1281,  1282,  1283,    -1,    -1,
     3193     986,    -1,    -1,    -1,    -1,   267,    -1,    -1,    -1,    10,
     3194      11,    12,    13,    14,    -1,    -1,    -1,    -1,    39,    -1,
     3195     350,    -1,    -1,    -1,    -1,    -1,  1021,    -1,    -1,    -1,
     3196      -1,    -1,    -1,    -1,    -1,  1021,    -1,    -1,    39,    -1,
     3197     267,    -1,    -1,  1329,    -1,    -1,    67,    -1,  1034,    -1,
     3198      -1,    72,    -1,  1039,  1040,    76,  1042,  1043,    -1,    -1,
     3199      -1,   323,    83,    84,    -1,    -1,    67,  1062,    -1,   331,
     3200      -1,    72,   334,    74,    75,    76,  1062,    -1,    -1,    -1,
     3201      -1,    -1,    83,    84,    -1,    -1,    -1,   417,   109,    -1,
     3202      -1,     0,    -1,    -1,  1024,    -1,    -1,    -1,   119,    -1,
     3203      -1,    -1,   432,    -1,    -1,    -1,    -1,   437,   109,  1024,
     3204    1024,  1097,  1098,    -1,    -1,   445,    -1,  1103,   119,    -1,
     3205      -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,    -1,    -1,
     3206      -1,    -1,    -1,    -1,    -1,   397,    -1,    -1,    -1,   401,
     3207      -1,   471,    -1,    -1,  1475,    -1,  1477,    -1,    97,    98,
     3208      99,   100,   101,   102,   103,   104,   105,   106,    67,   489,
     3209      -1,   491,    -1,    -1,   725,    -1,   727,    -1,    -1,    -1,
     3210      -1,    -1,    -1,   734,   735,    -1,  1162,    -1,   739,    -1,
     3211      -1,  1512,   131,  1514,  1179,    10,    11,    12,    13,    14,
     3212     751,    -1,    -1,    -1,    -1,   756,    -1,    -1,    -1,  1222,
     3213      -1,    -1,    -1,   533,    -1,    -1,    -1,    -1,    -1,    -1,
     3214      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,  1205,
     3215      -1,   782,    -1,    -1,   486,    -1,    -1,    -1,    -1,    -1,
     3216      -1,    -1,    -1,    -1,    -1,    -1,  1222,    -1,    -1,    -1,
     3217      -1,  1227,    67,    -1,    -1,    -1,   155,    72,    -1,    -1,
     3218      -1,    76,    -1,    -1,    -1,  1241,    -1,  1243,    83,    84,
     3219      -1,  1247,    -1,    -1,    -1,    -1,   827,    -1,   598,    -1,
     3220      -1,    -1,    -1,    -1,  1204,    -1,    -1,    -1,    -1,    -1,
     3221      -1,    -1,    -1,    -1,   109,    -1,    -1,  1273,    -1,  1204,
     3222    1204,    -1,    -1,    -1,   119,  1281,  1282,  1283,    -1,    -1,
     3223      -1,    -1,    -1,    -1,    -1,    -1,  1292,  1293,    -1,    -1,
     3224      -1,    -1,    -1,   643,   644,   645,   578,   579,    -1,    -1,
     3225    1306,    -1,    -1,   884,   885,   886,   887,    -1,   889,    -1,
     3226      -1,    -1,   662,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3227      -1,   250,    -1,  1329,   905,    -1,   255,    -1,    -1,    -1,
     3228     680,    -1,    -1,    -1,  1340,   582,   583,    -1,   919,    -1,
     3229      -1,   691,    -1,    -1,    -1,    -1,    -1,   697,    -1,  1099,
     3230      -1,  1301,    -1,    -1,    -1,    -1,  1399,    -1,    -1,    -1,
     3231      -1,    -1,    -1,    -1,    -1,   612,  1301,  1301,   615,   616,
     3232      -1,   618,    -1,   620,   621,    -1,    -1,   958,   625,   626,
     3233      -1,    -1,    -1,   733,    -1,   667,   736,    -1,    -1,   671,
     3234      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3235      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
     3236      -1,  1417,    -1,    -1,    -1,    -1,    -1,   998,    -1,    39,
     3237      -1,   350,   704,   773,  1005,    -1,    -1,    -1,    -1,  1010,
     3238      -1,    -1,    -1,    -1,  1015,    -1,  1017,  1443,    -1,    -1,
     3239    1021,  1022,  1023,    -1,    -1,  1026,    -1,    67,    -1,    -1,
     3240      -1,    -1,    -1,    -1,  1035,    -1,    -1,   704,    78,    -1,
     3241    1466,    -1,   709,   710,    -1,   815,    -1,  1473,   715,    -1,
     3242      -1,    -1,  1053,  1054,  1224,   825,    -1,    -1,   828,    -1,
     3243      -1,    -1,    -1,   833,    -1,   835,    -1,    -1,   417,    -1,
     3244     840,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1080,
     3245      -1,    -1,  1083,   432,    -1,    -1,    -1,    -1,   437,    -1,
     3246      -1,    -1,    -1,    -1,    -1,    -1,   445,    -1,    -1,    -1,
     3247    1526,    -1,    -1,    -1,    -1,    -1,    -1,  1533,    -1,    -1,
     3248      -1,    -1,    -1,    -1,    -1,    -1,    -1,   819,    -1,    -1,
     3249      -1,  1122,   471,    -1,    -1,    -1,    -1,  1128,  1129,    -1,
     3250      -1,    -1,   902,    -1,    -1,    -1,    -1,    -1,    -1,  1140,
     3251     489,    -1,   491,     0,  1145,    -1,    -1,  1148,    -1,  1150,
     3252      -1,    -1,  1153,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3253      -1,    -1,    -1,    -1,    -1,  1166,    -1,    -1,    -1,    -1,
     3254      -1,    -1,    -1,    -1,    -1,    32,    37,    38,  1179,    40,
     3255    1181,  1182,  1183,  1184,   533,    -1,    -1,    -1,    -1,    -1,
     3256      -1,    -1,    -1,    -1,    -1,    -1,  1197,    -1,  1199,    -1,
     3257      -1,    -1,  1203,    -1,    -1,    66,    -1,    -1,    -1,    -1,
     3258      67,    72,    -1,    74,    75,    76,   986,    -1,    79,    80,
     3259      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3260     932,  1232,  1233,    94,    -1,    -1,    -1,    -1,    -1,    -1,
     3261      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,   598,
     3262     111,    -1,   113,   114,    -1,    -1,    -1,   118,   119,   120,
     3263     121,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,  1039,
     3264    1040,    -1,  1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,
     3265      -1,    -1,    -1,  1284,  1285,    -1,    -1,    -1,    -1,    -1,
     3266      -1,    -1,  1062,  1294,   643,   644,   645,    -1,   155,    -1,
     3267      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1011,
     3268      -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,    -1,    -1,
     3269      -1,    -1,    -1,    -1,    -1,  1027,    -1,  1097,  1098,    -1,
     3270      -1,   680,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3271      -1,    -1,   691,    -1,    -1,  1346,    -1,    -1,   697,    -1,
     3272      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1358,    -1,  1360,
     3273    1361,  1362,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
     3274      -1,  1372,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3275    1381,    -1,    -1,    -1,   733,    -1,    -1,   736,    -1,    -1,
     3276      -1,    66,  1162,   250,    -1,    -1,  1397,    72,   255,    -1,
     3277      -1,    76,  1104,    -1,    79,    80,    81,    82,    83,    84,
     3278      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,     0,    94,
     3279      -1,    -1,    -1,    -1,   773,    -1,    -1,    -1,    -1,    -1,
     3280      -1,    -1,  1099,    -1,   109,  1205,   111,    -1,    -1,   114,
     3281      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
     3282      32,    -1,  1453,  1454,    -1,    -1,    -1,  1227,    -1,    -1,
     3283      -1,    -1,    -1,    -1,    -1,  1466,   815,    -1,    -1,    -1,
     3284      -1,  1241,  1473,  1243,    -1,    -1,   825,    -1,    -1,   828,
     3285      -1,    -1,    -1,    -1,   833,    67,   835,    -1,    -1,    -1,
     3286      -1,   840,    -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,
     3287      -1,    -1,    -1,  1273,    -1,  1506,    -1,    -1,    -1,  1510,
     3288      -1,  1281,  1282,  1283,    -1,    -1,    -1,    -1,    -1,    -1,
     3289      -1,    -1,  1292,  1293,    -1,    -1,    -1,    -1,    -1,    -1,
     3290      -1,    -1,    -1,    -1,    -1,    -1,  1306,    -1,  1539,    -1,
     3291    1541,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3292      -1,    -1,    -1,   902,    -1,    -1,    -1,  1224,    -1,  1329,
     3293     417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1569,  1570,
     3294      -1,    -1,    -1,   155,    -1,   432,  1577,  1578,    -1,    -1,
     3295     437,    -1,    -1,    -1,    -1,    -1,     0,    -1,   445,     3,
     3296       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     3297      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3298      24,    25,    26,    27,   471,    -1,    30,    31,    32,    33,
     3299      -1,    -1,    36,    -1,    -1,    39,    40,    -1,    -1,    -1,
     3300      -1,    -1,   489,    -1,   491,    -1,    -1,   986,    -1,    -1,
     3301      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1417,    -1,    -1,
     3302      64,    -1,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
     3303      74,    75,    76,    -1,    -1,    -1,    -1,    -1,   250,    83,
     3304      84,    -1,    -1,   255,    -1,    -1,   533,    -1,     7,    -1,
     3305      -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
     3306    1039,  1040,    -1,  1042,  1043,   109,  1466,   111,    -1,    -1,
     3307      -1,    -1,    -1,  1473,    -1,   119,    -1,    -1,    37,    38,
     3308      39,    40,    -1,  1062,    -1,    10,    11,    12,    13,    14,
     3309      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3310      25,    26,    27,    28,    -1,    -1,    -1,    66,    67,    -1,
     3311      -1,   598,    -1,    72,    39,    -1,    -1,    76,  1097,  1098,
     3312      79,    80,    81,    82,    83,    84,  1526,    86,    87,    -1,
     3313      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,   350,    -1,
     3314      -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3315     109,    -1,   111,    78,    -1,    -1,   643,   644,   645,   118,
     3316     119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,    -1,
     3317      -1,    -1,    -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,
     3318      -1,    -1,    -1,  1162,    -1,    -1,    -1,    -1,    -1,    -1,
     3319      -1,    -1,    -1,   680,    -1,    -1,    -1,    -1,    -1,    -1,
     3320      -1,    -1,    -1,    -1,   691,   417,    -1,    -1,    -1,    45,
     3321     697,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3322     432,    -1,    -1,    -1,    -1,   437,  1205,    -1,    64,    -1,
     3323      -1,    -1,    -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,
     3324      -1,    -1,    -1,    -1,    -1,    -1,   733,    -1,  1227,   736,
     3325      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   471,
     3326      -1,    -1,  1241,    -1,  1243,    -1,    -1,    -1,    -1,    -1,
     3327      -1,    -1,    -1,    -1,   110,    -1,    -1,   489,    -1,   491,
     3328     116,    -1,    -1,    -1,    -1,    -1,   773,    -1,    -1,    -1,
     3329      -1,    -1,    -1,    -1,  1273,    -1,    -1,    -1,    -1,    -1,
     3330      -1,    -1,  1281,  1282,  1283,    -1,    -1,    -1,    -1,   145,
     3331      -1,    -1,    -1,  1292,  1293,    -1,    -1,    -1,    -1,   155,
     3332      -1,   533,    -1,   159,    -1,    -1,    -1,  1306,   815,    -1,
     3333      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   825,    -1,
     3334      -1,   828,    -1,    -1,    -1,    -1,   833,    -1,   835,    -1,
     3335    1329,    -1,    -1,   840,    10,    11,    12,    13,    14,    15,
     3336      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3337      26,    27,   208,    -1,    30,    31,    32,    -1,    -1,    -1,
     3338      -1,    -1,    -1,    39,   220,    -1,   598,    -1,    -1,    -1,
     3339      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3340      -1,    -1,   238,   239,    -1,    -1,    -1,    -1,    -1,    -1,
     3341      -1,    67,    -1,    -1,    -1,   902,    -1,    -1,    74,    75,
     3342      -1,    -1,    -1,    -1,    -1,    -1,   262,    -1,    -1,    -1,
     3343      -1,   643,   644,   645,   270,    -1,    -1,    -1,  1417,    -1,
     3344      -1,    -1,    -1,    -1,   281,    -1,   283,   284,    -1,    -1,
     3345     662,    -1,    -1,    -1,   291,   292,    -1,    -1,   294,   296,
     3346     297,   297,    -1,   119,    -1,    -1,    -1,    -1,   680,    -1,
     3347      -1,   308,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   691,
     3348      -1,    -1,    -1,    -1,    -1,   697,    -1,  1466,    37,    38,
     3349      -1,    40,    -1,    -1,  1473,    -1,    -1,    -1,    -1,   986,
     3350      -1,    -1,    -1,    -1,    -1,    -1,    -1,   344,   344,    -1,
     3351      -1,    -1,    -1,   349,    -1,    -1,    -1,    66,    -1,    -1,
     3352      -1,   733,    -1,    72,   736,    -1,    -1,    76,    -1,    -1,
     3353      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
     3354      -1,    -1,    -1,   380,    -1,    94,    -1,  1526,    -1,    -1,
     3355      -1,    -1,  1039,  1040,    -1,  1042,  1043,    -1,    -1,    -1,
     3356     109,   773,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
     3357     119,   120,   121,   122,   123,  1062,    -1,    -1,    -1,    -1,
     3358      -1,    -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,   425,
     3359     426,    -1,    -1,    -1,    -1,    74,   432,    76,    -1,    78,
     3360      -1,    -1,    -1,   815,    -1,    -1,    85,    -1,    -1,    -1,
     3361    1097,  1098,    -1,   825,    -1,    -1,   828,   453,    -1,    -1,
     3362     456,   833,    -1,   835,    -1,    -1,    -1,    -1,   840,    -1,
     3363      -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,   118,
     3364     119,   120,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3365      -1,    -1,    -1,   489,    -1,    -1,    -1,    -1,    -1,    -1,
     3366      -1,    -1,    -1,    -1,    -1,   501,    -1,    -1,    -1,    -1,
     3367      -1,    -1,    -1,    -1,    -1,  1162,    -1,   513,    -1,   515,
     3368     159,    -1,   518,    -1,   520,   521,    -1,    -1,    -1,    -1,
     3369     902,    -1,    -1,    -1,    -1,    -1,    -1,   533,    -1,    -1,
     3370      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3371      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1205,    -1,
     3372     557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
     3373     567,   568,   569,   570,   571,   572,   573,   574,    -1,    -1,
     3374    1227,   220,    -1,   222,   223,   224,    -1,    -1,    -1,    -1,
     3375     586,    -1,    -1,    -1,  1241,    -1,  1243,    -1,    -1,    -1,
     3376      -1,    -1,   598,   600,   600,    -1,    -1,   603,    -1,    -1,
     3377      -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,    -1,   258,
     3378      -1,    -1,    -1,   262,    -1,    -1,  1273,    -1,    -1,    -1,
     3379      -1,    -1,    -1,   629,  1281,  1282,  1283,    -1,   634,   278,
     3380      -1,    -1,    -1,    -1,    -1,  1292,  1293,   643,   644,   645,
     3381      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1306,
     3382      -1,    -1,    -1,    -1,    -1,    -1,   662,  1039,  1040,    -1,
     3383    1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3384      -1,    -1,  1329,    -1,    -1,    -1,    -1,    -1,    -1,   328,
     3385    1062,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3386      -1,   697,   699,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3387     349,    -1,    -1,    -1,    -1,   354,   355,    44,    -1,    -1,
     3388      -1,    -1,   718,   362,   721,  1097,  1098,    -1,    -1,    -1,
     3389      -1,    -1,    -1,    -1,    -1,    -1,    -1,   734,    -1,    -1,
     3390     736,    -1,   738,    10,    11,    12,    13,    14,    15,    16,
     3391      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3392      27,    -1,    -1,    90,    -1,    -1,   405,    -1,    -1,    -1,
     3393    1417,    -1,    39,   100,    -1,    -1,    -1,   773,    -1,    -1,
     3394      -1,    -1,    -1,   780,   423,    -1,    -1,    -1,    -1,   428,
     3395    1162,   430,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3396      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   447,    -1,
     3397      -1,   450,   451,    -1,    -1,   812,    -1,    -1,    -1,  1466,
     3398      -1,    -1,    -1,    -1,    -1,    -1,  1473,   466,    -1,   156,
     3399     827,    -1,   828,  1205,    -1,    -1,   832,    -1,    -1,   835,
     3400      -1,   480,    -1,   170,    -1,    -1,    -1,    -1,   487,    -1,
     3401      -1,    -1,    -1,    -1,    -1,  1227,    -1,    -1,    -1,    -1,
     3402      -1,    -1,    -1,    -1,    -1,    -1,   193,    -1,    -1,  1241,
     3403      -1,  1243,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1526,
     3404     207,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   216,
     3405      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   226,
     3406      -1,  1273,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1281,
     3407    1282,  1283,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3408    1292,  1293,    -1,    -1,   251,    -1,    -1,    -1,    -1,   256,
     3409      -1,    -1,   928,    -1,  1306,    -1,    -1,    -1,    -1,    -1,
     3410      -1,    -1,   269,    -1,    -1,    -1,    -1,    -1,   275,    -1,
     3411     277,   947,    -1,    -1,    -1,    -1,    -1,  1329,    -1,    -1,
     3412      -1,    -1,    -1,    -1,   603,    -1,    -1,    -1,   295,    -1,
     3413      -1,    -1,    -1,    -1,   970,    -1,    -1,    -1,    -1,    -1,
     3414      -1,   978,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3415     986,    -1,   631,    -1,    -1,    -1,    -1,   636,    -1,    -1,
     3416      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3417      -1,   338,  1009,    -1,    -1,    -1,   343,    -1,    -1,    -1,
     3418      -1,    -1,    -1,    -1,  1021,  1021,    -1,    -1,    -1,    -1,
     3419      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3420      -1,    -1,    -1,    -1,   371,  1417,  1042,  1043,   375,   376,
     3421      -1,   378,    -1,    -1,    -1,    -1,    -1,    -1,   385,   386,
     3422      -1,   388,   389,    -1,   391,  1062,   393,    -1,    -1,    -1,
     3423      -1,    -1,     7,    -1,    -1,    10,    11,    12,    13,    14,
     3424      -1,    -1,    -1,   410,    -1,   724,    -1,    -1,    -1,    -1,
     3425      -1,   418,    -1,    -1,  1466,    -1,    -1,    -1,    -1,   738,
     3426      -1,  1473,    37,    38,    39,    40,  1102,    -1,    -1,    -1,
     3427      -1,    -1,    -1,    -1,    -1,    -1,   443,    -1,    -1,   758,
     3428      -1,    -1,    -1,    -1,    -1,    -1,    -1,   454,    -1,    -1,
     3429      -1,    66,    67,    -1,    -1,    -1,    -1,    72,  1135,    -1,
     3430      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
     3431     477,    86,    87,    -1,  1526,    -1,   483,    -1,    -1,    94,
     3432      -1,   488,    -1,    -1,    -1,    -1,  1162,    -1,    -1,    -1,
    31433433      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
    3144       67,    -1,   680,    -1,   119,    72,    -1,    74,    75,    76,
    3145       -1,    -1,    -1,   691,    -1,    -1,    83,    84,   696,   697,
    3146       -1,    -1,   700,  1338,    -1,    -1,    -1,    -1,    -1,  1327,
    3147       -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
    3148       -1,    -1,   109,    -1,    -1,    -1,  1299,    -1,    -1,    -1,
    3149       -1,    -1,   119,   417,    -1,   733,    -1,    -1,   736,    -1,
    3150       -1,    39,    -1,   603,    -1,    -1,    -1,   745,   432,    -1,
    3151      748,    -1,    -1,   437,    -1,    -1,    -1,    -1,   725,    -1,
    3152      727,   445,    -1,    -1,    -1,    -1,    -1,   734,   735,    67,
    3153       -1,   631,   739,    -1,   772,   773,   636,    -1,    -1,    -1,
    3154      778,    -1,    -1,    -1,   751,    -1,    -1,   471,    -1,   756,
    3155       97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
    3156       -1,    -1,    -1,    -1,    -1,   489,  1441,   491,    -1,    -1,
    3157       -1,   109,    -1,   111,    -1,   782,    -1,   815,    -1,    -1,
    3158       -1,   119,    -1,    -1,   131,   924,    -1,   825,    -1,    -1,
    3159      828,    -1,   830,    -1,    -1,   833,   834,   835,  1473,    -1,
    3160     1475,    -1,   840,    -1,    -1,    -1,    -1,    -1,    -1,   533,
    3161      926,    -1,   850,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3162      827,    -1,    -1,    -1,   724,    -1,    -1,    -1,    -1,    -1,
    3163       -1,    -1,    -1,    -1,    -1,  1510,    -1,  1512,   738,    -1,
    3164       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3165       20,    21,    22,    23,    24,    25,    26,    27,   758,    -1,
    3166       30,    31,    32,    -1,   902,  1540,    -1,    -1,    -1,    39,
    3167       -1,    -1,    -1,    -1,   598,    -1,    -1,   884,   885,   886,
    3168      887,    -1,   889,    -1,    -1,    -1,   924,    -1,    10,    11,
    3169       12,    13,    14,    -1,    -1,    -1,     0,    67,   905,    -1,
    3170       -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
    3171       -1,    -1,   919,    83,    84,    -1,    -1,    39,    -1,   643,
    3172      644,   645,   960,    -1,    -1,    -1,    -1,    -1,    32,    -1,
    3173      968,   969,   832,    -1,    -1,    -1,    -1,    -1,   662,   109,
    3174       -1,   111,   582,   583,    -1,    67,    -1,    -1,   986,   119,
    3175       72,   958,    -1,    -1,    76,    -1,   680,  1073,    -1,    -1,
    3176       -1,    83,    84,    67,    -1,    -1,    -1,   691,    -1,    -1,
    3177       -1,    -1,   612,   697,    -1,   615,   616,    -1,   618,    -1,
    3178      620,   621,    -1,  1021,    -1,   625,   626,   109,    -1,    -1,
    3179       -1,   998,    -1,    -1,    -1,    -1,  1034,   119,  1005,    -1,
    3180       -1,  1039,  1040,  1010,  1042,  1043,    -1,    -1,  1015,   733,
    3181     1017,    -1,   736,    -1,  1021,  1022,  1023,    -1,    -1,  1026,
    3182       -1,    -1,    -1,    -1,  1062,    -1,    -1,    -1,  1035,    -1,
    3183       -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
    3184       -1,    -1,    -1,    -1,    -1,    -1,  1053,  1054,    -1,   773,
    3185       -1,   155,    -1,    -1,    -1,     0,    -1,    -1,    -1,  1097,
    3186     1098,    39,    -1,    -1,   704,  1103,    -1,    -1,    -1,   709,
    3187      710,    -1,    -1,  1080,    -1,   715,  1083,    -1,    -1,    -1,
    3188       -1,    -1,  1221,    -1,    -1,    -1,    -1,    32,    -1,    67,
    3189       -1,   815,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
    3190       -1,   825,    -1,    -1,   828,    83,    84,    -1,    -1,   833,
    3191       -1,   835,    -1,    -1,  1121,    -1,   840,    -1,    -1,    -1,
    3192     1127,  1128,    67,  1161,  1024,    -1,    -1,    -1,    -1,    -1,
    3193       -1,   109,  1139,    -1,    -1,    -1,    -1,  1144,    -1,    -1,
    3194     1147,   119,  1149,    -1,    -1,  1152,   250,    -1,    -1,    -1,
    3195       -1,   255,   188,    -1,    -1,    -1,    -1,    -1,  1165,   195,
    3196       -1,    -1,    -1,    -1,    -1,    -1,  1204,    -1,    -1,    -1,
    3197       -1,  1178,     0,  1180,  1181,  1182,  1183,    -1,   902,    -1,
    3198       -1,    -1,    -1,  1221,    -1,    -1,    -1,    -1,  1226,  1196,
    3199       -1,  1198,    -1,    -1,    -1,  1202,    -1,  1313,    -1,    -1,
    3200       -1,  1239,    -1,  1241,    32,     0,     1,  1245,    -1,    -1,
    3201      155,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3202       -1,    -1,    -1,    -1,  1231,  1232,    -1,    -1,    -1,    -1,
    3203       -1,   267,    -1,  1271,    -1,    -1,    -1,    32,    -1,    67,
    3204       -1,  1279,  1280,  1281,    -1,    -1,   350,    -1,    -1,    -1,
    3205       -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,  1397,    -1,
    3206       -1,    -1,   986,    -1,    -1,    -1,  1304,    -1,    -1,    64,
    3207       -1,    -1,    67,    -1,    -1,  1282,  1283,    -1,    -1,    -1,
    3208       -1,    -1,    -1,    -1,    -1,  1292,    -1,   323,    -1,  1327,
    3209       -1,    -1,    -1,    -1,    -1,   331,    -1,    -1,   334,    -1,
    3210     1338,    -1,    -1,  1203,    -1,   250,    -1,    -1,    -1,    -1,
    3211      255,    -1,    -1,   417,    -1,  1039,  1040,    -1,  1042,  1043,
    3212       -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,   432,    -1,
    3213       -1,    -1,    -1,   437,    -1,    -1,    -1,  1344,  1062,    -1,
    3214       -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1356,
    3215       -1,  1358,  1359,  1360,    -1,    -1,  1472,    -1,  1474,    -1,
    3216      155,   397,    -1,  1370,    -1,   401,    -1,   471,    -1,    -1,
    3217       -1,    -1,  1379,  1097,  1098,    -1,    -1,  1415,    -1,    -1,
    3218       -1,    -1,    -1,    -1,    -1,   489,    -1,   491,  1395,    -1,
    3219       -1,    -1,    -1,  1509,    -1,  1511,    -1,    -1,    -1,  1299,
    3220       -1,    -1,    -1,  1441,    -1,   350,    -1,    -1,    -1,    -1,
     3434     819,    -1,  1179,   118,   119,   120,   121,   122,   123,    -1,
     3435      -1,    -1,    -1,   832,    -1,    -1,  1193,  1194,   525,    -1,
     3436      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1204,    -1,
     3437      -1,    -1,   851,    -1,   541,    -1,    -1,    -1,    -1,    -1,
     3438      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
     3439      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3440      22,    23,    24,    25,    26,    27,    -1,  1243,    30,    31,
     3441      32,   578,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
     3442     587,    -1,    -1,    -1,    -1,    -1,    -1,   594,    -1,    -1,
     3443      -1,    -1,   599,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3444      -1,    -1,    -1,   610,    -1,    67,    -1,    69,    -1,    71,
     3445      72,    -1,    74,    75,    76,    -1,  1292,  1293,    -1,   938,
     3446      -1,    83,    84,    -1,    -1,  1301,    -1,    -1,    -1,    -1,
    32213447      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3222       -1,    -1,   250,    -1,    -1,   220,  1464,   255,    -1,   533,
    3223       -1,    -1,    -1,  1471,    -1,    -1,    -1,  1161,  1554,    -1,
    3224     1556,    -1,    -1,    -1,  1451,  1452,    -1,    -1,    -1,    -1,
    3225      486,    -1,    -1,  1569,  1570,   250,    -1,  1464,    -1,  1099,
    3226       -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,    -1,    -1,
    3227       -1,    -1,   417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3228     1204,    -1,    -1,    -1,    -1,    -1,  1524,   432,    -1,    -1,
    3229       -1,    -1,   437,  1531,   598,    -1,    -1,  1504,    -1,    -1,
    3230      445,  1508,  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3231       -1,    -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,
    3232       -1,    -1,   350,    -1,    -1,    -1,   471,    -1,    -1,    -1,
    3233     1537,    -1,  1539,    -1,    -1,    -1,    -1,    -1,    -1,   643,
    3234      644,   645,   578,   579,   489,    -1,   491,  1271,    -1,    -1,
    3235       -1,    -1,    -1,    -1,    -1,  1279,  1280,  1281,   662,    -1,
    3236     1567,  1568,    -1,    -1,    -1,    -1,  1290,  1291,  1575,  1576,
    3237       -1,    -1,    -1,    -1,    -1,    -1,   680,    -1,    -1,    -1,
    3238     1304,    -1,    -1,  1223,    -1,    -1,    -1,   691,   533,   417,
    3239       -1,    -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,
    3240       -1,    -1,    -1,  1327,   432,    -1,    -1,    -1,    -1,   437,
    3241       -1,    -1,    -1,    -1,    -1,    -1,    -1,   445,    -1,    -1,
    3242       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   733,
    3243       -1,   667,   736,    -1,    -1,   671,    -1,   432,    -1,    -1,
    3244       -1,    -1,    -1,   471,    -1,    -1,    -1,    -1,    -1,    -1,
    3245       -1,    -1,    -1,   598,    -1,    -1,    -1,    -1,    -1,    -1,
    3246       -1,   489,    -1,   491,    -1,    -1,    -1,    -1,   704,   773,
    3247       -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
    3248       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3249       27,  1415,    -1,    -1,    -1,    -1,   491,    -1,   643,   644,
    3250      645,    -1,    39,    -1,    -1,   533,    -1,    -1,    -1,    -1,
    3251       -1,   815,    -1,    -1,    -1,    -1,    -1,   662,    -1,    -1,
    3252       -1,   825,    -1,    -1,   828,    -1,    -1,    -1,    -1,   833,
    3253       67,   835,    -1,    -1,    -1,   680,   840,    -1,   533,    -1,
    3254     1464,    -1,    -1,    -1,    -1,    -1,   691,  1471,    -1,    -1,
    3255       -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3448      -1,    -1,    -1,    -1,   651,   964,    -1,   109,    -1,   111,
     3449      -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,
    32563450      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3257      598,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3258       -1,    -1,    -1,   819,    -1,    -1,    -1,    -1,   733,    -1,
    3259       -1,   736,    -1,    -1,    -1,    26,    27,    28,   902,    -1,
    3260     1524,    -1,    -1,   598,    -1,    -1,    -1,    -1,    -1,    -1,
    3261       -1,    -1,    -1,    -1,    -1,   643,   644,   645,    -1,    -1,
    3262       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   773,    -1,
    3263       -1,    -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,    -1,
    3264       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   643,   644,
    3265      645,    -1,   680,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3266       -1,    -1,    -1,   691,    -1,    -1,    97,   662,    99,   697,
    3267      815,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3268      825,    -1,   986,   828,    -1,    -1,    -1,    -1,   833,    -1,
    3269      835,    -1,    -1,    -1,    -1,   840,   932,    -1,    -1,    -1,
    3270       -1,    -1,    -1,    -1,    -1,   733,    -1,    -1,   736,     4,
    3271        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3451      -1,    -1,    -1,   992,    -1,    -1,    -1,    -1,    -1,    -1,
     3452     687,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
     3453      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3454      24,    25,    26,    27,    28,  1024,    30,    31,    32,    -1,
     3455      -1,    -1,    -1,    -1,    -1,    39,  1035,    -1,    -1,    -1,
     3456      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1404,    -1,    -1,
     3457      -1,    -1,    -1,    -1,    -1,   742,    -1,    -1,    -1,    -1,
     3458      -1,  1417,    -1,    67,  1421,   752,   753,    -1,    -1,    -1,
     3459      74,    75,    -1,    -1,    78,    -1,    -1,    -1,    -1,   766,
     3460      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3461      -1,    -1,    -1,    -1,    -1,    -1,   783,    -1,   785,    -1,
     3462      -1,    -1,   789,    -1,    -1,   109,    -1,   111,    -1,    -1,
     3463      -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,  1117,  1475,
     3464      -1,  1477,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3465      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1494,  1495,    -1,
     3466      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3467      37,    38,    -1,    40,    -1,    -1,  1512,    -1,  1514,    -1,
     3468      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   855,    -1,
     3469      -1,    -1,    -1,    -1,    -1,   862,    -1,    -1,    -1,    66,
     3470      -1,    -1,    -1,    -1,    -1,    72,  1542,    -1,   875,    76,
     3471     877,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
     3472      87,    -1,    -1,    -1,   891,  1204,    -1,    94,    -1,    -1,
     3473      -1,   898,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3474      -1,    -1,   109,   910,   111,    -1,   913,    -1,    -1,   116,
     3475      -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
     3476      -1,    -1,    -1,    -1,   931,    -1,    -1,    -1,    -1,    -1,
     3477      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3478      -1,    -1,    -1,    -1,   154,   155,    -1,    -1,    -1,    -1,
     3479      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3480      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3481      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   188,    -1,
     3482      -1,    -1,  1301,    -1,    -1,   195,    -1,     3,     4,     5,
     3483       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     3484      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3485      26,    27,    -1,  1020,    30,    31,    32,    33,    -1,    -1,
     3486      36,    -1,    -1,    39,    40,    10,    11,    12,    13,    14,
    32723487      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3273       25,    26,    27,    -1,    -1,  1039,  1040,    -1,  1042,  1043,
    3274       -1,   736,    -1,    -1,    39,   773,    -1,    -1,    -1,   180,
    3275       -1,    -1,    -1,    -1,    -1,    -1,    -1,   902,  1062,   190,
    3276      191,    -1,    -1,    -1,   195,    -1,   197,   198,    -1,    -1,
    3277       -1,    -1,    67,    -1,    69,  1011,    71,    72,    -1,    74,
    3278       75,    76,    -1,    -1,    -1,    -1,    -1,   815,    83,    84,
    3279       -1,  1027,    -1,  1097,  1098,    -1,    -1,   825,    -1,    -1,
    3280      828,    -1,    -1,    -1,    -1,   833,    -1,   835,    -1,    -1,
    3281       -1,    -1,   840,    -1,    10,    11,    12,    13,    14,    15,
    3282       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3283       26,    27,    28,   828,    30,    31,    32,    -1,    -1,    -1,
    3284      835,   986,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
    3285       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1161,    -1,    -1,
    3286       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1104,    -1,
    3287       -1,    67,    -1,    -1,   902,    -1,    72,    -1,    74,    75,
    3288       76,    -1,    78,    -1,    -1,    -1,    -1,    83,    84,    -1,
    3289       -1,    -1,    -1,    -1,  1039,  1040,    -1,  1042,  1043,    -1,
    3290     1204,    -1,    -1,    -1,    -1,    -1,    -1,   902,    -1,    -1,
    3291       -1,    -1,    -1,   109,    -1,   111,    -1,  1062,    -1,    -1,
    3292       -1,    -1,  1226,   119,    -1,    45,    -1,    -1,    -1,    -1,
    3293       -1,    -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,
    3294       -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,
    3295       -1,    -1,  1097,  1098,    -1,    -1,    -1,    -1,   986,    -1,
    3296       37,    38,    -1,    40,    -1,    -1,    -1,  1271,    -1,    -1,
    3297       -1,    -1,    -1,    -1,   969,  1279,  1280,  1281,    -1,    -1,
    3298       -1,    -1,    -1,    -1,    -1,    -1,  1290,  1291,    -1,    66,
    3299      110,   986,    -1,    -1,    -1,    72,   116,    -1,    -1,    76,
    3300     1304,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
    3301       87,  1039,  1040,    -1,  1042,  1043,  1161,    94,    -1,    -1,
    3302       -1,    -1,    -1,  1327,    -1,   145,    -1,    -1,    -1,    -1,
    3303       -1,    -1,   109,    -1,  1062,   155,    -1,    -1,    -1,   159,
    3304       -1,   118,   119,   120,   121,   122,   123,  1042,  1043,    -1,
    3305       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1204,
    3306       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1062,    -1,  1097,
    3307     1098,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3308       -1,  1226,    -1,    -1,    -1,    -1,    -1,    -1,   208,    -1,
    3309       -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,    -1,
    3310      220,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3311       -1,  1415,    -1,    -1,    -1,    -1,    -1,    -1,   238,   239,
    3312       -1,    -1,    -1,    -1,    -1,    -1,  1271,    -1,    -1,    -1,
    3313       -1,    -1,    -1,  1161,  1279,  1280,  1281,    -1,    -1,    -1,
    3314       -1,    -1,   262,    -1,    -1,  1290,  1291,    -1,    -1,    -1,
    3315      270,   582,   583,    -1,    -1,    -1,    -1,    -1,    -1,  1304,
    3316     1464,    -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,    -1,
    3317       -1,    -1,    -1,    -1,   294,    -1,  1204,   297,    -1,    -1,
    3318       -1,   612,  1327,    -1,   615,   616,    -1,   618,    -1,   620,
    3319      621,    -1,    -1,    -1,   625,   626,    -1,    -1,  1226,    -1,
    3320       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1203,  1204,
    3321       -1,  1239,    -1,  1241,    -1,    -1,    -1,    -1,    -1,    -1,
    3322     1524,    -1,    -1,    -1,   344,    -1,    -1,    -1,    -1,   349,
    3323       -1,  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3324       -1,    -1,    -1,  1271,    -1,    -1,    64,    -1,    -1,    -1,
    3325     1245,  1279,  1280,  1281,    -1,    -1,    74,    -1,    76,    -1,
    3326       78,    -1,  1290,  1291,    -1,    -1,    -1,    85,    -1,    -1,
    3327     1415,    -1,    -1,    -1,    -1,    -1,  1304,    -1,   709,   710,
    3328       -1,    -1,    -1,    -1,   715,    -1,    -1,    -1,    -1,    -1,
    3329       -1,    -1,    -1,    -1,    -1,  1290,  1291,    -1,   116,  1327,
    3330      118,   119,   120,    -1,  1299,   425,   426,    -1,    -1,  1304,
    3331       -1,    -1,   432,    -1,    -1,    -1,    -1,    -1,    -1,  1464,
    3332       -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,
    3333       -1,    -1,    -1,   453,    -1,    -1,   456,    -1,    -1,    -1,
    3334       -1,   159,   462,  1338,     3,     4,     5,     6,     7,     8,
     3488      25,    26,    27,    -1,    -1,    30,    31,    32,    64,    -1,
     3489      -1,    67,    -1,    69,    39,    71,    72,   267,    74,    75,
     3490      76,    -1,    -1,    -1,    -1,    -1,    -1,    83,    84,  1076,
     3491      -1,    -1,    -1,    -1,    -1,    -1,  1083,    -1,    -1,    -1,
     3492      -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,
     3493      75,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,   115,
     3494      -1,    -1,    -1,   119,    -1,   145,  1113,    -1,    -1,    -1,
     3495      -1,  1118,    -1,   323,    -1,   155,    -1,    -1,    -1,  1126,
     3496      -1,   331,   332,    -1,   334,   335,    -1,   167,   168,    -1,
     3497      -1,    -1,    -1,    -1,   344,    -1,    -1,    -1,   348,    -1,
     3498      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3499    1157,    -1,    -1,    -1,    -1,    -1,    -1,   367,    -1,    -1,
     3500     370,    -1,  1169,    -1,    -1,  1172,    -1,  1174,    -1,    -1,
     3501      37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,
     3502      -1,  1188,  1189,    -1,    -1,    -1,    -1,   397,    -1,    -1,
     3503      -1,   401,    -1,    -1,    -1,    -1,    -1,    -1,   238,    66,
     3504      -1,    -1,    -1,  1210,    -1,    72,    -1,    -1,    -1,    76,
     3505      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
     3506      87,    -1,   432,   263,    -1,    -1,    -1,    94,    -1,    -1,
     3507    1237,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1557,    -1,
     3508      -1,    -1,   109,    -1,   111,   455,    -1,   114,    -1,    -1,
     3509      -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
     3510      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3511      -1,    -1,    -1,    -1,    -1,    -1,   486,    -1,    -1,   489,
     3512      -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
    33353513       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3336       19,    20,    21,    22,    23,    24,    25,    26,    27,   489,
    3337       -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,  1524,
    3338       39,   501,    -1,    -1,    -1,    -1,    -1,  1415,    -1,    -1,
    3339       -1,    -1,    44,   513,    -1,   515,    -1,    -1,   518,    -1,
    3340      520,   521,   220,    -1,   222,   223,   224,    -1,    67,    -1,
    3341       69,    -1,    71,   533,    -1,    74,    75,    -1,    -1,    -1,
    3342     1415,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3343       -1,    -1,    -1,    -1,    -1,    -1,  1464,    -1,    90,    -1,
    3344      258,    -1,    -1,  1471,   262,    -1,  1441,    -1,   100,    -1,
    3345       -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,    -1,
    3346      278,    -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,  1464,
    3347       -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,   598,    -1,
    3348      600,    -1,    -1,   603,    -1,    -1,    -1,    -1,    -1,    -1,
    3349       -1,    -1,    -1,    -1,    -1,    -1,  1524,    -1,    -1,    -1,
    3350       -1,    -1,    -1,    -1,   156,    -1,    -1,    -1,    -1,   629,
    3351      328,    -1,    -1,    -1,   634,    -1,    -1,    -1,   170,    -1,
    3352       -1,    -1,    -1,   643,   644,   645,    -1,    -1,    -1,  1524,
    3353       -1,   349,    -1,    -1,    -1,    -1,   354,   355,    -1,    -1,
    3354       -1,   193,   662,    -1,   362,    -1,    -1,    -1,    -1,    -1,
    3355       -1,    -1,    -1,    -1,    -1,   207,    -1,    -1,    -1,    -1,
    3356       -1,    -1,     7,    -1,   216,    10,    11,    12,    13,    14,
    3357       -1,    -1,    -1,    -1,   226,    -1,    -1,   697,    -1,    -1,
    3358       -1,    -1,    -1,    -1,    -1,    -1,    -1,   405,    -1,    -1,
    3359       -1,    -1,    37,    38,    39,    40,    -1,    -1,   718,   251,
    3360       -1,    -1,    -1,    -1,   256,   423,    -1,    -1,    -1,    -1,
    3361      428,    -1,   430,    -1,    -1,    -1,   736,   269,   738,    -1,
    3362       -1,    66,    67,   275,    -1,   277,    -1,    72,    -1,   447,
    3363       -1,    76,   450,   451,    79,    80,    81,    82,    83,    84,
    3364       -1,    86,    87,   295,    -1,    -1,    -1,    -1,   466,    94,
    3365       -1,    -1,    -1,   773,    -1,    -1,    -1,    -1,    -1,    -1,
    3366       -1,    -1,   480,    -1,   109,    -1,   111,    -1,  1099,   487,
    3367       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
    3368       -1,    -1,    -1,    -1,    -1,    -1,   338,    -1,    -1,    -1,
    3369       -1,   343,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3370       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   828,    -1,
    3371       -1,    -1,   832,    -1,    -1,   835,    -1,    -1,    -1,   371,
    3372       -1,    -1,    -1,   375,   376,    -1,   378,    -1,    -1,    -1,
    3373       -1,    -1,    -1,   385,   386,    -1,   388,   389,    -1,   391,
    3374       -1,   393,    -1,    -1,    -1,    -1,    -1,     7,    -1,    -1,
    3375       10,    11,    12,    13,    14,    -1,    -1,    -1,   410,    -1,
    3376       -1,    -1,    -1,    -1,    -1,    -1,   418,    -1,    -1,    -1,
    3377       -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    39,
    3378       40,    -1,    -1,    -1,    -1,   603,    -1,    -1,    -1,    -1,
    3379       -1,   443,  1223,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3380       -1,    -1,   454,    -1,    -1,    -1,    66,    67,   928,    -1,
    3381       -1,    -1,    72,   631,    -1,    -1,    76,    -1,   636,    79,
    3382       80,    81,    82,    83,    84,   477,    86,    87,    -1,    -1,
    3383       -1,   483,    -1,    -1,    94,    -1,   488,    -1,    -1,    -1,
    3384       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
    3385      970,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
    3386      120,   121,   122,   123,    -1,    -1,   986,    -1,    -1,    -1,
    3387       -1,    -1,    -1,   525,    -1,    -1,    -1,    -1,    -1,    -1,
    3388       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   541,
    3389       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3390       -1,  1021,    -1,    -1,    -1,    -1,   724,    -1,    -1,    -1,
    3391       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3392      738,    -1,  1042,  1043,    -1,    -1,   578,    -1,    -1,    -1,
    3393       -1,    -1,    -1,    -1,    -1,   587,    -1,    -1,    -1,    -1,
    3394      758,    -1,   594,    -1,    -1,    37,    38,   599,    40,    -1,
    3395       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   610,    -1,
    3396       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3397       -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
    3398       72,    -1,  1102,    -1,    76,    -1,    -1,    79,    80,    81,
    3399       82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,   651,
    3400       -1,   819,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3401       -1,    -1,    -1,    -1,   832,    -1,    -1,   109,    -1,   111,
    3402       -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,
    3403      122,   123,    -1,   851,    -1,   687,    -1,    -1,    -1,    -1,
    3404       -1,  1161,    -1,    -1,     3,     4,     5,     6,     7,     8,
     3514      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
     3515      -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,   529,
     3516      39,    -1,   532,   533,    -1,    -1,    -1,    -1,  1335,    -1,
     3517    1337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,
     3518      -1,    -1,    -1,  1350,    -1,  1352,    -1,    -1,    67,    -1,
     3519      69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,    78,
     3520      -1,    -1,    -1,  1370,    -1,    -1,    -1,    -1,   578,   579,
     3521      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1386,
     3522    1387,    -1,    -1,    -1,    -1,    -1,    -1,   597,   598,    -1,
     3523     600,  1398,   111,    -1,  1401,    -1,    -1,    -1,    -1,   609,
     3524     119,   611,   612,    -1,    -1,    -1,    -1,    -1,   618,    -1,
     3525      -1,    -1,    -1,    -1,    -1,    -1,  1423,    -1,   628,   629,
     3526      -1,    -1,    -1,    -1,   634,  1432,    -1,    -1,  1435,    -1,
     3527    1437,  1438,  1439,   643,   644,   645,    -1,    -1,    -1,    -1,
     3528      -1,   481,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3529      -1,    -1,   662,    -1,    -1,    -1,    -1,   667,   668,    -1,
     3530      -1,   671,   672,    -1,    -1,    -1,    -1,    -1,   678,    -1,
     3531      -1,    -1,  1479,    -1,  1481,    -1,    -1,  1484,    -1,    -1,
     3532     520,    -1,    -1,    -1,    -1,    -1,   696,   697,   698,    -1,
     3533     700,    -1,  1499,   533,   704,    -1,    -1,    -1,    -1,    -1,
     3534     540,    -1,    -1,   543,    -1,    -1,    -1,    -1,    -1,    -1,
     3535      -1,    -1,    -1,    -1,   554,   555,    -1,    -1,    -1,    -1,
     3536      -1,    -1,    -1,    -1,    -1,    -1,   736,   737,    -1,    -1,
     3537      -1,    -1,    -1,    -1,    -1,    -1,   576,    -1,    -1,    -1,
     3538      -1,    -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,    -1,
     3539      -1,    -1,    -1,   593,    -1,    -1,    -1,    -1,   598,    -1,
     3540      -1,    -1,   772,   773,    -1,    -1,    -1,   777,   778,    -1,
     3541      -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
    34053542       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    34063543      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3407       -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,
    3408       39,    40,    -1,  1203,    -1,    -1,    -1,    -1,    -1,    -1,
    3409      742,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3410      752,   753,    -1,    -1,    -1,    64,    -1,    -1,    67,    -1,
    3411       69,    -1,    71,    72,   766,    74,    75,    76,    -1,    -1,
    3412      938,  1241,   154,   155,    83,    84,    -1,    -1,    -1,    -1,
    3413       -1,   783,    -1,   785,    -1,    -1,    -1,   789,    -1,    -1,
    3414       -1,    -1,    -1,    -1,    -1,    -1,   964,    -1,    -1,    -1,
    3415      109,    -1,   111,    -1,    -1,    -1,   188,    -1,    -1,    -1,
    3416      119,    -1,    -1,   195,    -1,    -1,    -1,    -1,    -1,    -1,
    3417     1290,  1291,    -1,    -1,   992,    -1,    -1,    -1,    -1,  1299,
    3418       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3419       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3420       30,    31,    32,   855,    -1,    -1,  1024,    -1,    -1,    39,
    3421      862,    -1,    -1,    -1,    -1,    -1,    -1,  1035,    -1,    -1,
    3422       -1,    -1,    -1,   875,    -1,   877,    -1,    -1,    -1,    -1,
    3423       -1,    -1,    -1,    -1,    -1,   267,    -1,    67,    -1,   891,
    3424       -1,    -1,    72,    -1,    74,    75,   898,    -1,    -1,    -1,
    3425       -1,    -1,    -1,    83,    84,    -1,    -1,    -1,   910,    -1,
    3426       -1,   913,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3427       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   931,
    3428       -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
    3429       -1,   323,    -1,    -1,    -1,  1415,    -1,    -1,  1116,   331,
    3430      332,    -1,   334,   335,    -1,    -1,    -1,    -1,    -1,    -1,
    3431       -1,    -1,   344,    -1,    -1,    -1,   348,    -1,    -1,    -1,
    3432       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3433       -1,    -1,    -1,    -1,    -1,   367,    -1,    -1,   370,    -1,
    3434       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3435       -1,    -1,    -1,  1473,    -1,  1475,    -1,    -1,    -1,    -1,
    3436       37,    38,    -1,    40,    -1,   397,    -1,    -1,  1020,   401,
    3437       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3438       -1,    -1,    -1,    -1,    -1,  1203,    -1,    -1,    -1,    66,
    3439     1510,   145,  1512,    -1,    -1,    72,    -1,    74,    75,    76,
    3440      432,   155,    79,    80,    81,    82,    83,    84,    -1,    86,
    3441       87,    -1,    -1,   167,   168,    -1,    -1,    94,    -1,    -1,
    3442     1540,    -1,    -1,   455,  1076,    -1,    -1,    -1,    -1,    -1,
    3443       -1,  1083,   109,    -1,   111,    -1,   113,   114,    -1,    -1,
    3444       -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
    3445       -1,    -1,    -1,    -1,   486,    -1,    -1,   489,    -1,    -1,
    3446     1112,    -1,    -1,    -1,    -1,  1117,    -1,    -1,    -1,    -1,
    3447       -1,    -1,    -1,  1125,    -1,    -1,    -1,    -1,    -1,    -1,
    3448       -1,  1299,    -1,    -1,   238,    -1,    -1,    -1,    -1,    -1,
    3449       -1,    -1,    -1,    -1,    -1,    -1,    -1,   529,    -1,    -1,
    3450      532,   533,    -1,    -1,  1156,    -1,    -1,    -1,    -1,   263,
    3451       -1,    -1,    -1,    -1,    -1,    -1,  1168,    -1,    -1,  1171,
    3452       -1,  1173,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3453       -1,    -1,    -1,    -1,    -1,  1187,  1188,    -1,    -1,    -1,
    3454       -1,    -1,    -1,    -1,    -1,    -1,   578,   579,    -1,    -1,
    3455       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1209,    -1,    -1,
    3456       -1,    -1,    -1,    -1,    -1,   597,   598,    -1,   600,    -1,
    3457       -1,    -1,    -1,    -1,    -1,    -1,    -1,   609,    -1,   611,
    3458      612,    -1,    -1,    -1,  1236,    -1,   618,    -1,    -1,   281,
    3459       -1,   283,   284,    -1,    -1,    -1,   628,   629,    -1,   291,
    3460      292,    -1,   634,    -1,   296,   297,    -1,    -1,    -1,    -1,
    3461       -1,   643,   644,   645,    -1,    -1,   308,    -1,    -1,    -1,
    3462       -1,    -1,    -1,    -1,    -1,   379,    -1,    -1,    -1,    -1,
    3463      662,    -1,    -1,    -1,    -1,   667,   668,    -1,    -1,   671,
    3464      672,    -1,    -1,    -1,    -1,    -1,   678,    -1,    -1,    -1,
    3465       -1,    -1,   344,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3466       -1,    -1,    -1,    -1,   696,   697,   698,    -1,   700,    -1,
    3467       -1,    -1,   704,    -1,    -1,    -1,    -1,    -1,    -1,    37,
    3468       38,  1333,    40,  1335,    -1,    -1,    -1,    -1,   380,    -1,
    3469       -1,    -1,    -1,    -1,    -1,    -1,  1348,    -1,  1350,    -1,
    3470       -1,    -1,    -1,    -1,   736,   737,    -1,    -1,    66,    -1,
    3471       -1,    -1,    -1,    -1,    72,    -1,  1368,    -1,    76,    -1,
    3472       -1,    79,    80,    81,    82,    83,    84,   481,    86,    87,
    3473       -1,    -1,  1384,  1385,    -1,    -1,    94,  1555,    -1,    -1,
    3474      772,   773,    -1,    -1,  1396,   777,   778,  1399,    -1,    -1,
    3475       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,
    3476      118,   119,   120,   121,   122,   123,   520,    -1,    -1,  1421,
    3477       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1430,   533,
    3478       -1,  1433,    -1,  1435,  1436,  1437,   540,   819,    -1,   543,
    3479       -1,    -1,    -1,    -1,    -1,    -1,   828,    -1,    -1,    -1,
    3480      554,   555,   834,   835,    -1,    -1,    -1,   839,    -1,   841,
    3481       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   851,
    3482       -1,    -1,   576,    -1,    -1,  1477,    -1,  1479,    -1,    -1,
    3483     1482,    -1,   586,    -1,    -1,    -1,    -1,    -1,    -1,   593,
    3484       -1,    -1,    -1,    -1,   598,  1497,    -1,    -1,    -1,    -1,
    3485       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3486       -1,    -1,    -1,    -1,    -1,   557,   558,   559,   560,   561,
    3487      562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
    3488      572,   573,   574,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3489       -1,    -1,   924,    -1,   648,    -1,    -1,    -1,    -1,    -1,
    3490      932,    -1,    -1,   657,    -1,    -1,   938,    -1,   600,    -1,
    3491       -1,    -1,    -1,    -1,   946,    -1,    -1,    -1,    -1,    -1,
    3492       -1,    -1,    -1,    -1,    -1,    -1,    -1,   959,   960,    -1,
    3493       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3494       -1,    -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,
    3495       -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,    -1,    -1,
    3496      992,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3497       19,    20,    21,    22,    23,    24,    25,    26,    27,  1011,
    3498     1012,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,  1021,
    3499       39,    40,    -1,    -1,    -1,  1027,  1028,    -1,  1030,  1031,
    3500     1032,    -1,    -1,    -1,    -1,    -1,    -1,   699,    -1,    -1,
    3501     1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,    67,   773,
    3502       -1,   775,    -1,    -1,    -1,    74,    75,   781,    -1,   721,
    3503       -1,    -1,    -1,    -1,   788,    -1,    -1,    -1,    -1,    -1,
    3504       -1,    -1,   734,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3505       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3506       -1,    -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,
    3507      119,  1103,  1104,  1105,    -1,    -1,    -1,    -1,   832,   833,
    3508       -1,   835,    -1,    -1,  1116,    -1,    -1,    -1,   780,    -1,
    3509       -1,    -1,    -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,
     3544      -1,    30,    31,    32,    33,    -1,    -1,    36,   648,   819,
     3545      39,    40,    -1,    -1,    -1,    -1,    -1,   657,   828,    -1,
     3546      -1,    -1,    -1,    -1,   834,   835,    -1,    -1,    -1,   839,
     3547      -1,   841,    -1,    -1,    -1,    64,    -1,    -1,    67,    -1,
     3548      69,   851,    71,    72,    -1,    74,    75,    76,    -1,    -1,
     3549      -1,    -1,    -1,    -1,    83,    84,    -1,   697,    -1,    -1,
    35103550      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    35113551      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3512      812,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1161,
    3513       -1,    -1,    -1,    -1,    -1,   827,   890,    -1,    -1,    -1,
    3514      894,    -1,    -1,     0,    -1,    -1,     3,     4,     5,     6,
    3515        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3516       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3517       27,    -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,
    3518       -1,    -1,    39,    40,    -1,    -1,    -1,    -1,    -1,  1221,
     3552     109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3553     119,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
     3554      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3555      25,    26,    27,    28,   924,    30,    31,    32,    -1,    -1,
     3556      -1,    -1,   932,    -1,    39,    -1,    -1,    -1,   938,    -1,
     3557      -1,    -1,    -1,   773,    -1,   775,   946,    -1,    -1,    -1,
     3558      -1,   781,    -1,    -1,    -1,    -1,    -1,    -1,   788,   959,
     3559     960,    -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
     3560      75,    76,    -1,    78,    -1,    -1,    -1,    -1,    83,    84,
     3561      -1,    -1,    -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,
     3562      -1,    -1,   992,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3563      -1,    -1,   832,   833,   109,   835,   111,    -1,    -1,    -1,
     3564      -1,  1011,  1012,    -1,   119,    -1,    -1,    -1,    -1,    -1,
     3565     850,  1021,    -1,    -1,    -1,    -1,    -1,  1027,  1028,    -1,
     3566    1030,  1031,  1032,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3567      -1,    -1,  1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,
    35193568      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3520       -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,  1241,
    3521       67,    -1,    69,    -1,    71,    72,   970,    74,    75,    76,
    3522       -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
    3523       -1,    -1,   986,   987,    -1,    -1,    -1,    -1,    -1,   993,
    3524       -1,    -1,    -1,    -1,    -1,   999,    -1,    -1,  1002,    -1,
    3525     1004,    -1,   109,    -1,   111,    -1,    -1,    -1,  1290,  1291,
    3526       -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3527     1024,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3528       -1,  1035,    -1,    -1,    -1,    -1,   978,    -1,    -1,    -1,
     3569     890,    -1,    -1,    -1,   894,     3,     4,     5,     6,     7,
     3570       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3571      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3572      -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,
     3573      -1,    39,    -1,  1103,  1104,  1105,    -1,    -1,    -1,    -1,
     3574      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1117,    -1,    -1,
     3575      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
     3576      -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,
     3577     970,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3578      -1,    -1,    -1,    -1,    -1,    -1,   986,   987,    -1,    -1,
     3579      -1,    -1,  1162,   993,    -1,    -1,    -1,    37,    38,   999,
     3580      40,    -1,  1002,   111,  1004,    -1,    -1,    -1,    -1,    -1,
     3581      -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3582      -1,    -1,    -1,    -1,  1024,    -1,    66,    -1,    -1,    -1,
     3583      -1,    -1,    72,    -1,    -1,  1035,    76,    -1,    -1,    79,
     3584      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
     3585      -1,    -1,  1222,    -1,    94,    37,    38,  1057,    40,  1059,
     3586      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
     3587      -1,   111,    -1,  1243,  1074,  1075,    -1,    -1,   118,   119,
     3588     120,   121,   122,   123,    66,    -1,    -1,    -1,    -1,    -1,
     3589      72,    -1,    -1,    -1,    76,  1095,    -1,    79,    80,    81,
     3590      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
     3591      -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3592      -1,    -1,  1292,  1293,    -1,    -1,    -1,   109,    -1,   111,
     3593      -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
     3594     122,   123,    -1,  1143,    -1,    -1,    -1,    -1,    -1,    -1,
    35293595      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3530       -1,    -1,    -1,  1057,    -1,  1059,    -1,    -1,    -1,    -1,
    3531       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1009,    -1,    -1,
    3532     1074,  1075,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1021,
    3533       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3534       -1,  1095,    -1,    -1,     3,     4,     5,     6,     7,     8,
    3535        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3536       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3537     1062,    30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,
    3538       39,    40,    -1,  1415,    -1,    -1,    -1,    -1,  1142,    -1,
    3539       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3540       -1,    -1,    -1,    -1,    -1,    64,    -1,  1161,    67,    -1,
    3541       69,    -1,    71,    72,    -1,    74,    75,    76,    -1,    -1,
    3542       -1,    -1,  1176,  1177,    83,    84,    -1,    -1,    -1,    -1,
    3543       -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
    3544       -1,    -1,  1134,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3545      109,    -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,
    3546      119,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
    3547       -1,    76,    -1,  1505,    79,    80,    81,    82,    83,    84,
    3548       -1,    86,    87,    -1,    -1,    -1,  1178,    -1,    -1,    94,
    3549       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1530,  1531,
    3550     1192,  1193,    -1,  1257,   109,    -1,   111,    -1,    -1,    -1,
    3551       -1,   116,    -1,   118,   119,   120,   121,   122,   123,    -1,
    3552       -1,    -1,    -1,  1555,    -1,     3,     4,     5,     6,     7,
     3596      -1,    -1,  1162,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3597      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1177,  1178,    -1,
     3598      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
    35533599       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    35543600      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    35553601      -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    37,
    3556       38,    39,    40,    41,  1318,    43,  1320,    -1,    46,    47,
     3602      38,    39,    40,    41,    -1,    43,    -1,    -1,    46,    47,
    35573603      48,    49,    50,    51,    52,    53,    -1,    -1,    -1,    57,
    3558       -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,    67,
    3559       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
     3604      -1,    -1,    -1,    61,    62,    -1,    64,  1417,    66,    67,
     3605      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,  1259,
    35603606      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    35613607      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     
    35633609      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
    35643610     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
    3565      128,    -1,  1406,    -1,   132,    -1,    -1,    -1,    -1,    -1,
    3566        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3567       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3568       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
    3569       33,    -1,    -1,    36,    37,    38,    39,    40,    -1,    -1,
     3611     128,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,
     3612    1320,    -1,  1322,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3613      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1507,    10,    11,
     3614      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3615      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
     3616      32,    -1,  1532,  1533,    -1,    -1,    -1,    39,    -1,    -1,
    35703617      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3571     1402,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,
    3572       -1,    -1,    -1,    66,    67,    -1,    69,  1419,    71,    72,
    3573       -1,    74,    75,    76,  1488,    -1,    79,    80,    81,    82,
    3574       83,    84,    66,    86,    87,    -1,    -1,    -1,    72,    -1,
    3575       -1,    94,    76,    -1,    -1,    79,    80,    81,    82,    83,
    3576       84,    -1,    86,    87,    -1,    -1,   109,    -1,   111,    -1,
    3577       94,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
    3578      123,    -1,    -1,    -1,    -1,   109,  1540,   111,    -1,   132,
    3579      114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
    3580     1492,  1493,     3,     4,     5,     6,     7,     8,     9,    10,
    3581       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3582       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3583       31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
    3584       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3585       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3586       30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
    3587       71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
    3588       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3589       -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
    3590       -1,    -1,    72,    -1,    74,    75,    -1,    -1,   109,    -1,
    3591      111,    -1,    -1,    83,    84,    -1,    -1,   118,   119,   120,
    3592      121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
    3593       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3594       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3595       31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
    3596       -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3618      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1557,    -1,    -1,
     3619      -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
     3620      -1,    -1,    74,    75,    -1,    -1,    -1,    -1,  1408,    -1,
     3621      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
     3622       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3623      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3624      -1,    -1,    30,    31,    32,    33,    -1,   119,    36,    37,
     3625      38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
    35973626      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3598       27,    28,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
    3599       71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
    3600       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3601       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
    3602       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
    3603      111,    78,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
    3604      121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
    3605       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3606       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3607       31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
    3608       -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3627      27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,    67,
     3628      -1,    69,    39,    71,    72,    -1,    74,    75,    76,    -1,
     3629    1490,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3630      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3631      67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    -1,
     3632      -1,   109,    -1,   111,    -1,    -1,    83,    84,    -1,    -1,
     3633     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
     3634      -1,    -1,  1542,    -1,   132,     3,     4,     5,     6,     7,
     3635       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3636      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3637      -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    37,
     3638      38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
    36093639      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3610       27,    28,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
    3611       71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
    3612       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3613       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
    3614       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
    3615      111,    78,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
    3616      121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
    3617       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3618       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3619       31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
    3620       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3621       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3622       30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
    3623       71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
    3624       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3625       -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
    3626       -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
    3627      111,    -1,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
    3628      121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
    3629       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3630       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3631       31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
    3632       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3633       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3634       30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
    3635       71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
    3636       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3637       -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
    3638       -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
    3639      111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
    3640      121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
    3641       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3642       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3643       31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3640      27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,    67,
     3641      -1,    69,    39,    71,    72,    -1,    74,    75,    76,    -1,
     3642      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3643      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3644      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
     3645      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
     3646     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
     3647       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3648      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3649      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
     3650      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3651      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3652      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
     3653      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
     3654      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3655      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3656      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3657      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,   116,    -1,
     3658     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
     3659       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3660      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3661      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
     3662      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3663      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3664      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
     3665      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
     3666      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3667      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3668      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3669      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,   116,    -1,
     3670     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
     3671       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3672      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3673      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
     3674      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3675      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3676      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
     3677      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
     3678      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3679      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3680      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3681      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,   116,    -1,
     3682     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
     3683       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3684      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3685      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
     3686      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3687      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3688      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
     3689      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
     3690      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3691      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3692      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3693      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
     3694     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
     3695       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3696      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3697      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
     3698      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3699      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3700      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
     3701      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
     3702      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3703      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3704      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3705      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
     3706     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
     3707       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3708      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3709      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
     3710      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3711      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3712      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
     3713      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
     3714      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3715      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3716      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3717      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
     3718     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
     3719       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3720      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3721      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
     3722      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3723      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3724      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
     3725      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
     3726      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3727      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3728      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3729      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
     3730     118,   119,   120,   121,   122,   123,     3,     4,     5,     6,
     3731       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     3732      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3733      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
     3734      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    36443735      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    36453736      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3646       -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
    3647       71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
    3648       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3649       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
    3650       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
    3651      111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
    3652      121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
    3653       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3654       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3655       31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
    3656       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3657       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3658       -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
    3659       71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
    3660       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3661       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
    3662       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
    3663      111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
    3664      121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
    3665       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3666       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3667       31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
    3668       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3669       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3670       30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
    3671       71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
    3672       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3673       -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
    3674       -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
    3675      111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
    3676      121,   122,   123,     3,     4,     5,     6,     7,     8,     9,
    3677       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3678       20,    21,    22,    23,    24,    25,    26,    27,    -1,   119,
    3679       30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
    3680       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3681       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3682       -1,    30,    31,    32,    33,    34,    35,    67,    -1,    69,
    3683       39,    71,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
    3684       -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
    3685       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
    3686       -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,
    3687       -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
    3688        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3689       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3690       23,    24,    25,    26,    27,    28,    -1,    30,    31,    32,
    3691       33,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,
    3692       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3693       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3694       -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
    3695       -1,    74,    75,    -1,    -1,    78,     3,     4,     5,     6,
    3696        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3697       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3698       27,    -1,    -1,    30,    31,    32,    33,    -1,   111,    36,
    3699       -1,    -1,    39,    -1,    -1,    -1,   119,    -1,    -1,    -1,
    3700       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3701       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3702       67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     3,
     3737      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
    37033738       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    37043739      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     
    37073742      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37083743      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3709       -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
    3710       74,    75,    -1,     4,     5,     6,     7,     8,     9,    10,
    3711       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3712       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3713       31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,
    3714       -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
     3744      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
     3745      74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
     3746      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37153747      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3716       -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
    3717       71,    72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,
    3718       -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
    3719       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3720       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
    3721      111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,     4,
     3748      -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
     3749      -1,    -1,    -1,    -1,    -1,   119,     4,     5,     6,     7,
     3750       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3751      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3752      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
     3753      -1,    39,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
     3754      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3755      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    67,
     3756      -1,    69,    -1,    71,    -1,    39,    74,    75,    -1,     4,
    37223757       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    37233758      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3724       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3725       -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    10,
    3726       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3727       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3728       31,    32,    67,    -1,    69,    -1,    71,    -1,    39,    74,
    3729       75,    -1,     4,     5,     6,     7,     8,     9,    10,    11,
    3730       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3731       22,    23,    24,    25,    26,    27,    67,    -1,    30,    31,
    3732       32,    -1,    -1,    74,    75,   110,   111,    39,    -1,    -1,
    3733       -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
     3759      25,    26,    27,    67,    -1,    30,    31,    32,    72,    -1,
     3760      74,    75,   110,   111,    39,    -1,    -1,    -1,    -1,    83,
     3761      84,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37343762      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3735       -1,    -1,    -1,    -1,    -1,    67,    -1,    69,   109,    71,
    3736      111,    -1,    74,    75,    -1,    -1,    -1,    -1,   119,    -1,
     3763      -1,    -1,    67,    -1,    69,    -1,    71,   111,    -1,    74,
     3764      75,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
    37373765      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3738       -1,    -1,    -1,    -1,    96,    -1,    -1,    -1,    -1,    -1,
    3739       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
    3740       -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,     4,     5,
    3741        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    3742       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3743       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    3744       -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    10,    11,
    3745       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3746       22,    23,    24,    25,    26,    27,    28,    -1,    30,    31,
    3747       32,    67,    -1,    69,    -1,    71,    -1,    39,    74,    75,
     3766      -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3767      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
     3768      -1,    -1,    -1,    -1,   119,     4,     5,     6,     7,     8,
     3769       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3770      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3771      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
     3772      39,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
     3773      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3774      25,    26,    27,    28,    -1,    30,    31,    32,    67,    -1,
     3775      69,    -1,    71,    -1,    39,    74,    75,    -1,    -1,    -1,
     3776      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3777      -1,    -1,    -1,    -1,    -1,    -1,    -1,    96,    -1,    -1,
     3778      -1,    -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
     3779      75,    76,   111,    78,    -1,    -1,    -1,    -1,    83,    84,
     3780     119,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3781      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3782      23,    24,    25,    26,    27,    -1,   111,    30,    31,    32,
     3783      -1,    -1,    -1,    -1,   119,    -1,    39,    -1,    -1,    -1,
    37483784      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37493785      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3750       96,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
    3751       72,    -1,    74,    75,    76,   111,    78,    -1,    -1,    -1,
    3752       -1,    83,    84,   119,     4,     5,     6,     7,     8,     9,
     3786      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
     3787      -1,    74,    75,    -1,     4,     5,     6,     7,     8,     9,
    37533788      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3754       20,    21,    22,    23,    24,    25,    26,    27,    -1,   111,
    3755       30,    31,    32,    -1,    -1,    -1,    -1,   119,    -1,    39,
    3756       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3789      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3790      30,    31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,
     3791      -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,
    37573792      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37583793      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
     
    37723807      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37733808      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
    3774       74,    75,    -1,     4,     5,     6,     7,     8,     9,    10,
    3775       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3776       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3777       31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,
     3809      74,    75,    10,    11,    12,    13,    14,    15,    16,    17,
     3810      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3811      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
     3812      38,    39,    40,    -1,    -1,    -1,    -1,   111,    -1,    -1,
    37783813      -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
     3814      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
     3815      -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,
     3816      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3817      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    37793818      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3780       -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
    3781       71,    -1,    -1,    74,    75,    10,    11,    12,    13,    14,
     3819      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
     3820     118,   119,   120,   121,   122,   123,    10,    11,    12,    13,
     3821      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3822      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
     3823      -1,    -1,    -1,    37,    38,    39,    40,    10,    11,    12,
     3824      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3825      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
     3826      -1,    -1,    66,    67,    -1,    -1,    39,    -1,    72,    -1,
     3827      74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
     3828      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
     3829      94,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,
     3830      -1,    74,    75,    76,    -1,   109,    -1,   111,   112,    -1,
     3831      83,    84,    -1,    -1,   118,   119,   120,   121,   122,   123,
     3832      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3833      20,    21,    22,    23,    24,    25,    26,    27,   111,    -1,
     3834      30,    31,    32,    -1,    -1,    -1,   119,    37,    38,    39,
     3835      40,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3836      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3837      -1,    30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,
     3838      39,    40,    72,    -1,    74,    75,    76,    -1,    -1,    79,
     3839      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
     3840      -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,
     3841      -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,
     3842     110,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
     3843     120,   121,   122,   123,    10,    11,    12,    13,    14,    15,
     3844      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3845      26,    27,   111,    -1,    30,    31,    32,    -1,    -1,    -1,
     3846     119,    37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
     3847      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
     3848      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3849      66,    67,    30,    31,    32,    -1,    72,    -1,    74,    75,
     3850      76,    39,    -1,    79,    80,    81,    82,    83,    84,    -1,
     3851      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
     3852      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
     3853      -1,    -1,    -1,   109,    -1,   111,    74,    75,    -1,    -1,
     3854      -1,    -1,   118,   119,   120,   121,   122,   123,    10,    11,
     3855      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3856      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
     3857      32,   109,    -1,   111,    -1,    37,    38,    39,    40,    -1,
     3858      -1,   119,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
     3859      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3860      24,    25,    26,    27,    66,    67,    30,    31,    32,    -1,
     3861      72,    -1,    74,    75,    76,    39,    -1,    79,    80,    81,
     3862      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
     3863      -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3864      -1,    -1,    -1,    67,    -1,    -1,    -1,   109,    -1,   111,
     3865      74,    75,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
     3866     122,   123,    10,    11,    12,    13,    14,    15,    16,    17,
     3867      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3868      -1,    -1,    30,    31,    32,   109,    -1,   111,    -1,    37,
     3869      38,    39,    40,    -1,    -1,   119,    -1,    -1,    -1,    -1,
     3870      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3871      20,    21,    22,    23,    24,    25,    26,    27,    66,    67,
     3872      30,    31,    32,    -1,    72,    -1,    74,    75,    76,    39,
     3873      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3874      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3875      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
     3876      -1,   109,    -1,   111,    74,    75,    -1,    -1,    -1,    -1,
     3877     118,   119,   120,   121,   122,   123,    10,    11,    12,    13,
     3878      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3879      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
     3880      -1,   111,    -1,    37,    38,    39,    40,    -1,    -1,   119,
     3881      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
     3882      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3883      26,    27,    66,    67,    30,    31,    32,    -1,    72,    -1,
     3884      74,    75,    76,    39,    -1,    79,    80,    81,    82,    83,
     3885      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
     3886      94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3887      -1,    67,    -1,    -1,    -1,   109,    -1,   111,    74,    75,
     3888      -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
     3889       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3890      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3891      23,    24,    25,    26,    27,   111,    -1,    30,    31,    32,
     3892      -1,    -1,    -1,   119,    -1,    -1,    39,    -1,    -1,    -1,
     3893      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3894      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3895      30,    31,    32,    -1,    67,    -1,    69,    -1,    71,    39,
     3896      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    10,    11,
     3897      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3898      22,    23,    24,    25,    26,    27,    -1,    67,    30,    31,
     3899      32,    -1,    72,    -1,    74,    75,    76,    39,    -1,    -1,
     3900      -1,   114,    -1,    83,    84,    -1,    10,    11,    12,    13,
     3901      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3902      24,    25,    26,    27,    -1,    67,    30,    31,    32,   109,
     3903      72,   111,    74,    75,    76,    39,    -1,    -1,    -1,   119,
     3904      -1,    83,    84,    -1,    10,    11,    12,    13,    14,    15,
     3905      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3906      26,    27,    -1,    67,    30,    31,    32,   109,    72,   111,
     3907      74,    75,    76,    39,    -1,    -1,    -1,   119,    -1,    83,
     3908      84,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
     3909      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3910      28,    67,    30,    31,    32,   109,    72,   111,    74,    75,
     3911      76,    39,    -1,    -1,    -1,   119,    -1,    83,    84,    -1,
     3912      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3913      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
     3914      -1,    -1,    -1,   109,    -1,   111,    74,    75,    -1,    -1,
     3915      78,    -1,    -1,   119,    -1,    10,    11,    12,    13,    14,
    37823916      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    37833917      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3784       -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
    3785      111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,
    3786       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3787       -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
    3788       75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3789       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3790       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3791       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
    3792       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
    3793       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3794       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3795       31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
    3796       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3797       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3798       30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,    39,
    3799       -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
    3800       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3801       -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
    3802       -1,    -1,    72,    -1,    74,    75,    76,    -1,   109,    -1,
    3803      111,   112,    -1,    83,    84,    -1,    -1,   118,   119,   120,
    3804      121,   122,   123,    10,    11,    12,    13,    14,    15,    16,
    3805       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3806       27,   111,    -1,    30,    31,    32,    -1,    -1,    -1,   119,
    3807       37,    38,    39,    40,    10,    11,    12,    13,    14,    15,
    3808       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3809       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,
    3810       67,    -1,    -1,    39,    40,    72,    -1,    74,    75,    76,
    3811       -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
    3812       87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    3813       -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
    3814       -1,    -1,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,
    3815       -1,   118,   119,   120,   121,   122,   123,    10,    11,    12,
    3816       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3817       23,    24,    25,    26,    27,   111,    -1,    30,    31,    32,
    3818       -1,    -1,    -1,   119,    37,    38,    39,    40,    -1,    -1,
    3819       -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
    3820       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3821       25,    26,    27,    66,    67,    30,    31,    32,    -1,    72,
    3822       -1,    74,    75,    76,    39,    -1,    79,    80,    81,    82,
    3823       83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
    3824       -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3825       -1,    -1,    67,    -1,    -1,    -1,   109,    -1,   111,    74,
    3826       75,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
    3827      123,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3828       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3829       -1,    30,    31,    32,   109,    -1,   111,    -1,    37,    38,
    3830       39,    40,    -1,    -1,   119,    -1,    -1,    -1,    -1,    10,
    3831       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3832       21,    22,    23,    24,    25,    26,    27,    66,    67,    30,
    3833       31,    32,    -1,    72,    -1,    74,    75,    76,    39,    -1,
    3834       79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
    3835       -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
    3836       -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
    3837      109,    -1,   111,    74,    75,    -1,    -1,    -1,    -1,   118,
    3838      119,   120,   121,   122,   123,    10,    11,    12,    13,    14,
    3839       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3840       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3841      111,    -1,    37,    38,    39,    40,    -1,    -1,   119,    -1,
    3842       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3843       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3844       -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
    3845       75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3846       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3847       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3848       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
    3849       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
    3850       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3851       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3852       31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
    3853       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3854       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3855       30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,    39,
    3856       -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
    3857       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3858       -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
    3859       -1,    -1,    72,    -1,    74,    75,    76,    -1,   109,    -1,
    3860      111,    -1,    -1,    83,    84,    -1,    -1,   118,   119,   120,
    3861      121,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3862       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
    3863       -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
    3864       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3865       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3866       30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
    3867       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3868       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3869       30,    31,    32,    -1,    -1,    -1,    -1,    67,    -1,    39,
    3870       -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
    3871       -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
    3872       -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
    3873       -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,   109,
    3874       -1,   111,    -1,    83,    84,    -1,    -1,    -1,    -1,   119,
    3875       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3876       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
    3877       -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
    3878       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3879       20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
    3880       30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
    3881       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3882       20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
    3883       30,    31,    32,    -1,    -1,    -1,    -1,    67,    -1,    39,
    3884       -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,    -1,
    3885       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3886       -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
    3887       -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,   109,
    3888       -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
    3889       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3890       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
    3891       -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
    3892       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3893       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3894       30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
    3895       40,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3896       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
    3897       -1,    30,    31,    32,    -1,    -1,    -1,    67,    -1,    -1,
    3898       39,    -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,
    3899       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3900       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
    3901       -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,
    3902       -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,   119,
    3903       -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
    3904       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3905       27,    -1,   111,    30,    31,    32,    -1,    -1,    -1,    -1,
    3906      119,    -1,    39,    40,    10,    11,    12,    13,    14,    15,
    3907       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3908       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    3909       67,    -1,    -1,    39,    -1,    -1,    -1,    74,    75,    -1,
    3910       -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
    3911       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3912       -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,    75,
    3913       -1,    39,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
    3914       -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3915       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
    3916       -1,    -1,    -1,    -1,    -1,   111,    74,    75,    -1,    -1,
    3917       -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,    14,
    3918       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3919       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3920       -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,    -1,
     3918      -1,   109,    -1,   111,    39,    40,    -1,    -1,    -1,    -1,
    39213919      -1,   119,    -1,    10,    11,    12,    13,    14,    15,    16,
    39223920      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3923       27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,
     3921      27,    28,    67,    30,    31,    32,    -1,    -1,    -1,    74,
    39243922      75,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
    39253923      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    39263924      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    3927       67,    -1,    39,    -1,    -1,    -1,   111,    74,    75,    -1,
    3928       -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
     3925      67,    -1,    39,    40,    -1,    -1,   111,    74,    75,    -1,
     3926     115,    78,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
    39293927      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    39303928      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
     
    39323930      -1,    -1,   119,    -1,    -1,    10,    11,    12,    13,    14,
    39333931      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3934       25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
    3935       -1,    -1,   119,    -1,    39,    10,    11,    12,    13,    14,
     3932      25,    26,    27,    -1,   111,    30,    31,    32,   115,    -1,
     3933      -1,    -1,   119,    -1,    39,    40,    10,    11,    12,    13,
     3934      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3935      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
     3936      -1,    -1,    67,    -1,    -1,    39,    -1,    -1,    -1,    74,
     3937      75,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
     3938      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3939      26,    27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,
     3940      74,    75,    -1,    39,    -1,    -1,   111,    -1,    -1,    -1,
     3941     115,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
     3942      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3943      -1,    67,    -1,    -1,    -1,    -1,    -1,   111,    74,    75,
     3944      -1,    -1,    -1,    -1,    -1,   119,    -1,    10,    11,    12,
     3945      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3946      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
     3947      -1,    -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,
     3948      -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,    14,
     3949      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3950      25,    26,    27,    -1,    67,    30,    31,    32,    -1,    -1,
     3951      -1,    74,    75,    -1,    39,    10,    11,    12,    13,    14,
    39363952      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    39373953      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3938       -1,    -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,
    3939       75,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3954      -1,    -1,    67,    -1,    39,    -1,    -1,    -1,   111,    74,
     3955      75,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,
     3956      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3957      -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,
     3958      75,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
     3959      -1,    -1,    -1,    -1,   119,    -1,    -1,    10,    11,    12,
     3960      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3961      23,    24,    25,    26,    27,    -1,   111,    30,    31,    32,
     3962      -1,    -1,    -1,    -1,   119,    -1,    39,    10,    11,    12,
     3963      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3964      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
     3965      -1,    -1,    -1,    -1,    67,    -1,    39,    -1,    -1,    -1,
     3966      -1,    74,    75,    -1,    -1,    10,    11,    12,    13,    14,
     3967      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3968      25,    26,    27,    -1,    67,    30,    31,    32,    -1,    -1,
     3969      -1,    74,    75,    -1,    39,    -1,    -1,    -1,   111,    -1,
     3970      -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,
     3971      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3972      -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,   111,    74,
     3973      75,    -1,    -1,    -1,    -1,    -1,   119,     4,     5,     6,
     3974       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    39403975      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3941       27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,
    3942       75,    -1,    39,    -1,    -1,    -1,   111,    -1,    -1,    -1,
    3943       -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
     3976      27,    -1,    -1,    30,    31,    32,   111,    -1,    -1,    -1,
     3977      -1,    -1,    39,    -1,   119,    -1,    -1,    -1,    -1,    -1,
    39443978      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3945       67,    -1,    -1,    -1,    -1,    -1,   111,    74,    75,    -1,
    3946       -1,    -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,
    3947       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3948       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    3949       -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
    3950       -1,    -1,   119,    -1,    10,    11,    12,    13,    14,    15,
     3979      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3980      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    37,
     3981      38,    -1,    40,    41,    -1,    43,    -1,    -1,    46,    47,
     3982      48,    49,    50,    51,    52,    53,    -1,    -1,    56,    57,
     3983      -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,
     3984      -1,    -1,    -1,   110,    72,    -1,    -1,    -1,    76,    -1,
     3985      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3986      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3987      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3988      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
     3989     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
     3990     128,    -1,    37,    38,   132,    40,    41,    -1,    43,    -1,
     3991      -1,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
     3992      -1,    -1,    57,    -1,    -1,    -1,    61,    62,    -1,    64,
     3993      -1,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
     3994      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
     3995      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
     3996      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3997      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
     3998      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
     3999      -1,    -1,    -1,   128,    -1,    -1,    -1,   132,     4,     5,
     4000       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    39514001      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3952       26,    27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,
    3953       74,    75,    -1,    39,    -1,    -1,     4,     5,     6,     7,
    3954        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3955       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3956       -1,    67,    30,    31,    32,    -1,    -1,   111,    74,    75,
    3957       -1,    39,    -1,    37,    38,   119,    40,    41,    -1,    43,
     4002      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
     4003      -1,    -1,    -1,    39,    -1,    37,    38,    -1,    40,    41,
     4004      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
     4005      52,    53,    -1,    -1,    56,    57,    -1,    -1,    -1,    61,
     4006      62,    67,    64,    69,    66,    71,    -1,    -1,    74,    75,
     4007      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
     4008      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
     4009      96,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4010      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
     4011      -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,
     4012     122,   123,    -1,    -1,    37,    38,   128,    40,    41,    -1,
     4013      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
     4014      53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,
     4015      -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    72,
     4016      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
     4017      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
     4018      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4019      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
     4020      -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,   122,
     4021     123,    -1,    -1,    37,    38,   128,    40,    41,    -1,    43,
    39584022      -1,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
    3959       -1,    -1,    56,    57,    -1,    -1,    -1,    61,    62,    67,
    3960       64,    69,    66,    71,    -1,    -1,    74,    75,    72,    -1,
    3961       -1,    -1,    76,   119,    -1,    79,    80,    81,    82,    83,
     4023      -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,    -1,
     4024      64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
     4025      -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
     4026      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
     4027      94,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
     4028      -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
     4029     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
     4030      66,    -1,    -1,    -1,   128,    -1,    72,    -1,    -1,    -1,
     4031      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
     4032      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    37,
     4033      38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4034      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    37,    38,
     4035      -1,    40,   118,   119,   120,   121,   122,   123,    66,    -1,
     4036      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
     4037      -1,    79,    80,    81,    82,    83,    84,    66,    86,    87,
     4038      -1,    -1,    -1,    72,    -1,    -1,    94,    76,    -1,    -1,
     4039      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
     4040      -1,   109,    -1,   111,    -1,    94,    37,    38,    -1,    40,
     4041     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
     4042     109,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,   118,
     4043     119,   120,   121,   122,   123,    66,    -1,    -1,    -1,    -1,
     4044      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
     4045      81,    82,    83,    84,    66,    86,    87,    -1,    -1,    -1,
     4046      72,    -1,    -1,    94,    76,    -1,    -1,    79,    80,    81,
     4047      82,    83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,
     4048      -1,    -1,    94,    37,    38,    -1,    40,   118,   119,   120,
     4049     121,   122,   123,    -1,    -1,    -1,    -1,   109,    -1,    -1,
     4050      -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
     4051     122,   123,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
     4052      -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
    39624053      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
    39634054      94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3964       -1,    -1,   110,    -1,    -1,   109,    -1,   111,    -1,    -1,
    3965      114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
    3966       -1,    -1,    -1,    -1,   128,    -1,    37,    38,   132,    40,
    3967       41,    -1,    43,    -1,    -1,    46,    47,    48,    49,    50,
    3968       51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
    3969       61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,
    3970       -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
    3971       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3972       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
    3973       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
    3974      111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
    3975      121,   122,   123,    -1,    -1,    -1,    -1,   128,    -1,    -1,
    3976       -1,   132,     4,     5,     6,     7,     8,     9,    10,    11,
     4055      -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,
     4056      -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
     4057       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     4058      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     4059      24,    25,    26,    27,    -1,    -1,    -1,    -1,    -1,    -1,
     4060      -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
     4061      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4062      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4063      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
     4064      74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
     4065      84,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    39774066      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    39784067      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
    3979       32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    37,
    3980       38,    -1,    40,    41,    -1,    43,    44,    45,    46,    47,
    3981       48,    49,    50,    51,    52,    53,    -1,    -1,    56,    57,
    3982       -1,    -1,    -1,    61,    62,    67,    64,    69,    66,    71,
    3983       -1,    -1,    74,    75,    72,    -1,    -1,    -1,    76,    -1,
    3984       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3985       -1,    -1,    -1,    -1,    96,    -1,    94,    -1,    -1,    -1,
    3986       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3987       -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
    3988      118,   119,   120,   121,   122,   123,    -1,    -1,    37,    38,
    3989      128,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
    3990       49,    50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,
    3991       -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,
    3992       -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
    3993       79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
    3994       -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
    3995       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3996      109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
    3997      119,   120,   121,   122,   123,    -1,    -1,    37,    38,   128,
    3998       40,    41,    -1,    43,    -1,    -1,    46,    47,    48,    49,
    3999       50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,
    4000       -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,
    4001       -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
    4002       80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
    4003       -1,    -1,    -1,    -1,    94,    37,    38,    -1,    40,    -1,
    4004       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
    4005       -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,
    4006      120,   121,   122,   123,    66,    -1,    -1,    -1,   128,    -1,
    4007       72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
    4008       82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
    4009       -1,    -1,    94,    37,    38,    -1,    40,    -1,    -1,    -1,
    4010       -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
    4011       -1,    -1,    37,    38,    -1,    40,   118,   119,   120,   121,
    4012      122,   123,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
    4013       -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
    4014       84,    66,    86,    87,    -1,    -1,    -1,    72,    -1,    -1,
    4015       94,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    4016       -1,    86,    87,    -1,    -1,   109,    -1,   111,    -1,    94,
    4017       37,    38,    -1,    40,   118,   119,   120,   121,   122,   123,
    4018       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    37,
    4019       38,    -1,    40,   118,   119,   120,   121,   122,   123,    66,
    4020       -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
    4021       -1,    -1,    79,    80,    81,    82,    83,    84,    66,    86,
    4022       87,    -1,    -1,    -1,    72,    -1,    -1,    94,    76,    -1,
    4023       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    4024       -1,    -1,   109,    -1,   111,    -1,    94,    37,    38,    -1,
    4025       40,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
    4026       -1,   109,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
    4027      118,   119,   120,   121,   122,   123,    66,    -1,    -1,    -1,
    4028       -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
    4029       80,    81,    82,    83,    84,    66,    86,    87,    -1,    -1,
    4030       -1,    72,    -1,    -1,    94,    76,    -1,    -1,    79,    80,
    4031       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,   109,
    4032       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,   118,   119,
    4033      120,   121,   122,   123,    -1,    -1,    -1,    -1,   109,    -1,
    4034       -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
    4035      121,   122,   123,     3,     4,     5,     6,     7,     8,     9,
    4036       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    4037       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    4038       30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
     4068      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
    40394069      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    40404070      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4041       -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
    4042       -1,    71,    -1,    -1,    74,    75,     3,     4,     5,     6,
     4071      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
     4072      -1,    -1,    74,    75,     3,     4,     5,     6,     7,     8,
     4073       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     4074      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     4075      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
     4076      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4077      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4078      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
     4079      69,    -1,    71,    -1,    -1,    74,    75,     4,     5,     6,
    40434080       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    40444081      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    40454082      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    4046       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4083      -1,    -1,    39,    -1,    10,    11,    12,    13,    14,    15,
     4084      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     4085      26,    27,    -1,    -1,    30,    31,    32,    33,    34,    35,
     4086      67,    -1,    69,    39,    71,    -1,    -1,    74,    75,    -1,
    40474087      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    40484088      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4049       67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     4,
    4050        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    4051       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    4052       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    4053       -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
    4054       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4055       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4056       -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
    4057       75
     4089      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75
    40584090};
    40594091
     
    40704102     222,   223,   224,   225,   226,   227,   228,   230,   231,   232,
    40714103     233,   234,   235,   236,   237,   239,   240,   241,   242,   243,
    4072      244,   245,   253,   254,   280,   281,   282,   290,   293,   299,
    4073      300,   302,   304,   305,   311,   316,   320,   321,   322,   323,
    4074      324,   325,   326,   327,   347,   364,   365,   366,   367,    72,
     4104     244,   246,   254,   255,   282,   283,   284,   292,   295,   301,
     4105     302,   304,   306,   307,   313,   318,   322,   323,   324,   325,
     4106     326,   327,   328,   329,   349,   366,   367,   368,   369,    72,
    40754107     119,   139,   140,   214,   216,   224,   226,   236,   240,   242,
    4076      281,    82,   109,   309,   310,   311,   309,   309,    72,    74,
    4077       75,    76,   138,   139,   270,   271,   291,   292,    74,    75,
    4078      271,   109,   302,    11,   198,   109,   119,   316,   321,   322,
    4079      323,   325,   326,   327,   112,   134,   111,   217,   224,   226,
    4080      320,   324,   363,   364,   367,   368,   135,   107,   131,   274,
    4081      114,   135,   172,    74,    75,   137,   269,   135,   135,   135,
    4082      116,   135,    74,    75,   109,   119,   306,   315,   316,   317,
    4083      318,   319,   320,   324,   328,   329,   330,   331,   332,   338,
     4108     283,    82,   109,   311,   312,   313,   311,   311,    72,    74,
     4109      75,    76,   138,   139,   272,   273,   293,   294,    74,    75,
     4110     273,   109,   304,    11,   198,   109,   119,   318,   323,   324,
     4111     325,   327,   328,   329,   112,   134,   111,   217,   224,   226,
     4112     322,   326,   365,   366,   369,   370,   135,   107,   131,   276,
     4113     114,   135,   172,    74,    75,   137,   271,   135,   135,   135,
     4114     116,   135,    74,    75,   109,   119,   308,   317,   318,   319,
     4115     320,   321,   322,   326,   330,   331,   332,   333,   334,   340,
    40844116       3,    28,    78,   238,     3,     5,    74,   111,   119,   216,
    4085      227,   231,   234,   243,   282,   320,   324,   367,   214,   216,
    4086      226,   236,   240,   242,   281,   320,   324,    33,   232,   232,
     4117     227,   231,   234,   243,   284,   322,   326,   369,   214,   216,
     4118     226,   236,   240,   242,   283,   322,   326,    33,   232,   232,
    40874119     227,   234,   135,   232,   227,   232,   227,    75,   109,   114,
    4088      271,   282,   114,   271,   232,   227,   116,   135,   135,     0,
    4089      134,   109,   172,   309,   309,   134,   111,   224,   226,   365,
    4090      269,   269,   226,   131,   109,   119,   306,   316,   320,   111,
    4091      119,   367,   303,   229,   311,   109,   287,   109,   109,    51,
     4120     273,   284,   114,   273,   232,   227,   116,   135,   135,     0,
     4121     134,   109,   172,   311,   311,   134,   111,   224,   226,   367,
     4122     271,   271,   226,   131,   109,   119,   308,   318,   322,   111,
     4123     119,   369,   305,   229,   313,   109,   289,   109,   109,    51,
    40924124     109,    37,    38,    40,    66,    72,    76,    79,    80,    81,
    40934125      82,    86,    87,    94,   109,   111,   118,   119,   120,   121,
    40944126     122,   123,   136,   140,   141,   142,   143,   148,   149,   150,
    40954127     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
    4096      161,   163,   165,   224,   273,   289,   363,   368,   226,   110,
     4128     161,   163,   165,   224,   275,   291,   365,   370,   226,   110,
    40974129     110,   110,   110,   110,   110,   110,    74,    75,   111,   224,
    4098      269,   347,   365,   111,   119,   163,   216,   217,   223,   226,
    4099      230,   231,   236,   239,   240,   242,   259,   260,   264,   265,
    4100      266,   267,   281,   347,   359,   360,   361,   362,   367,   368,
    4101      112,   109,   320,   324,   367,   109,   116,   132,   111,   114,
    4102      119,   163,   275,   275,   115,   134,   116,   132,   109,   116,
    4103      132,   116,   132,   116,   132,   309,   132,   316,   317,   318,
    4104      319,   329,   330,   331,   332,   226,   315,   328,    64,   308,
    4105      111,   309,   346,   347,   309,   309,   172,   134,   109,   309,
    4106      346,   309,   309,   226,   306,   109,   109,   225,   226,   224,
    4107      226,   112,   134,   224,   363,   368,   172,   134,   269,   274,
    4108      216,   231,   320,   324,   172,   134,   291,   226,   236,   132,
    4109      226,   226,   289,    40,   111,   224,   246,   247,   248,   249,
    4110      363,   367,   114,   255,   271,   114,   226,   291,   132,   132,
    4111      302,   134,   139,   268,     3,   135,   206,   207,   221,   223,
    4112      226,   134,   308,   109,   308,   163,   316,   226,   109,   134,
    4113      269,   114,    33,    34,    35,   224,   283,   284,   286,   134,
    4114      129,   131,   288,   134,   227,   233,   234,   269,   312,   313,
    4115      314,   109,   141,   109,   148,   109,   148,   150,   109,   148,
     4130     271,   349,   367,   111,   119,   163,   216,   217,   223,   226,
     4131     230,   231,   236,   239,   240,   242,   261,   262,   266,   267,
     4132     268,   269,   283,   349,   361,   362,   363,   364,   369,   370,
     4133     112,   109,   322,   326,   369,   109,   116,   132,   111,   114,
     4134     119,   163,   277,   277,   115,   134,   116,   132,   109,   116,
     4135     132,   116,   132,   116,   132,   311,   132,   318,   319,   320,
     4136     321,   331,   332,   333,   334,   226,   317,   330,    64,   310,
     4137     111,   311,   348,   349,   311,   311,   172,   134,   109,   311,
     4138     348,   311,   311,   226,   308,   109,   109,   225,   226,   224,
     4139     226,   112,   134,   224,   365,   370,   172,   134,   271,   276,
     4140     216,   231,   322,   326,   172,   134,   293,   226,   236,   132,
     4141     226,   226,   291,    40,   111,   224,   247,   248,   249,   250,
     4142     365,   369,   245,   257,   273,   256,   226,   293,   132,   132,
     4143     304,   134,   139,   270,     3,   135,   206,   207,   221,   223,
     4144     226,   134,   310,   109,   310,   163,   318,   226,   109,   134,
     4145     271,   114,    33,    34,    35,   224,   285,   286,   288,   134,
     4146     129,   131,   290,   134,   227,   233,   234,   271,   314,   315,
     4147     316,   109,   141,   109,   148,   109,   148,   150,   109,   148,
    41164148     109,   109,   148,   148,   139,   111,   163,   168,   172,   224,
    4117      272,   363,   112,   134,   150,   150,    82,    85,    86,    87,
     4149     274,   365,   112,   134,   150,   150,    82,    85,    86,    87,
    41184150     109,   111,   113,   114,    97,    98,    99,   100,   101,   102,
    41194151     103,   104,   105,   106,   131,   167,   150,   119,   124,   125,
    41204152     121,   122,    88,    89,    90,    91,   126,   127,    92,    93,
    4121      120,   128,   129,    94,    95,   130,   131,   370,   109,   119,
    4122      342,   343,   344,   345,   346,   110,   116,   109,   346,   347,
    4123      109,   346,   347,   134,   109,   224,   365,   112,   134,   111,
    4124      119,   135,   224,   226,   358,   359,   367,   368,   135,   109,
    4125      111,   119,   316,   333,   334,   335,   336,   337,   338,   339,
    4126      340,   341,   347,   348,   349,   350,   351,   352,   353,   119,
    4127      367,   226,   135,   135,   119,   224,   226,   360,   269,   224,
    4128      347,   360,   269,   109,   134,   134,   134,   112,   134,    72,
    4129       80,   111,   113,   140,   271,   275,   276,   277,   278,   279,
    4130      134,   134,   134,   134,   134,   134,   306,   110,   110,   110,
    4131      110,   110,   110,   110,   315,   328,   109,   274,   112,   206,
    4132      134,   306,   168,   273,   168,   273,   306,   111,   206,   308,
    4133      172,   134,   206,   110,   248,   249,   112,   134,   109,   117,
    4134      119,   250,   252,   315,   316,   328,   346,   354,   355,   356,
    4135      357,   115,   247,   116,   132,   116,   132,   271,   246,   116,
    4136      369,   131,   256,   255,   226,   261,   262,   263,   266,   267,
    4137      110,   116,   172,   134,   119,   163,   134,   223,   226,   260,
    4138      359,   367,   300,   301,   109,   119,   333,   110,   116,   370,
    4139      271,   283,   109,   114,   271,   273,   283,   110,   116,   109,
    4140      141,   110,   117,   272,   272,   272,   111,   139,   145,   163,
    4141      273,   272,   112,   134,   110,   116,   110,   109,   119,   354,
     4153     120,   128,   129,    94,    95,   130,   131,   372,   109,   119,
     4154     344,   345,   346,   347,   348,   110,   116,   109,   348,   349,
     4155     109,   348,   349,   134,   109,   224,   367,   112,   134,   111,
     4156     119,   135,   224,   226,   360,   361,   369,   370,   135,   109,
     4157     111,   119,   318,   335,   336,   337,   338,   339,   340,   341,
     4158     342,   343,   349,   350,   351,   352,   353,   354,   355,   119,
     4159     369,   226,   135,   135,   119,   224,   226,   362,   271,   224,
     4160     349,   362,   271,   109,   134,   134,   134,   112,   134,    72,
     4161      80,   111,   113,   140,   273,   277,   278,   279,   280,   281,
     4162     134,   134,   134,   134,   134,   134,   308,   110,   110,   110,
     4163     110,   110,   110,   110,   317,   330,   109,   276,   112,   206,
     4164     134,   308,   168,   275,   168,   275,   308,   111,   206,   310,
     4165     172,   134,   206,   110,   249,   250,   112,   134,   109,   117,
     4166     119,   251,   253,   317,   318,   330,   348,   356,   357,   358,
     4167     359,   115,   248,   116,   132,   116,   132,   273,   114,   116,
     4168     371,   131,   258,   114,   226,   263,   264,   265,   268,   269,
     4169     110,   116,   172,   134,   119,   163,   134,   223,   226,   262,
     4170     361,   369,   302,   303,   109,   119,   335,   110,   116,   372,
     4171     273,   285,   109,   114,   273,   275,   285,   110,   116,   109,
     4172     141,   110,   117,   274,   274,   274,   111,   139,   145,   163,
     4173     275,   274,   112,   134,   110,   116,   110,   109,   119,   356,
    41424174     110,   116,   163,   111,   139,   111,   144,   145,   134,   111,
    41434175     139,   144,   163,   163,   150,   150,   150,   151,   151,   152,
    41444176     152,   153,   153,   153,   153,   154,   154,   155,   156,   157,
    4145      158,   159,   117,   168,   163,   134,   343,   344,   345,   226,
    4146      342,   309,   309,   163,   273,   134,   268,   119,   134,   224,
    4147      347,   360,   226,   230,   112,   134,   112,   367,   112,   109,
    4148      134,   316,   334,   335,   336,   339,   349,   350,   351,   112,
    4149      134,   226,   333,   337,   348,   109,   309,   352,   370,   309,
    4150      309,   370,   109,   309,   352,   309,   309,   309,   309,   347,
    4151      224,   358,   368,   269,   112,   116,   112,   116,   370,   224,
    4152      360,   370,   257,   258,   259,   260,   257,   257,   269,   163,
    4153      134,   111,   271,   117,   116,   369,   275,    80,   111,   117,
    4154      279,    29,   208,   209,   269,   257,   139,   306,   139,   308,
    4155      109,   346,   347,   109,   346,   347,   141,   347,   172,   261,
     4177     158,   159,   117,   168,   163,   134,   345,   346,   347,   226,
     4178     344,   311,   311,   163,   275,   134,   270,   119,   134,   224,
     4179     349,   362,   226,   230,   112,   134,   112,   369,   112,   109,
     4180     134,   318,   336,   337,   338,   341,   351,   352,   353,   112,
     4181     134,   226,   335,   339,   350,   109,   311,   354,   372,   311,
     4182     311,   372,   109,   311,   354,   311,   311,   311,   311,   349,
     4183     224,   360,   370,   271,   112,   116,   112,   116,   372,   224,
     4184     362,   372,   259,   260,   261,   262,   259,   259,   271,   163,
     4185     134,   111,   273,   117,   116,   371,   277,    80,   111,   117,
     4186     281,    29,   208,   209,   271,   259,   139,   308,   139,   310,
     4187     109,   348,   349,   109,   348,   349,   141,   349,   172,   263,
    41564188     110,   110,   110,   110,   112,   172,   206,   172,   114,   132,
    4157      132,   111,   316,   355,   356,   357,   161,   162,   226,   354,
    4158      251,   252,   251,   309,   309,   271,   309,   115,   271,   115,
    4159      162,   369,   135,   135,   139,   221,   135,   135,   257,   109,
    4160      119,   367,   135,   115,   226,   284,   285,   135,   134,   134,
    4161      109,   135,   110,   313,   168,   169,   117,   132,   111,   141,
     4189     132,   111,   318,   357,   358,   359,   161,   162,   226,   356,
     4190     252,   253,   252,   311,   311,   273,   311,   247,   273,   115,
     4191     162,   257,   135,   135,   139,   221,   135,   135,   259,   109,
     4192     119,   369,   135,   115,   226,   286,   287,   135,   134,   134,
     4193     109,   135,   110,   315,   168,   169,   117,   132,   111,   141,
    41624194     199,   200,   201,   110,   116,   110,   134,   117,   110,   110,
    41634195     110,   163,   226,   114,   150,   165,   163,   164,   166,   116,
    41644196     135,   134,   134,   110,   116,   163,   134,   115,   161,   117,
    4165      261,   110,   110,   110,   342,   261,   110,   257,   224,   360,
    4166      111,   119,   163,   163,   226,   339,   261,   110,   110,   110,
    4167      110,   110,   110,   110,     7,   226,   333,   337,   348,   134,
    4168      134,   370,   134,   134,   110,   135,   135,   135,   135,   274,
    4169      135,   161,   162,   163,   307,   134,   275,   277,   115,   134,
    4170      210,   271,    40,    41,    43,    46,    47,    48,    49,    50,
     4197     263,   110,   110,   110,   344,   263,   110,   259,   224,   362,
     4198     111,   119,   163,   163,   226,   341,   263,   110,   110,   110,
     4199     110,   110,   110,   110,     7,   226,   335,   339,   350,   134,
     4200     134,   372,   134,   134,   110,   135,   135,   135,   135,   276,
     4201     135,   161,   162,   163,   309,   134,   277,   279,   115,   134,
     4202     210,   273,    40,    41,    43,    46,    47,    48,    49,    50,
    41714203      51,    52,    53,    57,    61,    62,   111,   128,   139,   169,
    41724204     170,   171,   172,   173,   174,   176,   177,   189,   191,   192,
    4173      197,   211,   305,    29,   135,   131,   274,   134,   134,   110,
    4174      135,   172,   246,   112,   110,   110,   110,   354,   250,   256,
    4175      115,   110,   116,   112,   112,   135,   226,   116,   370,   287,
    4176      110,   283,   214,   216,   224,   295,   296,   297,   298,   289,
    4177      110,   110,   117,   162,   109,   110,   117,   116,   139,   163,
    4178      163,   276,   116,   135,   166,   112,   139,   146,   147,   163,
    4179      145,   135,   146,   161,   165,   135,   109,   346,   347,   135,
    4180      135,   134,   135,   135,   135,   163,   110,   135,   109,   346,
    4181      347,   109,   352,   109,   352,   347,   225,     7,   119,   135,
    4182      163,   261,   261,   260,   264,   264,   265,   116,   116,   110,
    4183      110,   112,    96,   123,   135,   135,   146,   275,   163,   116,
    4184      132,   211,   215,   226,   230,   109,   109,   170,   109,   109,
    4185      132,   139,   132,   139,   119,   139,   169,   109,   172,   164,
    4186      164,   112,   143,   117,   132,   135,   134,   135,   210,   110,
    4187      163,   261,   261,   309,   110,   115,   109,   346,   347,   134,
    4188      110,   134,   135,   306,   115,   134,   135,   135,   110,   114,
    4189      199,   112,   162,   132,   199,   201,   110,   116,   135,   369,
    4190      164,   112,   135,    85,   113,   116,   135,   135,   112,   135,
    4191      110,   134,   110,   110,   112,   112,   112,   135,   110,   134,
    4192      134,   134,   163,   163,   135,   112,   135,   135,   135,   135,
    4193      134,   134,   162,   162,   112,   112,   135,   135,   271,   226,
    4194      168,   168,    47,   168,   134,   132,   132,   168,   132,   132,
    4195      168,    58,    59,    60,   193,   194,   195,   132,    63,   132,
    4196      114,   309,   174,   115,   132,   135,   135,   134,    96,   266,
    4197      267,   110,   296,   116,   132,   116,   132,   115,   294,   117,
    4198      141,   110,   110,   117,   166,   112,   115,   112,   111,   147,
    4199      111,   147,   147,   112,   112,   112,   261,   112,   261,   261,
    4200      261,   135,   135,   112,   112,   110,   110,   112,   116,    96,
    4201      260,    96,   135,   112,   112,   110,   110,   109,   110,   169,
    4202      190,   211,   132,   110,   109,   109,   172,   195,    58,    59,
    4203      163,   144,   170,   110,   110,   261,   114,   134,   134,   295,
    4204      141,   202,   109,   132,   202,   135,   117,   134,   134,   135,
    4205      135,   135,   135,   112,   112,   134,   135,   112,   170,    44,
    4206       45,   114,   180,   181,   182,   168,   170,   135,   110,   169,
    4207      114,   182,    96,   134,    96,   134,   109,   109,   132,   115,
    4208      135,   134,   269,   306,   115,   116,   117,   162,   110,   112,
    4209      163,   146,   146,   110,   110,   110,   110,   264,    42,   162,
    4210      178,   179,   307,   117,   134,   170,   180,   110,   132,   170,
    4211      132,   134,   110,   134,   110,   134,    96,   134,    96,   134,
    4212      132,   110,   295,   141,   139,   203,   110,   132,   117,   135,
    4213      135,   170,    96,   116,   117,   135,   204,   205,   211,   132,
    4214      169,   169,   204,   172,   196,   224,   363,   172,   196,   110,
    4215      134,   110,   134,   115,   110,   116,   163,   112,   112,   162,
    4216      178,   181,   183,   184,   134,   132,   181,   185,   186,   135,
    4217      109,   119,   306,   354,   139,   135,   172,   196,   172,   196,
    4218      109,   132,   139,   170,   175,   115,   181,   211,   169,    56,
    4219      175,   188,   115,   181,   110,   226,   110,   135,   135,   289,
    4220      170,   175,   132,   187,   188,   175,   188,   172,   172,   110,
    4221      110,   110,   187,   135,   135,   172,   172,   135,   135
     4205     197,   211,   307,    29,   135,   131,   276,   134,   134,   110,
     4206     135,   172,   247,   112,   110,   110,   110,   356,   251,   115,
     4207     258,   371,   110,   116,   112,   112,   135,   226,   116,   372,
     4208     289,   110,   285,   214,   216,   224,   297,   298,   299,   300,
     4209     291,   110,   110,   117,   162,   109,   110,   117,   116,   139,
     4210     163,   163,   278,   116,   135,   166,   112,   139,   146,   147,
     4211     163,   145,   135,   146,   161,   165,   135,   109,   348,   349,
     4212     135,   135,   134,   135,   135,   135,   163,   110,   135,   109,
     4213     348,   349,   109,   354,   109,   354,   349,   225,     7,   119,
     4214     135,   163,   263,   263,   262,   266,   266,   267,   116,   116,
     4215     110,   110,   112,    96,   123,   135,   135,   146,   277,   163,
     4216     116,   132,   211,   215,   226,   230,   109,   109,   170,   109,
     4217     109,   132,   139,   132,   139,   119,   139,   169,   109,   172,
     4218     164,   164,   112,   143,   117,   132,   135,   134,   135,   210,
     4219     110,   163,   263,   263,   311,   110,   115,   109,   348,   349,
     4220     115,   134,   110,   134,   135,   308,   115,   134,   135,   135,
     4221     110,   114,   199,   112,   162,   132,   199,   201,   110,   116,
     4222     135,   371,   164,   112,   135,    85,   113,   116,   135,   135,
     4223     112,   135,   110,   134,   110,   110,   112,   112,   112,   135,
     4224     110,   134,   134,   134,   163,   163,   135,   112,   135,   135,
     4225     135,   135,   134,   134,   162,   162,   112,   112,   135,   135,
     4226     273,   226,   168,   168,    47,   168,   134,   132,   132,   168,
     4227     132,   132,   168,    58,    59,    60,   193,   194,   195,   132,
     4228      63,   132,   114,   311,   174,   115,   132,   135,   135,   134,
     4229      96,   268,   269,   110,   298,   116,   132,   116,   132,   115,
     4230     296,   117,   141,   110,   110,   117,   166,   112,   115,   112,
     4231     111,   147,   111,   147,   147,   112,   112,   112,   263,   112,
     4232     263,   263,   263,   135,   135,   112,   112,   110,   110,   112,
     4233     116,    96,   262,    96,   135,   112,   112,   110,   110,   109,
     4234     110,   169,   190,   211,   132,   110,   109,   109,   172,   195,
     4235      58,    59,   163,   144,   170,   110,   110,   263,   114,   134,
     4236     134,   297,   141,   202,   109,   132,   202,   135,   117,   134,
     4237     134,   135,   135,   135,   135,   112,   112,   134,   135,   112,
     4238     170,    44,    45,   114,   180,   181,   182,   168,   170,   135,
     4239     110,   169,   114,   182,    96,   134,    96,   134,   109,   109,
     4240     132,   115,   135,   134,   271,   308,   115,   116,   117,   162,
     4241     110,   112,   163,   146,   146,   110,   110,   110,   110,   266,
     4242      42,   162,   178,   179,   309,   117,   134,   170,   180,   110,
     4243     132,   170,   132,   134,   110,   134,   110,   134,    96,   134,
     4244      96,   134,   132,   110,   297,   141,   139,   203,   110,   132,
     4245     117,   135,   135,   170,    96,   116,   117,   135,   204,   205,
     4246     211,   132,   169,   169,   204,   172,   196,   224,   365,   172,
     4247     196,   110,   134,   110,   134,   115,   110,   116,   163,   112,
     4248     112,   162,   178,   181,   183,   184,   134,   132,   181,   185,
     4249     186,   135,   109,   119,   308,   356,   139,   135,   172,   196,
     4250     172,   196,   109,   132,   139,   170,   175,   115,   181,   211,
     4251     169,    56,   175,   188,   115,   181,   110,   226,   110,   135,
     4252     135,   291,   170,   175,   132,   187,   188,   175,   188,   172,
     4253     172,   110,   110,   110,   187,   135,   135,   172,   172,   135,
     4254     135
    42224255};
    42234256
     
    51805213/* Line 1806 of yacc.c  */
    51815214#line 374 "parser.yy"
    5182     { (yyval.en) = 0; }
     5215    { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }
    51835216    break;
    51845217
     
    70317064/* Line 1806 of yacc.c  */
    70327065#line 1440 "parser.yy"
    7033     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); }
     7066    {
     7067                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     7068                        (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 );
     7069                }
    70347070    break;
    70357071
     
    70377073
    70387074/* Line 1806 of yacc.c  */
    7039 #line 1442 "parser.yy"
    7040     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); }
     7075#line 1445 "parser.yy"
     7076    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    70417077    break;
    70427078
     
    70447080
    70457081/* Line 1806 of yacc.c  */
    7046 #line 1444 "parser.yy"
     7082#line 1447 "parser.yy"
     7083    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl)); }
     7084    break;
     7085
     7086  case 369:
     7087
     7088/* Line 1806 of yacc.c  */
     7089#line 1449 "parser.yy"
    70477090    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
    70487091    break;
    70497092
    7050   case 369:
    7051 
    7052 /* Line 1806 of yacc.c  */
    7053 #line 1446 "parser.yy"
     7093  case 370:
     7094
     7095/* Line 1806 of yacc.c  */
     7096#line 1451 "parser.yy"
    70547097    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    70557098    break;
    70567099
    7057   case 370:
    7058 
    7059 /* Line 1806 of yacc.c  */
    7060 #line 1451 "parser.yy"
     7100  case 371:
     7101
     7102/* Line 1806 of yacc.c  */
     7103#line 1456 "parser.yy"
    70617104    { (yyval.aggKey) = DeclarationNode::Struct; }
    70627105    break;
    70637106
    7064   case 371:
    7065 
    7066 /* Line 1806 of yacc.c  */
    7067 #line 1453 "parser.yy"
     7107  case 372:
     7108
     7109/* Line 1806 of yacc.c  */
     7110#line 1458 "parser.yy"
    70687111    { (yyval.aggKey) = DeclarationNode::Union; }
    70697112    break;
    70707113
    7071   case 372:
    7072 
    7073 /* Line 1806 of yacc.c  */
    7074 #line 1458 "parser.yy"
     7114  case 373:
     7115
     7116/* Line 1806 of yacc.c  */
     7117#line 1463 "parser.yy"
    70757118    { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
    70767119    break;
    70777120
    7078   case 373:
    7079 
    7080 /* Line 1806 of yacc.c  */
    7081 #line 1460 "parser.yy"
     7121  case 374:
     7122
     7123/* Line 1806 of yacc.c  */
     7124#line 1465 "parser.yy"
    70827125    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    70837126    break;
    70847127
    7085   case 375:
    7086 
    7087 /* Line 1806 of yacc.c  */
    7088 #line 1466 "parser.yy"
     7128  case 376:
     7129
     7130/* Line 1806 of yacc.c  */
     7131#line 1471 "parser.yy"
    70897132    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    70907133    break;
    70917134
    7092   case 377:
    7093 
    7094 /* Line 1806 of yacc.c  */
    7095 #line 1469 "parser.yy"
     7135  case 378:
     7136
     7137/* Line 1806 of yacc.c  */
     7138#line 1474 "parser.yy"
    70967139    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    70977140    break;
    70987141
    7099   case 379:
    7100 
    7101 /* Line 1806 of yacc.c  */
    7102 #line 1475 "parser.yy"
     7142  case 380:
     7143
     7144/* Line 1806 of yacc.c  */
     7145#line 1480 "parser.yy"
    71037146    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
    71047147    break;
    71057148
    7106   case 380:
    7107 
    7108 /* Line 1806 of yacc.c  */
    7109 #line 1477 "parser.yy"
     7149  case 381:
     7150
     7151/* Line 1806 of yacc.c  */
     7152#line 1482 "parser.yy"
    71107153    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    71117154    break;
    71127155
    7113   case 381:
    7114 
    7115 /* Line 1806 of yacc.c  */
    7116 #line 1479 "parser.yy"
     7156  case 382:
     7157
     7158/* Line 1806 of yacc.c  */
     7159#line 1484 "parser.yy"
    71177160    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
    71187161    break;
    71197162
    7120   case 382:
    7121 
    7122 /* Line 1806 of yacc.c  */
    7123 #line 1484 "parser.yy"
     7163  case 383:
     7164
     7165/* Line 1806 of yacc.c  */
     7166#line 1489 "parser.yy"
    71247167    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    71257168    break;
    71267169
    7127   case 383:
    7128 
    7129 /* Line 1806 of yacc.c  */
    7130 #line 1486 "parser.yy"
     7170  case 384:
     7171
     7172/* Line 1806 of yacc.c  */
     7173#line 1491 "parser.yy"
    71317174    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    71327175    break;
    71337176
    7134   case 384:
    7135 
    7136 /* Line 1806 of yacc.c  */
    7137 #line 1491 "parser.yy"
     7177  case 385:
     7178
     7179/* Line 1806 of yacc.c  */
     7180#line 1496 "parser.yy"
    71387181    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    71397182    break;
    71407183
    7141   case 385:
    7142 
    7143 /* Line 1806 of yacc.c  */
    7144 #line 1493 "parser.yy"
     7184  case 386:
     7185
     7186/* Line 1806 of yacc.c  */
     7187#line 1498 "parser.yy"
    71457188    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    71467189    break;
    71477190
    7148   case 386:
    7149 
    7150 /* Line 1806 of yacc.c  */
    7151 #line 1496 "parser.yy"
     7191  case 387:
     7192
     7193/* Line 1806 of yacc.c  */
     7194#line 1501 "parser.yy"
    71527195    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    71537196    break;
    71547197
    7155   case 387:
    7156 
    7157 /* Line 1806 of yacc.c  */
    7158 #line 1499 "parser.yy"
     7198  case 388:
     7199
     7200/* Line 1806 of yacc.c  */
     7201#line 1504 "parser.yy"
    71597202    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    71607203    break;
    71617204
    7162   case 389:
    7163 
    7164 /* Line 1806 of yacc.c  */
    7165 #line 1505 "parser.yy"
     7205  case 390:
     7206
     7207/* Line 1806 of yacc.c  */
     7208#line 1510 "parser.yy"
    71667209    { (yyval.en) = 0; }
    71677210    break;
    71687211
    7169   case 390:
    7170 
    7171 /* Line 1806 of yacc.c  */
    7172 #line 1507 "parser.yy"
     7212  case 391:
     7213
     7214/* Line 1806 of yacc.c  */
     7215#line 1512 "parser.yy"
    71737216    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    71747217    break;
    71757218
    7176   case 391:
    7177 
    7178 /* Line 1806 of yacc.c  */
    7179 #line 1512 "parser.yy"
     7219  case 392:
     7220
     7221/* Line 1806 of yacc.c  */
     7222#line 1517 "parser.yy"
    71807223    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    71817224    break;
    71827225
    7183   case 393:
    7184 
    7185 /* Line 1806 of yacc.c  */
    7186 #line 1521 "parser.yy"
     7226  case 394:
     7227
     7228/* Line 1806 of yacc.c  */
     7229#line 1526 "parser.yy"
    71877230    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    71887231    break;
    71897232
    7190   case 394:
    7191 
    7192 /* Line 1806 of yacc.c  */
    7193 #line 1523 "parser.yy"
    7194     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }
    7195     break;
    7196 
    71977233  case 395:
    71987234
    71997235/* Line 1806 of yacc.c  */
    7200 #line 1525 "parser.yy"
    7201     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
     7236#line 1528 "parser.yy"
     7237    {
     7238                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     7239                        (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 );
     7240                }
    72027241    break;
    72037242
     
    72057244
    72067245/* Line 1806 of yacc.c  */
    7207 #line 1530 "parser.yy"
     7246#line 1533 "parser.yy"
     7247    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     7248    break;
     7249
     7250  case 397:
     7251
     7252/* Line 1806 of yacc.c  */
     7253#line 1535 "parser.yy"
     7254    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     7255    break;
     7256
     7257  case 398:
     7258
     7259/* Line 1806 of yacc.c  */
     7260#line 1540 "parser.yy"
    72087261    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    72097262    break;
    72107263
    7211   case 397:
    7212 
    7213 /* Line 1806 of yacc.c  */
    7214 #line 1532 "parser.yy"
     7264  case 399:
     7265
     7266/* Line 1806 of yacc.c  */
     7267#line 1542 "parser.yy"
    72157268    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    72167269    break;
    72177270
    7218   case 398:
    7219 
    7220 /* Line 1806 of yacc.c  */
    7221 #line 1537 "parser.yy"
     7271  case 400:
     7272
     7273/* Line 1806 of yacc.c  */
     7274#line 1547 "parser.yy"
    72227275    { (yyval.en) = 0; }
    72237276    break;
    72247277
    7225   case 399:
    7226 
    7227 /* Line 1806 of yacc.c  */
    7228 #line 1539 "parser.yy"
     7278  case 401:
     7279
     7280/* Line 1806 of yacc.c  */
     7281#line 1549 "parser.yy"
    72297282    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    72307283    break;
    72317284
    7232   case 400:
    7233 
    7234 /* Line 1806 of yacc.c  */
    7235 #line 1546 "parser.yy"
     7285  case 402:
     7286
     7287/* Line 1806 of yacc.c  */
     7288#line 1556 "parser.yy"
    72367289    { (yyval.decl) = 0; }
    72377290    break;
    72387291
    7239   case 404:
    7240 
    7241 /* Line 1806 of yacc.c  */
    7242 #line 1554 "parser.yy"
     7292  case 406:
     7293
     7294/* Line 1806 of yacc.c  */
     7295#line 1564 "parser.yy"
    72437296    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72447297    break;
    72457298
    7246   case 405:
    7247 
    7248 /* Line 1806 of yacc.c  */
    7249 #line 1556 "parser.yy"
     7299  case 407:
     7300
     7301/* Line 1806 of yacc.c  */
     7302#line 1566 "parser.yy"
    72507303    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    72517304    break;
    72527305
    7253   case 406:
    7254 
    7255 /* Line 1806 of yacc.c  */
    7256 #line 1558 "parser.yy"
     7306  case 408:
     7307
     7308/* Line 1806 of yacc.c  */
     7309#line 1568 "parser.yy"
    72577310    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    72587311    break;
    72597312
    7260   case 408:
    7261 
    7262 /* Line 1806 of yacc.c  */
    7263 #line 1566 "parser.yy"
    7264     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7265     break;
    7266 
    7267   case 409:
    7268 
    7269 /* Line 1806 of yacc.c  */
    7270 #line 1568 "parser.yy"
    7271     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7272     break;
    7273 
    72747313  case 410:
    7275 
    7276 /* Line 1806 of yacc.c  */
    7277 #line 1570 "parser.yy"
    7278     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    7279     break;
    7280 
    7281   case 412:
    72827314
    72837315/* Line 1806 of yacc.c  */
     
    72867318    break;
    72877319
    7288   case 413:
    7289 
    7290 /* Line 1806 of yacc.c  */
    7291 #line 1581 "parser.yy"
     7320  case 411:
     7321
     7322/* Line 1806 of yacc.c  */
     7323#line 1578 "parser.yy"
     7324    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7325    break;
     7326
     7327  case 412:
     7328
     7329/* Line 1806 of yacc.c  */
     7330#line 1580 "parser.yy"
     7331    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     7332    break;
     7333
     7334  case 414:
     7335
     7336/* Line 1806 of yacc.c  */
     7337#line 1586 "parser.yy"
     7338    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7339    break;
     7340
     7341  case 415:
     7342
     7343/* Line 1806 of yacc.c  */
     7344#line 1591 "parser.yy"
    72927345    { (yyval.decl) = 0; }
    72937346    break;
    72947347
    7295   case 416:
    7296 
    7297 /* Line 1806 of yacc.c  */
    7298 #line 1588 "parser.yy"
     7348  case 418:
     7349
     7350/* Line 1806 of yacc.c  */
     7351#line 1598 "parser.yy"
    72997352    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    73007353    break;
    73017354
    7302   case 419:
    7303 
    7304 /* Line 1806 of yacc.c  */
    7305 #line 1595 "parser.yy"
     7355  case 421:
     7356
     7357/* Line 1806 of yacc.c  */
     7358#line 1605 "parser.yy"
    73067359    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    73077360    break;
    73087361
    7309   case 420:
    7310 
    7311 /* Line 1806 of yacc.c  */
    7312 #line 1597 "parser.yy"
     7362  case 422:
     7363
     7364/* Line 1806 of yacc.c  */
     7365#line 1607 "parser.yy"
    73137366    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    73147367    break;
    73157368
    7316   case 422:
    7317 
    7318 /* Line 1806 of yacc.c  */
    7319 #line 1606 "parser.yy"
     7369  case 424:
     7370
     7371/* Line 1806 of yacc.c  */
     7372#line 1616 "parser.yy"
    73207373    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    73217374    break;
    73227375
    7323   case 423:
    7324 
    7325 /* Line 1806 of yacc.c  */
    7326 #line 1609 "parser.yy"
     7376  case 425:
     7377
     7378/* Line 1806 of yacc.c  */
     7379#line 1619 "parser.yy"
    73277380    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    73287381    break;
    73297382
    7330   case 424:
    7331 
    7332 /* Line 1806 of yacc.c  */
    7333 #line 1611 "parser.yy"
     7383  case 426:
     7384
     7385/* Line 1806 of yacc.c  */
     7386#line 1621 "parser.yy"
    73347387    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
    73357388    break;
    73367389
    7337   case 429:
    7338 
    7339 /* Line 1806 of yacc.c  */
    7340 #line 1621 "parser.yy"
     7390  case 431:
     7391
     7392/* Line 1806 of yacc.c  */
     7393#line 1631 "parser.yy"
    73417394    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    73427395    break;
    73437396
    7344   case 431:
    7345 
    7346 /* Line 1806 of yacc.c  */
    7347 #line 1627 "parser.yy"
     7397  case 433:
     7398
     7399/* Line 1806 of yacc.c  */
     7400#line 1637 "parser.yy"
    73487401    {
    73497402                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    73527405    break;
    73537406
    7354   case 432:
    7355 
    7356 /* Line 1806 of yacc.c  */
    7357 #line 1632 "parser.yy"
     7407  case 434:
     7408
     7409/* Line 1806 of yacc.c  */
     7410#line 1642 "parser.yy"
    73587411    {
    73597412                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    73627415    break;
    73637416
    7364   case 434:
    7365 
    7366 /* Line 1806 of yacc.c  */
    7367 #line 1641 "parser.yy"
     7417  case 436:
     7418
     7419/* Line 1806 of yacc.c  */
     7420#line 1651 "parser.yy"
    73687421    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73697422    break;
    73707423
    7371   case 435:
    7372 
    7373 /* Line 1806 of yacc.c  */
    7374 #line 1650 "parser.yy"
     7424  case 437:
     7425
     7426/* Line 1806 of yacc.c  */
     7427#line 1660 "parser.yy"
    73757428    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    73767429    break;
    73777430
    7378   case 436:
    7379 
    7380 /* Line 1806 of yacc.c  */
    7381 #line 1652 "parser.yy"
     7431  case 438:
     7432
     7433/* Line 1806 of yacc.c  */
     7434#line 1662 "parser.yy"
    73827435    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    73837436    break;
    73847437
    7385   case 448:
    7386 
    7387 /* Line 1806 of yacc.c  */
    7388 #line 1677 "parser.yy"
     7438  case 450:
     7439
     7440/* Line 1806 of yacc.c  */
     7441#line 1687 "parser.yy"
    73897442    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73907443    break;
    73917444
    7392   case 452:
    7393 
    7394 /* Line 1806 of yacc.c  */
    7395 #line 1685 "parser.yy"
     7445  case 454:
     7446
     7447/* Line 1806 of yacc.c  */
     7448#line 1695 "parser.yy"
    73967449    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73977450    break;
    73987451
    7399   case 453:
    7400 
    7401 /* Line 1806 of yacc.c  */
    7402 #line 1690 "parser.yy"
     7452  case 455:
     7453
     7454/* Line 1806 of yacc.c  */
     7455#line 1700 "parser.yy"
    74037456    { (yyval.in) = 0; }
    74047457    break;
    74057458
    7406   case 454:
    7407 
    7408 /* Line 1806 of yacc.c  */
    7409 #line 1692 "parser.yy"
     7459  case 456:
     7460
     7461/* Line 1806 of yacc.c  */
     7462#line 1702 "parser.yy"
    74107463    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    74117464    break;
    74127465
    7413   case 455:
    7414 
    7415 /* Line 1806 of yacc.c  */
    7416 #line 1694 "parser.yy"
     7466  case 457:
     7467
     7468/* Line 1806 of yacc.c  */
     7469#line 1704 "parser.yy"
    74177470    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    74187471    break;
    74197472
    7420   case 456:
    7421 
    7422 /* Line 1806 of yacc.c  */
    7423 #line 1698 "parser.yy"
     7473  case 458:
     7474
     7475/* Line 1806 of yacc.c  */
     7476#line 1708 "parser.yy"
    74247477    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
    74257478    break;
    74267479
    7427   case 457:
    7428 
    7429 /* Line 1806 of yacc.c  */
    7430 #line 1699 "parser.yy"
     7480  case 459:
     7481
     7482/* Line 1806 of yacc.c  */
     7483#line 1709 "parser.yy"
    74317484    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
    74327485    break;
    74337486
    7434   case 458:
    7435 
    7436 /* Line 1806 of yacc.c  */
    7437 #line 1704 "parser.yy"
     7487  case 460:
     7488
     7489/* Line 1806 of yacc.c  */
     7490#line 1714 "parser.yy"
    74387491    { (yyval.in) = 0; }
    74397492    break;
    74407493
    7441   case 460:
    7442 
    7443 /* Line 1806 of yacc.c  */
    7444 #line 1706 "parser.yy"
     7494  case 462:
     7495
     7496/* Line 1806 of yacc.c  */
     7497#line 1716 "parser.yy"
    74457498    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    74467499    break;
    74477500
    7448   case 461:
    7449 
    7450 /* Line 1806 of yacc.c  */
    7451 #line 1707 "parser.yy"
     7501  case 463:
     7502
     7503/* Line 1806 of yacc.c  */
     7504#line 1717 "parser.yy"
    74527505    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
    74537506    break;
    74547507
    7455   case 462:
    7456 
    7457 /* Line 1806 of yacc.c  */
    7458 #line 1709 "parser.yy"
     7508  case 464:
     7509
     7510/* Line 1806 of yacc.c  */
     7511#line 1719 "parser.yy"
    74597512    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    74607513    break;
    74617514
    7462   case 464:
    7463 
    7464 /* Line 1806 of yacc.c  */
    7465 #line 1725 "parser.yy"
     7515  case 466:
     7516
     7517/* Line 1806 of yacc.c  */
     7518#line 1735 "parser.yy"
    74667519    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
    74677520    break;
    74687521
    7469   case 466:
    7470 
    7471 /* Line 1806 of yacc.c  */
    7472 #line 1731 "parser.yy"
     7522  case 468:
     7523
     7524/* Line 1806 of yacc.c  */
     7525#line 1741 "parser.yy"
    74737526    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
    74747527    break;
    74757528
    7476   case 467:
    7477 
    7478 /* Line 1806 of yacc.c  */
    7479 #line 1739 "parser.yy"
     7529  case 469:
     7530
     7531/* Line 1806 of yacc.c  */
     7532#line 1749 "parser.yy"
    74807533    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
    74817534    break;
    74827535
    7483   case 468:
    7484 
    7485 /* Line 1806 of yacc.c  */
    7486 #line 1741 "parser.yy"
     7536  case 470:
     7537
     7538/* Line 1806 of yacc.c  */
     7539#line 1751 "parser.yy"
    74877540    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
    74887541    break;
    74897542
    7490   case 469:
    7491 
    7492 /* Line 1806 of yacc.c  */
    7493 #line 1744 "parser.yy"
     7543  case 471:
     7544
     7545/* Line 1806 of yacc.c  */
     7546#line 1754 "parser.yy"
    74947547    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    74957548    break;
    74967549
    7497   case 470:
    7498 
    7499 /* Line 1806 of yacc.c  */
    7500 #line 1746 "parser.yy"
     7550  case 472:
     7551
     7552/* Line 1806 of yacc.c  */
     7553#line 1756 "parser.yy"
    75017554    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    75027555    break;
    75037556
    7504   case 471:
    7505 
    7506 /* Line 1806 of yacc.c  */
    7507 #line 1748 "parser.yy"
     7557  case 473:
     7558
     7559/* Line 1806 of yacc.c  */
     7560#line 1758 "parser.yy"
    75087561    { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
    75097562    break;
    75107563
    7511   case 472:
    7512 
    7513 /* Line 1806 of yacc.c  */
    7514 #line 1750 "parser.yy"
     7564  case 474:
     7565
     7566/* Line 1806 of yacc.c  */
     7567#line 1760 "parser.yy"
    75157568    { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
    75167569    break;
    75177570
    7518   case 474:
    7519 
    7520 /* Line 1806 of yacc.c  */
    7521 #line 1774 "parser.yy"
    7522     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    7523     break;
    7524 
    7525   case 475:
    7526 
    7527 /* Line 1806 of yacc.c  */
    7528 #line 1776 "parser.yy"
    7529     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7530     break;
    7531 
    75327571  case 476:
    7533 
    7534 /* Line 1806 of yacc.c  */
    7535 #line 1778 "parser.yy"
    7536     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    7537     break;
    7538 
    7539   case 478:
    75407572
    75417573/* Line 1806 of yacc.c  */
     
    75447576    break;
    75457577
    7546   case 479:
     7578  case 477:
    75477579
    75487580/* Line 1806 of yacc.c  */
     
    75517583    break;
    75527584
     7585  case 478:
     7586
     7587/* Line 1806 of yacc.c  */
     7588#line 1788 "parser.yy"
     7589    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     7590    break;
     7591
    75537592  case 480:
    75547593
    75557594/* Line 1806 of yacc.c  */
    7556 #line 1791 "parser.yy"
     7595#line 1794 "parser.yy"
     7596    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     7597    break;
     7598
     7599  case 481:
     7600
     7601/* Line 1806 of yacc.c  */
     7602#line 1796 "parser.yy"
     7603    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     7604    break;
     7605
     7606  case 482:
     7607
     7608/* Line 1806 of yacc.c  */
     7609#line 1801 "parser.yy"
    75577610    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    75587611    break;
    75597612
    7560   case 482:
    7561 
    7562 /* Line 1806 of yacc.c  */
    7563 #line 1797 "parser.yy"
     7613  case 484:
     7614
     7615/* Line 1806 of yacc.c  */
     7616#line 1807 "parser.yy"
    75647617    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    75657618    break;
    75667619
    7567   case 483:
    7568 
    7569 /* Line 1806 of yacc.c  */
    7570 #line 1802 "parser.yy"
     7620  case 485:
     7621
     7622/* Line 1806 of yacc.c  */
     7623#line 1812 "parser.yy"
    75717624    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    75727625    break;
    75737626
    7574   case 484:
    7575 
    7576 /* Line 1806 of yacc.c  */
    7577 #line 1804 "parser.yy"
     7627  case 486:
     7628
     7629/* Line 1806 of yacc.c  */
     7630#line 1814 "parser.yy"
    75787631    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
    75797632    break;
    75807633
    7581   case 486:
    7582 
    7583 /* Line 1806 of yacc.c  */
    7584 #line 1810 "parser.yy"
     7634  case 488:
     7635
     7636/* Line 1806 of yacc.c  */
     7637#line 1820 "parser.yy"
    75857638    { (yyval.tclass) = DeclarationNode::Type; }
    75867639    break;
    75877640
    7588   case 487:
    7589 
    7590 /* Line 1806 of yacc.c  */
    7591 #line 1812 "parser.yy"
     7641  case 489:
     7642
     7643/* Line 1806 of yacc.c  */
     7644#line 1822 "parser.yy"
    75927645    { (yyval.tclass) = DeclarationNode::Ftype; }
    75937646    break;
    75947647
    7595   case 488:
    7596 
    7597 /* Line 1806 of yacc.c  */
    7598 #line 1814 "parser.yy"
     7648  case 490:
     7649
     7650/* Line 1806 of yacc.c  */
     7651#line 1824 "parser.yy"
    75997652    { (yyval.tclass) = DeclarationNode::Dtype; }
    76007653    break;
    76017654
    7602   case 489:
    7603 
    7604 /* Line 1806 of yacc.c  */
    7605 #line 1819 "parser.yy"
     7655  case 491:
     7656
     7657/* Line 1806 of yacc.c  */
     7658#line 1829 "parser.yy"
    76067659    { (yyval.decl) = 0; }
    76077660    break;
    76087661
    7609   case 490:
    7610 
    7611 /* Line 1806 of yacc.c  */
    7612 #line 1821 "parser.yy"
     7662  case 492:
     7663
     7664/* Line 1806 of yacc.c  */
     7665#line 1831 "parser.yy"
    76137666    { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    76147667    break;
    76157668
    7616   case 491:
    7617 
    7618 /* Line 1806 of yacc.c  */
    7619 #line 1826 "parser.yy"
     7669  case 493:
     7670
     7671/* Line 1806 of yacc.c  */
     7672#line 1836 "parser.yy"
    76207673    {
    76217674                        typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
     
    76247677    break;
    76257678
    7626   case 492:
    7627 
    7628 /* Line 1806 of yacc.c  */
    7629 #line 1831 "parser.yy"
     7679  case 494:
     7680
     7681/* Line 1806 of yacc.c  */
     7682#line 1841 "parser.yy"
    76307683    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
    76317684    break;
    76327685
    7633   case 493:
    7634 
    7635 /* Line 1806 of yacc.c  */
    7636 #line 1833 "parser.yy"
     7686  case 495:
     7687
     7688/* Line 1806 of yacc.c  */
     7689#line 1843 "parser.yy"
    76377690    { (yyval.decl) = 0; }
    76387691    break;
    76397692
    7640   case 494:
    7641 
    7642 /* Line 1806 of yacc.c  */
    7643 #line 1838 "parser.yy"
     7693  case 496:
     7694
     7695/* Line 1806 of yacc.c  */
     7696#line 1848 "parser.yy"
    76447697    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
    76457698    break;
    76467699
    7647   case 496:
    7648 
    7649 /* Line 1806 of yacc.c  */
    7650 #line 1841 "parser.yy"
     7700  case 498:
     7701
     7702/* Line 1806 of yacc.c  */
     7703#line 1851 "parser.yy"
    76517704    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
    76527705    break;
    76537706
    7654   case 497:
    7655 
    7656 /* Line 1806 of yacc.c  */
    7657 #line 1843 "parser.yy"
     7707  case 499:
     7708
     7709/* Line 1806 of yacc.c  */
     7710#line 1853 "parser.yy"
    76587711    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    76597712    break;
    76607713
    7661   case 498:
    7662 
    7663 /* Line 1806 of yacc.c  */
    7664 #line 1848 "parser.yy"
     7714  case 500:
     7715
     7716/* Line 1806 of yacc.c  */
     7717#line 1858 "parser.yy"
    76657718    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    76667719    break;
    76677720
    7668   case 499:
    7669 
    7670 /* Line 1806 of yacc.c  */
    7671 #line 1850 "parser.yy"
     7721  case 501:
     7722
     7723/* Line 1806 of yacc.c  */
     7724#line 1860 "parser.yy"
    76727725    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    76737726    break;
    76747727
    7675   case 500:
    7676 
    7677 /* Line 1806 of yacc.c  */
    7678 #line 1852 "parser.yy"
     7728  case 502:
     7729
     7730/* Line 1806 of yacc.c  */
     7731#line 1862 "parser.yy"
    76797732    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    76807733    break;
    76817734
    7682   case 501:
    7683 
    7684 /* Line 1806 of yacc.c  */
    7685 #line 1857 "parser.yy"
     7735  case 503:
     7736
     7737/* Line 1806 of yacc.c  */
     7738#line 1867 "parser.yy"
    76867739    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    76877740    break;
    76887741
    7689   case 502:
    7690 
    7691 /* Line 1806 of yacc.c  */
    7692 #line 1859 "parser.yy"
     7742  case 504:
     7743
     7744/* Line 1806 of yacc.c  */
     7745#line 1869 "parser.yy"
    76937746    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    76947747    break;
    76957748
    7696   case 503:
    7697 
    7698 /* Line 1806 of yacc.c  */
    7699 #line 1864 "parser.yy"
     7749  case 505:
     7750
     7751/* Line 1806 of yacc.c  */
     7752#line 1874 "parser.yy"
    77007753    {
    77017754                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    77047757    break;
    77057758
    7706   case 504:
    7707 
    7708 /* Line 1806 of yacc.c  */
    7709 #line 1869 "parser.yy"
     7759  case 506:
     7760
     7761/* Line 1806 of yacc.c  */
     7762#line 1879 "parser.yy"
    77107763    {
    77117764                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    77147767    break;
    77157768
    7716   case 505:
    7717 
    7718 /* Line 1806 of yacc.c  */
    7719 #line 1877 "parser.yy"
     7769  case 507:
     7770
     7771/* Line 1806 of yacc.c  */
     7772#line 1887 "parser.yy"
    77207773    {
    77217774                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
     
    77247777    break;
    77257778
    7726   case 506:
    7727 
    7728 /* Line 1806 of yacc.c  */
    7729 #line 1882 "parser.yy"
     7779  case 508:
     7780
     7781/* Line 1806 of yacc.c  */
     7782#line 1892 "parser.yy"
    77307783    {
    77317784                        typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
     
    77347787    break;
    77357788
    7736   case 507:
    7737 
    7738 /* Line 1806 of yacc.c  */
    7739 #line 1887 "parser.yy"
     7789  case 509:
     7790
     7791/* Line 1806 of yacc.c  */
     7792#line 1897 "parser.yy"
    77407793    {
    77417794                        typedefTable.leaveTrait();
     
    77457798    break;
    77467799
    7747   case 509:
    7748 
    7749 /* Line 1806 of yacc.c  */
    7750 #line 1897 "parser.yy"
     7800  case 511:
     7801
     7802/* Line 1806 of yacc.c  */
     7803#line 1907 "parser.yy"
    77517804    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    77527805    break;
    77537806
    7754   case 512:
    7755 
    7756 /* Line 1806 of yacc.c  */
    7757 #line 1907 "parser.yy"
     7807  case 514:
     7808
     7809/* Line 1806 of yacc.c  */
     7810#line 1917 "parser.yy"
    77587811    {
    77597812                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77627815    break;
    77637816
    7764   case 513:
    7765 
    7766 /* Line 1806 of yacc.c  */
    7767 #line 1912 "parser.yy"
     7817  case 515:
     7818
     7819/* Line 1806 of yacc.c  */
     7820#line 1922 "parser.yy"
    77687821    {
    77697822                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77727825    break;
    77737826
    7774   case 514:
    7775 
    7776 /* Line 1806 of yacc.c  */
    7777 #line 1917 "parser.yy"
     7827  case 516:
     7828
     7829/* Line 1806 of yacc.c  */
     7830#line 1927 "parser.yy"
    77787831    {
    77797832                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    77827835    break;
    77837836
    7784   case 515:
    7785 
    7786 /* Line 1806 of yacc.c  */
    7787 #line 1925 "parser.yy"
     7837  case 517:
     7838
     7839/* Line 1806 of yacc.c  */
     7840#line 1935 "parser.yy"
    77887841    {
    77897842                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77927845    break;
    77937846
    7794   case 516:
    7795 
    7796 /* Line 1806 of yacc.c  */
    7797 #line 1930 "parser.yy"
     7847  case 518:
     7848
     7849/* Line 1806 of yacc.c  */
     7850#line 1940 "parser.yy"
    77987851    {
    77997852                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    78027855    break;
    78037856
    7804   case 517:
    7805 
    7806 /* Line 1806 of yacc.c  */
    7807 #line 1940 "parser.yy"
     7857  case 519:
     7858
     7859/* Line 1806 of yacc.c  */
     7860#line 1950 "parser.yy"
    78087861    {}
    78097862    break;
    78107863
    7811   case 518:
    7812 
    7813 /* Line 1806 of yacc.c  */
    7814 #line 1942 "parser.yy"
     7864  case 520:
     7865
     7866/* Line 1806 of yacc.c  */
     7867#line 1952 "parser.yy"
    78157868    {
    78167869                        if ( theTree ) {
     
    78227875    break;
    78237876
    7824   case 520:
    7825 
    7826 /* Line 1806 of yacc.c  */
    7827 #line 1954 "parser.yy"
     7877  case 522:
     7878
     7879/* Line 1806 of yacc.c  */
     7880#line 1964 "parser.yy"
    78287881    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    78297882    break;
    78307883
    7831   case 521:
    7832 
    7833 /* Line 1806 of yacc.c  */
    7834 #line 1959 "parser.yy"
     7884  case 523:
     7885
     7886/* Line 1806 of yacc.c  */
     7887#line 1969 "parser.yy"
    78357888    { (yyval.decl) = 0; }
    78367889    break;
    78377890
    7838   case 525:
    7839 
    7840 /* Line 1806 of yacc.c  */
    7841 #line 1967 "parser.yy"
     7891  case 527:
     7892
     7893/* Line 1806 of yacc.c  */
     7894#line 1977 "parser.yy"
    78427895    {}
    78437896    break;
    78447897
    7845   case 526:
    7846 
    7847 /* Line 1806 of yacc.c  */
    7848 #line 1969 "parser.yy"
     7898  case 528:
     7899
     7900/* Line 1806 of yacc.c  */
     7901#line 1979 "parser.yy"
    78497902    {
    78507903                        linkageStack.push( linkage );
     
    78537906    break;
    78547907
    7855   case 527:
    7856 
    7857 /* Line 1806 of yacc.c  */
    7858 #line 1974 "parser.yy"
     7908  case 529:
     7909
     7910/* Line 1806 of yacc.c  */
     7911#line 1984 "parser.yy"
    78597912    {
    78607913                        linkage = linkageStack.top();
     
    78647917    break;
    78657918
    7866   case 528:
    7867 
    7868 /* Line 1806 of yacc.c  */
    7869 #line 1980 "parser.yy"
     7919  case 530:
     7920
     7921/* Line 1806 of yacc.c  */
     7922#line 1990 "parser.yy"
    78707923    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    78717924    break;
    78727925
    7873   case 530:
    7874 
    7875 /* Line 1806 of yacc.c  */
    7876 #line 1990 "parser.yy"
     7926  case 532:
     7927
     7928/* Line 1806 of yacc.c  */
     7929#line 2000 "parser.yy"
    78777930    {
    78787931                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78827935    break;
    78837936
    7884   case 531:
    7885 
    7886 /* Line 1806 of yacc.c  */
    7887 #line 1996 "parser.yy"
     7937  case 533:
     7938
     7939/* Line 1806 of yacc.c  */
     7940#line 2006 "parser.yy"
    78887941    {
    78897942                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78937946    break;
    78947947
    7895   case 532:
    7896 
    7897 /* Line 1806 of yacc.c  */
    7898 #line 2005 "parser.yy"
     7948  case 534:
     7949
     7950/* Line 1806 of yacc.c  */
     7951#line 2015 "parser.yy"
    78997952    {
    79007953                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79047957    break;
    79057958
    7906   case 533:
    7907 
    7908 /* Line 1806 of yacc.c  */
    7909 #line 2011 "parser.yy"
     7959  case 535:
     7960
     7961/* Line 1806 of yacc.c  */
     7962#line 2021 "parser.yy"
    79107963    {
    79117964                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79157968    break;
    79167969
    7917   case 534:
    7918 
    7919 /* Line 1806 of yacc.c  */
    7920 #line 2017 "parser.yy"
     7970  case 536:
     7971
     7972/* Line 1806 of yacc.c  */
     7973#line 2027 "parser.yy"
    79217974    {
    79227975                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79267979    break;
    79277980
    7928   case 535:
    7929 
    7930 /* Line 1806 of yacc.c  */
    7931 #line 2023 "parser.yy"
     7981  case 537:
     7982
     7983/* Line 1806 of yacc.c  */
     7984#line 2033 "parser.yy"
    79327985    {
    79337986                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79377990    break;
    79387991
    7939   case 536:
    7940 
    7941 /* Line 1806 of yacc.c  */
    7942 #line 2029 "parser.yy"
     7992  case 538:
     7993
     7994/* Line 1806 of yacc.c  */
     7995#line 2039 "parser.yy"
    79437996    {
    79447997                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79488001    break;
    79498002
    7950   case 537:
    7951 
    7952 /* Line 1806 of yacc.c  */
    7953 #line 2037 "parser.yy"
     8003  case 539:
     8004
     8005/* Line 1806 of yacc.c  */
     8006#line 2047 "parser.yy"
    79548007    {
    79558008                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79598012    break;
    79608013
    7961   case 538:
    7962 
    7963 /* Line 1806 of yacc.c  */
    7964 #line 2043 "parser.yy"
     8014  case 540:
     8015
     8016/* Line 1806 of yacc.c  */
     8017#line 2053 "parser.yy"
    79658018    {
    79668019                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79708023    break;
    79718024
    7972   case 539:
    7973 
    7974 /* Line 1806 of yacc.c  */
    7975 #line 2051 "parser.yy"
     8025  case 541:
     8026
     8027/* Line 1806 of yacc.c  */
     8028#line 2061 "parser.yy"
    79768029    {
    79778030                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79818034    break;
    79828035
    7983   case 540:
    7984 
    7985 /* Line 1806 of yacc.c  */
    7986 #line 2057 "parser.yy"
     8036  case 542:
     8037
     8038/* Line 1806 of yacc.c  */
     8039#line 2067 "parser.yy"
    79878040    {
    79888041                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79928045    break;
    79938046
    7994   case 544:
    7995 
    7996 /* Line 1806 of yacc.c  */
    7997 #line 2072 "parser.yy"
     8047  case 546:
     8048
     8049/* Line 1806 of yacc.c  */
     8050#line 2082 "parser.yy"
    79988051    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    79998052    break;
    80008053
    8001   case 547:
    8002 
    8003 /* Line 1806 of yacc.c  */
    8004 #line 2082 "parser.yy"
     8054  case 549:
     8055
     8056/* Line 1806 of yacc.c  */
     8057#line 2092 "parser.yy"
    80058058    { (yyval.decl) = 0; }
    80068059    break;
    80078060
    8008   case 550:
    8009 
    8010 /* Line 1806 of yacc.c  */
    8011 #line 2089 "parser.yy"
     8061  case 552:
     8062
     8063/* Line 1806 of yacc.c  */
     8064#line 2099 "parser.yy"
    80128065    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    80138066    break;
    80148067
    8015   case 551:
    8016 
    8017 /* Line 1806 of yacc.c  */
    8018 #line 2095 "parser.yy"
     8068  case 553:
     8069
     8070/* Line 1806 of yacc.c  */
     8071#line 2105 "parser.yy"
    80198072    { (yyval.decl) = 0; }
    80208073    break;
    80218074
    8022   case 557:
    8023 
    8024 /* Line 1806 of yacc.c  */
    8025 #line 2110 "parser.yy"
     8075  case 559:
     8076
     8077/* Line 1806 of yacc.c  */
     8078#line 2120 "parser.yy"
    80268079    {}
    80278080    break;
    80288081
    8029   case 558:
    8030 
    8031 /* Line 1806 of yacc.c  */
    8032 #line 2111 "parser.yy"
     8082  case 560:
     8083
     8084/* Line 1806 of yacc.c  */
     8085#line 2121 "parser.yy"
    80338086    {}
    80348087    break;
    80358088
    8036   case 559:
    8037 
    8038 /* Line 1806 of yacc.c  */
    8039 #line 2112 "parser.yy"
     8089  case 561:
     8090
     8091/* Line 1806 of yacc.c  */
     8092#line 2122 "parser.yy"
    80408093    {}
    80418094    break;
    80428095
    8043   case 560:
    8044 
    8045 /* Line 1806 of yacc.c  */
    8046 #line 2113 "parser.yy"
     8096  case 562:
     8097
     8098/* Line 1806 of yacc.c  */
     8099#line 2123 "parser.yy"
    80478100    {}
    80488101    break;
    80498102
    8050   case 561:
    8051 
    8052 /* Line 1806 of yacc.c  */
    8053 #line 2148 "parser.yy"
     8103  case 563:
     8104
     8105/* Line 1806 of yacc.c  */
     8106#line 2158 "parser.yy"
    80548107    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80558108    break;
    80568109
    8057   case 563:
    8058 
    8059 /* Line 1806 of yacc.c  */
    8060 #line 2151 "parser.yy"
     8110  case 565:
     8111
     8112/* Line 1806 of yacc.c  */
     8113#line 2161 "parser.yy"
    80618114    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80628115    break;
    80638116
    8064   case 564:
    8065 
    8066 /* Line 1806 of yacc.c  */
    8067 #line 2153 "parser.yy"
     8117  case 566:
     8118
     8119/* Line 1806 of yacc.c  */
     8120#line 2163 "parser.yy"
    80688121    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80698122    break;
    80708123
    8071   case 565:
    8072 
    8073 /* Line 1806 of yacc.c  */
    8074 #line 2158 "parser.yy"
     8124  case 567:
     8125
     8126/* Line 1806 of yacc.c  */
     8127#line 2168 "parser.yy"
    80758128    {
    80768129                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    80798132    break;
    80808133
    8081   case 566:
    8082 
    8083 /* Line 1806 of yacc.c  */
    8084 #line 2163 "parser.yy"
     8134  case 568:
     8135
     8136/* Line 1806 of yacc.c  */
     8137#line 2173 "parser.yy"
    80858138    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80868139    break;
    80878140
    8088   case 567:
    8089 
    8090 /* Line 1806 of yacc.c  */
    8091 #line 2168 "parser.yy"
     8141  case 569:
     8142
     8143/* Line 1806 of yacc.c  */
     8144#line 2178 "parser.yy"
    80928145    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    80938146    break;
    80948147
    8095   case 568:
    8096 
    8097 /* Line 1806 of yacc.c  */
    8098 #line 2170 "parser.yy"
     8148  case 570:
     8149
     8150/* Line 1806 of yacc.c  */
     8151#line 2180 "parser.yy"
    80998152    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    81008153    break;
    81018154
    8102   case 569:
    8103 
    8104 /* Line 1806 of yacc.c  */
    8105 #line 2172 "parser.yy"
     8155  case 571:
     8156
     8157/* Line 1806 of yacc.c  */
     8158#line 2182 "parser.yy"
    81068159    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81078160    break;
    81088161
    8109   case 570:
    8110 
    8111 /* Line 1806 of yacc.c  */
    8112 #line 2177 "parser.yy"
     8162  case 572:
     8163
     8164/* Line 1806 of yacc.c  */
     8165#line 2187 "parser.yy"
    81138166    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    81148167    break;
    81158168
    8116   case 571:
    8117 
    8118 /* Line 1806 of yacc.c  */
    8119 #line 2179 "parser.yy"
     8169  case 573:
     8170
     8171/* Line 1806 of yacc.c  */
     8172#line 2189 "parser.yy"
    81208173    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81218174    break;
    81228175
    8123   case 572:
    8124 
    8125 /* Line 1806 of yacc.c  */
    8126 #line 2181 "parser.yy"
     8176  case 574:
     8177
     8178/* Line 1806 of yacc.c  */
     8179#line 2191 "parser.yy"
    81278180    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81288181    break;
    81298182
    8130   case 573:
    8131 
    8132 /* Line 1806 of yacc.c  */
    8133 #line 2183 "parser.yy"
     8183  case 575:
     8184
     8185/* Line 1806 of yacc.c  */
     8186#line 2193 "parser.yy"
    81348187    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81358188    break;
    81368189
    8137   case 574:
    8138 
    8139 /* Line 1806 of yacc.c  */
    8140 #line 2188 "parser.yy"
     8190  case 576:
     8191
     8192/* Line 1806 of yacc.c  */
     8193#line 2198 "parser.yy"
    81418194    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81428195    break;
    81438196
    8144   case 575:
    8145 
    8146 /* Line 1806 of yacc.c  */
    8147 #line 2190 "parser.yy"
     8197  case 577:
     8198
     8199/* Line 1806 of yacc.c  */
     8200#line 2200 "parser.yy"
    81488201    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81498202    break;
    81508203
    8151   case 576:
    8152 
    8153 /* Line 1806 of yacc.c  */
    8154 #line 2200 "parser.yy"
     8204  case 578:
     8205
     8206/* Line 1806 of yacc.c  */
     8207#line 2210 "parser.yy"
    81558208    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    81568209    break;
    81578210
    8158   case 578:
    8159 
    8160 /* Line 1806 of yacc.c  */
    8161 #line 2203 "parser.yy"
     8211  case 580:
     8212
     8213/* Line 1806 of yacc.c  */
     8214#line 2213 "parser.yy"
    81628215    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    81638216    break;
    81648217
    8165   case 579:
    8166 
    8167 /* Line 1806 of yacc.c  */
    8168 #line 2208 "parser.yy"
     8218  case 581:
     8219
     8220/* Line 1806 of yacc.c  */
     8221#line 2218 "parser.yy"
    81698222    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    81708223    break;
    81718224
    8172   case 580:
    8173 
    8174 /* Line 1806 of yacc.c  */
    8175 #line 2210 "parser.yy"
     8225  case 582:
     8226
     8227/* Line 1806 of yacc.c  */
     8228#line 2220 "parser.yy"
    81768229    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81778230    break;
    81788231
    8179   case 581:
    8180 
    8181 /* Line 1806 of yacc.c  */
    8182 #line 2212 "parser.yy"
     8232  case 583:
     8233
     8234/* Line 1806 of yacc.c  */
     8235#line 2222 "parser.yy"
    81838236    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81848237    break;
    81858238
    8186   case 582:
    8187 
    8188 /* Line 1806 of yacc.c  */
    8189 #line 2217 "parser.yy"
     8239  case 584:
     8240
     8241/* Line 1806 of yacc.c  */
     8242#line 2227 "parser.yy"
    81908243    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    81918244    break;
    81928245
    8193   case 583:
    8194 
    8195 /* Line 1806 of yacc.c  */
    8196 #line 2219 "parser.yy"
     8246  case 585:
     8247
     8248/* Line 1806 of yacc.c  */
     8249#line 2229 "parser.yy"
    81978250    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    81988251    break;
    81998252
    8200   case 584:
    8201 
    8202 /* Line 1806 of yacc.c  */
    8203 #line 2221 "parser.yy"
     8253  case 586:
     8254
     8255/* Line 1806 of yacc.c  */
     8256#line 2231 "parser.yy"
    82048257    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82058258    break;
    82068259
    8207   case 585:
    8208 
    8209 /* Line 1806 of yacc.c  */
    8210 #line 2226 "parser.yy"
     8260  case 587:
     8261
     8262/* Line 1806 of yacc.c  */
     8263#line 2236 "parser.yy"
    82118264    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82128265    break;
    82138266
    8214   case 586:
    8215 
    8216 /* Line 1806 of yacc.c  */
    8217 #line 2228 "parser.yy"
     8267  case 588:
     8268
     8269/* Line 1806 of yacc.c  */
     8270#line 2238 "parser.yy"
    82188271    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82198272    break;
    82208273
    8221   case 587:
    8222 
    8223 /* Line 1806 of yacc.c  */
    8224 #line 2230 "parser.yy"
     8274  case 589:
     8275
     8276/* Line 1806 of yacc.c  */
     8277#line 2240 "parser.yy"
    82258278    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82268279    break;
    82278280
    8228   case 591:
    8229 
    8230 /* Line 1806 of yacc.c  */
    8231 #line 2245 "parser.yy"
     8281  case 593:
     8282
     8283/* Line 1806 of yacc.c  */
     8284#line 2255 "parser.yy"
    82328285    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    82338286    break;
    82348287
    8235   case 592:
    8236 
    8237 /* Line 1806 of yacc.c  */
    8238 #line 2247 "parser.yy"
     8288  case 594:
     8289
     8290/* Line 1806 of yacc.c  */
     8291#line 2257 "parser.yy"
    82398292    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    82408293    break;
    82418294
    8242   case 593:
    8243 
    8244 /* Line 1806 of yacc.c  */
    8245 #line 2249 "parser.yy"
     8295  case 595:
     8296
     8297/* Line 1806 of yacc.c  */
     8298#line 2259 "parser.yy"
    82468299    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82478300    break;
    82488301
    8249   case 594:
    8250 
    8251 /* Line 1806 of yacc.c  */
    8252 #line 2254 "parser.yy"
     8302  case 596:
     8303
     8304/* Line 1806 of yacc.c  */
     8305#line 2264 "parser.yy"
    82538306    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    82548307    break;
    82558308
    8256   case 595:
    8257 
    8258 /* Line 1806 of yacc.c  */
    8259 #line 2256 "parser.yy"
     8309  case 597:
     8310
     8311/* Line 1806 of yacc.c  */
     8312#line 2266 "parser.yy"
    82608313    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    82618314    break;
    82628315
    8263   case 596:
    8264 
    8265 /* Line 1806 of yacc.c  */
    8266 #line 2258 "parser.yy"
     8316  case 598:
     8317
     8318/* Line 1806 of yacc.c  */
     8319#line 2268 "parser.yy"
    82678320    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82688321    break;
    82698322
    8270   case 597:
    8271 
    8272 /* Line 1806 of yacc.c  */
    8273 #line 2263 "parser.yy"
     8323  case 599:
     8324
     8325/* Line 1806 of yacc.c  */
     8326#line 2273 "parser.yy"
    82748327    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82758328    break;
    82768329
    8277   case 598:
    8278 
    8279 /* Line 1806 of yacc.c  */
    8280 #line 2265 "parser.yy"
     8330  case 600:
     8331
     8332/* Line 1806 of yacc.c  */
     8333#line 2275 "parser.yy"
    82818334    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82828335    break;
    82838336
    8284   case 599:
    8285 
    8286 /* Line 1806 of yacc.c  */
    8287 #line 2267 "parser.yy"
     8337  case 601:
     8338
     8339/* Line 1806 of yacc.c  */
     8340#line 2277 "parser.yy"
    82888341    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82898342    break;
    82908343
    8291   case 600:
    8292 
    8293 /* Line 1806 of yacc.c  */
    8294 #line 2282 "parser.yy"
     8344  case 602:
     8345
     8346/* Line 1806 of yacc.c  */
     8347#line 2292 "parser.yy"
    82958348    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82968349    break;
    82978350
    8298   case 602:
    8299 
    8300 /* Line 1806 of yacc.c  */
    8301 #line 2285 "parser.yy"
     8351  case 604:
     8352
     8353/* Line 1806 of yacc.c  */
     8354#line 2295 "parser.yy"
    83028355    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83038356    break;
    83048357
    8305   case 603:
    8306 
    8307 /* Line 1806 of yacc.c  */
    8308 #line 2287 "parser.yy"
     8358  case 605:
     8359
     8360/* Line 1806 of yacc.c  */
     8361#line 2297 "parser.yy"
    83098362    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83108363    break;
    83118364
    8312   case 605:
    8313 
    8314 /* Line 1806 of yacc.c  */
    8315 #line 2293 "parser.yy"
     8365  case 607:
     8366
     8367/* Line 1806 of yacc.c  */
     8368#line 2303 "parser.yy"
    83168369    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83178370    break;
    83188371
    8319   case 606:
    8320 
    8321 /* Line 1806 of yacc.c  */
    8322 #line 2298 "parser.yy"
     8372  case 608:
     8373
     8374/* Line 1806 of yacc.c  */
     8375#line 2308 "parser.yy"
    83238376    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    83248377    break;
    83258378
    8326   case 607:
    8327 
    8328 /* Line 1806 of yacc.c  */
    8329 #line 2300 "parser.yy"
     8379  case 609:
     8380
     8381/* Line 1806 of yacc.c  */
     8382#line 2310 "parser.yy"
    83308383    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    83318384    break;
    83328385
    8333   case 608:
    8334 
    8335 /* Line 1806 of yacc.c  */
    8336 #line 2302 "parser.yy"
     8386  case 610:
     8387
     8388/* Line 1806 of yacc.c  */
     8389#line 2312 "parser.yy"
    83378390    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83388391    break;
    83398392
    8340   case 609:
    8341 
    8342 /* Line 1806 of yacc.c  */
    8343 #line 2307 "parser.yy"
     8393  case 611:
     8394
     8395/* Line 1806 of yacc.c  */
     8396#line 2317 "parser.yy"
    83448397    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    83458398    break;
    83468399
    8347   case 610:
    8348 
    8349 /* Line 1806 of yacc.c  */
    8350 #line 2309 "parser.yy"
     8400  case 612:
     8401
     8402/* Line 1806 of yacc.c  */
     8403#line 2319 "parser.yy"
    83518404    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83528405    break;
    83538406
    8354   case 611:
    8355 
    8356 /* Line 1806 of yacc.c  */
    8357 #line 2311 "parser.yy"
     8407  case 613:
     8408
     8409/* Line 1806 of yacc.c  */
     8410#line 2321 "parser.yy"
    83588411    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83598412    break;
    83608413
    8361   case 612:
    8362 
    8363 /* Line 1806 of yacc.c  */
    8364 #line 2313 "parser.yy"
     8414  case 614:
     8415
     8416/* Line 1806 of yacc.c  */
     8417#line 2323 "parser.yy"
    83658418    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83668419    break;
    83678420
    8368   case 613:
    8369 
    8370 /* Line 1806 of yacc.c  */
    8371 #line 2318 "parser.yy"
     8421  case 615:
     8422
     8423/* Line 1806 of yacc.c  */
     8424#line 2328 "parser.yy"
    83728425    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    83738426    break;
    83748427
    8375   case 614:
    8376 
    8377 /* Line 1806 of yacc.c  */
    8378 #line 2320 "parser.yy"
     8428  case 616:
     8429
     8430/* Line 1806 of yacc.c  */
     8431#line 2330 "parser.yy"
    83798432    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83808433    break;
    83818434
    8382   case 615:
    8383 
    8384 /* Line 1806 of yacc.c  */
    8385 #line 2322 "parser.yy"
     8435  case 617:
     8436
     8437/* Line 1806 of yacc.c  */
     8438#line 2332 "parser.yy"
    83868439    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83878440    break;
    83888441
    8389   case 616:
    8390 
    8391 /* Line 1806 of yacc.c  */
    8392 #line 2332 "parser.yy"
     8442  case 618:
     8443
     8444/* Line 1806 of yacc.c  */
     8445#line 2342 "parser.yy"
    83938446    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83948447    break;
    83958448
    8396   case 618:
    8397 
    8398 /* Line 1806 of yacc.c  */
    8399 #line 2335 "parser.yy"
     8449  case 620:
     8450
     8451/* Line 1806 of yacc.c  */
     8452#line 2345 "parser.yy"
    84008453    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84018454    break;
    84028455
    8403   case 619:
    8404 
    8405 /* Line 1806 of yacc.c  */
    8406 #line 2337 "parser.yy"
     8456  case 621:
     8457
     8458/* Line 1806 of yacc.c  */
     8459#line 2347 "parser.yy"
    84078460    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84088461    break;
    84098462
    8410   case 620:
    8411 
    8412 /* Line 1806 of yacc.c  */
    8413 #line 2342 "parser.yy"
     8463  case 622:
     8464
     8465/* Line 1806 of yacc.c  */
     8466#line 2352 "parser.yy"
    84148467    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    84158468    break;
    84168469
    8417   case 621:
    8418 
    8419 /* Line 1806 of yacc.c  */
    8420 #line 2344 "parser.yy"
     8470  case 623:
     8471
     8472/* Line 1806 of yacc.c  */
     8473#line 2354 "parser.yy"
    84218474    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    84228475    break;
    84238476
    8424   case 622:
    8425 
    8426 /* Line 1806 of yacc.c  */
    8427 #line 2346 "parser.yy"
     8477  case 624:
     8478
     8479/* Line 1806 of yacc.c  */
     8480#line 2356 "parser.yy"
    84288481    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84298482    break;
    84308483
    8431   case 623:
    8432 
    8433 /* Line 1806 of yacc.c  */
    8434 #line 2351 "parser.yy"
     8484  case 625:
     8485
     8486/* Line 1806 of yacc.c  */
     8487#line 2361 "parser.yy"
    84358488    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    84368489    break;
    84378490
    8438   case 624:
    8439 
    8440 /* Line 1806 of yacc.c  */
    8441 #line 2353 "parser.yy"
     8491  case 626:
     8492
     8493/* Line 1806 of yacc.c  */
     8494#line 2363 "parser.yy"
    84428495    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84438496    break;
    84448497
    8445   case 625:
    8446 
    8447 /* Line 1806 of yacc.c  */
    8448 #line 2355 "parser.yy"
     8498  case 627:
     8499
     8500/* Line 1806 of yacc.c  */
     8501#line 2365 "parser.yy"
    84498502    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84508503    break;
    84518504
    8452   case 626:
    8453 
    8454 /* Line 1806 of yacc.c  */
    8455 #line 2357 "parser.yy"
     8505  case 628:
     8506
     8507/* Line 1806 of yacc.c  */
     8508#line 2367 "parser.yy"
    84568509    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84578510    break;
    84588511
    8459   case 627:
    8460 
    8461 /* Line 1806 of yacc.c  */
    8462 #line 2362 "parser.yy"
     8512  case 629:
     8513
     8514/* Line 1806 of yacc.c  */
     8515#line 2372 "parser.yy"
    84638516    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    84648517    break;
    84658518
    8466   case 628:
    8467 
    8468 /* Line 1806 of yacc.c  */
    8469 #line 2364 "parser.yy"
     8519  case 630:
     8520
     8521/* Line 1806 of yacc.c  */
     8522#line 2374 "parser.yy"
    84708523    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    84718524    break;
    84728525
    8473   case 629:
    8474 
    8475 /* Line 1806 of yacc.c  */
    8476 #line 2366 "parser.yy"
     8526  case 631:
     8527
     8528/* Line 1806 of yacc.c  */
     8529#line 2376 "parser.yy"
    84778530    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84788531    break;
    84798532
    8480   case 630:
    8481 
    8482 /* Line 1806 of yacc.c  */
    8483 #line 2397 "parser.yy"
     8533  case 632:
     8534
     8535/* Line 1806 of yacc.c  */
     8536#line 2407 "parser.yy"
    84848537    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84858538    break;
    84868539
    8487   case 632:
    8488 
    8489 /* Line 1806 of yacc.c  */
    8490 #line 2400 "parser.yy"
     8540  case 634:
     8541
     8542/* Line 1806 of yacc.c  */
     8543#line 2410 "parser.yy"
    84918544    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84928545    break;
    84938546
    8494   case 633:
    8495 
    8496 /* Line 1806 of yacc.c  */
    8497 #line 2402 "parser.yy"
     8547  case 635:
     8548
     8549/* Line 1806 of yacc.c  */
     8550#line 2412 "parser.yy"
    84988551    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84998552    break;
    85008553
    8501   case 634:
    8502 
    8503 /* Line 1806 of yacc.c  */
    8504 #line 2407 "parser.yy"
     8554  case 636:
     8555
     8556/* Line 1806 of yacc.c  */
     8557#line 2417 "parser.yy"
    85058558    {
    85068559                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    85098562    break;
    85108563
    8511   case 635:
    8512 
    8513 /* Line 1806 of yacc.c  */
    8514 #line 2412 "parser.yy"
     8564  case 637:
     8565
     8566/* Line 1806 of yacc.c  */
     8567#line 2422 "parser.yy"
    85158568    {
    85168569                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    85198572    break;
    85208573
    8521   case 636:
    8522 
    8523 /* Line 1806 of yacc.c  */
    8524 #line 2420 "parser.yy"
     8574  case 638:
     8575
     8576/* Line 1806 of yacc.c  */
     8577#line 2430 "parser.yy"
    85258578    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    85268579    break;
    85278580
    8528   case 637:
    8529 
    8530 /* Line 1806 of yacc.c  */
    8531 #line 2422 "parser.yy"
     8581  case 639:
     8582
     8583/* Line 1806 of yacc.c  */
     8584#line 2432 "parser.yy"
    85328585    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    85338586    break;
    85348587
    8535   case 638:
    8536 
    8537 /* Line 1806 of yacc.c  */
    8538 #line 2424 "parser.yy"
     8588  case 640:
     8589
     8590/* Line 1806 of yacc.c  */
     8591#line 2434 "parser.yy"
    85398592    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85408593    break;
    85418594
    8542   case 639:
    8543 
    8544 /* Line 1806 of yacc.c  */
    8545 #line 2429 "parser.yy"
     8595  case 641:
     8596
     8597/* Line 1806 of yacc.c  */
     8598#line 2439 "parser.yy"
    85468599    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    85478600    break;
    85488601
    8549   case 640:
    8550 
    8551 /* Line 1806 of yacc.c  */
    8552 #line 2431 "parser.yy"
     8602  case 642:
     8603
     8604/* Line 1806 of yacc.c  */
     8605#line 2441 "parser.yy"
    85538606    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85548607    break;
    85558608
    8556   case 641:
    8557 
    8558 /* Line 1806 of yacc.c  */
    8559 #line 2436 "parser.yy"
     8609  case 643:
     8610
     8611/* Line 1806 of yacc.c  */
     8612#line 2446 "parser.yy"
    85608613    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    85618614    break;
    85628615
    8563   case 642:
    8564 
    8565 /* Line 1806 of yacc.c  */
    8566 #line 2438 "parser.yy"
     8616  case 644:
     8617
     8618/* Line 1806 of yacc.c  */
     8619#line 2448 "parser.yy"
    85678620    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    85688621    break;
    85698622
    8570   case 644:
    8571 
    8572 /* Line 1806 of yacc.c  */
    8573 #line 2453 "parser.yy"
     8623  case 646:
     8624
     8625/* Line 1806 of yacc.c  */
     8626#line 2463 "parser.yy"
    85748627    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85758628    break;
    85768629
    8577   case 645:
    8578 
    8579 /* Line 1806 of yacc.c  */
    8580 #line 2455 "parser.yy"
     8630  case 647:
     8631
     8632/* Line 1806 of yacc.c  */
     8633#line 2465 "parser.yy"
    85818634    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85828635    break;
    85838636
    8584   case 646:
    8585 
    8586 /* Line 1806 of yacc.c  */
    8587 #line 2460 "parser.yy"
     8637  case 648:
     8638
     8639/* Line 1806 of yacc.c  */
     8640#line 2470 "parser.yy"
    85888641    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    85898642    break;
    85908643
    8591   case 647:
    8592 
    8593 /* Line 1806 of yacc.c  */
    8594 #line 2462 "parser.yy"
     8644  case 649:
     8645
     8646/* Line 1806 of yacc.c  */
     8647#line 2472 "parser.yy"
    85958648    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    85968649    break;
    85978650
    8598   case 648:
    8599 
    8600 /* Line 1806 of yacc.c  */
    8601 #line 2464 "parser.yy"
     8651  case 650:
     8652
     8653/* Line 1806 of yacc.c  */
     8654#line 2474 "parser.yy"
    86028655    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    86038656    break;
    86048657
    8605   case 649:
    8606 
    8607 /* Line 1806 of yacc.c  */
    8608 #line 2466 "parser.yy"
     8658  case 651:
     8659
     8660/* Line 1806 of yacc.c  */
     8661#line 2476 "parser.yy"
    86098662    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    86108663    break;
    86118664
    8612   case 650:
    8613 
    8614 /* Line 1806 of yacc.c  */
    8615 #line 2468 "parser.yy"
    8616     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8617     break;
    8618 
    86198665  case 652:
    8620 
    8621 /* Line 1806 of yacc.c  */
    8622 #line 2474 "parser.yy"
    8623     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8624     break;
    8625 
    8626   case 653:
    8627 
    8628 /* Line 1806 of yacc.c  */
    8629 #line 2476 "parser.yy"
    8630     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8631     break;
    8632 
    8633   case 654:
    86348666
    86358667/* Line 1806 of yacc.c  */
     
    86388670    break;
    86398671
     8672  case 654:
     8673
     8674/* Line 1806 of yacc.c  */
     8675#line 2484 "parser.yy"
     8676    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8677    break;
     8678
    86408679  case 655:
    86418680
    86428681/* Line 1806 of yacc.c  */
    8643 #line 2483 "parser.yy"
     8682#line 2486 "parser.yy"
     8683    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8684    break;
     8685
     8686  case 656:
     8687
     8688/* Line 1806 of yacc.c  */
     8689#line 2488 "parser.yy"
     8690    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8691    break;
     8692
     8693  case 657:
     8694
     8695/* Line 1806 of yacc.c  */
     8696#line 2493 "parser.yy"
    86448697    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    86458698    break;
    86468699
    8647   case 656:
    8648 
    8649 /* Line 1806 of yacc.c  */
    8650 #line 2485 "parser.yy"
     8700  case 658:
     8701
     8702/* Line 1806 of yacc.c  */
     8703#line 2495 "parser.yy"
    86518704    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    86528705    break;
    86538706
    8654   case 657:
    8655 
    8656 /* Line 1806 of yacc.c  */
    8657 #line 2487 "parser.yy"
     8707  case 659:
     8708
     8709/* Line 1806 of yacc.c  */
     8710#line 2497 "parser.yy"
    86588711    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86598712    break;
    86608713
    8661   case 658:
    8662 
    8663 /* Line 1806 of yacc.c  */
    8664 #line 2493 "parser.yy"
     8714  case 660:
     8715
     8716/* Line 1806 of yacc.c  */
     8717#line 2503 "parser.yy"
    86658718    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    86668719    break;
    86678720
    8668   case 659:
    8669 
    8670 /* Line 1806 of yacc.c  */
    8671 #line 2495 "parser.yy"
     8721  case 661:
     8722
     8723/* Line 1806 of yacc.c  */
     8724#line 2505 "parser.yy"
    86728725    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    86738726    break;
    86748727
    8675   case 661:
    8676 
    8677 /* Line 1806 of yacc.c  */
    8678 #line 2501 "parser.yy"
     8728  case 663:
     8729
     8730/* Line 1806 of yacc.c  */
     8731#line 2511 "parser.yy"
    86798732    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    86808733    break;
    86818734
    8682   case 662:
    8683 
    8684 /* Line 1806 of yacc.c  */
    8685 #line 2503 "parser.yy"
     8735  case 664:
     8736
     8737/* Line 1806 of yacc.c  */
     8738#line 2513 "parser.yy"
    86868739    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    86878740    break;
    86888741
    8689   case 663:
    8690 
    8691 /* Line 1806 of yacc.c  */
    8692 #line 2505 "parser.yy"
     8742  case 665:
     8743
     8744/* Line 1806 of yacc.c  */
     8745#line 2515 "parser.yy"
    86938746    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    86948747    break;
    86958748
    8696   case 664:
    8697 
    8698 /* Line 1806 of yacc.c  */
    8699 #line 2507 "parser.yy"
     8749  case 666:
     8750
     8751/* Line 1806 of yacc.c  */
     8752#line 2517 "parser.yy"
    87008753    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    87018754    break;
    87028755
    8703   case 666:
    8704 
    8705 /* Line 1806 of yacc.c  */
    8706 #line 2522 "parser.yy"
     8756  case 668:
     8757
     8758/* Line 1806 of yacc.c  */
     8759#line 2532 "parser.yy"
    87078760    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87088761    break;
    87098762
    8710   case 667:
    8711 
    8712 /* Line 1806 of yacc.c  */
    8713 #line 2524 "parser.yy"
     8763  case 669:
     8764
     8765/* Line 1806 of yacc.c  */
     8766#line 2534 "parser.yy"
    87148767    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87158768    break;
    87168769
    8717   case 668:
    8718 
    8719 /* Line 1806 of yacc.c  */
    8720 #line 2529 "parser.yy"
     8770  case 670:
     8771
     8772/* Line 1806 of yacc.c  */
     8773#line 2539 "parser.yy"
    87218774    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    87228775    break;
    87238776
    8724   case 669:
    8725 
    8726 /* Line 1806 of yacc.c  */
    8727 #line 2531 "parser.yy"
     8777  case 671:
     8778
     8779/* Line 1806 of yacc.c  */
     8780#line 2541 "parser.yy"
    87288781    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    87298782    break;
    87308783
    8731   case 670:
    8732 
    8733 /* Line 1806 of yacc.c  */
    8734 #line 2533 "parser.yy"
     8784  case 672:
     8785
     8786/* Line 1806 of yacc.c  */
     8787#line 2543 "parser.yy"
    87358788    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    87368789    break;
    87378790
    8738   case 671:
    8739 
    8740 /* Line 1806 of yacc.c  */
    8741 #line 2535 "parser.yy"
     8791  case 673:
     8792
     8793/* Line 1806 of yacc.c  */
     8794#line 2545 "parser.yy"
    87428795    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    87438796    break;
    87448797
    8745   case 672:
    8746 
    8747 /* Line 1806 of yacc.c  */
    8748 #line 2537 "parser.yy"
    8749     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8750     break;
    8751 
    87528798  case 674:
    8753 
    8754 /* Line 1806 of yacc.c  */
    8755 #line 2543 "parser.yy"
    8756     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8757     break;
    8758 
    8759   case 675:
    8760 
    8761 /* Line 1806 of yacc.c  */
    8762 #line 2545 "parser.yy"
    8763     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8764     break;
    8765 
    8766   case 676:
    87678799
    87688800/* Line 1806 of yacc.c  */
     
    87718803    break;
    87728804
     8805  case 676:
     8806
     8807/* Line 1806 of yacc.c  */
     8808#line 2553 "parser.yy"
     8809    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8810    break;
     8811
    87738812  case 677:
    87748813
    87758814/* Line 1806 of yacc.c  */
    8776 #line 2552 "parser.yy"
     8815#line 2555 "parser.yy"
     8816    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8817    break;
     8818
     8819  case 678:
     8820
     8821/* Line 1806 of yacc.c  */
     8822#line 2557 "parser.yy"
     8823    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8824    break;
     8825
     8826  case 679:
     8827
     8828/* Line 1806 of yacc.c  */
     8829#line 2562 "parser.yy"
    87778830    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    87788831    break;
    87798832
    8780   case 678:
    8781 
    8782 /* Line 1806 of yacc.c  */
    8783 #line 2554 "parser.yy"
     8833  case 680:
     8834
     8835/* Line 1806 of yacc.c  */
     8836#line 2564 "parser.yy"
    87848837    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    87858838    break;
    87868839
    8787   case 679:
    8788 
    8789 /* Line 1806 of yacc.c  */
    8790 #line 2556 "parser.yy"
     8840  case 681:
     8841
     8842/* Line 1806 of yacc.c  */
     8843#line 2566 "parser.yy"
    87918844    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87928845    break;
    87938846
    8794   case 681:
    8795 
    8796 /* Line 1806 of yacc.c  */
    8797 #line 2563 "parser.yy"
     8847  case 683:
     8848
     8849/* Line 1806 of yacc.c  */
     8850#line 2573 "parser.yy"
    87988851    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    87998852    break;
    88008853
    8801   case 683:
    8802 
    8803 /* Line 1806 of yacc.c  */
    8804 #line 2574 "parser.yy"
     8854  case 685:
     8855
     8856/* Line 1806 of yacc.c  */
     8857#line 2584 "parser.yy"
    88058858    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    88068859    break;
    88078860
    8808   case 684:
    8809 
    8810 /* Line 1806 of yacc.c  */
    8811 #line 2577 "parser.yy"
     8861  case 686:
     8862
     8863/* Line 1806 of yacc.c  */
     8864#line 2587 "parser.yy"
    88128865    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    88138866    break;
    88148867
    8815   case 685:
    8816 
    8817 /* Line 1806 of yacc.c  */
    8818 #line 2579 "parser.yy"
     8868  case 687:
     8869
     8870/* Line 1806 of yacc.c  */
     8871#line 2589 "parser.yy"
    88198872    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    88208873    break;
    88218874
    8822   case 686:
    8823 
    8824 /* Line 1806 of yacc.c  */
    8825 #line 2582 "parser.yy"
     8875  case 688:
     8876
     8877/* Line 1806 of yacc.c  */
     8878#line 2592 "parser.yy"
    88268879    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    88278880    break;
    88288881
    8829   case 687:
    8830 
    8831 /* Line 1806 of yacc.c  */
    8832 #line 2584 "parser.yy"
     8882  case 689:
     8883
     8884/* Line 1806 of yacc.c  */
     8885#line 2594 "parser.yy"
    88338886    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    88348887    break;
    88358888
    8836   case 688:
    8837 
    8838 /* Line 1806 of yacc.c  */
    8839 #line 2586 "parser.yy"
     8889  case 690:
     8890
     8891/* Line 1806 of yacc.c  */
     8892#line 2596 "parser.yy"
    88408893    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    88418894    break;
    88428895
    8843   case 690:
    8844 
    8845 /* Line 1806 of yacc.c  */
    8846 #line 2600 "parser.yy"
     8896  case 692:
     8897
     8898/* Line 1806 of yacc.c  */
     8899#line 2610 "parser.yy"
    88478900    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    88488901    break;
    88498902
    8850   case 691:
    8851 
    8852 /* Line 1806 of yacc.c  */
    8853 #line 2602 "parser.yy"
     8903  case 693:
     8904
     8905/* Line 1806 of yacc.c  */
     8906#line 2612 "parser.yy"
    88548907    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    88558908    break;
    88568909
    8857   case 692:
    8858 
    8859 /* Line 1806 of yacc.c  */
    8860 #line 2607 "parser.yy"
     8910  case 694:
     8911
     8912/* Line 1806 of yacc.c  */
     8913#line 2617 "parser.yy"
    88618914    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    88628915    break;
    88638916
    8864   case 693:
    8865 
    8866 /* Line 1806 of yacc.c  */
    8867 #line 2609 "parser.yy"
     8917  case 695:
     8918
     8919/* Line 1806 of yacc.c  */
     8920#line 2619 "parser.yy"
    88688921    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    88698922    break;
    88708923
    8871   case 694:
    8872 
    8873 /* Line 1806 of yacc.c  */
    8874 #line 2611 "parser.yy"
     8924  case 696:
     8925
     8926/* Line 1806 of yacc.c  */
     8927#line 2621 "parser.yy"
    88758928    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    88768929    break;
    88778930
    8878   case 695:
    8879 
    8880 /* Line 1806 of yacc.c  */
    8881 #line 2613 "parser.yy"
     8931  case 697:
     8932
     8933/* Line 1806 of yacc.c  */
     8934#line 2623 "parser.yy"
    88828935    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    88838936    break;
    88848937
    8885   case 696:
    8886 
    8887 /* Line 1806 of yacc.c  */
    8888 #line 2615 "parser.yy"
    8889     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8890     break;
    8891 
    88928938  case 698:
    8893 
    8894 /* Line 1806 of yacc.c  */
    8895 #line 2621 "parser.yy"
    8896     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8897     break;
    8898 
    8899   case 699:
    8900 
    8901 /* Line 1806 of yacc.c  */
    8902 #line 2623 "parser.yy"
    8903     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8904     break;
    8905 
    8906   case 700:
    89078939
    89088940/* Line 1806 of yacc.c  */
     
    89118943    break;
    89128944
     8945  case 700:
     8946
     8947/* Line 1806 of yacc.c  */
     8948#line 2631 "parser.yy"
     8949    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8950    break;
     8951
    89138952  case 701:
    89148953
    89158954/* Line 1806 of yacc.c  */
    8916 #line 2630 "parser.yy"
     8955#line 2633 "parser.yy"
     8956    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8957    break;
     8958
     8959  case 702:
     8960
     8961/* Line 1806 of yacc.c  */
     8962#line 2635 "parser.yy"
     8963    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8964    break;
     8965
     8966  case 703:
     8967
     8968/* Line 1806 of yacc.c  */
     8969#line 2640 "parser.yy"
    89178970    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    89188971    break;
    89198972
    8920   case 702:
    8921 
    8922 /* Line 1806 of yacc.c  */
    8923 #line 2632 "parser.yy"
     8973  case 704:
     8974
     8975/* Line 1806 of yacc.c  */
     8976#line 2642 "parser.yy"
    89248977    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    89258978    break;
    89268979
    8927   case 705:
    8928 
    8929 /* Line 1806 of yacc.c  */
    8930 #line 2642 "parser.yy"
     8980  case 707:
     8981
     8982/* Line 1806 of yacc.c  */
     8983#line 2652 "parser.yy"
    89318984    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    89328985    break;
    89338986
    8934   case 708:
    8935 
    8936 /* Line 1806 of yacc.c  */
    8937 #line 2652 "parser.yy"
     8987  case 710:
     8988
     8989/* Line 1806 of yacc.c  */
     8990#line 2662 "parser.yy"
    89388991    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89398992    break;
    89408993
    8941   case 709:
    8942 
    8943 /* Line 1806 of yacc.c  */
    8944 #line 2654 "parser.yy"
     8994  case 711:
     8995
     8996/* Line 1806 of yacc.c  */
     8997#line 2664 "parser.yy"
    89458998    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89468999    break;
    89479000
    8948   case 710:
    8949 
    8950 /* Line 1806 of yacc.c  */
    8951 #line 2656 "parser.yy"
     9001  case 712:
     9002
     9003/* Line 1806 of yacc.c  */
     9004#line 2666 "parser.yy"
    89529005    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89539006    break;
    89549007
    8955   case 711:
    8956 
    8957 /* Line 1806 of yacc.c  */
    8958 #line 2658 "parser.yy"
     9008  case 713:
     9009
     9010/* Line 1806 of yacc.c  */
     9011#line 2668 "parser.yy"
    89599012    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89609013    break;
    89619014
    8962   case 712:
    8963 
    8964 /* Line 1806 of yacc.c  */
    8965 #line 2660 "parser.yy"
     9015  case 714:
     9016
     9017/* Line 1806 of yacc.c  */
     9018#line 2670 "parser.yy"
    89669019    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89679020    break;
    89689021
    8969   case 713:
    8970 
    8971 /* Line 1806 of yacc.c  */
    8972 #line 2662 "parser.yy"
     9022  case 715:
     9023
     9024/* Line 1806 of yacc.c  */
     9025#line 2672 "parser.yy"
    89739026    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89749027    break;
    89759028
    8976   case 714:
    8977 
    8978 /* Line 1806 of yacc.c  */
    8979 #line 2669 "parser.yy"
    8980     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    8981     break;
    8982 
    8983   case 715:
    8984 
    8985 /* Line 1806 of yacc.c  */
    8986 #line 2671 "parser.yy"
    8987     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    8988     break;
    8989 
    89909029  case 716:
    8991 
    8992 /* Line 1806 of yacc.c  */
    8993 #line 2673 "parser.yy"
    8994     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    8995     break;
    8996 
    8997   case 717:
    8998 
    8999 /* Line 1806 of yacc.c  */
    9000 #line 2675 "parser.yy"
    9001     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    9002     break;
    9003 
    9004   case 718:
    9005 
    9006 /* Line 1806 of yacc.c  */
    9007 #line 2677 "parser.yy"
    9008     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    9009     break;
    9010 
    9011   case 719:
    90129030
    90139031/* Line 1806 of yacc.c  */
     
    90169034    break;
    90179035
    9018   case 720:
     9036  case 717:
    90199037
    90209038/* Line 1806 of yacc.c  */
     
    90239041    break;
    90249042
    9025   case 721:
     9043  case 718:
    90269044
    90279045/* Line 1806 of yacc.c  */
     
    90309048    break;
    90319049
    9032   case 722:
     9050  case 719:
    90339051
    90349052/* Line 1806 of yacc.c  */
     
    90379055    break;
    90389056
    9039   case 723:
     9057  case 720:
    90409058
    90419059/* Line 1806 of yacc.c  */
     
    90449062    break;
    90459063
     9064  case 721:
     9065
     9066/* Line 1806 of yacc.c  */
     9067#line 2689 "parser.yy"
     9068    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9069    break;
     9070
     9071  case 722:
     9072
     9073/* Line 1806 of yacc.c  */
     9074#line 2691 "parser.yy"
     9075    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     9076    break;
     9077
     9078  case 723:
     9079
     9080/* Line 1806 of yacc.c  */
     9081#line 2693 "parser.yy"
     9082    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9083    break;
     9084
    90469085  case 724:
    90479086
    90489087/* Line 1806 of yacc.c  */
    9049 #line 2692 "parser.yy"
     9088#line 2695 "parser.yy"
     9089    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     9090    break;
     9091
     9092  case 725:
     9093
     9094/* Line 1806 of yacc.c  */
     9095#line 2697 "parser.yy"
     9096    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     9097    break;
     9098
     9099  case 726:
     9100
     9101/* Line 1806 of yacc.c  */
     9102#line 2702 "parser.yy"
    90509103    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    90519104    break;
    90529105
    9053   case 725:
    9054 
    9055 /* Line 1806 of yacc.c  */
    9056 #line 2694 "parser.yy"
     9106  case 727:
     9107
     9108/* Line 1806 of yacc.c  */
     9109#line 2704 "parser.yy"
    90579110    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    90589111    break;
    90599112
    9060   case 726:
    9061 
    9062 /* Line 1806 of yacc.c  */
    9063 #line 2699 "parser.yy"
     9113  case 728:
     9114
     9115/* Line 1806 of yacc.c  */
     9116#line 2709 "parser.yy"
    90649117    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    90659118    break;
    90669119
    9067   case 727:
    9068 
    9069 /* Line 1806 of yacc.c  */
    9070 #line 2701 "parser.yy"
     9120  case 729:
     9121
     9122/* Line 1806 of yacc.c  */
     9123#line 2711 "parser.yy"
    90719124    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    90729125    break;
    90739126
    9074   case 729:
    9075 
    9076 /* Line 1806 of yacc.c  */
    9077 #line 2728 "parser.yy"
     9127  case 731:
     9128
     9129/* Line 1806 of yacc.c  */
     9130#line 2738 "parser.yy"
    90789131    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    90799132    break;
    90809133
    9081   case 733:
    9082 
    9083 /* Line 1806 of yacc.c  */
    9084 #line 2739 "parser.yy"
     9134  case 735:
     9135
     9136/* Line 1806 of yacc.c  */
     9137#line 2749 "parser.yy"
    90859138    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    90869139    break;
    90879140
    9088   case 734:
    9089 
    9090 /* Line 1806 of yacc.c  */
    9091 #line 2741 "parser.yy"
     9141  case 736:
     9142
     9143/* Line 1806 of yacc.c  */
     9144#line 2751 "parser.yy"
    90929145    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    90939146    break;
    90949147
    9095   case 735:
    9096 
    9097 /* Line 1806 of yacc.c  */
    9098 #line 2743 "parser.yy"
     9148  case 737:
     9149
     9150/* Line 1806 of yacc.c  */
     9151#line 2753 "parser.yy"
    90999152    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91009153    break;
    91019154
    9102   case 736:
    9103 
    9104 /* Line 1806 of yacc.c  */
    9105 #line 2745 "parser.yy"
     9155  case 738:
     9156
     9157/* Line 1806 of yacc.c  */
     9158#line 2755 "parser.yy"
    91069159    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91079160    break;
    91089161
    9109   case 737:
    9110 
    9111 /* Line 1806 of yacc.c  */
    9112 #line 2747 "parser.yy"
     9162  case 739:
     9163
     9164/* Line 1806 of yacc.c  */
     9165#line 2757 "parser.yy"
    91139166    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91149167    break;
    91159168
    9116   case 738:
    9117 
    9118 /* Line 1806 of yacc.c  */
    9119 #line 2749 "parser.yy"
     9169  case 740:
     9170
     9171/* Line 1806 of yacc.c  */
     9172#line 2759 "parser.yy"
    91209173    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91219174    break;
    91229175
    9123   case 739:
    9124 
    9125 /* Line 1806 of yacc.c  */
    9126 #line 2756 "parser.yy"
     9176  case 741:
     9177
     9178/* Line 1806 of yacc.c  */
     9179#line 2766 "parser.yy"
    91279180    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91289181    break;
    91299182
    9130   case 740:
    9131 
    9132 /* Line 1806 of yacc.c  */
    9133 #line 2758 "parser.yy"
     9183  case 742:
     9184
     9185/* Line 1806 of yacc.c  */
     9186#line 2768 "parser.yy"
    91349187    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91359188    break;
    91369189
    9137   case 741:
    9138 
    9139 /* Line 1806 of yacc.c  */
    9140 #line 2760 "parser.yy"
     9190  case 743:
     9191
     9192/* Line 1806 of yacc.c  */
     9193#line 2770 "parser.yy"
    91419194    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91429195    break;
    91439196
    9144   case 742:
    9145 
    9146 /* Line 1806 of yacc.c  */
    9147 #line 2762 "parser.yy"
     9197  case 744:
     9198
     9199/* Line 1806 of yacc.c  */
     9200#line 2772 "parser.yy"
    91489201    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91499202    break;
    91509203
    9151   case 743:
    9152 
    9153 /* Line 1806 of yacc.c  */
    9154 #line 2764 "parser.yy"
     9204  case 745:
     9205
     9206/* Line 1806 of yacc.c  */
     9207#line 2774 "parser.yy"
    91559208    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91569209    break;
    91579210
    9158   case 744:
    9159 
    9160 /* Line 1806 of yacc.c  */
    9161 #line 2766 "parser.yy"
     9211  case 746:
     9212
     9213/* Line 1806 of yacc.c  */
     9214#line 2776 "parser.yy"
    91629215    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91639216    break;
    91649217
    9165   case 745:
    9166 
    9167 /* Line 1806 of yacc.c  */
    9168 #line 2771 "parser.yy"
     9218  case 747:
     9219
     9220/* Line 1806 of yacc.c  */
     9221#line 2781 "parser.yy"
    91699222    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    91709223    break;
    91719224
    9172   case 746:
    9173 
    9174 /* Line 1806 of yacc.c  */
    9175 #line 2776 "parser.yy"
     9225  case 748:
     9226
     9227/* Line 1806 of yacc.c  */
     9228#line 2786 "parser.yy"
    91769229    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    91779230    break;
    91789231
    9179   case 747:
    9180 
    9181 /* Line 1806 of yacc.c  */
    9182 #line 2778 "parser.yy"
     9232  case 749:
     9233
     9234/* Line 1806 of yacc.c  */
     9235#line 2788 "parser.yy"
    91839236    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    91849237    break;
    91859238
    9186   case 748:
    9187 
    9188 /* Line 1806 of yacc.c  */
    9189 #line 2780 "parser.yy"
     9239  case 750:
     9240
     9241/* Line 1806 of yacc.c  */
     9242#line 2790 "parser.yy"
    91909243    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    91919244    break;
    91929245
    9193   case 751:
    9194 
    9195 /* Line 1806 of yacc.c  */
    9196 #line 2804 "parser.yy"
     9246  case 753:
     9247
     9248/* Line 1806 of yacc.c  */
     9249#line 2814 "parser.yy"
    91979250    { (yyval.en) = 0; }
    91989251    break;
    91999252
    9200   case 752:
    9201 
    9202 /* Line 1806 of yacc.c  */
    9203 #line 2806 "parser.yy"
     9253  case 754:
     9254
     9255/* Line 1806 of yacc.c  */
     9256#line 2816 "parser.yy"
    92049257    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    92059258    break;
     
    92089261
    92099262/* Line 1806 of yacc.c  */
    9210 #line 9211 "Parser/parser.cc"
     9263#line 9264 "Parser/parser.cc"
    92119264      default: break;
    92129265    }
     
    94399492
    94409493/* Line 2067 of yacc.c  */
    9441 #line 2809 "parser.yy"
     9494#line 2819 "parser.yy"
    94429495
    94439496// ----end of grammar----
     
    94469499        std::cout << "Error ";
    94479500        if ( yyfilename ) {
    9448             std::cout << "in file " << yyfilename << " ";
     9501                std::cout << "in file " << yyfilename << " ";
    94499502        } // if
    94509503        std::cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << std::endl;
  • src/Parser/parser.yy

    r1f6e009 r1048b31  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar 24 16:16:16 2016
    13 // Update Count     : 1498
     12// Last Modified On : Wed Apr 13 16:58:43 2016
     13// Update Count     : 1519
    1414//
    1515
     
    372372                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), $1 ); }
    373373        | '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
    374                 { $$ = 0; }
     374                { $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); }
    375375        | postfix_expression '{' argument_expression_list '}' // CFA
    376376                {
     
    14381438                { $$ = DeclarationNode::newAggregate( $1, 0, 0, $3 ); }
    14391439        | aggregate_key no_attr_identifier_or_type_name
    1440                 { $$ = DeclarationNode::newAggregate( $1, $2, 0, 0 ); }
    1441         | aggregate_key no_attr_identifier_or_type_name '{' field_declaration_list '}'
    1442                 { $$ = DeclarationNode::newAggregate( $1, $2, 0, $4 ); }
     1440                {
     1441                        typedefTable.makeTypedef( *$2 );
     1442                        $$ = DeclarationNode::newAggregate( $1, $2, 0, 0 );
     1443                }
     1444        | aggregate_key no_attr_identifier_or_type_name
     1445                { typedefTable.makeTypedef( *$2 ); }
     1446                '{' field_declaration_list '}'
     1447                { $$ = DeclarationNode::newAggregate( $1, $2, 0, $5); }
    14431448        | aggregate_key '(' type_name_list ')' '{' field_declaration_list '}' // CFA
    1444                 { $$ = DeclarationNode::newAggregate( $1, 0, $3, $6 ); }
     1449                { $$ = DeclarationNode::newAggregate( $1, 0, $3, $6 ); }
    14451450        | aggregate_key typegen_name                                            // CFA, S/R conflict
    14461451                { $$ = $2; }
     
    15201525        enum_key '{' enumerator_list comma_opt '}'
    15211526                { $$ = DeclarationNode::newEnum( 0, $3 ); }
    1522         | enum_key no_attr_identifier_or_type_name '{' enumerator_list comma_opt '}'
    1523                 { $$ = DeclarationNode::newEnum( $2, $4 ); }
    15241527        | enum_key no_attr_identifier_or_type_name
    1525                 { $$ = DeclarationNode::newEnum( $2, 0 ); }
     1528                {
     1529                        typedefTable.makeTypedef( *$2 );
     1530                        $$ = DeclarationNode::newEnum( $2, 0 );
     1531                }
     1532        | enum_key no_attr_identifier_or_type_name
     1533                { typedefTable.makeTypedef( *$2 ); }
     1534                '{' enumerator_list comma_opt '}'
     1535                { $$ = DeclarationNode::newEnum( $2, $5 ); }
    15261536        ;
    15271537
     
    28132823        std::cout << "Error ";
    28142824        if ( yyfilename ) {
    2815             std::cout << "in file " << yyfilename << " ";
     2825                std::cout << "in file " << yyfilename << " ";
    28162826        } // if
    28172827        std::cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << std::endl;
  • src/ResolvExpr/AlternativeFinder.cc

    r1f6e009 r1048b31  
    848848        }
    849849
     850        void AlternativeFinder::visit( OffsetPackExpr *offsetPackExpr ) {
     851                alternatives.push_back( Alternative( offsetPackExpr->clone(), env, Cost::zero ) );
     852        }
     853
    850854        void AlternativeFinder::resolveAttr( DeclarationWithType *funcDecl, FunctionType *function, Type *argType, const TypeEnvironment &env ) {
    851855                // assume no polymorphism
  • src/ResolvExpr/AlternativeFinder.h

    r1f6e009 r1048b31  
    5959                virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    6060                virtual void visit( OffsetofExpr *offsetofExpr );
     61                virtual void visit( OffsetPackExpr *offsetPackExpr );
    6162                virtual void visit( AttrExpr *attrExpr );
    6263                virtual void visit( LogicalExpr *logicalExpr );
  • src/ResolvExpr/CastCost.cc

    r1f6e009 r1048b31  
    6969                PointerType *destAsPointer = dynamic_cast< PointerType* >( dest );
    7070                if ( destAsPointer && basicType->isInteger() ) {
    71                         //cost = Cost( 1, 0, 0 );
    72                         cost = Cost::infinity;
     71                        // necessary for, e.g. unsigned long => void*
     72                        cost = Cost( 1, 0, 0 );
    7373                } else {
    7474                        ConversionCost::visit( basicType );
     
    8989                                } else if ( castResult < 0 ) {
    9090                                        cost = Cost::infinity;
    91                                         //cost = Cost( 1, 0, 0 );
    9291                                } // if
    9392                        } // if
    9493                } else if ( BasicType *destAsBasic = dynamic_cast< BasicType* >( dest ) ) {
    9594                        if ( destAsBasic->isInteger() ) {
    96                                 //cost = Cost( 1, 0, 0 );
    97                                 cost = Cost::infinity;
     95                                // necessary for, e.g. void* => unsigned long
     96                                cost = Cost( 1, 0, 0 );
    9897                        } // if
    9998                }
  • src/SymTab/AddVisit.h

    r1f6e009 r1048b31  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 16:14:32 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue Jul 14 12:26:17 2015
    13 // Update Count     : 4
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Thu Apr  7 14:42:21 2016
     13// Update Count     : 5
    1414//
    1515
     
    2727
    2828        template< typename Visitor >
    29         inline void addVisitStatement( Statement *stmt, Visitor &visitor ) {
    30                 maybeAccept( stmt, visitor );
    31 ///   if ( ! declsToAdd.empty() ) {
    32 ///     CompoundStmt *compound = new CompoundStmt( noLabels );
    33 ///     compound->get_kids().push_back( stmt );
    34 ///     addDecls( declsToAdd, compound->get_kids(), compound->get_kids().end() );
    35 ///   }
    36         }
    37 
    38         template< typename Visitor >
    3929        inline void addVisit(CompoundStmt *compoundStmt, Visitor &visitor) {
    4030                addVisitStatementList( compoundStmt->get_kids(), visitor );
    41         }
    42 
    43         template< typename Visitor >
    44         inline void addVisit(IfStmt *ifStmt, Visitor &visitor) {
    45                 addVisitStatement( ifStmt->get_thenPart(), visitor );
    46                 addVisitStatement( ifStmt->get_elsePart(), visitor );
    47                 maybeAccept( ifStmt->get_condition(), visitor );
    48         }
    49 
    50         template< typename Visitor >
    51         inline void addVisit(WhileStmt *whileStmt, Visitor &visitor) {
    52                 addVisitStatement( whileStmt->get_body(), visitor );
    53                 maybeAccept( whileStmt->get_condition(), visitor );
    54         }
    55 
    56         template< typename Visitor >
    57         inline void addVisit(ForStmt *forStmt, Visitor &visitor) {
    58                 addVisitStatement( forStmt->get_body(), visitor );
    59                 acceptAll( forStmt->get_initialization(), visitor );
    60                 maybeAccept( forStmt->get_condition(), visitor );
    61                 maybeAccept( forStmt->get_increment(), visitor );
    6231        }
    6332
     
    7443        }
    7544
    76         template< typename Visitor >
    77         inline void addVisit(CaseStmt *caseStmt, Visitor &visitor) {
    78                 addVisitStatementList( caseStmt->get_statements(), visitor );
    79                 maybeAccept( caseStmt->get_condition(), visitor );
    80         }
    81 
    82         template< typename Visitor >
    83         inline void addVisit(CatchStmt *cathStmt, Visitor &visitor) {
    84                 addVisitStatement( cathStmt->get_body(), visitor );
    85                 maybeAccept( cathStmt->get_decl(), visitor );
    86         }
     45        // template< typename Visitor >
     46        // inline void addVisit(CaseStmt *caseStmt, Visitor &visitor) {
     47        //      addVisitStatementList( caseStmt->get_statements(), visitor );
     48        //      maybeAccept( caseStmt->get_condition(), visitor );
     49        // }
    8750} // namespace SymTab
    8851
  • src/SymTab/Indexer.cc

    r1f6e009 r1048b31  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Indexer.cc -- 
     7// Indexer.cc --
    88//
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 21:37:33 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:31:29 2016
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Fri Apr 22 15:25:43 2016
    1313// Update Count     : 11
    1414//
     
    5959                }
    6060        }
    61        
     61
    6262        template< typename Decl >
    6363        void dump( const std::unordered_map< std::string, Decl* > &table, std::ostream &os ) {
     
    6666                } // for
    6767        }
    68        
     68
    6969        struct Indexer::Impl {
    7070                Impl( unsigned long _scope ) : refCount(1), scope( _scope ), size( 0 ), base(),
     
    7676                unsigned long size;       ///< Number of elements stored in this table
    7777                const Indexer base;       ///< Base indexer this extends
    78                
     78
    7979                IdTable idTable;          ///< Identifier namespace
    8080                TypeTable typeTable;      ///< Type namespace
     
    213213        void Indexer::visit( StructDecl *aggregateDecl ) {
    214214                // make up a forward declaration and add it before processing the members
    215                 StructDecl fwdDecl( aggregateDecl->get_name() );
     215                // needs to be on the heap because addStruct saves the pointer
     216                StructDecl &fwdDecl = *new StructDecl( aggregateDecl->get_name() );
    216217                cloneAll( aggregateDecl->get_parameters(), fwdDecl.get_parameters() );
    217218                debugPrint( "Adding fwd decl for struct " << fwdDecl.get_name() << std::endl );
    218219                addStruct( &fwdDecl );
    219  
     220
    220221                enterScope();
    221222                acceptAll( aggregateDecl->get_parameters(), *this );
    222223                acceptAll( aggregateDecl->get_members(), *this );
    223224                leaveScope();
    224  
     225
    225226                debugPrint( "Adding struct " << aggregateDecl->get_name() << std::endl );
    226227                // this addition replaces the forward declaration
     
    234235                debugPrint( "Adding fwd decl for union " << fwdDecl.get_name() << std::endl );
    235236                addUnion( &fwdDecl );
    236  
     237
    237238                enterScope();
    238239                acceptAll( aggregateDecl->get_parameters(), *this );
    239240                acceptAll( aggregateDecl->get_members(), *this );
    240241                leaveScope();
    241  
     242
    242243                debugPrint( "Adding union " << aggregateDecl->get_name() << std::endl );
    243244                addUnion( aggregateDecl );
     
    256257                acceptAll( aggregateDecl->get_members(), *this );
    257258                leaveScope();
    258  
     259
    259260                debugPrint( "Adding context " << aggregateDecl->get_name() << std::endl );
    260261                addTrait( aggregateDecl );
     
    344345                maybeAccept( offsetofExpr->get_type(), *this );
    345346                maybeAccept( offsetofExpr->get_member(), *this );
     347        }
     348
     349        void Indexer::visit( OffsetPackExpr *offsetPackExpr ) {
     350                acceptAllNewScope( offsetPackExpr->get_results(), *this );
     351                maybeAccept( offsetPackExpr->get_type(), *this );
    346352        }
    347353
     
    433439        }
    434440
    435        
     441
    436442
    437443        void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const {
    438444                std::unordered_set< std::string > foundMangleNames;
    439                
     445
    440446                Indexer::Impl *searchTables = tables;
    441447                while ( searchTables ) {
     
    447453                                        // mark the mangled name as found, skipping this insertion if a declaration for that name has already been found
    448454                                        if ( foundMangleNames.insert( decl->first ).second == false ) continue;
    449                                        
     455
    450456                                        out.push_back( decl->second );
    451457                                }
    452458                        }
    453                        
     459
    454460                        // get declarations from base indexers
    455461                        searchTables = searchTables->base.tables;
     
    506512        }
    507513
    508         bool Indexer::hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const {
     514        bool Indexer::hasIncompatibleCDecl( const std::string &id, const std::string &mangleName, unsigned long scope ) const {
    509515                if ( ! tables ) return false;
     516                if ( tables->scope < scope ) return false;
    510517
    511518                IdTable::const_iterator decls = tables->idTable.find( id );
     
    513520                        const MangleTable &mangleTable = decls->second;
    514521                        for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) {
    515                                 // check for C decls with the same name, skipping 
     522                                // check for C decls with the same name, skipping
    516523                                // those with a compatible type (by mangleName)
    517524                                if ( decl->second->get_linkage() == LinkageSpec::C && decl->first != mangleName ) return true;
     
    519526                }
    520527
    521                 return tables->base.hasIncompatibleCDecl( id, mangleName );
    522         }
    523        
     528                return tables->base.hasIncompatibleCDecl( id, mangleName, scope );
     529        }
     530
    524531        NamedTypeDecl *Indexer::lookupTypeAtScope( const std::string &id, unsigned long scope ) const {
    525532                if ( ! tables ) return 0;
     
    529536                return ret != tables->typeTable.end() ? ret->second : tables->base.lookupTypeAtScope( id, scope );
    530537        }
    531        
     538
    532539        StructDecl *Indexer::lookupStructAtScope( const std::string &id, unsigned long scope ) const {
    533540                if ( ! tables ) return 0;
     
    537544                return ret != tables->structTable.end() ? ret->second : tables->base.lookupStructAtScope( id, scope );
    538545        }
    539        
     546
    540547        EnumDecl *Indexer::lookupEnumAtScope( const std::string &id, unsigned long scope ) const {
    541548                if ( ! tables ) return 0;
     
    545552                return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnumAtScope( id, scope );
    546553        }
    547        
     554
    548555        UnionDecl *Indexer::lookupUnionAtScope( const std::string &id, unsigned long scope ) const {
    549556                if ( ! tables ) return 0;
     
    553560                return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnionAtScope( id, scope );
    554561        }
    555        
     562
    556563        TraitDecl *Indexer::lookupTraitAtScope( const std::string &id, unsigned long scope ) const {
    557564                if ( ! tables ) return 0;
     
    596603                return true;
    597604        }
    598        
     605
    599606        void Indexer::addId( DeclarationWithType *decl ) {
    600607                makeWritable();
     
    612619                DeclarationWithType *existing = lookupIdAtScope( name, mangleName, scope );
    613620                if ( ! existing || ! addedIdConflicts( existing, decl ) ) {
    614                         // this ensures that no two declarations with the same unmangled name both have C linkage
    615                         if ( decl->get_linkage() == LinkageSpec::C && hasIncompatibleCDecl( name, mangleName ) ) {
     621                        // this ensures that no two declarations with the same unmangled name at the same scope both have C linkage
     622                        if ( decl->get_linkage() == LinkageSpec::C && hasIncompatibleCDecl( name, mangleName, scope ) ) {
    616623                                throw SemanticError( "invalid overload of C function ", decl );
    617                         } // NOTE this is broken in Richard's original code in such a way that it never triggers (it 
    618                           // doesn't check decls that have the same manglename, and all C-linkage decls are defined to 
     624                        } // NOTE this is broken in Richard's original code in such a way that it never triggers (it
     625                          // doesn't check decls that have the same manglename, and all C-linkage decls are defined to
    619626                          // have their name as their manglename, hence the error can never trigger).
    620                           // The code here is closer to correct, but name mangling would have to be completely 
     627                          // The code here is closer to correct, but name mangling would have to be completely
    621628                          // isomorphic to C type-compatibility, which it may not be.
    622                        
     629
    623630                        tables->idTable[ name ][ mangleName ] = decl;
    624631                        ++tables->size;
     
    635642                }
    636643        }
    637        
     644
    638645        void Indexer::addType( NamedTypeDecl *decl ) {
    639646                makeWritable();
     
    666673                addStruct( new StructDecl( id ) );
    667674        }
    668        
     675
    669676        void Indexer::addStruct( StructDecl *decl ) {
    670677                makeWritable();
     
    684691                }
    685692        }
    686        
     693
    687694        void Indexer::addEnum( EnumDecl *decl ) {
    688695                makeWritable();
     
    706713                addUnion( new UnionDecl( id ) );
    707714        }
    708        
     715
    709716        void Indexer::addUnion( UnionDecl *decl ) {
    710717                makeWritable();
     
    724731                }
    725732        }
    726        
     733
    727734        void Indexer::addTrait( TraitDecl *decl ) {
    728735                makeWritable();
     
    745752        void Indexer::enterScope() {
    746753                ++scope;
    747                
     754
    748755                if ( doDebug ) {
    749756                        std::cout << "--- Entering scope " << scope << std::endl;
     
    778785            using std::cerr;
    779786
    780             cerr << "===idTable===" << std::endl;
    781             if ( tables ) dump( tables->idTable, os );
    782             cerr << "===typeTable===" << std::endl;
    783             if ( tables ) dump( tables->typeTable, os );
    784             cerr << "===structTable===" << std::endl;
    785             if ( tables ) dump( tables->structTable, os );
    786             cerr << "===enumTable===" << std::endl;
    787             if ( tables ) dump( tables->enumTable, os );
    788             cerr << "===unionTable===" << std::endl;
    789             if ( tables ) dump( tables->unionTable, os );
    790             cerr << "===contextTable===" << std::endl;
    791             if ( tables ) dump( tables->traitTable, os );
     787                if ( tables ) {
     788                        os << "--- scope " << tables->scope << " ---" << std::endl;
     789
     790                        os << "===idTable===" << std::endl;
     791                        dump( tables->idTable, os );
     792                        os << "===typeTable===" << std::endl;
     793                        dump( tables->typeTable, os );
     794                        os << "===structTable===" << std::endl;
     795                        dump( tables->structTable, os );
     796                        os << "===enumTable===" << std::endl;
     797                        dump( tables->enumTable, os );
     798                        os << "===unionTable===" << std::endl;
     799                        dump( tables->unionTable, os );
     800                        os << "===contextTable===" << std::endl;
     801                        dump( tables->traitTable, os );
     802
     803                        tables->base.print( os, indent );
     804                } else {
     805                        os << "--- end ---" << std::endl;
     806                }
     807
    792808        }
    793809} // namespace SymTab
  • src/SymTab/Indexer.h

    r1f6e009 r1048b31  
    5959                virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    6060                virtual void visit( OffsetofExpr *offsetofExpr );
     61                virtual void visit( OffsetPackExpr *offsetPackExpr );
    6162                virtual void visit( AttrExpr *attrExpr );
    6263                virtual void visit( LogicalExpr *logicalExpr );
     
    9899                DeclarationWithType *lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const;
    99100                /// returns true if there exists a declaration with C linkage and the given name with a different mangled name
    100                 bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const;
     101                bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName, unsigned long scope ) const;
    101102                // equivalents to lookup functions that only look at tables at scope `scope` (which should be >= tables->scope)
    102103                NamedTypeDecl *lookupTypeAtScope( const std::string &id, unsigned long scope ) const;
  • src/SymTab/Validate.cc

    r1f6e009 r1048b31  
    1010// Created On       : Sun May 17 21:50:04 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:31:39 2016
    13 // Update Count     : 226
     12// Last Modified On : Wed Apr 13 16:39:30 2016
     13// Update Count     : 251
    1414//
    1515
     
    4040#include <list>
    4141#include <iterator>
     42#include "Common/utility.h"
     43#include "Common/UniqueName.h"
    4244#include "Validate.h"
    4345#include "SynTree/Visitor.h"
    4446#include "SynTree/Mutator.h"
    4547#include "SynTree/Type.h"
     48#include "SynTree/Expression.h"
    4649#include "SynTree/Statement.h"
    4750#include "SynTree/TypeSubstitution.h"
     
    4952#include "FixFunction.h"
    5053// #include "ImplementationType.h"
    51 #include "Common/utility.h"
    52 #include "Common/UniqueName.h"
     54#include "GenPoly/DeclMutator.h"
    5355#include "AddVisit.h"
    5456#include "MakeLibCfa.h"
     
    7072
    7173                virtual void visit( CompoundStmt *compoundStmt );
    72                 virtual void visit( IfStmt *ifStmt );
    73                 virtual void visit( WhileStmt *whileStmt );
    74                 virtual void visit( ForStmt *forStmt );
    7574                virtual void visit( SwitchStmt *switchStmt );
    7675                virtual void visit( ChooseStmt *chooseStmt );
    77                 virtual void visit( CaseStmt *caseStmt );
    78                 virtual void visit( CatchStmt *catchStmt );
     76                // virtual void visit( CaseStmt *caseStmt );
    7977          private:
    8078                HoistStruct();
     
    144142
    145143                virtual void visit( CompoundStmt *compoundStmt );
    146                 virtual void visit( IfStmt *ifStmt );
    147                 virtual void visit( WhileStmt *whileStmt );
    148                 virtual void visit( ForStmt *forStmt );
    149144                virtual void visit( SwitchStmt *switchStmt );
    150145                virtual void visit( ChooseStmt *chooseStmt );
    151                 virtual void visit( CaseStmt *caseStmt );
    152                 virtual void visit( CatchStmt *catchStmt );
     146                // virtual void visit( CaseStmt *caseStmt );
    153147
    154148                AutogenerateRoutines() : functionNesting( 0 ) {}
     
    166160                /// and return something if the return type is non-void.
    167161                static void checkFunctionReturns( std::list< Declaration * > & translationUnit );
    168 
    169162          private:
    170163                virtual void visit( FunctionDecl * functionDecl );
     
    197190                AggDecl *handleAggregate( AggDecl * aggDecl );
    198191
     192                template<typename AggDecl>
     193                void addImplicitTypedef( AggDecl * aggDecl );
     194               
    199195                typedef std::map< std::string, std::pair< TypedefDecl *, int > > TypedefMap;
    200196                TypedefMap typedefNames;
     
    202198        };
    203199
     200        class CompoundLiteral : public GenPoly::DeclMutator {
     201                DeclarationNode::StorageClass storageclass = DeclarationNode::NoStorageClass;
     202
     203                virtual DeclarationWithType * mutate( ObjectDecl *objectDecl );
     204                virtual Expression *mutate( CompoundLiteralExpr *compLitExpr );
     205        };
     206
    204207        void validate( std::list< Declaration * > &translationUnit, bool doDebug ) {
    205208                Pass1 pass1;
    206209                Pass2 pass2( doDebug, 0 );
    207210                Pass3 pass3( 0 );
     211                CompoundLiteral compoundliteral;
     212
    208213                EliminateTypedef::eliminateTypedef( translationUnit );
    209214                HoistStruct::hoistStruct( translationUnit );
     
    211216                acceptAll( translationUnit, pass2 );
    212217                ReturnChecker::checkFunctionReturns( translationUnit );
     218                mutateAll( translationUnit, compoundliteral );
    213219                AutogenerateRoutines::autogenerateRoutines( translationUnit );
    214220                acceptAll( translationUnit, pass3 );
     
    292298        }
    293299
    294         void HoistStruct::visit( IfStmt *ifStmt ) {
    295                 addVisit( ifStmt, *this );
    296         }
    297 
    298         void HoistStruct::visit( WhileStmt *whileStmt ) {
    299                 addVisit( whileStmt, *this );
    300         }
    301 
    302         void HoistStruct::visit( ForStmt *forStmt ) {
    303                 addVisit( forStmt, *this );
    304         }
    305 
    306300        void HoistStruct::visit( SwitchStmt *switchStmt ) {
    307301                addVisit( switchStmt, *this );
     
    312306        }
    313307
    314         void HoistStruct::visit( CaseStmt *caseStmt ) {
    315                 addVisit( caseStmt, *this );
    316         }
    317 
    318         void HoistStruct::visit( CatchStmt *cathStmt ) {
    319                 addVisit( cathStmt, *this );
    320         }
     308        // void HoistStruct::visit( CaseStmt *caseStmt ) {
     309        //      addVisit( caseStmt, *this );
     310        // }
    321311
    322312        void Pass1::visit( EnumDecl *enumDecl ) {
     
    874864        }
    875865
    876         void AutogenerateRoutines::visit( IfStmt *ifStmt ) {
    877                 visitStatement( ifStmt );
    878         }
    879 
    880         void AutogenerateRoutines::visit( WhileStmt *whileStmt ) {
    881                 visitStatement( whileStmt );
    882         }
    883 
    884         void AutogenerateRoutines::visit( ForStmt *forStmt ) {
    885                 visitStatement( forStmt );
    886         }
    887 
    888866        void AutogenerateRoutines::visit( SwitchStmt *switchStmt ) {
    889867                visitStatement( switchStmt );
     
    894872        }
    895873
    896         void AutogenerateRoutines::visit( CaseStmt *caseStmt ) {
    897                 visitStatement( caseStmt );
    898         }
    899 
    900         void AutogenerateRoutines::visit( CatchStmt *cathStmt ) {
    901                 visitStatement( cathStmt );
    902         }
     874        // void AutogenerateRoutines::visit( CaseStmt *caseStmt ) {
     875        //      visitStatement( caseStmt );
     876        // }
    903877
    904878        void ReturnChecker::checkFunctionReturns( std::list< Declaration * > & translationUnit ) {
     
    947921                                }
    948922                                rtt->get_parameters().clear();
    949                                 cloneAll(typeInst->get_parameters(), rtt->get_parameters());
     923                                cloneAll( typeInst->get_parameters(), rtt->get_parameters() );
     924                                mutateAll( rtt->get_parameters(), *this );  // recursively fix typedefs on parameters
    950925                        } // if
    951926                        delete typeInst;
     
    10431018        }
    10441019
    1045         // there may be typedefs nested within aggregates
    1046         // in order for everything to work properly, these
    1047         // should be removed as well
     1020        // there may be typedefs nested within aggregates in order for everything to work properly, these should be removed
     1021        // as well
    10481022        template<typename AggDecl>
    10491023        AggDecl *EliminateTypedef::handleAggregate( AggDecl * aggDecl ) {
     
    10591033                return aggDecl;
    10601034        }
    1061 
     1035       
     1036        template<typename AggDecl>
     1037        void EliminateTypedef::addImplicitTypedef( AggDecl * aggDecl ) {
     1038                if ( typedefNames.count( aggDecl->get_name() ) == 0 ) {
     1039                        Type *type;
     1040                        if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( aggDecl ) ) {
     1041                                type = new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() );
     1042                        } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( aggDecl ) ) {
     1043                                type = new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() );
     1044                        } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( aggDecl )  ) {
     1045                                type = new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() );
     1046                        } // if
     1047                        TypedefDecl * tyDecl = new TypedefDecl( aggDecl->get_name(), DeclarationNode::NoStorageClass, type );
     1048                        typedefNames[ aggDecl->get_name() ] = std::make_pair( tyDecl, scopeLevel );
     1049                } // if
     1050        }
    10621051        Declaration *EliminateTypedef::mutate( StructDecl * structDecl ) {
     1052                addImplicitTypedef( structDecl );
    10631053                Mutator::mutate( structDecl );
    10641054                return handleAggregate( structDecl );
     
    10661056
    10671057        Declaration *EliminateTypedef::mutate( UnionDecl * unionDecl ) {
     1058                addImplicitTypedef( unionDecl );
    10681059                Mutator::mutate( unionDecl );
    10691060                return handleAggregate( unionDecl );
     
    10711062
    10721063        Declaration *EliminateTypedef::mutate( EnumDecl * enumDecl ) {
     1064                addImplicitTypedef( enumDecl );
    10731065                Mutator::mutate( enumDecl );
    10741066                return handleAggregate( enumDecl );
    10751067        }
    10761068
    1077                 Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) {
     1069        Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) {
    10781070                Mutator::mutate( contextDecl );
    10791071                return handleAggregate( contextDecl );
    10801072        }
    10811073
     1074        DeclarationWithType * CompoundLiteral::mutate( ObjectDecl *objectDecl ) {
     1075                storageclass = objectDecl->get_storageClass();
     1076                DeclarationWithType * temp = Mutator::mutate( objectDecl );
     1077                storageclass = DeclarationNode::NoStorageClass;
     1078                return temp;
     1079        }
     1080
     1081        Expression *CompoundLiteral::mutate( CompoundLiteralExpr *compLitExpr ) {
     1082                // transform [storage_class] ... (struct S){ 3, ... };
     1083                // into [storage_class] struct S temp =  { 3, ... };
     1084                static UniqueName indexName( "_compLit" );
     1085
     1086                ObjectDecl *tempvar = new ObjectDecl( indexName.newName(), storageclass, LinkageSpec::C, 0, compLitExpr->get_type(), compLitExpr->get_initializer() );
     1087                compLitExpr->set_type( 0 );
     1088                compLitExpr->set_initializer( 0 );
     1089                delete compLitExpr;
     1090                DeclarationWithType * newtempvar = mutate( tempvar );
     1091                addDeclaration( newtempvar );                                   // add modified temporary to current block
     1092                return new VariableExpr( newtempvar );
     1093        }
    10821094} // namespace SymTab
    10831095
  • src/SynTree/Expression.cc

    r1f6e009 r1048b31  
    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:10:29 2015
    13 // Update Count     : 34
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Fri Apr  8 17:16:23 2016
     13// Update Count     : 40
    1414//
    1515
     
    2222
    2323#include "Type.h"
     24#include "Initializer.h"
    2425#include "Expression.h"
    2526#include "Declaration.h"
     
    211212
    212213        os << " of ";
     214
     215        if ( type ) {
     216                type->print(os, indent + 2);
     217        } else {
     218                os << "<NULL>";
     219        }
     220
     221        os << std::endl;
     222        Expression::print( os, indent );
     223}
     224
     225OffsetPackExpr::OffsetPackExpr( StructInstType *type_, Expression *aname_ ) : Expression( aname_ ), type( type_ ) {
     226        add_result( new ArrayType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0, false, false ) );
     227}
     228
     229OffsetPackExpr::OffsetPackExpr( const OffsetPackExpr &other ) : Expression( other ), type( maybeClone( other.type ) ) {}
     230
     231OffsetPackExpr::~OffsetPackExpr() { delete type; }
     232
     233void OffsetPackExpr::print( std::ostream &os, int indent ) const {
     234        os << std::string( indent, ' ' ) << "Offset pack expression on ";
    213235
    214236        if ( type ) {
     
    443465
    444466
     467CompoundLiteralExpr::CompoundLiteralExpr( Type * type, Initializer * initializer ) : type( type ), initializer( initializer ) {
     468        add_result( type->clone() );
     469}
     470
     471CompoundLiteralExpr::CompoundLiteralExpr( const CompoundLiteralExpr &other ) : Expression( other ), type( maybeClone( other.type ) ), initializer( maybeClone( other.initializer ) ) {}
     472
     473CompoundLiteralExpr::~CompoundLiteralExpr() {
     474        delete initializer;
     475        delete type;
     476}
     477
     478void CompoundLiteralExpr::print( std::ostream &os, int indent ) const {
     479        os << "Compound Literal Expression: " << std::endl;
     480        if ( type ) type->print( os, indent + 2 );
     481        if ( initializer ) initializer->print( os, indent + 2 );
     482}
     483
    445484
    446485std::ostream & operator<<( std::ostream & out, Expression * expr ) {
  • src/SynTree/Expression.h

    r1f6e009 r1048b31  
    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:10:21 2015
    13 // Update Count     : 19
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Fri Apr  8 17:18:06 2016
     13// Update Count     : 21
    1414//
    1515
     
    362362};
    363363
     364/// Expression representing a pack of field-offsets for a generic type
     365class OffsetPackExpr : public Expression {
     366public:
     367        OffsetPackExpr( StructInstType *type_, Expression *aname_ = 0 );
     368        OffsetPackExpr( const OffsetPackExpr &other );
     369        virtual ~OffsetPackExpr();
     370
     371        StructInstType *get_type() const { return type; }
     372        void set_type( StructInstType *newValue ) { type = newValue; }
     373
     374        virtual OffsetPackExpr *clone() const { return new OffsetPackExpr( *this ); }
     375        virtual void accept( Visitor &v ) { v.visit( this ); }
     376        virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     377
     378        virtual void print( std::ostream &os, int indent = 0 ) const;
     379
     380private:
     381        StructInstType *type;
     382};
     383
    364384/// AttrExpr represents an @attribute expression (like sizeof, but user-defined)
    365385class AttrExpr : public Expression {
     
    557577};
    558578
     579/// CompoundLiteralExpr represents a C99 'compound literal'
     580class CompoundLiteralExpr : public Expression {
     581  public:
     582        CompoundLiteralExpr( Type * type, Initializer * initializer );
     583        CompoundLiteralExpr( const CompoundLiteralExpr &other );
     584        ~CompoundLiteralExpr();
     585
     586        Type * get_type() const { return type; }
     587        void set_type( Type * t ) { type = t; }
     588
     589        Initializer * get_initializer() const { return initializer; }
     590        void set_initializer( Initializer * i ) { initializer = i; }
     591
     592        virtual CompoundLiteralExpr *clone() const { return new CompoundLiteralExpr( *this ); }
     593        virtual void accept( Visitor &v ) { v.visit( this ); }
     594        virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     595        virtual void print( std::ostream &os, int indent = 0 ) const;
     596  private:
     597        Type * type;
     598        Initializer * initializer;
     599};
     600
    559601std::ostream & operator<<( std::ostream & out, Expression * expr );
    560602
  • src/SynTree/Mutator.cc

    r1f6e009 r1048b31  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:28:20 2016
    13 // Update Count     : 12
     12// Last Modified On : Fri Apr  1 18:05:16 2016
     13// Update Count     : 16
    1414//
    1515
     
    274274}
    275275
     276Expression *Mutator::mutate( OffsetPackExpr *offsetPackExpr ) {
     277        mutateAll( offsetPackExpr->get_results(), *this );
     278        offsetPackExpr->set_type( maybeMutate( offsetPackExpr->get_type(), *this ) );
     279        return offsetPackExpr;
     280}
     281
    276282Expression *Mutator::mutate( AttrExpr *attrExpr ) {
    277283        mutateAll( attrExpr->get_results(), *this );
     
    334340        mutateAll( valofExpr->get_results(), *this );
    335341        return valofExpr;
     342}
     343
     344Expression *Mutator::mutate( CompoundLiteralExpr *compLitExpr ) {
     345        mutateAll( compLitExpr->get_results(), *this );
     346        compLitExpr->set_type( maybeMutate( compLitExpr->get_type(), *this ) );
     347        compLitExpr->set_initializer( maybeMutate( compLitExpr->get_initializer(), *this ) );
     348        return compLitExpr;
    336349}
    337350
  • src/SynTree/Mutator.h

    r1f6e009 r1048b31  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:33:11 2016
    13 // Update Count     : 9
     12// Last Modified On : Fri Apr  1 17:26:56 2016
     13// Update Count     : 10
    1414//
    1515#include <cassert>
     
    6767        virtual Expression* mutate( UntypedOffsetofExpr *offsetofExpr );
    6868        virtual Expression* mutate( OffsetofExpr *offsetofExpr );
     69        virtual Expression* mutate( OffsetPackExpr *offsetPackExpr );
    6970        virtual Expression* mutate( AttrExpr *attrExpr );
    7071        virtual Expression* mutate( LogicalExpr *logicalExpr );
     
    7677        virtual Expression* mutate( AsmExpr *asmExpr );
    7778        virtual Expression* mutate( UntypedValofExpr *valofExpr );
     79        virtual Expression* mutate( CompoundLiteralExpr *compLitExpr );
    7880
    7981        virtual Type* mutate( VoidType *basicType );
  • src/SynTree/SynTree.h

    r1f6e009 r1048b31  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:29:00 2016
    13 // Update Count     : 4
     12// Last Modified On : Fri Apr  1 16:47:44 2016
     13// Update Count     : 5
    1414//
    1515
     
    7272class UntypedOffsetofExpr;
    7373class OffsetofExpr;
     74class OffsetPackExpr;
    7475class AttrExpr;
    7576class LogicalExpr;
     
    8182class AsmExpr;
    8283class UntypedValofExpr;
     84class CompoundLiteralExpr;
    8385
    8486class Type;
  • src/SynTree/Visitor.cc

    r1f6e009 r1048b31  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:29:23 2016
    13 // Update Count     : 16
     12// Last Modified On : Fri Apr  1 18:05:13 2016
     13// Update Count     : 18
    1414//
    1515
     
    230230}
    231231
     232void Visitor::visit( OffsetPackExpr *offsetPackExpr ) {
     233        acceptAll( offsetPackExpr->get_results(), *this );
     234        maybeAccept( offsetPackExpr->get_type(), *this );
     235}
     236
    232237void Visitor::visit( AttrExpr *attrExpr ) {
    233238        acceptAll( attrExpr->get_results(), *this );
     
    282287        acceptAll( valofExpr->get_results(), *this );
    283288        maybeAccept( valofExpr->get_body(), *this );
     289}
     290
     291void Visitor::visit( CompoundLiteralExpr *compLitExpr ) {
     292        acceptAll( compLitExpr->get_results(), *this );
     293        maybeAccept( compLitExpr->get_type(), *this );
     294        maybeAccept( compLitExpr->get_initializer(), *this );
    284295}
    285296
  • src/SynTree/Visitor.h

    r1f6e009 r1048b31  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:33:35 2016
    13 // Update Count     : 6
     12// Last Modified On : Fri Apr  1 17:26:55 2016
     13// Update Count     : 7
    1414//
    1515
     
    6767        virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    6868        virtual void visit( OffsetofExpr *offsetofExpr );
     69        virtual void visit( OffsetPackExpr *offsetPackExpr );
    6970        virtual void visit( AttrExpr *attrExpr );
    7071        virtual void visit( LogicalExpr *logicalExpr );
     
    7677        virtual void visit( AsmExpr *asmExpr );
    7778        virtual void visit( UntypedValofExpr *valofExpr );
     79        virtual void visit( CompoundLiteralExpr *compLitExpr );
    7880
    7981        virtual void visit( VoidType *basicType );
  • src/Tuples/FlattenTuple.cc

    r1f6e009 r1048b31  
    4949        void FlattenTuple::CollectArgs::visit( UntypedOffsetofExpr *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
    5050        void FlattenTuple::CollectArgs::visit( OffsetofExpr        *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
     51        void FlattenTuple::CollectArgs::visit( OffsetPackExpr      *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
    5152        void FlattenTuple::CollectArgs::visit( AttrExpr            *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
    5253        void FlattenTuple::CollectArgs::visit( LogicalExpr         *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
  • src/Tuples/FlattenTuple.h

    r1f6e009 r1048b31  
    4545                        virtual void visit( UntypedOffsetofExpr * );
    4646                        virtual void visit( OffsetofExpr * );
     47                        virtual void visit( OffsetPackExpr * );
    4748                        virtual void visit( AttrExpr * );
    4849                        virtual void visit( LogicalExpr * );
  • src/driver/cfa.cc

    r1f6e009 r1048b31  
    1010// Created On       : Tue Aug 20 13:44:49 2002
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jan 28 18:24:06 2016
    13 // Update Count     : 127
     12// Last Modified On : Wed Apr 20 18:31:28 2016
     13// Update Count     : 133
    1414//
    1515
     
    165165                                nargs += 1;
    166166                        } else if ( prefix( arg, "-std=" ) ) {
    167                                 std_flag = true;                                                // std=XX provided
     167                                std_flag = true;                                                // -std=XX provided
    168168                                args[nargs] = argv[i];                                  // pass the argument along
    169169                                nargs += 1;
     
    307307                nargs += 1;
    308308                if ( ! std_flag ) {                                                             // default c99, if none specified
    309                         args[nargs] = "-std=c99";
     309                        args[nargs] = "-std=gnu99";
    310310                        nargs += 1;
    311311                } // if
     312                args[nargs] = "-fgnu89-inline";
     313                nargs += 1;
    312314                args[nargs] = ( *new string( string("-B") + Bprefix + "/" ) ).c_str();
    313315                nargs += 1;
  • src/examples/swap.c

    r1f6e009 r1048b31  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 16:15:11 2016
    13 // Update Count     : 65
     12// Last Modified On : Thu Apr 21 08:10:41 2016
     13// Update Count     : 69
    1414//
    1515
     
    2424
    2525        signed int i1 = -1, i2 = -2;
    26         sout | "signed int\t\t" | i1 | ' ' | i2 | "\t\t\tswap ";
     26        sout | "signed int\t\t" | i1 | i2 | "\t\t\tswap ";
    2727        swap( &i1, &i2 );
    28         sout | '\t' | i1 | ' ' | i2 | endl;
     28        sout | '\t' | i1 | i2 | endl;
    2929
    3030        unsigned int ui1 = 1, ui2 = 2;
    31         sout | "unsigned int\t\t" | ui1 | ' ' | ui2 | "\t\t\tswap ";
     31        sout | "unsigned int\t\t" | ui1 | ui2 | "\t\t\tswap ";
    3232        swap( &ui1, &ui2 );
    33         sout | '\t' | ui1 | ' ' | ui2 | endl;
     33        sout | '\t' | ui1 | ui2 | endl;
    3434
    3535        signed long int li1 = -1, li2 = -2;
    36         sout | "signed long int\t\t" | li1 | ' ' | li2 | "\t\t\tswap ";
     36        sout | "signed long int\t\t" | li1 | li2 | "\t\t\tswap ";
    3737        swap( &li1, &li2 );
    38         sout | '\t' | li1 | ' ' | li2 | endl;
     38        sout | '\t' | li1 | li2 | endl;
    3939
    4040        unsigned long int uli1 = 1, uli2 = 2;
    41         sout | "unsigned long int\t" | uli1 | ' ' | uli2 | "\t\t\tswap ";
     41        sout | "unsigned long int\t" | uli1 | uli2 | "\t\t\tswap ";
    4242        swap( &uli1, &uli2 );
    43         sout | '\t' | uli1 | ' ' | uli2 | endl;
     43        sout | '\t' | uli1 | uli2 | endl;
    4444
    4545        signed long long int lli1 = -1, lli2 = -2;
    46         sout | "signed long long int\t" | lli1 | ' ' | lli2 | "\t\t\tswap ";
     46        sout | "signed long long int\t" | lli1 | lli2 | "\t\t\tswap ";
    4747        swap( &lli1, &lli2 );
    48         sout | '\t' | lli1 | ' ' | lli2 | endl;
     48        sout | '\t' | lli1 | lli2 | endl;
    4949
    5050        unsigned long long int ulli1 = 1, ulli2 = 2;
    51         sout | "unsigned long long int\t" | ulli1 | ' ' | ulli2 | "\t\t\tswap ";
     51        sout | "unsigned long long int\t" | ulli1 | ulli2 | "\t\t\tswap ";
    5252        swap( &ulli1, &ulli2 );
    53         sout | '\t' | ulli1 | ' ' | ulli2 | endl;
     53        sout | '\t' | ulli1 | ulli2 | endl;
    5454
    5555        float f1 = 1.5, f2 = 2.5;
    56         sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\tswap ";
     56        sout | "float\t\t\t" | f1 | f2 | "\t\t\tswap ";
    5757        swap( &f1, &f2 );
    58         sout | '\t' | f1 | ' ' | f2 | endl;
     58        sout | '\t' | f1 | f2 | endl;
    5959
    6060        double d1 = 1.5, d2 = 2.5;
    61         sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\tswap ";
     61        sout | "double\t\t\t" | d1 | d2 | "\t\t\tswap ";
    6262        swap( &d1, &d2 );
    63         sout | '\t' | d1 | ' ' | d2 | endl;
     63        sout | '\t' | d1 | d2 | endl;
    6464
    6565        long double ld1 = 1.5, ld2 = 2.5;
    66         sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\tswap ";
     66        sout | "long double\t\t" | ld1 | ld2 | "\t\t\tswap ";
    6767        swap( &ld1, &ld2 );
    68         sout | '\t' | ld1 | ' ' | ld2 | endl;
     68        sout | '\t' | ld1 | ld2 | endl;
    6969
    7070        float _Complex fc1 = 1.5f+1.5if, fc2 = 2.5f+2.5if;
    71         sout | "float _Complex\t\t" | fc1 | ' ' | fc2 | "\tswap ";
     71        sout | "float _Complex\t\t" | fc1 | fc2 | "\tswap ";
    7272        swap( &fc1, &fc2 );
    73         sout | '\t' | fc1 | ' ' | fc2 | endl;
     73        sout | '\t' | fc1 | fc2 | endl;
    7474
    7575        double _Complex dc1 = 1.5d+1.5id, dc2 = 2.5d+2.5id;
    76         sout | "double _Complex\t\t" | dc1 | ' ' | dc2 | "\tswap ";
     76        sout | "double _Complex\t\t" | dc1 | dc2 | "\tswap ";
    7777        swap( &dc1, &dc2 );
    78         sout | '\t' | dc1 | ' ' | dc2 | endl;
     78        sout | '\t' | dc1 | dc2 | endl;
    7979
    8080        long double _Complex ldc1 = 1.5d+1.5il, ldc2 = 2.5d+2.5il;
    81         sout | "long double _Complex\t" | ldc1 | ' ' | ldc2 | "\tswap ";
     81        sout | "long double _Complex\t" | ldc1 | ldc2 | "\tswap ";
    8282        swap( &ldc1, &ldc2 );
    83         sout | '\t' | ldc1 | ' ' | ldc2 | endl;
     83        sout | '\t' | ldc1 | ldc2 | endl;
    8484
    8585        struct S { int i, j; } s1 = { 1, 2 }, s2 = { 2, 1 };
    86         ofstream * ?|?( ofstream * os, S s ) { return os | s.i | ' ' | s.j; }
    87         sout | "struct S\t\t" | s1 | "  " | s2 | "\t\tswap ";
     86        ofstream * ?|?( ofstream * os, S s ) { return os | s.i | s.j; }
     87        sout | "struct S\t\t" | s1 | "," | s2 | "\t\tswap ";
    8888        swap( &s1, &s2 );
    89         sout | '\t' | s1 | "  " | s2 | endl;
     89        sout | '\t' | s1 | "," | s2 | endl;
    9090} // main
    9191
  • src/libcfa/Makefile.am

    r1f6e009 r1048b31  
    1111## Created On       : Sun May 31 08:54:01 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Wed Mar  2 22:59:23 2016
    14 ## Update Count     : 119
     13## Last Modified On : Tue Apr 19 22:30:17 2016
     14## Update Count     : 124
    1515###############################################################################
    1616
     
    6060        ${CC} ${CFLAGS} -c -o $@ $<
    6161
    62 libs = stdlib iostream fstream iterator
     62libs = limits stdlib math iostream fstream iterator rational
    6363libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c}
    6464
    65 cheaders = #  expat
    66 cfaheaders = limits
     65cheaders = # expat
     66cfaheaders = # limits
    6767include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders}
    6868
  • src/libcfa/Makefile.in

    r1f6e009 r1048b31  
    8383libcfa_a_AR = $(AR) $(ARFLAGS)
    8484libcfa_a_LIBADD =
    85 am__objects_1 = stdlib.$(OBJEXT) iostream.$(OBJEXT) fstream.$(OBJEXT) \
    86         iterator.$(OBJEXT)
     85am__objects_1 = limits.$(OBJEXT) stdlib.$(OBJEXT) math.$(OBJEXT) \
     86        iostream.$(OBJEXT) fstream.$(OBJEXT) iterator.$(OBJEXT) \
     87        rational.$(OBJEXT)
    8788am_libcfa_a_OBJECTS = libcfa-prelude.$(OBJEXT) $(am__objects_1)
    8889libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS)
     
    213214MAINTAINERCLEANFILES = ${addprefix ${libdir}/,${cfalib_DATA}} \
    214215        ${addprefix ${libdir}/,${lib_LIBRARIES}} ${includedir}/*
    215 libs = stdlib iostream fstream iterator
     216libs = limits stdlib math iostream fstream iterator rational
    216217libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c}
    217 cheaders = #  expat
    218 cfaheaders = limits
     218cheaders = # expat
     219cfaheaders = # limits
    219220include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders}
    220221all: all-am
     
    297298@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iterator.Po@am__quote@
    298299@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa-prelude.Po@am__quote@
     300@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/limits.Po@am__quote@
     301@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/math.Po@am__quote@
     302@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rational.Po@am__quote@
    299303@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdlib.Po@am__quote@
    300304
  • src/libcfa/fstream

    r1f6e009 r1048b31  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 15:08:14 2016
    13 // Update Count     : 78
     12// Last Modified On : Thu Apr 28 08:08:04 2016
     13// Update Count     : 88
    1414//
    1515
     
    2020
    2121enum { separateSize = 16 };
    22 struct ofstream { void *file; int separate; char separator[separateSize]; };
     22struct ofstream {
     23        void *file;
     24        _Bool sepDefault;
     25        int sepOnOff;                                                                           // FIX ME: type should be _Bool
     26        char separator[separateSize];
     27}; // ofstream
    2328
    2429_Bool sepPrt( ofstream * );
    2530void sepOn( ofstream * );
    2631void sepOff( ofstream * );
     32void sepReset( ofstream * );
     33void sepReset( ofstream *, _Bool );
    2734void sepSet( ofstream *, const char * );
    2835const char * sepGet( ofstream * );
    29 void sepDisable( ofstream * );
    30 void sepEnable( ofstream * );
     36_Bool sepDisable( ofstream * );
     37_Bool sepEnable( ofstream * );
    3138int fail( ofstream * );
    3239int flush( ofstream * );
     
    3946
    4047// implement context istream
    41 struct ifstream { void *file; };
     48struct ifstream {
     49        void *file;
     50}; // ifstream
    4251
    4352int fail( ifstream * is );
  • src/libcfa/fstream.c

    r1f6e009 r1048b31  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Feb 29 18:41:10 2016
    13 // Update Count     : 162
     12// Last Modified On : Wed Apr 27 18:20:30 2016
     13// Update Count     : 187
    1414//
    1515
     
    2525}
    2626
    27 #define IO_MSG "I/O error "
     27#define IO_MSG "I/O error: "
    2828
    29 _Bool sepPrt( ofstream * os ) { return os->separate == 1; }
    30 void sepOn( ofstream * os ) { if ( os->separate != 2 ) os->separate = 1; }
    31 void sepOff( ofstream * os ) { if ( os->separate != 2 ) os->separate = 0; }
     29_Bool sepPrt( ofstream * os ) { return os->sepOnOff; }
     30void sepOn( ofstream * os ) { os->sepOnOff = 1; }
     31void sepOff( ofstream * os ) { os->sepOnOff = 0; }
     32void sepReset( ofstream * os ) { os->sepOnOff = os->sepDefault; }
     33void sepReset( ofstream * os, _Bool reset ) { os->sepDefault = reset; os->sepOnOff = os->sepDefault; }
    3234void sepSet( ofstream * os, const char * s ) {
    3335        strncpy( &(os->separator[0]), s, separateSize - 1 );
     
    3537} // sepSet
    3638const char * sepGet( ofstream * os ) { return &(os->separator[0]); }
    37 void sepDisable( ofstream *os ) { os->separate = 2; }
    38 void sepEnable( ofstream *os ) { os->separate = 0; }
     39_Bool sepDisable( ofstream *os ) {
     40        _Bool temp = os->sepDefault;
     41        os->sepDefault = 0;
     42        sepReset( os );
     43        return temp;
     44} // sepDisable
     45_Bool sepEnable( ofstream *os ) {
     46        _Bool temp = os->sepDefault;
     47        os->sepDefault = 1;
     48        sepReset( os );
     49        return temp;
     50} // sepEnable
    3951
    4052int fail( ofstream * os ) {
     
    4961        FILE *file = fopen( name, mode );
    5062        if ( file == 0 ) {                                                                      // do not change unless successful
    51                 perror( IO_MSG "open output" );
     63                fprintf( stderr, IO_MSG "open output file \"%s\", ", name );
     64                perror( 0 );
    5265                exit( EXIT_FAILURE );
    5366        } // if
     
    8093int prtfmt( ofstream * os, const char fmt[], ... ) {
    8194    va_list args;
    82 
    8395    va_start( args, fmt );
    8496    int len = vfprintf( (FILE *)(os->file), fmt, args );
     
    90102        } // if
    91103    va_end( args );
     104
     105        sepReset( os );                                                                         // reset separator
    92106        return len;
    93107} // prtfmt
    94108
    95109
    96 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 0, { ' ', '\0' } };
     110static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 1, 0, { ' ', '\0' } };
    97111ofstream *sout = &soutFile;
    98 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 0, { ' ', '\0' } };
     112static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 1, 0, { ' ', '\0' } };
    99113ofstream *serr = &serrFile;
    100114
     
    114128        FILE *t = fopen( name, mode );
    115129        if ( t == 0 ) {                                                                         // do not change unless successful
    116                 perror( IO_MSG "open input" );
     130                fprintf( stderr, IO_MSG "open input file \"%s\", ", name );
     131                perror( 0 );
    117132                exit( EXIT_FAILURE );
    118133        } // if
     
    175190// Local Variables: //
    176191// tab-width: 4 //
    177 // compile-command: "cfa fstream.c" //
    178192// End: //
  • src/libcfa/iostream

    r1f6e009 r1048b31  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 18:05:27 2016
    13 // Update Count     : 85
     12// Last Modified On : Sun Apr 10 23:00:12 2016
     13// Update Count     : 92
    1414//
    1515
     
    2020
    2121trait 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 * );
     22        _Bool sepPrt( ostype * );                                                       // return separator state (on/off)
     23        void sepOn( ostype * );                                                         // turn separator state on
     24        void sepOff( ostype * );                                                        // turn separator state off
     25        void sepReset( ostype * );                                                      // set separator state to default state
     26        void sepReset( ostype *, _Bool );                                       // set separator and default state
     27        void sepSet( ostype *, const char * );                          // set separator to string (15 character maximum)
     28        const char * sepGet( ostype * );                                        // get separator string
     29        _Bool sepDisable( ostype * );                                           // set default state to off, and return previous state
     30        _Bool sepEnable( ostype * );                                            // set default state to on, and return previous state
     31
    2932        int fail( ostype * );
    3033        int flush( ostype * );
     
    6770forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
    6871forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * );
     72forall( dtype ostype | ostream( ostype ) ) ostype * sepDisable( ostype * );
     73forall( dtype ostype | ostream( ostype ) ) ostype * sepEnable( ostype * );
    6974
    7075// writes the range [begin, end) to the given stream
     
    110115forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex * );
    111116
    112 struct _Istream_str1 { char * s; };
    113 _Istream_str1 str( char * );
    114 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str1 );
     117struct _Istream_cstrUC { char * s; };
     118_Istream_cstrUC cstr( char * );
     119forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrUC );
    115120
    116 struct _Istream_str2 { char * s; int size; };
    117 _Istream_str2 str( char *, int size );
    118 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str2 );
     121struct _Istream_cstrC { char * s; int size; };
     122_Istream_cstrC cstr( char *, int size );
     123forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrC );
    119124
    120125#endif // __IOSTREAM_H__
  • src/libcfa/iostream.c

    r1f6e009 r1048b31  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar  7 13:51:23 2016
    13 // Update Count     : 227
     12// Last Modified On : Sat Apr 30 14:00:53 2016
     13// Update Count     : 302
    1414//
    1515
     
    2727ostype * ?|?( ostype *os, char c ) {
    2828        prtfmt( os, "%c", c );
     29        sepOff( os );
    2930        return os;
    3031} // ?|?
     
    3233forall( dtype ostype | ostream( ostype ) )
    3334ostype * ?|?( ostype *os, short int si ) {
    34         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     35        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    3536        prtfmt( os, "%hd", si );
    3637        return os;
     
    3940forall( dtype ostype | ostream( ostype ) )
    4041ostype * ?|?( ostype *os, unsigned short int usi ) {
    41         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     42        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    4243        prtfmt( os, "%hu", usi );
    4344        return os;
     
    4647forall( dtype ostype | ostream( ostype ) )
    4748ostype * ?|?( ostype *os, int i ) {
    48         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     49        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    4950        prtfmt( os, "%d", i );
    5051        return os;
     
    5354forall( dtype ostype | ostream( ostype ) )
    5455ostype * ?|?( ostype *os, unsigned int ui ) {
    55         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     56        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    5657        prtfmt( os, "%u", ui );
    5758        return os;
     
    6061forall( dtype ostype | ostream( ostype ) )
    6162ostype * ?|?( ostype *os, long int li ) {
    62         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     63        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    6364        prtfmt( os, "%ld", li );
    6465        return os;
     
    6768forall( dtype ostype | ostream( ostype ) )
    6869ostype * ?|?( ostype *os, unsigned long int uli ) {
    69         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     70        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    7071        prtfmt( os, "%lu", uli );
    7172        return os;
     
    7475forall( dtype ostype | ostream( ostype ) )
    7576ostype * ?|?( ostype *os, long long int lli ) {
    76         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     77        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    7778        prtfmt( os, "%lld", lli );
    7879        return os;
     
    8182forall( dtype ostype | ostream( ostype ) )
    8283ostype * ?|?( ostype *os, unsigned long long int ulli ) {
    83         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     84        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    8485        prtfmt( os, "%llu", ulli );
    8586        return os;
     
    8889forall( dtype ostype | ostream( ostype ) )
    8990ostype * ?|?( ostype *os, float f ) {
    90         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     91        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    9192        prtfmt( os, "%g", f );
    9293        return os;
     
    9596forall( dtype ostype | ostream( ostype ) )
    9697ostype * ?|?( ostype *os, double d ) {
    97         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     98        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    9899        prtfmt( os, "%.*lg", DBL_DIG, d );
    99100        return os;
     
    102103forall( dtype ostype | ostream( ostype ) )
    103104ostype * ?|?( ostype *os, long double ld ) {
    104         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     105        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    105106        prtfmt( os, "%.*Lg", LDBL_DIG, ld );
    106107        return os;
     
    110111ostype * ?|?( ostype *os, float _Complex fc ) {
    111112        os | crealf( fc );
    112         if ( cimagf( fc ) >= 0 ) os | '+';
    113         os | "" | cimagf( fc ) | 'i';
     113        _Bool temp = sepDisable( os );                                          // disable separators within complex value
     114        if ( cimagf( fc ) >= 0 ) os | '+';                                      // negative value prints '-'
     115        os | cimagf( fc ) | 'i';
     116        sepReset( os, temp );                                                           // reset separator
    114117        return os;
    115118} // ?|?
     
    118121ostype * ?|?( ostype *os, double _Complex dc ) {
    119122        os | creal( dc );
    120         if ( cimag( dc ) >= 0 ) os | '+';
    121         os | "" | cimag( dc ) | 'i';
     123        _Bool temp = sepDisable( os );                                          // disable separators within complex value
     124        if ( cimag( dc ) >= 0 ) os | '+';                                       // negative value prints '-'
     125        os | cimag( dc ) | 'i';
     126        sepReset( os, temp );                                                           // reset separator
    122127        return os;
    123128} // ?|?
     
    126131ostype * ?|?( ostype *os, long double _Complex ldc ) {
    127132        os | creall( ldc );
    128         if ( cimagl( ldc ) >= 0 ) os | '+';
    129         os | "" | cimagl( ldc ) | 'i';
     133        _Bool temp = sepDisable( os );                                          // disable separators within complex value
     134        if ( cimagl( ldc ) >= 0 ) os | '+';                                     // negative value prints '-'
     135        os | cimagl( ldc ) | 'i';
     136        sepReset( os, temp );                                                           // reset separator
    130137        return os;
    131138} // ?|?
     
    134141ostype * ?|?( ostype *os, const char *cp ) {
    135142        enum { Open = 1, Close, OpenClose };
    136         static const char mask[256] = {
     143        static const unsigned char mask[256] = {
    137144                // opening delimiters
    138145                ['('] : Open, ['['] : Open, ['{'] : Open,
    139                 ['$'] : Open, [L'£'] : Open, [L'¥'] : Open, [L'¢'] : Open, [L'¿'] : Open, [L'«'] : Open,
     146                ['$'] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open,
     147                [(unsigned char)'¡'] : Open, [(unsigned char)'¿'] : Open, [(unsigned char)'«'] : Open,
    140148                // closing delimiters
    141149                [','] : Close, ['.'] : Close, [':'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close,
    142150                [')'] : Close, [']'] : Close, ['}'] : Close,
    143                 ['%'] : Close, [L'»'] : Close,
     151                ['%'] : Close, [(unsigned char)'¢'] : Close, [(unsigned char)'»'] : Close,
    144152                // opening-closing delimiters
    145153                ['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose,
     154                [' '] : OpenClose, ['\f'] : OpenClose, ['\n'] : OpenClose, ['\r'] : OpenClose, ['\t'] : OpenClose, ['\v'] : OpenClose, // isspace
    146155        }; // mask
    147156
    148         int len = strlen( cp );
    149         // null string => no separator
    150   if ( len == 0 ) { sepOff( os ); return os; }
    151         // first character NOT spacing or closing punctuation => add left separator
    152         if ( sepPrt( os ) && isspace( cp[0] ) == 0 && mask[ cp[0] ] != Close && mask[ cp[0] ] != OpenClose ) {
     157  if ( cp[0] == '\0' ) { sepOff( os ); return os; }             // null string => no separator
     158
     159        // first character IS NOT spacing or closing punctuation => add left separator
     160        unsigned char ch = cp[0];                                                       // must make unsigned
     161        if ( sepPrt( os ) && mask[ ch ] != Close && mask[ ch ] != OpenClose ) {
    153162                prtfmt( os, "%s", sepGet( os ) );
    154163        } // if
     164
     165        // if string starts line, must reset to determine open state because separator is off
     166        sepReset( os );                                                                         // reset separator
     167
    155168        // last character IS spacing or opening punctuation => turn off separator for next item
    156         unsigned int posn = len - 1;
    157         if ( isspace( cp[posn] ) || mask[ cp[posn] ] == Open || mask[ cp[posn] ] == OpenClose ) {
     169        unsigned int len = strlen( cp ), posn = len - 1;
     170        ch = cp[posn];                                                                          // must make unsigned
     171        if ( sepPrt( os ) && mask[ ch ] != Open && mask[ ch ] != OpenClose ) {
     172                sepOn( os );
     173        } else {
    158174                sepOff( os );
    159         } else {
    160                 sepOn( os );
    161175        } // if
    162176        return write( os, cp, len );
     
    165179forall( dtype ostype | ostream( ostype ) )
    166180ostype * ?|?( ostype *os, const void *p ) {
    167         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     181        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    168182        prtfmt( os, "%p", p );
    169183        return os;
    170184} // ?|?
    171 
    172185
    173186forall( dtype ostype | ostream( ostype ) )
     
    196209} // sepOff
    197210
     211forall( dtype ostype | ostream( ostype ) )
     212ostype * sepEnable( ostype * os ) {
     213        sepEnable( os );
     214        return os;
     215} // sepEnable
     216
     217forall( dtype ostype | ostream( ostype ) )
     218ostype * sepDisable( ostype * os ) {
     219        sepDisable( os );
     220        return os;
     221} // sepDisable
     222
    198223//---------------------------------------
    199224
     
    310335} // ?|?
    311336
    312 _Istream_str1 str( char * s ) { _Istream_str1 s = { s }; return s; }
    313 forall( dtype istype | istream( istype ) )
    314 istype * ?|?( istype * is, _Istream_str1 str ) {
    315         scanfmt( is, "%s", str.s );
    316         return is;
    317 } // str
    318 
    319 _Istream_str2 str( char * s, int size ) { _Istream_str2 s = { s, size }; return s; }
    320 forall( dtype istype | istream( istype ) )
    321 istype * ?|?( istype * is, _Istream_str2 str ) {
     337_Istream_cstrUC cstr( char * s ) { _Istream_cstrUC s = { s }; return s; }
     338forall( dtype istype | istream( istype ) )
     339istype * ?|?( istype * is, _Istream_cstrUC cstr ) {
     340        scanfmt( is, "%s", cstr.s );
     341        return is;
     342} // cstr
     343
     344_Istream_cstrC cstr( char * s, int size ) { _Istream_cstrC s = { s, size }; return s; }
     345forall( dtype istype | istream( istype ) )
     346istype * ?|?( istype * is, _Istream_cstrC cstr ) {
    322347        char buf[16];
    323         sprintf( buf, "%%%ds", str.size );
    324         scanfmt( is, buf, str.s );
    325         return is;
    326 } // str
     348        sprintf( buf, "%%%ds", cstr.size );
     349        scanfmt( is, buf, cstr.s );
     350        return is;
     351} // cstr
    327352
    328353// Local Variables: //
  • src/libcfa/limits

    r1f6e009 r1048b31  
     1//
     2// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
     3//
     4// The contents of this file are covered under the licence agreement in the
     5// file "LICENCE" distributed with Cforall.
     6//
     7// limits --
     8//
     9// Author           : Peter A. Buhr
     10// Created On       : Wed Apr  6 18:06:52 2016
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Apr  6 21:08:16 2016
     13// Update Count     : 6
     14//
     15
    116// Integral Constants
    217
    3 const short int MIN = -32768;
    4 const int MIN = -2147483648;
    5 const long int MIN = -9223372036854775807L - 1L;
    6 const long long int MIN = -9223372036854775807LL - 1LL;
     18extern const short int MIN;
     19extern const int MIN;
     20extern const long int MIN;
     21extern const long long int MIN;
    722
    8 const short int MAX = 32767;
    9 const unsigned short int MAX = 65535;
    10 const int MAX = 2147483647;
    11 const unsigned int MAX = 4294967295_U;
    12 const long int MAX = 9223372036854775807_L;
    13 const unsigned long int MAX = 4294967295_U;
    14 const long long int MAX = 9223372036854775807_LL;
    15 const unsigned long long int MAX = 18446744073709551615_ULL;
     23extern const short int MAX;
     24extern const unsigned short int MAX;
     25extern const int MAX;
     26extern const unsigned int MAX;
     27extern const long int MAX;
     28extern const unsigned long int MAX;
     29extern const long long int MAX;
     30extern const unsigned long long int MAX;
    1631
    1732// Floating-Point Constants
    1833
    19 const float PI = 3.141592_F;                            // pi
    20 const float PI_2 = 1.570796_F;                          // pi / 2
    21 const float PI_4 = 0.7853981_F;                         // pi / 4
    22 const float _1_PI = 0.3183098_F;                        // 1 / pi
    23 const float _2_PI = 0.6366197_F;                        // 2 / pi
    24 const float _2_SQRT_PI = 1.128379_F;                    // 2 / sqrt(pi)
     34extern const float PI;                                                                  // pi
     35extern const float PI_2;                                                                // pi / 2
     36extern const float PI_4;                                                                // pi / 4
     37extern const float _1_PI;                                                               // 1 / pi
     38extern const float _2_PI;                                                               // 2 / pi
     39extern const float _2_SQRT_PI;                                                  // 2 / sqrt(pi)
    2540
    26 const double PI = 3.14159265358979323846_D;             // pi
    27 const double PI_2 = 1.57079632679489661923_D;           // pi / 2
    28 const double PI_4 = 0.78539816339744830962_D;           // pi / 4
    29 const double _1_PI = 0.31830988618379067154_D;          // 1 / pi
    30 const double _2_PI = 0.63661977236758134308_D;          // 2 / pi
    31 const double _2_SQRT_PI = 1.12837916709551257390_D;     // 2 / sqrt(pi)
     41extern const double PI;                                                                 // pi
     42extern const double PI_2;                                                               // pi / 2
     43extern const double PI_4;                                                               // pi / 4
     44extern const double _1_PI;                                                              // 1 / pi
     45extern const double _2_PI;                                                              // 2 / pi
     46extern const double _2_SQRT_PI;                                                 // 2 / sqrt(pi)
    3247
    33 const long double PI = 3.1415926535897932384626433832795029_DL; // pi
    34 const long double PI_2 = 1.5707963267948966192313216916397514_DL; // pi / 2
    35 const long double PI_4 = 0.7853981633974483096156608458198757_DL; // pi / 4
    36 const long double _1_PI = 0.3183098861837906715377675267450287_DL; // 1 / pi
    37 const long double _2_PI = 0.6366197723675813430755350534900574_DL; // 2 / pi
    38 const long double _2_SQRT_PI = 1.1283791670955125738961589031215452_DL; // 2 / sqrt(pi)
     48extern const long double PI;                                                    // pi
     49extern const long double PI_2;                                                  // pi / 2
     50extern const long double PI_4;                                                  // pi / 4
     51extern const long double _1_PI;                                                 // 1 / pi
     52extern const long double _2_PI;                                                 // 2 / pi
     53extern const long double _2_SQRT_PI;                                    // 2 / sqrt(pi)
    3954
    40 const _Complex PI = 3.14159265358979323846_D+0.0_iD;    // pi
    41 const _Complex PI_2 = 1.57079632679489661923_D+0.0_iD;  // pi / 2
    42 const _Complex PI_4 = 0.78539816339744830962_D+0.0_iD;  // pi / 4
    43 const _Complex _1_PI = 0.31830988618379067154_D+0.0_iD; // 1 / pi
    44 const _Complex _2_PI = 0.63661977236758134308_D+0.0_iD; // 2 / pi
    45 const _Complex _2_SQRT_PI = 1.12837916709551257390_D+0.0_iD; // 2 / sqrt(pi)
     55extern const _Complex PI;                                                               // pi
     56extern const _Complex PI_2;                                                             // pi / 2
     57extern const _Complex PI_4;                                                             // pi / 4
     58extern const _Complex _1_PI;                                                    // 1 / pi
     59extern const _Complex _2_PI;                                                    // 2 / pi
     60extern const _Complex _2_SQRT_PI;                                               // 2 / sqrt(pi)
    4661
    47 const long _Complex PI = 3.1415926535897932384626433832795029_L+0.0iL; // pi
    48 const long _Complex PI_2 = 1.5707963267948966192313216916397514_L+0.0iL; // pi / 2
    49 const long _Complex PI_4 = 0.7853981633974483096156608458198757_L+0.0iL; // pi / 4
    50 const long _Complex _1_PI = 0.3183098861837906715377675267450287_L+0.0iL; // 1 / pi
    51 const long _Complex _2_PI = 0.6366197723675813430755350534900574_L+0.0iL; // 2 / pi
    52 const long _Complex _2_SQRT_PI = 1.1283791670955125738961589031215452_L+0.0iL; // 2 / sqrt(pi)
     62extern const long _Complex PI;                                                  // pi
     63extern const long _Complex PI_2;                                                // pi / 2
     64extern const long _Complex PI_4;                                                // pi / 4
     65extern const long _Complex _1_PI;                                               // 1 / pi
     66extern const long _Complex _2_PI;                                               // 2 / pi
     67extern const long _Complex _2_SQRT_PI;                                  // 2 / sqrt(pi)
    5368
    54 const float E = 2.718281;                               // e
    55 const float LOG2_E = 1.442695;                          // log_2(e)
    56 const float LOG10_E = 0.4342944;                        // log_10(e)
    57 const float LN_2 = 0.6931471;                           // log_e(2)
    58 const float LN_10 = 2.302585;                           // log_e(10)
    59 const float SQRT_2 = 1.414213;                          // sqrt(2)
    60 const float _1_SQRT_2 = 0.7071067;                      // 1 / sqrt(2)
     69extern const float E;                                                                   // e
     70extern const float LOG2_E;                                                              // log_2(e)
     71extern const float LOG10_E;                                                             // log_10(e)
     72extern const float LN_2;                                                                // log_e(2)
     73extern const float LN_10;                                                               // log_e(10)
     74extern const float SQRT_2;                                                              // sqrt(2)
     75extern const float _1_SQRT_2;                                                   // 1 / sqrt(2)
    6176
    62 const double E = 2.7182818284590452354_D;               // e
    63 const double LOG2_E = 1.4426950408889634074_D;          // log_2(e)
    64 const double LOG10_E = 0.43429448190325182765_D;        // log_10(e)
    65 const double LN_2 = 0.69314718055994530942_D;           // log_e(2)
    66 const double LN_10 = 2.30258509299404568402_D;          // log_e(10)
    67 const double SQRT_2 = 1.41421356237309504880_D;         // sqrt(2)
    68 const double _1_SQRT_2 = 0.70710678118654752440_D;      // 1 / sqrt(2)
     77extern const double E;                                                                  // e
     78extern const double LOG2_E;                                                             // log_2(e)
     79extern const double LOG10_E;                                                    // log_10(e)
     80extern const double LN_2;                                                               // log_e(2)
     81extern const double LN_10;                                                              // log_e(10)
     82extern const double SQRT_2;                                                             // sqrt(2)
     83extern const double _1_SQRT_2;                                                  // 1 / sqrt(2)
    6984
    70 const long double E = 2.7182818284590452353602874713526625_DL; // e
    71 const long double LOG2_E = 1.4426950408889634073599246810018921_DL; // log_2(e)
    72 const long double LOG10_E = 0.4342944819032518276511289189166051_DL; // log_10(e)
    73 const long double LN_2 = 0.6931471805599453094172321214581766_DL; // log_e(2)
    74 const long double LN_10 = 2.3025850929940456840179914546843642_DL; // log_e(10)
    75 const long double SQRT_2 = 1.4142135623730950488016887242096981_DL; // sqrt(2)
    76 const long double _1_SQRT_2 = 0.7071067811865475244008443621048490_DL; // 1/sqrt(2)
     85extern const long double E;                                                             // e
     86extern const long double LOG2_E;                                                // log_2(e)
     87extern const long double LOG10_E;                                               // log_10(e)
     88extern const long double LN_2;                                                  // log_e(2)
     89extern const long double LN_10;                                                 // log_e(10)
     90extern const long double SQRT_2;                                                // sqrt(2)
     91extern const long double _1_SQRT_2;                                             // 1/sqrt(2)
    7792
    78 const _Complex E = 2.7182818284590452354_D+0.0_iD;      // e
    79 const _Complex LOG2_E = 1.4426950408889634074_D+0.0_iD; // log_2(e)
    80 const _Complex LOG10_E = 0.43429448190325182765_D+0.0_iD; // log_10(e)
    81 const _Complex LN_2 = 0.69314718055994530942_D+0.0_iD;  // log_e(2)
    82 const _Complex LN_10 = 2.30258509299404568402_D+0.0_iD; // log_e(10)
    83 const _Complex SQRT_2 = 1.41421356237309504880_D+0.0_iD;        // sqrt(2)
    84 const _Complex _1_SQRT_2 = 0.70710678118654752440_D+0.0_iD; // 1 / sqrt(2)
     93extern const _Complex E;                                                                // e
     94extern const _Complex LOG2_E;                                                   // log_2(e)
     95extern const _Complex LOG10_E;                                                  // log_10(e)
     96extern const _Complex LN_2;                                                             // log_e(2)
     97extern const _Complex LN_10;                                                    // log_e(10)
     98extern const _Complex SQRT_2;                                                   // sqrt(2)
     99extern const _Complex _1_SQRT_2;                                                // 1 / sqrt(2)
    85100
    86 const long _Complex E = 2.7182818284590452353602874713526625_L+0.0_iL; // e
    87 const long _Complex LOG2_E = 1.4426950408889634073599246810018921_L+0.0_iL; // log_2(e)
    88 const long _Complex LOG10_E = 0.4342944819032518276511289189166051_L+0.0_iL; // log_10(e)
    89 const long _Complex LN_2 = 0.6931471805599453094172321214581766_L+0.0_iL; // log_e(2)
    90 const long _Complex LN_10 = 2.3025850929940456840179914546843642_L+0.0_iL; // log_e(10)
    91 const long _Complex SQRT_2 = 1.4142135623730950488016887242096981_L+0.0_iL; // sqrt(2)
    92 const long _Complex _1_SQRT_2 = 0.7071067811865475244008443621048490_L+0.0_iL; // 1 / sqrt(2)
     101extern const long _Complex E;                                                   // e
     102extern const long _Complex LOG2_E;                                              // log_2(e)
     103extern const long _Complex LOG10_E;                                             // log_10(e)
     104extern const long _Complex LN_2;                                                // log_e(2)
     105extern const long _Complex LN_10;                                               // log_e(10)
     106extern const long _Complex SQRT_2;                                              // sqrt(2)
     107extern const long _Complex _1_SQRT_2;                                   // 1 / sqrt(2)
     108
     109// Local Variables: //
     110// mode: c //
     111// tab-width: 4 //
     112// End: //
  • src/libcfa/stdlib

    r1f6e009 r1048b31  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar 22 22:34:24 2016
    13 // Update Count     : 69
     12// Last Modified On : Wed Apr 27 22:03:29 2016
     13// Update Count     : 96
    1414//
    1515
     
    2020} // extern "C"
    2121
     22//---------------------------------------
     23
     24extern "C" {
     25#ifndef EXIT_FAILURE
     26#define EXIT_FAILURE    1                                                               // failing exit status
     27#define EXIT_SUCCESS    0                                                               // successful exit status
     28#endif // ! EXIT_FAILURE
     29void exit( int rc );
     30void abort( void );
     31} // extern "C"
     32
     33//---------------------------------------
     34
     35extern "C" { void * malloc( size_t ); }                                 // use default C routine for void *
    2236forall( otype T ) T * malloc( void );
    2337forall( otype T ) T * malloc( char fill );
    2438forall( otype T ) T * malloc( T * ptr, size_t size );
    2539forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );
    26 forall( otype T ) T * calloc( size_t size );
     40extern "C" { void * calloc( size_t nmemb, size_t size ); } // use default C routine for void *
     41forall( otype T ) T * calloc( size_t nmemb );
     42extern "C" { void * realloc( void * ptr, size_t size ); } // use default C routine for void *
    2743forall( otype T ) T * realloc( T * ptr, size_t size );
    2844forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );
     
    3248forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
    3349
    34 forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
    35 forall( otype T ) T * memset( T * ptr );                                // remove when default value available
     50extern "C" {
     51void * memset( void * ptr, int fill, size_t size );
     52void free( void * ptr );
     53} // extern "C"
    3654
    3755//---------------------------------------
     
    7997
    8098char abs( char );
    81 extern "C" {
    82 int abs( int );         // use default C routine for int
    83 } // extern
     99extern "C" { int abs( int ); }                                                  // use default C routine for int
    84100long int abs( long int );
    85101long long int abs( long long int );
     
    87103double abs( double );
    88104long double abs( long double );
    89 float _Complex abs( float _Complex );
    90 double _Complex abs( double _Complex );
    91 long double _Complex abs( long double _Complex );
     105float abs( float _Complex );
     106double abs( double _Complex );
     107long double abs( long double _Complex );
    92108
    93109//---------------------------------------
  • src/libcfa/stdlib.c

    r1f6e009 r1048b31  
    1010// Created On       : Thu Jan 28 17:10:29 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar 23 13:26:42 2016
    13 // Update Count     : 146
     12// Last Modified On : Thu Apr 28 07:54:21 2016
     13// Update Count     : 166
    1414//
    1515
     
    2424#include <malloc.h>                                                                             // malloc_usable_size
    2525#include <math.h>                                                                               // fabsf, fabs, fabsl
    26 #include <complex.h>                                                                    // _Complex_I, cabsf, cabs, cabsl
     26#include <complex.h>                                                                    // _Complex_I
    2727} // extern "C"
    2828
    2929forall( otype T ) T * malloc( void ) {
    30         printf( "malloc1\n" );
     30        //printf( "malloc1\n" );
    3131    return (T *)malloc( sizeof(T) );
    3232} // malloc
    33 forall( otype T ) T * malloc( size_t size ) {
    34         printf( "malloc2\n" );
    35     return (T *)(void *)malloc( size );
    36 } // malloc
    3733forall( otype T ) T * malloc( char fill ) {
    38         printf( "malloc3\n" );
     34        //printf( "malloc3\n" );
    3935        T * ptr = (T *)malloc( sizeof(T) );
    40     return memset( ptr );
    41 } // malloc
    42 
    43 forall( otype T ) T * calloc( size_t size ) {
    44         printf( "calloc\n" );
    45     return (T *)calloc( size, sizeof(T) );
     36    return memset( ptr, (int)fill, sizeof(T) );
     37} // malloc
     38
     39forall( otype T ) T * calloc( size_t nmemb ) {
     40        //printf( "calloc\n" );
     41    return (T *)calloc( nmemb, sizeof(T) );
    4642} // calloc
    4743
    4844forall( otype T ) T * realloc( T * ptr, size_t size ) {
    49         printf( "realloc1\n" );
     45        //printf( "realloc1\n" );
    5046    return (T *)(void *)realloc( (void *)ptr, size );
    5147} // realloc
    5248forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
    53         printf( "realloc2\n" );
     49        //printf( "realloc2\n" );
    5450    char * nptr = (T *)(void *)realloc( (void *)ptr, size );
    5551    size_t unused = malloc_usable_size( nptr );
     
    5955
    6056forall( otype T ) T * malloc( T * ptr, size_t size ) {
    61         printf( "malloc4\n" );
     57        //printf( "malloc4\n" );
    6258    return (T *)realloc( ptr, size );
    6359} // malloc
    6460forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
    65         printf( "malloc5\n" );
     61        //printf( "malloc5\n" );
    6662    return (T *)realloc( ptr, size, fill );
    6763} // malloc
    6864
    6965forall( otype T ) T * aligned_alloc( size_t alignment ) {
    70         printf( "aligned_alloc\n" );
     66        //printf( "aligned_alloc\n" );
    7167    return (T *)memalign( alignment, sizeof(T) );
    7268} // aligned_alloc
    7369
    7470forall( otype T ) T * memalign( size_t alignment ) {
    75         printf( "memalign\n" );
     71        //printf( "memalign\n" );
    7672    return (T *)memalign( alignment, sizeof(T) );
    7773} // memalign
    7874
    7975forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ) {
    80         printf( "posix_memalign\n" );
     76        //printf( "posix_memalign\n" );
    8177    return posix_memalign( (void **)ptr, alignment, sizeof(T) );
    8278} // posix_memalign
    8379
    84 forall( otype T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill
    85         printf( "memset1\n" );
    86     return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) );
    87 } // memset
    88 forall( otype T ) T * memset( T * ptr ) {                               // remove when default value available
    89         printf( "memset2\n" );
    90     return (T *)memset( ptr, 0, malloc_usable_size( ptr ) );
    91 } // memset
    92 
    9380//---------------------------------------
    9481
    9582int ato( const char * ptr ) {
    9683        int i;
    97         if ( sscanf( ptr, "%d", &i ) == EOF ) {}                        // check return code
     84        if ( sscanf( ptr, "%d", &i ) == EOF ) {}
    9885        return i;
    9986}
    10087unsigned int ato( const char * ptr ) {
    10188        unsigned int ui;
    102         if ( sscanf( ptr, "%u", &ui ) == EOF ) {}                       // check return code
     89        if ( sscanf( ptr, "%u", &ui ) == EOF ) {}
    10390        return ui;
    10491}
    10592long int ato( const char * ptr ) {
    10693        long int li;
    107         if ( sscanf( ptr, "%ld", &li ) == EOF ) {}                      // check return code
     94        if ( sscanf( ptr, "%ld", &li ) == EOF ) {}
    10895        return li;
    10996}
    11097unsigned long int ato( const char * ptr ) {
    11198        unsigned long int uli;
    112         if ( sscanf( ptr, "%lu", &uli ) == EOF ) {}                     // check return code
     99        if ( sscanf( ptr, "%lu", &uli ) == EOF ) {}
    113100        return uli;
    114101}
    115102long long int ato( const char * ptr ) {
    116103        long long int lli;
    117         if ( sscanf( ptr, "%lld", &lli ) == EOF ) {}            // check return code
     104        if ( sscanf( ptr, "%lld", &lli ) == EOF ) {}
    118105        return lli;
    119106}
    120107unsigned long long int ato( const char * ptr ) {
    121108        unsigned long long int ulli;
    122         if ( sscanf( ptr, "%llu", &ulli ) == EOF ) {}           // check return code
     109        if ( sscanf( ptr, "%llu", &ulli ) == EOF ) {}
    123110        return ulli;
    124111}
     
    126113float ato( const char * ptr ) {
    127114        float f;
    128         if ( sscanf( ptr, "%f", &f ) == EOF ) {}                        // check return code
     115        if ( sscanf( ptr, "%f", &f ) == EOF ) {}
    129116        return f;
    130117}
    131118double ato( const char * ptr ) {
    132119        double d;
    133         if ( sscanf( ptr, "%lf", &d ) == EOF ) {}                       // check return code
     120        if ( sscanf( ptr, "%lf", &d ) == EOF ) {}
    134121        return d;
    135122}
    136123long double ato( const char * ptr ) {
    137124        long double ld;
    138         if ( sscanf( ptr, "%Lf", &ld ) == EOF ) {}                      // check return code
     125        if ( sscanf( ptr, "%Lf", &ld ) == EOF ) {}
    139126        return ld;
    140127}
     
    142129float _Complex ato( const char * ptr ) {
    143130        float re, im;
    144         if ( sscanf( ptr, "%g%gi", &re, &im ) == EOF ) {}       // check return code
     131        if ( sscanf( ptr, "%g%gi", &re, &im ) == EOF ) {}
    145132        return re + im * _Complex_I;
    146133}
    147134double _Complex ato( const char * ptr ) {
    148135        double re, im;
    149         if ( sscanf( ptr, "%lf%lfi", &re, &im ) == EOF ) {} // check return code
     136        if ( sscanf( ptr, "%lf%lfi", &re, &im ) == EOF ) {}
    150137        return re + im * _Complex_I;
    151138}
    152139long double _Complex ato( const char * ptr ) {
    153140        long double re, im;
    154         if ( sscanf( ptr, "%Lf%Lfi", &re, &im ) == EOF ) {}     // check return code
     141        if ( sscanf( ptr, "%Lf%Lfi", &re, &im ) == EOF ) {}
    155142        return re + im * _Complex_I;
    156143}       
     
    226213//---------------------------------------
    227214
    228 forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
    229 [ T, T ] div( T t1, T t2 ) { /* return [ t1 / t2, t1 % t2 ]; */ }
     215// forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
     216// [ T, T ] div( T t1, T t2 ) { return [ t1 / t2, t1 % t2 ]; }
    230217
    231218//---------------------------------------
     
    234221long int abs( long int v ) { return labs( v ); }
    235222long long int abs( long long int v ) { return llabs( v ); }
    236 float abs( float v ) { return fabsf( v ); }
    237 double abs( double v ) { return fabs( v ); }
    238 long double abs( long double v ) { return fabsl( v ); }
    239 float _Complex abs( float _Complex v ) { return cabsf( v ); }
    240 double _Complex abs( double _Complex v ) { return cabs( v ); }
    241 long double _Complex abs( long double _Complex v ) { return cabsl( v ); }
     223float abs( float x ) { return fabsf( x ); }
     224double abs( double x ) { return fabs( x ); }
     225long double abs( long double x ) { return fabsl( x ); }
     226float abs( float _Complex x ) { return cabsf( x ); }
     227double abs( double _Complex x ) { return cabs( x ); }
     228long double abs( long double _Complex x ) { return cabsl( x ); }
    242229
    243230//---------------------------------------
Note: See TracChangeset for help on using the changeset viewer.