Index: .gitignore
===================================================================
--- .gitignore	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ .gitignore	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -27,2 +27,17 @@
 # generated by bison and lex from cfa.yy and lex.ll, respectively
 src/Parser/parser.output
+
+# generated by latex
+doc/refrat/refrat.aux
+doc/refrat/refrat.bbl
+doc/refrat/refrat.blg
+doc/refrat/refrat.brf
+doc/refrat/refrat.dvi
+doc/refrat/refrat.idx
+doc/refrat/refrat.ilg
+doc/refrat/refrat.ind
+doc/refrat/refrat.log
+doc/refrat/refrat.out
+doc/refrat/refrat.pdf
+doc/refrat/refrat.ps
+doc/refrat/refrat.toc
Index: c/man/README
===================================================================
--- doc/man/README	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ 	(revision )
@@ -1,5 +1,0 @@
-There are two troff variables at the beginning of the source files that define
-the home path to cfa and the version number.  The version variable should be
-set properly (we sometimes forget); change the path for the home variable to
-the location where cfa is installed. There is a command at the beginning of the
-source file to format the manual entry.
Index: c/man/cfa.1
===================================================================
--- doc/man/cfa.1	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ 	(revision )
@@ -1,186 +1,0 @@
-.\"                             -*- Mode: Nroff -*- 
-.\" 
-.\" uC++ Version 6.1.0, Copyright (C) Peter A. Buhr 1994
-.\" 
-.\" u++.1 -- 
-.\" 
-.\" Author           : Peter A. Buhr
-.\" Created On       : Sat Jul  2 21:47:05 1994
-.\" Last Modified By : Peter A. Buhr
-.\" Last Modified On : Fri Apr  6 13:44:28 2012
-.\" Update Count     : 52
-.\" 
-.\" nroff -man u++.1
-.\"
-.ds Ho "/usr/local
-.ds Vr "u++\-6.1.0
-.TH u++ 1
-.SH NAME
-u++ \- uC++ Translator and Concurrency Runtime System
-.SH SYNOPSIS
-u++ [-option [...]] [filename [...]]
-.SH DESCRIPTION
-The u++ command compiles uC++ and C++ source files and links C++ object files
-named on the command line.
-
-The u++ command introduces a translator pass over the specified source files
-after the C preprocessor but before the actual C++ compilation.  The translator
-converts several new uC++ constructs into C++ statements.  The u++ command also
-provides the runtime concurrency library, which must be linked with each uC++
-application.
-
-The command line options depend on the particular C++ compiler used.  As with
-most C compilers, the output is sent to the file a.out(5) unless the -o option
-is present on the command line.  See the reference pages for g++(1) and CC(1)
-for more information.
-.SH OPTIONS
-When multiple conflicting options appear on the command line, e.g.,
-.B -debug
-followed by
-.B -nodebug,
-the last option takes precedence.
-All of the options available to the C++ compiler are available to u++, plus the
-following:
-.IP -debug 3
-The program is linked with the debugging version of the unikernel or
-multikernel.  The debug version performs runtime checks to help during the
-debugging phase of a uC++ program, but substantially slows the execution of the
-program. This option is the default.
-.IP -nodebug
-The program is linked with the non-debugging version of the unikernel or
-multikernel, so the execution of the program is faster.  However, no runtime
-checks or asserts are performed so errors usually result in abnormal program
-termination.
-.IP -yield
-When a program is translated, a random number of context switches occur at the
-beginning of each member routine so that during execution on a uniprocessor
-there is a better simulation of parallelism.  (This non-determinism in
-execution is in addition to random context switching due to pre-emptive
-scheduling.  The extra yields of execution can help during the debugging phase
-of a uC++ program, but substantially slows the execution of the program.
-.IP -noyield
-Additional context switches are not inserted in member routines.  This option
-is the default.
-.IP -verify
-When a program is translated, a check to verify that the stack has not
-overflowed occurs at the beginning of each member routine.  Verifying the
-stack has not overflowed is important during the debugging phase of a uC++
-program, but slows the execution of the program.
-.IP -noverify
-Stack-overflow checking is not inserted in member routines.  This option is the
-default.
-.IP -multi
-The program is linked with the multikernel.  See the uC++ RUNTIME KERNELS
-section below.
-.IP -nomulti
-The program is linked with the unikernel.  This option is the default.  See the
-uC++ RUNTIME KERNELS section below.
-.IP -quiet
-The uC++ compilation message is not printed at the beginning of a
-compilation.
-.IP -noquiet
-The uC++ compilation message is printed at the beginning of a compilation.
-This option is the default.
-.IP -U++
-Only the C preprocessor and the uC++ translator steps are performed and the
-transformed program is written to standard output, which makes it possible to
-examine the code generated by the uC++ translator.
-.IP "-compiler path-name"
-The path-name of the compiler used to compile a uC++ program(s).  The default
-is the compiler used to compile the uC++ runtime library.  It is unsafe to use
-a different compiler unless the generated code is binary compatible.
-.SH uC++ RUNTIME KERNELS
-There are two versions of the uC++ kernel: the unikernel, which is designed to
-use a single processor; and the multikernel, which is designed to use several
-processors.  Thus, the unikernel is sensibly used on systems with a single
-hardware processor or when kernel threads are unavailable; the multikernel is
-sensibly used on systems that have multiple hardware processors and when kernel
-threads are available.  The table below shows the situations where each kernel
-can be used.  The unikernel can be used in a system with multiple hardware
-processors and kernel threads but does not take advantage of either of these
-capabilities.  The multikernel can be used on a system with a single hardware
-processor and kernel threads but performs less efficiently than the unikernel
-because it uses multiprocessor techniques unnecessarily.
-.DS B
-            +-----------+-------------------------+
-            | no kernel |         kernel          |
-            | threads   |         threads         |
- +----------+-----------+-------------------------+
- |single    |uni: yes   |uni: yes                 |
- |processor |multi: no  |multi: yes (inefficient) |
- +----------+-----------+-------------------------+
- |multiple  |uni: yes   |uni: yes (no parallelism)|
- |processors|multi: no  |multi: yes               |
- +----------+-----------+-------------------------+
-.DE
-.SH PREPROCESSOR VARIABLES
-When programs are compiled using u++, the following preprocessor variables are
-available.  These variables allow conditional compilation of programs that must
-work differently in these situations.
-.IP __U_CPLUSPLUS__ 3
-is always available during preprocessing and its value is the current major
-version number.
-.IP __U_CPLUSPLUS_MINOR__
-is always available during preprocessing and its value is the current minor
-version number.
-.IP __U_CPLUSPLUS_PATCH__
-is always available during preprocessing and its value is the current patch
-version number.
-.IP __U_DEBUG__
-is available during preprocessing if the -debug compilation option is
-specified.
-.IP __U_YIELD__
-is available during preprocessing if the -yield compilation option is
-specified.
-.IP __U_VERIFY__
-is available during preprocessing if the -verify compilation option is
-specified.
-.IP __U_MULTI__
-is available during preprocessing if the -multi compilation option is specified.
-.SH FILES
-.DS B
-file.{cc,C} - uC++ source file
-.br
-file.s - assembly language file
-.br
-file.o - object file
-.br
-\*(Ho/bin/u++ - translator
-.br
-\*(Ho/\*(Vr/doc - reference manual and license
-.br
-\*(Ho/\*(Vr/inc - header files
-.br
-\*(Ho/\*(Vr/lib - run time libraries
-.br
-\*(Ho/\*(Vr/man - command documentation
-.br
-\*(Ho/\*(Vr/src - source code (optional)
-.DE
-.SH SEE ALSO
-CC(1), cpp(1), g++(1)
-.br
-.I "uC++ Annotated Reference Manual"
-.br
-.I "Understanding Control Flow with Concurrent Programming using uC++"
-.SH REFERENCES
-.HP 3
-.I "uC++: Concurrency in the Object-Oriented Language C++,"
-by P.A. Buhr, G. Ditchfield, R.A. Stroobosscher, B.M. Younger, C.R. Zarnke;
-Software-Practise and Experience, 22(2):137--172, February 1992.  This paper
-describes uC++ v2.0, which has been significantly extended.
-.HP
-.I "Examining uC++,"
-by Peter A. Buhr and Richard C. Bilson;
-Dr. Dobb's Journal : Software Tools for the Professional Programmer,
-31(2):36--40, February 2006. <http://drdobbs.com/cpp/184406431>
-.HP
-.I "uC++ Annotated Reference Manual"
-most up-to-date features.
-.SH BUGS
-Bugs should be reported to usystem@plg.uwaterloo.ca.
-.SH COPYRIGHT
-This library is covered under the GNU Lesser General Public License.
-.SH AUTHORS
-Peter A. Buhr (pabuhr@plg.uwaterloo.ca) and many others, Programming Languages
-Group, University of Waterloo, Ontario, Canada, N2L 3G1.
Index: doc/refrat/Makefile
===================================================================
--- doc/refrat/Makefile	(revision d2ded3e7b80d4d46102610712560152e44975503)
+++ doc/refrat/Makefile	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -0,0 +1,73 @@
+## Define the appropriate configuration variables.
+
+TeXLIB = .::
+LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex
+BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex
+
+## Define the text source files.
+
+SOURCES = ${addsuffix .tex, \
+refrat \
+}
+
+FIGURES = ${addsuffix .tex, \
+}
+
+PICTURES = ${addsuffix .pstex, \
+}
+
+PROGRAMS = ${addsuffix .tex, \
+}
+
+GRAPHS = ${addsuffix .tex, \
+}
+
+## Define the documents that need to be made.
+
+DOCUMENT = refrat.pdf
+
+# Directives #
+
+all : ${DOCUMENT}
+
+clean :
+	rm -f *.bbl *.aux *.dvi *.idx *.ilg *.ind *.brf *.out *.log *.toc *.blg *.pstex_t *.cf \
+		${FIGURES} ${PICTURES} ${PROGRAMS} ${GRAPHS} ${basename ${DOCUMENT}}.ps ${DOCUMENT}
+
+# File Dependencies #
+
+${DOCUMENT} : ${basename ${DOCUMENT}}.ps
+	ps2pdf $<
+
+${basename ${DOCUMENT}}.ps : ${basename ${DOCUMENT}}.dvi
+	dvips $< -o $@
+
+${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib
+	# Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
+	if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
+	# Must have *.aux file containing citations for bibtex
+	if [ ! -r ${basename $@}.aux ] ; then ${LaTeX} ${basename $@}.tex ; fi
+	-${BibTeX} ${basename $@}
+	# Some citations reference others so run steps again to resolve these citations
+	${LaTeX} ${basename $@}.tex
+	-${BibTeX} ${basename $@}
+	# Make index from *.aux entries and input index at end of document
+	makeindex -s indexstyle ${basename $@}.idx
+	${LaTeX} ${basename $@}.tex
+	# Run again to get index title into table of contents
+	${LaTeX} ${basename $@}.tex
+
+predefined :
+	sed -f predefined.sed ${basename ${DOCUMENT}}.tex > ${basename $@}.cf
+
+## Define the default recipes.
+
+%.tex : %.fig
+	fig2dev -L eepic $< > $@
+
+%.ps : %.fig
+	fig2dev -L ps $< > $@
+
+# Local Variables: #
+# compile-command: "make" #
+# End: #
Index: doc/refrat/indexstyle
===================================================================
--- doc/refrat/indexstyle	(revision d2ded3e7b80d4d46102610712560152e44975503)
+++ doc/refrat/indexstyle	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -0,0 +1,2 @@
+preamble ""
+postamble ""
Index: doc/refrat/predefined.sed
===================================================================
--- doc/refrat/predefined.sed	(revision d2ded3e7b80d4d46102610712560152e44975503)
+++ doc/refrat/predefined.sed	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -0,0 +1,5 @@
+/^\\predefined/,/^\\end{lstlisting}/ !d
+/^\\begin{lstlisting}/,/^\\end{lstlisting}/ s/@\\use{.*}@//g
+/^\\predefined/ d
+/^\\begin{lstlisting}/ d
+/^\\end{lstlisting}/ d
Index: doc/refrat/refrat.bib
===================================================================
--- doc/refrat/refrat.bib	(revision d2ded3e7b80d4d46102610712560152e44975503)
+++ doc/refrat/refrat.bib	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -0,0 +1,119 @@
+@string{sigplan="SIGPLAN Notices"}
+
+@manual{ANS:C,
+    keywords = {ANSI C},
+    contributer = {gjditchfield@msg},
+    title = {American National Standard for Information Systems --
+	  Programming Language -- {C}},
+    organization = {American National Standards Institute},
+    address = {1430 Broadway, New York, New York  10018},
+    month = dec, year = 1989,
+    note = {X3.159-1989}
+}
+
+@manual{ANS:C11,
+    keywords = {ANS:C11},
+    contributer = {gjditchfield@acm.org},
+    title = {American National Standard Information Systems --
+	  Programming languages -- {C}},
+    organization = {American National Standards Institute},
+    address = {25 West 43rd Street, New York, New York 10036},
+    month = may, year = 2012,
+    note = {INCITS/ISO/IEC 9899-2011[2012]}
+}
+
+@book{c++,
+    keywords = {C++, ANSI},
+    author = {Margaret A. Ellis and Bjarne Stroustrup},
+    title = {The Annotated {C}{\tt ++} Reference Manual},
+    publisher = {Addison Wesley},
+    year = 1990,
+    edition = {first}
+}
+
+@Unpublished{Ditchfield96:Overview,
+  author = 	 "Glen Ditchfield",
+  title = 	 "An Overview of Cforall",
+  note = 	 "in preparation",
+  year =	 1996
+}
+
+@article{Bak:overload,
+    keywords = {compilation},
+    contributer = {gjditchfield@msg},
+    author = {T. P. Baker},
+    title = {A One-Pass Algorithm for Overload Resolution in {Ada}},
+    journal = toplas,
+    year = 1982,
+    month = oct, volume = 4, number = 4, pages = {601--614},
+    abstract = {
+        A simple method is presented for detecting ambiguities and finding
+	the correct interpretations of expressions in the programming
+	language Ada.  Unlike previously reported solutions to this
+	problem, which require multiple passes over a tree structure, the
+	method described here operates in one bottom-up pass, during which
+	a directed acyclic graph is produced.  The correctness of this
+	approach is demonstrated by a brief formal argument.
+    },
+    comment = {
+	See also \cite{D:overload}.
+	}
+}
+
+@article{Cormack90,
+    keywords	= {polymorphism},
+    contributer	= {pabuhr@msg},
+    author	= {G. V. Cormack and A. K. Wright},
+    title	= {Type-dependent Parameter Inference},
+    journal	= sigplan,
+    volume	= 25,
+    number	= 6,
+    month	= jun,
+    year	= 1990,
+    pages	= {127--136},
+    note	= {Proceedings of the ACM Sigplan'90 Conference on Programming Language Design and Implementation
+		   June 20-22, 1990, White Plains, New York, U.S.A.},
+}
+
+@book{clu,
+    keywords = {CLU},
+    contributer = {gjditchfield@msg},
+    author = {Barbara Liskov and Russell Atkinson and Toby Bloom and Eliot
+    Moss and J. Craig Schaffert and Robert Scheifler and Alan Snyder},
+    title = {CLU Reference Manual},
+    publisher = {Springer-Verlag},
+    year = 1981,
+    volume = 114,
+    series = {Lecture Notes in Computer Science}
+}
+
+@manual{SIMULA87,
+    keywords = {Simula standard},
+    contributer = {gjditchfield@msg},
+    title = {Databehandling -- Programspr{\aa}k -- {SIMULA}},
+    organization = {Standardiseringskommissionen i Sverige},
+    note = {Svensk Standard SS 63 61 14},
+    year = 1987,
+    abstract = {
+        Standard for the programming language SIMULA.  Written in English.
+    }
+}
+
+@manual{ada,
+    keywords	= {Ada, packages, tasks, exceptions},
+    contributer	= {pabuhr@msg},
+    title	= {The Programming Language {Ada}: Reference Manual},
+    organization= {United States Department of Defense},
+    edition	= {{ANSI/MIL-STD-1815A-1983}},
+    month	= feb,
+    year	= 1983,
+    note	= {Published by Springer-Verlag}
+}
+
+@inproceedings{Thompson90new,
+  title = {A New C Compiler},
+  author = {Ken Thompson},
+  booktitle = {Proceedings of the Summer 1990 UKUUG Conference},
+  year = 1990,
+  pages = {41--51}
+}
Index: doc/refrat/refrat.tex
===================================================================
--- doc/refrat/refrat.tex	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ doc/refrat/refrat.tex	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -0,0 +1,4736 @@
+% requires tex packages: texlive-base texlive-latex-base tex-common texlive-humanities texlive-latex-extra texlive-fonts-recommended
+
+\documentclass[openright,twoside]{report}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Latex packages used in the document.
+
+\usepackage{fullpage,times}
+\usepackage{xspace}
+\usepackage{varioref}
+\usepackage{listings}
+\usepackage{comment}
+\usepackage{latexsym}					% \Box
+\usepackage{mathptmx}					% better math font with "times"
+\usepackage[pagewise]{lineno}
+\renewcommand{\linenumberfont}{\scriptsize\sffamily}
+\usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref}
+\usepackage{breakurl}
+\urlstyle{sf}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Names used in the document.
+
+\newcommand{\CFA}{Cforall\xspace}		% set language text name
+\newcommand{\CFAA}{C$\forall$\xspace}	% set language symbolic name
+\newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
+\def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Bespoke macros used in the document.
+
+\makeatletter
+% index macros
+\newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
+\newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
+\newcommand{\see}[1]{\emph{see} #1}
+
+% Define some commands that produce formatted index entries suitable for cross-references.
+% ``\spec'' produces entries for specifications of entities.  ``\impl'' produces entries for their
+% implementations, and ``\use'' for their uses.
+
+%  \newcommand{\bold}[1]{{\bf #1}}
+%  \def\spec{\@bsphack\begingroup
+%             \def\protect##1{\string##1\space}\@sanitize
+%             \@wrxref{|bold}}
+\def\impl{\@bsphack\begingroup
+          \def\protect##1{\string##1\space}\@sanitize
+          \@wrxref{|definition}}
+\newcommand{\indexcode}[1]{{\lstinline$#1$}}
+\def\use{\@bsphack\begingroup
+         \def\protect##1{\string##1\space}\@sanitize
+         \@wrxref{|hyperpage}}
+\def\@wrxref#1#2{\let\thepage\relax
+    \xdef\@gtempa{\write\@indexfile{\string
+    \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa
+    \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+%\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}}
+%\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
+
+% text inline and lowercase index: \Index{Inline and index text}
+% text inline and as-in index: \Index{Inline and Index text}
+% text inline but index with different as-is text: \Index[index text]{inline text}
+\newcommand{\Index}{\@ifstar\@sIndex\@Index}
+\newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
+\newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
+\makeatother
+
+% blocks and titles
+\newcommand{\define}[1]{\emph{#1\/}\index{#1}}
+\newenvironment{rationale}{%
+  \begin{quotation}\noindent$\Box$\enspace
+}{%
+  \hfill\enspace$\Box$\end{quotation}
+}%
+\newcommand{\rewrite}{\(\Rightarrow\)}
+\newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent}
+\newcommand{\examples}{\paragraph{Examples}~\par\noindent}
+\newcommand{\semantics}{\paragraph{Semantics}~\par\noindent}
+\newcommand{\constraints}{\paragraph{Constraints}~\par\noindent}
+\newcommand{\predefined}{\paragraph{Predefined Identifiers}~\par\noindent}
+
+% BNF macros
+\def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]}
+\let\endsyntax=\endtrivlist
+\newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}}
+\newcommand{\rhs}{\hfil\break\hbox{\hskip1in}}
+\newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}}
+\newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}}
+\newcommand{\opt}{$_{opt}$\ }
+
+% adjust varioref package with default "section" and "page" titles, and optional title with faraway page numbers
+% \VRef{label} => Section 2.7, \VPageref{label} => page 17
+% \VRef[Figure]{label} => Figure 3.4, \VPageref{label} => page 17
+\renewcommand{\reftextfaceafter}{\unskip}
+\renewcommand{\reftextfacebefore}{\unskip}
+\renewcommand{\reftextafter}{\unskip}
+\renewcommand{\reftextbefore}{\unskip}
+\renewcommand{\reftextfaraway}[1]{\unskip, p.~\pageref{#1}}
+\renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}}
+\newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}}
+\newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
+
+% adjust listings macros
+\lstdefinelanguage{CFA}[ANSI]{C}%
+{morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,context,disable,dtype,enable,
+	fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,restrict,_Static_assert,
+	_Thread_local,throw,throwResume,try,type,},
+}%
+
+\lstset{
+language=CFA,
+columns=fullflexible,
+basicstyle=\sf\small,
+tabsize=4,
+xleftmargin=\parindent,
+escapechar=@,
+%fancyvrb=true,
+%showtabs=true,
+keepspaces=true,
+showtabs=true,
+tab=,
+}%
+
+\makeatletter
+% replace/adjust listings characters that look bad in sanserif
+\lst@CCPutMacro
+\lst@ProcessOther{"2D}{\lst@ttfamily{-{}}{{\ttfamily\upshape -}}} % replace minus
+\lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than
+\lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than
+\lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % replace circumflex
+\lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore
+\lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % replace tilde
+%\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde
+\@empty\z@\@empty
+\makeatother
+
+\setcounter{secnumdepth}{3}     % number subsubsections
+\setcounter{tocdepth}{3}		% subsubsections in table of contents
+\makeindex
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{document}
+\pagestyle{headings}
+\linenumbers					% comment out to turn off line numbering
+
+\title{\CFA (\CFAA) Reference Manual and Rationale}
+\author{Glen Ditchfield \and Peter A. Buhr}
+\date{DRAFT\\\today}
+
+\pagenumbering{roman}
+\pagestyle{plain}
+
+\maketitle
+
+\vspace*{\fill}
+\thispagestyle{empty}
+\noindent
+\copyright\,2015 Glen Ditchfield \\ \\
+\noindent
+This work is licensed under the Creative Commons Attribution 4.0 International License. To view a
+copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}.
+\vspace*{1in}
+
+\clearpage
+\pdfbookmark[1]{Contents}{section}
+\tableofcontents
+
+\clearpage
+\pagenumbering{arabic}
+
+
+\chapter*{Introduction}\addcontentsline{toc}{chapter}{Introduction}
+
+This document is a reference manual and rationale for \CFA, a polymorphic extension of the C
+programming language. It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and
+occasionally compares \CFA to {\CC} \cite{c++}.
+
+The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering
+differs). Unfortunately, this means the manual contains more ``forward references'' than usual,
+making it harder to follow if the reader does not have a copy of the {\c11} standard. For a simple
+introduction to \CFA, see the companion document ``An Overview of \CFA''
+\cite{Ditchfield96:Overview}.
+
+\begin{rationale}
+Commentary (like this) is quoted with quads. Commentary usually deals with subtle points, the
+rationale behind a rule, and design decisions.
+\end{rationale}
+
+% No ``Scope'' or ``Normative references'' chapters yet.
+
+
+\setcounter{chapter}{2}
+\chapter{Terms, definitions, and symbols}
+
+Terms from the {\c11} standard used in this document have the same meaning as in the {\c11}
+standard.
+
+% No ``Conformance'' or ``Environment'' chapters yet.
+
+
+\setcounter{chapter}{5}
+\chapter{Language}
+
+
+\section{Notation}
+The syntax notation used in this document is the same as in the {\c11} standard, with one exception:
+ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that
+these rules extend a previous definition, which occurs in this document or in the {\c11} standard.
+
+
+\section{Concepts}
+
+
+\subsection{Scopes of identifiers}\index{scopes}
+
+\CFA's scope rules differ from C's in one major respect: a declaration of an identifier may
+overload\index{overloading} outer declarations of lexically identical identifiers in the same
+\Index{name space}, instead of hiding them. The outer declaration is hidden if the two declarations
+have \Index{compatible type}, or if one declares an array type and the other declares a pointer type
+and the element type and pointed-at type are compatible, or if one has function type and the other
+is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or
+\lstinline$typedef$\use{typedef} declaration and the other is not.  The outer declaration becomes
+\Index{visible} when the scope of the inner declaration terminates.
+\begin{rationale}
+Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same
+scope; a {\CC} program can not.
+\end{rationale}
+
+
+\subsection{Linkage of identifiers}
+\index{linkage}
+
+\CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with
+external or internal linkage do not necessarily denote the same object or function. Instead, in the
+set of translation units and libraries that constitutes an entire program, any two instances of a
+particular identifier with \Index{external linkage} denote the same object or function if they have
+\Index{compatible type}s, or if one declares an array type and the other declares a pointer type and
+the element type and pointed-at type are compatible, or if one has function type and the other is a
+pointer to a compatible function type. Within one translation unit, each instance of an identifier
+with \Index{internal linkage} denotes the same object or function in the same circumstances.
+Identifiers with \Index{no linkage} always denote unique entities.
+\begin{rationale}
+A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$; a C
+program cannot.
+\end{rationale}
+
+
+\setcounter{subsection}{8}
+\subsection{Generic Types}
+
+
+\subsubsection{Semantics}
+
+\CFA provides a capability for generic types; using this capability a single "generic type
+generator" can be written that can represent multiple concrete type instantiations by substitution
+of the "type parameters" of the generic type for concrete types. Syntactically a generic type
+generator is represented by putting a forall specifier on a struct or union declaration, as defined
+in \VRef{forall}. An instantiation of the generic type is written by specifying the type parameters
+in parentheses after the name of the generic type generator:
+\begin{lstlisting}
+forall( type T | sumable( T ) ) struct pair {
+	T x;
+	T y;
+};
+pair( int ) p = { 3, 14 };
+\end{lstlisting}
+
+The type parameters in an instantiation of a generic type must satisfy any constraints in the forall
+specifier on the type generator declaration, e.g., \lstinline$sumable$. The instantiation then has
+the semantics that would result if the type parameters were substituted into the type generator
+declaration by macro substitution.
+
+Polymorphic functions may have generic types as parameters, and those generic types may use type
+parameters of the polymorphic function as type parameters of the generic type:
+\begin{lstlisting}
+forall( type T ) void swap( pair(T) *p ) {
+	T z = p->x;
+	p->x = p->y;
+	p->y = z;
+}
+\end{lstlisting}
+
+
+\subsubsection{Constraints}
+
+To avoid unduly constraining implementors, the generic type generator definition must be visible at
+any point where it is instantiated.  Forward declarations of generic type generators are not
+forbidden, but the definition must be visible to instantiate the generic type.  Equivalently,
+instantiations of generic types are not allowed to be incomplete types.
+
+\examples
+\begin{lstlisting}
+forall( type T ) struct A;
+
+forall( type T ) struct B {
+	A(T) *a;  // legal, but cannot instantiate B(T)
+};
+
+B(T) x; // illegal, *x.a is of an incomplete generic type
+
+forall( type T ) struct A {
+	B( T ) *b;
+};
+
+B( T ) y; // legal, *x.a is now of a complete generic type
+
+
+// box.h:
+	forall( type T ) struct box;
+	forall( type T ) box( T ) *make_box( T );
+	forall( type T ) void use_box( box( T ) *b );
+	
+// main.c:
+	box( int ) *b = make_box( 42 ); // illegal, def'n of box not visible
+	use_box( b ); // illegal
+\end{lstlisting}
+
+
+\section{Conversions}
+\CFA defines situations where values of one type are automatically converted to another type.
+These conversions are called \define{implicit conversion}s. The programmer can request
+\define{explicit conversion}s using cast expressions.
+
+
+\subsection{Arithmetic operands}
+
+
+\setcounter{subsubsection}{8}
+\subsubsection{Safe arithmetic conversions}
+
+In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most
+binary arithmetic operators to convert the operands to a common type and determine the type of the
+operator's result. In \CFA, these conversions play a role in overload resolution, and
+collectively are called the \define{safe arithmetic conversion}s.
+
+Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion
+rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$. Let
+\(unsigned_{mr}\) be the unsigned integer type with maximal rank.
+
+The following conversions are \emph{direct} safe arithmetic conversions.
+\begin{itemize}
+\item
+The \Index{integer promotion}s.
+
+\item
+For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\)
+to \(unsigned_r\).
+
+\item
+For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists
+and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\).
+
+\item
+Conversion from \(unsigned_{mr}\) to \lstinline$float$.
+
+\item
+Conversion from an enumerated type to its compatible integer type.
+
+\item
+Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to
+\lstinline$long double$.
+
+\item
+Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$,
+and from \lstinline$double _Complex$ to \lstinline$long double _Complex$.
+
+\begin{sloppypar}
+\item
+Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from
+\lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the
+implementation supports imaginary types.
+\end{sloppypar}
+\end{itemize}
+
+If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion
+and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then
+the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic
+conversion.
+
+\begin{rationale}
+Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the
+usual arithmetic conversions, and \CFA does not include them as safe conversions.
+\end{rationale}
+
+
+\subsection{Other operands}
+
+
+\setcounter{subsubsection}{3}
+\subsubsection{Anonymous structures and unions}
+\label{anon-conv}
+
+If an expression's type is a pointer to a structure or union type that has a member that is an
+\Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly
+converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's
+type. The result of the conversion is a pointer to the member.
+
+\examples
+\begin{lstlisting}
+struct point {
+	int x, y;
+};
+void move_by(struct point * p1, struct point * p2) {@\impl{move_by}@
+	p1->x += p2.x;
+	p1->y += p2.y;
+}
+
+struct color_point {
+	enum { RED, BLUE, GREEN } color;
+	struct point;
+} cp1, cp2;
+move_to(&cp1, &cp2);
+\end{lstlisting}
+Thanks to implicit conversion, the two arguments that \lstinline$move_by()$ receives are pointers to
+\lstinline$cp1$'s second member and \lstinline$cp2$'s second member.
+
+
+\subsubsection{Specialization}
+A function or value whose type is polymorphic may be implicitly converted to one whose type is
+\Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}. Any
+value that is legal for the inferred parameter may be used, including other inferred parameters.
+
+If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters
+in its type, then an object or function must be visible at the point of the specialization that has
+the same identifier as the assertion parameter and has a type that is compatible\index{compatible
+  type} with or can be specialized to the type of the assertion parameter.  The assertion parameter
+is bound to that object or function.
+
+The type of the specialization is the type of the original with the bound inferred parameters and
+the bound assertion parameters replaced by their bound values.
+
+\examples
+The type
+\begin{lstlisting}
+forall( type T, type U ) void (*)( T, U );
+\end{lstlisting}
+can be specialized to (among other things)
+\begin{lstlisting}
+forall( type T ) void (*)( T, T );		// U bound to T 
+forall( type T ) void (*)( T, real );	// U bound to real 
+forall( type U ) void (*)( real, U );	// T bound to real 
+void f( real, real );					// both bound to real 
+\end{lstlisting}
+
+The type
+\begin{lstlisting}
+forall( type T | T ?+?( T, T )) T (*)( T );
+\end{lstlisting}
+can be specialized to (among other things)
+\begin{lstlisting}
+int (*)( int );						// T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int ) 
+\end{lstlisting}
+
+
+\subsubsection{Safe conversions}
+
+A \define{direct safe conversion} is one of the following conversions:
+\begin{itemize}
+\item
+a direct safe arithmetic conversion;
+\item
+from any object type or incomplete type to \lstinline$void$;
+\item
+from a pointer to any non-\lstinline$void$ type to a pointer to \lstinline$void$;
+\item
+from a pointer to any type to a pointer to a more qualified version of the type\index{qualified
+type};
+\item
+from a pointer to a structure or union type to a pointer to the type of a member of the structure or
+union that is an \Index{anonymous structure} or an \Index{anonymous union};
+\item
+within the scope of an initialized \Index{type declaration}, conversions between a type and its
+implementation or between a pointer to a type and a pointer to its implementation.
+\end{itemize}
+
+Conversions that are not safe conversions are \define{unsafe conversion}s.
+\begin{rationale}
+As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type. This is
+clearly dangerous, and {\CC} does not have this implicit conversion.
+\CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a
+superset of C as possible, but discourages it by making it unsafe.
+\end{rationale}
+
+
+\subsection{Conversion cost}
+
+The \define{conversion cost} of a safe\index{safe conversion}
+conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion
+costs.} is a measure of how desirable or undesirable it is. It is defined as follows.
+\begin{itemize}
+\item
+The cost of a conversion from any type to itself is 0.
+
+\item
+The cost of a direct safe conversion is 1.
+
+\item
+The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions
+needed to make up the conversion.
+\end{itemize}
+
+\examples
+In the following, assume an implementation that does not provide any extended integer types.
+
+\begin{itemize}
+\item
+The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1. The cost of an
+implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms
+of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and
+then to \lstinline$double$.
+
+\item
+If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an
+implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2:
+\lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$. Otherwise,
+\lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1.
+
+\item
+If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost
+of \lstinline$unsigned$ to \lstinline$long$ is 1. Otherwise, the conversion is an unsafe
+conversion, and its conversion cost is undefined.
+\end{itemize}
+
+\section{Lexical elements}
+\subsection{Keywords}
+\begin{syntax}
+\oldlhs{keyword}
+	\rhs \lstinline$forall$
+	\rhs \lstinline$lvalue$
+	\rhs \lstinline$context$
+	\rhs \lstinline$dtype$
+	\rhs \lstinline$ftype$
+	\rhs \lstinline$type$
+\end{syntax}
+
+
+\subsection{Identifiers}
+
+\CFA allows operator \Index{overloading} by associating operators with special function
+identifiers. Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status
+for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them
+as overloadable identifiers. Programmers can use these identifiers to declare functions and objects
+that implement operators and constants for their own types.
+
+
+\setcounter{subsubsection}{2}
+\subsubsection{Constant identifiers}
+
+\begin{syntax}
+\oldlhs{identifier}
+\rhs \lstinline$0$
+\rhs \lstinline$1$
+\end{syntax}
+
+\index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0}
+and ``\lstinline$1$''\impl{1} are identifiers. No other tokens defined by the rules for integer
+constants are considered to be identifiers.
+\begin{rationale}
+Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C. All scalar
+types can be incremented and decremented, which is defined in terms of adding or subtracting 1. The
+operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any
+scalar arguments, and are defined in terms of comparison against 0. A \nonterm{constant-expression}
+that evaluates to 0 is effectively compatible with every pointer type.
+
+In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to
+any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to
+0 as a special case. However, user-defined arithmetic types often need the equivalent of a 1 or 0
+for their functions or operators, polymorphic functions often need 0 and 1 constants of a type
+matching their polymorphic parameters, and user-defined pointer-like types may need a null value.
+Defining special constants for a user-defined type is more efficient than defining a conversion to
+the type from \lstinline$_Bool$.
+
+Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers
+have special status in C. A facility that let programmers declare specific
+constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement.
+Some facility for defining the creation of values of programmer-defined types from arbitrary integer
+tokens would be needed. The complexity of such a feature doesn't seem worth the gain.
+\end{rationale}
+
+
+\subsubsection{Operator identifiers}
+
+\index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the
+programmer-definable operator identifiers and the operations they are associated with. Functions
+that are declared with (or pointed at by function pointers that are declared with) these identifiers
+can be called by expressions that use the operator tokens and syntax, or the operator identifiers
+and ``function call'' syntax. The relationships between operators and function calls are discussed
+in descriptions of the operators.
+
+\begin{table}[hbt]
+\hfil
+\begin{tabular}[t]{ll}
+%identifier & operation \\ \hline
+\lstinline$?[?]$ & subscripting \impl{?[?]}\\
+\lstinline$?()$ & function call \impl{?()}\\
+\lstinline$?++$ & postfix increment \impl{?++}\\
+\lstinline$?--$ & postfix decrement \impl{?--}\\
+\lstinline$++?$ & prefix increment \impl{++?}\\
+\lstinline$--?$ & prefix decrement \impl{--?}\\
+\lstinline$*?$ & dereference \impl{*?}\\
+\lstinline$+?$ & unary plus \impl{+?}\\
+\lstinline$-?$ & arithmetic negation \impl{-?}\\
+\lstinline$~?$ & bitwise negation \impl{~?}\\
+\lstinline$!?$ & logical complement \impl{"!?}\\
+\lstinline$?*?$ & multiplication \impl{?*?}\\
+\lstinline$?/?$ & division \impl{?/?}\\
+\end{tabular}\hfil
+\begin{tabular}[t]{ll}
+%identifier & operation \\ \hline
+\lstinline$?%?$ & remainder \impl{?%?}\\
+\lstinline$?+?$ & addition \impl{?+?}\\
+\lstinline$?-?$ & subtraction \impl{?-?}\\
+\lstinline$?<<?$ & left shift \impl{?<<?}\\
+\lstinline$?>>?$ & right shift \impl{?>>?}\\
+\lstinline$?<?$ & less than \impl{?<?}\\
+\lstinline$?<=?$ & less than or equal \impl{?<=?}\\
+\lstinline$?>=?$ & greater than or equal \impl{?>=?}\\
+\lstinline$?>?$ & greater than \impl{?>?}\\
+\lstinline$?==?$ & equality \impl{?==?}\\
+\lstinline$?!=?$ & inequality \impl{?"!=?}\\
+\lstinline$?&?$ & bitwise AND \impl{?&?}\\
+\end{tabular}\hfil
+\begin{tabular}[t]{ll}
+%identifier & operation \\ \hline
+\lstinline$?^?$ & exclusive OR \impl{?^?}\\
+\lstinline$?|?$ & inclusive OR \impl{?"|?}\\
+\lstinline$?=?$ & simple assignment \impl{?=?}\\
+\lstinline$?*=?$ & multiplication assignment \impl{?*=?}\\
+\lstinline$?/=?$ & division assignment \impl{?/=?}\\
+\lstinline$?%=?$ & remainder assignment \impl{?%=?}\\
+\lstinline$?+=?$ & addition assignment \impl{?+=?}\\
+\lstinline$?-=?$ & subtraction assignment \impl{?-=?}\\
+\lstinline$?<<=?$ & left-shift assignment \impl{?<<=?}\\
+\lstinline$?>>=?$ & right-shift assignment \impl{?>>=?}\\
+\lstinline$?&=?$ & bitwise AND assignment \impl{?&=?}\\
+\lstinline$?^=?$ & exclusive OR assignment \impl{?^=?}\\
+\lstinline$?|=?$ & inclusive OR assignment \impl{?"|=?}\\
+\end{tabular}
+\hfil
+\caption{Operator Identifiers}
+\label{opids}
+\end{table}
+
+\begin{rationale}
+Operator identifiers are made up of the characters of the operator token, with question marks added
+to mark the positions of the arguments of operators. The question marks serve as mnemonic devices;
+programmers can not create new operators by arbitrarily mixing question marks and other
+non-alphabetic characters. Note that prefix and postfix versions of the increment and decrement
+operators are distinguished by the position of the question mark.
+\end{rationale}
+
+\begin{rationale}
+The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs.  For
+instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a
+\CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not
+as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''.
+\end{rationale}
+
+\begin{rationale}
+Certain operators \emph{cannot} be defined by the programmer:
+\begin{itemize}
+\item
+The logical operators ``\lstinline$&&$'' and ``\lstinline$||$'', and the conditional operator
+``\lstinline$?:$''. These operators do not always evaluate their operands, and hence can not be
+properly defined by functions unless some mechanism like call-by-name is added to the language.
+Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by
+checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$''
+for user-defined types is enough to allow them to be used in logical expressions.
+
+\item
+The comma operator\index{comma expression}. It is a control-flow operator like those above.
+Changing its meaning seems pointless and confusing.
+
+\item
+The ``address of'' operator. It would seem useful to define a unary ``\lstinline$&$'' operator that
+returns values of some programmer-defined pointer-like type. The problem lies with the type of the
+operator. Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type
+\lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$. The expression
+might be treated as a call to the unary function ``\lstinline$&?$''. Now what is the type of the
+function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by
+value, and there is no way to create a useful pointer-like result from a value. Hence the parameter
+must have type \lstinline$T *$. But then the expression must be rewritten as ``\lstinline$p = &?( &x )$''
+---which doesn't seem like progress!
+
+The rule for address-of expressions would have to be something like ``keep applying address-of
+functions until you get one that takes a pointer argument, then use the built-in operator and
+stop''. It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$.
+
+\item
+The \lstinline$sizeof$ operator. It is already defined for every object type, and intimately tied
+into the language's storage allocation model. Redefining it seems pointless.
+
+\item
+The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''. These are not really infix
+operators, since their right ``operand'' is not a value or object.
+
+\item
+Cast operators\index{cast expression}. Anything that can be done with an explicit cast can be done
+with a function call. The difference in syntax is small.
+\end{itemize}
+\end{rationale}
+
+
+\section{Expressions}
+
+\CFA allows operators and identifiers to be overloaded. Hence, each expression can have a number
+of \define{interpretation}s, each of which has a different type. The interpretations that are
+potentially executable are called \define{valid interpretation}s. The set of interpretations
+depends on the kind of expression and on the interpretations of the subexpressions that it contains.
+The rules for determining the valid interpretations of an expression are discussed below for each
+kind of expression. Eventually the context of the outermost expression chooses one interpretation
+of that expression.
+
+An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or
+function denoted by every identifier in the expression. An expression can have some interpretations
+that are ambiguous and others that are unambiguous. An expression that is chosen to be executed
+shall not be ambiguous.
+
+The \define{best valid interpretations} are the valid interpretations that use the fewest
+unsafe\index{unsafe conversion} conversions. Of these, the best are those where the functions and
+objects involved are the least polymorphic\index{less polymorphic}. Of these, the best have the
+lowest total \Index{conversion cost}, including all implicit conversions in the argument
+expressions. Of these, the best have the highest total conversion cost for the implicit conversions
+(if any) applied to the argument expressions. If there is no single best valid interpretation, or if
+the best valid interpretation is ambiguous, then the resulting interpretation is
+ambiguous\index{ambiguous interpretation}.
+
+\begin{rationale}
+\CFA's rules for selecting the best interpretation are designed to allow overload resolution to
+mimic C's operator semantics. In C, the ``usual arithmetic conversions'' are applied to the
+operands of binary operators if necessary to convert the operands to types with a common real type.
+In \CFA, those conversions are ``safe''. The ``fewest unsafe conversions'' rule ensures that the
+usual conversions are done, if possible. The ``lowest total expression cost'' rule chooses the
+proper common type. The odd-looking ``highest argument conversion cost'' rule ensures that, when
+unary expressions must be converted, conversions of function results are preferred to conversion of
+function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$.
+
+The ``least polymorphic'' rule reduces the number of polymorphic function calls, since such
+functions are presumably more expensive than monomorphic functions and since the more specific
+function is presumably more appropriate. It also gives preference to monomorphic values (such as the
+\lstinline$int$ \lstinline$0$) over polymorphic values (such as the \Index{null pointer}
+\lstinline$0$\use{0}). However, interpretations that call polymorphic functions are preferred to
+interpretations that perform unsafe conversions, because those conversions potentially lose accuracy
+or violate strong typing.
+
+There are two notable differences between \CFA's overload resolution rules and the rules for
+{\CC} defined in \cite{c++}. First, the result type of a function plays a role. In {\CC}, a
+function call must be completely resolved based on the arguments to the call in most circumstances.
+In \CFA, a function call may have several interpretations, each with a different result type, and
+the interpretations of the containing context choose among them. Second, safe conversions are used
+to choose among interpretations of all sorts of functions; in {\CC}, the ``usual arithmetic
+conversions'' are a separate set of rules that apply only to the built-in operators.
+\end{rationale}
+
+Expressions involving certain operators\index{operator identifiers} are considered to be equivalent
+to function calls. A transformation from ``operator'' syntax to ``function call'' syntax is defined
+by \define{rewrite rules}. Each operator has a set of predefined functions that overload its
+identifier. Overload resolution determines which member of the set is executed in a given
+expression. The functions have \Index{internal linkage} and are implicitly declared with \Index{file
+scope}. The predefined functions and rewrite rules are discussed below for each of these
+operators.
+\begin{rationale}
+Predefined functions and constants have internal linkage because that simplifies optimization in
+traditional compile-and-link environments. For instance, ``\lstinline$an_int + an_int$'' is
+equivalent to ``\lstinline$?+?(an_int, an_int)$''. If integer addition has not been redefined in
+the current scope, a compiler can generate code to perform the addition directly. If predefined
+functions had external linkage, this optimization would be difficult.
+\end{rationale}
+
+\begin{rationale}
+Since each subsection describes the interpretations of an expression in terms of the interpretations
+of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that
+uses one bottom-up pass over an expression tree. Such an algorithm was first described (for Ada) by
+Baker~\cite{Bak:overload}. It is extended here to handle polymorphic functions and arithmetic
+conversions. The overload resolution rules and the predefined functions have been chosen so that, in
+programs that do not introduce overloaded declarations, expressions will have the same meaning in C
+and in \CFA.
+\end{rationale}
+
+\begin{rationale}
+Expression syntax is quoted from the {\c11} standard. The syntax itself defines the precedence and
+associativity of operators. The sections are arranged in decreasing order of precedence, with all
+operators in a section having the same precedence.
+\end{rationale}
+
+
+\subsection{Primary expressions}
+
+\begin{syntax}
+\lhs{primary-expression}
+\rhs \nonterm{identifier}
+\rhs \nonterm{constant}
+\rhs \nonterm{string-literal}
+\rhs \lstinline$($ \nonterm{expression} \lstinline$)$
+\rhs \nonterm{generic-selection}
+\end{syntax}
+
+\predefined
+\begin{lstlisting}
+const int 1;@\use{1}@
+const int 0;@\use{0}@
+forall( dtype DT ) DT *const 0;
+forall( ftype FT ) FT *const 0;
+\end{lstlisting}
+
+\semantics
+The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible}
+declarations of the identifier.
+
+A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type
+and value defined by {\c11}. The predefined integer identifiers ``\lstinline$1$'' and
+``\lstinline$0$'' have the integer values 1 and 0, respectively. The other two predefined
+``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when
+specialized\index{specialization} with a data type or function type respectively, produce a null
+pointer of that type.
+
+A parenthesised expression has the same interpretations as the contained \nonterm{expression}.
+
+\examples
+The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null
+pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe
+conversion from \lstinline$void *$ to \lstinline$const void *$. In each case, the null pointer
+conversion is better\index{best valid interpretations} than the unsafe conversion of the integer
+\lstinline$0$ to a pointer.
+
+\begin{rationale}
+Note that the predefined identifiers have addresses.
+
+\CFA does not have C's concept of ``null pointer constants'', which are not typed values but
+special strings of tokens. The C token ``\lstinline$0$'' is an expression of type \lstinline$int$
+with the value ``zero'', and it \emph{also} is a null pointer constant. Similarly,
+``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer,
+and it also is a null pointer constant. However, in C, ``\lstinline$(void *)(void *)0$'' is
+\emph{not} a null pointer constant, even though it is null-valued, a pointer, and constant! The
+semantics of C expressions contain many special cases to deal with subexpressions that are null
+pointer constants.
+
+\CFA handles these cases through overload resolution. The declaration
+\begin{lstlisting}
+forall( dtype DT ) DT *const 0;
+\end{lstlisting}
+means that \lstinline$0$ is a polymorphic object, and contains a value that can have \emph{any}
+pointer-to-object type or pointer-to-incomplete type. The only such value is the null pointer.
+Therefore the type \emph{alone} is enough to identify a null pointer. Where C defines an operator
+with a special case for the null pointer constant, \CFA defines predefined functions with a
+polymorphic object parameter.
+\end{rationale}
+
+
+\subsubsection{Generic selection}
+
+\constraints The best interpretation of the controlling expression shall be
+unambiguous\index{ambiguous interpretation}, and shall have type compatible with at most one of the
+types named in its generic association list. If a generic selection has no \lstinline$default$
+generic association, the best interpretation of its controlling expression shall have type
+compatible with exactly one of the types named in its generic association list.
+
+\semantics
+A generic selection has the same interpretations as its result expression.
+
+
+\subsection{Postfix operators}
+
+\begin{syntax}
+\lhs{postfix-expression}
+\rhs \nonterm{primary-expression}
+\rhs \nonterm{postfix-expression} \lstinline$[$ \nonterm{expression} \lstinline$]$
+\rhs \nonterm{postfix-expression} \lstinline$($ 
+	 \nonterm{argument-expression-list}\opt \lstinline$)$
+\rhs \nonterm{postfix-expression} \lstinline$.$ \nonterm{identifier}
+\rhs \nonterm{postfix-expression} \lstinline$->$ \nonterm{identifier}
+\rhs \nonterm{postfix-expression} \lstinline$++$
+\rhs \nonterm{postfix-expression} \lstinline$--$
+\rhs \lstinline$($ \nonterm{type-name} \lstinline$)$ \lstinline${$ \nonterm{initializer-list} \lstinline$}$
+\rhs \lstinline$($ \nonterm{type-name} \lstinline$)$ \lstinline${$ \nonterm{initializer-list} \lstinline$,$ \lstinline$}$
+\lhs{argument-expression-list}
+\rhs \nonterm{assignment-expression}
+\rhs \nonterm{argument-expression-list} \lstinline$,$
+	 \nonterm{assignment-expression}
+\end{syntax}
+
+\rewriterules
+\begin{lstlisting}
+a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type */@\use{?[?]}@
+a[b] @\rewrite@ ?[?]( a, b ) // otherwise
+a( ${\em arguments }$ ) @\rewrite@ ?()( a, ${\em arguments} )$@\use{?()}@
+a++ @\rewrite@ ?++(&( a ))@\use{?++}@
+a-- @\rewrite@ ?--(&( a ))@\use{?--}@
+\end{lstlisting}
+
+
+\subsubsection{Array subscripting}
+
+\predefined
+\begin{lstlisting}
+forall( type T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@
+forall( type T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t );
+forall( type T ) lvalue const T ?[?]( const T *, ptrdiff_t );
+forall( type T ) lvalue restrict T ?[?]( restrict T *, ptrdiff_t );
+forall( type T ) lvalue volatile T ?[?]( volatile T *, ptrdiff_t );
+forall( type T ) lvalue _Atomic const T ?[?]( _Atomic const T *, ptrdiff_t );
+forall( type T ) lvalue _Atomic restrict T ?[?]( _Atomic restrict T *, ptrdiff_t );
+forall( type T ) lvalue _Atomic volatile T ?[?]( _Atomic volatile T *, ptrdiff_t );
+forall( type T ) lvalue const restrict T ?[?]( const restrict T *, ptrdiff_t );
+forall( type T ) lvalue const volatile T ?[?]( const volatile T *, ptrdiff_t );
+forall( type T ) lvalue restrict volatile T ?[?]( restrict volatile T *, ptrdiff_t );
+forall( type T ) lvalue _Atomic const restrict T ?[?]( _Atomic const restrict T *, ptrdiff_t );
+forall( type T ) lvalue _Atomic const volatile T ?[?]( _Atomic const volatile T *, ptrdiff_t );
+forall( type T ) lvalue _Atomic restrict volatile T ?[?]( _Atomic restrict volatile T *, ptrdiff_t );
+forall( type T ) lvalue const restrict volatile T ?[?]( const restrict volatile T *, ptrdiff_t );
+forall( type T ) lvalue _Atomic const restrict volatile T ?[?]( _Atomic const restrict volatile T *, ptrdiff_t );
+\end{lstlisting}
+\semantics
+The interpretations of subscript expressions are the interpretations of the corresponding function
+call expressions.
+\begin{rationale}
+C defines subscripting as pointer arithmetic in a way that makes \lstinline$a[i]$ and
+\lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the
+number of overloadings of \lstinline$?[?]$.
+
+Subscript expressions are rewritten as function calls that pass the first parameter by value. This
+is somewhat unfortunate, since array-like types tend to be large. The alternative is to use the
+rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''. However, C semantics forbid
+this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which
+does not have an address.
+
+The repetitive form of the predefined identifiers shows up a deficiency\index{deficiencies!pointers
+ to qualified types} of \CFA's type system. Type qualifiers are not included in type values, so
+polymorphic functions that take pointers to arbitrary types often come in one flavor for each
+possible qualification of the pointed-at type.
+\end{rationale}
+
+
+\subsubsection{Function calls}
+
+\semantics
+A \define{function designator} is an interpretation of an expression that has function type. The
+\nonterm{postfix-expression} in a function call may have some interpretations that are function
+designators and some that are not.
+
+For those interpretations of the \nonterm{postfix-expression} that are not function designators, the
+expression is rewritten and becomes a call of a function named ``\lstinline$?()$''. The valid
+interpretations of the rewritten expression are determined in the manner described below.
+
+Each combination of function designators and argument interpretations is considered. For those
+interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function}
+designators, the combination has a \Index{valid interpretation} if the function designator accepts
+the number of arguments given, and each argument interpretation matches the corresponding explicit
+parameter:
+\begin{itemize}
+\item
+if the argument corresponds to a parameter in the function designator's prototype, the argument
+interpretation must have the same type as the corresponding parameter, or be implicitly convertible
+to the parameter's type
+\item
+if the function designator's type does not include a prototype or if the argument corresponds to
+``\lstinline$...$'' in a prototype, a \Index{default argument promotion} is applied to it.
+\end{itemize}
+The type of the valid interpretation is the return type of the function designator.
+
+For those combinations where the interpretation of the \nonterm{postfix-expression} is a
+\Index{polymorphic function} designator and the function designator accepts the number of arguments
+given, there shall be at least one set of \define{implicit argument}s for the implicit parameters
+such that
+\begin{itemize}
+\item
+If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the
+implicit argument must be an object type; if it uses \lstinline$dtype$, the implicit argument must
+be an object type or an incomplete type; and if it uses \lstinline$ftype$, the implicit argument
+must be a function type.
+
+\item
+if an explicit parameter's type uses any implicit parameters, then the corresponding explicit
+argument must have a type that is (or can be safely converted\index{safe conversion} to) the type
+produced by substituting the implicit arguments for the implicit parameters in the explicit
+parameter type.
+
+\item
+the remaining explicit arguments must match the remaining explicit parameters, as described for
+monomorphic function designators.
+
+\item
+for each \Index{assertion parameter} in the function designator's type, there must be an object or
+function with the same identifier that is visible at the call site and whose type is compatible with
+or can be specialized to the type of the assertion declaration.
+\end{itemize}
+There is a valid interpretation for each such set of implicit parameters. The type of each valid
+interpretation is the return type of the function designator with implicit parameter values
+substituted for the implicit arguments.
+
+A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or
+any of the argument interpretations is ambiguous.
+
+Every valid interpretation whose return type is not compatible with any other valid interpretation's
+return type is an interpretation of the function call expression.
+
+Every set of valid interpretations that have mutually compatible\index{compatible type} result types
+also produces an interpretation of the function call expression. The type of the interpretation is
+the \Index{composite type} of the types of the valid interpretations, and the value of the
+interpretation is that of the \Index{best valid interpretation}.
+\begin{rationale}
+One desirable property of a polymorphic programming language is \define{generalizability}: the
+ability to replace an abstraction with a more general but equivalent abstraction without requiring
+changes in any of the uses of the original\cite{Cormack90}. For instance, it should be possible to
+replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( type T ) T f( T );$''
+without affecting any calls of \lstinline$f$.
+
+\CFA\index{deficiencies!generalizability} does not fully possess this property, because
+\Index{unsafe conversion} are not done when arguments are passed to polymorphic parameters.
+Consider
+\begin{lstlisting}
+float g( float, float );
+int i;
+float f;
+double d;
+f = g( f, f );	// (1) 
+f = g( i, f );	// (2) (safe conversion to float) 
+f = g( d, f );	// (3) (unsafe conversion to float) 
+\end{lstlisting}
+If \lstinline$g$ was replaced by ``\lstinline$forall( type T ) T g( T, T );$'', the first and second
+calls would be unaffected, but the third would change: \lstinline$f$ would be converted to
+\lstinline$double$, and the result would be a \lstinline$double$.
+
+Another example is the function ``\lstinline$void h( int *);$''. This function can be passed a
+\lstinline$void *$ argument, but the generalization ``\lstinline$forall( type T ) void h( T *);$''
+can not. In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an
+object type. If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any}
+object type, which is undesirable.
+\end{rationale}
+
+\examples
+A function called ``\lstinline$?()$'' might be part of a numerical differentiation package.
+\begin{lstlisting}
+extern type Derivative;
+extern double ?()( Derivative, double );
+extern Derivative derivative_of( double (*f)( double ) );
+extern double sin( double );
+
+Derivative sin_dx = derivative_of( sin );
+double d;
+d = sin_dx( 12.9 );
+\end{lstlisting}
+Here, the only interpretation of \lstinline$sin_dx$ is as an object of type \lstinline$Derivative$.
+For that interpretation, the function call is treated as ``\lstinline$?()( sin_dx, 12.9 )$''.
+\begin{lstlisting}
+int f( long );		// (1) 
+int f( int, int );	// (2) 
+int f( int *);		// (3) 
+
+int i = f( 5 );		// calls (1) 
+\end{lstlisting}
+Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit
+\lstinline$int$ to \lstinline$long$ conversion. The other functions do not, since the second
+requires two arguments, and since there is no implicit conversion from \lstinline$int$ to
+\lstinline$int *$ that could be used with the third function.
+
+\begin{lstlisting}
+forall( type T ) T h( T );
+double d = h( 1.5 );
+\end{lstlisting}
+``\lstinline$1.5$'' is a \lstinline$double$ constant, so \lstinline$T$ is inferred to be
+\lstinline$double$, and the result of the function call is a \lstinline$double$.
+
+\begin{lstlisting}
+forall( type T, type U ) void g( T, U );	// (4) 
+forall( type T ) void g( T, T );			// (5) 
+forall( type T ) void g( T, long );			// (6) 
+void g( long, long );						// (7) 
+double d;
+int i;
+int *p;
+
+g( d, d );			// calls (5) 
+g( d, i );			// calls (6) 
+g( i, i );			// calls (7) 
+g( i, p );			// calls (4) 
+\end{lstlisting}
+The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are
+discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is
+chosen because it is less polymorphic than (4).
+
+For the second call, (7) is again discarded. Of the remaining interpretations for (4), (5), and (6)
+(with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least
+polymorphic.
+
+The third call has valid interpretations for all of the functions; (7) is chosen since it is not
+polymorphic at all.
+
+The fourth call has no interpretation for (5), because its arguments must have compatible type. (4)
+is chosen because it does not involve unsafe conversions.
+\begin{lstlisting}
+forall( type T ) T min( T, T );
+double max( double, double );
+context min_max( T ) {@\impl{min_max}@
+	T min( T, T );
+	T max( T, T );
+}
+forall( type U | min_max( U ) ) void shuffle( U, U );
+shuffle(9, 10);
+\end{lstlisting}
+The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the
+only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and
+\lstinline$min$ must be specialized with \lstinline$T$ bound to \lstinline$double$.
+\begin{lstlisting}
+extern void q( int );		// (8) 
+extern void q( void * );	// (9) 
+extern void r();
+q( 0 );
+r( 0 );
+\end{lstlisting}
+The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of
+the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9). The former is
+chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}. For
+the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has
+\emph{no} declared parameter types.
+
+
+\subsubsection{Structure and union members}
+
+\semantics In the member selection expression ``\lstinline$s$.\lstinline$m$'', there shall be at
+least one interpretation of \lstinline$s$ whose type is a structure type or union type containing a
+member named \lstinline$m$. If two or more interpretations of \lstinline$s$ have members named
+\lstinline$m$ with mutually compatible types, then the expression has an \Index{ambiguous
+interpretation} whose type is the composite type of the types of the members. If an interpretation
+of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other
+\lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type. The
+expression has no other interpretations.
+
+The expression ``\lstinline$p->m$'' has the same interpretations as the expression
+``\lstinline$(*p).m$''.
+
+
+\subsubsection{Postfix increment and decrement operators}
+
+\predefined
+\begin{lstlisting}
+_Bool ?++( volatile _Bool * ),
+	?++( _Atomic volatile _Bool * );
+char ?++( volatile char * ),
+	?++( _Atomic volatile char * );
+signed char ?++( volatile signed char * ),
+	?++( _Atomic volatile signed char * );
+unsigned char ?++( volatile signed char * ),
+	?++( _Atomic volatile signed char * );
+short int ?++( volatile short int * ),
+	?++( _Atomic volatile short int * );
+unsigned short int ?++( volatile unsigned short int * ),
+	?++( _Atomic volatile unsigned short int * );
+int ?++( volatile int * ),
+	?++( _Atomic volatile int * );
+unsigned int ?++( volatile unsigned int * ),
+	?++( _Atomic volatile unsigned int * );
+long int ?++( volatile long int * ),
+	?++( _Atomic volatile long int * );
+long unsigned int ?++( volatile long unsigned int * ),
+	?++( _Atomic volatile long unsigned int * );
+long long int ?++( volatile long long int * ),
+	?++( _Atomic volatile long long int * );
+long long unsigned ?++( volatile long long unsigned int * ),
+	?++( _Atomic volatile long long unsigned int * );
+float ?++( volatile float * ),
+	?++( _Atomic volatile float * );
+double ?++( volatile double * ),
+	?++( _Atomic volatile double * );
+long double ?++( volatile long double * ),
+	?++( _Atomic volatile long double * );
+
+forall( type T ) T * ?++( T * restrict volatile * ),
+	* ?++( T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic T * ?++( _Atomic T * restrict volatile * ),
+	* ?++( _Atomic T * _Atomic restrict volatile * );
+
+forall( type T ) const T * ?++( const T * restrict volatile * ),
+	* ?++( const T * _Atomic restrict volatile * );
+
+forall( type T ) volatile T * ?++( volatile T * restrict volatile * ),
+	* ?++( volatile T * _Atomic restrict volatile * );
+
+forall( type T ) restrict T * ?++( restrict T * restrict volatile * ),
+	* ?++( restrict T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ),
+	* ?++( _Atomic const T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ),
+	* ?++( _Atomic restrict T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ),
+	* ?++( _Atomic volatile T * _Atomic restrict volatile * );
+
+forall( type T ) const restrict T * ?++( const restrict T * restrict volatile * ),
+	* ?++( const restrict T * _Atomic restrict volatile * );
+
+forall( type T ) const volatile T * ?++( const volatile T * restrict volatile * ),
+	* ?++( const volatile T * _Atomic restrict volatile * );
+
+forall( type T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ),
+	* ?++( restrict volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ),
+	* ?++( _Atomic const restrict T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ),
+	* ?++( _Atomic const volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ),
+	* ?++( _Atomic restrict volatile T * _Atomic restrict volatile * );
+
+forall( type T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ),
+	* ?++( const restrict volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ),
+	* ?++( _Atomic const restrict volatile T * _Atomic restrict volatile * );
+
+_Bool ?--( volatile _Bool * ),
+	?--( _Atomic volatile _Bool * );
+char ?--( volatile char * ),
+	?--( _Atomic volatile char * );
+signed char ?--( volatile signed char * ),
+	?--( _Atomic volatile signed char * );
+unsigned char ?--( volatile signed char * ),
+	?--( _Atomic volatile signed char * );
+short int ?--( volatile short int * ),
+	?--( _Atomic volatile short int * );
+unsigned short int ?--( volatile unsigned short int * ),
+	?--( _Atomic volatile unsigned short int * );
+int ?--( volatile int * ),
+	?--( _Atomic volatile int * );
+unsigned int ?--( volatile unsigned int * ),
+	?--( _Atomic volatile unsigned int * );
+long int ?--( volatile long int * ),
+	?--( _Atomic volatile long int * );
+long unsigned int ?--( volatile long unsigned int * ),
+	?--( _Atomic volatile long unsigned int * );
+long long int ?--( volatile long long int * ),
+	?--( _Atomic volatile long long int * );
+long long unsigned ?--( volatile long long unsigned int * ),
+	?--( _Atomic volatile long long unsigned int * );
+float ?--( volatile float * ),
+	?--( _Atomic volatile float * );
+double ?--( volatile double * ),
+	?--( _Atomic volatile double * );
+long double ?--( volatile long double * ),
+	?--( _Atomic volatile long double * );
+
+forall( type T ) T * ?--( T * restrict volatile * ),
+	* ?--( T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic T * ?--( _Atomic T * restrict volatile * ),
+	* ?--( _Atomic T * _Atomic restrict volatile * );
+
+forall( type T ) const T * ?--( const T * restrict volatile * ),
+	* ?--( const T * _Atomic restrict volatile * );
+
+forall( type T ) volatile T * ?--( volatile T * restrict volatile * ),
+	* ?--( volatile T * _Atomic restrict volatile * );
+
+forall( type T ) restrict T * ?--( restrict T * restrict volatile * ),
+	* ?--( restrict T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ),
+	* ?--( _Atomic const T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ),
+	* ?--( _Atomic restrict T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ),
+	* ?--( _Atomic volatile T * _Atomic restrict volatile * );
+
+forall( type T ) const restrict T * ?--( const restrict T * restrict volatile * ),
+	* ?--( const restrict T * _Atomic restrict volatile * );
+
+forall( type T ) const volatile T * ?--( const volatile T * restrict volatile * ),
+	* ?--( const volatile T * _Atomic restrict volatile * );
+
+forall( type T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ),
+	* ?--( restrict volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ),
+	* ?--( _Atomic const restrict T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ),
+	* ?--( _Atomic const volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ),
+	* ?--( _Atomic restrict volatile T * _Atomic restrict volatile * );
+
+forall( type T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ),
+	* ?--( const restrict volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ),
+	* ?--( _Atomic const restrict volatile T * _Atomic restrict volatile * );
+\end{lstlisting}
+For every extended integer type \lstinline$X$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+X ?++( volatile X * ), ?++( _Atomic volatile X * ),
+  ?--( volatile X * ), ?--( _Atomic volatile X * );
+\end{lstlisting}
+For every complete enumerated type \lstinline$E$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+E ?++( volatile E * ), ?++( _Atomic volatile E * ),
+  ?--( volatile E * ), ?--( _Atomic volatile E * );
+\end{lstlisting}
+
+\begin{rationale}
+Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a
+pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald
+has pointed out, this forces the modified operand of such expressions to be an lvalue. This
+partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues.
+\end{rationale}
+
+\begin{rationale}
+In C, a semantic rule requires that pointer operands of increment and decrement be pointers to
+object types. Hence, \lstinline$void *$ objects cannot be incremented. In \CFA, the restriction
+follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as
+opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the
+type parameter \lstinline$T$.
+\end{rationale}
+
+\semantics
+First, each interpretation of the operand of an increment or decrement expression is considered
+separately. For each interpretation that is a bit-field or is declared with the
+\lstinline$register$\index{register@{\lstinline$register$}} \index{Itorage-class specifier}, the
+expression has one valid interpretation, with the type of the operand, and the expression is
+ambiguous if the operand is.
+
+For the remaining interpretations, the expression is rewritten, and the interpretations of the
+expression are the interpretations of the corresponding function call. Finally, all interpretations
+of the expression produced for the different interpretations of the operand are combined to produce
+the interpretations of the expression as a whole; where interpretations have compatible result
+types, the best interpretations are selected in the manner described for function call expressions.
+
+\examples
+\begin{lstlisting}
+volatile short int vs;	vs++; // rewritten as ?++( &(vs) )
+short int s;			s++;
+const short int cs;		cs++;
+_Atomic short int as;	as++;
+\end{lstlisting}
+\begin{sloppypar}
+Since \lstinline$&(vs)$ has type \lstinline$volatile short int *$, the best valid interpretation of
+\lstinline$vs++$ calls the \lstinline$?++$ function with the \lstinline$volatile short *$ parameter.
+\lstinline$s++$ does the same, applying the safe conversion from \lstinline$short int *$ to
+\lstinline$volatile short int *$. Note that there is no conversion that adds an \lstinline$_Atomic$
+qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid
+interpretation.
+\end{sloppypar}
+
+There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$,
+and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$
+has no valid interpretations.
+
+The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the
+\lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the
+\lstinline$volatile$ qualifier.
+
+\begin{lstlisting}
+char * const restrict volatile * restrict volatile pqpc; pqpc++
+char * * restrict volatile ppc; ppc++; 
+\end{lstlisting}
+Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$,
+the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function
+with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring
+\lstinline$T$ to be \lstinline$char *$.
+
+\begin{sloppypar}
+\lstinline$ppc++$ calls the same function, again inferring \lstinline$T$ to be \lstinline$char *$,
+and using the safe conversions from \lstinline$T$ to \lstinline$T const restrict volatile$.
+\end{sloppypar}
+
+\begin{rationale}
+Increment and decrement expressions show up a deficiency of \CFA's type system. There is no such
+thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}.
+Therefore, there is no way to define a function that alters them, and hence no way to define
+increment and decrement functions for them. As a result, the semantics of increment and decrement
+expressions must treat them specially. This holds true for all of the operators that may modify
+such objects.
+\end{rationale}
+
+\begin{rationale}
+The polymorphic overloadings for pointer increment and decrement can be understood by considering
+increasingly complex types.
+\begin{enumerate}
+\item
+``\lstinline$char * p; p++;$''. The argument to \lstinline$?++$ has type \lstinline$char * *$, and
+the result has type \lstinline$char *$. The expression would be valid if \lstinline$?++$ were
+declared by
+\begin{lstlisting}
+forall( type T ) T * ?++( T * * );
+\end{lstlisting}
+with \lstinline$T$ inferred to be \lstinline$char$.
+
+\item
+``\lstinline$char *restrict volatile qp; qp++$''. The result again has type \lstinline$char *$, but
+the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the
+hypothetical function declared in point 1. Hence the actual predefined function is
+\begin{lstlisting}
+forall( type T ) T * ?++( T * restrict volatile * );
+\end{lstlisting}
+which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add
+\lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so
+constant pointers cannot be incremented.)
+
+\item
+``\lstinline$char *_Atomic ap; ap++$''. The result again has type \lstinline$char *$, but no safe
+conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable. A
+separate overloading of \lstinline$?++$ is required.
+
+\item
+``\lstinline$char const volatile * pq; pq++$''. Here the result has type
+\lstinline$char const volatile *$, so a new overloading is needed:
+\begin{lstlisting}
+forall( type T ) T const volatile * ?++( T const volatile *restrict volatile * );
+\end{lstlisting}
+One overloading is needed for each combination of qualifiers in the pointed-at
+type\index{deficiencies!pointers to qualified types}.
+ 
+\item
+``\lstinline$float *restrict * prp; prp++$''. The \lstinline$restrict$ qualifier is handled just
+like \lstinline$const$ and \lstinline$volatile$ in the previous case:
+\begin{lstlisting}
+forall( type T ) T restrict * ?++( T restrict *restrict volatile * );
+\end{lstlisting}
+with \lstinline$T$ inferred to be \lstinline$float *$. This looks odd, because {\c11} contains a
+constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$
+is not syntactically a pointer type. \CFA loosens the constraint.
+\end{enumerate}
+\end{rationale}
+
+
+\subsubsection{Compound literals}
+
+\semantics 
+A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the
+compound literal.
+
+
+\subsection{Unary operators}
+
+\begin{syntax}
+\lhs{unary-expression}
+\rhs \nonterm{postfix-expression}
+\rhs \lstinline$++$ \nonterm{unary-expression}
+\rhs \lstinline$--$ \nonterm{unary-expression}
+\rhs \nonterm{unary-operator} \nonterm{cast-expression}
+\rhs \lstinline$sizeof$ \nonterm{unary-expression}
+\rhs \lstinline$sizeof$ \lstinline$($ \nonterm{type-name} \lstinline$)$
+\lhs{unary-operator} one of \rhs \lstinline$&$ \lstinline$*$ \lstinline$+$ \lstinline$-$ \lstinline$~$ \lstinline$!$
+\end{syntax}
+
+\rewriterules
+\begin{lstlisting}
+*a	@\rewrite@ *?(a) @\use{*?}@
++a	@\rewrite@ +?(a) @\use{+?}@
+-a	@\rewrite@ -?(a) @\use{-?}@
+~a	@\rewrite@ ~?(a) @\use{~?}@
+!a	@\rewrite@ !?(a) @\use{"!?}@
+++a	@\rewrite@ ++?(&(a)) @\use{++?}@
+--a	@\rewrite@ --?(&(a)) @\use{--?}@
+\end{lstlisting}
+
+
+\subsubsection{Prefix increment and decrement operators}
+
+\predefined
+\begin{lstlisting}
+_Bool ++?( volatile _Bool * ),
+	++?( _Atomic volatile _Bool * );
+char ++?( volatile char * ),
+	++?( _Atomic volatile char * );
+signed char ++?( volatile signed char * ),
+	++?( _Atomic volatile signed char * );
+unsigned char ++?( volatile signed char * ),
+	++?( _Atomic volatile signed char * );
+short int ++?( volatile short int * ),
+	++?( _Atomic volatile short int * );
+unsigned short int ++?( volatile unsigned short int * ),
+	++?( _Atomic volatile unsigned short int * );
+int ++?( volatile int * ),
+	++?( _Atomic volatile int * );
+unsigned int ++?( volatile unsigned int * ),
+	++?( _Atomic volatile unsigned int * );
+long int ++?( volatile long int * ),
+	++?( _Atomic volatile long int * );
+long unsigned int ++?( volatile long unsigned int * ),
+	++?( _Atomic volatile long unsigned int * );
+long long int ++?( volatile long long int * ),
+	++?( _Atomic volatile long long int * );
+long long unsigned ++?( volatile long long unsigned int * ),
+	++?( _Atomic volatile long long unsigned int * );
+float ++?( volatile float * ),
+	++?( _Atomic volatile float * );
+double ++?( volatile double * ),
+	++?( _Atomic volatile double * );
+long double ++?( volatile long double * ),
+	++?( _Atomic volatile long double * );
+
+forall( type T ) T * ++?( T * restrict volatile * ),
+	* ++?( T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic T * ++?( _Atomic T * restrict volatile * ),
+	* ++?( _Atomic T * _Atomic restrict volatile * );
+
+forall( type T ) const T * ++?( const T * restrict volatile * ),
+	* ++?( const T * _Atomic restrict volatile * );
+
+forall( type T ) volatile T * ++?( volatile T * restrict volatile * ),
+	* ++?( volatile T * _Atomic restrict volatile * );
+
+forall( type T ) restrict T * ++?( restrict T * restrict volatile * ),
+	* ++?( restrict T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ),
+	* ++?( _Atomic const T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ),
+	* ++?( _Atomic volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ),
+	* ++?( _Atomic restrict T * _Atomic restrict volatile * );
+
+forall( type T ) const volatile T * ++?( const volatile T * restrict volatile * ),
+	* ++?( const volatile T * _Atomic restrict volatile * );
+
+forall( type T ) const restrict T * ++?( const restrict T * restrict volatile * ),
+	* ++?( const restrict T * _Atomic restrict volatile * );
+
+forall( type T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ),
+	* ++?( restrict volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ),
+	* ++?( _Atomic const volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ),
+	* ++?( _Atomic const restrict T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ),
+	* ++?( _Atomic restrict volatile T * _Atomic restrict volatile * );
+
+forall( type T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ),
+	* ++?( const restrict volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ),
+	* ++?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
+
+_Bool --?( volatile _Bool * ),
+	--?( _Atomic volatile _Bool * );
+char --?( volatile char * ),
+	--?( _Atomic volatile char * );
+signed char --?( volatile signed char * ),
+	--?( _Atomic volatile signed char * );
+unsigned char --?( volatile signed char * ),
+	--?( _Atomic volatile signed char * );
+short int --?( volatile short int * ),
+	--?( _Atomic volatile short int * );
+unsigned short int --?( volatile unsigned short int * ),
+	--?( _Atomic volatile unsigned short int * );
+int --?( volatile int * ),
+	--?( _Atomic volatile int * );
+unsigned int --?( volatile unsigned int * ),
+	--?( _Atomic volatile unsigned int * );
+long int --?( volatile long int * ),
+	--?( _Atomic volatile long int * );
+long unsigned int --?( volatile long unsigned int * ),
+	--?( _Atomic volatile long unsigned int * );
+long long int --?( volatile long long int * ),
+	--?( _Atomic volatile long long int * );
+long long unsigned --?( volatile long long unsigned int * ),
+	--?( _Atomic volatile long long unsigned int * );
+float --?( volatile float * ),
+	--?( _Atomic volatile float * );
+double --?( volatile double * ),
+	--?( _Atomic volatile double * );
+long double --?( volatile long double * ),
+	--?( _Atomic volatile long double * );
+
+forall( type T ) T * --?( T * restrict volatile * ),
+	* --?( T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic T * --?( _Atomic T * restrict volatile * ),
+	* --?( _Atomic T * _Atomic restrict volatile * );
+
+forall( type T ) const T * --?( const T * restrict volatile * ),
+	* --?( const T * _Atomic restrict volatile * );
+
+forall( type T ) volatile T * --?( volatile T * restrict volatile * ),
+	* --?( volatile T * _Atomic restrict volatile * );
+
+forall( type T ) restrict T * --?( restrict T * restrict volatile * ),
+	* --?( restrict T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ),
+	* --?( _Atomic const T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ),
+	* --?( _Atomic volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ),
+	* --?( _Atomic restrict T * _Atomic restrict volatile * );
+
+forall( type T ) const volatile T * --?( const volatile T * restrict volatile * ),
+	* --?( const volatile T * _Atomic restrict volatile * );
+
+forall( type T ) const restrict T * --?( const restrict T * restrict volatile * ),
+	* --?( const restrict T * _Atomic restrict volatile * );
+
+forall( type T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ),
+	* --?( restrict volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ),
+	* --?( _Atomic const volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ),
+	* --?( _Atomic const restrict T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ),
+	* --?( _Atomic restrict volatile T * _Atomic restrict volatile * );
+
+forall( type T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ),
+	* --?( const restrict volatile T * _Atomic restrict volatile * );
+
+forall( type T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ),
+	* --?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
+\end{lstlisting}
+For every extended integer type \lstinline$X$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+X	++?( volatile X * ),
+	++?( _Atomic volatile X * ),
+	--?( volatile X * ),
+	--?( _Atomic volatile X * );
+\end{lstlisting}
+For every complete enumerated type \lstinline$E$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+E ++?( volatile E * ),
+	++?( _Atomic volatile E * ),
+	?--( volatile E * ),
+	?--( _Atomic volatile E * );
+\end{lstlisting}
+
+\semantics
+The interpretations of prefix increment and decrement expressions are
+determined in the same way as the interpretations of postfix increment and
+decrement expressions.
+
+
+\subsubsection{Address and indirection operators}
+
+\predefined
+\begin{lstlisting}
+forall( type T ) lvalue T *?( T * );
+forall( type T ) _Atomic lvalue T *?( _Atomic T * );
+forall( type T ) const lvalue T *?( const T * );
+forall( type T ) volatile lvalue T *?( volatile T * );
+forall( type T ) restrict lvalue T *?( restrict T * );
+forall( type T ) _Atomic const lvalue T *?( _Atomic const T * );
+forall( type T ) _Atomic volatile lvalue T *?( _Atomic volatile T * );
+forall( type T ) _Atomic restrict lvalue T *?( _Atomic restrict T * );
+forall( type T ) const volatile lvalue T *?( const volatile T * );
+forall( type T ) const restrict lvalue T *?( const restrict T * );
+forall( type T ) restrict volatile lvalue T *?( restrict volatile T * );
+forall( type T ) _Atomic const volatile lvalue T *?( _Atomic const volatile T * );
+forall( type T ) _Atomic const restrict lvalue T *?( _Atomic const restrict T * );
+forall( type T ) _Atomic restrict volatile lvalue T *?( _Atomic restrict volatile T * );
+forall( type T ) const restrict volatile lvalue T *?( const restrict volatile T * );
+forall( type T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * );
+
+forall( ftype FT ) FT *?( FT * );
+\end{lstlisting}
+
+\constraints
+The operand of the unary ``\lstinline$&$'' operator shall have exactly one
+\Index{interpretation}\index{ambiguous interpretation}, which shall be unambiguous.
+
+\semantics
+The ``\lstinline$&$'' expression has one interpretation which is of type \lstinline$T *$, where
+\lstinline$T$ is the type of the operand.
+
+The interpretations of an indirection expression are the interpretations of the corresponding
+function call.
+
+
+\subsubsection{Unary arithmetic operators}
+
+\predefined
+\begin{lstlisting}
+int
+	+?( int ),
+	-?( int ),
+	~?( int );
+unsigned int
+	+?( unsigned int ),
+	-?( unsigned int ),
+	 ~?( unsigned int );
+long int
+	+?( long int ),
+	-?( long int ),
+	~?( long int );
+long unsigned int
+	+?( long unsigned int ),
+	-?( long unsigned int ),
+	~?( long unsigned int );
+long long int
+	+?( long long int ),
+	-?( long long int ),
+	~?( long long int );
+long long unsigned int
+	+?( long long unsigned int ),
+	-?( long long unsigned int ),
+	~?( long long unsigned int );
+float
+	+?( float ),
+	-?( float );
+double
+	+?( double ),
+	-?( double );
+long double
+	+?( long double ),
+	-?( long double );
+_Complex float
+	+?( _Complex float ),
+	-?( _Complex float );
+_Complex double
+	+?( _Complex double ),
+	-?( _Complex double );
+_Complex long double
+	+?( _Complex long double ),
+	-?( _Complex long double );
+
+int !?( int ),
+	!?( unsigned int ),
+	!?( long ),
+	!?( long unsigned int ),
+	!?( long long int ),
+	!?( long long unsigned int ),
+	!?( float ),
+	!?( double ),
+	!?( long double ),
+	!?( _Complex float ),
+	!?( _Complex double ),
+	!?( _Complex long double );
+
+forall( dtype DT ) int !?( const restrict volatile DT * );
+forall( dtype DT ) int !?( _Atomic const restrict volatile DT * );
+forall( ftype FT ) int !?( FT * );
+\end{lstlisting}
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
+rank of \lstinline$int$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+X +?( X ), -?( X ), ~?( X );
+int !?( X );
+\end{lstlisting}
+
+\semantics
+The interpretations of a unary arithmetic expression are the interpretations of the corresponding
+function call.
+
+\examples
+\begin{lstlisting}
+long int li;
+void eat_double( double );@\use{eat_double}@
+
+eat_double(-li ); // @\rewrite@ eat_double( -?( li ) ); 
+\end{lstlisting}
+The valid interpretations of ``\lstinline$-li$'' (assuming no extended integer types exist) are
+\begin{center}
+\begin{tabular}{llc}
+interpretation & result type & expression conversion cost \\
+\hline
+\lstinline$-?( (int)li )$					& \lstinline$int$					& (unsafe) \\
+\lstinline$-?( (unsigned)li)$				& \lstinline$unsigned int$			& (unsafe) \\
+\lstinline$-?( (long)li)$					& \lstinline$long$					& 0 \\
+\lstinline$-?( (long unsigned int)li)$		& \lstinline$long unsigned int$		& 1 \\
+\lstinline$-?( (long long int)li)$			& \lstinline$long long int$			& 2 \\
+\lstinline$-?( (long long unsigned int)li)$	& \lstinline$long long unsigned int$& 3 \\
+\lstinline$-?( (float)li)$					& \lstinline$float$					& 4 \\
+\lstinline$-?( (double)li)$					& \lstinline$double$				& 5 \\
+\lstinline$-?( (long double)li)$			& \lstinline$long double$			& 6 \\
+\lstinline$-?( (_Complex float)li)$			& \lstinline$float$					& (unsafe) \\
+\lstinline$-?( (_Complex double)li)$		& \lstinline$double$				& (unsafe) \\
+\lstinline$-?( (_Complex long double)li)$	& \lstinline$long double$			& (unsafe) \\
+\end{tabular}
+\end{center}
+The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument
+conversion and the cost of the entire expression, are
+\begin{center}
+\begin{tabular}{lcc}
+interpretation & argument cost & expression cost \\
+\hline
+\lstinline$eat_double( (double)-?( (int)li) )$					& 7			& (unsafe) \\
+\lstinline$eat_double( (double)-?( (unsigned)li) )$				& 6			& (unsafe) \\
+\lstinline$eat_double( (double)-?(li) )$						& 5			& \(0+5=5\) \\
+\lstinline$eat_double( (double)-?( (long unsigned int)li) )$	& 4			& \(1+4=5\) \\
+\lstinline$eat_double( (double)-?( (long long int)li) )$ 		& 3			& \(2+3=5\) \\
+\lstinline$eat_double( (double)-?( (long long unsigned int)li) )$& 2		& \(3+2=5\) \\
+\lstinline$eat_double( (double)-?( (float)li) )$				& 1			& \(4+1=5\) \\
+\lstinline$eat_double( (double)-?( (double)li) )$				& 0			& \(5+0=5\) \\
+\lstinline$eat_double( (double)-?( (long double)li) )$			& (unsafe)	& (unsafe) \\
+\lstinline$eat_double( (double)-?( (_Complex float)li) )$		& (unsafe)	& (unsafe) \\
+\lstinline$eat_double( (double)-?( (_Complex double)li) )$		& (unsafe)	& (unsafe) \\
+\lstinline$eat_double( (double)-?( (_Complex long double)li) )$	& (unsafe)	& (unsafe) \\
+\end{tabular}
+\end{center}
+Each has result type \lstinline$void$, so the best must be selected. The interpretations involving
+unsafe conversions are discarded. The remainder have equal expression conversion costs, so the
+``highest argument conversion cost'' rule is invoked, and the chosen interpretation is
+\lstinline$eat_double( (double)-?(li) )$.
+
+
+\subsubsection{The \lstinline$sizeof$ and \lstinline$_Alignof$ operators}
+
+\constraints
+The operand of \lstinline$sizeof$ or \lstinline$_Alignof$ shall not be \lstinline$type$,
+\lstinline$dtype$, or \lstinline$ftype$.
+
+When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall
+have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall
+be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one
+interpretation, of type \lstinline$size_t$.
+
+When \lstinline$sizeof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
+\nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand. When
+the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the
+expression is not a constant expression.
+
+When \lstinline$_Alignof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
+\nonterm{type-parameter}, it yields the alignment requirement of the type that implements the
+operand. When the operand is an opaque type or an inferred type parameter\index{inferred
+parameter}, the expression is not a constant expression.
+\begin{rationale}
+\begin{lstlisting}
+type Pair = struct { int first, second; };
+size_t p_size = sizeof(Pair);		// constant expression 
+
+extern type Rational;@\use{Rational}@
+size_t c_size = sizeof(Rational);	// non-constant expression 
+
+forall(type T) T f(T p1, T p2) {
+	size_t t_size = sizeof(T);		// non-constant expression 
+	...
+}
+\end{lstlisting}
+``\lstinline$sizeof Rational$'', although not statically known, is fixed. Within \lstinline$f()$,
+``\lstinline$sizeof(T)$'' is fixed for each call of \lstinline$f()$, but may vary from call to call.
+\end{rationale}
+
+
+\subsection{Cast operators}
+
+\begin{syntax}
+\lhs{cast-expression}
+\rhs \nonterm{unary-expression}
+\rhs \lstinline$($ \nonterm{type-name} \lstinline$)$ \nonterm{cast-expression}
+\end{syntax}
+
+\constraints
+The \nonterm{type-name} in a \nonterm{cast-expression} shall not be \lstinline$type$,
+\lstinline$dtype$, or \lstinline$ftype$.
+
+\semantics
+
+In a \Index{cast expression} ``\lstinline$($\nonterm{type-name}\lstinline$)e$'', if
+\nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is
+the only interpretation of the cast expression; otherwise, \lstinline$e$ shall have some
+interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast
+expression is the cast of the interpretation that can be converted at the lowest cost. The cast
+expression's interpretation is ambiguous\index{ambiguous interpretation} if more than one
+interpretation can be converted at the lowest cost or if the selected interpretation is ambiguous.
+
+\begin{rationale}
+Casts can be used to eliminate ambiguity in expressions by selecting interpretations of
+subexpressions, and to specialize polymorphic functions and values.
+\end{rationale}
+
+
+\subsection{Multiplicative operators}
+
+\begin{syntax}
+\lhs{multiplicative-expression}
+\rhs \nonterm{cast-expression}
+\rhs \nonterm{multiplicative-expression} \lstinline$*$ \nonterm{cast-expression}
+\rhs \nonterm{multiplicative-expression} \lstinline$/$ \nonterm{cast-expression}
+\rhs \nonterm{multiplicative-expression} \lstinline$%$ \nonterm{cast-expression}
+\end{syntax}
+
+\rewriterules
+\begin{lstlisting}
+a * b @\rewrite@ ?*?( a, b )@\use{?*?}@
+a / b @\rewrite@ ?/?( a, b )@\use{?/?}@
+a % b @\rewrite@ ?%?( a, b )@\use{?%?}@
+\end{lstlisting}
+
+\predefined
+\begin{lstlisting}
+int?*?( int, int ),
+	?/?( int, int ),
+	?%?( int, int );
+unsigned int?*?( unsigned int, unsigned int ),
+	?/?( unsigned int, unsigned int ),
+	?%?( unsigned int, unsigned int );
+long int?*?( long int, long int ),
+	?/?( long, long ),
+	?%?( long, long );
+long unsigned int?*?( long unsigned int, long unsigned int ),
+	?/?( long unsigned int, long unsigned int ),
+	?%?( long unsigned int, long unsigned int );
+long long int?*?( long long int, long long int ),
+	?/?( long long int, long long int ),
+	?%?( long long int, long long int );
+long long unsigned int ?*?( long long unsigned int, long long unsigned int ),
+	?/?( long long unsigned int, long long unsigned int ),
+	?%?( long long unsigned int, long long unsigned int );
+float?*?( float, float ),
+	?/?( float, float );
+double?*?( double, double ),
+	?/?( double, double );
+long double?*?( long double, long double ),
+	?/?( long double, long double );
+_Complex float?*?( float, _Complex float ),
+	?/?( float, _Complex float ),
+	?*?( _Complex float, float ),
+	?/?( _Complex float, float ),
+	?*?( _Complex float, _Complex float ),
+	?/?( _Complex float, _Complex float );
+_Complex double?*?( double, _Complex double ),
+	?/?( double, _Complex double ),
+	?*?( _Complex double, double ),
+	?/?( _Complex double, double ),
+	?*?( _Complex double, _Complex double ),
+	?/?( _Complex double, _Complex double );
+_Complex long double?*?( long double, _Complex long double ),
+	?/?( long double, _Complex long double ),
+	?*?( _Complex long double, long double ),
+	?/?( _Complex long double, long double ),
+	?*?( _Complex long double, _Complex long double ),
+	?/?( _Complex long double, _Complex long double );
+\end{lstlisting}
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
+rank of \lstinline$int$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+X ?*?( X ), ?/?( X ), ?%?( X );
+\end{lstlisting}
+
+\begin{rationale}
+{\c11} does not include conversions from the \Index{real type}s to \Index{complex type}s in the
+\Index{usual arithmetic conversion}s.  Instead it specifies conversion of the result of binary
+operations on arguments from mixed type domains. \CFA's predefined operators match that pattern.
+\end{rationale}
+
+\semantics
+The interpretations of multiplicative expressions are the interpretations of the corresponding
+function call.
+
+\examples
+\begin{lstlisting}
+int i;
+long li;
+void eat_double( double );@\use{eat_double}@
+eat_double( li % i );
+\end{lstlisting}
+``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''. The valid interpretations
+of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and
+the cost of converting the result to \lstinline$double$ (assuming no extended integer types are
+present ) are
+\begin{center}
+\begin{tabular}{lcc}
+interpretation & argument cost & result cost \\
+\hline 
+\lstinline$ ?%?( (int)li, i )$										& (unsafe)	& 6	\\
+\lstinline$ ?%?( (unsigned)li,(unsigned)i )$						& (unsafe)	& 5	\\
+\lstinline$ ?%?(li,(long)i )$										& 1			& 4	\\
+\lstinline$ ?%?( (long unsigned)li,(long unsigned)i )$				& 3			& 3	\\
+\lstinline$ ?%?( (long long)li,(long long)i )$						& 5			& 2	\\
+\lstinline$ ?%?( (long long unsigned)li, (long long unsigned)i )$	& 7			& 1	\\
+\end{tabular}
+\end{center}
+The best interpretation of \lstinline$eat_double( li, i )$ is
+\lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the
+lowest total cost.
+
+\begin{rationale}
+{\c11} defines most arithmetic operations to apply an \Index{integer promotion} to any argument that
+belongs to a type that has an \Index{integer conversion rank} less than that of \lstinline$int$.If
+\lstinline$s$ is a \lstinline$short int$, ``\lstinline$s *s$'' does not have type \lstinline$short int$;
+it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches
+that pattern; it does not predefine ``\lstinline$short ?*?( short, short )$''.
+
+These ``missing'' operators limit polymorphism. Consider
+\begin{lstlisting}
+forall( type T | T ?*?( T, T ) ) T square( T );
+short s;
+square( s );
+\end{lstlisting}
+Since \CFA does not define a multiplication operator for \lstinline$short int$,
+\lstinline$square( s )$ is treated as \lstinline$square( (int)s )$, and the result has type
+\lstinline$int$. This is mildly surprising, but it follows the {\c11} operator pattern.
+
+A more troubling example is
+\begin{lstlisting}
+forall( type T | ?*?( T, T ) ) T product( T[], int n );
+short sa[5];
+product( sa, 5);
+\end{lstlisting}
+This has no valid interpretations, because \CFA has no conversion from ``array of
+\lstinline$short int$'' to ``array of \lstinline$int$''. The alternatives in such situations
+include
+\begin{itemize}
+\item
+Defining monomorphic overloadings of \lstinline$product$ for \lstinline$short$ and the other
+``small'' types.
+\item
+Defining ``\lstinline$short ?*?( short, short )$'' within the scope containing the call to
+\lstinline$product$.
+\item
+Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to
+the operator's argument type.
+\end{itemize}
+\end{rationale}
+
+
+\subsection{Additive operators}
+
+\begin{syntax}
+\lhs{additive-expression}
+\rhs \nonterm{multiplicative-expression}
+\rhs \nonterm{additive-expression} \lstinline$+$ \nonterm{multiplicative-expression}
+\rhs \nonterm{additive-expression} \lstinline$-$ \nonterm{multiplicative-expression}
+\end{syntax}
+
+\rewriterules
+\begin{lstlisting}
+a + b @\rewrite@ ?+?( a, b )@\use{?+?}@
+a - b @\rewrite@ ?-?( a, b )@\use{?-?}@
+\end{lstlisting}
+
+\predefined
+\begin{lstlisting}
+int?+?( int, int ),
+	?-?( int, int );
+unsigned int?+?( unsigned int, unsigned int ),
+	?-?( unsigned int, unsigned int );
+long int?+?( long int, long int ),
+	?-?( long int, long int );
+long unsigned int?+?( long unsigned int, long unsigned int ),
+	?-?( long unsigned int, long unsigned int );
+long long int?+?( long long int, long long int ),
+	?-?( long long int, long long int );
+long long unsigned int ?+?( long long unsigned int, long long unsigned int ),
+	?-?( long long unsigned int, long long unsigned int );
+float?+?( float, float ),
+	?-?( float, float );
+double?+?( double, double ),
+	?-?( double, double );
+long double?+?( long double, long double ),
+	?-?( long double, long double );
+_Complex float?+?( _Complex float, float ),
+	?-?( _Complex float, float ),
+	?+?( float, _Complex float ),
+	?-?( float, _Complex float ),
+	?+?( _Complex float, _Complex float ),
+	?-?( _Complex float, _Complex float );
+_Complex double?+?( _Complex double, double ),
+	?-?( _Complex double, double ),
+	?+?( double, _Complex double ),
+	?-?( double, _Complex double ),
+	?+?( _Complex double, _Complex double ),
+	?-?( _Complex double, _Complex double );
+_Complex long double?+?( _Complex long double, long double ),
+	?-?( _Complex long double, long double ),
+	?+?( long double, _Complex long double ),
+	?-?( long double, _Complex long double ),
+	?+?( _Complex long double, _Complex long double ),
+	?-?( _Complex long double, _Complex long double );
+
+forall( type T ) T
+	* ?+?( T *, ptrdiff_t ),
+	* ?+?( ptrdiff_t, T * ),
+	* ?-?( T *, ptrdiff_t );
+
+forall( type T ) _Atomic T
+	* ?+?( _Atomic T *, ptrdiff_t ),
+	* ?+?( ptrdiff_t, _Atomic T * ),
+	* ?-?( _Atomic T *, ptrdiff_t );
+
+forall( type T ) const T
+	* ?+?( const T *, ptrdiff_t ),
+	* ?+?( ptrdiff_t, const T * ),
+	* ?-?( const T *, ptrdiff_t );
+
+forall( type T ) restrict T
+	* ?+?( restrict T *, ptrdiff_t ),
+	* ?+?( ptrdiff_t, restrict T * ),
+	* ?-?( restrict T *, ptrdiff_t );
+
+forall( type T ) volatile T
+	* ?+?( volatile T *, ptrdiff_t ),
+	* ?+?( ptrdiff_t, volatile T * ),
+	* ?-?( volatile T *, ptrdiff_t );
+
+forall( type T ) _Atomic const T
+	* ?+?( _Atomic const T *, ptrdiff_t ),
+	* ?+?( ptrdiff_t, _Atomic const T * ),
+	* ?-?( _Atomic const T *, ptrdiff_t );
+
+forall( type T ) _Atomic restrict T
+	* ?+?( _Atomic restrict T *, ptrdiff_t ),
+	* ?+?( ptrdiff_t, _Atomic restrict T * ),
+	* ?-?( _Atomic restrict T *, ptrdiff_t );
+
+forall( type T ) _Atomic volatile T
+	* ?+?( _Atomic volatile T *, ptrdiff_t ),
+	* ?+?( ptrdiff_t, _Atomic volatile T * ),
+	* ?-?( _Atomic volatile T *, ptrdiff_t );
+
+forall( type T ) const restrict T
+	* ?+?( const restrict T *, ptrdiff_t ),
+	* ?+?( ptrdiff_t, const restrict T * ),
+	* ?-?( const restrict T *, ptrdiff_t );
+
+forall( type T ) const volatile T
+	* ?+?( const volatile T *, ptrdiff_t ),
+	* ?+?( ptrdiff_t, const volatile T * ),
+	* ?-?( const volatile T *, ptrdiff_t );
+
+forall( type T ) restrict volatile T
+	* ?+?( restrict volatile T *, ptrdiff_t ),
+	* ?+?( ptrdiff_t, restrict volatile T * ),
+	* ?-?( restrict volatile T *, ptrdiff_t );
+
+forall( type T ) _Atomic const restrict T
+	* ?+?( _Atomic const restrict T *, ptrdiff_t ),
+	* ?+?( ptrdiff_t, _Atomic const restrict T * ),
+	* ?-?( _Atomic const restrict T *, ptrdiff_t );
+
+forall( type T ) ptrdiff_t
+	* ?-?( const restrict volatile T *, const restrict volatile T * ),
+	* ?-?( _Atomic const restrict volatile T *, _Atomic const restrict volatile T * );
+\end{lstlisting}
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
+rank of \lstinline$int$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+X ?+?( X ), ?-?( X );
+\end{lstlisting}
+
+\semantics
+The interpretations of additive expressions are the interpretations of the corresponding function
+calls.
+
+\begin{rationale}
+\lstinline$ptrdiff_t$ is an implementation-defined identifier defined in \lstinline$<stddef.h>$ that
+is synonymous with a signed integral type that is large enough to hold the difference between two
+pointers. It seems reasonable to use it for pointer addition as well. (This is technically a
+difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral}
+argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition.
+The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an
+argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an
+unsigned type.
+\end{rationale}
+
+
+\subsection{Bitwise shift operators}
+
+\begin{syntax}
+\lhs{shift-expression}
+\rhs \nonterm{additive-expression}
+\rhs \nonterm{shift-expression} \lstinline$<<$ \nonterm{additive-expression}
+\rhs \nonterm{shift-expression} \lstinline$>>$ \nonterm{additive-expression}
+\end{syntax}
+
+\rewriterules \use{?>>?}%use{?<<?}
+\begin{lstlisting}
+a << b @\rewrite@ ?<<?( a, b )
+a >> b @\rewrite@ ?>>?( a, b )
+\end{lstlisting}
+
+\predefined
+\begin{lstlisting}
+int ?<<?( int, int ),
+	 ?>>?( int, int );
+unsigned int ?<<?( unsigned int, int ),
+	 ?>>?( unsigned int, int );
+long int ?<<?( long int, int ),
+	 ?>>?( long int, int );
+long unsigned int ?<<?( long unsigned int, int ),
+	 ?>>?( long unsigned int, int );
+long long int ?<<?( long long int, int ),
+	 ?>>?( long long int, int );
+long long unsigned int ?<<?( long long unsigned int, int ),
+	 ?>>?( long long unsigned int, int);
+\end{lstlisting}
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
+rank of \lstinline$int$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+X ?<<?( X, int ), ?>>?( X, int );
+\end{lstlisting}
+
+\begin{rationale}
+The bitwise shift operators break the usual pattern: they do not convert both operands to a common
+type. The right operand only undergoes \Index{integer promotion}.
+\end{rationale}
+
+\semantics
+The interpretations of a bitwise shift expression are the interpretations of the corresponding
+function calls.
+
+
+\subsection{Relational operators}
+
+\begin{syntax}
+\lhs{relational-expression}
+\rhs \nonterm{shift-expression}
+\rhs \nonterm{relational-expression} \lstinline$< $ \nonterm{shift-expression}
+\rhs \nonterm{relational-expression} \lstinline$> $ \nonterm{shift-expression}
+\rhs \nonterm{relational-expression} \lstinline$<=$ \nonterm{shift-expression}
+\rhs \nonterm{relational-expression} \lstinline$>=$ \nonterm{shift-expression}
+\end{syntax}
+
+\rewriterules\use{?>?}\use{?>=?}%use{?<?}%use{?<=?}
+\begin{lstlisting}
+a < b @\rewrite@ ?<?( a, b )
+a > b @\rewrite@ ?>?( a, b )
+a <= b @\rewrite@ ?<=?( a, b )
+a >= b @\rewrite@ ?>=?( a, b )
+\end{lstlisting}
+
+\predefined
+\begin{lstlisting}
+int ?<?( int, int ),
+	?<=?( int, int ),
+	?>?( int, int ),
+	?>=?( int, int );
+int ?<?( unsigned int, unsigned int ),
+	?<=?( unsigned int, unsigned int ),
+	?>?( unsigned int, unsigned int ),
+	?>=?( unsigned int, unsigned int );
+int ?<?( long int, long int ),
+	?<=?( long int, long int ),
+	?>?( long int, long int ),
+	?>=?( long int, long int );
+int ?<?( long unsigned int, long unsigned ),
+	?<=?( long unsigned int, long unsigned ),
+	?>?( long unsigned int, long unsigned ),
+	?>=?( long unsigned int, long unsigned );
+int ?<?( long long int, long long int ),
+	?<=?( long long int, long long int ),
+	?>?( long long int, long long int ),
+	?>=?( long long int, long long int );
+int ?<?( long long unsigned int, long long unsigned ),
+	?<=?( long long unsigned int, long long unsigned ),
+	?>?( long long unsigned int, long long unsigned ),
+	?>=?( long long unsigned int, long long unsigned );
+int ?<?( float, float ),
+	?<=?( float, float ),
+	?>?( float, float ),
+	?>=?( float, float );
+int ?<?( double, double ),
+	?<=?( double, double ),
+	?>?( double, double ),
+	?>=?( double, double );
+int ?<?( long double, long double ),
+	?<=?( long double, long double ),
+	?>?( long double, long double ),
+	?>=?( long double, long double );
+
+forall( dtype DT ) int
+	?<?( const restrict volatile DT *, const restrict volatile DT * ),
+	?<?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ),
+	?<=?( const restrict volatile DT *, const restrict volatile DT * ),
+	?<=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ),
+	?>?( const restrict volatile DT *, const restrict volatile DT * ),
+	?>?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ),
+	?>=?( const restrict volatile DT *, const restrict volatile DT * ),
+	?>=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * );
+\end{lstlisting}
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
+rank of \lstinline$int$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+int ?<?( X, X ),
+	?<=?( X, X ),
+	?<?( X, X ),
+	?>=?( X, X );
+\end{lstlisting}
+
+\semantics
+The interpretations of a relational expression are the interpretations of the corresponding function
+call.
+
+
+\subsection{Equality operators}
+
+\begin{syntax}
+\lhs{equality-expression}
+\rhs \nonterm{relational-expression}
+\rhs \nonterm{equality-expression} \lstinline$==$ \nonterm{relational-expression}
+\rhs \nonterm{equality-expression} \lstinline$!=$ \nonterm{relational-expression}
+\end{syntax}
+
+\rewriterules
+\begin{lstlisting}
+a == b @\rewrite@ ?==?( a, b )@\use{?==?}@
+a != b @\rewrite@ ?!=?( a, b )@\use{?"!=?}@
+\end{lstlisting}
+
+\predefined
+\begin{lstlisting}
+int ?==?( int, int ),
+	?!=?( int, int ),
+	?==?( unsigned int, unsigned int ),
+	?!=?( unsigned int, unsigned int ),
+	?==?( long int, long int ),
+	?!=?( long int, long int ),
+	?==?( long unsigned int, long unsigned int ),
+	?!=?( long unsigned int, long unsigned int ),
+	?==?( long long int, long long int ),
+	?!=?( long long int, long long int ),
+	?==?( long long unsigned int, long long unsigned int ),
+	?!=?( long long unsigned int, long long unsigned int ),
+	?==?( float, float ),
+	?!=?( float, float ),
+	?==?( _Complex float, float ),
+	?!=?( _Complex float, float ),
+	?==?( float, _Complex float ),
+	?!=?( float, _Complex float ),
+	?==?( _Complex float, _Complex float ),
+	?!=?( _Complex float, _Complex float ),
+	?==?( double, double ),
+	?!=?( double, double ),
+	?==?( _Complex double, double ),
+	?!=?( _Complex double, double ),
+	?==?( double, _Complex double ),
+	?!=?( double, _Complex double ),
+	?==?( _Complex double, _Complex double ),
+	?!=?( _Complex double, _Complex double ),
+	?==?( long double, long double ),
+	?!=?( long double, long double ),
+	?==?( _Complex long double, long double ),
+	?!=?( _Complex long double, long double ),
+	?==?( long double, _Complex long double ),
+	?!=?( long double, _Complex long double ),
+	?==?( _Complex long double, _Complex long double ),
+	?!=?( _Complex long double, _Complex long double );
+
+forall( dtype DT ) int
+	?==?( const restrict volatile DT *, const restrict volatile DT * ),
+	?!=?( const restrict volatile DT *, const restrict volatile DT * ),
+	?==?( const restrict volatile DT *, const restrict volatile void * ),
+	?!=?( const restrict volatile DT *, const restrict volatile void * ),
+	?==?( const restrict volatile void *, const restrict volatile DT * ),
+	?!=?( const restrict volatile void *, const restrict volatile DT * ),
+	?==?( const restrict volatile DT *, forall( dtype DT2) const DT2 * ),
+	?!=?( const restrict volatile DT *, forall( dtype DT2) const DT2 * ),
+	?==?( forall( dtype DT2) const DT2*, const restrict volatile DT * ),
+	?!=?( forall( dtype DT2) const DT2*, const restrict volatile DT * ),
+	?==?( forall( dtype DT2) const DT2*, forall( dtype DT3) const DT3 * ),
+	?!=?( forall( dtype DT2) const DT2*, forall( dtype DT3) const DT3 * ),
+
+	?==?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ),
+	?!=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ),
+	?==?( _Atomic const restrict volatile DT *, const restrict volatile void * ),
+	?!=?( _Atomic const restrict volatile DT *, const restrict volatile void * ),
+	?==?( const restrict volatile void *, _Atomic const restrict volatile DT * ),
+	?!=?( const restrict volatile void *, _Atomic const restrict volatile DT * ),
+	?==?( _Atomic const restrict volatile DT *, forall( dtype DT2) const DT2 * ),
+	?!=?( _Atomic const restrict volatile DT *, forall( dtype DT2) const DT2 * ),
+	?==?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * ),
+	?!=?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * );
+
+forall( ftype FT ) int
+	?==?( FT *, FT * ),
+	?!=?( FT *, FT * ),
+	?==?( FT *, forall( ftype FT2) FT2 * ),
+	?!=?( FT *, forall( ftype FT2) FT2 * ),
+	?==?( forall( ftype FT2) FT2*, FT * ),
+	?!=?( forall( ftype FT2) FT2*, FT * ),
+	?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ),
+	?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * );
+\end{lstlisting}
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
+rank of \lstinline$int$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+int ?==?( X, X ),
+	?!=?( X, X );
+\end{lstlisting}
+
+\begin{rationale}
+The polymorphic equality operations come in three styles: comparisons between pointers of compatible
+types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and
+between the \Index{null pointer} constant and pointers to any type. In the last case, a special
+constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA
+type system.
+\end{rationale}
+
+\semantics
+The interpretations of an equality expression are the interpretations of the corresponding function
+call.
+
+\begin{sloppypar}
+The result of an equality comparison between two pointers to predefined functions or predefined
+values is implementation-defined.
+\end{sloppypar}
+\begin{rationale}
+The implementation-defined status of equality comparisons allows implementations to use one library
+routine to implement many predefined functions. These optimization are particularly important when
+the predefined functions are polymorphic, as is the case for most pointer operations
+\end{rationale}
+
+
+\subsection{Bitwise AND operator}
+
+\begin{syntax}
+\lhs{AND-expression}
+\rhs \nonterm{equality-expression}
+\rhs \nonterm{AND-expression} \lstinline$&$ \nonterm{equality-expression}
+\end{syntax}
+
+\rewriterules
+\begin{lstlisting}
+a & b @\rewrite@ ?&?( a, b )@\use{?&?}@
+\end{lstlisting}
+
+\predefined
+\begin{lstlisting}
+int ?&?( int, int );
+unsigned int ?&?( unsigned int, unsigned int );
+long int ?&?( long int, long int );
+long unsigned int ?&?( long unsigned int, long unsigned int );
+long long int ?&?( long long int, long long int );
+long long unsigned int ?&?( long long unsigned int, long long unsigned int );
+\end{lstlisting}
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
+rank of \lstinline$int$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+int ?&?( X, X );
+\end{lstlisting}
+
+\semantics
+The interpretations of a bitwise AND expression are the interpretations of the corresponding
+function call.
+
+
+\subsection{Bitwise exclusive OR operator}
+
+\begin{syntax}
+\lhs{exclusive-OR-expression}
+\rhs \nonterm{AND-expression}
+\rhs \nonterm{exclusive-OR-expression} \lstinline$^$ \nonterm{AND-expression}
+\end{syntax}
+
+\rewriterules
+\begin{lstlisting}
+a ^ b @\rewrite@ ?^?( a, b )@\use{?^?}@
+\end{lstlisting}
+
+\predefined
+\begin{lstlisting}
+int ?^?( int, int );
+unsigned int ?^?( unsigned int, unsigned int );
+long int ?^?( long int, long int );
+long unsigned int ?^?( long unsigned int, long unsigned int );
+long long int ?^?( long long int, long long int );
+long long unsigned int ?^?( long long unsigned int, long long unsigned int );
+\end{lstlisting}
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
+rank of \lstinline$int$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+int ?^?( X, X );
+\end{lstlisting}
+
+\semantics
+The interpretations of a bitwise exclusive OR expression are the interpretations of the
+corresponding function call.
+
+
+\subsection{Bitwise inclusive OR operator}
+
+\begin{syntax}
+\lhs{inclusive-OR-expression}
+\rhs \nonterm{exclusive-OR-expression}
+\rhs \nonterm{inclusive-OR-expression} \lstinline$|$ \nonterm{exclusive-OR-expression}
+\end{syntax}
+
+\rewriterules\use{?"|?}
+\begin{lstlisting}
+a | b @\rewrite@ ?|?( a, b )
+\end{lstlisting}
+
+\predefined
+\begin{lstlisting}
+int ?|?( int, int );
+unsigned int ?|?( unsigned int, unsigned int );
+long int ?|?( long int, long int );
+long unsigned int ?|?( long unsigned int, long unsigned int );
+long long int ?|?( long long int, long long int );
+long long unsigned int ?|?( long long unsigned int, long long unsigned int );
+\end{lstlisting}
+For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
+rank of \lstinline$int$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+int ?|?( X, X );
+\end{lstlisting}
+
+\semantics 
+The interpretations of a bitwise inclusive OR expression are the interpretations of the
+corresponding function call.
+
+
+\subsection{Logical AND operator}
+
+\begin{syntax}
+\lhs{logical-AND-expression}
+\rhs \nonterm{inclusive-OR-expression}
+\rhs \nonterm{logical-AND-expression} \lstinline$&&$ \nonterm{inclusive-OR-expression}
+\end{syntax}
+
+\semantics The operands of the expression ``\lstinline$a && b$'' are treated as
+``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be
+unambiguous. The expression has only one interpretation, which is of type \lstinline$int$.
+\begin{rationale}
+When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has
+not been redefined for those types, the compiler can optimize away the function calls.
+
+A common C idiom omits comparisons to \lstinline$0$ in the controlling expressions of loops and
+\lstinline$if$ statements. For instance, the loop below iterates as long as \lstinline$rp$ points
+at a \lstinline$Rational$ value that is non-zero.
+
+\begin{lstlisting}
+extern type Rational;@\use{Rational}@
+extern const Rational 0;@\use{0}@
+extern int ?!=?( Rational, Rational );
+Rational *rp;
+
+while ( rp && *rp ) { ... }
+\end{lstlisting}
+The logical expression calls the \lstinline$Rational$ inequality operator, passing
+it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result. In
+contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$
+conversion to \lstinline$*rp$ in the equivalent situation. The conversion to \lstinline$int$ would
+produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was
+not written with this situation in mind.
+\end{rationale}
+
+
+\subsection{Logical OR operator}
+
+\begin{syntax}
+\lhs{logical-OR-expression}
+\rhs \nonterm{logical-AND-expression}
+\rhs \nonterm{logical-OR-expression} \lstinline$||$ \nonterm{logical-AND-expression}
+\end{syntax}
+
+\semantics
+
+The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$''
+and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous. The expression has only one
+interpretation, which is of type \lstinline$int$.
+
+
+\subsection{Conditional operator}
+
+\begin{syntax}
+\lhs{conditional-expression}
+\rhs \nonterm{logical-OR-expression}
+\rhs \nonterm{logical-OR-expression} \lstinline$?$ \nonterm{expression}
+	 \lstinline$:$ \nonterm{conditional-expression}
+\end{syntax}
+
+\semantics
+In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and
+third operands both have an interpretation with \lstinline$void$ type, then the expression has an
+interpretation with type \lstinline$void$, equivalent to
+\begin{lstlisting}
+( int)(( a)!=0) ? ( void)( b) : ( void)( c)
+\end{lstlisting}
+
+If the second and third operands both have interpretations with non-\lstinline$void$ types, the
+expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'',
+with \lstinline$cond$ declared as
+\begin{lstlisting}
+forall( type T ) T cond( int, T, T );
+ 
+forall( dtype D ) void
+	* cond( int, D *, void * ),
+	* cond( int, void *, D * );
+	
+forall( dtype D ) _atomic void
+	* cond( int, _Atomic D *, _Atomic void * ),
+	* cond( int, _Atomic void *, _Atomic D * );
+
+forall( dtype D ) const void
+	* cond( int, const D *, const void * ),
+	* cond( int, const void *, const D * );
+
+forall( dtype D ) restrict void
+	* cond( int, restrict D *, restrict void * ),
+	* cond( int, restrict void *, restrict D * );
+
+forall( dtype D ) volatile void
+	* cond( int, volatile D *, volatile void * ),
+	* cond( int, volatile void *, volatile D * );
+
+forall( dtype D ) _Atomic const void
+	* cond( int, _Atomic const D *, _Atomic const void * ),
+	* cond( int, _Atomic const void *, _Atomic const D * );
+
+forall( dtype D ) _Atomic restrict void
+	* cond( int, _Atomic restrict D *, _Atomic restrict void * ),
+	* cond( int, _Atomic restrict void *, _Atomic restrict D * );
+
+forall( dtype D ) _Atomic volatile void
+	* cond( int, _Atomic volatile D *, _Atomic volatile void * ),
+	* cond( int, _Atomic volatile void *, _Atomic volatile D * );
+
+forall( dtype D ) const restrict void
+	* cond( int, const restrict D *, const restrict void * ),
+	* cond( int, const restrict void *, const restrict D * );
+
+forall( dtype D ) const volatile void
+	* cond( int, const volatile D *, const volatile void * ),
+	* cond( int, const volatile void *, const volatile D * );
+
+forall( dtype D ) restrict volatile void
+	* cond( int, restrict volatile D *, restrict volatile void * ),
+	* cond( int, restrict volatile void *, restrict volatile D * );
+
+forall( dtype D ) _Atomic const restrict void
+	* cond( int, _Atomic const restrict D *, _Atomic const restrict void * ),
+	* cond( int, _Atomic const restrict void *, _Atomic const restrict D * );
+
+forall( dtype D ) _Atomic const volatile void
+	* cond( int, _Atomic const volatile D *, _Atomic const volatile void * ),
+	* cond( int, _Atomic const volatile void *, _Atomic const volatile D * );
+
+forall( dtype D ) _Atomic restrict volatile void
+	* cond( int, _Atomic restrict volatile D *,
+	 _Atomic restrict volatile void * ),
+	* cond( int, _Atomic restrict volatile void *,
+	 _Atomic restrict volatile D * );
+
+forall( dtype D ) const restrict volatile void
+	* cond( int, const restrict volatile D *,
+	 const restrict volatile void * ),
+	* cond( int, const restrict volatile void *,
+	 const restrict volatile D * );
+
+forall( dtype D ) _Atomic const restrict volatile void
+	* cond( int, _Atomic const restrict volatile D *,
+	 _Atomic const restrict volatile void * ),
+	* cond( int, _Atomic const restrict volatile void *,
+	 _Atomic const restrict volatile D * );
+\end{lstlisting}
+
+\begin{rationale}
+The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and
+third operands have arithmetic type, and to combine the qualifiers of the second and third operands
+if they are pointers.
+\end{rationale}
+
+\examples
+\begin{lstlisting}
+#include <stdlib.h>
+int i;
+long l;
+rand() ? i : l;
+\end{lstlisting}
+The best interpretation infers the expression's type to be \lstinline$long$ and applies the safe
+\lstinline$int$-to-\lstinline$long$ conversion to \lstinline$i$.
+
+\begin{lstlisting}
+const int *cip;
+volatile int *vip;
+rand() ? cip : vip;
+\end{lstlisting}
+The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second
+and third operands to add \lstinline$volatile$ and \lstinline$const$ qualifiers, respectively.
+
+\begin{lstlisting}
+rand() ? cip : 0;
+\end{lstlisting}
+The expression has type \lstinline$const int *$, with a specialization conversion applied to
+\lstinline$0$.
+
+
+\subsection{Assignment operators}
+
+\begin{syntax}
+\lhs{assignment-expression}
+\rhs \nonterm{conditional-expression}
+\rhs \nonterm{unary-expression} \nonterm{assignment-operator}
+	 \nonterm{assignment-expression}
+\lhs{assignment-operator} one of
+\rhs \lstinline$=$\ \ \lstinline$*=$\ \ \lstinline$/=$\ \ \lstinline$%=$\ \ \lstinline$+=$\ \ \lstinline$-=$\ \  
+	 \lstinline$<<=$\ \ \lstinline$>>=$\ \ \lstinline$&=$\ \ \lstinline$^=$\ \ \lstinline$|=$
+\end{syntax}
+
+\rewriterules
+Let ``\(\leftarrow\)'' be any of the assignment operators. Then
+\use{?=?}\use{?*=?}\use{?/=?}\use{?%=?}\use{?+=?}\use{?-=?}
+\use{?>>=?}\use{?&=?}\use{?^=?}\use{?"|=?}%use{?<<=?}
+\begin{lstlisting}
+a @$\leftarrow$@ b @\rewrite@ ?@$\leftarrow$@?( &( a ), b )
+\end{lstlisting}
+
+\semantics
+Each interpretation of the left operand of an assignment expression is considered separately. For
+each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class
+specifier, the expression has one valid interpretation, with the type of the left operand. The
+right operand is cast to that type, and the assignment expression is ambiguous if either operand is.
+For the remaining interpretations, the expression is rewritten, and the interpretations of the
+assignment expression are the interpretations of the corresponding function call. Finally, all
+interpretations of the expression produced for the different interpretations of the left operand are
+combined to produce the interpretations of the expression as a whole; where interpretations have
+compatible result types, the best interpretations are selected in the manner described for function
+call expressions.
+
+
+\subsubsection{Simple assignment}
+
+\predefined
+\begin{lstlisting}
+_Bool
+	?=?( volatile _Bool *, _Bool ),
+	?=?( volatile _Bool *, forall( dtype D ) D * ),
+	?=?( volatile _Bool *, forall( ftype F ) F * ),
+	?=?( _Atomic volatile _Bool *, _Bool ),
+	?=?( _Atomic volatile _Bool *, forall( dtype D ) D * ),
+	?=?( _Atomic volatile _Bool *, forall( ftype F ) F * );
+char
+	?=?( volatile char *, char ),
+	?=?( _Atomic volatile char *, char );
+unsigned char
+	?=?( volatile unsigned char *, unsigned char ),
+	?=?( _Atomic volatile unsigned char *, unsigned char );
+signed char
+	?=?( volatile signed char *, signed char ),
+	?=?( _Atomic volatile signed char *, signed char );
+short int
+	?=?( volatile short int *, short int ),
+	?=?( _Atomic volatile short int *, short int );
+unsigned short
+	?=?( volatile unsigned int *, unsigned int ),
+	?=?( _Atomic volatile unsigned int *, unsigned int );
+int
+	?=?( volatile int *, int ),
+	?=?( _Atomic volatile int *, int );
+unsigned int
+	?=?( volatile unsigned int *, unsigned int ),
+	?=?( _Atomic volatile unsigned int *, unsigned int );
+long int
+	?=?( volatile long int *, long int ),
+	?=?( _Atomic volatile long int *, long int );
+unsigned long int
+	?=?( volatile unsigned long int *, unsigned long int ),
+	?=?( _Atomic volatile unsigned long int *, unsigned long int );
+long long int
+	?=?( volatile long long int *, long long int ),
+	?=?( _Atomic volatile long long int *, long long int );
+unsigned long long int
+	?=?( volatile unsigned long long int *, unsigned long long int ),
+	?=?( _Atomic volatile unsigned long long int *, unsigned long long int );
+float
+	?=?( volatile float *, float ),
+	?=?( _Atomic volatile float *, float );
+double
+	?=?( volatile double *, double ),
+	?=?( _Atomic volatile double *, double );
+long double
+	?=?( volatile long double *, long double ),
+	?=?( _Atomic volatile long double *, long double );
+_Complex float
+	?=?( volatile float *, float ),
+	?=?( _Atomic volatile float *, float );
+_Complex double
+	?=?( volatile double *, double ),
+	?=?( _Atomic volatile double *, double );
+_Complex long double
+	?=?( volatile _Complex long double *, _Complex long double ),
+	?=?( _Atomic volatile _Complex long double *, _Atomic _Complex long double );
+
+forall( ftype FT ) FT
+	* ?=?( FT * volatile *, FT * ),
+	* ?=?( FT * volatile *, forall( ftype F ) F * );
+
+forall( ftype FT ) FT const
+	* ?=?( FT const * volatile *, FT const * ),
+	* ?=?( FT const * volatile *, forall( ftype F ) F * );
+
+forall( ftype FT ) FT volatile
+	* ?=?( FT volatile * volatile *, FT * ),
+	* ?=?( FT volatile * volatile *, forall( ftype F ) F * );
+
+forall( ftype FT ) FT const
+	* ?=?( FT const volatile * volatile *, FT const * ),
+	* ?=?( FT const volatile * volatile *, forall( ftype F ) F * );
+
+forall( dtype DT ) DT
+	* ?=?( DT * restrict volatile *, DT * ),
+	* ?=?( DT * restrict volatile *, void * ),
+	* ?=?( DT * restrict volatile *, forall( dtype D ) D * ),
+	* ?=?( DT * _Atomic restrict volatile *, DT * ),
+	* ?=?( DT * _Atomic restrict volatile *, void * ),
+	* ?=?( DT * _Atomic restrict volatile *, forall( dtype D ) D * );
+
+forall( dtype DT ) DT _Atomic
+	* ?=?( _Atomic DT * restrict volatile *, DT _Atomic * ),
+	* ?=?( _Atomic DT * restrict volatile *, void * ),
+	* ?=?( _Atomic DT * restrict volatile *, forall( dtype D ) D * ),
+	* ?=?( _Atomic DT * _Atomic restrict volatile *, DT _Atomic * ),
+	* ?=?( _Atomic DT * _Atomic restrict volatile *, void * ),
+	* ?=?( _Atomic DT * _Atomic restrict volatile *, forall( dtype D ) D * );
+
+forall( dtype DT ) DT const
+	* ?=?( DT const * restrict volatile *, DT const * ),
+	* ?=?( DT const * restrict volatile *, void const * ),
+	* ?=?( DT const * restrict volatile *, forall( dtype D ) D * ),
+	* ?=?( DT const * _Atomic restrict volatile *, DT const * ),
+	* ?=?( DT const * _Atomic restrict volatile *, void const * ),
+	* ?=?( DT const * _Atomic restrict volatile *, forall( dtype D ) D * );
+
+forall( dtype DT ) DT restrict
+	* ?=?( restrict DT * restrict volatile *, DT restrict * ),
+	* ?=?( restrict DT * restrict volatile *, void * ),
+	* ?=?( restrict DT * restrict volatile *, forall( dtype D ) D * ),
+	* ?=?( restrict DT * _Atomic restrict volatile *, DT restrict * ),
+	* ?=?( restrict DT * _Atomic restrict volatile *, void * ),
+	* ?=?( restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * );
+
+forall( dtype DT ) DT volatile
+	* ?=?( DT volatile * restrict volatile *, DT volatile * ),
+	* ?=?( DT volatile * restrict volatile *, void volatile * ),
+	* ?=?( DT volatile * restrict volatile *, forall( dtype D ) D * ),
+	* ?=?( DT volatile * _Atomic restrict volatile *, DT volatile * ),
+	* ?=?( DT volatile * _Atomic restrict volatile *, void volatile * ),
+	* ?=?( DT volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
+
+forall( dtype DT ) DT _Atomic const
+	* ?=?( DT _Atomic const * restrict volatile *, DT _Atomic const * ),
+	* ?=?( DT _Atomic const * restrict volatile *, void const * ),
+	* ?=?( DT _Atomic const * restrict volatile *, forall( dtype D ) D * ),
+	* ?=?( DT _Atomic const * _Atomic restrict volatile *, DT _Atomic const * ),
+	* ?=?( DT _Atomic const * _Atomic restrict volatile *, void const * ),
+	* ?=?( DT _Atomic const * _Atomic restrict volatile *, forall( dtype D ) D * );
+
+forall( dtype DT ) DT _Atomic restrict
+	* ?=?( _Atomic restrict DT * restrict volatile *, DT _Atomic restrict * ),
+	* ?=?( _Atomic restrict DT * restrict volatile *, void * ),
+	* ?=?( _Atomic restrict DT * restrict volatile *, forall( dtype D ) D * ),
+	* ?=?( _Atomic restrict DT * _Atomic restrict volatile *, DT _Atomic restrict * ),
+	* ?=?( _Atomic restrict DT * _Atomic restrict volatile *, void * ),
+	* ?=?( _Atomic restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * );
+
+forall( dtype DT ) DT _Atomic volatile
+	* ?=?( DT _Atomic volatile * restrict volatile *, DT _Atomic volatile * ),
+	* ?=?( DT _Atomic volatile * restrict volatile *, void volatile * ),
+	* ?=?( DT _Atomic volatile * restrict volatile *, forall( dtype D ) D * ),
+	* ?=?( DT _Atomic volatile * _Atomic restrict volatile *, DT _Atomic volatile * ),
+	* ?=?( DT _Atomic volatile * _Atomic restrict volatile *, void volatile * ),
+	* ?=?( DT _Atomic volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
+
+forall( dtype DT ) DT const restrict
+	* ?=?( DT const restrict * restrict volatile *, DT const restrict * ),
+	* ?=?( DT const restrict * restrict volatile *, void const * ),
+	* ?=?( DT const restrict * restrict volatile *, forall( dtype D ) D * ),
+	* ?=?( DT const restrict * _Atomic restrict volatile *, DT const restrict * ),
+	* ?=?( DT const restrict * _Atomic restrict volatile *, void const * ),
+	* ?=?( DT const restrict * _Atomic restrict volatile *, forall( dtype D ) D * );
+
+forall( dtype DT ) DT const volatile
+	* ?=?( DT const volatile * restrict volatile *, DT const volatile * ),
+	* ?=?( DT const volatile * restrict volatile *, void const volatile * ),
+	* ?=?( DT const volatile * restrict volatile *, forall( dtype D ) D * ),
+	* ?=?( DT const volatile * _Atomic restrict volatile *, DT const volatile * ),
+	* ?=?( DT const volatile * _Atomic restrict volatile *, void const volatile * ),
+	* ?=?( DT const volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
+
+forall( dtype DT ) DT restrict volatile
+	* ?=?( DT restrict volatile * restrict volatile *, DT restrict volatile * ),
+	* ?=?( DT restrict volatile * restrict volatile *, void volatile * ),
+	* ?=?( DT restrict volatile * restrict volatile *, forall( dtype D ) D * ),
+	* ?=?( DT restrict volatile * _Atomic restrict volatile *, DT restrict volatile * ),
+	* ?=?( DT restrict volatile * _Atomic restrict volatile *, void volatile * ),
+	* ?=?( DT restrict volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
+
+forall( dtype DT ) DT _Atomic const restrict
+	* ?=?( DT _Atomic const restrict * restrict volatile *,
+	 DT _Atomic const restrict * ),
+	* ?=?( DT _Atomic const restrict * restrict volatile *,
+	 void const * ),
+	* ?=?( DT _Atomic const restrict * restrict volatile *,
+	 forall( dtype D ) D * ),
+	* ?=?( DT _Atomic const restrict * _Atomic restrict volatile *,
+	 DT _Atomic const restrict * ),
+	* ?=?( DT _Atomic const restrict * _Atomic restrict volatile *,
+	 void const * ),
+	* ?=?( DT _Atomic const restrict * _Atomic restrict volatile *,
+	 forall( dtype D ) D * );
+
+forall( dtype DT ) DT _Atomic const volatile
+	* ?=?( DT _Atomic const volatile * restrict volatile *,
+	 DT _Atomic const volatile * ),
+	* ?=?( DT _Atomic const volatile * restrict volatile *,
+	 void const volatile * ),
+	* ?=?( DT _Atomic const volatile * restrict volatile *,
+	 forall( dtype D ) D * ),
+	* ?=?( DT _Atomic const volatile * _Atomic restrict volatile *,
+	 DT _Atomic const volatile * ),
+	* ?=?( DT _Atomic const volatile * _Atomic restrict volatile *,
+	 void const volatile * ),
+	* ?=?( DT _Atomic const volatile * _Atomic restrict volatile *,
+	 forall( dtype D ) D * );
+
+forall( dtype DT ) DT _Atomic restrict volatile
+	* ?=?( DT _Atomic restrict volatile * restrict volatile *,
+	 DT _Atomic restrict volatile * ),
+	* ?=?( DT _Atomic restrict volatile * restrict volatile *,
+	 void volatile * ),
+	* ?=?( DT _Atomic restrict volatile * restrict volatile *,
+	 forall( dtype D ) D * ),
+	* ?=?( DT _Atomic restrict volatile * _Atomic restrict volatile *,
+	 DT _Atomic restrict volatile * ),
+	* ?=?( DT _Atomic restrict volatile * _Atomic restrict volatile *,
+	 void volatile * ),
+	* ?=?( DT _Atomic restrict volatile * _Atomic restrict volatile *,
+	 forall( dtype D ) D * );
+
+forall( dtype DT ) DT const restrict volatile
+	* ?=?( DT const restrict volatile * restrict volatile *,
+	 DT const restrict volatile * ),
+	* ?=?( DT const restrict volatile * restrict volatile *,
+	 void const volatile * ),
+	* ?=?( DT const restrict volatile * restrict volatile *,
+	 forall( dtype D ) D * ),
+	* ?=?( DT const restrict volatile * _Atomic restrict volatile *,
+	 DT const restrict volatile * ),
+	* ?=?( DT const restrict volatile * _Atomic restrict volatile *,
+	 void const volatile * ),
+	* ?=?( DT const restrict volatile * _Atomic restrict volatile *,
+	 forall( dtype D ) D * );
+
+forall( dtype DT ) DT _Atomic const restrict volatile
+	* ?=?( DT _Atomic const restrict volatile * restrict volatile *,
+	 DT _Atomic const restrict volatile * ),
+	* ?=?( DT _Atomic const restrict volatile * restrict volatile *,
+	 void const volatile * ),
+	* ?=?( DT _Atomic const restrict volatile * restrict volatile *,
+	 forall( dtype D ) D * ),
+	* ?=?( DT _Atomic const restrict volatile * _Atomic restrict volatile *,
+	 DT _Atomic const restrict volatile * ),
+	* ?=?( DT _Atomic const restrict volatile * _Atomic restrict volatile *,
+	 void const volatile * ),
+	* ?=?( DT _Atomic const restrict volatile * _Atomic restrict volatile *,
+	 forall( dtype D ) D * );
+
+forall( dtype DT ) void
+	* ?=?( void * restrict volatile *, DT * );
+
+forall( dtype DT ) void const
+	* ?=?( void const * restrict volatile *, DT const * );
+
+forall( dtype DT ) void volatile
+	* ?=?( void volatile * restrict volatile *, DT volatile * );
+
+forall( dtype DT ) void const volatile
+	* ?=?( void const volatile * restrict volatile *, DT const volatile * );
+\end{lstlisting}
+\begin{rationale}
+The pattern of overloadings for simple assignment resembles that of pointer increment and decrement,
+except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter,
+instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete
+type.
+\end{rationale}
+
+For every complete structure or union type \lstinline$S$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+S ?=?( S volatile *, S ), ?=?( S _Atomic volatile *, S );
+\end{lstlisting}
+
+For every extended integer type \lstinline$X$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+X ?=?( X volatile *, X ), ?=?( X _Atomic volatile *, X );
+\end{lstlisting}
+
+For every complete enumerated type \lstinline$E$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+E ?=?( E volatile *, int ), ?=?( E _Atomic volatile *, int );
+\end{lstlisting}
+\begin{rationale}
+The right-hand argument is \lstinline$int$ because enumeration constants have type \lstinline$int$.
+\end{rationale}
+
+\semantics
+The structure assignment functions provide member-wise assignment; each non-array member and each
+element of each array member of the right argument is assigned to the corresponding member or
+element of the left argument using the assignment function defined for its type. All other
+assignment functions have the same effect as the corresponding C assignment expression.
+\begin{rationale}
+Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that
+is, bitwise copy---even if some of the union members have programmer-defined assignment functions.
+\end{rationale}
+
+
+\subsubsection{Compound assignment}
+
+\predefined
+\begin{lstlisting}
+forall( type T ) T
+	* ?+=?( T * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T _Atomic
+	* ?+=?( T _Atomic * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T const
+	* ?+=?( T const * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T const * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T const * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T const * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T restrict
+	* ?+=?( T restrict * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T restrict * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T restrict * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T restrict * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T volatile
+	* ?+=?( T volatile * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T volatile * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T volatile * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T volatile * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T _Atomic const
+	* ?+=?( T _Atomic const restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic const restrict volatile *, ptrdiff_t ),
+	* ?+=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T _Atomic restrict
+	* ?+=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T _Atomic volatile
+	* ?+=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T const restrict
+	* ?+=?( T const restrict * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T const restrict * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T const volatile
+	* ?+=?( T const volatile * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T const volatile * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T restrict volatile
+	* ?+=?( T restrict volatile * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T restrict volatile * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T _Atomic const restrict
+	* ?+=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T _Atomic const volatile
+	* ?+=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T _Atomic restrict volatile
+	* ?+=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T const restrict volatile
+	* ?+=?( T const restrict volatile * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T const restrict volatile * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
+
+forall( type T ) T _Atomic const restrict volatile
+	* ?+=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ),
+	* ?+=?( T _Atomic const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
+	* ?-=?( T _Atomic const restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
+
+_Bool
+	?*=?( _Bool volatile *, _Bool ),
+	?/=?( _Bool volatile *, _Bool ),
+	?+=?( _Bool volatile *, _Bool ),
+	?-=?( _Bool volatile *, _Bool ),
+	?%=?( _Bool volatile *, _Bool ),
+	?<<=?( _Bool volatile *, int ),
+	?>>=?( _Bool volatile *, int ),
+	?&=?( _Bool volatile *, _Bool ),
+	?^=?( _Bool volatile *, _Bool ),
+	?|=?( _Bool volatile *, _Bool );
+char
+	?*=?( char volatile *, char ),
+	?/=?( char volatile *, char ),
+	?+=?( char volatile *, char ),
+	?-=?( char volatile *, char ),
+	?%=?( char volatile *, char ),
+	?<<=?( char volatile *, int ),
+	?>>=?( char volatile *, int ),
+	?&=?( char volatile *, char ),
+	?^=?( char volatile *, char ),
+	?|=?( char volatile *, char );
+unsigned char
+	?*=?( unsigned char volatile *, unsigned char ),
+	?/=?( unsigned char volatile *, unsigned char ),
+	?+=?( unsigned char volatile *, unsigned char ),
+	?-=?( unsigned char volatile *, unsigned char ),
+	?%=?( unsigned char volatile *, unsigned char ),
+	?<<=?( unsigned char volatile *, int ),
+	?>>=?( unsigned char volatile *, int ),
+	?&=?( unsigned char volatile *, unsigned char ),
+	?^=?( unsigned char volatile *, unsigned char ),
+	?|=?( unsigned char volatile *, unsigned char );
+signed char
+	?*=?( signed char volatile *, signed char ),
+	?/=?( signed char volatile *, signed char ),
+	?+=?( signed char volatile *, signed char ),
+	?-=?( signed char volatile *, signed char ),
+	?%=?( signed char volatile *, signed char ),
+	?<<=?( signed char volatile *, int ),
+	?>>=?( signed char volatile *, int ),
+	?&=?( signed char volatile *, signed char ),
+	?^=?( signed char volatile *, signed char ),
+	?|=?( signed char volatile *, signed char );
+short int
+	?*=?( short int volatile *, short int ),
+	?/=?( short int volatile *, short int ),
+	?+=?( short int volatile *, short int ),
+	?-=?( short int volatile *, short int ),
+	?%=?( short int volatile *, short int ),
+	?<<=?( short int volatile *, int ),
+	?>>=?( short int volatile *, int ),
+	?&=?( short int volatile *, short int ),
+	?^=?( short int volatile *, short int ),
+	?|=?( short int volatile *, short int );
+unsigned short int
+	?*=?( unsigned short int volatile *, unsigned short int ),
+	?/=?( unsigned short int volatile *, unsigned short int ),
+	?+=?( unsigned short int volatile *, unsigned short int ),
+	?-=?( unsigned short int volatile *, unsigned short int ),
+	?%=?( unsigned short int volatile *, unsigned short int ),
+	?<<=?( unsigned short int volatile *, int ),
+	?>>=?( unsigned short int volatile *, int ),
+	?&=?( unsigned short int volatile *, unsigned short int ),
+	?^=?( unsigned short int volatile *, unsigned short int ),
+	?|=?( unsigned short int volatile *, unsigned short int );
+int
+	?*=?( int volatile *, int ),
+	?/=?( int volatile *, int ),
+	?+=?( int volatile *, int ),
+	?-=?( int volatile *, int ),
+	?%=?( int volatile *, int ),
+	?<<=?( int volatile *, int ),
+	?>>=?( int volatile *, int ),
+	?&=?( int volatile *, int ),
+	?^=?( int volatile *, int ),
+	?|=?( int volatile *, int );
+unsigned int
+	?*=?( unsigned int volatile *, unsigned int ),
+	?/=?( unsigned int volatile *, unsigned int ),
+	?+=?( unsigned int volatile *, unsigned int ),
+	?-=?( unsigned int volatile *, unsigned int ),
+	?%=?( unsigned int volatile *, unsigned int ),
+	?<<=?( unsigned int volatile *, int ),
+	?>>=?( unsigned int volatile *, int ),
+	?&=?( unsigned int volatile *, unsigned int ),
+	?^=?( unsigned int volatile *, unsigned int ),
+	?|=?( unsigned int volatile *, unsigned int );
+long int
+	?*=?( long int volatile *, long int ),
+	?/=?( long int volatile *, long int ),
+	?+=?( long int volatile *, long int ),
+	?-=?( long int volatile *, long int ),
+	?%=?( long int volatile *, long int ),
+	?<<=?( long int volatile *, int ),
+	?>>=?( long int volatile *, int ),
+	?&=?( long int volatile *, long int ),
+	?^=?( long int volatile *, long int ),
+	?|=?( long int volatile *, long int );
+unsigned long int
+	?*=?( unsigned long int volatile *, unsigned long int ),
+	?/=?( unsigned long int volatile *, unsigned long int ),
+	?+=?( unsigned long int volatile *, unsigned long int ),
+	?-=?( unsigned long int volatile *, unsigned long int ),
+	?%=?( unsigned long int volatile *, unsigned long int ),
+	?<<=?( unsigned long int volatile *, int ),
+	?>>=?( unsigned long int volatile *, int ),
+	?&=?( unsigned long int volatile *, unsigned long int ),
+	?^=?( unsigned long int volatile *, unsigned long int ),
+	?|=?( unsigned long int volatile *, unsigned long int );
+long long int
+	?*=?( long long int volatile *, long long int ),
+	?/=?( long long int volatile *, long long int ),
+	?+=?( long long int volatile *, long long int ),
+	?-=?( long long int volatile *, long long int ),
+	?%=?( long long int volatile *, long long int ),
+	?<<=?( long long int volatile *, int ),
+	?>>=?( long long int volatile *, int ),
+	?&=?( long long int volatile *, long long int ),
+	?^=?( long long int volatile *, long long int ),
+	?|=?( long long int volatile *, long long int );
+unsigned long long int
+	?*=?( unsigned long long int volatile *, unsigned long long int ),
+	?/=?( unsigned long long int volatile *, unsigned long long int ),
+	?+=?( unsigned long long int volatile *, unsigned long long int ),
+	?-=?( unsigned long long int volatile *, unsigned long long int ),
+	?%=?( unsigned long long int volatile *, unsigned long long int ),
+	?<<=?( unsigned long long int volatile *, int ),
+	?>>=?( unsigned long long int volatile *, int ),
+	?&=?( unsigned long long int volatile *, unsigned long long int ),
+	?^=?( unsigned long long int volatile *, unsigned long long int ),
+	?|=?( unsigned long long int volatile *, unsigned long long int );
+float
+	?*=?( float volatile *, float ),
+	?/=?( float volatile *, float ),
+	?+=?( float volatile *, float ),
+	?-=?( float volatile *, float );
+double
+	?*=?( double volatile *, double ),
+	?/=?( double volatile *, double ),
+	?+=?( double volatile *, double ),
+	?-=?( double volatile *, double );
+long double
+	?*=?( long double volatile *, long double ),
+	?/=?( long double volatile *, long double ),
+	?+=?( long double volatile *, long double ),
+	?-=?( long double volatile *, long double );
+_Complex float
+	?*=?( _Complex float volatile *, _Complex float ),
+	?/=?( _Complex float volatile *, _Complex float ),
+	?+=?( _Complex float volatile *, _Complex float ),
+	?-=?( _Complex float volatile *, _Complex float );
+_Complex double
+	?*=?( _Complex double volatile *, _Complex double ),
+	?/=?( _Complex double volatile *, _Complex double ),
+	?+=?( _Complex double volatile *, _Complex double ),
+	?-=?( _Complex double volatile *, _Complex double );
+_Complex long double
+	?*=?( _Complex long double volatile *, _Complex long double ),
+	?/=?( _Complex long double volatile *, _Complex long double ),
+	?+=?( _Complex long double volatile *, _Complex long double ),
+	?-=?( _Complex long double volatile *, _Complex long double );
+\end{lstlisting}
+
+For every extended integer type \lstinline$X$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+?*=?( X volatile *, X ),
+?/=?( X volatile *, X ),
+?+=?( X volatile *, X ),
+?-=?( X volatile *, X ),
+?%=?( X volatile *, X ),
+?<<=?( X volatile *, int ),
+?>>=?( X volatile *, int ),
+?&=?( X volatile *, X ),
+?^=?( X volatile *, X ),
+?|=?( X volatile *, X );
+\end{lstlisting}
+
+For every complete enumerated type \lstinline$E$ there exist
+% Don't use predefined: keep this out of prelude.cf.
+\begin{lstlisting}
+?*=?( E volatile *, E ),
+?/=?( E volatile *, E ),
+?+=?( E volatile *, E ),
+?-=?( E volatile *, E ),
+?%=?( E volatile *, E ),
+?<<=?( E volatile *, int ),
+?>>=?( E volatile *, int ),
+?&=?( E volatile *, E ),
+?^=?( E volatile *, E ),
+?|=?( E volatile *, E );
+\end{lstlisting}
+
+
+\subsection{Comma operator}
+
+\begin{syntax}
+\lhs{expression}
+\rhs \nonterm{assignment-expression}
+\rhs \nonterm{expression} \lstinline$,$ \nonterm{assignment-expression}
+\end{syntax}
+
+\semantics
+In the comma expression ``\lstinline$a, b$'', the first operand is interpreted as
+``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}. The
+interpretations of the expression are the interpretations of the second operand.
+
+
+\section{Constant expressions}
+
+
+\section{Declarations}
+
+\begin{syntax}
+\oldlhs{declaration}
+\rhs \nonterm{type-declaration}
+\rhs \nonterm{spec-definition}
+\end{syntax}
+
+\constraints
+If an identifier has \Index{no linkage}, there shall be no more than one declaration of the
+identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the
+same name space, except that:
+\begin{itemize}
+\item
+a typedef name may be redefined to denote the same type as it currently does, provided that type is
+not a variably modified type;
+\item
+tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard.
+\end{itemize}
+\begin{rationale}
+This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow
+overloading.
+\end{rationale}
+
+An identifier declared by a type declaration shall not be redeclared as a parameter in a function
+definition whose declarator includes an identifier list.
+\begin{rationale}
+This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters. This
+avoids an ambiguity between old-style function declarations and new-style function prototypes:
+\begin{lstlisting}
+void f( Complex,	// ... 3000 characters ...
+void g( Complex,	// ... 3000 characters ...
+int Complex; { ... }
+\end{lstlisting}
+Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the
+second.
+\end{rationale}
+
+
+\setcounter{subsection}{1}
+\subsection{Type specifiers}
+
+\begin{syntax}
+\oldlhs{type-specifier}
+\rhs \nonterm{forall-specifier}
+\end{syntax}
+
+\semantics
+Forall specifiers are discussed in \VRef{forall}.
+
+
+\subsubsection{Structure and union specifiers}
+
+\semantics 
+\CFA extends the {\c11} definition of \define{anonymous structure} to include structure
+specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union
+specifiers with tags.
+\begin{rationale}
+This extension imitates an extension in the Plan 9 C compiler \cite{Thompson90new}.
+\end{rationale}
+
+\examples
+\begin{lstlisting}
+struct point {@\impl{point}@
+	int x, y;
+};
+struct color_point {@\impl{color_point}@
+	enum { RED, BLUE, GREEN } color;
+	struct point;
+};
+struct color_point cp;
+cp.x = 0;
+cp.color = RED;
+
+struct literal {@\impl{literal}@
+	enum { NUMBER, STRING } tag;
+	union {
+	 double n;
+	 char *s;
+	};
+};
+struct literal *next;
+int length;
+extern int strlen( const char * );
+...
+if ( next->tag == STRING ) length = strlen( next->s );
+\end{lstlisting}
+
+
+\setcounter{subsubsection}{4}
+\subsubsection{Forall specifiers}
+\label{forall}
+
+\begin{syntax}
+\lhs{forall-specifier}
+\rhs \lstinline$forall$ \lstinline$($ \nonterm{type-parameter-list} \lstinline$)$
+\end{syntax}
+
+\begin{comment}
+\constraints
+If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier}
+declares a structure or union tag, the types of the members of the structure or union shall not use
+any of the type identifiers declared by the \nonterm{type-parameter-list}.
+\begin{rationale}
+This sort of declaration is illegal because the scope of the type identifiers ends at the end of the
+declaration, but the scope of the structure tag does not.
+\begin{lstlisting}
+forall( type T ) struct Pair { T a, b; } mkPair( T, T ); // illegal 
+\end{lstlisting}
+If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the
+members' type be?
+\end{rationale}
+\end{comment}
+
+\semantics
+The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type
+identifiers, function and object identifiers with \Index{no linkage}.
+
+If, in the declaration ``\lstinline$T D$'', \lstinline$T$ contains \nonterm{forall-specifier}s and
+\lstinline$D$ has the form
+\begin{lstlisting}
+D( @\normalsize\nonterm{parameter-type-list}@ )
+\end{lstlisting}
+then a type identifier declared by one of the \nonterm{forall-specifier}s is an \define{inferred
+parameter} of the function declarator if and only if it is not an inferred parameter of a function
+declarator in \lstinline$D$, and it is used in the type of a parameter in the following
+\nonterm{type-parameter-list} or it and an inferred parameter are used as arguments of a
+\Index{specification} in one of the \nonterm{forall-specifier}s. The identifiers declared by
+assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s
+of that function declarator.
+
+\begin{comment}
+\begin{rationale}
+Since every inferred parameter is used by some parameter, inference can be understood as a single
+bottom-up pass over the expression tree, that only needs to apply local reasoning at each node.
+
+If this restriction were lifted, it would be possible to write
+\begin{lstlisting}
+forall( type T ) T * alloc( void );@\use{alloc}@
+int *p = alloc();
+\end{lstlisting}
+Here \lstinline$alloc()$ would receive \lstinline$int$ as an inferred argument, and return an
+\lstinline$int *$. In general, if a call to \lstinline$alloc()$ is a subexpression of an expression
+involving polymorphic functions and overloaded identifiers, there could be considerable distance
+between the call and the subexpression that causes \lstinline$T$ to be bound.
+
+With the current restriction, \lstinline$alloc()$ must be given an argument that determines
+\lstinline$T$:
+\begin{lstlisting}
+forall( type T ) T * alloc( T initial_value );@\use{alloc}@
+\end{lstlisting}
+\end{rationale}
+\end{comment}
+
+If a function declarator is part of a function definition, its inferred parameters and assertion
+parameters have \Index{block scope}; otherwise, identifiers declared by assertions have a
+\define{declaration scope}, which terminates at the end of the \nonterm{declaration}.
+
+A function type that has at least one inferred parameter is a \define{polymorphic function} type.
+Function types with no inferred parameters are \define{monomorphic function} types. One function
+type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the
+same number of inferred parameters and fewer of its explicit parameters have types that depend on an
+inferred parameter.
+
+The names of inferred parameters and the order of identifiers in forall specifiers are not relevant
+to polymorphic function type compatibility. Let $f$ and $g$ be two polymorphic function types with
+the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$
+and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s. Let $f'$
+be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$. Then $f$ and $g$ are
+\Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if
+for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same
+identifier and compatible type, and vice versa.
+
+\examples
+Consider these analogous monomorphic and polymorphic declarations.
+\begin{lstlisting}
+int fi( int );
+forall( type T ) T fT( T );
+\end{lstlisting}
+\lstinline$fi()$ takes an \lstinline$int$ and returns an \lstinline$int$. \lstinline$fT()$ takes a
+\lstinline$T$ and returns a \lstinline$T$, for any type \lstinline$T$.
+\begin{lstlisting}
+int (*pfi )( int ) = fi;
+forall( type T ) T (*pfT )( T ) = fT;
+\end{lstlisting}
+\lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not
+polymorphic, but the function it points at is.
+\begin{lstlisting}
+int (*fvpfi( void ))( int ) {
+	return pfi;
+}
+forall( type T ) T (*fvpfT( void ))( T ) {
+	return pfT;
+}
+\end{lstlisting}
+\lstinline$fvpfi()$ and \lstinline$fvpfT()$ are functions taking no arguments and returning pointers
+to functions. \lstinline$fvpfT()$ is monomorphic, but the function that its return value points
+at is polymorphic.
+\begin{lstlisting}
+forall( type T ) int ( *fTpfi( T ) )( int );
+forall( type T ) T ( *fTpfT( T ) )( T );
+forall( type T, type U ) U ( *fTpfU( T ) )( U );
+\end{lstlisting}
+\lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function
+taking an integer and returning an integer. It could return \lstinline$pfi$. \lstinline$fTpfT()$
+is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning
+\lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$. For instance,
+in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and
+the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and
+``\lstinline$fTpfT("yes")("no")$'' are legal, but ``\lstinline$fTpfT(17)("no")$'' is illegal.
+\lstinline$fTpfU()$ is polymorphic ( in type \lstinline$T$), and returns a pointer to a function that
+is polymorphic ( in type \lstinline$U$). ``\lstinline$f5(17)("no")$'' is a legal expression of type
+\lstinline$char *$.
+\begin{lstlisting}
+forall( type T, type U, type V ) U * f( T *, U, V * const );
+forall( type U, type V, type W ) U * g( V *, U, W * const );
+\end{lstlisting}
+The functions \lstinline$f()$ and \lstinline$g()$ have compatible types. Let \(f\) and \(g\) be
+their types; then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\)
+= \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$. Replacing every \(f_i\)
+by \(g_i\) in \(f\) gives
+\begin{lstlisting}
+forall( type V, type U, type W ) U * f( V *, U, W * const );
+\end{lstlisting}
+which has a return type and parameter list that is compatible with \(g\).
+\begin{rationale}
+The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave
+room for inferred parameters of ordinary types in case parameterized types get added one day.
+
+Even without parameterized types, I might try to allow
+\begin{lstlisting}
+forall( int n ) int sum( int vector[n] );
+\end{lstlisting}
+but C currently rewrites array parameters as pointer parameters, so the effects of such a change
+require more thought.
+\end{rationale}
+
+\begin{rationale}
+A polymorphic declaration must do two things: it must introduce type parameters, and it must apply
+assertions to those types. Adding this to existing C declaration syntax and semantics was delicate,
+and not entirely successful.
+
+C depends on declaration-before-use, so a forall specifier must introduce type names before they can
+be used in the declaration specifiers. This could be done by making the forall specifier part of
+the declaration specifiers, or by making it a new introductory clause of declarations.
+
+Assertions are also part of polymorphic function types, because it must be clear which functions
+have access to the assertion parameters declared by the assertions. All attempts to put assertions
+inside an introductory clause produced complex semantics and confusing code. Building them into the
+declaration specifiers could be done by placing them in the function's parameter list, or in a
+forall specifier that is a declaration specifier. Assertions are also used with type parameters of
+specifications, and by type declarations. For consistency's sake it seems best to attach assertions
+to the type declarations in forall specifiers, which means that forall specifiers must be
+declaration specifiers.
+\end{rationale}
+%HERE
+
+
+\subsection{Type qualifiers}
+
+\CFA defines a new type qualifier \lstinline$lvalue$\impl{lvalue}\index{lvalue}.
+\begin{syntax}
+\oldlhs{type-qualifier}
+\rhs \lstinline$lvalue$
+\end{syntax}
+
+\constraints
+\lstinline$restrict$\index{register@{\lstinline$restrict$}} Types other than type parameters and
+pointer types whose referenced type is an object type shall not be restrict-qualified.
+
+\semantics
+An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not
+establish any special semantics in that case.
+
+\begin{rationale}
+\CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be
+passed to polymorphic functions.
+\end{rationale}
+
+\lstinline$lvalue$ may be used to qualify the return type of a function type. Let \lstinline$T$ be
+an unqualified version of a type; then the result of calling a function with return type
+\lstinline$lvalue T$ is a \Index{modifiable lvalue} of type \lstinline$T$.
+\lstinline$const$\use{const} and \lstinline$volatile$\use{volatile} qualifiers may also be added to
+indicate that the function result is a constant or volatile lvalue.
+\begin{rationale}
+The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the
+return type of a function if the \lstinline$lvalue$ qualifier is also used.
+\end{rationale}
+
+An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue; the
+result of the expression is an lvalue.
+
+\begin{rationale}
+\lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to
+object of type \lstinline$T$) type. Reference types have four uses in {\CC}.
+\begin{itemize}
+\item
+They are necessary for user-defined operators that return lvalues, such as ``subscript'' and
+``dereference''.
+
+\item
+A reference can be used to define an alias for a complicated lvalue expression, as a way of getting
+some of the functionality of the Pascal \lstinline$with$ statement. The following {\CC} code gives
+an example.
+\begin{lstlisting}
+{
+	char &code = long_name.some_field[i].data->code;
+	code = toupper( code );
+}
+\end{lstlisting}
+This is not very useful.
+
+\item
+A reference parameter can be used to allow a function to modify an argument without forcing the
+caller to pass the address of the argument. This is most useful for user-defined assignment
+operators. In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and
+the two expressions
+\begin{lstlisting}
+a = b;
+operator=( a, b );
+\end{lstlisting}
+are equivalent. If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first
+parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''. It cannot have type
+\lstinline$T$, because then assignment couldn't alter the variable, and it can't have type
+``\lstinline$T *$'', because the assignment would have to be written ``\lstinline$&a = b;$''.
+
+In the case of user-defined operators, this could just as well be handled by using pointer types and
+by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to
+``\lstinline$operator=(&( a), b )$''. Reference parameters of ``normal'' functions are Bad Things,
+because they remove a useful property of C function calls: an argument can only be modified by a
+function if it is preceded by ``\lstinline$&$''.
+
+\item
+References to \Index{const-qualified} types can be used instead of value parameters.  Given the
+{\CC} function call ``\lstinline$fiddle( a_thing )$'', where the type of \lstinline$a_thing$ is
+\lstinline$Thing$, the type of \lstinline$fiddle$ could be either of
+\begin{lstlisting}
+void fiddle( Thing );
+void fiddle( const Thing & );
+\end{lstlisting}
+If the second form is used, then constructors and destructors are not invoked to create a temporary
+variable at the call site ( and it is bad style for the caller to make any assumptions about such
+things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by
+aliases. The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too
+large or their constructors or destructors are too expensive. An implementation may switch between
+them without causing trouble for well-behaved clients. This leaves the implementor to define ``too
+large'' and ``too expensive''.
+
+I propose to push this job onto the compiler by allowing it to implement
+\begin{lstlisting}
+void fiddle( const volatile Thing );
+\end{lstlisting}
+with call-by-reference. Since it knows all about the size of \lstinline$Thing$s and the parameter
+passing mechanism, it should be able to come up with a better definition of ``too large'', and may
+be able to make a good guess at ``too expensive''.
+\end{itemize}
+
+In summary, since references are only really necessary for returning lvalues, I'll only provide
+lvalue functions.
+\end{rationale}
+
+
+\setcounter{subsection}{8}
+\subsection{Initialization}
+
+An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the
+object being initialized. An expression used in an \nonterm{initializer-list} is treated as being
+cast to the type of the aggregate member that it initializes. In either case the cast must have a
+single unambiguous \Index{interpretation}.
+
+
+\setcounter{subsection}{10}
+\subsection{Specification definitions}
+
+\begin{syntax}
+\lhs{spec-definition}
+\rhs \lstinline$spec$ \nonterm{identifier} 
+	\lstinline$($ \nonterm{type-parameter-list} \lstinline$)$
+	\lstinline${$ \nonterm{spec-declaration-list}\opt \lstinline$}$
+\lhs{spec-declaration-list}
+\rhs \nonterm{spec-declaration} \lstinline$;$
+\rhs \nonterm{spec-declaration-list} \nonterm{spec-declaration} \lstinline$;$
+\lhs{spec-declaration}
+\rhs \nonterm{specifier-qualifier-list} \nonterm{declarator-list}
+\lhs{declarator-list}
+\rhs \nonterm{declarator}
+\rhs \nonterm{declarator-list} \lstinline$,$ \nonterm{declarator}
+\end{syntax}
+\begin{rationale}
+The declarations allowed in a specification are much the same as those allowed in a structure,
+except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed.
+\end{rationale}
+
+\semantics
+A \define{specification definition} defines a name for a \define{specification}: a parameterized
+collection of object and function declarations.
+
+The declarations in a specification consist of the declarations in the
+\nonterm{spec-declaration-list} and declarations produced by any assertions in the
+\nonterm{spec-parameter-list}. If the collection contains two declarations that declare the same
+identifier and have compatible types, they are combined into one declaration with the composite type
+constructed from the two types.
+
+
+\subsubsection{Assertions}
+
+\begin{syntax}
+\lhs{assertion-list}
+\rhs \nonterm{assertion}
+\rhs \nonterm{assertion-list} \nonterm{assertion}
+\lhs{assertion}
+\rhs \lstinline$|$ \nonterm{identifier} \lstinline$($ \nonterm{type-name-list} \lstinline$)$
+\rhs \lstinline$|$ \nonterm{spec-declaration}
+\lhs{type-name-list}
+\rhs \nonterm{type-name}
+\rhs \nonterm{type-name-list} \lstinline$,$ \nonterm{type-name}
+\end{syntax}
+
+\constraints
+The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name
+of a specification. The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for
+each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}. If the
+\nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type
+name of an \Index{object type}; if it uses \lstinline$dtype$, the argument shall be the type name of
+an object type or an \Index{incomplete type}; and if it uses \lstinline$ftype$, the argument shall
+be the type name of a \Index{function type}.
+
+\semantics
+An \define{assertion} is a declaration of a collection of objects and functions, called
+\define{assertion parameters}.
+
+The assertion parameters produced by an assertion that applies the name of a specification to type
+arguments are found by taking the declarations specified in the specification and treating each of
+the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument.
+
+The collection of assertion parameters produced by the \nonterm{assertion-list} are found by
+combining the declarations produced by each assertion. If the collection contains two declarations
+that declare the same identifier and have compatible types, they are combined into one declaration
+with the \Index{composite type} constructed from the two types.
+
+\examples
+\begin{lstlisting}
+forall( type T | T ?*?( T, T ))@\use{?*?}@
+T square( T val ) {@\impl{square}@
+	return val + val;
+}
+
+context summable( type T ) {@\impl{summable}@
+	T ?+=?( T *, T );@\use{?+=?}@
+	const T 0;@\use{0}@
+};
+context list_of( type List, type Element ) {@\impl{list_of}@
+	Element car( List );
+	List cdr( List );
+	List cons( Element, List );
+	List nil;
+	int is_nil( List );
+};
+context sum_list( type List, type Element | summable( Element ) | list_of( List, Element ) ) {};
+\end{lstlisting}
+\lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added
+up. The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion
+parameters
+\begin{lstlisting}
+int ?+=?( int *, int );
+const int 0;
+int car( i_list );
+i_list cdr( i_list );
+i_list cons( int, i_list );
+i_list nil;
+int is_nil;
+\end{lstlisting}
+
+
+\subsection{Type declarations}
+
+\begin{syntax}
+\lhs{type-parameter-list}
+\rhs \nonterm{type-parameter}
+\rhs \nonterm{type-parameter-list} \lstinline$,$ \nonterm{type-parameter}
+\lhs{type-parameter}
+\rhs \nonterm{type-class} \nonterm{identifier} \nonterm{assertion-list}\opt
+\lhs{type-class}
+\rhs \lstinline$type$
+\rhs \lstinline$dtype$
+\rhs \lstinline$ftype$
+\lhs{type-declaration}
+\rhs \nonterm{storage-class-specifier}\opt \lstinline$type$ \nonterm{type-declarator-list} \verb|;|
+\lhs{type-declarator-list}
+\rhs \nonterm{type-declarator}
+\rhs \nonterm{type-declarator-list} \lstinline$,$ \nonterm{type-declarator}
+\lhs{type-declarator}
+\rhs \nonterm{identifier} \nonterm{assertion-list}\opt \lstinline$=$ \nonterm{type-name}
+\rhs \nonterm{identifier} \nonterm{assertion-list}\opt
+\end{syntax}
+
+\constraints
+If a type declaration has block scope, and the declared identifier has external or internal linkage,
+the declaration shall have no initializer for the identifier.
+
+\semantics
+A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type
+name} for a type incompatible with all other types.
+
+An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}. Identifiers declared
+with type-class \lstinline$type$\use{type} are \Index{object type}s; those declared with type-class
+\lstinline$dtype$\use{dtype} are \Index{incomplete type}s; and those declared with type-class
+\lstinline$ftype$\use{ftype} are \Index{function type}s. The identifier has \Index{block scope} that
+terminates at the end of the \nonterm{spec-declaration-list} or polymorphic function that contains
+the \nonterm{type-parameter}.
+
+A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}.  The declared
+identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after
+the end of the initializer. The type in the initializer is called the \define{implementation
+  type}. Within the scope of the declaration, \Index{implicit conversion}s can be performed between
+the defined type and the implementation type, and between pointers to the defined type and pointers
+to the implementation type.
+
+A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or
+with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}. If a
+\Index{translation unit} or \Index{block} contains one or more such declarations for an identifier,
+it must contain exactly one definition of the identifier ( but not in an enclosed block, which would
+define a new type known only within that block).
+\begin{rationale}
+Incomplete type declarations allow compact mutually-recursive types.
+\begin{lstlisting}
+type t1; // Incomplete type declaration. 
+type t2 = struct { t1 * p; ... };
+type t1 = struct { t2 * p; ... };
+\end{lstlisting}
+Without them, mutual recursion could be handled by declaring mutually recursive structures, then
+initializing the types to those structures.
+\begin{lstlisting}
+struct s1;
+type t2 = struct s2 { struct s1 * p; ... };
+type t1 = struct s1 { struct s2 * p; ... };
+\end{lstlisting}
+This introduces extra names, and may force the programmer to cast between the types and their
+implementations.
+\end{rationale}
+
+A type declaration without an initializer and with \Index{storage-class specifier}
+\lstinline$extern$\use{extern} is an \define{opaque type declaration}. Opaque types are
+\Index{object type}s. An opaque type is not a \nonterm{constant-expression}; neither is a structure
+or union that has a member whose type is not a \nonterm{constant-expression}.  Every other
+\Index{object type} is a \nonterm{constant-expression}. Objects with static storage duration shall
+be declared with a type that is a \nonterm{constant-expression}.
+\begin{rationale}
+Type declarations can declare identifiers with external linkage, whereas typedef declarations
+declare identifiers that only exist within a translation unit. These opaque types can be used in
+declarations, but the implementation of the type is not visible.
+
+Static objects can not have opaque types because space for them would have to be allocated at
+program start-up. This is a deficiency\index{deficiencies!static opaque objects}, but I don't want
+to deal with ``module initialization'' code just now.
+\end{rationale}
+
+An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a
+value of \Index{type-class} \lstinline$dtype$. An object type\index{object types} which is not a
+qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$. A
+\Index{function type} is a value of type-class \lstinline$ftype$.
+\begin{rationale}
+Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which
+omits the identifier being declared.
+
+Object types are precisely the types that can be instantiated. Type qualifiers are not included in
+type values because the compiler needs the information they provide at compile time to detect
+illegal statements or to produce efficient machine instructions. For instance, the code that a
+compiler must generate to manipulate an object that has volatile-qualified type may be different
+from the code to manipulate an ordinary object.
+
+Type qualifiers are a weak point of C's type system. Consider the standard library function
+\lstinline$strchr()$ which, given a string and a character, returns a pointer to the first
+occurrence of the character in the string.
+\begin{lstlisting}
+char *strchr( const char *s, int c ) {@\impl{strchr}@
+	char real_c = c; // done because c was declared as int. 
+	for ( ; *s != real_c; s++ )
+	 if ( *s == '\0' ) return NULL;
+	return ( char * )s;
+}
+\end{lstlisting}
+The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be
+used to search a constant string, but the return type must be \lstinline$char *$, because the result
+might be used to modify a non-constant string. Hence the body must perform a cast, and ( even worse)
+\lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings. What is needed
+is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has
+exactly the same qualifiers. Polymorphic functions do not provide a fix for this
+deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of
+type values. Instead, overloading can be used to define \lstinline$strchr()$ for each combination
+of qualifiers.
+\end{rationale}
+
+\begin{rationale}
+Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a
+type declaration, or as the type of a structure or union member. This prevents the declaration of
+types that contain each other.
+\begin{lstlisting}
+type t1;
+type t2 = t1; // illegal: incomplete type t1. 
+type t1 = t2;
+\end{lstlisting}
+
+The initializer in a file-scope declaration must be a constant expression. This means type
+declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque
+ types}.
+\begin{lstlisting}
+extern type Huge; // extended-precision integer type. 
+type Rational = struct {
+	Huge numerator, denominator;	// illegal 
+};
+struct Pair {
+	Huge first, second;				// legal 
+};
+\end{lstlisting}
+Without this restriction, \CFA might require ``module initialization'' code ( since
+\lstinline$Rational$ has external linkage, it must be created before any other translation unit
+instantiates it), and would force an ordering on the initialization of the translation unit that
+defines \lstinline$Huge$ and the translation that declares \lstinline$Rational$.
+
+A benefit of the restriction is that it prevents the declaration in separate translation units of
+types that contain each other, which would be hard to prevent otherwise.
+\begin{lstlisting}
+//  File a.c:
+	extern type t1;
+	type t2 = struct { t1 f1; ... } // illegal 
+//  File b.c:
+	extern type t2;
+	type t1 = struct { t2 f2; ... } // illegal 
+\end{lstlisting}
+\end{rationale}
+
+\begin{rationale}
+Since a \nonterm{type-declaration} is a \nonterm{declaration} and not a
+\nonterm{struct-declaration}, type declarations can not be structure members. The form of
+\nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline$type$.
+Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued
+expressions. It also side-steps the problem of type-valued expressions producing different values
+in different declarations.
+
+Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit
+type parameters. This may be too restrictive, but it attempts to make compilation simpler. Recall
+that when traditional C scanners read in an identifier, they look it up in the symbol table to
+determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token
+depending on what they find. A type parameter would add a type name to the current scope. The
+scope manipulations involved in parsing the declaration of a function that takes function pointer
+parameters and returns a function pointer may just be too complicated.
+
+Explicit type parameters don't seem to be very useful, anyway, because their scope would not include
+the return type of the function. Consider the following attempt to define a type-safe memory
+allocation function.
+\begin{lstlisting}
+#include <stdlib.h>
+T * new( type T ) { return ( T * )malloc( sizeof( T) ); };
+@\ldots@
+int * ip = new( int );
+\end{lstlisting}
+This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the
+function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the
+meaning of \lstinline$T$ in the scope that contains \lstinline$new$; it could be undefined, or a
+type name, or a function or variable name. Nothing good can result from such a situation.
+\end{rationale}
+
+\examples
+Since type declarations create new types, instances of types are always passed by value.
+\begin{lstlisting}
+type A1 = int[2];
+void f1( A1 a ) { a[0] = 0; };
+typedef int A2[2];
+void f2( A2 a ) { a[0] = 0; };
+A1 v1;
+A2 v2;
+f1( v1 );
+f2( v2 );
+\end{lstlisting}
+\lstinline$V1$ is passed by value, so \lstinline$f1()$'s assignment to \lstinline$a[0]$ does not
+modify v1.  \lstinline$V2$ is converted to a pointer, so \lstinline$f2()$ modifies
+\lstinline$v2[0]$.
+
+A translation unit containing the declarations
+\begin{lstlisting}
+extern type Complex;@\use{Complex}@ // opaque type declaration. 
+extern float abs( Complex );@\use{abs}@
+\end{lstlisting}
+can contain declarations of complex numbers, which can be passed to \lstinline$abs$. Some other
+translation unit must implement \lstinline$Complex$ and \lstinline$abs$. That unit might contain
+the declarations
+\begin{lstlisting}
+type Complex = struct { float re, im; };@\impl{Complex}@
+Complex cplx_i = { 0.0, 1.0 };@\impl{cplx_i}@
+float abs( Complex c ) {@\impl{abs( Complex )}@
+	return sqrt( c.re * c.re + c.im * c.im );
+}
+\end{lstlisting}
+Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can
+be retrieved.
+
+\begin{lstlisting}
+type Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight. 
+Time_of_day ?+?( Time_of_day t1, int seconds ) {@\impl{?+?}@
+	return (( int)t1 + seconds ) % 86400;
+}
+\end{lstlisting}
+\lstinline$t1$ must be cast to its implementation type to prevent infinite recursion.
+
+\begin{rationale}
+Within the scope of a type definition, an instance of the type can be viewed as having that type or
+as having the implementation type. In the \lstinline$Time_of_day$ example, the difference is
+important. Different languages have treated the distinction between the abstraction and the
+implementation in different ways.
+\begin{itemize}
+\item
+Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies. Two
+primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views.
+\item
+The Simula class \cite{Simula87} is essentially a record type. Since the only operations on a
+record are member selection and assignment, which can not be overloaded, there is never any
+ambiguity as to whether the abstraction or the implementation view is being used. In {\CC}
+\cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be
+overloaded. A ``scope resolution'' operator can be used inside the class to specify whether the
+abstract or implementation version of the operation should be used.
+\item
+An Ada derived type definition \cite{ada} creates a new type from an old type, and also implicitly
+declares derived subprograms that correspond to the existing subprograms that use the old type as a
+parameter type or result type. The derived subprograms are clones of the existing subprograms with
+the old type replaced by the derived type. Literals and aggregates of the old type are also cloned.
+In other words, the abstract view provides exactly the same operations as the implementation view.
+This allows the abstract view to be used in all cases.
+
+The derived subprograms can be replaced by programmer-specified subprograms. This is an exception
+to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope. In this
+case, explicit conversions between the derived type and the old type can be used.
+\end{itemize}
+\CFA's rules are like Clu's, except that implicit conversions and
+conversion costs allow it to do away with most uses of \lstinline$up$ and \lstinline$down$. 
+\end{rationale}
+
+
+\subsubsection{Default functions and objects}
+
+A declaration\index{type declaration} of a type identifier \lstinline$T$ with type-class
+\lstinline$type$ implicitly declares a \define{default assignment} function
+\lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the
+identifier \lstinline$T$.
+\begin{rationale}
+Assignment is central to C's imperative programming style, and every existing C object type has
+assignment defined for it ( except for array types, which are treated as pointer types for purposes
+of assignment). Without this rule, nearly every inferred type parameter would need an accompanying
+assignment assertion parameter. If a type parameter should not have an assignment operation,
+\lstinline$dtype$ should be used. If a type should not have assignment defined, the user can define
+an assignment function that causes a run-time error, or provide an external declaration but no
+definition and thus cause a link-time error.
+\end{rationale}
+
+A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation
+type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment
+function. A definition\index{type definition} of a type identifier \lstinline$T$ with implementation
+type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and
+\define{default object}s as declared by the assertion declarations. The default objects and
+functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. Their
+values are determined as follows:
+\begin{itemize}
+\item
+If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name
+as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced
+by \lstinline$T$ is compatible with the type of the default object, then the default object is
+initialized with that object. Otherwise the scope of the declaration of \lstinline$T$ must contain
+a definition of the default object.
+
+\item 
+If at the definition of \lstinline$T$ there is visible a declaration of a function with the same
+name as the default function, and if the type of that function with all occurrence of \lstinline$I$
+replaced by \lstinline$T$ is compatible with the type of the default function, then the default
+function calls that function after converting its arguments and returns the converted result.
+
+Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that
+at the definition of \lstinline$T$ there is visible a declaration of a function with the same name
+as the default function, and the type of that function with all occurrences of the anonymous
+member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the
+default function, then the default function calls that function after converting its arguments and
+returns the result.
+
+Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default
+function.
+\end{itemize}
+\begin{rationale}
+Note that a pointer to a default function will not compare as equal to a pointer to the inherited
+function.
+\end{rationale}
+
+A function or object with the same type and name as a default function or object that is declared
+within the scope of the definition of \lstinline$T$ replaces the default function or object.
+
+\examples
+\begin{lstlisting}
+context s( type T ) {
+	T a, b;
+}
+struct impl { int left, right; } a = { 0, 0 };
+type Pair | s( Pair ) = struct impl;
+Pair b = { 1, 1 };
+\end{lstlisting}
+The definition of \lstinline$Pair$ implicitly defines two objects \lstinline$a$ and \lstinline$b$.
+\lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$. The definition of
+\lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value
+from.
+\begin{lstlisting}
+context ss( type T ) {
+	T clone( T );
+	void munge( T * );
+}
+type Whatsit | ss( Whatsit );@\use{Whatsit}@
+type Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@
+	Whatsit; // anonymous member 
+	int extra;
+};
+Doodad clone( Doodad ) { ... }
+\end{lstlisting}
+The definition of \lstinline$Doodad$ implicitly defines three functions:
+\begin{lstlisting}
+Doodad ?=?( Doodad *, Doodad );
+Doodad clone( Doodad );
+void munge( Doodad * );
+\end{lstlisting}
+The assignment function inherits \lstinline$struct doodad$'s assignment function because the types
+match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout.
+\lstinline$munge()$ inherits \lstinline$Whatsit$'s \lstinline$munge()$ because the types match when
+\lstinline$Whatsit$ is replaced by \lstinline$Doodad$ in the parameter list. \lstinline$clone()$
+does \emph{not} inherit \lstinline$Whatsit$'s \lstinline$clone()$: replacement in the parameter
+list yields ``\lstinline$Whatsit clone( Doodad )$'', which is not compatible with
+\lstinline$Doodad$'s \lstinline$clone()$'s type. Hence the definition of
+``\lstinline$Doodad clone( Doodad )$'' is necessary.
+
+Default functions and objects are subject to the normal scope rules.
+\begin{lstlisting}
+type T = @\ldots@;
+T a_T = @\ldots@;		// Default assignment used. 
+T ?=?( T *, T );
+T a_T = @\ldots@;		// Programmer-defined assignment called. 
+\end{lstlisting}
+\begin{rationale}
+A compiler warning would be helpful in this situation.
+\end{rationale}
+
+\begin{rationale}
+The \emph{class} construct of object-oriented programming languages performs three independent
+functions. It \emph{encapsulates} a data structure; it defines a \emph{subtype} relationship, whereby
+instances of one class may be used in contexts that require instances of another; and it allows one
+class to \emph{inherit} the implementation of another.
+
+In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided
+by specifications and assertions. Inheritance is provided by default functions and objects.
+\end{rationale}
+
+
+\section{Statements and blocks}
+
+\begin{syntax}
+\oldlhs{statement}
+\rhs \nonterm{exception-statement}
+\end{syntax}
+
+Many statements contain expressions, which may have more than one interpretation. The following
+sections describe how the \CFA translator selects an interpretation. In all cases the result of the
+selection shall be a single unambiguous \Index{interpretation}.
+
+
+\subsection{Labeled statements}
+
+\begin{syntax}
+\oldlhs{labeled-statement}
+\rhs \lstinline$case$ \nonterm{case-value-list} : \nonterm{statement}
+\lhs{case-value-list}
+\rhs \nonterm{case-value}
+\rhs \nonterm{case-value-list} \lstinline$,$ \nonterm{case-value}
+\lhs{case-value}
+\rhs \nonterm{constant-expression}
+\rhs \nonterm{subrange}
+\lhs{subrange}
+\rhs \nonterm{constant-expression} \lstinline$~$ \nonterm{constant-expression}
+\end{syntax}
+
+The following have identical meaning:
+\begin{lstlisting}
+case 1:  case 2:  case 3:  case 4:  case 5:
+case 1, 2, 3, 4, 5:
+case 1~5:
+\end{lstlisting}
+Multiple subranges are allowed:
+\begin{lstlisting}
+case 1~4, 9~14, 27~32:
+\end{lstlisting}
+The \lstinline$case$ and \lstinline$default$ clauses are restricted within the \lstinline$switch$ and \lstinline$choose$ statements, precluding Duff's device.
+
+
+\subsection{Expression and null statements}
+
+The expression in an expression statement is treated as being cast to \lstinline$void$.
+
+
+\subsection{Selection statements}
+
+\begin{syntax}
+\oldlhs{selection-statement}
+\rhs \lstinline$choose$ \lstinline$($ \nonterm{expression} \lstinline$)$ \nonterm{statement}
+\end{syntax}
+
+The controlling expression \lstinline$E$ in the \lstinline$switch$ and \lstinline$choose$ statement:
+\begin{lstlisting}
+switch ( E ) ...
+choose ( E ) ...
+\end{lstlisting}
+may have more than one interpretation, but it shall have only one interpretation with an integral type.
+An \Index{integer promotion} is performed on the expression if necessary.
+The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type.
+
+
+\setcounter{subsubsection}{3}
+\subsubsection{The \lstinline$choose$ statement}
+
+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.
+The \lstinline$fallthru$ statement is used to fall through to the next \lstinline$case$ or \lstinline$default$ labeled statement.
+The following have identical meaning:
+\begin{flushleft}
+\begin{tabular}{@{\hspace{2em}}l@{\hspace{2em}}l@{}}
+\begin{lstlisting}
+switch (...) {
+  case 1: ... ; break;
+  case 2: ... ; break;
+  case 3: ... ; // fall through
+  case 4: ... ; // fall through
+  default: ... break;
+}
+\end{lstlisting}
+&
+\begin{lstlisting}
+choose (...) {
+  case 1: ... ; // exit
+  case 2: ... ; // exit
+  case 3: ... ; fallthru;
+  case 4: ... ; fallthru;
+  default: ... ; // exit
+}
+\end{lstlisting}
+\end{tabular}
+\end{flushleft}
+The \lstinline$choose$ statement addresses the problem of accidental fall-through associated with the \lstinline$switch$ statement.
+
+
+\subsection{Iteration statements}
+
+The controlling expression \lstinline$E$ in the loops
+\begin{lstlisting}
+if ( E ) ...
+while ( E ) ...
+do ... while ( E );
+\end{lstlisting}
+is treated as ``\lstinline$( int )((E)!=0)$''.
+
+The statement 
+\begin{lstlisting}
+for ( a; b; c ) @\ldots@
+\end{lstlisting}
+is treated as
+\begin{lstlisting}
+for ( ( void )( a ); ( int )(( b )!=0); ( void )( c ) ) ...
+\end{lstlisting}
+
+
+\subsection{Jump statements}
+
+\begin{syntax}
+\oldlhs{jump-statement}
+\rhs \lstinline$continue$ \nonterm{identifier}\opt
+\rhs \lstinline$break$ \nonterm{identifier}\opt
+\rhs \ldots
+\rhs \lstinline$throw$ \nonterm{assignment-expression}\opt
+\rhs \lstinline$throwResume$ \nonterm{assignment-expression}\opt \nonterm{at-expression}\opt
+\lhs{at-expression} \lstinline$_At$ \nonterm{assignment-expression}
+\end{syntax}
+
+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.
+\begin{lstlisting}
+L1: {							// compound
+  L2: switch ( ... ) {			// switch
+	  case ...:
+	  L3: for ( ;; ) {			// outer for
+		L4: for ( ;; ) {		// inner for
+				continue L1;	// error: not enclosing iteration
+				continue L2;	// error: not enclosing iteration
+				continue L3;	// next iteration of outer for
+				continue L4;	// next iteration of inner for
+				break L1;		// exit compound
+				break L2;		// exit switch
+				break L3;		// exit outer for
+				break L4;		// exit inner for
+			} // for
+		} // for
+		break;					// exit switch
+	  default:
+		break L1;				// exit compound
+	} // switch
+	...
+} // compound
+\end{lstlisting}
+
+
+\setcounter{subsubsection}{1}
+\subsubsection{The \lstinline$continue$ statement}
+
+The identifier in a \lstinline$continue$ statement shall name a label located on an enclosing iteration statement.
+
+
+\subsubsection{The \lstinline$break$ statement}
+
+The identifier in a \lstinline$break$ statement shall name a label located on an enclosing compound, selection or iteration statement.
+
+
+\subsubsection{The \lstinline$return$ statement}
+
+An expression in a \lstinline$return$ statement is treated as being cast to the result type of the function.
+
+
+\subsubsection{The \lstinline$throw$ statement}
+
+When an exception is raised, \Index{propagation} directs control from a raise in the source execution to a handler in the faulting execution.
+
+
+\subsubsection{The \lstinline$throwResume$ statement}
+
+
+\subsection{Exception statements}
+
+\begin{syntax}
+\lhs{exception-statement}
+\rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{handler-list}
+\rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{finally-clause}
+\rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{handler-list} \nonterm{finally-clause}
+\lhs{handler-list}
+\rhs \nonterm{handler-clause}
+\rhs \lstinline$catch$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
+\rhs \nonterm{handler-clause} \lstinline$catch$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
+\rhs \lstinline$catchResume$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
+\rhs \nonterm{handler-clause} \lstinline$catchResume$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
+\lhs{handler-clause}
+\rhs \lstinline$catch$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
+\rhs \nonterm{handler-clause} \lstinline$catch$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
+\rhs \lstinline$catchResume$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
+\rhs \nonterm{handler-clause} \lstinline$catchResume$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
+\lhs{finally-clause}
+\rhs \lstinline$finally$ \nonterm{compound-statement}
+\lhs{exception-declaration}
+\rhs \nonterm{type-specifier}
+\rhs \nonterm{type-specifier} \nonterm{declarator}
+\rhs \nonterm{type-specifier} \nonterm{abstract-declarator}
+\rhs \nonterm{new-abstract-declarator-tuple} \nonterm{identifier}
+\rhs \nonterm{new-abstract-declarator-tuple}
+\lhs{asynchronous-statement}
+\rhs \lstinline$enable$ \nonterm{identifier-list} \nonterm{compound-statement}
+\rhs \lstinline$disable$ \nonterm{identifier-list} \nonterm{compound-statement}
+\end{syntax}
+
+\Index{Exception statement}s allow a dynamic call to a handler for \Index{recovery} (\Index{termination}) or \Index{correction} (\Index{resumption}) of an \Index{abnormal event}.
+
+
+\subsubsection{The \lstinline$try$ statement}
+
+The \lstinline$try$ statement is a block with associated handlers, called a \Index{guarded block};
+all other blocks are \Index{unguarded block}s.
+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.
+
+
+\subsubsection{The \lstinline$enable$/\lstinline$disable$ statements}
+
+The \lstinline$enable$/\lstinline$disable$ statements toggle delivery of \Index{asynchronous exception}s.
+
+
+\setcounter{section}{9}
+\section{Preprocessing directives}
+
+
+\setcounter{subsection}{7}
+\subsection{Predefined macro names}
+
+The implementation shall define the macro names \lstinline$__LINE__$, \lstinline$__FILE__$,
+\lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard. It shall not define the
+macro name \lstinline$__STDC__$.
+
+In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the
+decimal constant 1.
+
+
+\appendix
+
+
+\chapter{Examples}
+
+
+\section{C types}
+This section gives example specifications for some groups of types that are important in the C
+language, in terms of the predefined operations that can be applied to those types.
+
+
+\subsection{Scalar, arithmetic, and integral types}
+
+The pointer, integral, and floating-point types are all \define{scalar types}. All of these types
+can be logically negated and compared. The assertion ``\lstinline$scalar( Complex )$'' should be read
+as ``type \lstinline$Complex$ is scalar''.
+\begin{lstlisting}
+context scalar( type T ) {@\impl{scalar}@
+	int !?( T );
+	int ?<?( T, T ), ?<=?( T, T ), ?==?( T, T ), ?>=?( T, T ), ?>?( T, T ), ?!=?( T, T );
+};
+\end{lstlisting}
+
+The integral and floating-point types are \define{arithmetic types}, which support the basic
+arithmetic operators. The use of an assertion in the \nonterm{spec-parameter-list} declares that,
+in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are
+available ). This is equivalent to inheritance of specifications.
+\begin{lstlisting}
+context arithmetic( type T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@
+	T +?( T ), -?( T );
+	T ?*?( T, T ), ?/?( T, T ), ?+?( T, T ), ?-?( T, T );
+};
+\end{lstlisting}
+
+The various flavors of \lstinline$char$ and \lstinline$int$ and the enumerated types make up the
+\define{integral types}.
+\begin{lstlisting}
+context integral( type T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@
+	T ~?( T );
+	T ?&?( T, T ), ?|?( T, T ), ?^?( T, T );
+	T ?%?( T, T );
+	T ?<<?( T, T ), ?>>?( T, T );
+};
+\end{lstlisting}
+
+
+\subsection{Modifiable types}
+\index{modifiable lvalue}
+
+The only operation that can be applied to all modifiable lvalues is simple assignment.
+\begin{lstlisting}
+context m_lvalue( type T ) {@\impl{m_lvalue}@
+	T ?=?( T *, T );
+};
+\end{lstlisting}
+
+Modifiable scalar lvalues are scalars and are modifiable lvalues, and assertions in the
+\nonterm{spec-parameter-list} reflect those relationships. This is equivalent to multiple
+inheritance of specifications. Scalars can also be incremented and decremented.
+\begin{lstlisting}
+context m_l_scalar( type T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@
+	T ?++( T * ), ?--( T * );@\use{scalar}@@\use{m_lvalue}@
+	T ++?( T * ), --?( T * );
+};
+\end{lstlisting}
+
+Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic. Note that this
+results in the ``inheritance'' of \lstinline$scalar$ along both paths.
+\begin{lstlisting}
+context m_l_arithmetic( type T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@
+	T ?/=?( T *, T ), ?*=?( T *, T );@\use{m_l_scalar}@@\use{arithmetic}@
+	T ?+=?( T *, T ), ?-=?( T *, T );
+};
+
+context m_l_integral( type T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@
+	T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );@\use{m_l_arithmetic}@
+	T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );@\use{integral}@
+};
+\end{lstlisting}
+
+
+\subsection{Pointer and array types}
+
+Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a
+constant pointer to the first element of the array, and the subscript expression
+``\lstinline$a[i]$'' is equivalent to the dereferencing expression ``\lstinline$(*( a+( i )))$''.
+Technically, pointer arithmetic and pointer comparisons other than ``\lstinline$==$'' and
+``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not
+enforce those restrictions. Consequently, there is no need for a separate ``array type''
+specification.
+
+Pointer types are scalar types. Like other scalar types, they have ``\lstinline$+$'' and
+``\lstinline$-$'' operators, but the types do not match the types of the operations in
+\lstinline$arithmetic$, so these operators cannot be consolidated in \lstinline$scalar$.
+\begin{lstlisting}
+context pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@
+	P ?+?( P, long int ), ?+?( long int, P ), ?-?( P, long int );
+	ptrdiff_t ?-?( P, P );
+};
+
+context m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@
+	P ?+=?( P *, long int ), ?-=?( P *, long int );
+	P ?=?( P *, void * );
+	void * ?=?( void **, P );
+};
+\end{lstlisting}
+
+Specifications that define the dereference operator ( or subscript operator ) require two
+parameters, one for the pointer type and one for the pointed-at ( or element ) type. Different
+specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not
+included in types. The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as
+``\lstinline$Safe_pointer$ acts like a pointer to \lstinline$int$''.
+\begin{lstlisting}
+context ptr_to( type P | pointer( P ), type T ) {@\impl{ptr_to}@@\use{pointer}@
+	lvalue T *?( P ); lvalue T ?[?]( P, long int );
+};
+
+context ptr_to_const( type P | pointer( P ), type T ) {@\impl{ptr_to_const}@
+	const lvalue T *?( P ); const lvalue T ?[?]( P, long int );@\use{pointer}@
+};
+
+context ptr_to_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_volatile}@
+	volatile lvalue T *?( P ); volatile lvalue T ?[?]( P, long int );@\use{pointer}@
+};
+\end{lstlisting}
+\begin{lstlisting}
+context ptr_to_const_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_const_volatile}@
+	const volatile lvalue T *?( P );@\use{pointer}@
+	const volatile lvalue T ?[?]( P, long int );
+};
+\end{lstlisting}
+
+Assignment to pointers is more complicated than is the case with other types, because the target's
+type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to
+a ``\lstinline$const T *$'', a ``\lstinline$volatile T *$'', and a ``\lstinline$const volatile T *$''.
+Again, the pointed-at type is passed in, so that assertions can connect these specifications to the
+``\lstinline$ptr_to$'' specifications.
+\begin{lstlisting}
+context m_l_ptr_to( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to}@ type T | ptr_to( P, T )@\use{ptr_to}@ {
+	P ?=?( P *, T * );
+	T * ?=?( T **, P );
+};
+
+context m_l_ptr_to_const( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_const}@ type T | ptr_to_const( P, T )@\use{ptr_to_const}@) {
+	P ?=?( P *, const T * );
+	const T * ?=?( const T **, P );
+};
+
+context m_l_ptr_to_volatile( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_volatile}@ type T | ptr_to_volatile( P, T )) {@\use{ptr_to_volatile}@
+	P ?=?( P *, volatile T * );
+	volatile T * ?=?( volatile T **, P );
+};
+
+context m_l_ptr_to_const_volatile( type P | ptr_to_const_volatile( P ),@\use{ptr_to_const_volatile}@@\impl{m_l_ptr_to_const_volatile}@
+		type T | m_l_ptr_to_volatile( P, T ) | m_l_ptr_to_const( P )) {@\use{m_l_ptr_to_const}@@\use{m_l_ptr_to_volatile}@
+	P ?=?( P *, const volatile T * );
+	const volatile T * ?=?( const volatile T **, P );
+};
+\end{lstlisting}
+
+Note the regular manner in which type qualifiers appear in those specifications. An alternative
+specification can make use of the fact that qualification of the pointed-at type is part of a
+pointer type to capture that regularity.
+\begin{lstlisting}
+context m_l_ptr_like( type MyP | m_l_pointer( MyP ),@\use{m_l_pointer}@@\impl{m_l_ptr_like}@ type CP | m_l_pointer( CP ) ) {
+	MyP ?=?( MyP *, CP );
+	CP ?=?( CP *, MyP );
+};
+\end{lstlisting}
+The assertion ``\lstinline$| m_l_ptr_like( Safe_ptr, const int * )$'' should be read as
+``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''. This specification has two
+defects, compared to the original four: there is no automatic assertion that dereferencing a
+\lstinline$MyP$ produces an lvalue of the type that \lstinline$CP$ points at, and the
+``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed
+to \lstinline$CP$ really is a pointer type.
+
+
+\section{Relationships between operations}
+
+Different operators often have related meanings; for instance, in C, ``\lstinline$+$'',
+``\lstinline$+=$'', and the two versions of ``\lstinline$++$'' perform variations of addition.
+Languages like {\CC} and Ada allow programmers to define operators for new types, but do not
+require that these relationships be preserved, or even that all of the operators be implemented.
+Completeness and consistency is left to the good taste and discretion of the programmer. It is
+possible to encourage these attributes by providing generic operator functions, or member functions
+of abstract classes, that are defined in terms of other, related operators.
+
+In \CFA, polymorphic functions provide the equivalent of these generic operators, and
+specifications explicitly define the minimal implementation that a programmer should provide. This
+section shows a few examples.
+
+
+\subsection{Relational and equality operators}
+
+The different comparison operators have obvious relationships, but there is no obvious subset of the
+operations to use in the implementation of the others. However, it is usually convenient to
+implement a single comparison function that returns a negative integer, 0, or a positive integer if
+its first argument is respectively less than, equal to, or greater than its second argument; the
+library function \lstinline$strcmp$ is an example.
+
+C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation,
+returns 1 if its operand compares equal to 0, and 0 otherwise.
+\begin{lstlisting}
+context comparable( type T ) {
+	const T 0;
+	int compare( T, T );
+}
+
+forall( type T | comparable( T ) ) int ?<?( T l, T r ) {
+	return compare( l, r ) < 0;
+}
+// ... similarly for <=, ==, >=, >, and !=. 
+
+forall( type T | comparable( T ) ) int !?( T operand ) {
+	return !compare( operand, 0 );
+}
+\end{lstlisting}
+
+
+\subsection{Arithmetic and integer operations}
+
+A complete arithmetic type would provide the arithmetic operators and the corresponding assignment
+operators. Of these, the assignment operators are more likely to be implemented directly, because
+it is usually more efficient to alter the contents of an existing object than to create and return a
+new one. Similarly, a complete integral type would provide integral operations based on integral
+assignment operations.
+\begin{lstlisting}
+context arith_base( type T ) {
+	const T 1;
+	T ?+=?( T *, T ), ?-=?( T *, T ), ?*=?( T *, T ), ?/=?( T *, T );
+}
+
+forall( type T | arith_base( T ) ) T ?+?( T l, T r ) {
+	return l += r;
+}
+
+forall( type T | arith_base( T ) ) T ?++( T * operand ) {
+	T temporary = *operand;
+	*operand += 1;
+	return temporary;
+}
+
+forall( type T | arith_base( T ) ) T ++?( T * operand ) {
+	return *operand += 1;
+}
+// ... similarly for -, --, *, and /. 
+
+context int_base( type T ) {
+	T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );
+	T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );
+}
+
+forall( type T | int_base( T ) ) T ?&?( T l, T r ) {
+	return l &= r;
+}
+// ... similarly for |, ^, %, <<, and >>.
+\end{lstlisting}
+
+Note that, although an arithmetic type would certainly provide comparison functions, and an integral
+type would provide arithmetic operations, there does not have to be any relationship among
+\lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$. Note also that these
+declarations provide guidance and assistance, but they do not define an absolutely minimal set of
+requirements. A truly minimal implementation of an arithmetic type might only provide
+\lstinline$0$, \lstinline$1$, and \lstinline$?-=?$, which would be used by polymorphic
+\lstinline$?+=?$, \lstinline$?*=?$, and \lstinline$?/=?$ functions.
+
+Note also that \lstinline$short$ is an integer type in C11 terms, but has no operations!
+
+
+\chapter{TODO}
+Review index entries.
+
+Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers. This gets
+into \lstinline$noalias$ territory. Qualifying anything (``\lstinline$short restrict rs$'') means
+pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers.
+
+Enumerated types. Constants are not ints. Overloading. Definition should be ``representable as an
+integer type'', not ``as an int''. C11 usual conversions freely convert to and from ordinary
+integer types via assignment, which works between any integer types. Does enum Color ?*?( enum
+Color, enum Color ) really make sense? ?++ does, but it adds (int)1.
+
+Operators on {,signed,unsigned} char and other small types. ?<? harmless; ?*? questionable for
+chars. Generic selections make these choices visible. Safe conversion operators? Predefined
+``promotion'' function?
+
+\lstinline$register$ assignment might be handled as assignment to a temporary with copying back and
+forth, but copying must not be done by assignment.
+
+Don't use ptrdiff\_t by name in the predefineds.
+
+Polymorphic objects. Polymorphic typedefs and type declarations.
+
+
+\bibliographystyle{plain}
+\bibliography{refrat}
+
+
+\addcontentsline{toc}{chapter}{\indexname} % add index name to table of contents
+\begin{theindex}
+Italic page numbers give the location of the main entry for the referenced term. Plain page numbers
+denote uses of the indexed term. Entries for grammar non-terminals are italicized. A typewriter
+font is used for grammar terminals and program identifiers.
+\indexspace
+\input{refrat.ind}
+\end{theindex}
+
+\end{document}
+
+% Local Variables: %
+% tab-width: 4 %
+% fill-column: 100 %
+% compile-command: "make" %
+% End: %
Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/CodeGen/CodeGenerator.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jul 27 14:40:06 2015
-// Update Count     : 218
+// Last Modified By : Rob Schluntz
+// Last Modified On : Thu Sep 17 15:24:08 2015
+// Update Count     : 231
 //
 
@@ -186,9 +186,29 @@
 	}
 
+	void CodeGenerator::printDesignators( std::list< Expression * > & designators ) {
+		typedef std::list< Expression * > DesignatorList;
+		if ( designators.size() == 0 ) return;
+		for ( DesignatorList::iterator iter = designators.begin(); iter != designators.end(); ++iter ) {
+			if ( dynamic_cast< NameExpr * >( *iter ) ) {
+				// if expression is a name, then initializing aggregate member
+				output << ".";
+				(*iter)->accept( *this );
+			} else {
+				// if not a simple name, it has to be a constant expression, i.e. an array designator
+				output << "[";
+				(*iter)->accept( *this );
+				output << "]";
+			}
+		}
+		output << " = ";
+	}
+
 	void CodeGenerator::visit( SingleInit *init ) {
+		printDesignators( init->get_designators() );
 		init->get_value()->accept( *this );
 	}
 
 	void CodeGenerator::visit( ListInit *init ) {
+		printDesignators( init->get_designators() );
 		output << "{ ";
 		genCommaList( init->begin_initializers(), init->end_initializers() );
@@ -372,13 +392,20 @@
 
 	void CodeGenerator::visit( CastExpr *castExpr ) {
-		output << "((";
-		if ( castExpr->get_results().empty() ) {
-			output << "void" ;
-		} else {
-			output << genType( castExpr->get_results().front(), "" );
-		} // if
-		output << ")";
-		castExpr->get_arg()->accept( *this );
-		output << ")";
+		// if the cast is to an lvalue type, then the cast
+		// should be dropped, since the result of a cast is
+		// never an lvalue in C
+		if ( castExpr->get_results().front()->get_isLvalue() ) {
+			castExpr->get_arg()->accept( *this );
+		} else {
+			output << "((";
+			if ( castExpr->get_results().empty() ) {
+				output << "void" ;
+			} else {
+				output << genType( castExpr->get_results().front(), "" );
+			} // if
+			output << ")";
+			castExpr->get_arg()->accept( *this );
+			output << ")";			
+		}
 	}
   
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/CodeGen/CodeGenerator.h	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul 24 13:34:47 2015
-// Update Count     : 25
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 14:27:14 2015
+// Update Count     : 27
 //
 
@@ -95,4 +95,5 @@
 		std::ostream &output;
 
+		void printDesignators( std::list< Expression * > & );
 		static std::string printLabels ( std::list < Label > & );
 		void handleStorageClass( Declaration *decl );
Index: src/GenPoly/PolyMutator.cc
===================================================================
--- src/GenPoly/PolyMutator.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/GenPoly/PolyMutator.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Wed Jul 15 14:50:58 2015
-// Update Count     : 3
+// Last Modified On : Fri Aug 14 15:28:50 2015
+// Update Count     : 11
 //
 
@@ -20,5 +20,5 @@
 #include "SynTree/Statement.h"
 #include "SynTree/Mutator.h"
-
+#include "SynTree/Initializer.h"
 
 namespace GenPoly {
@@ -146,4 +146,11 @@
 	}
  
+ 
+	Initializer *PolyMutator::mutate( SingleInit *singleInit ) {
+		singleInit->set_value( mutateExpression( singleInit->get_value() ) );
+		return singleInit;
+	}
+
+
 	/* static class method */
 	void PolyMutator::makeTyVarMap( Type *type, TyVarMap &tyVarMap ) {
Index: src/GenPoly/PolyMutator.h
===================================================================
--- src/GenPoly/PolyMutator.h	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/GenPoly/PolyMutator.h	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue May 19 07:46:45 2015
-// Update Count     : 1
+// Last Modified By : Rob Schluntz
+// Last Modified On : Fri Aug 14 15:27:38 2015
+// Update Count     : 4
 //
 
@@ -45,5 +45,7 @@
   
 		virtual Expression* mutate(UntypedExpr *untypedExpr);
-  
+
+		virtual Initializer* mutate(SingleInit *SingleInit);
+
 		// template method
 		virtual void doBeginScope() {}
Index: src/GenPoly/Specialize.cc
===================================================================
--- src/GenPoly/Specialize.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/GenPoly/Specialize.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 13 15:54:07 2015
-// Update Count     : 6
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Sep 22 14:04:13 2015
+// Update Count     : 15
 //
 
@@ -200,4 +200,5 @@
 	Expression * Specialize::mutate( AddressExpr *addrExpr ) {
 		addrExpr->get_arg()->acceptMutator( *this );
+		assert( ! addrExpr->get_results().empty() );
 		addrExpr->set_arg( doSpecialization( addrExpr->get_results().front(), addrExpr->get_arg() ) );
 		return addrExpr;
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/Parser/ExpressionNode.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug 11 15:13:48 2015
-// Update Count     : 200
+// Last Modified On : Mon Oct  5 16:37:24 2015
+// Update Count     : 255
 // 
 
@@ -32,5 +32,5 @@
 ExpressionNode::ExpressionNode() : ParseNode(), argName( 0 ) {}
 
-ExpressionNode::ExpressionNode( const string *name_ ) : ParseNode( name_ ), argName( 0 ) {}
+ExpressionNode::ExpressionNode( const string *name ) : ParseNode( name ), argName( 0 ) {}
 
 ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ) {
@@ -290,4 +290,21 @@
 DesignatorNode::DesignatorNode( ExpressionNode *expr, bool isArrayIndex ) : isArrayIndex( isArrayIndex ) {
 	set_argName( expr );
+	assert( get_argName() );
+
+	if ( ! isArrayIndex ) {
+		if ( VarRefNode * var = dynamic_cast< VarRefNode * >( expr ) ) {
+
+			stringstream ss( var->get_name() );
+			double value;
+			if ( ss >> value ) {
+				// this is a floating point constant. It MUST be
+				// ".0" or ".1", otherwise the program is invalid
+				if ( ! (var->get_name() == ".0" || var->get_name() == ".1") ) {
+					throw SemanticError( "invalid designator name: " + var->get_name() );
+				} // if
+				var->set_name( var->get_name().substr(1) );
+			} // if
+		} // if
+	} // if
 }
 
@@ -295,10 +312,27 @@
 }
 
+class DesignatorFixer : public Mutator {
+public:
+	virtual Expression* mutate( NameExpr *nameExpr ) {
+		if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) {
+			Constant val( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nameExpr->get_name() );
+			delete nameExpr;
+			return new ConstantExpr( val );
+		}
+		return nameExpr;
+	}
+};
+
 Expression *DesignatorNode::build() const {
+	Expression * ret = get_argName()->build();
+
 	if ( isArrayIndex ) {
-		return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
-	} else {
-		return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
-	} // if
+		// need to traverse entire structure and change any instances of 0 or 1 to 
+		// ConstantExpr
+		DesignatorFixer fixer;
+		ret = ret->acceptMutator( fixer );
+	} // if
+
+	return ret;
 }
 
@@ -384,6 +418,6 @@
 
 CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2):
-	function( f ), arguments( arg1) {
-	arguments->set_link( arg2);
+	function( f ), arguments( arg1 ) {
+	arguments->set_link( arg2 );
 }
 
Index: src/Parser/InitializerNode.cc
===================================================================
--- src/Parser/InitializerNode.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/Parser/InitializerNode.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:20:24 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun  6 15:49:42 2015
-// Update Count     : 3
+// Last Modified On : Thu Oct  8 17:18:55 2015
+// Update Count     : 4
 // 
 
@@ -80,5 +80,5 @@
 
 	if ( aggregate ) {
-		assert( next_init() != 0 );
+		//assert( next_init() != 0 );
 
 		std::list< Initializer *> initlist;
Index: src/Parser/ParseNode.cc
===================================================================
--- src/Parser/ParseNode.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/Parser/ParseNode.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:26:29 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 30 14:55:54 2015
-// Update Count     : 26
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 13:26:00 2015
+// Update Count     : 36
 // 
 
@@ -20,9 +20,10 @@
 int ParseNode::indent_by = 4;
 
-ParseNode::ParseNode() : name( 0 ), next( 0 ) {};
-ParseNode::ParseNode( const string *name_ ) : name( name_ ), next( 0 ) {}
+ParseNode::ParseNode() : next( 0 ) {};
+ParseNode::ParseNode( const string *name ) : name( *name ), next( 0 ) { delete name; }
+ParseNode::ParseNode( const string &name ) : name( name ), next( 0 ) { }
 
 ParseNode::~ParseNode() {
-	delete next; delete name;
+	delete next;
 };
 
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/Parser/ParseNode.h	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:28:16 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug 11 15:11:29 2015
-// Update Count     : 145
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 13:27:11 2015
+// Update Count     : 172
 //
 
@@ -40,4 +40,5 @@
 	ParseNode();
 	ParseNode( const std::string * );
+	ParseNode( const std::string & );  // for copy constructing subclasses
 	virtual ~ParseNode();
 
@@ -49,5 +50,7 @@
 	virtual ParseNode *clone() const { return 0; };
 
-	const std::string &get_name() const { return *name; }
+	const std::string &get_name() const { return name; }
+	void set_name( const std::string &newValue ) { name = newValue; }
+
 	virtual void print( std::ostream &, int indent = 0 ) const;
 	virtual void printList( std::ostream &, int indent = 0 ) const;
@@ -55,5 +58,5 @@
 	ParseNode &operator,( ParseNode &);
   protected:
-	const std::string *name;
+	std::string name;
 	ParseNode *next;
 	static int indent_by;
Index: src/Parser/lex.cc
===================================================================
--- src/Parser/lex.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/Parser/lex.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -382,6 +382,6 @@
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 171
-#define YY_END_OF_BUFFER 172
+#define YY_NUM_RULES 178
+#define YY_END_OF_BUFFER 179
 /* This struct is not used in this scanner,
    but its presence is necessary. */
@@ -391,97 +391,100 @@
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[826] =
+static yyconst flex_int16_t yy_accept[852] =
     {   0,
-        0,    0,    0,    0,    0,    0,  108,  108,  111,  111,
-      172,  170,    7,    9,    8,  131,  110,   95,  136,  139,
-      107,  118,  119,  134,  132,  122,  133,  125,  135,  100,
-      101,  102,  123,  124,  141,  143,  142,  144,  170,   95,
-      116,  170,  117,  137,   95,   97,   95,   95,   95,   95,
-       95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
-       95,  120,  140,  121,  138,    7,  170,    4,    4,  171,
-       98,  171,   99,  108,  109,  115,  111,  112,    7,    9,
-        0,    8,  148,  166,   95,    0,  160,  130,  153,  161,
-      158,  145,  156,  146,  157,  155,    0,  105,    3,    0,
-
-      159,  105,  103,    0,    0,  103,  103,    0,    0,  103,
-      102,  102,  102,    0,  102,  128,  129,  127,  149,  151,
-      147,  152,  150,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   96,    0,
-      110,  107,   95,    0,    0,  163,   95,   95,   95,   95,
-       95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
-       95,   95,   36,   95,   95,   95,   95,   95,   95,   95,
-       95,   95,   95,   53,   95,   95,   95,   95,   95,   95,
-       95,   95,   95,   95,   95,   95,   95,   95,   95,  162,
-      154,    7,    0,    0,    0,    2,    0,    5,   98,    0,
-
-        0,    0,  108,    0,  114,  113,  113,    0,    0,    0,
-      111,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  126,  105,    0,  105,
-        0,    0,    6,    0,  103,    0,    0,    0,  105,    0,
-      103,  103,  103,  103,    0,  104,    0,    0,  102,  102,
-      102,  102,    0,  164,  165,    0,  168,  167,    0,    0,
-        0,   96,    0,    0,    0,    0,    0,    0,    0,   95,
-       95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
-       95,   95,   95,   95,   95,   95,   95,   95,   14,   95,
-       95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
-
-       95,   95,   95,   95,   95,   47,   95,   95,   95,   60,
-       95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
-       95,   95,   82,   95,   95,   95,   95,   95,   95,   95,
-        0,    0,    0,    0,    0,    0,    0,    0,  113,    0,
-        0,    0,    0,    0,  113,    0,    0,  169,    0,    0,
-        0,    0,    0,    0,    0,    0,  105,    0,    0,    0,
-      105,    0,  103,  103,    0,    0,  104,  104,    0,  104,
-        0,  104,  102,  102,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   95,   95,   95,   95,   95,   95,
-       95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
-
-       95,   95,   95,   95,   95,   95,   20,   95,   23,   95,
-       25,   95,   95,   95,   95,   95,   95,   39,   40,   95,
-       95,   95,   95,   95,   95,   95,   52,   95,   63,   95,
-       95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
-       83,   95,   95,   90,   95,   95,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  113,  113,  116,  116,
+      179,  177,    7,    9,    8,  136,  115,  100,  141,  144,
+      112,  123,  124,  139,  137,  127,  138,  130,  140,  105,
+      106,  107,  128,  129,  146,  148,  147,  149,  177,  100,
+      121,  177,  122,  142,  100,  102,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  125,  145,  126,  143,    7,  177,    4,    4,  178,
+      103,  178,  104,  113,  114,  120,  116,  117,    7,    9,
+        0,    8,  153,  172,  100,    0,  165,  135,  158,  166,
+      163,  150,  161,  151,  162,  160,    0,  110,    3,    0,
+
+      164,  110,  108,    0,    0,  108,  108,    0,    0,  108,
+      107,  107,  107,    0,  107,  133,  134,  132,  154,  156,
+      152,  157,  155,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  101,  171,
+        0,  115,  112,  100,    0,    0,  168,    0,  100,  100,
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,   39,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,   57,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  167,  159,    7,    0,    0,    0,    2,    0,
+
+        5,  103,    0,    0,    0,  113,    0,  119,  118,  118,
+        0,    0,    0,  116,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  131,
+      110,    0,  110,    0,    0,    6,    0,  108,    0,    0,
+        0,  110,    0,  108,  108,  108,  108,    0,  109,    0,
+        0,  107,  107,  107,  107,    0,  169,  170,    0,  175,
+      173,    0,    0,    0,  101,    0,    0,    0,    0,    0,
+        0,    0,    0,  100,   17,  100,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,   14,  100,  100,  100,  100,  100,  100,  100,
+
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,   51,  100,  100,  100,   64,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,  100,  100,   87,  100,
+      100,  100,  100,  100,  100,  100,    0,    0,    0,    0,
+        0,    0,    0,    0,  118,    0,    0,    0,    0,    0,
+      118,    0,    0,  176,    0,    0,    0,    0,    0,    0,
+        0,    0,  110,    0,    0,    0,  110,    0,  108,  108,
+        0,    0,  109,  109,    0,  109,    0,  109,  107,  107,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      113,    0,    0,    0,    0,    0,  105,    0,    0,    0,
-        0,    0,    0,  104,  104,    0,  106,    0,  104,  104,
+      174,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  100,   21,  100,   24,  100,   27,  100,  100,
+      100,  100,  100,  100,  100,   42,  100,   44,  100,  100,
+      100,  100,  100,  100,  100,   56,  100,   67,  100,  100,
+      100,  100,  100,  100,  100,  100,  100,  100,  100,   88,
+      100,  100,   95,  100,  100,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  118,
+        0,    0,    0,    0,    0,  110,    0,    0,    0,    0,
+        0,    0,  109,  109,    0,  111,    0,  109,  109,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   95,   95,   21,   95,   95,   95,   95,
-
-       95,   95,   95,   15,   95,   95,   95,   95,   95,   95,
-       95,   95,   95,   95,   95,   95,   95,   22,   24,   95,
-       30,   95,   95,   95,   95,   38,   95,   95,   95,   45,
-       95,   95,   50,   95,   95,   95,   95,   95,   71,   95,
-       95,   95,   95,   95,   81,   95,   95,   88,   95,   95,
-       94,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,  100,  100,   22,  100,  100,  100,  100,  100,
+      100,  100,   15,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,   23,   25,  100,   32,
+      100,  100,  100,  100,  100,   41,  100,  100,  100,  100,
+       49,  100,  100,   54,  100,  100,  100,  100,  100,   75,
+      100,  100,  100,  100,  100,   85,  100,  100,   93,  100,
+      100,   99,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      106,    0,    0,  104,  106,  106,    0,  104,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   95,    0,
-       95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
-
-       95,   95,   95,   95,   95,   55,   95,   95,   95,   95,
-       95,   95,   95,   26,   95,   95,   95,   37,   42,   95,
-       95,   48,   95,   57,   64,   95,   95,   70,   72,   75,
-       76,   78,   79,   95,   85,   95,   95,    0,    1,    0,
-        0,    0,    0,    0,    0,   98,    0,    0,    0,  113,
-        0,    0,    0,    0,  106,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   95,   95,   17,   95,   95,
-       95,   95,   95,   95,   95,   16,   95,   95,   31,   95,
-       95,   95,   95,   95,   95,   95,   95,   95,   95,   33,
-       95,   35,   95,   44,   49,   95,   95,   84,   95,   95,
-
+        0,  111,    0,    0,  109,  111,  111,    0,  109,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  100,
+
+        0,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,   59,  100,  100,  100,
+      100,  100,  100,  100,  100,   28,  100,  100,  100,  100,
+       40,   43,   46,  100,  100,   52,  100,   61,   68,  100,
+      100,   74,   76,   79,   80,   82,   83,  100,  100,   90,
+      100,  100,    0,    1,    0,    0,    0,    0,    0,    0,
+      103,    0,    0,    0,  118,    0,    0,    0,    0,  111,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   10,   11,   27,   51,   95,   95,   95,
-       95,   95,   95,   95,   95,   95,   95,   56,   58,   61,
-       95,   95,   73,   86,   95,   34,   43,   66,   67,   89,
-       91,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   95,   65,   95,   95,   12,   95,   28,
-       32,   95,   95,   95,   62,   95,   95,   95,   95,    0,
+      100,  100,   18,  100,  100,  100,  100,  100,  100,  100,
+       16,  100,  100,   33,  100,  100,  100,  100,  100,  100,
+
+      100,  100,  100,  100,  100,   35,  100,   37,   38,  100,
+       48,   53,  100,  100,  100,   89,  100,  100,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   54,   95,   95,   95,   95,   95,   95,   46,
-       59,   68,   74,   87,   92,    0,    0,    0,    0,    0,
-
-        0,    0,    0,   95,   95,   13,   18,   29,   95,   95,
-       95,    0,    0,   95,   95,   95,   95,   69,   93,   95,
-       80,   19,   41,   77,    0
+        0,   10,   11,   29,   55,  100,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,   60,   62,   65,  100,  100,
+       77,   91,  100,  100,   36,   47,   70,   71,  100,   94,
+       96,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  100,   69,  100,  100,   12,  100,   30,
+       34,  100,  100,  100,   66,  100,  100,  100,  100,  100,
+      100,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,   58,  100,  100,  100,  100,  100,
+      100,   50,   63,   72,   78,   92,   97,  100,  100,    0,
+        0,    0,    0,    0,    0,    0,    0,  100,  100,   13,
+       19,   31,  100,  100,  100,   26,   86,    0,    0,  100,
+      100,  100,  100,   73,   98,  100,   84,   20,   45,   81,
+        0
     } ;
 
@@ -496,10 +499,10 @@
        32,   33,   34,   35,   36,   37,   38,   39,   40,   41,
        42,   11,   43,   11,   11,   44,   11,   45,   11,   46,
-       11,   11,   47,   48,   49,   11,   11,   50,   11,   11,
-       51,   52,   53,   54,   55,   56,   57,   58,   59,   60,
-
-       61,   62,   63,   64,   65,   11,   66,   67,   68,   69,
-       70,   71,   11,   72,   73,   74,   75,   76,   77,   78,
-       79,   80,   81,   82,   83,   84,    1,    1,    1,    1,
+       11,   47,   48,   49,   50,   11,   11,   51,   11,   11,
+       52,   53,   54,   55,   56,   57,   58,   59,   60,   61,
+
+       62,   63,   64,   65,   66,   11,   67,   68,   69,   70,
+       71,   72,   11,   73,   74,   75,   76,   77,   78,   79,
+       80,   81,   82,   83,   84,   85,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -518,246 +521,252 @@
     } ;
 
-static yyconst flex_int32_t yy_meta[85] =
+static yyconst flex_int32_t yy_meta[86] =
     {   0,
         1,    1,    2,    1,    1,    1,    1,    1,    3,    1,
         4,    1,    1,    5,    1,    1,    1,    1,    1,    1,
         6,    1,    7,    7,    7,    7,    7,    7,    1,    1,
-        1,    1,    1,    1,    1,    8,    8,    8,    8,    8,
-        8,    4,    4,    9,    4,   10,    4,    4,    9,    4,
-        1,   11,    1,    1,   12,    1,    8,    8,    8,    8,
-        8,    8,    4,    4,    4,    4,    9,    4,    4,    4,
-       10,    4,    4,    4,    9,    4,    4,    4,    4,    4,
-        1,    1,    1,    1
+        1,    8,    1,    1,    1,    9,    9,    9,    9,    9,
+        9,    4,    4,   10,    4,   11,    4,    4,    4,   10,
+        4,    1,   12,    1,    1,   13,    1,    9,    9,    9,
+        9,    9,    9,    4,    4,    4,    4,   10,    4,    4,
+        4,   11,    4,    4,    4,   10,    4,    4,    4,    4,
+        4,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[999] =
+static yyconst flex_int16_t yy_base[1025] =
     {   0,
-        0,   83, 2266, 2265,   93,    0,  175,  176,  177,  178,
-     2281, 2568,  189, 2568,  195,   54, 2568, 2223,   59,  171,
-     2568, 2568, 2568,   55,  186, 2568,  189,  187,  202,  214,
-      272,    0, 2241, 2568,  214, 2241,  150,  340, 2215,  222,
-     2568,  157, 2568, 2234,  277, 2568,  192,  133,  196,  198,
-      204,  271,  155,  218,  181,  200,  266,  238,  337,  224,
-      227, 2568,  223, 2568, 2231,  372,  400, 2568, 2237, 2568,
-     2206,  213, 2568,    0, 2568,  427,    0, 2568,  363, 2568,
-      381,  393, 2568,  498, 2205,  229, 2568, 2568, 2568, 2568,
-     2568, 2217, 2568, 2216, 2568, 2568, 2228,  558, 2568, 2240,
-
-     2568,  603,  385,  443,  419,  259,  239,  280,  399,  406,
-        0,  305,  240,  335,  411, 2568, 2568, 2568, 2210, 2568,
-     2568, 2568, 2209, 2188,  215,  277, 2203,  310,  383,  384,
-      327,  425,  380,  399, 2180,  448, 2130,  458, 2160,  288,
-     2568, 2568,  486, 2151, 2150, 2568,  420,  423,  439,  456,
-      445,  455,  460,  329,  483,  469,  462,  467,  480,  494,
-      396,  471,  472,  487,  470,  513,  489,  506,  508,  509,
-      386,  510,  516, 2152,  520,  522,  518,  541,  526,  543,
-      540,  551,  549,  553,  565,  598,  572,  581,  557, 2568,
-     2568,  669,  659, 2195,  686, 2568,  692, 2568, 2145,  559,
-
-     2141, 2135,    0,  649, 2568, 2568,  679, 2134, 2133, 2127,
-        0, 2149,  535,  606,  607,  674,  635,  625,  646,  664,
-      689, 2146,  692,  693, 2119, 2118, 2568,  712,  723, 2568,
-     2117, 2165, 2568,  714,    0,  555,  705,  759,  765,  776,
-      593, 2568, 2123, 2099,    0,  784, 2141,  787,  632, 2568,
-     2116, 2087,  798, 2568, 2568, 2119, 2568, 2568,  710,  725,
-     2099, 2094,  720, 2090, 2089, 2085,    0, 2084,    0,  712,
-      548,  710,  766,  767,  597,  745,  711,  777,  764,  788,
-      720,  783,  792,  713,  639,  789,  611,  793, 2086,  794,
-      791,  795,  810,  800,  805,  813,  814,  361,  818,  815,
-
-      816,  821,  825,  822,  826,  828,  829,  836,  838, 2080,
-      841,  842,  843,  839,  844,  845,  846,  849,  847,  853,
-      855,  860, 2079,  859,  905,  864,  866,  872,  870,  871,
-      933,  930, 2075, 2069, 2068,    0, 2067,    0,  920,  924,
-     2061,    0, 2060,    0, 2059,    0, 2074, 2568,  919,  920,
-     2054, 2051,    0, 2045,    0,  935,  941,  953,  963,  974,
-      986,  996, 2568, 2568,  960,  961, 1013,  989, 1047,  926,
-     1045,  968, 2568, 2568, 2044, 2043, 2037,    0, 2036,    0,
-     2035,    0, 2014,    0,  874,  873,  987,  903,  931,  932,
-      984,  920,  994,  995,  974,  976, 1009, 1024, 1017,  992,
-
-     1029, 1027,  952, 1030, 1034, 1040, 2016, 1031, 2011, 1047,
-     2010, 1049, 1043, 1054, 1038, 1056, 1057, 2009, 2003, 1052,
-     1058, 1062, 1069, 1073, 1074, 1075, 2002, 1076, 2001, 1078,
-     1079, 1082, 1083, 1085, 1081, 1086, 1092, 1089, 1099,  583,
-     1108, 1095, 1087, 1995, 1097, 1109, 1160, 1991,    0, 1990,
-        0, 1984,    0, 1983,    0, 1149, 1982,    0, 1978,    0,
-     1977, 1976, 1972,    0, 1971,    0, 1156, 1162, 1207, 1121,
-     1218, 1149, 1120, 1144, 2568, 1224, 1230, 1241, 1981, 1954,
-     1959, 1957,    0, 1953,    0, 1951,    0, 1945,    0, 1944,
-        0, 1943,    0, 1125, 1144, 1940, 1146, 1149, 1147, 1153,
-
-     1150, 1218, 1162, 1110, 1156, 1155, 1164, 1211, 1224, 1225,
-     1226,  164, 1228, 1208, 1170, 1232, 1238, 1939, 1938, 1235,
-     1932, 1227, 1231, 1234, 1242, 1931, 1246, 1247, 1250, 1930,
-     1252, 1255, 1924, 1257, 1261, 1254, 1256, 1258, 1923, 1264,
-      709, 1271, 1262, 1268, 1922, 1273, 1277, 1916, 1274, 1279,
-     1915, 1963, 1905,    0, 1904,    0, 1903,    0, 1897,    0,
-     1896,    0, 1895,    0, 1891,    0, 1890,    0, 1322, 1328,
-     1334, 1345, 1889, 2568, 1356, 2568, 1380, 2568, 1885,    0,
-     1884,    0, 1883,    0, 1850,    0,    0,    0, 1852,    0,
-     1342, 1281, 1315, 1322, 1333, 1289, 1283, 1338, 1340, 1336,
-
-     1361, 1343, 1341, 1362, 1364, 1365, 1367, 1397, 1373, 1314,
-     1376, 1375, 1377, 1847, 1378, 1380, 1382, 1846, 1845, 1381,
-     1387, 1839, 1389, 1838, 1837, 1396, 1391, 1833, 1832, 1831,
-     1827, 1826, 1825, 1392, 1818, 1407, 1394, 1846, 2568, 1793,
-        0, 1792,    0,    0,    0, 1791,    0,    0,    0, 2568,
-        0,    0,    0,    0, 1446, 1452, 1497, 1787,    0, 1786,
-        0,    0,    0,    0, 1782, 1408, 1430, 1784, 1410, 1432,
-     1437, 1411, 1412, 1443, 1433, 1783, 1447, 1445, 1457, 1413,
-     1476, 1463, 1450, 1477, 1475, 1474, 1480, 1479, 1481, 1779,
-     1482, 1778, 1483, 1777, 1773, 1464, 1485, 1772, 1490, 1486,
-
-        0,    0, 1768, 1764, 1763, 1762, 1537,    0, 1758, 1757,
-     1756, 1752, 1751, 1753, 1749, 1748, 1747, 1496, 1497, 1499,
-     1502, 1493, 1492, 1501, 1518, 1519, 1547, 1738, 1522, 1737,
-     1523, 1458, 1528, 1530, 1524, 1734, 1733, 1732, 1715, 1707,
-     1706, 1700, 1694, 1691, 1683, 1682, 1663, 1662, 1661, 1653,
-     1652, 1613, 1612, 1529, 1614, 1534, 1535, 1538, 1536, 1542,
-     1613, 1543, 1562, 1546, 1612, 1544, 1548, 1554, 1550, 1608,
-     1607, 1606, 1605, 1604, 1603, 1602, 1601, 1600, 1598, 1597,
-     1567, 1566, 1505, 1552, 1560, 1565, 1563, 1571, 1564, 1286,
-     1285, 1575, 1188, 1158, 1576, 1001,  997,  950,  901,  753,
-
-      752,  642,  556, 1577, 1580,  519, 1584,  475, 1588, 1589,
-     1590,  471,  407, 1582, 1583, 1594, 1596,  353,  298, 1595,
-      274,  234,  233,  165, 2568, 1669, 1681, 1693, 1702, 1711,
-     1723, 1732, 1744, 1756, 1768, 1775, 1784, 1790, 1796, 1802,
-     1808, 1814, 1820, 1826, 1832, 1838, 1850, 1856, 1859, 1866,
-     1868, 1874, 1880, 1886, 1888, 1894, 1899, 1911, 1923, 1929,
-     1935, 1941, 1947, 1949, 1955, 1957, 1963, 1965, 1971, 1973,
-     1979, 1981, 1987, 1989, 1995, 1997, 2003, 2010, 2016, 2022,
-     2028, 2034, 2036, 2042, 2044, 2050, 2052, 2058, 2063, 2075,
-     2081, 2087, 2089, 2095, 2097, 2103, 2105, 2111, 2113, 2119,
-
-     2121, 2127, 2129, 2135, 2141, 2143, 2149, 2151, 2157, 2163,
-     2169, 2171, 2177, 2179, 2185, 2187, 2193, 2195, 2201, 2203,
-     2209, 2214, 2226, 2232, 2238, 2240, 2246, 2248, 2254, 2256,
-     2262, 2264, 2270, 2272, 2278, 2280, 2286, 2288, 2294, 2296,
-     2302, 2308, 2310, 2316, 2318, 2324, 2326, 2332, 2334, 2336,
-     2341, 2347, 2355, 2361, 2367, 2369, 2375, 2377, 2379, 2384,
-     2390, 2392, 2394, 2396, 2398, 2400, 2402, 2404, 2410, 2412,
-     2418, 2420, 2422, 2424, 2426, 2435, 2441, 2443, 2445, 2451,
-     2457, 2463, 2465, 2471, 2477, 2483, 2489, 2495, 2501, 2507,
-     2513, 2519, 2525, 2531, 2537, 2543, 2549, 2555
-
+        0,   84, 2247, 2245,   94,    0,  177,  178,  179,  180,
+     2259, 2762,  191, 2762,  197,   55, 2762, 2203,   60,  173,
+     2762, 2762, 2762,   56,  188, 2762,  191,  189,  204,  216,
+      275,    0, 2222, 2762,  216, 2222,  152,  344,  155,  220,
+     2762,  159, 2762,  217,  226, 2762,  185,  154,  212,  251,
+      237,  270,  235,  257,  241,  193,  305,  314,  333,  238,
+      228, 2762,  225, 2762, 2218,  402,  390, 2762, 2227, 2762,
+     2193,  204, 2762,    0, 2762,  426,    0, 2762,  417, 2762,
+      439,  451, 2762,  498, 2192,  235, 2762, 2762, 2762, 2762,
+     2762, 2210, 2762, 2208, 2762, 2762, 2218,  559, 2762, 2235,
+
+     2762,  605,  413,  498,  516,  289,  253,  197,  293,  305,
+        0,  319,  280,  231,  334, 2762, 2762, 2762, 2205, 2762,
+     2762, 2762, 2203, 2200,  298,  356, 2213,  366,  429,  439,
+      398,  434,  438,  448, 2194,  443, 2143,  459, 2172, 2762,
+      335, 2762, 2762,  495, 2166, 2163, 2762, 2136,  460,  282,
+      297,  329,  409,  437,  442,  281,  503,  414,  474,  372,
+      484,  493,  378,  434,  433,  325,  494,  459,  499,  492,
+      502,  509,  461,  301,  515,  535, 2164,  536,  520,  538,
+      544,  541,  545,  567,  539,  421,  554,  563,  597,  570,
+      571,  548, 2762, 2762,  652,  662, 2212,  668, 2762,  674,
+
+     2762, 2159,  567, 2153, 2152,    0,  645, 2762, 2762,  680,
+     2151, 2149, 2146,    0, 2167,  466,  640,  646,  689,  688,
+      650,  678,  679,  682, 2164,  685,  692, 2141, 2139, 2762,
+      714,  707, 2762, 2136, 2186, 2762,  703,    0,  697,  760,
+      766,  779,  801,  696, 2762, 2144, 2119,    0,  787, 2164,
+      825,  698, 2762, 2138, 2111,  841, 2762, 2762, 2144, 2762,
+     2762,  717,  718, 2123, 2122,  719, 2099, 2097, 2096,    0,
+     2093,    0, 2062,  585,  589,  704,  610,  675,  703,  540,
+      706,  707,  743,  726,  720,  745,  787,  709,  748,  715,
+      756,  759, 2092,  761,  781,  792,  817,  785,  791,  808,
+
+      788,  818,  819,  807,  822,  821,  820,  832,  833,  834,
+      835,  837,  838,  843,  845, 2091,  276,  847,  850,  846,
+      849,  851,  852,  855,  853,  854,  856,  865, 2089,  867,
+      904,  866,  873,  197,  874,  870,  938,  939, 2083, 2080,
+     2079,    0, 2078,    0,  926,  930, 2076,    0, 2073,    0,
+     2070,    0, 2091, 2762,  901,  912, 2070, 2066,    0, 2063,
+        0,  935,  942,  953,  964,  976,  989,  998, 2762, 2762,
+      939,  962, 1014,  987, 1023,  928, 1041, 1005, 2762, 2762,
+     2060, 2059, 2058,    0, 2056,    0, 2053,    0, 2052,    0,
+     2762,  911,  940,  976,  966,  881, 1003,  944, 1000,  974,
+
+      941, 1015, 1018, 1019, 1021, 1006, 1025, 1027, 1039, 1041,
+     1012, 1046, 1048, 2054, 1047, 2052,  975, 2049, 1050, 1051,
+     1057, 1052, 1053, 1054, 1058, 2048, 1068, 2047, 1072, 1055,
+     1074, 1076, 1078, 1079, 1081, 2045, 1080, 2042, 1082, 1085,
+     1084, 1087, 1086, 1091, 1094, 1088, 1095, 1096,  588, 1109,
+     1111, 1110, 2038, 1113, 1114, 1166, 2031,    0, 2029,    0,
+     2027,    0, 2024,    0, 1159, 2022,    0, 2020,    0, 2017,
+     2014, 2013,    0, 2012,    0, 1166, 1172, 1218, 1131, 1229,
+     1155, 1132, 1129, 2762, 1235, 1242, 1253, 2022, 1995, 2004,
+     2003,    0, 2002,    0, 2000,    0, 1997,    0, 1994,    0,
+
+     1993,    0, 1149, 1120, 1995, 1153, 1159, 1164, 1156, 1167,
+     1165, 1161,  233, 1211, 1219, 1162, 1186, 1229, 1173, 1185,
+      166, 1235, 1236, 1222, 1237, 1242, 1993, 1249, 1241, 1990,
+     1171, 1248, 1240, 1251, 1253, 1987, 1254, 1256, 1259, 1260,
+     1986, 1261, 1264, 1985, 1268, 1270, 1267, 1272, 1274, 1983,
+     1278,  921, 1280, 1281, 1282, 1290, 1283, 1288, 1980, 1293,
+     1295, 1977, 2026, 1972,    0, 1970,    0, 1967,    0, 1964,
+        0, 1963,    0, 1962,    0, 1960,    0, 1957,    0, 1341,
+     1347, 1354, 1365, 1954, 2762, 1377, 2762, 1388, 2762, 1953,
+        0, 1952,    0, 1950,    0, 1947,    0,    0,    0, 1949,
+
+        0, 1366, 1297, 1296, 1333, 1306, 1331, 1300, 1301, 1353,
+     1115, 1343, 1367, 1355, 1372, 1373, 1299, 1383, 1402, 1375,
+     1381, 1385, 1378, 1386, 1388, 1948, 1393, 1399, 1404, 1405,
+     1946, 1943, 1942, 1407, 1406, 1941, 1411, 1939, 1906, 1409,
+     1334, 1904, 1903, 1900, 1897, 1896, 1895, 1410, 1413, 1893,
+     1412, 1416, 1940, 2762, 1884,    0, 1883,    0,    0,    0,
+     1885,    0,    0,    0, 2762,    0,    0,    0,    0, 1464,
+     1470, 1516, 1880,    0, 1877,    0,    0,    0,    0, 1876,
+     1425, 1420, 1878, 1424, 1447, 1448, 1429, 1456, 1457, 1451,
+     1876, 1462, 1463, 1475, 1471, 1493, 1481, 1494, 1496, 1495,
+
+     1497, 1499, 1466, 1500, 1483, 1873, 1502, 1872, 1871, 1482,
+     1869, 1866, 1501, 1506, 1508, 1862, 1509, 1514,    0,    0,
+     1855, 1851, 1835, 1834, 1560,    0, 1833, 1831, 1828, 1827,
+     1826, 1827, 1824, 1823, 1822, 1516, 1520, 1522, 1417, 1515,
+     1518, 1512, 1539, 1540, 1552, 1820, 1543, 1817, 1544, 1548,
+     1551, 1556, 1545, 1526, 1816, 1815, 1813, 1810, 1550, 1809,
+     1808, 1803, 1800, 1799, 1798, 1796, 1793, 1792, 1791, 1789,
+     1786, 1785, 1784, 1557, 1785, 1558, 1562, 1561, 1565, 1566,
+     1782, 1567, 1594, 1571, 1781, 1570, 1572, 1578, 1577, 1582,
+     1583, 1777, 1775, 1768, 1766, 1765, 1762, 1761, 1760, 1758,
+
+     1741, 1732, 1731, 1728, 1724, 1576, 1588, 1590, 1591, 1601,
+     1589, 1721, 1714, 1602, 1712, 1711, 1607, 1603, 1608, 1687,
+     1686, 1685, 1678, 1676, 1675, 1633, 1632, 1609, 1611, 1632,
+     1619, 1626, 1620, 1621, 1625, 1596, 1477, 1462, 1152, 1613,
+     1614, 1627, 1631, 1119, 1016, 1615,  762,  725,  676,  549,
+     2762, 1690, 1703, 1716, 1726, 1736, 1749, 1759, 1772, 1785,
+     1798, 1806, 1816, 1823, 1830, 1837, 1844, 1851, 1858, 1865,
+     1872, 1879, 1892, 1899, 1903, 1911, 1914, 1921, 1928, 1935,
+     1938, 1945, 1951, 1964, 1977, 1984, 1991, 1998, 2005, 2008,
+     2015, 2018, 2025, 2028, 2035, 2038, 2045, 2048, 2055, 2058,
+
+     2065, 2068, 2075, 2083, 2090, 2097, 2104, 2111, 2114, 2121,
+     2124, 2131, 2134, 2141, 2147, 2160, 2167, 2174, 2177, 2184,
+     2187, 2194, 2197, 2204, 2207, 2214, 2217, 2224, 2227, 2234,
+     2241, 2244, 2251, 2254, 2261, 2268, 2275, 2278, 2285, 2288,
+     2295, 2298, 2305, 2308, 2315, 2318, 2325, 2331, 2344, 2351,
+     2358, 2361, 2368, 2371, 2378, 2381, 2388, 2391, 2398, 2401,
+     2408, 2411, 2418, 2421, 2428, 2431, 2438, 2445, 2448, 2455,
+     2458, 2465, 2468, 2475, 2478, 2481, 2487, 2494, 2503, 2510,
+     2517, 2520, 2527, 2530, 2533, 2539, 2546, 2549, 2552, 2555,
+     2558, 2561, 2564, 2567, 2574, 2577, 2584, 2587, 2590, 2593,
+
+     2596, 2606, 2613, 2616, 2619, 2626, 2633, 2640, 2643, 2650,
+     2657, 2664, 2671, 2678, 2685, 2692, 2699, 2706, 2713, 2720,
+     2727, 2734, 2741, 2748
     } ;
 
-static yyconst flex_int16_t yy_def[999] =
+static yyconst flex_int16_t yy_def[1025] =
     {   0,
-      825,    1,  826,  826,  825,    5,  827,  827,  828,  828,
-      825,  825,  825,  825,  825,  825,  825,  829,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,   31,  825,  825,  825,  825,  825,  825,  830,  829,
-      825,  825,  825,  825,  829,  825,  829,  829,  829,  829,
-      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
-      829,  825,  825,  825,  825,  825,  831,  825,  825,  825,
-      832,  825,  825,  833,  825,  825,  834,  825,  825,  825,
-      825,  825,  825,  825,  829,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  835,
-
-      825,  825,   30,  825,  825,  825,  825,  836,   30,  825,
-       31,  825,  825,   31,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  837,  825,
-      825,  825,  829,  838,  839,  825,  829,  829,  829,  829,
-      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
-      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
-      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
-      829,  829,  829,  829,  829,  829,  829,  829,  829,  825,
-      825,  825,  831,  831,  831,  825,  831,  825,  832,  825,
-
-      840,  841,  833,  825,  825,  825,  825,  842,  843,  844,
-      834,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  845,  846,  825,  825,  825,  825,
-      228,  847,  825,  825,  103,  103,  825,  825,  825,  825,
-      825,  825,  825,  825,  848,  849,  850,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  837,  825,  851,  852,  853,  854,  855,  856,  857,
-      857,  857,  857,  857,  857,  857,  857,  857,  857,  857,
-      857,  857,  857,  857,  857,  857,  857,  857,  857,  857,
-      857,  857,  857,  857,  857,  857,  857,  857,  857,  857,
-
-      857,  857,  857,  857,  857,  857,  857,  857,  857,  857,
-      857,  857,  857,  857,  857,  857,  857,  857,  857,  857,
-      857,  857,  857,  857,  857,  857,  857,  857,  857,  857,
-      858,  859,  860,  861,  862,  863,  864,  865,  825,  825,
-      866,  867,  868,  869,  870,  871,  825,  825,  825,  825,
-      825,  872,  873,  874,  875,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  876,  877,  878,  825,  825,  825,
-      878,  825,  825,  825,  879,  880,  881,  882,  883,  884,
-      885,  886,  887,  888,  889,  889,  889,  889,  889,  889,
-      889,  889,  889,  889,  889,  889,  889,  889,  889,  889,
-
-      889,  889,  889,  889,  889,  889,  889,  889,  889,  889,
-      889,  889,  889,  889,  889,  889,  889,  889,  889,  889,
-      889,  889,  889,  889,  889,  889,  889,  889,  889,  889,
-      889,  889,  889,  889,  889,  889,  889,  889,  889,  889,
-      889,  889,  889,  889,  889,  889,  890,  891,  892,  893,
-      894,  895,  896,  897,  898,  825,  899,  900,  901,  902,
-      903,  903,  904,  905,  906,  907,  825,  825,  825,  908,
-      825,  908,  825,  825,  825,  825,  825,  825,  825,  825,
-      909,  910,  911,  912,  913,  914,  915,  916,  917,  918,
-      919,  920,  921,  922,  922,  922,  922,  922,  922,  922,
-
-      922,  922,  922,  922,  922,  922,  922,  922,  922,  922,
-      922,  922,  922,  922,  922,  922,  922,  922,  922,  922,
-      922,  922,  922,  922,  922,  922,  922,  922,  922,  922,
-      922,  922,  922,  922,  922,  922,  922,  922,  922,  922,
-      922,  922,  922,  922,  922,  922,  922,  922,  922,  922,
-      922,  923,  924,  925,  926,  927,  928,  929,  930,  931,
-      932,  933,  934,  935,  936,  937,  938,  939,  825,  825,
-      825,  825,  940,  825,  825,  825,  825,  825,  941,  942,
-      943,  944,  945,  946,  947,  948,  949,  950,  951,  952,
-      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
-
-      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
-      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
-      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
-      951,  951,  951,  951,  951,  951,  951,  953,  825,  954,
-      955,  956,  957,  958,  959,  960,  961,  962,  963,  825,
-      964,  965,  966,  967,  825,  825,  825,  968,  969,  970,
-      971,  972,  973,  974,  975,  976,  976,  976,  976,  976,
-      976,  976,  976,  976,  976,  976,  976,  976,  976,  976,
-      976,  976,  976,  976,  976,  976,  976,  976,  976,  976,
-      976,  976,  976,  976,  976,  976,  976,  976,  976,  976,
-
-      977,  978,  956,  979,  980,  981,  825,  982,  968,  970,
-      983,  984,  975,  976,  976,  976,  976,  976,  976,  976,
-      976,  976,  976,  976,  976,  976,  976,  976,  976,  976,
-      976,  976,  976,  976,  976,  976,  976,  976,  976,  976,
-      976,  985,  986,  979,  987,  980,  988,  981,  989,  990,
-      983,  991,  984,  976,  976,  976,  976,  976,  976,  976,
-      976,  976,  976,  976,  976,  976,  976,  976,  976,  992,
-      985,  993,  986,  994,  987,  995,  988,  996,  989,  997,
-      990,  991,  976,  976,  976,  976,  976,  976,  976,  976,
-      976,  976,  976,  976,  976,  998,  992,  993,  994,  995,
-
-      970,  996,  997,  976,  976,  976,  976,  976,  976,  976,
-      976,  998,  970,  976,  976,  976,  976,  976,  976,  976,
-      976,  976,  976,  976,    0,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825
-
+      851,    1,  852,  852,  851,    5,  853,  853,  854,  854,
+      851,  851,  851,  851,  851,  851,  851,  855,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,   31,  851,  851,  851,  851,  851,  851,  856,  855,
+      851,  851,  851,  851,  855,  851,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  851,  851,  851,  851,  851,  857,  851,  851,  851,
+      858,  851,  851,  859,  851,  851,  860,  851,  851,  851,
+      851,  851,  851,  851,  855,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  861,
+
+      851,  851,   30,  851,  851,  851,  851,  862,   30,  851,
+       31,  851,  851,   31,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  863,  851,
+      851,  851,  851,  855,  864,  865,  851,  851,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  851,  851,  851,  857,  857,  857,  851,  857,
+
+      851,  858,  851,  866,  867,  859,  851,  851,  851,  851,
+      868,  869,  870,  860,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  871,  872,  851,
+      851,  851,  851,  231,  873,  851,  851,  103,  103,  851,
+      851,  851,  851,  851,  851,  851,  851,  874,  875,  876,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  863,  851,  877,  878,  879,  880,
+      881,  882,  851,  883,  883,  883,  883,  883,  883,  883,
+      883,  883,  883,  883,  883,  883,  883,  883,  883,  883,
+      883,  883,  883,  883,  883,  883,  883,  883,  883,  883,
+
+      883,  883,  883,  883,  883,  883,  883,  883,  883,  883,
+      883,  883,  883,  883,  883,  883,  883,  883,  883,  883,
+      883,  883,  883,  883,  883,  883,  883,  883,  883,  883,
+      883,  883,  883,  883,  883,  883,  884,  885,  886,  887,
+      888,  889,  890,  891,  851,  851,  892,  893,  894,  895,
+      896,  897,  851,  851,  851,  851,  851,  898,  899,  900,
+      901,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      902,  903,  904,  851,  851,  851,  904,  851,  851,  851,
+      905,  906,  907,  908,  909,  910,  911,  912,  913,  914,
+      851,  915,  915,  915,  915,  915,  915,  915,  915,  915,
+
+      915,  915,  915,  915,  915,  915,  915,  915,  915,  915,
+      915,  915,  915,  915,  915,  915,  915,  915,  915,  915,
+      915,  915,  915,  915,  915,  915,  915,  915,  915,  915,
+      915,  915,  915,  915,  915,  915,  915,  915,  915,  915,
+      915,  915,  915,  915,  915,  915,  915,  915,  915,  915,
+      915,  915,  915,  915,  915,  916,  917,  918,  919,  920,
+      921,  922,  923,  924,  851,  925,  926,  927,  928,  929,
+      929,  930,  931,  932,  933,  851,  851,  851,  934,  851,
+      934,  851,  851,  851,  851,  851,  851,  851,  851,  935,
+      936,  937,  938,  939,  940,  941,  942,  943,  944,  945,
+
+      946,  947,  948,  948,  948,  948,  948,  948,  948,  948,
+      948,  948,  948,  948,  948,  948,  948,  948,  948,  948,
+      948,  948,  948,  948,  948,  948,  948,  948,  948,  948,
+      948,  948,  948,  948,  948,  948,  948,  948,  948,  948,
+      948,  948,  948,  948,  948,  948,  948,  948,  948,  948,
+      948,  948,  948,  948,  948,  948,  948,  948,  948,  948,
+      948,  948,  949,  950,  951,  952,  953,  954,  955,  956,
+      957,  958,  959,  960,  961,  962,  963,  964,  965,  851,
+      851,  851,  851,  966,  851,  851,  851,  851,  851,  967,
+      968,  969,  970,  971,  972,  973,  974,  975,  976,  977,
+
+      978,  977,  977,  977,  977,  977,  977,  977,  977,  977,
+      977,  977,  977,  977,  977,  977,  977,  977,  977,  977,
+      977,  977,  977,  977,  977,  977,  977,  977,  977,  977,
+      977,  977,  977,  977,  977,  977,  977,  977,  977,  977,
+      977,  977,  977,  977,  977,  977,  977,  977,  977,  977,
+      977,  977,  979,  851,  980,  981,  982,  983,  984,  985,
+      986,  987,  988,  989,  851,  990,  991,  992,  993,  851,
+      851,  851,  994,  995,  996,  997,  998,  999, 1000, 1001,
+     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
+     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
+
+     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
+     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1003, 1004,
+      982, 1005, 1006, 1007,  851, 1008,  994,  996, 1009, 1010,
+     1001, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
+     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
+     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
+     1002, 1011, 1012, 1005, 1013, 1006, 1014, 1007, 1015, 1016,
+     1009, 1017, 1010, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
+     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
+     1002, 1018, 1011, 1019, 1012, 1020, 1013, 1021, 1014, 1022,
+
+     1015, 1023, 1016, 1017, 1002, 1002, 1002, 1002, 1002, 1002,
+     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1024,
+     1018, 1019, 1020, 1021,  996, 1022, 1023, 1002, 1002, 1002,
+     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1024,  996, 1002,
+     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
+        0,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851
     } ;
 
-static yyconst flex_int16_t yy_nxt[2653] =
+static yyconst flex_int16_t yy_nxt[2848] =
     {   0,
        12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
@@ -765,295 +774,316 @@
        28,   29,   30,   31,   32,   32,   32,   32,   33,   34,
        35,   36,   37,   38,   39,   18,   18,   18,   18,   18,
-       18,   18,   18,   40,   18,   18,   18,   18,   40,   18,
-       41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
-       51,   52,   53,   18,   54,   18,   55,   18,   18,   18,
-       18,   56,   57,   58,   59,   60,   61,   18,   18,   18,
-       62,   63,   64,   65,   66,   83,   91,   84,   84,   66,
-       87,   88,   67,   70,   70,   70,   70,   70,   70,   70,
-
-       70,   70,   70,   71,   70,   70,   70,   70,   70,   70,
+       18,   18,   18,   40,   18,   18,   18,   18,   18,   40,
+       18,   41,   42,   43,   44,   45,   46,   47,   48,   49,
+       50,   51,   52,   53,   18,   54,   18,   55,   18,   18,
+       18,   18,   56,   57,   58,   59,   60,   61,   18,   18,
+       18,   62,   63,   64,   65,   66,   83,   91,   84,   84,
+       66,   87,   88,   67,   70,   70,   70,   70,   70,   70,
+
+       70,   70,   70,   70,   71,   70,   70,   70,   70,   70,
        70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
-       70,   70,   70,   70,   70,   70,   70,   70,   71,   71,
+       70,   70,   70,   70,   70,   70,   70,   70,   70,   71,
        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   70,   72,   70,   70,   71,   73,   71,
+       71,   71,   71,   71,   71,   70,   72,   70,   70,   71,
+       73,   71,   71,   71,   71,   71,   71,   71,   71,   71,
        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   70,   70,   70,   70,   75,   75,   78,
-       78,  122,  123,   89,   86,   78,   78,  608,   75,   75,
-       79,   80,   81,   81,   81,   79,   81,   80,   82,   82,
-
-       82,   81,   90,   92,  158,  144,   86,   97,   94,   98,
-       98,   98,   98,   98,   98,   86,   86,   93,   99,   84,
-       95,   96,   84,  100,  173,  117,   76,   76,   76,   76,
-      141,  145,   86,  101,  102,  142,  103,  103,  103,  103,
-      104,  104,  118,   86,  119,  120,  256,   86,  257,   86,
-      176,   86,  159,  105,  190,   86,  177,  106,  162,  160,
-      178,  201,  107,  108,  156,  161,  157,  163,  109,   86,
-      165,  164,  166,   86,  105,   86,  143,  225,   86,  174,
-      110,  167,  243,  251,   86,   86,  175,  202,  107,   86,
-      189,  108,  102,  188,  111,  111,  111,  111,  111,  111,
-
-      245,  183,  241,  226,  191,  244,  252,  242,  256,  184,
-      257,  105,  147,  148,  149,  112,  185,   86,  150,  151,
-      113,  152,   86,  153,  154,   86,  114,  168,   86,  179,
-      180,  155,  105,  242,  247,  169,  264,  170,  115,  181,
-      171,  256,  182,  257,  172,  141,  113,  124,  249,   86,
-      142,  125,  126,  250,  127,  825,  128,  129,  256,  130,
-      257,  131,  265,  186,   79,   80,   81,   81,   81,   79,
-      132,  133,  134,  192,   80,   81,   81,   81,  192,  250,
-       86,  193,   81,   80,   81,   81,   81,   81,   86,  253,
-      135,  143,  278,  136,   81,   80,   82,   82,   82,   81,
-
-      258,  195,  196,  258,   86,  187,  195,  235,  235,  235,
-      235,  256,   86,  257,  256,  256,  257,  257,  416,  825,
-      137,  138,  197,  197,  197,  197,  197,  197,  204,  205,
-      256,  260,  257,  204,  825,  206,  238,   86,  238,  236,
-      206,  239,  239,  239,  239,  239,  239,   86,  825,  207,
-      207,  207,  207,  248,  242,  259,  256,  306,  257,  250,
-      206,  825,  825,  102,  296,  104,  104,  104,  104,  104,
-      104,   86,  241,  240,   86,  208,  825,  249,  206,  256,
-      242,  257,  105,  206,  206,  250,  270,  206,  206,  256,
-       86,  257,  272,  271,  141,  206,   86,  237,  206,  142,
-
-      206,  209,  206,  105,  210,  212,   86,   86,  273,  213,
-      214,   86,  275,   86,  215,  216,  274,  217,   86,  218,
-       86,   86,   86,   86,  276,  825,   86,  291,  219,  220,
-      221,   86,  297,  277,   86,  290,  289,   86,   86,  279,
-       86,  280,  300,  281,  282,   86,  298,  283,  222,  284,
-      294,  223,  292,  293,  285,  286,  287,   86,  288,   86,
-       86,   86,  302,  295,   86,  299,  347,   86,  348,   86,
-       86,   86,  303,   86,  312,  825,  304,   86,  305,  224,
-      228,  228,  228,  228,  228,  228,  309,  301,  307,  308,
-      311,   86,   86,  310,   86,  316,  319,  229,  230,   86,
-
-       86,  230,   86,  313,   86,  317,  141,  333,   86,  360,
-      825,  320,  231,  314,  315,  321,   86,  386,  229,  230,
-      322,  330,  318,   86,  230,   98,   98,   98,   98,   98,
-       98,  323,   86,  334,   86,  324,  326,  347,  347,  348,
-      348,  363,  229,  230,  327,  328,  230,  329,   86,   86,
-      204,  205,  325,  390,  348,  204,  347,  234,  348,  545,
-      195,  196,   86,  229,  230,  195,  347,  363,  348,  230,
-      192,   80,   81,   81,   81,  192,  349,  347,  193,  348,
-      373,  197,  197,  197,  197,  197,  197,  195,  196,  405,
-       86,  348,  195,  331,  196,  347,  825,  348,  331,  403,
-
-      332,  339,  339,  339,  339,  347,  373,  348,  197,  197,
+       71,   71,   71,   71,   71,   70,   70,   70,   70,   75,
+       75,   78,   78,  122,  123,   89,  140,   78,   78,  619,
+       75,   75,   79,   80,   81,   81,   81,   79,   81,   80,
+
+       82,   82,   82,   81,   90,   92,   86,  141,  145,   97,
+       94,   98,   98,   98,   98,   98,   98,  248,   86,   93,
+       99,   84,   95,   96,   84,  100,  160,  117,  142,   76,
+       76,   76,   76,  143,  146,  101,  102,   86,  103,  103,
+      103,  103,  104,  104,  118,   86,  119,  120,  147,   86,
+      148,  851,  250,  204,  181,  105,  193,  453,  158,  106,
+      159,  149,  150,  151,   86,  107,  108,  152,  153,  161,
+      154,  109,   86,  155,  156,  144,  162,  105,   86,  205,
+       86,  157,  163,  110,  228,   86,  256,   86,  611,   86,
+       86,  107,  192,   86,  108,  102,  246,  111,  111,  111,
+
+      111,  111,  111,   86,  168,  176,  169,  194,  191,   86,
+      229,  179,  164,  851,  105,  170,  165,  180,  112,  177,
+      247,  166,   86,  254,  113,  167,  178,  171,   86,  259,
+      114,  260,  244,   86,   86,  172,  105,  173,  245,  438,
+      174,  142,  115,  851,  175,  282,  143,  255,  251,   86,
+      113,  124,  276,   86,  245,  125,  126,   86,  127,  189,
+      128,  129,  252,  130,  245,  131,   86,  277,  253,  182,
+      183,  851,  244,  312,  132,  133,  134,   86,  186,  184,
+      245,   86,  185,  253,  267,   86,  187,  259,  144,  260,
+      278,  198,  199,  188,  253,  135,  198,  259,  136,  260,
+
+      303,  252,  190,  195,   80,   81,   81,   81,  195,  253,
+      268,  196,  200,  200,  200,  200,  200,  200,   79,   80,
+       81,   81,   81,   79,   86,  137,  138,  207,  208,  259,
+       86,  260,  207,  295,  209,  238,  238,  238,  238,  209,
+       81,   80,   81,   81,   81,   81,  261,  300,  210,  210,
+      210,  210,   81,   80,   82,   82,   82,   81,  261,  209,
+      259,   86,  260,  851,  262,  259,   86,  260,  239,  259,
+      259,  260,  260,   86,  259,  211,  260,  279,  209,  259,
+      263,  260,  293,  209,  209,   86,   86,  209,  209,   86,
+      259,  851,  260,  328,   86,  209,  301,  353,  209,  354,
+
+      209,  212,  209,  142,  213,  215,  302,  280,  143,  216,
+      217,   86,   86,   86,  218,  219,  281,  220,  102,  221,
+      104,  104,  104,  104,  104,  104,   86,  274,  222,  223,
+      224,  311,  305,  241,  275,  241,   86,  105,  242,  242,
+      242,  242,  242,  242,   86,   86,   86,   86,  294,  225,
+      298,   86,  226,  240,   86,   86,  306,  296,  297,  105,
+      283,   86,  284,  299,  285,  286,  308,   86,  287,  309,
+      288,  243,   86,  304,  307,  289,  290,  291,  310,  292,
+      227,  231,  231,  231,  231,  231,  231,   86,   86,  317,
+       86,   86,   86,   86,  313,  318,   86,   86,  232,  233,
+
+       86,   86,  233,  315,  327,  142,   86,  319,  323,  314,
+      316,  322,  398,  336,  234,   86,  339,  320,  321,   86,
+      232,  233,   86,   86,  325,  324,  233,   98,   98,   98,
+       98,   98,   98,  329,  330,  332,  334,   86,  335,  326,
+       86,   86,  340,  333,  232,  233,  207,  208,  233,   86,
+      392,  207,  331,  195,   80,   81,   81,   81,  195,  393,
+      237,  196,   86,  198,  199,  556,  232,  233,  198,  198,
+      199,  353,  233,  354,  198,  337,  199,  353,  395,  354,
+      337,  353,  338,  354,  200,  200,  200,  200,  200,  200,
+      200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
+
+      200,  200,  345,  345,  345,  345,  354,  354,  355,  353,
+      353,  354,  354,  353,  356,  354,  353,  851,  354,  353,
+      353,  354,  354,  353,  362,  354,  362,   86,   86,  363,
+      363,  363,  363,  363,  363,  346,  231,  231,  231,  231,
+      231,  231,  232,  233,  396,  369,  233,  379,  259,  259,
+      260,  260,  366,  232,  233,   86,   86,  233,   86,   86,
+      397,   86,  364,  399,  232,  233,  409,   86,  381,  234,
+      233,  369,   86,  379,  394,  232,  233,   86,   86,  400,
+      411,  233,  104,  104,  104,  104,  104,  104,  242,  242,
+      242,  242,  242,  242,  382,   86,  404,   86,  405,  105,
+
+       86,  367,  367,  367,  367,  367,  367,  372,   86,  410,
+      401,   86,  406,   86,   86,  251,  402,  403,  241,  233,
+      241,  105,  233,  242,  242,  242,  242,  242,  242,  413,
+      374,  414,  375,   86,  368,  412,  376,   86,  415,   86,
+       86,  233,  377,   86,   86,  422,  233,  104,  104,  104,
+      104,  104,  104,  416,  378,  407,  408,  418,  375,   86,
+       86,  419,  376,  111,  111,  111,  111,  111,  111,   86,
+       86,   86,   86,   86,   86,  423,  417,  424,  425,  427,
+      251,  420,  421,  426,   86,   86,   86,   86,  428,   86,
+       86,  431,  432,  429,  433,   86,  256,   86,   86,   86,
+
+      430,   86,   86,   86,   86,   86,   86,   86,   86,  435,
+      437,  434,  142,  436,  439,  440,  445,   86,   86,   86,
+      441,  444,   86,  443,  442,   86,   86,  446,  450,  447,
+      448,  454,  353,   86,  354,  449,  451,  455,  452,  337,
+      199,  199,  507,  353,  337,  354,  338,  197,  209,  209,
+      209,  209,  345,  345,  345,  345,   86,  363,  363,  363,
+      363,  363,  363,   86,  476,  476,  476,  476,  476,  476,
+      362,  488,  362,   86,  503,  363,  363,  363,  363,  363,
+      363,  465,  233,  644,  480,  233,  231,  231,  231,  231,
+      231,  231,   86,   86,  481,  489,   86,  477,  238,  238,
+
+      238,  238,  104,  104,  233,  509,  512,  480,  504,  233,
+      480,  367,  367,  367,  367,  367,  367,  482,   86,  365,
+      367,  367,  367,  367,  367,  367,   86,   86,   86,  233,
+      483,  366,  233,  480,  372,  511,  484,  506,  233,  528,
+      485,  233,  485,  505,  368,  486,  486,  486,  486,  486,
+      486,  233,   86,  478,  484,   86,  233,  374,   86,  375,
+      233,  851,  484,  376,   86,  233,  508,   86,   86,  377,
+       86,   86,  483,   86,  510,  524,  518,   86,  487,   86,
+      484,  378,  519,  513,  374,  375,  375,  515,  516,  376,
+      376,   86,  514,   86,  520,  517,  490,  522,   86,   86,
+
+       86,  521,   86,   86,   86,   86,   86,   86,  378,   86,
+       86,  534,  375,  527,  523,  526,  376,  525,  531,  536,
+       86,  535,  532,  529,   86,  530,   86,  533,   86,  539,
+       86,   86,   86,   86,   86,  537,   86,   86,   86,   86,
+       86,  540,  544,   86,  538,  542,   86,   86,   86,  545,
+      541,  543,  551,  553,  554,  555,  548,  546,  547,  549,
+      550,   86,   86,   86,  552,   86,   86,   86,  199,  557,
+      691,   86,   86,  560,  563,  562,  480,  480,  585,  558,
+      559,  209,  209,  209,  209,  603,  481,  561,  476,  476,
+      476,  476,  476,  476,  476,  476,  476,  476,  476,  476,
+
+      480,   86,  480,  480,  585,   86,  233,  851,   86,  233,
+      584,   86,  233,   86,   86,  233,   86,   86,  602,   86,
+      604,  477,  609,   86,  610,   86,  480,  580,  233,  606,
+      607,  605,  608,  233,  233,  614,  617,   86,   86,  233,
+      367,  367,  367,  367,  367,  367,  581,  615,  581,  627,
+      618,  582,  582,  582,  582,  582,  582,  486,  486,  486,
+      486,  486,  486,   86,  586,  586,  586,  586,  586,  586,
+      485,   86,  485,  478,   86,  486,  486,  486,  486,  486,
+      486,   86,  587,  612,  583,  587,  616,   86,   86,   86,
+      613,  622,   86,   86,   86,  625,  620,  588,  623,  624,
+
+       86,   86,  626,   86,  587,   86,   86,  629,   86,  587,
+      621,   86,   86,   86,  631,  632,   86,  628,  630,   86,
+       86,  637,   86,  634,   86,  633,   86,  635,  636,  638,
+       86,  639,   86,   86,   86,   86,  648,  641,  643,  645,
+       86,  640,   86,  642,  649,   86,  647,   86,   86,   86,
+      650,   86,   86,   86,  697,  646,  683,  684,   86,  688,
+      652,  689,  651,  476,  476,  476,  476,  476,  476,  582,
+      582,  582,  582,  582,  582,  686,  670,  670,  670,  670,
+      670,  670,  581,   86,  581,   86,   86,  582,  582,  582,
+      582,  582,  582,  714,  587,   86,  580,  587,  685,  586,
+
+      586,  586,  586,  586,  586,   86,  687,   86,  692,  671,
+      586,  586,  586,  586,  586,  586,  587,  587,   86,   86,
+      587,  587,  690,  681,   86,   86,  699,   86,  587,  694,
+       86,  587,  588,   86,  693,   86,  682,   86,   86,  587,
+       86,  695,  700,  672,  587,   86,  702,  696,  703,  705,
+      587,   86,  698,  701,   86,  587,   86,   86,   86,   86,
+      704,   86,   86,   86,   86,   86,  709,  706,   86,   86,
+      713,  715,   86,  717,  707,  716,   86,   86,  708,  710,
+      712,   86,  733,  718,  777,  711,  670,  670,  670,  670,
+      670,  670,  670,  670,  670,  670,  670,  670,  732,   86,
+
+       86,  737,  734,   86,  587,  736,  735,  587,   86,   86,
+      587,  738,  739,  587,   86,   86,  745,  851,   86,  671,
+      741,  740,  748,   86,  742,  725,  587,   86,  752,   86,
+      743,  587,  587,   86,   86,   86,  746,  587,  586,  586,
+      586,  586,  586,  586,  744,   86,   86,   86,   86,   86,
+      749,   86,   86,   86,   86,  747,  754,  756,   86,  751,
+       86,   86,  750,  755,   86,  753,   86,   86,   86,  760,
+       86,  672,   86,  757,   86,  761,  783,  778,   86,  776,
+      758,  759,  670,  670,  670,  670,  670,  670,  774,  775,
+      780,   86,   86,  779,  781,   86,   86,   86,  784,  785,
+
+       86,  790,   86,   86,   86,  782,  787,  786,   86,   86,
+       86,  788,  789,   86,   86,  725,  808,   86,   86,   86,
+      812,  810,   86,   86,   86,  791,  813,  815,   86,   86,
+       86,  806,  807,  816,   86,   86,  805,  811,  817,  809,
+       86,   86,   86,   86,  814,  830,   86,  829,   86,  828,
+      818,  819,  831,   86,   86,   86,  832,  834,  833,   86,
+       86,   86,  835,   86,  836,   86,   86,   86,  841,  837,
+      840,   86,   86,   86,  842,  843,  844,   86,   86,   86,
+      845,  847,  848,   86,   86,  846,  849,  851,  851,  850,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+
+       68,   68,   68,   74,   74,   74,   74,   74,   74,   74,
+       74,   74,   74,   74,   74,   74,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   85,
+      839,  851,   85,  851,   85,   85,   85,   85,   85,  139,
+      851,  851,  838,  139,  139,  139,  139,  139,  139,  197,
       197,  197,  197,  197,  197,  197,  197,  197,  197,  197,
-      347,  350,  348,  347,  347,  348,  348,  104,  104,  104,
-      104,  104,  104,  340,  228,  228,  228,  228,  228,  228,
-      356,  256,  356,  257,  105,  357,  357,  357,  357,  357,
-      357,  229,  230,  229,  230,  230,  256,  230,  257,  248,
-       86,   86,   86,   86,   86,  105,  231,  392,  375,  402,
-      630,   86,  229,  230,  229,  230,  385,  358,  230,  387,
-      230,  239,  239,  239,  239,  239,  239,  361,  361,  361,
-      361,  361,  361,  238,  376,  238,   86,  398,  239,  239,
-
-      239,  239,  239,  239,  366,  230,  813,  825,  230,  104,
-      104,  104,  104,  104,  104,   86,  391,   86,   86,  362,
-      111,  111,  111,  111,  111,  111,  230,  368,   86,  369,
-      394,  230,  370,  388,   86,  389,  395,  396,  371,   86,
-       86,  248,   86,   86,   86,   86,   86,  408,  393,  399,
-      372,   86,  253,  404,  369,  409,   86,  397,  370,  400,
-      401,   86,  406,  407,   86,   86,   86,   86,  410,   86,
-      415,  411,   86,   86,  412,  418,   86,   86,  422,   86,
-       86,  420,  423,  419,  424,  413,  414,   86,  417,   86,
-       86,  421,   86,   86,   86,   86,   86,   86,   86,  426,
-
-       86,  425,  428,  429,   86,  427,   86,  431,  430,  436,
-       86,   86,  432,  141,  435,   86,  434,   86,  433,  441,
-      437,   86,   86,   86,   86,   86,  445,  438,  439,  440,
-      443,  444,  196,  442,  331,  196,  494,  446,  194,  331,
-      495,  332,  206,  206,  206,  206,  339,  339,  339,  339,
-      347,  347,  348,  348,   86,  825,   86,  357,  357,  357,
-      357,  357,  357,  467,  467,  467,  467,  467,  467,  479,
-      356,   86,  356,  497,  456,  357,  357,  357,  357,  357,
-      357,  230,   86,   86,  230,  228,  228,  228,  228,  228,
-      228,  498,  480,  501,  499,  468,  235,  235,  235,  235,
-
-      104,  104,  230,   86,  825,  471,  471,  230,  361,  361,
-      361,  361,  361,  361,  472,  473,  475,  359,  361,  361,
-      361,  361,  361,  361,  514,   86,  230,   86,  360,  230,
-      471,  471,  474,  366,  474,   86,  230,  475,   86,  230,
-      362,  504,  475,   86,  500,   86,   86,  230,  510,  505,
-      469,  825,  230,  496,  502,  812,  368,  230,  369,  503,
-       86,  370,  230,  475,  476,  825,  476,  371,   86,  477,
-      477,  477,  477,  477,  477,   86,  506,  507,   86,  372,
-       86,   86,   86,  369,  513,   86,  509,  370,  368,   86,
-      369,   86,  515,  370,   86,  511,  518,  508,   86,  481,
-
-       86,  478,  512,   86,  516,   86,  517,   86,   86,   86,
-      519,  372,  524,   86,  522,  369,  521,  526,  523,  370,
-       86,  520,  525,  527,   86,   86,   86,   86,  529,   86,
-       86,  528,   86,   86,   86,  533,   86,   86,   86,  531,
-       86,  540,  530,   86,  534,  532,   86,  543,   86,  549,
-       86,  536,  535,  537,  538,  541,  542,  544,  539,   86,
-       86,   86,  196,  548,  600,  471,  471,  546,  552,  551,
-      550,  206,  206,  206,  206,  472,   86,  547,  467,  467,
-      467,  467,  467,  467,  467,  467,  467,  467,  467,  467,
-      471,  471,  574,  591,  471,   86,  230,   86,   86,  230,
-
-       86,   86,  230,  573,   86,  230,   86,   86,  592,   86,
-      468,  595,  593,   86,  597,   86,  569,  230,  574,  471,
-      594,   86,  230,  230,  599,  602,  596,  601,  230,  361,
-      361,  361,  361,  361,  361,  570,  603,  570,  611,   86,
-      571,  571,  571,  571,  571,  571,  477,  477,  477,  477,
-      477,  477,  575,  575,  575,  575,  575,  575,  476,   86,
-      476,  469,   86,  477,  477,  477,  477,  477,  477,   86,
-      576,  604,  572,  576,  598,   86,   86,   86,   86,   86,
-      605,  610,   86,   86,  577,   86,   86,  606,  609,   86,
-      607,  576,  612,   86,  613,  614,  576,   86,   86,  616,
-
-      617,   86,  618,   86,  615,   86,   86,   86,   86,   86,
-      620,  623,   86,   86,  619,   86,  621,  624,  622,   86,
-      627,  625,   86,  629,   86,   86,  628,  626,   86,  631,
-       86,  633,   86,  634,   86,  632,   86,   86,  635,  668,
-       86,  673,  636,  637,  467,  467,  467,  467,  467,  467,
-      571,  571,  571,  571,  571,  571,  655,  655,  655,  655,
-      655,  655,  570,  672,  570,   86,   86,  571,  571,  571,
-      571,  571,  571,   86,  576,  669,  569,  576,  575,  575,
-      575,  575,  575,  575,   86,  686,  670,   86,  656,   86,
-      676,   86,   86,   86,   86,  576,  576,  674,  666,  576,
-
-      576,  671,  575,  575,  575,  575,  575,  575,  675,  678,
-      577,  667,   86,   86,  679,   86,   86,  576,   86,  682,
-      576,  684,  576,  576,   86,  677,   86,   86,   86,   86,
-      680,   86,   86,   86,  657,  683,  687,  681,   86,  685,
-       86,  576,   86,   86,  688,   86,  576,   86,   86,  697,
-      689,  690,  693,  698,  691,  692,  696,  695,   86,   86,
-      700,   86,   86,   86,   86,  694,  720,  699,  655,  655,
-      655,  655,  655,  655,  655,  655,  655,  655,  655,  655,
-      714,   86,  719,   86,   86,  726,  576,  716,   86,  576,
-      717,  715,  576,  718,   86,  576,   86,  721,   86,  727,
-
-      656,   86,  722,  730,  723,  724,  707,  576,   86,   86,
-      729,  725,  576,  576,   86,   86,  766,  728,  576,  575,
-      575,  575,  575,  575,  575,   86,   86,   86,   86,  731,
-       86,   86,   86,   86,   86,  738,   86,   86,  732,  733,
-      734,   86,  736,   86,   86,  735,  741,   86,   86,  740,
-       86,  657,   86,   86,  758,  756,   86,  737,  739,  655,
-      655,  655,  655,  655,  655,  755,  759,  754,  757,   86,
-       86,  763,  761,   86,   86,   86,  764,  765,  760,   86,
-       86,   86,  767,  762,  768,   86,   86,   86,  790,   86,
-      769,  707,  786,   86,   86,   86,  788,   86,   86,   86,
-
-      791,   86,  793,   86,  785,   86,  784,  783,  794,  787,
-      795,   86,  789,   86,   86,   86,   86,  792,  805,  806,
-      825,  825,   86,  807,  804,  808,   86,   86,   86,  810,
-      811,   86,  809,   86,   86,   86,  815,  814,  816,   86,
-       86,   86,  817,  818,  819,   86,   86,   86,  822,  821,
-      823,  803,  825,  820,  802,  825,  800,  825,  799,  825,
-      798,  825,  797,   86,   86,   86,  825,  782,  824,   68,
-       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
-       68,   74,   74,   74,   74,   74,   74,   74,   74,   74,
-       74,   74,   74,   77,   77,   77,   77,   77,   77,   77,
-
-       77,   77,   77,   77,   77,   85,  825,  781,   85,   85,
-       85,   85,   85,   85,  139,  779,  825,  777,  139,  139,
-      139,  139,  139,  194,  194,  194,  194,  194,  194,  194,
-      194,  194,  194,  194,  194,  199,  825,  775,  199,  199,
-      199,  199,  199,  199,  203,  825,  203,  203,  773,  203,
-      203,  203,  203,  203,  771,  203,  211,   86,   86,  211,
-      211,  211,  211,  211,  211,  211,   86,  211,  232,  232,
-      232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
-      246,  246,  246,   86,   86,   86,  246,  262,   86,   86,
-      262,  262,  262,  262,  262,  262,  266,  266,   86,   86,
-
-       86,  266,  268,  268,   86,  825,  753,  268,  335,  335,
-      751,  825,  825,  335,  337,  337,  748,  746,  744,  337,
-      341,  341,  825,   86,   86,  341,  343,  343,   86,   86,
-       86,  343,  345,  345,   86,   86,  713,  345,  352,  352,
-      710,  709,  200,  352,  354,  354,  703,  702,  639,  354,
-      232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
-      232,  232,  365,  365,  367,  367,  367,  367,  367,   86,
-      367,  246,  246,  246,  377,  377,   86,   86,   86,  377,
-      379,  379,   86,   86,   86,  379,  381,  381,   86,   86,
-       86,  381,  266,  266,  383,  383,   86,   86,   86,  383,
-
-      268,  268,   85,   86,  664,   85,   85,   85,   85,   85,
-       85,  194,  194,  194,  194,  194,  194,  194,  194,  194,
-      194,  194,  194,  447,  447,  447,  447,  447,  447,  447,
-      447,  447,  447,  447,  447,  448,  448,  663,  661,  659,
-      448,  450,  450,  573,  654,  653,  450,  452,  452,  651,
-      649,  647,  452,  335,  335,  454,  454,  645,  643,  641,
-      454,  337,  337,  457,  457,  639,   86,   86,  457,  341,
-      341,  459,  459,   86,   86,   86,  459,  343,  343,  461,
-      461,   86,   86,   86,  461,  345,  345,  463,  463,   86,
-       86,   86,  463,  352,  352,  465,  465,  590,  588,  586,
-
-      465,  354,  354,  470,  470,  584,  470,  582,  470,  365,
-      365,  580,  365,  481,  365,  367,  367,  367,  367,  367,
-      578,  367,  482,  482,  578,  568,  566,  482,  484,  484,
-      462,  462,  564,  484,  486,  486,  562,  560,  558,  486,
-      377,  377,  488,  488,  556,  554,   86,  488,  379,  379,
-      490,  490,   86,   86,   86,  490,  381,  381,  492,  492,
-       86,   86,   86,  492,  383,  383,   85,   86,  493,   85,
-       85,   85,   85,   85,   85,  447,  447,  447,  447,  447,
-      447,  447,  447,  447,  447,  447,  447,  553,  553,  491,
-      489,  487,  553,  448,  448,  555,  555,  485,  483,  466,
-
-      555,  450,  450,  557,  557,  464,  348,  348,  557,  452,
-      452,  559,  559,  462,  460,  458,  559,  454,  454,  561,
-      561,  455,  453,  451,  561,  457,  457,  563,  563,  449,
-       86,   86,  563,  459,  459,  461,  461,   86,  384,  382,
-      461,  565,  565,  380,  378,  263,  565,  463,  463,  567,
-      567,  258,  257,  374,  567,  465,  465,  470,  470,  374,
-      470,  245,  470,  367,  367,  364,  364,  233,  367,  579,
-      579,  359,  355,  353,  579,  482,  482,  581,  581,  351,
-      347,  346,  581,  484,  484,  583,  583,  344,  342,  338,
-      583,  486,  486,  585,  585,  336,  200,  196,  585,  488,
-
-      488,  587,  587,   86,  269,  267,  587,  490,  490,  589,
-      589,  263,  258,  261,  589,  492,  492,   85,  258,  256,
-       85,   85,   85,   85,   85,   85,  638,  638,  638,  638,
-      638,  638,  638,  638,  638,  638,  638,  638,  640,  640,
-      255,  254,  233,  640,  553,  553,  642,  642,  227,   84,
-       84,  642,  555,  555,  644,  644,   86,  200,  198,  644,
-      557,  557,  646,  646,   84,  146,  140,  646,  559,  559,
-      648,  648,  121,  116,   86,  648,  561,  561,  650,  650,
-      825,   69,   69,  650,  563,  563,  652,  652,  825,  825,
-      825,  652,  565,  565,   85,   85,  825,  825,  825,   85,
-
-      567,  567,  470,  470,  825,  825,  825,  470,  658,  658,
-      825,  825,  825,  658,  579,  579,  660,  660,  825,  825,
-      825,  660,  581,  581,  662,  662,  825,  825,  825,  662,
-      583,  583,  139,  139,  825,  825,  825,  139,  585,  585,
-      665,  665,  587,  587,   85,  825,  825,   85,   85,   85,
-       85,   85,   85,  589,  589,  638,  638,  638,  638,  638,
-      638,  638,  638,  638,  638,  638,  638,  701,  701,  825,
-      825,  825,  701,  640,  640,  199,  199,  825,  825,  825,
-      199,  642,  642,  704,  704,  644,  644,  199,  825,  825,
-      199,  199,  199,  199,  199,  199,  646,  646,  705,  705,
-
-      648,  648,  650,  650,  706,  706,  652,  652,   85,   85,
-      708,  708,  825,  825,  825,  708,  658,  658,  262,  262,
-      825,  825,  825,  262,  660,  660,  711,  711,  662,  662,
-      139,  139,  712,  712,  825,  825,  825,  712,   85,  825,
-      825,   85,   85,   85,   85,   85,   85,  742,  742,  701,
-      701,  743,  743,  825,  825,  825,  743,  745,  745,  825,
-      825,  825,  745,  747,  747,  825,  825,  825,  747,  749,
-      749,  750,  750,  825,  825,  825,  750,  752,  752,  825,
-      825,  825,  752,  770,  770,  825,  825,  825,  770,  772,
-      772,  825,  825,  825,  772,  774,  774,  825,  825,  825,
-
-      774,  776,  776,  825,  825,  825,  776,  778,  778,  825,
-      825,  825,  778,  780,  780,  825,  825,  825,  780,  589,
-      589,  825,  825,  825,  589,  796,  796,  825,  825,  825,
-      796,  646,  646,  825,  825,  825,  646,  650,  650,  825,
-      825,  825,  650,   85,   85,  825,  825,  825,   85,  801,
-      801,  825,  825,  825,  801,  139,  139,  825,  825,  825,
-      139,  199,  199,  825,  825,  825,  199,   11,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825
+      197,  197,  202,   86,   86,  202,   86,  202,  202,  202,
+      202,  202,  206,   86,  206,  206,   86,  206,  206,  206,
+      206,  206,  206,  851,  206,  214,  851,  827,  214,  214,
+      214,  214,  214,  214,  214,  214,  851,  214,  235,  235,
+
+      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
+      235,  249,  249,  826,  249,  851,  824,  851,  249,  265,
+      823,  851,  265,  822,  265,  265,  265,  265,  265,  269,
+      851,  269,  821,   86,   86,  269,  271,   86,  271,  851,
+      804,  851,  271,  341,  803,  341,  801,  851,  799,  341,
+      343,  851,  343,  797,  851,  795,  343,  347,  793,  347,
+       86,   86,   86,  347,  349,   86,  349,   86,   86,   86,
+      349,  351,   86,  351,   86,   86,   86,  351,  358,   86,
+      358,  851,  773,  771,  358,  360,  851,  360,  851,  768,
+      766,  360,  235,  235,  235,  235,  235,  235,  235,  235,
+
+      235,  235,  235,  235,  235,  371,  764,  371,  373,  373,
+      851,  373,  373,  373,   86,  373,  249,  249,   86,  249,
+      383,   86,  383,   86,   86,   86,  383,  385,   86,  385,
+       86,  731,  728,  385,  387,  727,  387,  203,  721,  720,
+      387,  269,  654,  269,  389,   86,  389,   86,   86,   86,
+      389,  271,   86,  271,   85,   86,   86,   85,   86,   85,
+       85,   85,   85,   85,  197,  197,  197,  197,  197,  197,
+      197,  197,  197,  197,  197,  197,  197,  456,  456,  456,
+      456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
+      457,   86,  457,   86,   86,   86,  457,  459,   86,  459,
+
+       86,   86,  679,  459,  461,  678,  461,  676,  674,  584,
+      461,  341,  669,  341,  463,  668,  463,  666,  664,  662,
+      463,  343,  660,  343,  466,  658,  466,  656,  654,   86,
+      466,  347,   86,  347,  468,   86,  468,   86,   86,   86,
+      468,  349,   86,  349,  470,   86,  470,   86,  601,  599,
+      470,  351,  597,  351,  472,  595,  472,  593,  591,  490,
+      472,  358,  589,  358,  474,  589,  474,  579,  577,  471,
+      474,  360,  471,  360,  479,  575,  479,  573,  479,  571,
+      479,  371,  569,  371,  567,  371,  565,  371,  373,  373,
+       86,  373,  373,  373,   86,  373,  491,   86,  491,   86,
+
+       86,   86,  491,  493,   86,  493,   86,  502,  500,  493,
+      495,  498,  495,  496,  494,  492,  495,  383,  475,  383,
+      497,  473,  497,  354,  354,  471,  497,  385,  469,  385,
+      499,  467,  499,  464,  462,  460,  499,  387,  458,  387,
+      501,   86,  501,   86,   86,  391,  501,  389,  390,  389,
+       85,  388,  386,   85,  384,   85,   85,   85,   85,   85,
+      456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
+      456,  456,  456,  564,  266,  564,  261,  260,  380,  564,
+      457,  380,  457,  566,  248,  566,  370,  370,  236,  566,
+      459,  365,  459,  568,  361,  568,  359,  357,  353,  568,
+
+      461,  352,  461,  570,  350,  570,  348,  344,  342,  570,
+      463,  203,  463,  572,  199,  572,   86,  273,  272,  572,
+      466,  270,  466,  574,  266,  574,  261,  264,  261,  574,
+      468,  259,  468,  470,  258,  470,  257,  236,  230,  470,
+      576,   84,  576,   84,   86,  203,  576,  472,  201,  472,
+      578,   84,  578,  121,  116,   86,  578,  474,  851,  474,
+      479,   69,  479,   69,  479,  851,  479,  373,  851,  373,
+      851,  851,  851,  373,  590,  851,  590,  851,  851,  851,
+      590,  491,  851,  491,  592,  851,  592,  851,  851,  851,
+      592,  493,  851,  493,  594,  851,  594,  851,  851,  851,
+
+      594,  495,  851,  495,  596,  851,  596,  851,  851,  851,
+      596,  497,  851,  497,  598,  851,  598,  851,  851,  851,
+      598,  499,  851,  499,  600,  851,  600,  851,  851,  851,
+      600,  501,  851,  501,   85,  851,  851,   85,  851,   85,
+       85,   85,   85,   85,  653,  653,  653,  653,  653,  653,
+      653,  653,  653,  653,  653,  653,  653,  655,  851,  655,
+      851,  851,  851,  655,  564,  851,  564,  657,  851,  657,
+      851,  851,  851,  657,  566,  851,  566,  659,  851,  659,
+      851,  851,  851,  659,  568,  851,  568,  661,  851,  661,
+      851,  851,  851,  661,  570,  851,  570,  663,  851,  663,
+
+      851,  851,  851,  663,  572,  851,  572,  665,  851,  665,
+      851,  851,  851,  665,  574,  851,  574,  667,  851,  667,
+      851,  851,  851,  667,  576,  851,  576,   85,  851,   85,
+      851,  851,  851,   85,  578,  851,  578,  479,  851,  479,
+      851,  851,  851,  479,  673,  851,  673,  851,  851,  851,
+      673,  590,  851,  590,  675,  851,  675,  851,  851,  851,
+      675,  592,  851,  592,  677,  851,  677,  851,  851,  851,
+      677,  594,  851,  594,  139,  851,  139,  851,  851,  851,
+      139,  596,  851,  596,  680,  851,  680,  598,  851,  598,
+       85,  851,  851,   85,  851,   85,   85,   85,   85,   85,
+
+      600,  851,  600,  653,  653,  653,  653,  653,  653,  653,
+      653,  653,  653,  653,  653,  653,  719,  851,  719,  851,
+      851,  851,  719,  655,  851,  655,  202,  851,  202,  851,
+      851,  851,  202,  657,  851,  657,  722,  851,  722,  659,
+      851,  659,  202,  851,  851,  202,  851,  202,  202,  202,
+      202,  202,  661,  851,  661,  723,  851,  723,  663,  851,
+      663,  665,  851,  665,  724,  851,  724,  667,  851,  667,
+       85,  851,   85,  726,  851,  726,  851,  851,  851,  726,
+      673,  851,  673,  265,  851,  265,  851,  851,  851,  265,
+      675,  851,  675,  729,  851,  729,  677,  851,  677,  139,
+
+      851,  139,  730,  851,  730,  851,  851,  851,  730,   85,
+      851,  851,   85,  851,   85,   85,   85,   85,   85,  762,
+      851,  762,  719,  851,  719,  763,  851,  763,  851,  851,
+      851,  763,  765,  851,  765,  851,  851,  851,  765,  767,
+      851,  767,  851,  851,  851,  767,  769,  851,  769,  770,
+      851,  770,  851,  851,  851,  770,  772,  851,  772,  851,
+      851,  851,  772,  792,  851,  792,  851,  851,  851,  792,
+      794,  851,  794,  851,  851,  851,  794,  796,  851,  796,
+      851,  851,  851,  796,  798,  851,  798,  851,  851,  851,
+      798,  800,  851,  800,  851,  851,  851,  800,  802,  851,
+
+      802,  851,  851,  851,  802,  600,  851,  600,  851,  851,
+      851,  600,  820,  851,  820,  851,  851,  851,  820,  661,
+      851,  661,  851,  851,  851,  661,  665,  851,  665,  851,
+      851,  851,  665,   85,  851,   85,  851,  851,  851,   85,
+      825,  851,  825,  851,  851,  851,  825,  139,  851,  139,
+      851,  851,  851,  139,  202,  851,  202,  851,  851,  851,
+      202,   11,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851
     } ;
 
-static yyconst flex_int16_t yy_chk[2653] =
+static yyconst flex_int16_t yy_chk[2848] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1065,6 +1095,6 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    2,   16,   24,   16,   24,    2,
-       19,   19,    2,    5,    5,    5,    5,    5,    5,    5,
+        1,    1,    1,    1,    1,    2,   16,   24,   16,   24,
+        2,   19,   19,    2,    5,    5,    5,    5,    5,    5,
 
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
@@ -1075,282 +1105,303 @@
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    5,    7,    8,    9,
-       10,   37,   37,   20,   48,    9,   10,  512,    7,    8,
-       13,   13,   13,   13,   13,   13,   15,   15,   15,   15,
-
-       15,   15,   20,   25,   48,   42,   53,   28,   27,   28,
-       28,   28,   28,   28,   28,  512,  824,   25,   29,   25,
-       27,   27,   27,   29,   53,   35,    7,    8,    9,   10,
-       40,   42,   55,   29,   30,   40,   30,   30,   30,   30,
-       30,   30,   35,   47,   35,   35,  125,   49,  125,   50,
-       55,   56,   49,   30,   63,   51,   55,   30,   50,   49,
-       56,   72,   30,   30,   47,   49,   47,   50,   30,   54,
-       51,   50,   51,   40,   30,   60,   40,   86,   61,   54,
-       30,   51,  107,  113,  823,  822,   54,   72,   30,   58,
-       61,   30,   31,   60,   31,   31,   31,   31,   31,   31,
-
-      108,   58,  106,   86,   63,  107,  113,  106,  126,   58,
-      126,   31,   45,   45,   45,   31,   58,   57,   45,   45,
-       31,   45,   52,   45,   45,  821,   31,   52,   45,   57,
-       57,   45,   31,  106,  108,   52,  140,   52,   31,   57,
-       52,  128,   57,  128,   52,   59,   31,   38,  112,  819,
-       59,   38,   38,  112,   38,  114,   38,   38,  131,   38,
-      131,   38,  140,   59,   79,   79,   79,   79,   79,   79,
-       38,   38,   38,   66,   66,   66,   66,   66,   66,  112,
-      154,   66,   81,   81,   81,   81,   81,   81,   59,  114,
-       38,   59,  154,   38,   82,   82,   82,   82,   82,   82,
-
-      129,   67,   67,  130,  818,   59,   67,  103,  103,  103,
-      103,  133,  298,  133,  129,  130,  129,  130,  298,  109,
-       38,   38,   67,   67,   67,   67,   67,   67,   76,   76,
-      134,  134,  134,   76,  103,   76,  105,  171,  105,  103,
-       76,  105,  105,  105,  105,  105,  105,  161,  109,   76,
-       76,   76,   76,  109,  110,  132,  132,  171,  132,  115,
-       76,  813,  103,  104,  161,  104,  104,  104,  104,  104,
-      104,  147,  110,  105,  148,   76,  109,  115,   76,  136,
-      110,  136,  104,   76,   76,  115,  147,   76,   76,  138,
-      149,  138,  148,  147,  143,   76,  151,  104,   76,  143,
-
-       76,   76,   76,  104,   76,   84,  152,  150,  149,   84,
-       84,  153,  151,  157,   84,   84,  150,   84,  158,   84,
-      156,  165,  162,  163,  152,  812,  808,  158,   84,   84,
-       84,  159,  162,  153,  155,  157,  156,  143,  164,  155,
-      167,  155,  165,  155,  155,  160,  163,  155,   84,  155,
-      160,   84,  159,  159,  155,  155,  155,  168,  155,  169,
-      170,  172,  167,  160,  166,  164,  213,  173,  213,  177,
-      806,  175,  168,  176,  177,  236,  169,  179,  170,   84,
-       98,   98,   98,   98,   98,   98,  175,  166,  172,  173,
-      176,  181,  178,  175,  180,  179,  181,   98,   98,  271,
-
-      183,   98,  182,  178,  184,  180,  186,  200,  189,  236,
-      803,  181,   98,  178,  178,  182,  185,  271,   98,   98,
-      183,  189,  180,  187,   98,  102,  102,  102,  102,  102,
-      102,  184,  188,  200,  440,  185,  187,  214,  215,  214,
-      215,  241,  102,  102,  187,  188,  102,  188,  275,  186,
-      204,  204,  186,  275,  217,  204,  218,  102,  218,  440,
-      193,  193,  287,  102,  102,  193,  217,  241,  217,  102,
-      192,  192,  192,  192,  192,  192,  219,  219,  192,  219,
-      249,  193,  193,  193,  193,  193,  193,  195,  195,  287,
-      285,  216,  195,  197,  197,  220,  802,  220,  197,  285,
-
-      197,  207,  207,  207,  207,  216,  249,  216,  195,  195,
-      195,  195,  195,  195,  197,  197,  197,  197,  197,  197,
-      221,  221,  221,  223,  224,  223,  224,  237,  237,  237,
-      237,  237,  237,  207,  228,  228,  228,  228,  228,  228,
-      229,  259,  229,  259,  237,  229,  229,  229,  229,  229,
-      229,  228,  228,  234,  234,  228,  260,  234,  260,  237,
-      541,  272,  277,  270,  284,  237,  228,  277,  263,  284,
-      541,  281,  228,  228,  234,  234,  270,  229,  228,  272,
-      234,  238,  238,  238,  238,  238,  238,  239,  239,  239,
-      239,  239,  239,  240,  263,  240,  276,  281,  240,  240,
-
-      240,  240,  240,  240,  246,  239,  801,  800,  239,  248,
-      248,  248,  248,  248,  248,  279,  276,  273,  274,  239,
-      253,  253,  253,  253,  253,  253,  239,  246,  278,  246,
-      279,  239,  246,  273,  282,  274,  279,  279,  246,  280,
-      286,  248,  291,  283,  288,  290,  292,  291,  278,  282,
-      246,  294,  253,  286,  246,  292,  295,  280,  246,  283,
-      283,  293,  288,  290,  296,  297,  300,  301,  293,  299,
-      297,  294,  302,  304,  295,  300,  303,  305,  304,  306,
-      307,  302,  305,  301,  306,  296,  296,  308,  299,  309,
-      314,  303,  311,  312,  313,  315,  316,  317,  319,  307,
-
-      318,  306,  309,  311,  320,  308,  321,  313,  312,  318,
-      324,  322,  314,  325,  317,  326,  316,  327,  315,  324,
-      319,  329,  330,  328,  386,  385,  329,  320,  321,  322,
-      327,  328,  332,  326,  331,  331,  385,  330,  332,  331,
-      386,  331,  339,  339,  339,  339,  340,  340,  340,  340,
-      349,  350,  349,  350,  388,  799,  325,  356,  356,  356,
-      356,  356,  356,  357,  357,  357,  357,  357,  357,  370,
-      358,  392,  358,  388,  339,  358,  358,  358,  358,  358,
-      358,  357,  389,  390,  357,  359,  359,  359,  359,  359,
-      359,  389,  370,  392,  390,  357,  360,  360,  360,  360,
-
-      360,  360,  357,  403,  798,  365,  366,  357,  361,  361,
-      361,  361,  361,  361,  365,  366,  372,  359,  362,  362,
-      362,  362,  362,  362,  403,  395,  361,  396,  360,  361,
-      365,  366,  368,  367,  372,  391,  362,  368,  387,  362,
-      361,  395,  372,  400,  391,  393,  394,  361,  400,  396,
-      362,  797,  361,  387,  393,  796,  367,  362,  367,  394,
-      397,  367,  362,  368,  369,  371,  369,  367,  399,  369,
-      369,  369,  369,  369,  369,  398,  397,  397,  402,  367,
-      401,  404,  408,  367,  402,  405,  399,  367,  371,  415,
-      371,  406,  404,  371,  413,  401,  408,  398,  410,  371,
-
-      412,  369,  401,  420,  405,  414,  406,  416,  417,  421,
-      410,  371,  415,  422,  414,  371,  413,  417,  414,  371,
-      423,  412,  416,  420,  424,  425,  426,  428,  422,  430,
-      431,  421,  435,  432,  433,  426,  434,  436,  443,  424,
-      438,  435,  423,  437,  428,  425,  442,  438,  445,  443,
-      439,  431,  430,  432,  433,  436,  437,  439,  434,  441,
-      446,  504,  447,  442,  504,  473,  470,  441,  447,  446,
-      445,  456,  456,  456,  456,  470,  494,  441,  467,  467,
-      467,  467,  467,  467,  468,  468,  468,  468,  468,  468,
-      473,  470,  474,  494,  472,  495,  467,  497,  499,  467,
-
-      498,  501,  468,  472,  500,  468,  506,  505,  495,  794,
-      467,  499,  497,  503,  501,  507,  468,  467,  474,  472,
-      498,  515,  467,  468,  503,  506,  500,  505,  468,  469,
-      469,  469,  469,  469,  469,  471,  507,  471,  515,  793,
-      471,  471,  471,  471,  471,  471,  476,  476,  476,  476,
-      476,  476,  477,  477,  477,  477,  477,  477,  478,  514,
-      478,  469,  508,  478,  478,  478,  478,  478,  478,  502,
-      477,  508,  471,  477,  502,  509,  510,  511,  522,  513,
-      509,  514,  523,  516,  477,  524,  520,  510,  513,  517,
-      511,  477,  516,  525,  517,  520,  477,  527,  528,  523,
-
-      524,  529,  525,  531,  522,  536,  532,  537,  534,  538,
-      528,  532,  535,  543,  527,  540,  529,  534,  531,  544,
-      537,  535,  542,  540,  546,  549,  538,  536,  547,  542,
-      550,  544,  592,  546,  597,  543,  791,  790,  547,  592,
-      596,  597,  549,  550,  569,  569,  569,  569,  569,  569,
-      570,  570,  570,  570,  570,  570,  571,  571,  571,  571,
-      571,  571,  572,  596,  572,  610,  593,  572,  572,  572,
-      572,  572,  572,  594,  571,  593,  569,  571,  575,  575,
-      575,  575,  575,  575,  595,  610,  594,  600,  571,  598,
-      600,  599,  603,  591,  602,  571,  575,  598,  591,  575,
-
-      571,  595,  577,  577,  577,  577,  577,  577,  599,  602,
-      575,  591,  601,  604,  603,  605,  606,  575,  607,  606,
-      577,  608,  575,  577,  609,  601,  612,  611,  613,  615,
-      604,  616,  620,  617,  577,  607,  611,  605,  621,  609,
-      623,  577,  627,  634,  612,  637,  577,  626,  608,  627,
-      613,  615,  620,  634,  616,  617,  626,  623,  636,  666,
-      637,  669,  672,  673,  680,  621,  673,  636,  655,  655,
-      655,  655,  655,  655,  656,  656,  656,  656,  656,  656,
-      666,  667,  672,  670,  675,  680,  655,  669,  671,  655,
-      670,  667,  656,  671,  674,  656,  678,  674,  677,  681,
-
-      655,  683,  675,  684,  677,  678,  656,  655,  679,  732,
-      683,  679,  655,  656,  682,  696,  732,  682,  656,  657,
-      657,  657,  657,  657,  657,  686,  685,  681,  684,  685,
-      688,  687,  689,  691,  693,  696,  697,  700,  686,  687,
-      688,  699,  691,  723,  722,  689,  700,  718,  719,  699,
-      720,  657,  724,  721,  722,  720,  783,  693,  697,  707,
-      707,  707,  707,  707,  707,  719,  723,  718,  721,  725,
-      726,  727,  725,  729,  731,  735,  729,  731,  724,  733,
-      754,  734,  733,  726,  734,  756,  757,  759,  763,  758,
-      735,  707,  758,  760,  762,  766,  760,  764,  727,  767,
-
-      764,  769,  767,  784,  757,  768,  756,  754,  768,  759,
-      769,  785,  762,  763,  787,  789,  786,  766,  785,  786,
-      782,  781,  788,  787,  784,  788,  792,  795,  804,  792,
-      795,  805,  789,  814,  815,  807,  805,  804,  807,  809,
-      810,  811,  809,  810,  811,  816,  820,  817,  816,  815,
-      817,  780,  779,  814,  778,  777,  776,  775,  774,  773,
-      772,  771,  770,  765,  761,  755,  753,  752,  820,  826,
-      826,  826,  826,  826,  826,  826,  826,  826,  826,  826,
-      826,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  828,  828,  828,  828,  828,  828,  828,
-
-      828,  828,  828,  828,  828,  829,  751,  750,  829,  829,
-      829,  829,  829,  829,  830,  749,  748,  747,  830,  830,
-      830,  830,  830,  831,  831,  831,  831,  831,  831,  831,
-      831,  831,  831,  831,  831,  832,  746,  745,  832,  832,
-      832,  832,  832,  832,  833,  744,  833,  833,  743,  833,
-      833,  833,  833,  833,  742,  833,  834,  741,  740,  834,
-      834,  834,  834,  834,  834,  834,  739,  834,  835,  835,
-      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
-      836,  836,  836,  738,  737,  736,  836,  837,  730,  728,
-      837,  837,  837,  837,  837,  837,  838,  838,  717,  716,
-
-      715,  838,  839,  839,  714,  713,  712,  839,  840,  840,
-      711,  710,  709,  840,  841,  841,  706,  705,  704,  841,
-      842,  842,  703,  698,  695,  842,  843,  843,  694,  692,
-      690,  843,  844,  844,  676,  668,  665,  844,  845,  845,
-      660,  658,  646,  845,  846,  846,  642,  640,  638,  846,
-      847,  847,  847,  847,  847,  847,  847,  847,  847,  847,
-      847,  847,  848,  848,  849,  849,  849,  849,  849,  635,
-      849,  850,  850,  850,  851,  851,  633,  632,  631,  851,
-      852,  852,  630,  629,  628,  852,  853,  853,  625,  624,
-      622,  853,  854,  854,  855,  855,  619,  618,  614,  855,
-
-      856,  856,  857,  589,  585,  857,  857,  857,  857,  857,
-      857,  858,  858,  858,  858,  858,  858,  858,  858,  858,
-      858,  858,  858,  859,  859,  859,  859,  859,  859,  859,
-      859,  859,  859,  859,  859,  860,  860,  583,  581,  579,
-      860,  861,  861,  573,  567,  565,  861,  862,  862,  563,
-      561,  559,  862,  863,  863,  864,  864,  557,  555,  553,
-      864,  865,  865,  866,  866,  552,  551,  548,  866,  867,
-      867,  868,  868,  545,  539,  533,  868,  869,  869,  870,
-      870,  530,  526,  521,  870,  871,  871,  872,  872,  519,
-      518,  496,  872,  873,  873,  874,  874,  492,  490,  488,
-
-      874,  875,  875,  876,  876,  486,  876,  484,  876,  877,
-      877,  482,  877,  481,  877,  878,  878,  878,  878,  878,
-      480,  878,  879,  879,  479,  465,  463,  879,  880,  880,
-      462,  461,  459,  880,  881,  881,  457,  454,  452,  881,
-      882,  882,  883,  883,  450,  448,  444,  883,  884,  884,
-      885,  885,  429,  427,  419,  885,  886,  886,  887,  887,
-      418,  411,  409,  887,  888,  888,  889,  407,  383,  889,
-      889,  889,  889,  889,  889,  890,  890,  890,  890,  890,
-      890,  890,  890,  890,  890,  890,  890,  891,  891,  381,
-      379,  377,  891,  892,  892,  893,  893,  376,  375,  354,
-
-      893,  894,  894,  895,  895,  352,  351,  347,  895,  896,
-      896,  897,  897,  345,  343,  341,  897,  898,  898,  899,
-      899,  337,  335,  334,  899,  900,  900,  901,  901,  333,
-      323,  310,  901,  902,  902,  903,  903,  289,  268,  266,
-      903,  904,  904,  265,  264,  262,  904,  905,  905,  906,
-      906,  261,  256,  252,  906,  907,  907,  908,  908,  251,
-      908,  247,  908,  909,  909,  244,  243,  232,  909,  910,
-      910,  231,  226,  225,  910,  911,  911,  912,  912,  222,
-      212,  210,  912,  913,  913,  914,  914,  209,  208,  202,
-      914,  915,  915,  916,  916,  201,  199,  194,  916,  917,
-
-      917,  918,  918,  174,  145,  144,  918,  919,  919,  920,
-      920,  139,  137,  135,  920,  921,  921,  922,  127,  124,
-      922,  922,  922,  922,  922,  922,  923,  923,  923,  923,
-      923,  923,  923,  923,  923,  923,  923,  923,  924,  924,
-      123,  119,  100,  924,  925,  925,  926,  926,   97,   94,
-       92,  926,  927,  927,  928,  928,   85,   71,   69,  928,
-      929,  929,  930,  930,   65,   44,   39,  930,  931,  931,
-      932,  932,   36,   33,   18,  932,  933,  933,  934,  934,
-       11,    4,    3,  934,  935,  935,  936,  936,    0,    0,
-        0,  936,  937,  937,  938,  938,    0,    0,    0,  938,
-
-      939,  939,  940,  940,    0,    0,    0,  940,  941,  941,
-        0,    0,    0,  941,  942,  942,  943,  943,    0,    0,
-        0,  943,  944,  944,  945,  945,    0,    0,    0,  945,
-      946,  946,  947,  947,    0,    0,    0,  947,  948,  948,
-      949,  949,  950,  950,  951,    0,    0,  951,  951,  951,
-      951,  951,  951,  952,  952,  953,  953,  953,  953,  953,
-      953,  953,  953,  953,  953,  953,  953,  954,  954,    0,
-        0,    0,  954,  955,  955,  956,  956,    0,    0,    0,
-      956,  957,  957,  958,  958,  959,  959,  960,    0,    0,
-      960,  960,  960,  960,  960,  960,  961,  961,  962,  962,
-
-      963,  963,  964,  964,  965,  965,  966,  966,  967,  967,
-      968,  968,    0,    0,    0,  968,  969,  969,  970,  970,
-        0,    0,    0,  970,  971,  971,  972,  972,  973,  973,
-      974,  974,  975,  975,    0,    0,    0,  975,  976,    0,
-        0,  976,  976,  976,  976,  976,  976,  977,  977,  978,
-      978,  979,  979,    0,    0,    0,  979,  980,  980,    0,
-        0,    0,  980,  981,  981,    0,    0,    0,  981,  982,
-      982,  983,  983,    0,    0,    0,  983,  984,  984,    0,
-        0,    0,  984,  985,  985,    0,    0,    0,  985,  986,
-      986,    0,    0,    0,  986,  987,  987,    0,    0,    0,
-
-      987,  988,  988,    0,    0,    0,  988,  989,  989,    0,
-        0,    0,  989,  990,  990,    0,    0,    0,  990,  991,
-      991,    0,    0,    0,  991,  992,  992,    0,    0,    0,
-      992,  993,  993,    0,    0,    0,  993,  994,  994,    0,
-        0,    0,  994,  995,  995,    0,    0,    0,  995,  996,
-      996,    0,    0,    0,  996,  997,  997,    0,    0,    0,
-      997,  998,  998,    0,    0,    0,  998,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    7,
+        8,    9,   10,   37,   37,   20,   39,    9,   10,  521,
+        7,    8,   13,   13,   13,   13,   13,   13,   15,   15,
+
+       15,   15,   15,   15,   20,   25,   48,   39,   42,   28,
+       27,   28,   28,   28,   28,   28,   28,  108,  521,   25,
+       29,   25,   27,   27,   27,   29,   48,   35,   40,    7,
+        8,    9,   10,   40,   42,   29,   30,   47,   30,   30,
+       30,   30,   30,   30,   35,   56,   35,   35,   44,  334,
+       44,  114,  108,   72,   56,   30,   63,  334,   47,   30,
+       47,   45,   45,   45,   49,   30,   30,   45,   45,   49,
+       45,   30,   40,   45,   45,   40,   49,   30,   45,   72,
+       61,   45,   49,   30,   86,  513,  114,   53,  513,   51,
+       60,   30,   61,   55,   30,   31,  107,   31,   31,   31,
+
+       31,   31,   31,   50,   51,   53,   51,   63,   60,   54,
+       86,   55,   50,  109,   31,   51,   50,   55,   31,   54,
+      107,   50,   52,  113,   31,   50,   54,   52,  317,  125,
+       31,  125,  106,  156,  150,   52,   31,   52,  106,  317,
+       52,   59,   31,  109,   52,  156,   59,  113,  109,  151,
+       31,   38,  150,  174,  110,   38,   38,   57,   38,   59,
+       38,   38,  112,   38,  106,   38,   58,  151,  112,   57,
+       57,  109,  110,  174,   38,   38,   38,  166,   58,   57,
+      110,  152,   57,  115,  141,   59,   58,  126,   59,  126,
+      152,   67,   67,   58,  112,   38,   67,  128,   38,  128,
+
+      166,  115,   59,   66,   66,   66,   66,   66,   66,  115,
+      141,   66,   67,   67,   67,   67,   67,   67,   79,   79,
+       79,   79,   79,   79,  160,   38,   38,   76,   76,  131,
+      163,  131,   76,  160,   76,  103,  103,  103,  103,   76,
+       81,   81,   81,   81,   81,   81,  129,  163,   76,   76,
+       76,   76,   82,   82,   82,   82,   82,   82,  130,   76,
+      129,  153,  129,  103,  132,  132,  158,  132,  103,  133,
+      130,  133,  130,  186,  136,   76,  136,  153,   76,  134,
+      134,  134,  158,   76,   76,  165,  164,   76,   76,  154,
+      138,  103,  138,  186,  155,   76,  164,  216,   76,  216,
+
+       76,   76,   76,  144,   76,   84,  165,  154,  144,   84,
+       84,  168,  149,  173,   84,   84,  155,   84,  104,   84,
+      104,  104,  104,  104,  104,  104,  159,  149,   84,   84,
+       84,  173,  168,  105,  149,  105,  161,  104,  105,  105,
+      105,  105,  105,  105,  170,  162,  167,  144,  159,   84,
+      162,  169,   84,  104,  171,  157,  169,  161,  161,  104,
+      157,  172,  157,  162,  157,  157,  170,  175,  157,  171,
+      157,  105,  179,  167,  169,  157,  157,  157,  172,  157,
+       84,   98,   98,   98,   98,   98,   98,  176,  178,  179,
+      180,  185,  280,  182,  175,  180,  181,  183,   98,   98,
+
+      192,  850,   98,  178,  185,  189,  187,  181,  183,  176,
+      178,  182,  280,  192,   98,  188,  203,  181,  181,  184,
+       98,   98,  190,  191,  184,  183,   98,  102,  102,  102,
+      102,  102,  102,  187,  188,  190,  191,  274,  191,  184,
+      449,  275,  203,  190,  102,  102,  207,  207,  102,  189,
+      274,  207,  189,  195,  195,  195,  195,  195,  195,  275,
+      102,  195,  277,  196,  196,  449,  102,  102,  196,  198,
+      198,  217,  102,  217,  198,  200,  200,  218,  277,  218,
+      200,  221,  200,  221,  196,  196,  196,  196,  196,  196,
+      198,  198,  198,  198,  198,  198,  200,  200,  200,  200,
+
+      200,  200,  210,  210,  210,  210,  219,  220,  222,  222,
+      223,  222,  223,  224,  224,  224,  226,  239,  226,  220,
+      219,  220,  219,  227,  232,  227,  232,  278,  849,  232,
+      232,  232,  232,  232,  232,  210,  231,  231,  231,  231,
+      231,  231,  237,  237,  278,  244,  237,  252,  262,  263,
+      262,  263,  239,  231,  231,  279,  276,  231,  281,  282,
+      279,  288,  232,  281,  237,  237,  288,  290,  266,  231,
+      237,  244,  285,  252,  276,  231,  231,  848,  284,  282,
+      290,  231,  240,  240,  240,  240,  240,  240,  241,  241,
+      241,  241,  241,  241,  266,  283,  284,  286,  285,  240,
+
+      289,  242,  242,  242,  242,  242,  242,  249,  291,  289,
+      283,  292,  286,  294,  847,  240,  283,  283,  243,  242,
+      243,  240,  242,  243,  243,  243,  243,  243,  243,  292,
+      249,  294,  249,  295,  242,  291,  249,  298,  295,  287,
+      301,  242,  249,  299,  296,  301,  242,  251,  251,  251,
+      251,  251,  251,  296,  249,  287,  287,  298,  249,  304,
+      300,  299,  249,  256,  256,  256,  256,  256,  256,  297,
+      302,  303,  307,  306,  305,  302,  297,  303,  304,  306,
+      251,  300,  300,  305,  308,  309,  310,  311,  307,  312,
+      313,  310,  311,  308,  312,  314,  256,  315,  320,  318,
+
+      309,  321,  319,  322,  323,  325,  326,  324,  327,  313,
+      315,  312,  331,  314,  318,  319,  324,  328,  332,  330,
+      320,  323,  336,  322,  321,  333,  335,  325,  330,  326,
+      327,  335,  355,  396,  355,  328,  332,  336,  333,  337,
+      337,  338,  396,  356,  337,  356,  337,  338,  345,  345,
+      345,  345,  346,  346,  346,  346,  331,  362,  362,  362,
+      362,  362,  362,  392,  363,  363,  363,  363,  363,  363,
+      364,  376,  364,  552,  392,  364,  364,  364,  364,  364,
+      364,  345,  363,  552,  371,  363,  365,  365,  365,  365,
+      365,  365,  393,  401,  371,  376,  398,  363,  366,  366,
+
+      366,  366,  366,  366,  363,  398,  401,  372,  393,  363,
+      371,  367,  367,  367,  367,  367,  367,  372,  395,  365,
+      368,  368,  368,  368,  368,  368,  400,  417,  394,  367,
+      374,  366,  367,  372,  373,  400,  374,  395,  368,  417,
+      375,  368,  375,  394,  367,  375,  375,  375,  375,  375,
+      375,  367,  399,  368,  378,  397,  367,  373,  406,  373,
+      368,  377,  374,  373,  411,  368,  397,  402,  845,  373,
+      403,  404,  378,  405,  399,  411,  406,  407,  375,  408,
+      378,  373,  407,  402,  377,  373,  377,  404,  404,  373,
+      377,  409,  403,  410,  408,  405,  377,  409,  412,  415,
+
+      413,  408,  419,  420,  422,  423,  424,  430,  377,  421,
+      425,  423,  377,  415,  410,  413,  377,  412,  421,  425,
+      427,  424,  421,  419,  429,  420,  431,  422,  432,  430,
+      433,  434,  437,  435,  439,  427,  441,  440,  443,  442,
+      446,  431,  435,  444,  429,  433,  445,  447,  448,  437,
+      432,  434,  444,  446,  447,  448,  441,  439,  440,  442,
+      443,  450,  452,  451,  445,  454,  455,  611,  456,  450,
+      611,  844,  504,  452,  456,  455,  479,  482,  483,  450,
+      451,  465,  465,  465,  465,  504,  479,  454,  476,  476,
+      476,  476,  476,  476,  477,  477,  477,  477,  477,  477,
+
+      481,  503,  479,  482,  483,  506,  476,  839,  509,  476,
+      481,  507,  477,  512,  516,  477,  508,  511,  503,  510,
+      506,  476,  511,  531,  512,  519,  481,  477,  476,  508,
+      509,  507,  510,  476,  477,  516,  519,  520,  517,  477,
+      478,  478,  478,  478,  478,  478,  480,  517,  480,  531,
+      520,  480,  480,  480,  480,  480,  480,  485,  485,  485,
+      485,  485,  485,  514,  486,  486,  486,  486,  486,  486,
+      487,  515,  487,  478,  524,  487,  487,  487,  487,  487,
+      487,  518,  486,  514,  480,  486,  518,  522,  523,  525,
+      515,  524,  533,  529,  526,  528,  522,  486,  525,  526,
+
+      532,  528,  529,  534,  486,  535,  537,  533,  538,  486,
+      523,  539,  540,  542,  535,  537,  543,  532,  534,  547,
+      545,  543,  546,  539,  548,  538,  549,  540,  542,  545,
+      551,  546,  553,  554,  555,  557,  556,  548,  551,  553,
+      558,  547,  556,  549,  557,  560,  555,  561,  604,  603,
+      558,  617,  608,  609,  617,  554,  603,  604,  606,  608,
+      561,  609,  560,  580,  580,  580,  580,  580,  580,  581,
+      581,  581,  581,  581,  581,  606,  582,  582,  582,  582,
+      582,  582,  583,  607,  583,  605,  641,  583,  583,  583,
+      583,  583,  583,  641,  582,  612,  580,  582,  605,  586,
+
+      586,  586,  586,  586,  586,  610,  607,  614,  612,  582,
+      588,  588,  588,  588,  588,  588,  582,  586,  602,  613,
+      586,  582,  610,  602,  615,  616,  619,  620,  588,  614,
+      623,  588,  586,  621,  613,  618,  602,  622,  624,  586,
+      625,  615,  620,  588,  586,  627,  622,  616,  623,  625,
+      588,  628,  618,  621,  619,  588,  629,  630,  635,  634,
+      624,  640,  648,  637,  651,  649,  630,  627,  652,  739,
+      640,  648,  682,  651,  628,  649,  684,  681,  629,  634,
+      637,  687,  682,  652,  739,  635,  670,  670,  670,  670,
+      670,  670,  671,  671,  671,  671,  671,  671,  681,  685,
+
+      686,  687,  684,  690,  670,  686,  685,  670,  688,  689,
+      671,  688,  689,  671,  692,  693,  696,  838,  703,  670,
+      692,  690,  699,  695,  693,  671,  670,  694,  703,  837,
+      694,  670,  671,  697,  710,  705,  697,  671,  672,  672,
+      672,  672,  672,  672,  695,  696,  698,  700,  699,  701,
+      700,  702,  704,  713,  707,  698,  705,  710,  714,  702,
+      715,  717,  701,  707,  742,  704,  718,  740,  736,  717,
+      741,  672,  737,  713,  738,  718,  745,  740,  754,  738,
+      714,  715,  725,  725,  725,  725,  725,  725,  736,  737,
+      742,  743,  744,  741,  743,  747,  749,  753,  747,  749,
+
+      750,  754,  759,  751,  745,  744,  751,  750,  752,  774,
+      776,  752,  753,  778,  777,  725,  778,  779,  780,  782,
+      783,  780,  786,  784,  787,  759,  784,  787,  806,  789,
+      788,  776,  777,  788,  790,  791,  774,  782,  789,  779,
+      807,  811,  808,  809,  786,  808,  783,  807,  836,  806,
+      790,  791,  809,  810,  814,  818,  810,  814,  811,  817,
+      819,  828,  817,  829,  818,  840,  841,  846,  829,  819,
+      828,  831,  833,  834,  831,  833,  834,  835,  832,  842,
+      835,  841,  842,  843,  830,  840,  843,  827,  826,  846,
+      852,  852,  852,  852,  852,  852,  852,  852,  852,  852,
+
+      852,  852,  852,  853,  853,  853,  853,  853,  853,  853,
+      853,  853,  853,  853,  853,  853,  854,  854,  854,  854,
+      854,  854,  854,  854,  854,  854,  854,  854,  854,  855,
+      825,  824,  855,  823,  855,  855,  855,  855,  855,  856,
+      822,  821,  820,  856,  856,  856,  856,  856,  856,  857,
+      857,  857,  857,  857,  857,  857,  857,  857,  857,  857,
+      857,  857,  858,  816,  815,  858,  813,  858,  858,  858,
+      858,  858,  859,  812,  859,  859,  805,  859,  859,  859,
+      859,  859,  859,  804,  859,  860,  803,  802,  860,  860,
+      860,  860,  860,  860,  860,  860,  801,  860,  861,  861,
+
+      861,  861,  861,  861,  861,  861,  861,  861,  861,  861,
+      861,  862,  862,  800,  862,  799,  798,  797,  862,  863,
+      796,  795,  863,  794,  863,  863,  863,  863,  863,  864,
+      793,  864,  792,  785,  781,  864,  865,  775,  865,  773,
+      772,  771,  865,  866,  770,  866,  769,  768,  767,  866,
+      867,  766,  867,  765,  764,  763,  867,  868,  762,  868,
+      761,  760,  758,  868,  869,  757,  869,  756,  755,  748,
+      869,  870,  746,  870,  735,  734,  733,  870,  871,  732,
+      871,  731,  730,  729,  871,  872,  728,  872,  727,  724,
+      723,  872,  873,  873,  873,  873,  873,  873,  873,  873,
+
+      873,  873,  873,  873,  873,  874,  722,  874,  875,  875,
+      721,  875,  875,  875,  716,  875,  876,  876,  712,  876,
+      877,  711,  877,  709,  708,  706,  877,  878,  691,  878,
+      683,  680,  675,  878,  879,  673,  879,  661,  657,  655,
+      879,  880,  653,  880,  881,  650,  881,  647,  646,  645,
+      881,  882,  644,  882,  883,  643,  642,  883,  639,  883,
+      883,  883,  883,  883,  884,  884,  884,  884,  884,  884,
+      884,  884,  884,  884,  884,  884,  884,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      886,  638,  886,  636,  633,  632,  886,  887,  631,  887,
+
+      626,  600,  596,  887,  888,  594,  888,  592,  590,  584,
+      888,  889,  578,  889,  890,  576,  890,  574,  572,  570,
+      890,  891,  568,  891,  892,  566,  892,  564,  563,  562,
+      892,  893,  559,  893,  894,  550,  894,  544,  541,  536,
+      894,  895,  530,  895,  896,  527,  896,  505,  501,  499,
+      896,  897,  497,  897,  898,  495,  898,  493,  491,  490,
+      898,  899,  489,  899,  900,  488,  900,  474,  472,  471,
+      900,  901,  470,  901,  902,  468,  902,  466,  902,  463,
+      902,  903,  461,  903,  459,  903,  457,  903,  904,  904,
+      453,  904,  904,  904,  438,  904,  905,  436,  905,  428,
+
+      426,  418,  905,  906,  416,  906,  414,  389,  387,  906,
+      907,  385,  907,  383,  382,  381,  907,  908,  360,  908,
+      909,  358,  909,  357,  353,  351,  909,  910,  349,  910,
+      911,  347,  911,  343,  341,  340,  911,  912,  339,  912,
+      913,  329,  913,  316,  293,  273,  913,  914,  271,  914,
+      915,  269,  268,  915,  267,  915,  915,  915,  915,  915,
+      916,  916,  916,  916,  916,  916,  916,  916,  916,  916,
+      916,  916,  916,  917,  265,  917,  264,  259,  255,  917,
+      918,  254,  918,  919,  250,  919,  247,  246,  235,  919,
+      920,  234,  920,  921,  229,  921,  228,  225,  215,  921,
+
+      922,  213,  922,  923,  212,  923,  211,  205,  204,  923,
+      924,  202,  924,  925,  197,  925,  177,  148,  146,  925,
+      926,  145,  926,  927,  139,  927,  137,  135,  127,  927,
+      928,  124,  928,  929,  123,  929,  119,  100,   97,  929,
+      930,   94,  930,   92,   85,   71,  930,  931,   69,  931,
+      932,   65,  932,   36,   33,   18,  932,  933,   11,  933,
+      934,    4,  934,    3,  934,    0,  934,  935,    0,  935,
+        0,    0,    0,  935,  936,    0,  936,    0,    0,    0,
+      936,  937,    0,  937,  938,    0,  938,    0,    0,    0,
+      938,  939,    0,  939,  940,    0,  940,    0,    0,    0,
+
+      940,  941,    0,  941,  942,    0,  942,    0,    0,    0,
+      942,  943,    0,  943,  944,    0,  944,    0,    0,    0,
+      944,  945,    0,  945,  946,    0,  946,    0,    0,    0,
+      946,  947,    0,  947,  948,    0,    0,  948,    0,  948,
+      948,  948,  948,  948,  949,  949,  949,  949,  949,  949,
+      949,  949,  949,  949,  949,  949,  949,  950,    0,  950,
+        0,    0,    0,  950,  951,    0,  951,  952,    0,  952,
+        0,    0,    0,  952,  953,    0,  953,  954,    0,  954,
+        0,    0,    0,  954,  955,    0,  955,  956,    0,  956,
+        0,    0,    0,  956,  957,    0,  957,  958,    0,  958,
+
+        0,    0,    0,  958,  959,    0,  959,  960,    0,  960,
+        0,    0,    0,  960,  961,    0,  961,  962,    0,  962,
+        0,    0,    0,  962,  963,    0,  963,  964,    0,  964,
+        0,    0,    0,  964,  965,    0,  965,  966,    0,  966,
+        0,    0,    0,  966,  967,    0,  967,    0,    0,    0,
+      967,  968,    0,  968,  969,    0,  969,    0,    0,    0,
+      969,  970,    0,  970,  971,    0,  971,    0,    0,    0,
+      971,  972,    0,  972,  973,    0,  973,    0,    0,    0,
+      973,  974,    0,  974,  975,    0,  975,  976,    0,  976,
+      977,    0,    0,  977,    0,  977,  977,  977,  977,  977,
+
+      978,    0,  978,  979,  979,  979,  979,  979,  979,  979,
+      979,  979,  979,  979,  979,  979,  980,    0,  980,    0,
+        0,    0,  980,  981,    0,  981,  982,    0,  982,    0,
+        0,    0,  982,  983,    0,  983,  984,    0,  984,  985,
+        0,  985,  986,    0,    0,  986,    0,  986,  986,  986,
+      986,  986,  987,    0,  987,  988,    0,  988,  989,    0,
+      989,  990,    0,  990,  991,    0,  991,  992,    0,  992,
+      993,    0,  993,  994,    0,  994,    0,    0,    0,  994,
+      995,    0,  995,  996,    0,  996,    0,    0,    0,  996,
+      997,    0,  997,  998,    0,  998,  999,    0,  999, 1000,
+
+        0, 1000, 1001,    0, 1001,    0,    0,    0, 1001, 1002,
+        0,    0, 1002,    0, 1002, 1002, 1002, 1002, 1002, 1003,
+        0, 1003, 1004,    0, 1004, 1005,    0, 1005,    0,    0,
+        0, 1005, 1006,    0, 1006,    0,    0,    0, 1006, 1007,
+        0, 1007,    0,    0,    0, 1007, 1008,    0, 1008, 1009,
+        0, 1009,    0,    0,    0, 1009, 1010,    0, 1010,    0,
+        0,    0, 1010, 1011,    0, 1011,    0,    0,    0, 1011,
+     1012,    0, 1012,    0,    0,    0, 1012, 1013,    0, 1013,
+        0,    0,    0, 1013, 1014,    0, 1014,    0,    0,    0,
+     1014, 1015,    0, 1015,    0,    0,    0, 1015, 1016,    0,
+
+     1016,    0,    0,    0, 1016, 1017,    0, 1017,    0,    0,
+        0, 1017, 1018,    0, 1018,    0,    0,    0, 1018, 1019,
+        0, 1019,    0,    0,    0, 1019, 1020,    0, 1020,    0,
+        0,    0, 1020, 1021,    0, 1021,    0,    0,    0, 1021,
+     1022,    0, 1022,    0,    0,    0, 1022, 1023,    0, 1023,
+        0,    0,    0, 1023, 1024,    0, 1024,    0,    0,    0,
+     1024,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[172] =
+static yyconst flex_int32_t yy_rule_can_match_eol[179] =
     {   0,
 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -1359,8 +1410,8 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,     };
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,     };
 
 static yy_state_type yy_last_accepting_state;
@@ -1390,6 +1441,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Fri Jun 19 11:10:14 2015
- * Update Count     : 392
+ * Last Modified On : Thu Oct  8 16:13:07 2015
+ * Update Count     : 404
  */
 #line 20 "lex.ll"
@@ -1448,5 +1499,5 @@
 
 
-#line 1451 "Parser/lex.cc"
+#line 1502 "Parser/lex.cc"
 
 #define INITIAL 0
@@ -1643,5 +1694,5 @@
 
 				   /* line directives */
-#line 1646 "Parser/lex.cc"
+#line 1697 "Parser/lex.cc"
 
 	if ( !(yy_init) )
@@ -1697,5 +1748,5 @@
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 826 )
+				if ( yy_current_state >= 852 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
@@ -1703,5 +1754,5 @@
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 2568 );
+		while ( yy_base[yy_current_state] != 2762 );
 
 yy_find_action:
@@ -1850,10 +1901,10 @@
 YY_RULE_SETUP
 #line 184 "lex.ll"
+{ KEYWORD_RETURN(AT); }					// CFA
+	YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 185 "lex.ll"
 { KEYWORD_RETURN(ATOMIC); }				// C11
-	YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 185 "lex.ll"
-{ KEYWORD_RETURN(ATTRIBUTE); }			// GCC
 	YY_BREAK
 case 19:
@@ -1865,517 +1916,517 @@
 YY_RULE_SETUP
 #line 187 "lex.ll"
+{ KEYWORD_RETURN(ATTRIBUTE); }			// GCC
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 188 "lex.ll"
 { KEYWORD_RETURN(AUTO); }
 	YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 188 "lex.ll"
+case 22:
+YY_RULE_SETUP
+#line 189 "lex.ll"
 { KEYWORD_RETURN(BOOL); }				// C99
 	YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 189 "lex.ll"
+case 23:
+YY_RULE_SETUP
+#line 190 "lex.ll"
 { KEYWORD_RETURN(BREAK); }
 	YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 190 "lex.ll"
+case 24:
+YY_RULE_SETUP
+#line 191 "lex.ll"
 { KEYWORD_RETURN(CASE); }
 	YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 191 "lex.ll"
+case 25:
+YY_RULE_SETUP
+#line 192 "lex.ll"
 { KEYWORD_RETURN(CATCH); }				// CFA
 	YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 192 "lex.ll"
+case 26:
+YY_RULE_SETUP
+#line 193 "lex.ll"
+{ KEYWORD_RETURN(CATCHRESUME); }		// CFA
+	YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 194 "lex.ll"
 { KEYWORD_RETURN(CHAR); }
 	YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 193 "lex.ll"
+case 28:
+YY_RULE_SETUP
+#line 195 "lex.ll"
 { KEYWORD_RETURN(CHOOSE); }				// CFA
 	YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 194 "lex.ll"
+case 29:
+YY_RULE_SETUP
+#line 196 "lex.ll"
 { KEYWORD_RETURN(COMPLEX); }			// C99
 	YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 195 "lex.ll"
+case 30:
+YY_RULE_SETUP
+#line 197 "lex.ll"
 { KEYWORD_RETURN(COMPLEX); }			// GCC
 	YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 196 "lex.ll"
+case 31:
+YY_RULE_SETUP
+#line 198 "lex.ll"
 { KEYWORD_RETURN(COMPLEX); }			// GCC
 	YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 197 "lex.ll"
+case 32:
+YY_RULE_SETUP
+#line 199 "lex.ll"
 { KEYWORD_RETURN(CONST); }
 	YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 198 "lex.ll"
+case 33:
+YY_RULE_SETUP
+#line 200 "lex.ll"
 { KEYWORD_RETURN(CONST); }				// GCC
 	YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 199 "lex.ll"
+case 34:
+YY_RULE_SETUP
+#line 201 "lex.ll"
 { KEYWORD_RETURN(CONST); }				// GCC
 	YY_BREAK
-case 33:
-YY_RULE_SETUP
-#line 200 "lex.ll"
+case 35:
+YY_RULE_SETUP
+#line 202 "lex.ll"
 { KEYWORD_RETURN(CONTEXT); }			// CFA
 	YY_BREAK
-case 34:
-YY_RULE_SETUP
-#line 201 "lex.ll"
+case 36:
+YY_RULE_SETUP
+#line 203 "lex.ll"
 { KEYWORD_RETURN(CONTINUE); }
 	YY_BREAK
-case 35:
-YY_RULE_SETUP
-#line 202 "lex.ll"
+case 37:
+YY_RULE_SETUP
+#line 204 "lex.ll"
 { KEYWORD_RETURN(DEFAULT); }
 	YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 203 "lex.ll"
+case 38:
+YY_RULE_SETUP
+#line 205 "lex.ll"
+{ KEYWORD_RETURN(DISABLE); }			// CFA
+	YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 206 "lex.ll"
 { KEYWORD_RETURN(DO); }
 	YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 204 "lex.ll"
+case 40:
+YY_RULE_SETUP
+#line 207 "lex.ll"
 { KEYWORD_RETURN(DOUBLE); }
 	YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 205 "lex.ll"
+case 41:
+YY_RULE_SETUP
+#line 208 "lex.ll"
 { KEYWORD_RETURN(DTYPE); }				// CFA
 	YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 206 "lex.ll"
+case 42:
+YY_RULE_SETUP
+#line 209 "lex.ll"
 { KEYWORD_RETURN(ELSE); }
 	YY_BREAK
-case 40:
-YY_RULE_SETUP
-#line 207 "lex.ll"
+case 43:
+YY_RULE_SETUP
+#line 210 "lex.ll"
+{ KEYWORD_RETURN(ENABLE); }				// CFA
+	YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 211 "lex.ll"
 { KEYWORD_RETURN(ENUM); }
 	YY_BREAK
-case 41:
-YY_RULE_SETUP
-#line 208 "lex.ll"
+case 45:
+YY_RULE_SETUP
+#line 212 "lex.ll"
 { KEYWORD_RETURN(EXTENSION); }			// GCC
 	YY_BREAK
-case 42:
-YY_RULE_SETUP
-#line 209 "lex.ll"
+case 46:
+YY_RULE_SETUP
+#line 213 "lex.ll"
 { KEYWORD_RETURN(EXTERN); }
 	YY_BREAK
-case 43:
-YY_RULE_SETUP
-#line 210 "lex.ll"
+case 47:
+YY_RULE_SETUP
+#line 214 "lex.ll"
 { KEYWORD_RETURN(FALLTHRU); }			// CFA
 	YY_BREAK
-case 44:
-YY_RULE_SETUP
-#line 211 "lex.ll"
+case 48:
+YY_RULE_SETUP
+#line 215 "lex.ll"
 { KEYWORD_RETURN(FINALLY); }			// CFA
 	YY_BREAK
-case 45:
-YY_RULE_SETUP
-#line 212 "lex.ll"
+case 49:
+YY_RULE_SETUP
+#line 216 "lex.ll"
 { KEYWORD_RETURN(FLOAT); }
 	YY_BREAK
-case 46:
-YY_RULE_SETUP
-#line 213 "lex.ll"
+case 50:
+YY_RULE_SETUP
+#line 217 "lex.ll"
 { KEYWORD_RETURN(FLOAT); }				// GCC
 	YY_BREAK
-case 47:
-YY_RULE_SETUP
-#line 214 "lex.ll"
+case 51:
+YY_RULE_SETUP
+#line 218 "lex.ll"
 { KEYWORD_RETURN(FOR); }
 	YY_BREAK
-case 48:
-YY_RULE_SETUP
-#line 215 "lex.ll"
+case 52:
+YY_RULE_SETUP
+#line 219 "lex.ll"
 { KEYWORD_RETURN(FORALL); }				// CFA
 	YY_BREAK
-case 49:
-YY_RULE_SETUP
-#line 216 "lex.ll"
+case 53:
+YY_RULE_SETUP
+#line 220 "lex.ll"
 { KEYWORD_RETURN(FORTRAN); }
 	YY_BREAK
-case 50:
-YY_RULE_SETUP
-#line 217 "lex.ll"
+case 54:
+YY_RULE_SETUP
+#line 221 "lex.ll"
 { KEYWORD_RETURN(FTYPE); }				// CFA
 	YY_BREAK
-case 51:
-YY_RULE_SETUP
-#line 218 "lex.ll"
+case 55:
+YY_RULE_SETUP
+#line 222 "lex.ll"
 { KEYWORD_RETURN(GENERIC); }			// C11
 	YY_BREAK
-case 52:
-YY_RULE_SETUP
-#line 219 "lex.ll"
+case 56:
+YY_RULE_SETUP
+#line 223 "lex.ll"
 { KEYWORD_RETURN(GOTO); }
 	YY_BREAK
-case 53:
-YY_RULE_SETUP
-#line 220 "lex.ll"
+case 57:
+YY_RULE_SETUP
+#line 224 "lex.ll"
 { KEYWORD_RETURN(IF); }
 	YY_BREAK
-case 54:
-YY_RULE_SETUP
-#line 221 "lex.ll"
+case 58:
+YY_RULE_SETUP
+#line 225 "lex.ll"
 { KEYWORD_RETURN(IMAGINARY); }			// C99
 	YY_BREAK
-case 55:
-YY_RULE_SETUP
-#line 222 "lex.ll"
+case 59:
+YY_RULE_SETUP
+#line 226 "lex.ll"
 { KEYWORD_RETURN(IMAGINARY); }			// GCC
 	YY_BREAK
-case 56:
-YY_RULE_SETUP
-#line 223 "lex.ll"
+case 60:
+YY_RULE_SETUP
+#line 227 "lex.ll"
 { KEYWORD_RETURN(IMAGINARY); }			// GCC
 	YY_BREAK
-case 57:
-YY_RULE_SETUP
-#line 224 "lex.ll"
+case 61:
+YY_RULE_SETUP
+#line 228 "lex.ll"
 { KEYWORD_RETURN(INLINE); }				// C99
 	YY_BREAK
-case 58:
-YY_RULE_SETUP
-#line 225 "lex.ll"
+case 62:
+YY_RULE_SETUP
+#line 229 "lex.ll"
 { KEYWORD_RETURN(INLINE); }				// GCC
 	YY_BREAK
-case 59:
-YY_RULE_SETUP
-#line 226 "lex.ll"
+case 63:
+YY_RULE_SETUP
+#line 230 "lex.ll"
 { KEYWORD_RETURN(INLINE); }				// GCC
 	YY_BREAK
-case 60:
-YY_RULE_SETUP
-#line 227 "lex.ll"
+case 64:
+YY_RULE_SETUP
+#line 231 "lex.ll"
 { KEYWORD_RETURN(INT); }
 	YY_BREAK
-case 61:
-YY_RULE_SETUP
-#line 228 "lex.ll"
+case 65:
+YY_RULE_SETUP
+#line 232 "lex.ll"
 { KEYWORD_RETURN(INT); }				// GCC
 	YY_BREAK
-case 62:
-YY_RULE_SETUP
-#line 229 "lex.ll"
+case 66:
+YY_RULE_SETUP
+#line 233 "lex.ll"
 { KEYWORD_RETURN(LABEL); }				// GCC
 	YY_BREAK
-case 63:
-YY_RULE_SETUP
-#line 230 "lex.ll"
+case 67:
+YY_RULE_SETUP
+#line 234 "lex.ll"
 { KEYWORD_RETURN(LONG); }
 	YY_BREAK
-case 64:
-YY_RULE_SETUP
-#line 231 "lex.ll"
+case 68:
+YY_RULE_SETUP
+#line 235 "lex.ll"
 { KEYWORD_RETURN(LVALUE); }				// CFA
 	YY_BREAK
-case 65:
-YY_RULE_SETUP
-#line 232 "lex.ll"
+case 69:
+YY_RULE_SETUP
+#line 236 "lex.ll"
 { KEYWORD_RETURN(NORETURN); }			// C11
 	YY_BREAK
-case 66:
-YY_RULE_SETUP
-#line 233 "lex.ll"
+case 70:
+YY_RULE_SETUP
+#line 237 "lex.ll"
 { KEYWORD_RETURN(REGISTER); }
 	YY_BREAK
-case 67:
-YY_RULE_SETUP
-#line 234 "lex.ll"
+case 71:
+YY_RULE_SETUP
+#line 238 "lex.ll"
 { KEYWORD_RETURN(RESTRICT); }			// C99
 	YY_BREAK
-case 68:
-YY_RULE_SETUP
-#line 235 "lex.ll"
+case 72:
+YY_RULE_SETUP
+#line 239 "lex.ll"
 { KEYWORD_RETURN(RESTRICT); }			// GCC
 	YY_BREAK
-case 69:
-YY_RULE_SETUP
-#line 236 "lex.ll"
+case 73:
+YY_RULE_SETUP
+#line 240 "lex.ll"
 { KEYWORD_RETURN(RESTRICT); }			// GCC
 	YY_BREAK
-case 70:
-YY_RULE_SETUP
-#line 237 "lex.ll"
+case 74:
+YY_RULE_SETUP
+#line 241 "lex.ll"
 { KEYWORD_RETURN(RETURN); }
 	YY_BREAK
-case 71:
-YY_RULE_SETUP
-#line 238 "lex.ll"
+case 75:
+YY_RULE_SETUP
+#line 242 "lex.ll"
 { KEYWORD_RETURN(SHORT); }
 	YY_BREAK
-case 72:
-YY_RULE_SETUP
-#line 239 "lex.ll"
+case 76:
+YY_RULE_SETUP
+#line 243 "lex.ll"
 { KEYWORD_RETURN(SIGNED); }
 	YY_BREAK
-case 73:
-YY_RULE_SETUP
-#line 240 "lex.ll"
+case 77:
+YY_RULE_SETUP
+#line 244 "lex.ll"
 { KEYWORD_RETURN(SIGNED); }				// GCC
 	YY_BREAK
-case 74:
-YY_RULE_SETUP
-#line 241 "lex.ll"
+case 78:
+YY_RULE_SETUP
+#line 245 "lex.ll"
 { KEYWORD_RETURN(SIGNED); }				// GCC
 	YY_BREAK
-case 75:
-YY_RULE_SETUP
-#line 242 "lex.ll"
+case 79:
+YY_RULE_SETUP
+#line 246 "lex.ll"
 { KEYWORD_RETURN(SIZEOF); }
 	YY_BREAK
-case 76:
-YY_RULE_SETUP
-#line 243 "lex.ll"
+case 80:
+YY_RULE_SETUP
+#line 247 "lex.ll"
 { KEYWORD_RETURN(STATIC); }
 	YY_BREAK
-case 77:
-YY_RULE_SETUP
-#line 244 "lex.ll"
+case 81:
+YY_RULE_SETUP
+#line 248 "lex.ll"
 { KEYWORD_RETURN(STATICASSERT); }		// C11
 	YY_BREAK
-case 78:
-YY_RULE_SETUP
-#line 245 "lex.ll"
+case 82:
+YY_RULE_SETUP
+#line 249 "lex.ll"
 { KEYWORD_RETURN(STRUCT); }
 	YY_BREAK
-case 79:
-YY_RULE_SETUP
-#line 246 "lex.ll"
+case 83:
+YY_RULE_SETUP
+#line 250 "lex.ll"
 { KEYWORD_RETURN(SWITCH); }
 	YY_BREAK
-case 80:
-YY_RULE_SETUP
-#line 247 "lex.ll"
+case 84:
+YY_RULE_SETUP
+#line 251 "lex.ll"
 { KEYWORD_RETURN(THREADLOCAL); }		// C11
 	YY_BREAK
-case 81:
-YY_RULE_SETUP
-#line 248 "lex.ll"
+case 85:
+YY_RULE_SETUP
+#line 252 "lex.ll"
 { KEYWORD_RETURN(THROW); }				// CFA
 	YY_BREAK
-case 82:
-YY_RULE_SETUP
-#line 249 "lex.ll"
+case 86:
+YY_RULE_SETUP
+#line 253 "lex.ll"
+{ KEYWORD_RETURN(THROWRESUME); }		// CFA
+	YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 254 "lex.ll"
 { KEYWORD_RETURN(TRY); }				// CFA
 	YY_BREAK
-case 83:
-YY_RULE_SETUP
-#line 250 "lex.ll"
+case 88:
+YY_RULE_SETUP
+#line 255 "lex.ll"
 { KEYWORD_RETURN(TYPE); }				// CFA
 	YY_BREAK
-case 84:
-YY_RULE_SETUP
-#line 251 "lex.ll"
+case 89:
+YY_RULE_SETUP
+#line 256 "lex.ll"
 { KEYWORD_RETURN(TYPEDEF); }
 	YY_BREAK
-case 85:
-YY_RULE_SETUP
-#line 252 "lex.ll"
+case 90:
+YY_RULE_SETUP
+#line 257 "lex.ll"
 { KEYWORD_RETURN(TYPEOF); }				// GCC
 	YY_BREAK
-case 86:
-YY_RULE_SETUP
-#line 253 "lex.ll"
+case 91:
+YY_RULE_SETUP
+#line 258 "lex.ll"
 { KEYWORD_RETURN(TYPEOF); }				// GCC
 	YY_BREAK
-case 87:
-YY_RULE_SETUP
-#line 254 "lex.ll"
+case 92:
+YY_RULE_SETUP
+#line 259 "lex.ll"
 { KEYWORD_RETURN(TYPEOF); }				// GCC
 	YY_BREAK
-case 88:
-YY_RULE_SETUP
-#line 255 "lex.ll"
+case 93:
+YY_RULE_SETUP
+#line 260 "lex.ll"
 { KEYWORD_RETURN(UNION); }
 	YY_BREAK
-case 89:
-YY_RULE_SETUP
-#line 256 "lex.ll"
+case 94:
+YY_RULE_SETUP
+#line 261 "lex.ll"
 { KEYWORD_RETURN(UNSIGNED); }
 	YY_BREAK
-case 90:
-YY_RULE_SETUP
-#line 257 "lex.ll"
+case 95:
+YY_RULE_SETUP
+#line 262 "lex.ll"
 { KEYWORD_RETURN(VOID); }
 	YY_BREAK
-case 91:
-YY_RULE_SETUP
-#line 258 "lex.ll"
+case 96:
+YY_RULE_SETUP
+#line 263 "lex.ll"
 { KEYWORD_RETURN(VOLATILE); }
 	YY_BREAK
-case 92:
-YY_RULE_SETUP
-#line 259 "lex.ll"
+case 97:
+YY_RULE_SETUP
+#line 264 "lex.ll"
 { KEYWORD_RETURN(VOLATILE); }			// GCC
 	YY_BREAK
-case 93:
-YY_RULE_SETUP
-#line 260 "lex.ll"
+case 98:
+YY_RULE_SETUP
+#line 265 "lex.ll"
 { KEYWORD_RETURN(VOLATILE); }			// GCC
 	YY_BREAK
-case 94:
-YY_RULE_SETUP
-#line 261 "lex.ll"
+case 99:
+YY_RULE_SETUP
+#line 266 "lex.ll"
 { KEYWORD_RETURN(WHILE); }
 	YY_BREAK
 /* identifier */
-case 95:
-YY_RULE_SETUP
-#line 264 "lex.ll"
+case 100:
+YY_RULE_SETUP
+#line 269 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 96:
-YY_RULE_SETUP
-#line 265 "lex.ll"
+case 101:
+YY_RULE_SETUP
+#line 270 "lex.ll"
 { ATTRIBUTE_RETURN(); }
 	YY_BREAK
-case 97:
-YY_RULE_SETUP
-#line 266 "lex.ll"
+case 102:
+YY_RULE_SETUP
+#line 271 "lex.ll"
 { BEGIN BKQUOTE; }
 	YY_BREAK
-case 98:
-YY_RULE_SETUP
-#line 267 "lex.ll"
+case 103:
+YY_RULE_SETUP
+#line 272 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 99:
-YY_RULE_SETUP
-#line 268 "lex.ll"
+case 104:
+YY_RULE_SETUP
+#line 273 "lex.ll"
 { BEGIN 0; }
 	YY_BREAK
 /* numeric constants */
-case 100:
-YY_RULE_SETUP
-#line 271 "lex.ll"
+case 105:
+YY_RULE_SETUP
+#line 276 "lex.ll"
 { NUMERIC_RETURN(ZERO); }				// CFA
 	YY_BREAK
-case 101:
-YY_RULE_SETUP
-#line 272 "lex.ll"
+case 106:
+YY_RULE_SETUP
+#line 277 "lex.ll"
 { NUMERIC_RETURN(ONE); }				// CFA
 	YY_BREAK
-case 102:
-YY_RULE_SETUP
-#line 273 "lex.ll"
+case 107:
+YY_RULE_SETUP
+#line 278 "lex.ll"
 { NUMERIC_RETURN(INTEGERconstant); }
 	YY_BREAK
-case 103:
-YY_RULE_SETUP
-#line 274 "lex.ll"
+case 108:
+YY_RULE_SETUP
+#line 279 "lex.ll"
 { NUMERIC_RETURN(INTEGERconstant); }
 	YY_BREAK
-case 104:
-YY_RULE_SETUP
-#line 275 "lex.ll"
+case 109:
+YY_RULE_SETUP
+#line 280 "lex.ll"
 { NUMERIC_RETURN(INTEGERconstant); }
 	YY_BREAK
-case 105:
-YY_RULE_SETUP
-#line 276 "lex.ll"
+case 110:
+YY_RULE_SETUP
+#line 281 "lex.ll"
 { NUMERIC_RETURN(FLOATINGconstant); }
 	YY_BREAK
-case 106:
-YY_RULE_SETUP
-#line 277 "lex.ll"
+case 111:
+YY_RULE_SETUP
+#line 282 "lex.ll"
 { NUMERIC_RETURN(FLOATINGconstant); }
 	YY_BREAK
 /* character constant, allows empty value */
-case 107:
-YY_RULE_SETUP
-#line 280 "lex.ll"
+case 112:
+YY_RULE_SETUP
+#line 285 "lex.ll"
 { BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
 	YY_BREAK
-case 108:
-YY_RULE_SETUP
-#line 281 "lex.ll"
+case 113:
+YY_RULE_SETUP
+#line 286 "lex.ll"
 { *strtext += std::string( yytext ); }
 	YY_BREAK
-case 109:
-/* rule 109 can match eol */
-YY_RULE_SETUP
-#line 282 "lex.ll"
+case 114:
+/* rule 114 can match eol */
+YY_RULE_SETUP
+#line 287 "lex.ll"
 { BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
 	YY_BREAK
 /* ' stop highlighting */
 /* string constant */
-case 110:
-YY_RULE_SETUP
-#line 286 "lex.ll"
+case 115:
+YY_RULE_SETUP
+#line 291 "lex.ll"
 { BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
 	YY_BREAK
-case 111:
-YY_RULE_SETUP
-#line 287 "lex.ll"
+case 116:
+YY_RULE_SETUP
+#line 292 "lex.ll"
 { *strtext += std::string( yytext ); }
 	YY_BREAK
-case 112:
-/* rule 112 can match eol */
-YY_RULE_SETUP
-#line 288 "lex.ll"
+case 117:
+/* rule 117 can match eol */
+YY_RULE_SETUP
+#line 293 "lex.ll"
 { BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
 	YY_BREAK
 /* " stop highlighting */
 /* common character/string constant */
-case 113:
-YY_RULE_SETUP
-#line 292 "lex.ll"
+case 118:
+YY_RULE_SETUP
+#line 297 "lex.ll"
 { rm_underscore(); *strtext += std::string( yytext ); }
 	YY_BREAK
-case 114:
-/* rule 114 can match eol */
-YY_RULE_SETUP
-#line 293 "lex.ll"
+case 119:
+/* rule 119 can match eol */
+YY_RULE_SETUP
+#line 298 "lex.ll"
 {}						// continuation (ALSO HANDLED BY CPP)
 	YY_BREAK
-case 115:
-YY_RULE_SETUP
-#line 294 "lex.ll"
+case 120:
+YY_RULE_SETUP
+#line 299 "lex.ll"
 { *strtext += std::string( yytext ); } // unknown escape character
 	YY_BREAK
 /* punctuation */
-case 116:
-YY_RULE_SETUP
-#line 297 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
-case 117:
-YY_RULE_SETUP
-#line 298 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
-case 118:
-YY_RULE_SETUP
-#line 299 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
-case 119:
-YY_RULE_SETUP
-#line 300 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
-case 120:
-YY_RULE_SETUP
-#line 301 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
 case 121:
 YY_RULE_SETUP
@@ -2386,5 +2437,5 @@
 YY_RULE_SETUP
 #line 303 "lex.ll"
-{ ASCIIOP_RETURN(); }					// also operator
+{ ASCIIOP_RETURN(); }
 	YY_BREAK
 case 123:
@@ -2401,58 +2452,58 @@
 YY_RULE_SETUP
 #line 306 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 307 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 127:
+YY_RULE_SETUP
+#line 308 "lex.ll"
 { ASCIIOP_RETURN(); }					// also operator
 	YY_BREAK
-case 126:
-YY_RULE_SETUP
-#line 307 "lex.ll"
+case 128:
+YY_RULE_SETUP
+#line 309 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 310 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 311 "lex.ll"
+{ ASCIIOP_RETURN(); }					// also operator
+	YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 312 "lex.ll"
 { NAMEDOP_RETURN(ELLIPSIS); }
 	YY_BREAK
 /* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
-case 127:
-YY_RULE_SETUP
-#line 310 "lex.ll"
+case 132:
+YY_RULE_SETUP
+#line 315 "lex.ll"
 { RETURN_VAL('['); }
 	YY_BREAK
-case 128:
-YY_RULE_SETUP
-#line 311 "lex.ll"
+case 133:
+YY_RULE_SETUP
+#line 316 "lex.ll"
 { RETURN_VAL(']'); }
 	YY_BREAK
-case 129:
-YY_RULE_SETUP
-#line 312 "lex.ll"
+case 134:
+YY_RULE_SETUP
+#line 317 "lex.ll"
 { RETURN_VAL('{'); }
 	YY_BREAK
-case 130:
-YY_RULE_SETUP
-#line 313 "lex.ll"
+case 135:
+YY_RULE_SETUP
+#line 318 "lex.ll"
 { RETURN_VAL('}'); }
 	YY_BREAK
 /* operators */
-case 131:
-YY_RULE_SETUP
-#line 316 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
-case 132:
-YY_RULE_SETUP
-#line 317 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
-case 133:
-YY_RULE_SETUP
-#line 318 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
-case 134:
-YY_RULE_SETUP
-#line 319 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
-case 135:
-YY_RULE_SETUP
-#line 320 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
 case 136:
 YY_RULE_SETUP
@@ -2502,121 +2553,156 @@
 case 145:
 YY_RULE_SETUP
+#line 330 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 146:
+YY_RULE_SETUP
 #line 331 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 147:
+YY_RULE_SETUP
+#line 332 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 148:
+YY_RULE_SETUP
+#line 333 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 334 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 150:
+YY_RULE_SETUP
+#line 336 "lex.ll"
 { NAMEDOP_RETURN(ICR); }
 	YY_BREAK
-case 146:
-YY_RULE_SETUP
-#line 332 "lex.ll"
+case 151:
+YY_RULE_SETUP
+#line 337 "lex.ll"
 { NAMEDOP_RETURN(DECR); }
 	YY_BREAK
-case 147:
-YY_RULE_SETUP
-#line 333 "lex.ll"
+case 152:
+YY_RULE_SETUP
+#line 338 "lex.ll"
 { NAMEDOP_RETURN(EQ); }
 	YY_BREAK
-case 148:
-YY_RULE_SETUP
-#line 334 "lex.ll"
+case 153:
+YY_RULE_SETUP
+#line 339 "lex.ll"
 { NAMEDOP_RETURN(NE); }
 	YY_BREAK
-case 149:
-YY_RULE_SETUP
-#line 335 "lex.ll"
+case 154:
+YY_RULE_SETUP
+#line 340 "lex.ll"
 { NAMEDOP_RETURN(LS); }
 	YY_BREAK
-case 150:
-YY_RULE_SETUP
-#line 336 "lex.ll"
+case 155:
+YY_RULE_SETUP
+#line 341 "lex.ll"
 { NAMEDOP_RETURN(RS); }
 	YY_BREAK
-case 151:
-YY_RULE_SETUP
-#line 337 "lex.ll"
+case 156:
+YY_RULE_SETUP
+#line 342 "lex.ll"
 { NAMEDOP_RETURN(LE); }
 	YY_BREAK
-case 152:
-YY_RULE_SETUP
-#line 338 "lex.ll"
+case 157:
+YY_RULE_SETUP
+#line 343 "lex.ll"
 { NAMEDOP_RETURN(GE); }
 	YY_BREAK
-case 153:
-YY_RULE_SETUP
-#line 339 "lex.ll"
+case 158:
+YY_RULE_SETUP
+#line 344 "lex.ll"
 { NAMEDOP_RETURN(ANDAND); }
 	YY_BREAK
-case 154:
-YY_RULE_SETUP
-#line 340 "lex.ll"
+case 159:
+YY_RULE_SETUP
+#line 345 "lex.ll"
 { NAMEDOP_RETURN(OROR); }
 	YY_BREAK
-case 155:
-YY_RULE_SETUP
-#line 341 "lex.ll"
+case 160:
+YY_RULE_SETUP
+#line 346 "lex.ll"
 { NAMEDOP_RETURN(ARROW); }
 	YY_BREAK
-case 156:
-YY_RULE_SETUP
-#line 342 "lex.ll"
+case 161:
+YY_RULE_SETUP
+#line 347 "lex.ll"
 { NAMEDOP_RETURN(PLUSassign); }
 	YY_BREAK
-case 157:
-YY_RULE_SETUP
-#line 343 "lex.ll"
+case 162:
+YY_RULE_SETUP
+#line 348 "lex.ll"
 { NAMEDOP_RETURN(MINUSassign); }
 	YY_BREAK
-case 158:
-YY_RULE_SETUP
-#line 344 "lex.ll"
+case 163:
+YY_RULE_SETUP
+#line 349 "lex.ll"
 { NAMEDOP_RETURN(MULTassign); }
 	YY_BREAK
-case 159:
-YY_RULE_SETUP
-#line 345 "lex.ll"
+case 164:
+YY_RULE_SETUP
+#line 350 "lex.ll"
 { NAMEDOP_RETURN(DIVassign); }
 	YY_BREAK
-case 160:
-YY_RULE_SETUP
-#line 346 "lex.ll"
+case 165:
+YY_RULE_SETUP
+#line 351 "lex.ll"
 { NAMEDOP_RETURN(MODassign); }
 	YY_BREAK
-case 161:
-YY_RULE_SETUP
-#line 347 "lex.ll"
+case 166:
+YY_RULE_SETUP
+#line 352 "lex.ll"
 { NAMEDOP_RETURN(ANDassign); }
 	YY_BREAK
-case 162:
-YY_RULE_SETUP
-#line 348 "lex.ll"
+case 167:
+YY_RULE_SETUP
+#line 353 "lex.ll"
 { NAMEDOP_RETURN(ORassign); }
 	YY_BREAK
-case 163:
-YY_RULE_SETUP
-#line 349 "lex.ll"
+case 168:
+YY_RULE_SETUP
+#line 354 "lex.ll"
 { NAMEDOP_RETURN(ERassign); }
 	YY_BREAK
-case 164:
-YY_RULE_SETUP
-#line 350 "lex.ll"
+case 169:
+YY_RULE_SETUP
+#line 355 "lex.ll"
 { NAMEDOP_RETURN(LSassign); }
 	YY_BREAK
-case 165:
-YY_RULE_SETUP
-#line 351 "lex.ll"
+case 170:
+YY_RULE_SETUP
+#line 356 "lex.ll"
 { NAMEDOP_RETURN(RSassign); }
 	YY_BREAK
+case 171:
+YY_RULE_SETUP
+#line 358 "lex.ll"
+{ NAMEDOP_RETURN(ATassign); }
+	YY_BREAK
 /* CFA, operator identifier */
-case 166:
-YY_RULE_SETUP
-#line 354 "lex.ll"
+case 172:
+YY_RULE_SETUP
+#line 361 "lex.ll"
 { IDENTIFIER_RETURN(); }				// unary
 	YY_BREAK
-case 167:
-YY_RULE_SETUP
-#line 355 "lex.ll"
+case 173:
+YY_RULE_SETUP
+#line 362 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 168:
-YY_RULE_SETUP
-#line 356 "lex.ll"
+case 174:
+YY_RULE_SETUP
+#line 363 "lex.ll"
+{ IDENTIFIER_RETURN(); }
+	YY_BREAK
+case 175:
+YY_RULE_SETUP
+#line 364 "lex.ll"
 { IDENTIFIER_RETURN(); }		// binary
 	YY_BREAK
@@ -2647,7 +2733,7 @@
 	  an argument list.
 	*/
-case 169:
-YY_RULE_SETUP
-#line 383 "lex.ll"
+case 176:
+YY_RULE_SETUP
+#line 391 "lex.ll"
 {
 	// 1 or 2 character unary operator ?
@@ -2662,15 +2748,15 @@
 	YY_BREAK
 /* unknown characters */
-case 170:
-YY_RULE_SETUP
-#line 395 "lex.ll"
+case 177:
+YY_RULE_SETUP
+#line 403 "lex.ll"
 { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
 	YY_BREAK
-case 171:
-YY_RULE_SETUP
-#line 397 "lex.ll"
+case 178:
+YY_RULE_SETUP
+#line 405 "lex.ll"
 ECHO;
 	YY_BREAK
-#line 2675 "Parser/lex.cc"
+#line 2761 "Parser/lex.cc"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(COMMENT):
@@ -2969,5 +3055,5 @@
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 826 )
+			if ( yy_current_state >= 852 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
@@ -2997,9 +3083,9 @@
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 826 )
+		if ( yy_current_state >= 852 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 825);
+	yy_is_jam = (yy_current_state == 851);
 
 	return yy_is_jam ? 0 : yy_current_state;
@@ -3647,5 +3733,5 @@
 #define YYTABLES_NAME "yytables"
 
-#line 397 "lex.ll"
+#line 405 "lex.ll"
 
 
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/Parser/lex.ll	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Fri Jun 19 11:10:14 2015
- * Update Count     : 392
+ * Last Modified On : Thu Oct  8 16:13:07 2015
+ * Update Count     : 404
  */
 
@@ -182,4 +182,5 @@
 __asm			{ KEYWORD_RETURN(ASM); }				// GCC
 __asm__			{ KEYWORD_RETURN(ASM); }				// GCC
+_At				{ KEYWORD_RETURN(AT); }					// CFA
 _Atomic			{ KEYWORD_RETURN(ATOMIC); }				// C11
 __attribute		{ KEYWORD_RETURN(ATTRIBUTE); }			// GCC
@@ -190,4 +191,5 @@
 case			{ KEYWORD_RETURN(CASE); }
 catch			{ KEYWORD_RETURN(CATCH); }				// CFA
+catchResume		{ KEYWORD_RETURN(CATCHRESUME); }		// CFA
 char			{ KEYWORD_RETURN(CHAR); }
 choose			{ KEYWORD_RETURN(CHOOSE); }				// CFA
@@ -201,8 +203,10 @@
 continue		{ KEYWORD_RETURN(CONTINUE); }
 default			{ KEYWORD_RETURN(DEFAULT); }
+disable			{ KEYWORD_RETURN(DISABLE); }			// CFA
 do				{ KEYWORD_RETURN(DO); }
 double			{ KEYWORD_RETURN(DOUBLE); }
 dtype			{ KEYWORD_RETURN(DTYPE); }				// CFA
 else			{ KEYWORD_RETURN(ELSE); }
+enable			{ KEYWORD_RETURN(ENABLE); }				// CFA
 enum			{ KEYWORD_RETURN(ENUM); }
 __extension__	{ KEYWORD_RETURN(EXTENSION); }			// GCC
@@ -247,4 +251,5 @@
 _Thread_local	{ KEYWORD_RETURN(THREADLOCAL); }		// C11
 throw			{ KEYWORD_RETURN(THROW); }				// CFA
+throwResume		{ KEYWORD_RETURN(THROWRESUME); }		// CFA
 try				{ KEYWORD_RETURN(TRY); }				// CFA
 type			{ KEYWORD_RETURN(TYPE); }				// CFA
@@ -351,7 +356,10 @@
 ">>="			{ NAMEDOP_RETURN(RSassign); }
 
+"@="			{ NAMEDOP_RETURN(ATassign); }
+
 				/* CFA, operator identifier */
 {op_unary}"?"	{ IDENTIFIER_RETURN(); }				// unary
 "?"({op_unary_pre_post}|"()"|"[?]"|"{}") { IDENTIFIER_RETURN(); }
+"^?{}" { IDENTIFIER_RETURN(); }
 "?"{op_binary_over}"?"	{ IDENTIFIER_RETURN(); }		// binary
 	/*
@@ -381,5 +389,5 @@
 	  an argument list.
 	*/
-{op_unary}"?"(({op_unary_pre_post}|"[?]")|({op_binary_over}"?")) {
+{op_unary}"?"({op_unary_pre_post}|"[?]"|{op_binary_over}"?") {
 	// 1 or 2 character unary operator ?
 	int i = yytext[1] == '?' ? 1 : 2;
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/Parser/parser.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -166,53 +166,59 @@
      RETURN = 305,
      CHOOSE = 306,
-     FALLTHRU = 307,
-     TRY = 308,
-     CATCH = 309,
-     FINALLY = 310,
-     THROW = 311,
-     ASM = 312,
-     ALIGNAS = 313,
-     ALIGNOF = 314,
-     ATOMIC = 315,
-     GENERIC = 316,
-     NORETURN = 317,
-     STATICASSERT = 318,
-     THREADLOCAL = 319,
-     IDENTIFIER = 320,
-     QUOTED_IDENTIFIER = 321,
-     TYPEDEFname = 322,
-     TYPEGENname = 323,
-     ATTR_IDENTIFIER = 324,
-     ATTR_TYPEDEFname = 325,
-     ATTR_TYPEGENname = 326,
-     INTEGERconstant = 327,
-     FLOATINGconstant = 328,
-     CHARACTERconstant = 329,
-     STRINGliteral = 330,
-     ZERO = 331,
-     ONE = 332,
-     ARROW = 333,
-     ICR = 334,
-     DECR = 335,
-     LS = 336,
-     RS = 337,
-     LE = 338,
-     GE = 339,
-     EQ = 340,
-     NE = 341,
-     ANDAND = 342,
-     OROR = 343,
-     ELLIPSIS = 344,
-     MULTassign = 345,
-     DIVassign = 346,
-     MODassign = 347,
-     PLUSassign = 348,
-     MINUSassign = 349,
-     LSassign = 350,
-     RSassign = 351,
-     ANDassign = 352,
-     ERassign = 353,
-     ORassign = 354,
-     THEN = 355
+     DISABLE = 307,
+     ENABLE = 308,
+     FALLTHRU = 309,
+     TRY = 310,
+     CATCH = 311,
+     CATCHRESUME = 312,
+     FINALLY = 313,
+     THROW = 314,
+     THROWRESUME = 315,
+     AT = 316,
+     ASM = 317,
+     ALIGNAS = 318,
+     ALIGNOF = 319,
+     ATOMIC = 320,
+     GENERIC = 321,
+     NORETURN = 322,
+     STATICASSERT = 323,
+     THREADLOCAL = 324,
+     IDENTIFIER = 325,
+     QUOTED_IDENTIFIER = 326,
+     TYPEDEFname = 327,
+     TYPEGENname = 328,
+     ATTR_IDENTIFIER = 329,
+     ATTR_TYPEDEFname = 330,
+     ATTR_TYPEGENname = 331,
+     INTEGERconstant = 332,
+     FLOATINGconstant = 333,
+     CHARACTERconstant = 334,
+     STRINGliteral = 335,
+     ZERO = 336,
+     ONE = 337,
+     ARROW = 338,
+     ICR = 339,
+     DECR = 340,
+     LS = 341,
+     RS = 342,
+     LE = 343,
+     GE = 344,
+     EQ = 345,
+     NE = 346,
+     ANDAND = 347,
+     OROR = 348,
+     ELLIPSIS = 349,
+     MULTassign = 350,
+     DIVassign = 351,
+     MODassign = 352,
+     PLUSassign = 353,
+     MINUSassign = 354,
+     LSassign = 355,
+     RSassign = 356,
+     ANDassign = 357,
+     ERassign = 358,
+     ORassign = 359,
+     ATassign = 360,
+     THEN = 361
    };
 #endif
@@ -267,53 +273,59 @@
 #define RETURN 305
 #define CHOOSE 306
-#define FALLTHRU 307
-#define TRY 308
-#define CATCH 309
-#define FINALLY 310
-#define THROW 311
-#define ASM 312
-#define ALIGNAS 313
-#define ALIGNOF 314
-#define ATOMIC 315
-#define GENERIC 316
-#define NORETURN 317
-#define STATICASSERT 318
-#define THREADLOCAL 319
-#define IDENTIFIER 320
-#define QUOTED_IDENTIFIER 321
-#define TYPEDEFname 322
-#define TYPEGENname 323
-#define ATTR_IDENTIFIER 324
-#define ATTR_TYPEDEFname 325
-#define ATTR_TYPEGENname 326
-#define INTEGERconstant 327
-#define FLOATINGconstant 328
-#define CHARACTERconstant 329
-#define STRINGliteral 330
-#define ZERO 331
-#define ONE 332
-#define ARROW 333
-#define ICR 334
-#define DECR 335
-#define LS 336
-#define RS 337
-#define LE 338
-#define GE 339
-#define EQ 340
-#define NE 341
-#define ANDAND 342
-#define OROR 343
-#define ELLIPSIS 344
-#define MULTassign 345
-#define DIVassign 346
-#define MODassign 347
-#define PLUSassign 348
-#define MINUSassign 349
-#define LSassign 350
-#define RSassign 351
-#define ANDassign 352
-#define ERassign 353
-#define ORassign 354
-#define THEN 355
+#define DISABLE 307
+#define ENABLE 308
+#define FALLTHRU 309
+#define TRY 310
+#define CATCH 311
+#define CATCHRESUME 312
+#define FINALLY 313
+#define THROW 314
+#define THROWRESUME 315
+#define AT 316
+#define ASM 317
+#define ALIGNAS 318
+#define ALIGNOF 319
+#define ATOMIC 320
+#define GENERIC 321
+#define NORETURN 322
+#define STATICASSERT 323
+#define THREADLOCAL 324
+#define IDENTIFIER 325
+#define QUOTED_IDENTIFIER 326
+#define TYPEDEFname 327
+#define TYPEGENname 328
+#define ATTR_IDENTIFIER 329
+#define ATTR_TYPEDEFname 330
+#define ATTR_TYPEGENname 331
+#define INTEGERconstant 332
+#define FLOATINGconstant 333
+#define CHARACTERconstant 334
+#define STRINGliteral 335
+#define ZERO 336
+#define ONE 337
+#define ARROW 338
+#define ICR 339
+#define DECR 340
+#define LS 341
+#define RS 342
+#define LE 343
+#define GE 344
+#define EQ 345
+#define NE 346
+#define ANDAND 347
+#define OROR 348
+#define ELLIPSIS 349
+#define MULTassign 350
+#define DIVassign 351
+#define MODassign 352
+#define PLUSassign 353
+#define MINUSassign 354
+#define LSassign 355
+#define RSassign 356
+#define ANDassign 357
+#define ERassign 358
+#define ORassign 359
+#define ATassign 360
+#define THEN 361
 
 
@@ -325,5 +337,5 @@
 
 /* Line 293 of yacc.c  */
-#line 108 "parser.yy"
+#line 110 "parser.yy"
 
 	Token tok;
@@ -342,5 +354,5 @@
 
 /* Line 293 of yacc.c  */
-#line 345 "Parser/parser.cc"
+#line 357 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -354,5 +366,5 @@
 
 /* Line 343 of yacc.c  */
-#line 357 "Parser/parser.cc"
+#line 369 "Parser/parser.cc"
 
 #ifdef short
@@ -571,20 +583,20 @@
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  246
+#define YYFINAL  247
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   11329
+#define YYLAST   10817
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  125
+#define YYNTOKENS  131
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  238
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  740
+#define YYNRULES  749
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1530
+#define YYNSTATES  1570
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   355
+#define YYMAXUTOK   361
 
 #define YYTRANSLATE(YYX)						\
@@ -597,14 +609,14 @@
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   110,     2,     2,     2,   117,   112,     2,
-     101,   102,   111,   113,   108,   114,   105,   116,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   109,   124,
-     118,   123,   119,   122,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   116,     2,     2,     2,   123,   118,     2,
+     107,   108,   117,   119,   114,   120,   111,   122,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   115,   130,
+     124,   129,   125,   128,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   103,     2,   104,   120,     2,     2,     2,     2,     2,
+       2,   109,     2,   110,   126,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   106,   121,   107,   115,     2,     2,     2,
+       2,     2,     2,   112,   127,   113,   121,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -629,5 +641,6 @@
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106
 };
 
@@ -640,76 +653,76 @@
       17,    19,    21,    23,    25,    27,    29,    32,    34,    36,
       40,    44,    46,    53,    58,    62,    70,    74,    82,    85,
-      88,    96,    98,   102,   103,   105,   109,   117,   127,   129,
-     133,   135,   139,   147,   151,   159,   161,   163,   165,   168,
-     171,   174,   177,   180,   183,   186,   191,   193,   198,   203,
-     206,   211,   214,   216,   218,   220,   222,   224,   229,   234,
-     236,   240,   244,   248,   250,   254,   258,   260,   264,   268,
-     270,   274,   278,   282,   286,   288,   292,   296,   298,   302,
-     304,   308,   310,   314,   316,   320,   322,   326,   328,   334,
-     339,   345,   347,   349,   353,   357,   360,   361,   363,   366,
-     372,   379,   387,   389,   393,   395,   397,   399,   401,   403,
-     405,   407,   409,   411,   413,   415,   419,   420,   422,   424,
-     426,   428,   430,   432,   434,   436,   438,   443,   446,   454,
-     456,   460,   462,   465,   467,   470,   472,   475,   478,   484,
-     492,   498,   508,   514,   524,   526,   530,   532,   534,   538,
-     542,   545,   547,   550,   553,   554,   556,   559,   563,   564,
-     566,   569,   573,   577,   582,   583,   585,   587,   590,   596,
-     604,   611,   618,   623,   627,   632,   635,   639,   642,   646,
-     650,   654,   657,   661,   665,   670,   672,   678,   685,   695,
-     706,   709,   711,   714,   717,   720,   722,   729,   738,   749,
-     762,   777,   778,   780,   781,   783,   785,   789,   794,   802,
-     803,   805,   809,   811,   815,   817,   819,   821,   825,   827,
-     829,   831,   835,   836,   838,   842,   847,   849,   853,   855,
-     857,   861,   865,   869,   873,   877,   880,   884,   891,   895,
-     899,   904,   906,   909,   912,   916,   922,   931,   939,   947,
-     953,   963,   966,   969,   975,   979,   985,   990,   994,   999,
-    1004,  1012,  1016,  1020,  1024,  1028,  1033,  1040,  1042,  1044,
-    1046,  1048,  1050,  1052,  1054,  1056,  1057,  1059,  1061,  1064,
-    1066,  1068,  1070,  1072,  1074,  1076,  1078,  1079,  1085,  1087,
-    1090,  1094,  1096,  1099,  1101,  1103,  1105,  1107,  1109,  1111,
-    1113,  1115,  1117,  1119,  1121,  1123,  1125,  1127,  1129,  1131,
-    1133,  1135,  1137,  1139,  1141,  1143,  1146,  1149,  1153,  1157,
-    1159,  1163,  1165,  1168,  1171,  1174,  1179,  1184,  1189,  1194,
-    1196,  1199,  1202,  1206,  1208,  1211,  1214,  1216,  1219,  1222,
-    1226,  1228,  1231,  1234,  1236,  1238,  1243,  1246,  1252,  1260,
-    1263,  1266,  1269,  1271,  1274,  1277,  1281,  1284,  1288,  1290,
-    1293,  1297,  1300,  1303,  1308,  1309,  1311,  1314,  1317,  1319,
-    1320,  1322,  1325,  1328,  1334,  1341,  1344,  1347,  1352,  1353,
-    1356,  1357,  1359,  1361,  1363,  1369,  1375,  1381,  1383,  1389,
-    1395,  1405,  1407,  1413,  1414,  1416,  1418,  1424,  1426,  1428,
-    1434,  1440,  1442,  1446,  1450,  1455,  1457,  1459,  1461,  1463,
-    1466,  1468,  1472,  1476,  1478,  1481,  1483,  1487,  1489,  1491,
-    1493,  1495,  1497,  1499,  1501,  1503,  1505,  1507,  1509,  1512,
-    1514,  1516,  1518,  1521,  1522,  1525,  1527,  1532,  1534,  1537,
-    1541,  1546,  1549,  1552,  1554,  1557,  1559,  1562,  1568,  1574,
-    1582,  1589,  1591,  1594,  1597,  1601,  1603,  1606,  1609,  1614,
-    1617,  1622,  1623,  1628,  1631,  1633,  1635,  1637,  1638,  1641,
-    1647,  1653,  1667,  1669,  1671,  1675,  1679,  1682,  1686,  1690,
-    1693,  1698,  1700,  1707,  1717,  1718,  1730,  1732,  1736,  1740,
-    1744,  1746,  1748,  1754,  1757,  1763,  1764,  1766,  1768,  1772,
-    1773,  1775,  1777,  1779,  1781,  1782,  1789,  1792,  1794,  1797,
-    1802,  1805,  1809,  1813,  1817,  1822,  1828,  1834,  1840,  1847,
-    1849,  1851,  1853,  1857,  1858,  1864,  1865,  1867,  1869,  1872,
-    1879,  1881,  1885,  1886,  1888,  1893,  1895,  1897,  1899,  1901,
-    1904,  1906,  1909,  1912,  1914,  1918,  1921,  1925,  1929,  1932,
-    1937,  1942,  1946,  1955,  1959,  1962,  1964,  1967,  1974,  1983,
-    1987,  1990,  1994,  1998,  2003,  2008,  2012,  2014,  2016,  2018,
-    2023,  2030,  2034,  2037,  2041,  2045,  2050,  2055,  2059,  2062,
-    2064,  2067,  2070,  2072,  2076,  2079,  2083,  2087,  2090,  2095,
-    2100,  2104,  2111,  2120,  2124,  2127,  2129,  2132,  2135,  2138,
-    2142,  2146,  2149,  2154,  2159,  2163,  2170,  2179,  2183,  2186,
-    2188,  2191,  2194,  2196,  2198,  2201,  2205,  2209,  2212,  2217,
-    2224,  2233,  2235,  2238,  2241,  2243,  2246,  2249,  2253,  2257,
-    2259,  2264,  2269,  2273,  2279,  2288,  2292,  2295,  2299,  2301,
-    2307,  2313,  2320,  2327,  2329,  2332,  2335,  2337,  2340,  2343,
-    2347,  2351,  2353,  2358,  2363,  2367,  2373,  2382,  2386,  2388,
-    2391,  2393,  2396,  2403,  2409,  2416,  2424,  2432,  2434,  2437,
-    2440,  2442,  2445,  2448,  2452,  2456,  2458,  2463,  2468,  2472,
-    2481,  2485,  2487,  2489,  2492,  2494,  2496,  2499,  2503,  2506,
-    2510,  2513,  2517,  2521,  2524,  2529,  2533,  2536,  2540,  2543,
-    2548,  2552,  2555,  2562,  2569,  2576,  2584,  2586,  2589,  2591,
-    2593,  2595,  2598,  2602,  2605,  2609,  2612,  2616,  2620,  2625,
-    2628,  2632,  2637,  2640,  2646,  2652,  2659,  2666,  2667,  2669,
-    2670
+      88,    96,   101,   103,   107,   108,   110,   114,   122,   132,
+     134,   138,   140,   144,   152,   156,   164,   166,   168,   170,
+     173,   176,   179,   182,   185,   188,   191,   196,   198,   203,
+     208,   211,   216,   219,   221,   223,   225,   227,   229,   234,
+     239,   241,   245,   249,   253,   255,   259,   263,   265,   269,
+     273,   275,   279,   283,   287,   291,   293,   297,   301,   303,
+     307,   309,   313,   315,   319,   321,   325,   327,   331,   333,
+     339,   344,   350,   352,   354,   358,   362,   365,   366,   368,
+     371,   377,   384,   392,   394,   398,   400,   402,   404,   406,
+     408,   410,   412,   414,   416,   418,   420,   424,   425,   427,
+     429,   431,   433,   435,   437,   439,   441,   443,   450,   455,
+     458,   466,   468,   472,   474,   477,   479,   482,   484,   487,
+     490,   496,   504,   510,   520,   526,   536,   538,   542,   544,
+     546,   550,   554,   557,   559,   562,   565,   566,   568,   571,
+     575,   576,   578,   581,   585,   589,   594,   595,   597,   599,
+     602,   608,   616,   623,   630,   635,   639,   644,   647,   651,
+     654,   658,   662,   666,   670,   676,   680,   684,   689,   691,
+     697,   704,   710,   717,   727,   738,   748,   759,   762,   764,
+     767,   770,   773,   775,   782,   791,   802,   815,   830,   831,
+     833,   834,   836,   838,   842,   847,   855,   856,   858,   862,
+     864,   868,   870,   872,   874,   878,   880,   882,   884,   888,
+     889,   891,   895,   900,   902,   906,   908,   910,   914,   918,
+     922,   926,   930,   933,   937,   944,   948,   952,   957,   959,
+     962,   965,   969,   975,   984,   992,  1000,  1006,  1016,  1019,
+    1022,  1028,  1032,  1038,  1043,  1047,  1052,  1057,  1065,  1069,
+    1073,  1077,  1081,  1086,  1093,  1095,  1097,  1099,  1101,  1103,
+    1105,  1107,  1109,  1110,  1112,  1114,  1117,  1119,  1121,  1123,
+    1125,  1127,  1129,  1131,  1132,  1138,  1140,  1143,  1147,  1149,
+    1152,  1154,  1156,  1158,  1160,  1162,  1164,  1166,  1168,  1170,
+    1172,  1174,  1176,  1178,  1180,  1182,  1184,  1186,  1188,  1190,
+    1192,  1194,  1196,  1199,  1202,  1206,  1210,  1212,  1216,  1218,
+    1221,  1224,  1227,  1232,  1237,  1242,  1247,  1249,  1252,  1255,
+    1259,  1261,  1264,  1267,  1269,  1272,  1275,  1279,  1281,  1284,
+    1287,  1289,  1291,  1296,  1299,  1305,  1313,  1316,  1319,  1322,
+    1324,  1327,  1330,  1334,  1337,  1341,  1343,  1346,  1350,  1353,
+    1356,  1361,  1362,  1364,  1367,  1370,  1372,  1373,  1375,  1378,
+    1381,  1387,  1394,  1397,  1400,  1405,  1406,  1409,  1410,  1412,
+    1414,  1416,  1422,  1428,  1434,  1436,  1442,  1448,  1458,  1460,
+    1466,  1467,  1469,  1471,  1477,  1479,  1481,  1487,  1493,  1495,
+    1499,  1503,  1508,  1510,  1512,  1514,  1516,  1519,  1521,  1525,
+    1529,  1531,  1534,  1536,  1540,  1542,  1544,  1546,  1548,  1550,
+    1552,  1554,  1556,  1558,  1560,  1562,  1565,  1567,  1569,  1571,
+    1574,  1575,  1578,  1581,  1583,  1588,  1589,  1591,  1594,  1598,
+    1603,  1606,  1609,  1611,  1614,  1616,  1619,  1625,  1631,  1639,
+    1646,  1648,  1651,  1654,  1658,  1660,  1663,  1666,  1671,  1674,
+    1679,  1680,  1685,  1688,  1690,  1692,  1694,  1695,  1698,  1704,
+    1710,  1724,  1726,  1728,  1732,  1736,  1739,  1743,  1747,  1750,
+    1755,  1757,  1764,  1774,  1775,  1787,  1789,  1793,  1797,  1801,
+    1803,  1805,  1811,  1814,  1820,  1821,  1823,  1825,  1829,  1830,
+    1832,  1834,  1836,  1838,  1839,  1846,  1849,  1851,  1854,  1859,
+    1862,  1866,  1870,  1874,  1879,  1885,  1891,  1897,  1904,  1906,
+    1908,  1910,  1914,  1915,  1921,  1922,  1924,  1926,  1929,  1936,
+    1938,  1942,  1943,  1945,  1950,  1952,  1954,  1956,  1958,  1961,
+    1963,  1966,  1969,  1971,  1975,  1978,  1982,  1986,  1989,  1994,
+    1999,  2003,  2012,  2016,  2019,  2021,  2024,  2031,  2040,  2044,
+    2047,  2051,  2055,  2060,  2065,  2069,  2071,  2073,  2075,  2080,
+    2087,  2091,  2094,  2098,  2102,  2107,  2112,  2116,  2119,  2121,
+    2124,  2127,  2129,  2133,  2136,  2140,  2144,  2147,  2152,  2157,
+    2161,  2168,  2177,  2181,  2184,  2186,  2189,  2192,  2195,  2199,
+    2203,  2206,  2211,  2216,  2220,  2227,  2236,  2240,  2243,  2245,
+    2248,  2251,  2253,  2255,  2258,  2262,  2266,  2269,  2274,  2281,
+    2290,  2292,  2295,  2298,  2300,  2303,  2306,  2310,  2314,  2316,
+    2321,  2326,  2330,  2336,  2345,  2349,  2352,  2356,  2358,  2364,
+    2370,  2377,  2384,  2386,  2389,  2392,  2394,  2397,  2400,  2404,
+    2408,  2410,  2415,  2420,  2424,  2430,  2439,  2443,  2445,  2448,
+    2450,  2453,  2460,  2466,  2473,  2481,  2489,  2491,  2494,  2497,
+    2499,  2502,  2505,  2509,  2513,  2515,  2520,  2525,  2529,  2538,
+    2542,  2544,  2546,  2549,  2551,  2553,  2556,  2560,  2563,  2567,
+    2570,  2574,  2578,  2581,  2586,  2590,  2593,  2597,  2600,  2605,
+    2609,  2612,  2619,  2626,  2633,  2641,  2643,  2646,  2648,  2650,
+    2652,  2655,  2659,  2662,  2666,  2669,  2673,  2677,  2682,  2685,
+    2689,  2694,  2697,  2703,  2709,  2716,  2723,  2724,  2726,  2727
 };
 
@@ -717,272 +730,277 @@
 static const yytype_int16 yyrhs[] =
 {
-     291,     0,    -1,    -1,    -1,    72,    -1,    73,    -1,    74,
-      -1,    65,    -1,    69,    -1,   132,    -1,    65,    -1,    69,
-      -1,    65,    -1,    76,    -1,    77,    -1,    75,    -1,   133,
-      75,    -1,    65,    -1,   132,    -1,   101,   160,   102,    -1,
-     101,   164,   102,    -1,   134,    -1,   135,   103,   126,   155,
-     127,   104,    -1,   135,   101,   136,   102,    -1,   135,   105,
-     131,    -1,   135,   105,   103,   126,   138,   127,   104,    -1,
-     135,    78,   131,    -1,   135,    78,   103,   126,   138,   127,
-     104,    -1,   135,    79,    -1,   135,    80,    -1,   101,   264,
-     102,   106,   268,   361,   107,    -1,   137,    -1,   136,   108,
-     137,    -1,    -1,   155,    -1,   131,   109,   155,    -1,   103,
-     126,   155,   127,   104,   109,   155,    -1,   103,   126,   155,
-     108,   158,   127,   104,   109,   155,    -1,   139,    -1,   138,
-     108,   139,    -1,   131,    -1,   131,   105,   139,    -1,   131,
-     105,   103,   126,   138,   127,   104,    -1,   131,    78,   139,
-      -1,   131,    78,   103,   126,   138,   127,   104,    -1,   135,
-      -1,   128,    -1,   133,    -1,    79,   140,    -1,    80,   140,
-      -1,    38,   142,    -1,   141,   142,    -1,   110,   142,    -1,
-     111,   142,    -1,    36,   140,    -1,    36,   101,   264,   102,
-      -1,    69,    -1,    69,   101,   265,   102,    -1,    69,   101,
-     137,   102,    -1,    59,   140,    -1,    59,   101,   264,   102,
-      -1,    87,   131,    -1,   112,    -1,   113,    -1,   114,    -1,
-     115,    -1,   140,    -1,   101,   264,   102,   142,    -1,   101,
-     264,   102,   157,    -1,   142,    -1,   143,   111,   142,    -1,
-     143,   116,   142,    -1,   143,   117,   142,    -1,   143,    -1,
-     144,   113,   143,    -1,   144,   114,   143,    -1,   144,    -1,
-     145,    81,   144,    -1,   145,    82,   144,    -1,   145,    -1,
-     146,   118,   145,    -1,   146,   119,   145,    -1,   146,    83,
-     145,    -1,   146,    84,   145,    -1,   146,    -1,   147,    85,
-     146,    -1,   147,    86,   146,    -1,   147,    -1,   148,   112,
-     147,    -1,   148,    -1,   149,   120,   148,    -1,   149,    -1,
-     150,   121,   149,    -1,   150,    -1,   151,    87,   150,    -1,
-     151,    -1,   152,    88,   151,    -1,   152,    -1,   152,   122,
-     160,   109,   153,    -1,   152,   122,   109,   153,    -1,   152,
-     122,   160,   109,   157,    -1,   153,    -1,   153,    -1,   140,
-     123,   155,    -1,   140,   159,   155,    -1,   157,   362,    -1,
-      -1,   155,    -1,   103,   104,    -1,   103,   126,   155,   127,
-     104,    -1,   103,   126,   108,   158,   127,   104,    -1,   103,
-     126,   155,   108,   158,   127,   104,    -1,   156,    -1,   158,
-     108,   156,    -1,    90,    -1,    91,    -1,    92,    -1,    93,
-      -1,    94,    -1,    95,    -1,    96,    -1,    97,    -1,    98,
-      -1,    99,    -1,   155,    -1,   160,   108,   155,    -1,    -1,
-     160,    -1,   163,    -1,   164,    -1,   168,    -1,   169,    -1,
-     181,    -1,   183,    -1,   184,    -1,   189,    -1,   131,   109,
-     301,   162,    -1,   106,   107,    -1,   106,   126,   126,   200,
-     165,   127,   107,    -1,   166,    -1,   165,   126,   166,    -1,
-     203,    -1,    38,   203,    -1,   297,    -1,   162,   127,    -1,
-     162,    -1,   167,   162,    -1,   161,   124,    -1,    39,   101,
-     160,   102,   162,    -1,    39,   101,   160,   102,   162,    40,
-     162,    -1,    41,   101,   160,   102,   174,    -1,    41,   101,
-     160,   102,   106,   126,   196,   175,   107,    -1,    51,   101,
-     160,   102,   174,    -1,    51,   101,   160,   102,   106,   126,
-     196,   177,   107,    -1,   154,    -1,   154,    89,   154,    -1,
-     299,    -1,   170,    -1,   171,   108,   170,    -1,    42,   171,
-     109,    -1,    43,   109,    -1,   172,    -1,   173,   172,    -1,
-     173,   162,    -1,    -1,   176,    -1,   173,   167,    -1,   176,
-     173,   167,    -1,    -1,   178,    -1,   173,   180,    -1,   173,
-     167,   179,    -1,   178,   173,   180,    -1,   178,   173,   167,
-     179,    -1,    -1,   180,    -1,    52,    -1,    52,   124,    -1,
-      45,   101,   160,   102,   162,    -1,    44,   162,    45,   101,
-     160,   102,   124,    -1,    46,   101,   126,   182,   102,   162,
-      -1,   161,   127,   124,   161,   124,   161,    -1,   203,   161,
-     124,   161,    -1,    49,   131,   124,    -1,    49,   111,   160,
-     124,    -1,    48,   124,    -1,    48,   131,   124,    -1,    47,
-     124,    -1,    47,   131,   124,    -1,    50,   161,   124,    -1,
-      56,   155,   124,    -1,    56,   124,    -1,    53,   164,   185,
-      -1,    53,   164,   187,    -1,    53,   164,   185,   187,    -1,
-     186,    -1,    54,   101,    89,   102,   164,    -1,   186,    54,
-     101,    89,   102,   164,    -1,    54,   101,   126,   126,   188,
-     127,   102,   164,   127,    -1,   186,    54,   101,   126,   126,
-     188,   127,   102,   164,   127,    -1,    55,   164,    -1,   216,
-      -1,   216,   298,    -1,   216,   346,    -1,   355,   131,    -1,
-     355,    -1,    57,   190,   101,   133,   102,   124,    -1,    57,
-     190,   101,   133,   109,   191,   102,   124,    -1,    57,   190,
-     101,   133,   109,   191,   109,   191,   102,   124,    -1,    57,
-     190,   101,   133,   109,   191,   109,   191,   109,   194,   102,
-     124,    -1,    57,   190,    49,   101,   133,   109,   109,   191,
-     109,   194,   109,   195,   102,   124,    -1,    -1,    11,    -1,
-      -1,   192,    -1,   193,    -1,   192,   108,   193,    -1,   133,
-     101,   154,   102,    -1,   103,   154,   104,   133,   101,   154,
-     102,    -1,    -1,   133,    -1,   194,   108,   133,    -1,   131,
-      -1,   195,   108,   131,    -1,   127,    -1,   197,    -1,   203,
-      -1,   197,   126,   203,    -1,   127,    -1,   199,    -1,   213,
-      -1,   199,   126,   213,    -1,    -1,   201,    -1,    28,   202,
-     124,    -1,   201,    28,   202,   124,    -1,   263,    -1,   202,
-     108,   263,    -1,   204,    -1,   213,    -1,   205,   127,   124,
-      -1,   210,   127,   124,    -1,   207,   127,   124,    -1,   282,
-     127,   124,    -1,   285,   127,   124,    -1,   206,   266,    -1,
-     222,   206,   266,    -1,   205,   127,   108,   126,   261,   266,
-      -1,   356,   261,   300,    -1,   359,   261,   300,    -1,   218,
-     359,   261,   300,    -1,   208,    -1,   218,   208,    -1,   222,
-     208,    -1,   222,   218,   208,    -1,   207,   127,   108,   126,
-     261,    -1,   103,   104,   261,   101,   126,   249,   127,   102,
-      -1,   359,   261,   101,   126,   249,   127,   102,    -1,   209,
-     261,   101,   126,   249,   127,   102,    -1,   103,   126,   251,
-     127,   104,    -1,   103,   126,   251,   127,   108,   126,   252,
-     127,   104,    -1,     3,   206,    -1,     3,   208,    -1,   210,
-     127,   108,   126,   131,    -1,     3,   216,   298,    -1,   211,
-     127,   108,   126,   298,    -1,   218,     3,   216,   298,    -1,
-     216,     3,   298,    -1,   216,     3,   218,   298,    -1,     3,
-     131,   123,   155,    -1,   212,   127,   108,   126,   131,   123,
-     155,    -1,   214,   127,   124,    -1,   211,   127,   124,    -1,
-     212,   127,   124,    -1,   231,   127,   124,    -1,   215,   298,
-     300,   266,    -1,   214,   108,   301,   298,   300,   266,    -1,
-     227,    -1,   231,    -1,   233,    -1,   272,    -1,   228,    -1,
-     232,    -1,   234,    -1,   273,    -1,    -1,   218,    -1,   219,
-      -1,   218,   219,    -1,   220,    -1,   303,    -1,    10,    -1,
-      12,    -1,    11,    -1,    14,    -1,    60,    -1,    -1,    13,
-     101,   221,   275,   102,    -1,   223,    -1,   218,   223,    -1,
-     222,   218,   223,    -1,   224,    -1,   223,   224,    -1,   225,
-      -1,     5,    -1,     7,    -1,     4,    -1,     6,    -1,     8,
-      -1,     9,    -1,    62,    -1,    64,    -1,    16,    -1,    21,
-      -1,    20,    -1,    18,    -1,    19,    -1,    17,    -1,    22,
-      -1,    23,    -1,    15,    -1,    24,    -1,    25,    -1,    26,
-      -1,   228,    -1,   222,   228,    -1,   227,   224,    -1,   227,
-     224,   218,    -1,   227,   224,   228,    -1,   229,    -1,   217,
-     230,   217,    -1,   226,    -1,   218,   226,    -1,   229,   219,
-      -1,   229,   226,    -1,    27,   101,   265,   102,    -1,    27,
-     101,   160,   102,    -1,    71,   101,   265,   102,    -1,    71,
-     101,   160,   102,    -1,   232,    -1,   222,   232,    -1,   231,
-     224,    -1,   231,   224,   218,    -1,   235,    -1,   218,   235,
-      -1,   232,   219,    -1,   234,    -1,   222,   234,    -1,   233,
-     224,    -1,   233,   224,   218,    -1,    67,    -1,   218,    67,
-      -1,   234,   219,    -1,   236,    -1,   246,    -1,   237,   106,
-     238,   107,    -1,   237,   263,    -1,   237,   263,   106,   238,
-     107,    -1,   237,   101,   281,   102,   106,   238,   107,    -1,
-     237,   274,    -1,    30,   301,    -1,    31,   301,    -1,   239,
-      -1,   238,   239,    -1,   240,   124,    -1,    38,   240,   124,
-      -1,   241,   124,    -1,    38,   241,   124,    -1,   355,    -1,
-     355,   263,    -1,   240,   108,   263,    -1,   240,   108,    -1,
-     216,   242,    -1,   241,   108,   301,   242,    -1,    -1,   244,
-      -1,   307,   243,    -1,   320,   243,    -1,   346,    -1,    -1,
-     244,    -1,   109,   154,    -1,    29,   301,    -1,   245,   106,
-     247,   361,   107,    -1,   245,   263,   106,   247,   361,   107,
-      -1,   245,   263,    -1,   263,   248,    -1,   247,   108,   263,
-     248,    -1,    -1,   123,   154,    -1,    -1,   250,    -1,   252,
-      -1,   251,    -1,   251,   127,   108,   126,   252,    -1,   252,
-     127,   108,   126,    89,    -1,   251,   127,   108,   126,    89,
-      -1,   256,    -1,   252,   127,   108,   126,   256,    -1,   251,
-     127,   108,   126,   256,    -1,   251,   127,   108,   126,   252,
-     127,   108,   126,   256,    -1,   257,    -1,   252,   127,   108,
-     126,   257,    -1,    -1,   254,    -1,   255,    -1,   255,   127,
-     108,   126,    89,    -1,   259,    -1,   258,    -1,   255,   127,
-     108,   126,   259,    -1,   255,   127,   108,   126,   258,    -1,
-     258,    -1,   351,   261,   362,    -1,   359,   261,   362,    -1,
-     218,   359,   261,   362,    -1,   208,    -1,   259,    -1,   351,
-      -1,   359,    -1,   218,   359,    -1,   360,    -1,   215,   325,
-     362,    -1,   215,   329,   362,    -1,   215,    -1,   215,   340,
-      -1,   131,    -1,   260,   108,   131,    -1,   129,    -1,    67,
-      -1,    68,    -1,   130,    -1,    67,    -1,    68,    -1,   131,
-      -1,    67,    -1,    68,    -1,   355,    -1,   216,    -1,   216,
-     346,    -1,   355,    -1,   360,    -1,   216,    -1,   216,   334,
-      -1,    -1,   123,   267,    -1,   155,    -1,   106,   268,   361,
-     107,    -1,   267,    -1,   269,   267,    -1,   268,   108,   267,
-      -1,   268,   108,   269,   267,    -1,   270,   109,    -1,   263,
-     109,    -1,   271,    -1,   270,   271,    -1,    73,    -1,   105,
-     263,    -1,   103,   126,   155,   127,   104,    -1,   103,   126,
-     299,   127,   104,    -1,   103,   126,   154,    89,   154,   127,
-     104,    -1,   105,   103,   126,   138,   127,   104,    -1,   273,
-      -1,   222,   273,    -1,   272,   224,    -1,   272,   224,   218,
-      -1,   274,    -1,   218,   274,    -1,   273,   219,    -1,    68,
-     101,   281,   102,    -1,   276,   362,    -1,   275,   108,   276,
-     362,    -1,    -1,   278,   263,   277,   279,    -1,   216,   325,
-      -1,    32,    -1,    34,    -1,    33,    -1,    -1,   279,   280,
-      -1,   121,   263,   101,   281,   102,    -1,   121,   106,   126,
-     287,   107,    -1,   121,   101,   126,   275,   127,   102,   106,
-     126,   287,   107,   101,   281,   102,    -1,   265,    -1,   155,
-      -1,   281,   108,   265,    -1,   281,   108,   155,    -1,    32,
-     283,    -1,   223,    32,   283,    -1,   282,   108,   283,    -1,
-     284,   279,    -1,   284,   279,   123,   265,    -1,   263,    -1,
-     262,   101,   126,   275,   127,   102,    -1,    35,   263,   101,
-     126,   275,   127,   102,   106,   107,    -1,    -1,    35,   263,
-     101,   126,   275,   127,   102,   106,   286,   287,   107,    -1,
-     288,    -1,   287,   126,   288,    -1,   289,   127,   124,    -1,
-     290,   127,   124,    -1,   206,    -1,   208,    -1,   289,   127,
-     108,   126,   261,    -1,   216,   298,    -1,   290,   127,   108,
-     126,   298,    -1,    -1,   292,    -1,   294,    -1,   292,   126,
-     294,    -1,    -1,   292,    -1,   203,    -1,   296,    -1,   189,
-      -1,    -1,     5,    75,   295,   106,   293,   107,    -1,    38,
-     294,    -1,   297,    -1,   312,   164,    -1,   316,   126,   198,
-     164,    -1,   207,   164,    -1,   215,   312,   164,    -1,   218,
-     312,   164,    -1,   222,   312,   164,    -1,   222,   218,   312,
-     164,    -1,   215,   316,   126,   198,   164,    -1,   218,   316,
-     126,   198,   164,    -1,   222,   316,   126,   198,   164,    -1,
-     222,   218,   316,   126,   198,   164,    -1,   307,    -1,   312,
-      -1,   320,    -1,   154,   115,   154,    -1,    -1,    57,   101,
-     133,   102,   301,    -1,    -1,   302,    -1,   303,    -1,   302,
-     303,    -1,    37,   101,   101,   304,   102,   102,    -1,   305,
-      -1,   304,   108,   305,    -1,    -1,   306,    -1,   306,   101,
-     161,   102,    -1,   261,    -1,   225,    -1,   226,    -1,   219,
-      -1,   308,   301,    -1,   309,    -1,   310,   301,    -1,   311,
-     301,    -1,   129,    -1,   101,   308,   102,    -1,   111,   307,
-      -1,   111,   218,   307,    -1,   101,   309,   102,    -1,   308,
-     338,    -1,   101,   309,   102,   338,    -1,   101,   310,   102,
-     339,    -1,   101,   310,   102,    -1,   101,   309,   102,   101,
-     126,   253,   127,   102,    -1,   101,   311,   102,    -1,   313,
-     301,    -1,   314,    -1,   315,   301,    -1,   308,   101,   126,
-     253,   127,   102,    -1,   101,   314,   102,   101,   126,   253,
-     127,   102,    -1,   101,   313,   102,    -1,   111,   312,    -1,
-     111,   218,   312,    -1,   101,   314,   102,    -1,   101,   314,
-     102,   338,    -1,   101,   315,   102,   339,    -1,   101,   315,
-     102,    -1,   317,    -1,   318,    -1,   319,    -1,   308,   101,
-     260,   102,    -1,   101,   318,   102,   101,   260,   102,    -1,
-     101,   317,   102,    -1,   111,   316,    -1,   111,   218,   316,
-      -1,   101,   318,   102,    -1,   101,   318,   102,   338,    -1,
-     101,   319,   102,   339,    -1,   101,   319,   102,    -1,   321,
-     301,    -1,   322,    -1,   323,   301,    -1,   324,   301,    -1,
-     330,    -1,   101,   321,   102,    -1,   111,   320,    -1,   111,
-     218,   320,    -1,   101,   322,   102,    -1,   321,   338,    -1,
-     101,   322,   102,   338,    -1,   101,   323,   102,   339,    -1,
-     101,   323,   102,    -1,   321,   101,   126,   253,   127,   102,
-      -1,   101,   322,   102,   101,   126,   253,   127,   102,    -1,
-     101,   324,   102,    -1,   308,   301,    -1,   326,    -1,   327,
-     301,    -1,   328,   301,    -1,   111,   325,    -1,   111,   218,
-     325,    -1,   101,   326,   102,    -1,   308,   344,    -1,   101,
-     326,   102,   338,    -1,   101,   327,   102,   339,    -1,   101,
-     327,   102,    -1,   308,   101,   126,   253,   127,   102,    -1,
-     101,   326,   102,   101,   126,   253,   127,   102,    -1,   101,
-     328,   102,    -1,   330,   301,    -1,   331,    -1,   332,   301,
-      -1,   333,   301,    -1,    67,    -1,    68,    -1,   111,   329,
-      -1,   111,   218,   329,    -1,   101,   331,   102,    -1,   330,
-     344,    -1,   101,   331,   102,   344,    -1,   330,   101,   126,
-     253,   127,   102,    -1,   101,   331,   102,   101,   126,   253,
-     127,   102,    -1,   335,    -1,   336,   301,    -1,   337,   301,
-      -1,   111,    -1,   111,   218,    -1,   111,   334,    -1,   111,
-     218,   334,    -1,   101,   335,   102,    -1,   338,    -1,   101,
-     335,   102,   338,    -1,   101,   336,   102,   339,    -1,   101,
-     336,   102,    -1,   101,   126,   253,   127,   102,    -1,   101,
-     335,   102,   101,   126,   253,   127,   102,    -1,   101,   337,
-     102,    -1,   103,   104,    -1,   103,   104,   339,    -1,   339,
-      -1,   103,   126,   155,   127,   104,    -1,   103,   126,   111,
-     127,   104,    -1,   339,   103,   126,   155,   127,   104,    -1,
-     339,   103,   126,   111,   127,   104,    -1,   341,    -1,   342,
-     301,    -1,   343,   301,    -1,   111,    -1,   111,   218,    -1,
-     111,   340,    -1,   111,   218,   340,    -1,   101,   341,   102,
-      -1,   344,    -1,   101,   341,   102,   344,    -1,   101,   342,
-     102,   339,    -1,   101,   342,   102,    -1,   101,   126,   253,
-     127,   102,    -1,   101,   341,   102,   101,   126,   253,   127,
-     102,    -1,   101,   343,   102,    -1,   345,    -1,   345,   339,
-      -1,   339,    -1,   103,   104,    -1,   103,   126,   218,   111,
-     127,   104,    -1,   103,   126,   218,   127,   104,    -1,   103,
-     126,   218,   155,   127,   104,    -1,   103,   126,     7,   217,
-     155,   127,   104,    -1,   103,   126,   218,     7,   155,   127,
-     104,    -1,   347,    -1,   348,   301,    -1,   349,   301,    -1,
-     111,    -1,   111,   218,    -1,   111,   346,    -1,   111,   218,
-     346,    -1,   101,   347,   102,    -1,   338,    -1,   101,   347,
-     102,   338,    -1,   101,   348,   102,   339,    -1,   101,   348,
-     102,    -1,   101,   347,   102,   101,   126,   253,   127,   102,
-      -1,   101,   349,   102,    -1,   351,    -1,   359,    -1,   218,
-     359,    -1,   352,    -1,   353,    -1,   111,   216,    -1,   218,
-     111,   216,    -1,   111,   360,    -1,   218,   111,   360,    -1,
-     111,   350,    -1,   218,   111,   350,    -1,   103,   104,   216,
-      -1,   354,   216,    -1,   103,   104,   339,   216,    -1,   354,
-     339,   216,    -1,   339,   216,    -1,   103,   104,   352,    -1,
-     354,   352,    -1,   103,   104,   339,   352,    -1,   354,   339,
-     352,    -1,   339,   352,    -1,   103,   126,   218,   111,   127,
-     104,    -1,   103,   126,   218,   155,   127,   104,    -1,   103,
-     126,   222,   155,   127,   104,    -1,   103,   126,   222,   218,
-     155,   127,   104,    -1,   359,    -1,   218,   359,    -1,   356,
-      -1,   357,    -1,   358,    -1,   111,   216,    -1,   218,   111,
-     216,    -1,   111,   360,    -1,   218,   111,   360,    -1,   111,
-     355,    -1,   218,   111,   355,    -1,   103,   104,   216,    -1,
-     103,   104,   339,   216,    -1,   339,   216,    -1,   103,   104,
-     357,    -1,   103,   104,   339,   357,    -1,   339,   357,    -1,
-     103,   126,   252,   127,   104,    -1,   103,   104,   101,   249,
-     102,    -1,   359,   101,   126,   249,   127,   102,    -1,   209,
-     101,   126,   249,   127,   102,    -1,    -1,   108,    -1,    -1,
-     123,   155,    -1
+     297,     0,    -1,    -1,    -1,    77,    -1,    78,    -1,    79,
+      -1,    70,    -1,    74,    -1,   138,    -1,    70,    -1,    74,
+      -1,    70,    -1,    81,    -1,    82,    -1,    80,    -1,   139,
+      80,    -1,    70,    -1,   138,    -1,   107,   166,   108,    -1,
+     107,   170,   108,    -1,   140,    -1,   141,   109,   132,   161,
+     133,   110,    -1,   141,   107,   142,   108,    -1,   141,   111,
+     137,    -1,   141,   111,   109,   132,   144,   133,   110,    -1,
+     141,    83,   137,    -1,   141,    83,   109,   132,   144,   133,
+     110,    -1,   141,    84,    -1,   141,    85,    -1,   107,   270,
+     108,   112,   274,   367,   113,    -1,   141,   112,   142,   113,
+      -1,   143,    -1,   142,   114,   143,    -1,    -1,   161,    -1,
+     137,   115,   161,    -1,   109,   132,   161,   133,   110,   115,
+     161,    -1,   109,   132,   161,   114,   164,   133,   110,   115,
+     161,    -1,   145,    -1,   144,   114,   145,    -1,   137,    -1,
+     137,   111,   145,    -1,   137,   111,   109,   132,   144,   133,
+     110,    -1,   137,    83,   145,    -1,   137,    83,   109,   132,
+     144,   133,   110,    -1,   141,    -1,   134,    -1,   139,    -1,
+      84,   146,    -1,    85,   146,    -1,    38,   148,    -1,   147,
+     148,    -1,   116,   148,    -1,   117,   148,    -1,    36,   146,
+      -1,    36,   107,   270,   108,    -1,    74,    -1,    74,   107,
+     271,   108,    -1,    74,   107,   143,   108,    -1,    64,   146,
+      -1,    64,   107,   270,   108,    -1,    92,   137,    -1,   118,
+      -1,   119,    -1,   120,    -1,   121,    -1,   146,    -1,   107,
+     270,   108,   148,    -1,   107,   270,   108,   163,    -1,   148,
+      -1,   149,   117,   148,    -1,   149,   122,   148,    -1,   149,
+     123,   148,    -1,   149,    -1,   150,   119,   149,    -1,   150,
+     120,   149,    -1,   150,    -1,   151,    86,   150,    -1,   151,
+      87,   150,    -1,   151,    -1,   152,   124,   151,    -1,   152,
+     125,   151,    -1,   152,    88,   151,    -1,   152,    89,   151,
+      -1,   152,    -1,   153,    90,   152,    -1,   153,    91,   152,
+      -1,   153,    -1,   154,   118,   153,    -1,   154,    -1,   155,
+     126,   154,    -1,   155,    -1,   156,   127,   155,    -1,   156,
+      -1,   157,    92,   156,    -1,   157,    -1,   158,    93,   157,
+      -1,   158,    -1,   158,   128,   166,   115,   159,    -1,   158,
+     128,   115,   159,    -1,   158,   128,   166,   115,   163,    -1,
+     159,    -1,   159,    -1,   146,   129,   161,    -1,   146,   165,
+     161,    -1,   163,   368,    -1,    -1,   161,    -1,   109,   110,
+      -1,   109,   132,   161,   133,   110,    -1,   109,   132,   114,
+     164,   133,   110,    -1,   109,   132,   161,   114,   164,   133,
+     110,    -1,   162,    -1,   164,   114,   162,    -1,    95,    -1,
+      96,    -1,    97,    -1,    98,    -1,    99,    -1,   100,    -1,
+     101,    -1,   102,    -1,   103,    -1,   104,    -1,   161,    -1,
+     166,   114,   161,    -1,    -1,   166,    -1,   169,    -1,   170,
+      -1,   174,    -1,   175,    -1,   187,    -1,   189,    -1,   190,
+      -1,   195,    -1,   126,   141,   112,   142,   113,   130,    -1,
+     137,   115,   307,   168,    -1,   112,   113,    -1,   112,   132,
+     132,   206,   171,   133,   113,    -1,   172,    -1,   171,   132,
+     172,    -1,   209,    -1,    38,   209,    -1,   303,    -1,   168,
+     133,    -1,   168,    -1,   173,   168,    -1,   167,   130,    -1,
+      39,   107,   166,   108,   168,    -1,    39,   107,   166,   108,
+     168,    40,   168,    -1,    41,   107,   166,   108,   180,    -1,
+      41,   107,   166,   108,   112,   132,   202,   181,   113,    -1,
+      51,   107,   166,   108,   180,    -1,    51,   107,   166,   108,
+     112,   132,   202,   183,   113,    -1,   160,    -1,   160,    94,
+     160,    -1,   305,    -1,   176,    -1,   177,   114,   176,    -1,
+      42,   177,   115,    -1,    43,   115,    -1,   178,    -1,   179,
+     178,    -1,   179,   168,    -1,    -1,   182,    -1,   179,   173,
+      -1,   182,   179,   173,    -1,    -1,   184,    -1,   179,   186,
+      -1,   179,   173,   185,    -1,   184,   179,   186,    -1,   184,
+     179,   173,   185,    -1,    -1,   186,    -1,    54,    -1,    54,
+     130,    -1,    45,   107,   166,   108,   168,    -1,    44,   168,
+      45,   107,   166,   108,   130,    -1,    46,   107,   132,   188,
+     108,   168,    -1,   167,   133,   130,   167,   130,   167,    -1,
+     209,   167,   130,   167,    -1,    49,   137,   130,    -1,    49,
+     117,   166,   130,    -1,    48,   130,    -1,    48,   137,   130,
+      -1,    47,   130,    -1,    47,   137,   130,    -1,    50,   167,
+     130,    -1,    59,   162,   130,    -1,    60,   162,   130,    -1,
+      60,   162,    61,   161,   130,    -1,    55,   170,   191,    -1,
+      55,   170,   193,    -1,    55,   170,   191,   193,    -1,   192,
+      -1,    56,   107,    94,   108,   170,    -1,   192,    56,   107,
+      94,   108,   170,    -1,    57,   107,    94,   108,   170,    -1,
+     192,    57,   107,    94,   108,   170,    -1,    56,   107,   132,
+     132,   194,   133,   108,   170,   133,    -1,   192,    56,   107,
+     132,   132,   194,   133,   108,   170,   133,    -1,    57,   107,
+     132,   132,   194,   133,   108,   170,   133,    -1,   192,    57,
+     107,   132,   132,   194,   133,   108,   170,   133,    -1,    58,
+     170,    -1,   222,    -1,   222,   304,    -1,   222,   352,    -1,
+     361,   137,    -1,   361,    -1,    62,   196,   107,   139,   108,
+     130,    -1,    62,   196,   107,   139,   115,   197,   108,   130,
+      -1,    62,   196,   107,   139,   115,   197,   115,   197,   108,
+     130,    -1,    62,   196,   107,   139,   115,   197,   115,   197,
+     115,   200,   108,   130,    -1,    62,   196,    49,   107,   139,
+     115,   115,   197,   115,   200,   115,   201,   108,   130,    -1,
+      -1,    11,    -1,    -1,   198,    -1,   199,    -1,   198,   114,
+     199,    -1,   139,   107,   160,   108,    -1,   109,   160,   110,
+     139,   107,   160,   108,    -1,    -1,   139,    -1,   200,   114,
+     139,    -1,   137,    -1,   201,   114,   137,    -1,   133,    -1,
+     203,    -1,   209,    -1,   203,   132,   209,    -1,   133,    -1,
+     205,    -1,   219,    -1,   205,   132,   219,    -1,    -1,   207,
+      -1,    28,   208,   130,    -1,   207,    28,   208,   130,    -1,
+     269,    -1,   208,   114,   269,    -1,   210,    -1,   219,    -1,
+     211,   133,   130,    -1,   216,   133,   130,    -1,   213,   133,
+     130,    -1,   288,   133,   130,    -1,   291,   133,   130,    -1,
+     212,   272,    -1,   228,   212,   272,    -1,   211,   133,   114,
+     132,   267,   272,    -1,   362,   267,   306,    -1,   365,   267,
+     306,    -1,   224,   365,   267,   306,    -1,   214,    -1,   224,
+     214,    -1,   228,   214,    -1,   228,   224,   214,    -1,   213,
+     133,   114,   132,   267,    -1,   109,   110,   267,   107,   132,
+     255,   133,   108,    -1,   365,   267,   107,   132,   255,   133,
+     108,    -1,   215,   267,   107,   132,   255,   133,   108,    -1,
+     109,   132,   257,   133,   110,    -1,   109,   132,   257,   133,
+     114,   132,   258,   133,   110,    -1,     3,   212,    -1,     3,
+     214,    -1,   216,   133,   114,   132,   137,    -1,     3,   222,
+     304,    -1,   217,   133,   114,   132,   304,    -1,   224,     3,
+     222,   304,    -1,   222,     3,   304,    -1,   222,     3,   224,
+     304,    -1,     3,   137,   129,   161,    -1,   218,   133,   114,
+     132,   137,   129,   161,    -1,   220,   133,   130,    -1,   217,
+     133,   130,    -1,   218,   133,   130,    -1,   237,   133,   130,
+      -1,   221,   304,   306,   272,    -1,   220,   114,   307,   304,
+     306,   272,    -1,   233,    -1,   237,    -1,   239,    -1,   278,
+      -1,   234,    -1,   238,    -1,   240,    -1,   279,    -1,    -1,
+     224,    -1,   225,    -1,   224,   225,    -1,   226,    -1,   309,
+      -1,    10,    -1,    12,    -1,    11,    -1,    14,    -1,    65,
+      -1,    -1,    13,   107,   227,   281,   108,    -1,   229,    -1,
+     224,   229,    -1,   228,   224,   229,    -1,   230,    -1,   229,
+     230,    -1,   231,    -1,     5,    -1,     7,    -1,     4,    -1,
+       6,    -1,     8,    -1,     9,    -1,    67,    -1,    69,    -1,
+      16,    -1,    21,    -1,    20,    -1,    18,    -1,    19,    -1,
+      17,    -1,    22,    -1,    23,    -1,    15,    -1,    24,    -1,
+      25,    -1,    26,    -1,   234,    -1,   228,   234,    -1,   233,
+     230,    -1,   233,   230,   224,    -1,   233,   230,   234,    -1,
+     235,    -1,   223,   236,   223,    -1,   232,    -1,   224,   232,
+      -1,   235,   225,    -1,   235,   232,    -1,    27,   107,   271,
+     108,    -1,    27,   107,   166,   108,    -1,    76,   107,   271,
+     108,    -1,    76,   107,   166,   108,    -1,   238,    -1,   228,
+     238,    -1,   237,   230,    -1,   237,   230,   224,    -1,   241,
+      -1,   224,   241,    -1,   238,   225,    -1,   240,    -1,   228,
+     240,    -1,   239,   230,    -1,   239,   230,   224,    -1,    72,
+      -1,   224,    72,    -1,   240,   225,    -1,   242,    -1,   252,
+      -1,   243,   112,   244,   113,    -1,   243,   269,    -1,   243,
+     269,   112,   244,   113,    -1,   243,   107,   287,   108,   112,
+     244,   113,    -1,   243,   280,    -1,    30,   307,    -1,    31,
+     307,    -1,   245,    -1,   244,   245,    -1,   246,   130,    -1,
+      38,   246,   130,    -1,   247,   130,    -1,    38,   247,   130,
+      -1,   361,    -1,   361,   269,    -1,   246,   114,   269,    -1,
+     246,   114,    -1,   222,   248,    -1,   247,   114,   307,   248,
+      -1,    -1,   250,    -1,   313,   249,    -1,   326,   249,    -1,
+     352,    -1,    -1,   250,    -1,   115,   160,    -1,    29,   307,
+      -1,   251,   112,   253,   367,   113,    -1,   251,   269,   112,
+     253,   367,   113,    -1,   251,   269,    -1,   269,   254,    -1,
+     253,   114,   269,   254,    -1,    -1,   129,   160,    -1,    -1,
+     256,    -1,   258,    -1,   257,    -1,   257,   133,   114,   132,
+     258,    -1,   258,   133,   114,   132,    94,    -1,   257,   133,
+     114,   132,    94,    -1,   262,    -1,   258,   133,   114,   132,
+     262,    -1,   257,   133,   114,   132,   262,    -1,   257,   133,
+     114,   132,   258,   133,   114,   132,   262,    -1,   263,    -1,
+     258,   133,   114,   132,   263,    -1,    -1,   260,    -1,   261,
+      -1,   261,   133,   114,   132,    94,    -1,   265,    -1,   264,
+      -1,   261,   133,   114,   132,   265,    -1,   261,   133,   114,
+     132,   264,    -1,   264,    -1,   357,   267,   368,    -1,   365,
+     267,   368,    -1,   224,   365,   267,   368,    -1,   214,    -1,
+     265,    -1,   357,    -1,   365,    -1,   224,   365,    -1,   366,
+      -1,   221,   331,   368,    -1,   221,   335,   368,    -1,   221,
+      -1,   221,   346,    -1,   137,    -1,   266,   114,   137,    -1,
+     135,    -1,    72,    -1,    73,    -1,   136,    -1,    72,    -1,
+      73,    -1,   137,    -1,    72,    -1,    73,    -1,   361,    -1,
+     222,    -1,   222,   352,    -1,   361,    -1,   366,    -1,   222,
+      -1,   222,   340,    -1,    -1,   129,   273,    -1,   105,   273,
+      -1,   161,    -1,   112,   274,   367,   113,    -1,    -1,   273,
+      -1,   275,   273,    -1,   274,   114,   273,    -1,   274,   114,
+     275,   273,    -1,   276,   115,    -1,   269,   115,    -1,   277,
+      -1,   276,   277,    -1,    78,    -1,   111,   269,    -1,   109,
+     132,   161,   133,   110,    -1,   109,   132,   305,   133,   110,
+      -1,   109,   132,   160,    94,   160,   133,   110,    -1,   111,
+     109,   132,   144,   133,   110,    -1,   279,    -1,   228,   279,
+      -1,   278,   230,    -1,   278,   230,   224,    -1,   280,    -1,
+     224,   280,    -1,   279,   225,    -1,    73,   107,   287,   108,
+      -1,   282,   368,    -1,   281,   114,   282,   368,    -1,    -1,
+     284,   269,   283,   285,    -1,   222,   331,    -1,    32,    -1,
+      34,    -1,    33,    -1,    -1,   285,   286,    -1,   127,   269,
+     107,   287,   108,    -1,   127,   112,   132,   293,   113,    -1,
+     127,   107,   132,   281,   133,   108,   112,   132,   293,   113,
+     107,   287,   108,    -1,   271,    -1,   161,    -1,   287,   114,
+     271,    -1,   287,   114,   161,    -1,    32,   289,    -1,   229,
+      32,   289,    -1,   288,   114,   289,    -1,   290,   285,    -1,
+     290,   285,   129,   271,    -1,   269,    -1,   268,   107,   132,
+     281,   133,   108,    -1,    35,   269,   107,   132,   281,   133,
+     108,   112,   113,    -1,    -1,    35,   269,   107,   132,   281,
+     133,   108,   112,   292,   293,   113,    -1,   294,    -1,   293,
+     132,   294,    -1,   295,   133,   130,    -1,   296,   133,   130,
+      -1,   212,    -1,   214,    -1,   295,   133,   114,   132,   267,
+      -1,   222,   304,    -1,   296,   133,   114,   132,   304,    -1,
+      -1,   298,    -1,   300,    -1,   298,   132,   300,    -1,    -1,
+     298,    -1,   209,    -1,   302,    -1,   195,    -1,    -1,     5,
+      80,   301,   112,   299,   113,    -1,    38,   300,    -1,   303,
+      -1,   318,   170,    -1,   322,   132,   204,   170,    -1,   213,
+     170,    -1,   221,   318,   170,    -1,   224,   318,   170,    -1,
+     228,   318,   170,    -1,   228,   224,   318,   170,    -1,   221,
+     322,   132,   204,   170,    -1,   224,   322,   132,   204,   170,
+      -1,   228,   322,   132,   204,   170,    -1,   228,   224,   322,
+     132,   204,   170,    -1,   313,    -1,   318,    -1,   326,    -1,
+     160,   121,   160,    -1,    -1,    62,   107,   139,   108,   307,
+      -1,    -1,   308,    -1,   309,    -1,   308,   309,    -1,    37,
+     107,   107,   310,   108,   108,    -1,   311,    -1,   310,   114,
+     311,    -1,    -1,   312,    -1,   312,   107,   167,   108,    -1,
+     267,    -1,   231,    -1,   232,    -1,   225,    -1,   314,   307,
+      -1,   315,    -1,   316,   307,    -1,   317,   307,    -1,   135,
+      -1,   107,   314,   108,    -1,   117,   313,    -1,   117,   224,
+     313,    -1,   107,   315,   108,    -1,   314,   344,    -1,   107,
+     315,   108,   344,    -1,   107,   316,   108,   345,    -1,   107,
+     316,   108,    -1,   107,   315,   108,   107,   132,   259,   133,
+     108,    -1,   107,   317,   108,    -1,   319,   307,    -1,   320,
+      -1,   321,   307,    -1,   314,   107,   132,   259,   133,   108,
+      -1,   107,   320,   108,   107,   132,   259,   133,   108,    -1,
+     107,   319,   108,    -1,   117,   318,    -1,   117,   224,   318,
+      -1,   107,   320,   108,    -1,   107,   320,   108,   344,    -1,
+     107,   321,   108,   345,    -1,   107,   321,   108,    -1,   323,
+      -1,   324,    -1,   325,    -1,   314,   107,   266,   108,    -1,
+     107,   324,   108,   107,   266,   108,    -1,   107,   323,   108,
+      -1,   117,   322,    -1,   117,   224,   322,    -1,   107,   324,
+     108,    -1,   107,   324,   108,   344,    -1,   107,   325,   108,
+     345,    -1,   107,   325,   108,    -1,   327,   307,    -1,   328,
+      -1,   329,   307,    -1,   330,   307,    -1,   336,    -1,   107,
+     327,   108,    -1,   117,   326,    -1,   117,   224,   326,    -1,
+     107,   328,   108,    -1,   327,   344,    -1,   107,   328,   108,
+     344,    -1,   107,   329,   108,   345,    -1,   107,   329,   108,
+      -1,   327,   107,   132,   259,   133,   108,    -1,   107,   328,
+     108,   107,   132,   259,   133,   108,    -1,   107,   330,   108,
+      -1,   314,   307,    -1,   332,    -1,   333,   307,    -1,   334,
+     307,    -1,   117,   331,    -1,   117,   224,   331,    -1,   107,
+     332,   108,    -1,   314,   350,    -1,   107,   332,   108,   344,
+      -1,   107,   333,   108,   345,    -1,   107,   333,   108,    -1,
+     314,   107,   132,   259,   133,   108,    -1,   107,   332,   108,
+     107,   132,   259,   133,   108,    -1,   107,   334,   108,    -1,
+     336,   307,    -1,   337,    -1,   338,   307,    -1,   339,   307,
+      -1,    72,    -1,    73,    -1,   117,   335,    -1,   117,   224,
+     335,    -1,   107,   337,   108,    -1,   336,   350,    -1,   107,
+     337,   108,   350,    -1,   336,   107,   132,   259,   133,   108,
+      -1,   107,   337,   108,   107,   132,   259,   133,   108,    -1,
+     341,    -1,   342,   307,    -1,   343,   307,    -1,   117,    -1,
+     117,   224,    -1,   117,   340,    -1,   117,   224,   340,    -1,
+     107,   341,   108,    -1,   344,    -1,   107,   341,   108,   344,
+      -1,   107,   342,   108,   345,    -1,   107,   342,   108,    -1,
+     107,   132,   259,   133,   108,    -1,   107,   341,   108,   107,
+     132,   259,   133,   108,    -1,   107,   343,   108,    -1,   109,
+     110,    -1,   109,   110,   345,    -1,   345,    -1,   109,   132,
+     161,   133,   110,    -1,   109,   132,   117,   133,   110,    -1,
+     345,   109,   132,   161,   133,   110,    -1,   345,   109,   132,
+     117,   133,   110,    -1,   347,    -1,   348,   307,    -1,   349,
+     307,    -1,   117,    -1,   117,   224,    -1,   117,   346,    -1,
+     117,   224,   346,    -1,   107,   347,   108,    -1,   350,    -1,
+     107,   347,   108,   350,    -1,   107,   348,   108,   345,    -1,
+     107,   348,   108,    -1,   107,   132,   259,   133,   108,    -1,
+     107,   347,   108,   107,   132,   259,   133,   108,    -1,   107,
+     349,   108,    -1,   351,    -1,   351,   345,    -1,   345,    -1,
+     109,   110,    -1,   109,   132,   224,   117,   133,   110,    -1,
+     109,   132,   224,   133,   110,    -1,   109,   132,   224,   161,
+     133,   110,    -1,   109,   132,     7,   223,   161,   133,   110,
+      -1,   109,   132,   224,     7,   161,   133,   110,    -1,   353,
+      -1,   354,   307,    -1,   355,   307,    -1,   117,    -1,   117,
+     224,    -1,   117,   352,    -1,   117,   224,   352,    -1,   107,
+     353,   108,    -1,   344,    -1,   107,   353,   108,   344,    -1,
+     107,   354,   108,   345,    -1,   107,   354,   108,    -1,   107,
+     353,   108,   107,   132,   259,   133,   108,    -1,   107,   355,
+     108,    -1,   357,    -1,   365,    -1,   224,   365,    -1,   358,
+      -1,   359,    -1,   117,   222,    -1,   224,   117,   222,    -1,
+     117,   366,    -1,   224,   117,   366,    -1,   117,   356,    -1,
+     224,   117,   356,    -1,   109,   110,   222,    -1,   360,   222,
+      -1,   109,   110,   345,   222,    -1,   360,   345,   222,    -1,
+     345,   222,    -1,   109,   110,   358,    -1,   360,   358,    -1,
+     109,   110,   345,   358,    -1,   360,   345,   358,    -1,   345,
+     358,    -1,   109,   132,   224,   117,   133,   110,    -1,   109,
+     132,   224,   161,   133,   110,    -1,   109,   132,   228,   161,
+     133,   110,    -1,   109,   132,   228,   224,   161,   133,   110,
+      -1,   365,    -1,   224,   365,    -1,   362,    -1,   363,    -1,
+     364,    -1,   117,   222,    -1,   224,   117,   222,    -1,   117,
+     366,    -1,   224,   117,   366,    -1,   117,   361,    -1,   224,
+     117,   361,    -1,   109,   110,   222,    -1,   109,   110,   345,
+     222,    -1,   345,   222,    -1,   109,   110,   363,    -1,   109,
+     110,   345,   363,    -1,   345,   363,    -1,   109,   132,   258,
+     133,   110,    -1,   109,   110,   107,   255,   108,    -1,   365,
+     107,   132,   255,   133,   108,    -1,   215,   107,   132,   255,
+     133,   108,    -1,    -1,   114,    -1,    -1,   129,   161,    -1
 };
 
@@ -990,79 +1008,79 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   288,   288,   294,   303,   304,   305,   309,   310,   311,
-     315,   316,   320,   324,   325,   329,   330,   336,   338,   340,
-     342,   347,   348,   354,   356,   358,   359,   361,   362,   364,
-     367,   372,   373,   379,   380,   381,   386,   388,   393,   394,
-     398,   400,   402,   404,   406,   411,   414,   416,   418,   420,
-     422,   424,   426,   428,   434,   436,   438,   440,   442,   444,
-     446,   448,   453,   454,   455,   456,   460,   461,   463,   468,
-     469,   471,   473,   478,   479,   481,   486,   487,   489,   494,
-     495,   497,   499,   501,   506,   507,   509,   514,   515,   520,
-     521,   526,   527,   532,   533,   538,   539,   544,   545,   547,
-     549,   554,   559,   560,   562,   564,   570,   571,   577,   579,
-     581,   583,   588,   589,   594,   595,   596,   597,   598,   599,
-     600,   601,   602,   603,   607,   608,   614,   615,   621,   622,
-     623,   624,   625,   626,   627,   628,   632,   639,   641,   651,
-     652,   657,   659,   661,   663,   667,   668,   673,   678,   681,
-     683,   685,   690,   692,   700,   701,   703,   707,   708,   713,
-     714,   719,   720,   724,   729,   730,   734,   736,   742,   743,
-     747,   749,   751,   753,   759,   760,   764,   765,   769,   771,
-     773,   778,   780,   785,   787,   791,   794,   798,   801,   805,
-     807,   809,   814,   816,   818,   827,   829,   831,   836,   838,
-     843,   856,   857,   862,   864,   869,   873,   875,   877,   879,
-     881,   887,   888,   894,   895,   899,   900,   905,   907,   913,
-     914,   916,   921,   923,   930,   932,   936,   937,   942,   944,
-     948,   949,   953,   955,   959,   960,   964,   965,   969,   970,
-     985,   986,   987,   988,   989,   993,   998,  1005,  1015,  1020,
-    1025,  1033,  1038,  1043,  1048,  1053,  1061,  1083,  1088,  1095,
-    1097,  1104,  1109,  1114,  1125,  1130,  1135,  1140,  1145,  1154,
-    1159,  1167,  1168,  1169,  1170,  1176,  1181,  1189,  1190,  1191,
-    1192,  1196,  1197,  1198,  1199,  1204,  1205,  1214,  1215,  1220,
-    1221,  1226,  1228,  1230,  1232,  1234,  1237,  1236,  1248,  1249,
-    1251,  1261,  1262,  1267,  1271,  1273,  1275,  1277,  1279,  1281,
-    1283,  1285,  1290,  1292,  1294,  1296,  1298,  1300,  1302,  1304,
-    1306,  1308,  1310,  1312,  1318,  1319,  1321,  1323,  1325,  1330,
-    1331,  1337,  1338,  1340,  1342,  1347,  1349,  1351,  1353,  1358,
-    1359,  1361,  1363,  1368,  1369,  1371,  1376,  1377,  1379,  1381,
-    1386,  1388,  1390,  1395,  1396,  1400,  1402,  1404,  1406,  1408,
-    1413,  1415,  1420,  1422,  1427,  1428,  1430,  1431,  1436,  1437,
-    1439,  1441,  1446,  1448,  1454,  1455,  1457,  1460,  1463,  1468,
-    1469,  1474,  1479,  1483,  1485,  1487,  1492,  1494,  1500,  1501,
-    1509,  1510,  1514,  1515,  1516,  1518,  1520,  1527,  1528,  1530,
-    1532,  1537,  1538,  1544,  1545,  1549,  1550,  1555,  1556,  1557,
-    1559,  1567,  1568,  1570,  1573,  1575,  1579,  1580,  1581,  1583,
-    1585,  1589,  1594,  1602,  1603,  1612,  1614,  1619,  1620,  1621,
-    1625,  1626,  1627,  1631,  1632,  1633,  1637,  1638,  1639,  1644,
-    1645,  1646,  1647,  1653,  1654,  1659,  1660,  1664,  1665,  1666,
-    1667,  1682,  1683,  1688,  1689,  1696,  1698,  1700,  1703,  1705,
-    1707,  1730,  1731,  1733,  1735,  1740,  1741,  1743,  1748,  1753,
-    1754,  1760,  1759,  1763,  1767,  1769,  1771,  1777,  1778,  1783,
-    1788,  1790,  1795,  1797,  1798,  1800,  1805,  1807,  1809,  1814,
-    1816,  1821,  1826,  1834,  1840,  1839,  1853,  1854,  1859,  1860,
-    1864,  1869,  1874,  1882,  1887,  1898,  1899,  1910,  1911,  1917,
-    1918,  1922,  1923,  1924,  1927,  1926,  1937,  1942,  1947,  1953,
-    1962,  1968,  1974,  1980,  1986,  1994,  2000,  2008,  2014,  2023,
-    2024,  2025,  2029,  2033,  2035,  2040,  2041,  2045,  2046,  2051,
-    2057,  2058,  2061,  2063,  2064,  2068,  2069,  2070,  2071,  2105,
-    2107,  2108,  2110,  2115,  2120,  2125,  2127,  2129,  2134,  2136,
-    2138,  2140,  2145,  2147,  2157,  2159,  2160,  2165,  2167,  2169,
-    2174,  2176,  2178,  2183,  2185,  2187,  2196,  2197,  2198,  2202,
-    2204,  2206,  2211,  2213,  2215,  2220,  2222,  2224,  2239,  2241,
-    2242,  2244,  2249,  2250,  2255,  2257,  2259,  2264,  2266,  2268,
-    2270,  2275,  2277,  2279,  2289,  2291,  2292,  2294,  2299,  2301,
-    2303,  2308,  2310,  2312,  2314,  2319,  2321,  2323,  2354,  2356,
-    2357,  2359,  2364,  2369,  2377,  2379,  2381,  2386,  2388,  2393,
-    2395,  2409,  2410,  2412,  2417,  2419,  2421,  2423,  2425,  2430,
-    2431,  2433,  2435,  2440,  2442,  2444,  2450,  2452,  2454,  2458,
-    2460,  2462,  2464,  2478,  2479,  2481,  2486,  2488,  2490,  2492,
-    2494,  2499,  2500,  2502,  2504,  2509,  2511,  2513,  2519,  2520,
-    2522,  2531,  2534,  2536,  2539,  2541,  2543,  2556,  2557,  2559,
-    2564,  2566,  2568,  2570,  2572,  2577,  2578,  2580,  2582,  2587,
-    2589,  2597,  2598,  2599,  2604,  2605,  2609,  2611,  2613,  2615,
-    2617,  2619,  2626,  2628,  2630,  2632,  2634,  2636,  2638,  2640,
-    2642,  2644,  2649,  2651,  2653,  2658,  2684,  2685,  2687,  2691,
-    2692,  2696,  2698,  2700,  2702,  2704,  2706,  2713,  2715,  2717,
-    2719,  2721,  2723,  2728,  2733,  2735,  2737,  2755,  2757,  2762,
-    2763
+       0,   290,   290,   296,   305,   306,   307,   311,   312,   313,
+     317,   318,   323,   327,   328,   332,   333,   339,   341,   343,
+     345,   350,   351,   357,   359,   361,   362,   364,   365,   367,
+     369,   371,   379,   380,   386,   387,   388,   393,   395,   400,
+     401,   405,   407,   409,   411,   413,   418,   421,   423,   425,
+     427,   429,   431,   433,   435,   441,   443,   445,   447,   449,
+     451,   453,   455,   460,   461,   462,   463,   467,   468,   470,
+     475,   476,   478,   480,   485,   486,   488,   493,   494,   496,
+     501,   502,   504,   506,   508,   513,   514,   516,   521,   522,
+     527,   528,   533,   534,   539,   540,   545,   546,   551,   552,
+     554,   556,   561,   566,   567,   569,   571,   577,   578,   584,
+     586,   588,   590,   595,   596,   601,   602,   603,   604,   605,
+     606,   607,   608,   609,   610,   614,   615,   621,   622,   628,
+     629,   630,   631,   632,   633,   634,   635,   636,   645,   652,
+     654,   664,   665,   670,   672,   674,   676,   680,   681,   686,
+     691,   694,   696,   698,   703,   705,   713,   714,   716,   720,
+     721,   726,   727,   732,   733,   737,   742,   743,   747,   749,
+     755,   756,   760,   762,   764,   766,   772,   773,   777,   778,
+     782,   784,   786,   791,   793,   798,   800,   804,   807,   811,
+     814,   818,   820,   824,   826,   833,   835,   837,   846,   848,
+     850,   852,   854,   859,   861,   863,   865,   870,   883,   884,
+     889,   891,   896,   900,   902,   904,   906,   908,   914,   915,
+     921,   922,   926,   927,   932,   934,   940,   941,   943,   948,
+     950,   957,   959,   963,   964,   969,   971,   975,   976,   980,
+     982,   986,   987,   991,   992,   996,   997,  1012,  1013,  1014,
+    1015,  1016,  1020,  1025,  1032,  1042,  1047,  1052,  1060,  1065,
+    1070,  1075,  1080,  1088,  1110,  1115,  1122,  1124,  1131,  1136,
+    1141,  1152,  1157,  1162,  1167,  1172,  1181,  1186,  1194,  1195,
+    1196,  1197,  1203,  1208,  1216,  1217,  1218,  1219,  1223,  1224,
+    1225,  1226,  1231,  1232,  1241,  1242,  1247,  1248,  1253,  1255,
+    1257,  1259,  1261,  1264,  1263,  1275,  1276,  1278,  1288,  1289,
+    1294,  1298,  1300,  1302,  1304,  1306,  1308,  1310,  1312,  1317,
+    1319,  1321,  1323,  1325,  1327,  1329,  1331,  1333,  1335,  1337,
+    1339,  1345,  1346,  1348,  1350,  1352,  1357,  1358,  1364,  1365,
+    1367,  1369,  1374,  1376,  1378,  1380,  1385,  1386,  1388,  1390,
+    1395,  1396,  1398,  1403,  1404,  1406,  1408,  1413,  1415,  1417,
+    1422,  1423,  1427,  1429,  1431,  1433,  1435,  1440,  1442,  1447,
+    1449,  1454,  1455,  1457,  1458,  1463,  1464,  1466,  1468,  1473,
+    1475,  1481,  1482,  1484,  1487,  1490,  1495,  1496,  1501,  1506,
+    1510,  1512,  1514,  1519,  1521,  1527,  1528,  1536,  1537,  1541,
+    1542,  1543,  1545,  1547,  1554,  1555,  1557,  1559,  1564,  1565,
+    1571,  1572,  1576,  1577,  1582,  1583,  1584,  1586,  1594,  1595,
+    1597,  1600,  1602,  1606,  1607,  1608,  1610,  1612,  1616,  1621,
+    1629,  1630,  1639,  1641,  1646,  1647,  1648,  1652,  1653,  1654,
+    1658,  1659,  1660,  1664,  1665,  1666,  1671,  1672,  1673,  1674,
+    1680,  1681,  1683,  1688,  1689,  1694,  1695,  1696,  1697,  1698,
+    1713,  1714,  1719,  1720,  1728,  1730,  1732,  1735,  1737,  1739,
+    1762,  1763,  1765,  1767,  1772,  1773,  1775,  1780,  1785,  1786,
+    1792,  1791,  1795,  1799,  1801,  1803,  1809,  1810,  1815,  1820,
+    1822,  1827,  1829,  1830,  1832,  1837,  1839,  1841,  1846,  1848,
+    1853,  1858,  1866,  1872,  1871,  1885,  1886,  1891,  1892,  1896,
+    1901,  1906,  1914,  1919,  1930,  1931,  1942,  1943,  1949,  1950,
+    1954,  1955,  1956,  1959,  1958,  1969,  1974,  1979,  1985,  1994,
+    2000,  2006,  2012,  2018,  2026,  2032,  2040,  2046,  2055,  2056,
+    2057,  2061,  2065,  2067,  2072,  2073,  2077,  2078,  2083,  2089,
+    2090,  2093,  2095,  2096,  2100,  2101,  2102,  2103,  2137,  2139,
+    2140,  2142,  2147,  2152,  2157,  2159,  2161,  2166,  2168,  2170,
+    2172,  2177,  2179,  2189,  2191,  2192,  2197,  2199,  2201,  2206,
+    2208,  2210,  2215,  2217,  2219,  2228,  2229,  2230,  2234,  2236,
+    2238,  2243,  2245,  2247,  2252,  2254,  2256,  2271,  2273,  2274,
+    2276,  2281,  2282,  2287,  2289,  2291,  2296,  2298,  2300,  2302,
+    2307,  2309,  2311,  2321,  2323,  2324,  2326,  2331,  2333,  2335,
+    2340,  2342,  2344,  2346,  2351,  2353,  2355,  2386,  2388,  2389,
+    2391,  2396,  2401,  2409,  2411,  2413,  2418,  2420,  2425,  2427,
+    2441,  2442,  2444,  2449,  2451,  2453,  2455,  2457,  2462,  2463,
+    2465,  2467,  2472,  2474,  2476,  2482,  2484,  2486,  2490,  2492,
+    2494,  2496,  2510,  2511,  2513,  2518,  2520,  2522,  2524,  2526,
+    2531,  2532,  2534,  2536,  2541,  2543,  2545,  2551,  2552,  2554,
+    2563,  2566,  2568,  2571,  2573,  2575,  2588,  2589,  2591,  2596,
+    2598,  2600,  2602,  2604,  2609,  2610,  2612,  2614,  2619,  2621,
+    2629,  2630,  2631,  2636,  2637,  2641,  2643,  2645,  2647,  2649,
+    2651,  2658,  2660,  2662,  2664,  2666,  2668,  2670,  2672,  2674,
+    2676,  2681,  2683,  2685,  2690,  2716,  2717,  2719,  2723,  2724,
+    2728,  2730,  2732,  2734,  2736,  2738,  2745,  2747,  2749,  2751,
+    2753,  2755,  2760,  2765,  2767,  2769,  2787,  2789,  2794,  2795
 };
 #endif
@@ -1080,17 +1098,18 @@
   "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH", "CASE", "DEFAULT",
   "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO", "RETURN", "CHOOSE",
-  "FALLTHRU", "TRY", "CATCH", "FINALLY", "THROW", "ASM", "ALIGNAS",
-  "ALIGNOF", "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT",
-  "THREADLOCAL", "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname",
-  "TYPEGENname", "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
+  "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH", "CATCHRESUME",
+  "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS", "ALIGNOF",
+  "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT", "THREADLOCAL",
+  "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname", "TYPEGENname",
+  "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
   "INTEGERconstant", "FLOATINGconstant", "CHARACTERconstant",
   "STRINGliteral", "ZERO", "ONE", "ARROW", "ICR", "DECR", "LS", "RS", "LE",
   "GE", "EQ", "NE", "ANDAND", "OROR", "ELLIPSIS", "MULTassign",
   "DIVassign", "MODassign", "PLUSassign", "MINUSassign", "LSassign",
-  "RSassign", "ANDassign", "ERassign", "ORassign", "THEN", "'('", "')'",
-  "'['", "']'", "'.'", "'{'", "'}'", "','", "':'", "'!'", "'*'", "'&'",
-  "'+'", "'-'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'", "'|'", "'?'",
-  "'='", "';'", "$accept", "push", "pop", "constant", "identifier",
-  "no_01_identifier", "no_attr_identifier", "zero_one",
+  "RSassign", "ANDassign", "ERassign", "ORassign", "ATassign", "THEN",
+  "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "':'", "'!'",
+  "'*'", "'&'", "'+'", "'-'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'",
+  "'|'", "'?'", "'='", "';'", "$accept", "push", "pop", "constant",
+  "identifier", "no_01_identifier", "no_attr_identifier", "zero_one",
   "string_literal_list", "primary_expression", "postfix_expression",
   "argument_expression_list", "argument_expression", "field_list", "field",
@@ -1195,7 +1214,8 @@
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,    40,    41,    91,    93,    46,   123,   125,    44,    58,
-      33,    42,    38,    43,    45,   126,    47,    37,    60,    62,
-      94,   124,    63,    61,    59
+     355,   356,   357,   358,   359,   360,   361,    40,    41,    91,
+      93,    46,   123,   125,    44,    58,    33,    42,    38,    43,
+      45,   126,    47,    37,    60,    62,    94,   124,    63,    61,
+      59
 };
 # endif
@@ -1204,79 +1224,79 @@
 static const yytype_uint16 yyr1[] =
 {
-       0,   125,   126,   127,   128,   128,   128,   129,   129,   129,
-     130,   130,   131,   132,   132,   133,   133,   134,   134,   134,
-     134,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   136,   136,   137,   137,   137,   137,   137,   138,   138,
-     139,   139,   139,   139,   139,   140,   140,   140,   140,   140,
-     140,   140,   140,   140,   140,   140,   140,   140,   140,   140,
-     140,   140,   141,   141,   141,   141,   142,   142,   142,   143,
-     143,   143,   143,   144,   144,   144,   145,   145,   145,   146,
-     146,   146,   146,   146,   147,   147,   147,   148,   148,   149,
-     149,   150,   150,   151,   151,   152,   152,   153,   153,   153,
-     153,   154,   155,   155,   155,   155,   156,   156,   157,   157,
-     157,   157,   158,   158,   159,   159,   159,   159,   159,   159,
-     159,   159,   159,   159,   160,   160,   161,   161,   162,   162,
-     162,   162,   162,   162,   162,   162,   163,   164,   164,   165,
-     165,   166,   166,   166,   166,   167,   167,   168,   169,   169,
-     169,   169,   169,   169,   170,   170,   170,   171,   171,   172,
-     172,   173,   173,   174,   175,   175,   176,   176,   177,   177,
-     178,   178,   178,   178,   179,   179,   180,   180,   181,   181,
-     181,   182,   182,   183,   183,   183,   183,   183,   183,   183,
-     183,   183,   184,   184,   184,   185,   185,   185,   186,   186,
-     187,   188,   188,   188,   188,   188,   189,   189,   189,   189,
-     189,   190,   190,   191,   191,   192,   192,   193,   193,   194,
-     194,   194,   195,   195,   196,   196,   197,   197,   198,   198,
-     199,   199,   200,   200,   201,   201,   202,   202,   203,   203,
-     204,   204,   204,   204,   204,   205,   205,   205,   206,   206,
-     206,   207,   207,   207,   207,   207,   208,   208,   208,   209,
-     209,   210,   210,   210,   211,   211,   211,   211,   211,   212,
-     212,   213,   213,   213,   213,   214,   214,   215,   215,   215,
-     215,   216,   216,   216,   216,   217,   217,   218,   218,   219,
-     219,   220,   220,   220,   220,   220,   221,   220,   222,   222,
-     222,   223,   223,   224,   225,   225,   225,   225,   225,   225,
-     225,   225,   226,   226,   226,   226,   226,   226,   226,   226,
-     226,   226,   226,   226,   227,   227,   227,   227,   227,   228,
-     228,   229,   229,   229,   229,   230,   230,   230,   230,   231,
-     231,   231,   231,   232,   232,   232,   233,   233,   233,   233,
-     234,   234,   234,   235,   235,   236,   236,   236,   236,   236,
-     237,   237,   238,   238,   239,   239,   239,   239,   240,   240,
-     240,   240,   241,   241,   242,   242,   242,   242,   242,   243,
-     243,   244,   245,   246,   246,   246,   247,   247,   248,   248,
-     249,   249,   250,   250,   250,   250,   250,   251,   251,   251,
-     251,   252,   252,   253,   253,   254,   254,   255,   255,   255,
-     255,   256,   256,   256,   256,   256,   257,   257,   257,   257,
-     257,   258,   258,   259,   259,   260,   260,   261,   261,   261,
-     262,   262,   262,   263,   263,   263,   264,   264,   264,   265,
-     265,   265,   265,   266,   266,   267,   267,   268,   268,   268,
-     268,   269,   269,   270,   270,   271,   271,   271,   271,   271,
-     271,   272,   272,   272,   272,   273,   273,   273,   274,   275,
-     275,   277,   276,   276,   278,   278,   278,   279,   279,   280,
-     280,   280,   281,   281,   281,   281,   282,   282,   282,   283,
-     283,   284,   284,   285,   286,   285,   287,   287,   288,   288,
-     289,   289,   289,   290,   290,   291,   291,   292,   292,   293,
-     293,   294,   294,   294,   295,   294,   294,   296,   296,   296,
-     297,   297,   297,   297,   297,   297,   297,   297,   297,   298,
-     298,   298,   299,   300,   300,   301,   301,   302,   302,   303,
-     304,   304,   305,   305,   305,   306,   306,   306,   306,   307,
-     307,   307,   307,   308,   308,   309,   309,   309,   310,   310,
-     310,   310,   311,   311,   312,   312,   312,   313,   313,   313,
-     314,   314,   314,   315,   315,   315,   316,   316,   316,   317,
-     317,   317,   318,   318,   318,   319,   319,   319,   320,   320,
-     320,   320,   321,   321,   322,   322,   322,   323,   323,   323,
-     323,   324,   324,   324,   325,   325,   325,   325,   326,   326,
-     326,   327,   327,   327,   327,   328,   328,   328,   329,   329,
-     329,   329,   330,   330,   331,   331,   331,   332,   332,   333,
-     333,   334,   334,   334,   335,   335,   335,   335,   335,   336,
-     336,   336,   336,   337,   337,   337,   338,   338,   338,   339,
-     339,   339,   339,   340,   340,   340,   341,   341,   341,   341,
-     341,   342,   342,   342,   342,   343,   343,   343,   344,   344,
-     344,   345,   345,   345,   345,   345,   345,   346,   346,   346,
-     347,   347,   347,   347,   347,   348,   348,   348,   348,   349,
-     349,   350,   350,   350,   351,   351,   352,   352,   352,   352,
-     352,   352,   353,   353,   353,   353,   353,   353,   353,   353,
-     353,   353,   354,   354,   354,   354,   355,   355,   355,   356,
-     356,   357,   357,   357,   357,   357,   357,   358,   358,   358,
-     358,   358,   358,   359,   360,   360,   360,   361,   361,   362,
-     362
+       0,   131,   132,   133,   134,   134,   134,   135,   135,   135,
+     136,   136,   137,   138,   138,   139,   139,   140,   140,   140,
+     140,   141,   141,   141,   141,   141,   141,   141,   141,   141,
+     141,   141,   142,   142,   143,   143,   143,   143,   143,   144,
+     144,   145,   145,   145,   145,   145,   146,   146,   146,   146,
+     146,   146,   146,   146,   146,   146,   146,   146,   146,   146,
+     146,   146,   146,   147,   147,   147,   147,   148,   148,   148,
+     149,   149,   149,   149,   150,   150,   150,   151,   151,   151,
+     152,   152,   152,   152,   152,   153,   153,   153,   154,   154,
+     155,   155,   156,   156,   157,   157,   158,   158,   159,   159,
+     159,   159,   160,   161,   161,   161,   161,   162,   162,   163,
+     163,   163,   163,   164,   164,   165,   165,   165,   165,   165,
+     165,   165,   165,   165,   165,   166,   166,   167,   167,   168,
+     168,   168,   168,   168,   168,   168,   168,   168,   169,   170,
+     170,   171,   171,   172,   172,   172,   172,   173,   173,   174,
+     175,   175,   175,   175,   175,   175,   176,   176,   176,   177,
+     177,   178,   178,   179,   179,   180,   181,   181,   182,   182,
+     183,   183,   184,   184,   184,   184,   185,   185,   186,   186,
+     187,   187,   187,   188,   188,   189,   189,   189,   189,   189,
+     189,   189,   189,   189,   189,   190,   190,   190,   191,   191,
+     191,   191,   191,   192,   192,   192,   192,   193,   194,   194,
+     194,   194,   194,   195,   195,   195,   195,   195,   196,   196,
+     197,   197,   198,   198,   199,   199,   200,   200,   200,   201,
+     201,   202,   202,   203,   203,   204,   204,   205,   205,   206,
+     206,   207,   207,   208,   208,   209,   209,   210,   210,   210,
+     210,   210,   211,   211,   211,   212,   212,   212,   213,   213,
+     213,   213,   213,   214,   214,   214,   215,   215,   216,   216,
+     216,   217,   217,   217,   217,   217,   218,   218,   219,   219,
+     219,   219,   220,   220,   221,   221,   221,   221,   222,   222,
+     222,   222,   223,   223,   224,   224,   225,   225,   226,   226,
+     226,   226,   226,   227,   226,   228,   228,   228,   229,   229,
+     230,   231,   231,   231,   231,   231,   231,   231,   231,   232,
+     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+     232,   233,   233,   233,   233,   233,   234,   234,   235,   235,
+     235,   235,   236,   236,   236,   236,   237,   237,   237,   237,
+     238,   238,   238,   239,   239,   239,   239,   240,   240,   240,
+     241,   241,   242,   242,   242,   242,   242,   243,   243,   244,
+     244,   245,   245,   245,   245,   246,   246,   246,   246,   247,
+     247,   248,   248,   248,   248,   248,   249,   249,   250,   251,
+     252,   252,   252,   253,   253,   254,   254,   255,   255,   256,
+     256,   256,   256,   256,   257,   257,   257,   257,   258,   258,
+     259,   259,   260,   260,   261,   261,   261,   261,   262,   262,
+     262,   262,   262,   263,   263,   263,   263,   263,   264,   264,
+     265,   265,   266,   266,   267,   267,   267,   268,   268,   268,
+     269,   269,   269,   270,   270,   270,   271,   271,   271,   271,
+     272,   272,   272,   273,   273,   274,   274,   274,   274,   274,
+     275,   275,   276,   276,   277,   277,   277,   277,   277,   277,
+     278,   278,   278,   278,   279,   279,   279,   280,   281,   281,
+     283,   282,   282,   284,   284,   284,   285,   285,   286,   286,
+     286,   287,   287,   287,   287,   288,   288,   288,   289,   289,
+     290,   290,   291,   292,   291,   293,   293,   294,   294,   295,
+     295,   295,   296,   296,   297,   297,   298,   298,   299,   299,
+     300,   300,   300,   301,   300,   300,   302,   302,   302,   303,
+     303,   303,   303,   303,   303,   303,   303,   303,   304,   304,
+     304,   305,   306,   306,   307,   307,   308,   308,   309,   310,
+     310,   311,   311,   311,   312,   312,   312,   312,   313,   313,
+     313,   313,   314,   314,   315,   315,   315,   316,   316,   316,
+     316,   317,   317,   318,   318,   318,   319,   319,   319,   320,
+     320,   320,   321,   321,   321,   322,   322,   322,   323,   323,
+     323,   324,   324,   324,   325,   325,   325,   326,   326,   326,
+     326,   327,   327,   328,   328,   328,   329,   329,   329,   329,
+     330,   330,   330,   331,   331,   331,   331,   332,   332,   332,
+     333,   333,   333,   333,   334,   334,   334,   335,   335,   335,
+     335,   336,   336,   337,   337,   337,   338,   338,   339,   339,
+     340,   340,   340,   341,   341,   341,   341,   341,   342,   342,
+     342,   342,   343,   343,   343,   344,   344,   344,   345,   345,
+     345,   345,   346,   346,   346,   347,   347,   347,   347,   347,
+     348,   348,   348,   348,   349,   349,   349,   350,   350,   350,
+     351,   351,   351,   351,   351,   351,   352,   352,   352,   353,
+     353,   353,   353,   353,   354,   354,   354,   354,   355,   355,
+     356,   356,   356,   357,   357,   358,   358,   358,   358,   358,
+     358,   359,   359,   359,   359,   359,   359,   359,   359,   359,
+     359,   360,   360,   360,   360,   361,   361,   361,   362,   362,
+     363,   363,   363,   363,   363,   363,   364,   364,   364,   364,
+     364,   364,   365,   366,   366,   366,   367,   367,   368,   368
 };
 
@@ -1287,76 +1307,76 @@
        1,     1,     1,     1,     1,     1,     2,     1,     1,     3,
        3,     1,     6,     4,     3,     7,     3,     7,     2,     2,
-       7,     1,     3,     0,     1,     3,     7,     9,     1,     3,
-       1,     3,     7,     3,     7,     1,     1,     1,     2,     2,
-       2,     2,     2,     2,     2,     4,     1,     4,     4,     2,
-       4,     2,     1,     1,     1,     1,     1,     4,     4,     1,
-       3,     3,     3,     1,     3,     3,     1,     3,     3,     1,
-       3,     3,     3,     3,     1,     3,     3,     1,     3,     1,
-       3,     1,     3,     1,     3,     1,     3,     1,     5,     4,
-       5,     1,     1,     3,     3,     2,     0,     1,     2,     5,
-       6,     7,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     3,     0,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     4,     2,     7,     1,
-       3,     1,     2,     1,     2,     1,     2,     2,     5,     7,
-       5,     9,     5,     9,     1,     3,     1,     1,     3,     3,
-       2,     1,     2,     2,     0,     1,     2,     3,     0,     1,
-       2,     3,     3,     4,     0,     1,     1,     2,     5,     7,
-       6,     6,     4,     3,     4,     2,     3,     2,     3,     3,
-       3,     2,     3,     3,     4,     1,     5,     6,     9,    10,
-       2,     1,     2,     2,     2,     1,     6,     8,    10,    12,
-      14,     0,     1,     0,     1,     1,     3,     4,     7,     0,
-       1,     3,     1,     3,     1,     1,     1,     3,     1,     1,
-       1,     3,     0,     1,     3,     4,     1,     3,     1,     1,
-       3,     3,     3,     3,     3,     2,     3,     6,     3,     3,
-       4,     1,     2,     2,     3,     5,     8,     7,     7,     5,
-       9,     2,     2,     5,     3,     5,     4,     3,     4,     4,
-       7,     3,     3,     3,     3,     4,     6,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     1,     1,     2,     1,
-       1,     1,     1,     1,     1,     1,     0,     5,     1,     2,
-       3,     1,     2,     1,     1,     1,     1,     1,     1,     1,
+       7,     4,     1,     3,     0,     1,     3,     7,     9,     1,
+       3,     1,     3,     7,     3,     7,     1,     1,     1,     2,
+       2,     2,     2,     2,     2,     2,     4,     1,     4,     4,
+       2,     4,     2,     1,     1,     1,     1,     1,     4,     4,
+       1,     3,     3,     3,     1,     3,     3,     1,     3,     3,
+       1,     3,     3,     3,     3,     1,     3,     3,     1,     3,
+       1,     3,     1,     3,     1,     3,     1,     3,     1,     5,
+       4,     5,     1,     1,     3,     3,     2,     0,     1,     2,
+       5,     6,     7,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     3,     0,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     6,     4,     2,
+       7,     1,     3,     1,     2,     1,     2,     1,     2,     2,
+       5,     7,     5,     9,     5,     9,     1,     3,     1,     1,
+       3,     3,     2,     1,     2,     2,     0,     1,     2,     3,
+       0,     1,     2,     3,     3,     4,     0,     1,     1,     2,
+       5,     7,     6,     6,     4,     3,     4,     2,     3,     2,
+       3,     3,     3,     3,     5,     3,     3,     4,     1,     5,
+       6,     5,     6,     9,    10,     9,    10,     2,     1,     2,
+       2,     2,     1,     6,     8,    10,    12,    14,     0,     1,
+       0,     1,     1,     3,     4,     7,     0,     1,     3,     1,
+       3,     1,     1,     1,     3,     1,     1,     1,     3,     0,
+       1,     3,     4,     1,     3,     1,     1,     3,     3,     3,
+       3,     3,     2,     3,     6,     3,     3,     4,     1,     2,
+       2,     3,     5,     8,     7,     7,     5,     9,     2,     2,
+       5,     3,     5,     4,     3,     4,     4,     7,     3,     3,
+       3,     3,     4,     6,     1,     1,     1,     1,     1,     1,
+       1,     1,     0,     1,     1,     2,     1,     1,     1,     1,
+       1,     1,     1,     0,     5,     1,     2,     3,     1,     2,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     2,     3,     3,     1,
-       3,     1,     2,     2,     2,     4,     4,     4,     4,     1,
-       2,     2,     3,     1,     2,     2,     1,     2,     2,     3,
-       1,     2,     2,     1,     1,     4,     2,     5,     7,     2,
-       2,     2,     1,     2,     2,     3,     2,     3,     1,     2,
-       3,     2,     2,     4,     0,     1,     2,     2,     1,     0,
-       1,     2,     2,     5,     6,     2,     2,     4,     0,     2,
-       0,     1,     1,     1,     5,     5,     5,     1,     5,     5,
-       9,     1,     5,     0,     1,     1,     5,     1,     1,     5,
-       5,     1,     3,     3,     4,     1,     1,     1,     1,     2,
-       1,     3,     3,     1,     2,     1,     3,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
-       1,     1,     2,     0,     2,     1,     4,     1,     2,     3,
-       4,     2,     2,     1,     2,     1,     2,     5,     5,     7,
-       6,     1,     2,     2,     3,     1,     2,     2,     4,     2,
-       4,     0,     4,     2,     1,     1,     1,     0,     2,     5,
-       5,    13,     1,     1,     3,     3,     2,     3,     3,     2,
-       4,     1,     6,     9,     0,    11,     1,     3,     3,     3,
-       1,     1,     5,     2,     5,     0,     1,     1,     3,     0,
-       1,     1,     1,     1,     0,     6,     2,     1,     2,     4,
-       2,     3,     3,     3,     4,     5,     5,     5,     6,     1,
-       1,     1,     3,     0,     5,     0,     1,     1,     2,     6,
-       1,     3,     0,     1,     4,     1,     1,     1,     1,     2,
-       1,     2,     2,     1,     3,     2,     3,     3,     2,     4,
-       4,     3,     8,     3,     2,     1,     2,     6,     8,     3,
-       2,     3,     3,     4,     4,     3,     1,     1,     1,     4,
-       6,     3,     2,     3,     3,     4,     4,     3,     2,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     2,     2,     3,     3,     1,     3,     1,     2,
+       2,     2,     4,     4,     4,     4,     1,     2,     2,     3,
+       1,     2,     2,     1,     2,     2,     3,     1,     2,     2,
+       1,     1,     4,     2,     5,     7,     2,     2,     2,     1,
+       2,     2,     3,     2,     3,     1,     2,     3,     2,     2,
+       4,     0,     1,     2,     2,     1,     0,     1,     2,     2,
+       5,     6,     2,     2,     4,     0,     2,     0,     1,     1,
+       1,     5,     5,     5,     1,     5,     5,     9,     1,     5,
+       0,     1,     1,     5,     1,     1,     5,     5,     1,     3,
+       3,     4,     1,     1,     1,     1,     2,     1,     3,     3,
+       1,     2,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     2,     1,     1,     1,     2,
+       0,     2,     2,     1,     4,     0,     1,     2,     3,     4,
+       2,     2,     1,     2,     1,     2,     5,     5,     7,     6,
+       1,     2,     2,     3,     1,     2,     2,     4,     2,     4,
+       0,     4,     2,     1,     1,     1,     0,     2,     5,     5,
+      13,     1,     1,     3,     3,     2,     3,     3,     2,     4,
+       1,     6,     9,     0,    11,     1,     3,     3,     3,     1,
+       1,     5,     2,     5,     0,     1,     1,     3,     0,     1,
+       1,     1,     1,     0,     6,     2,     1,     2,     4,     2,
+       3,     3,     3,     4,     5,     5,     5,     6,     1,     1,
+       1,     3,     0,     5,     0,     1,     1,     2,     6,     1,
+       3,     0,     1,     4,     1,     1,     1,     1,     2,     1,
        2,     2,     1,     3,     2,     3,     3,     2,     4,     4,
-       3,     6,     8,     3,     2,     1,     2,     2,     2,     3,
-       3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
-       2,     2,     1,     1,     2,     3,     3,     2,     4,     6,
-       8,     1,     2,     2,     1,     2,     2,     3,     3,     1,
-       4,     4,     3,     5,     8,     3,     2,     3,     1,     5,
-       5,     6,     6,     1,     2,     2,     1,     2,     2,     3,
-       3,     1,     4,     4,     3,     5,     8,     3,     1,     2,
-       1,     2,     6,     5,     6,     7,     7,     1,     2,     2,
-       1,     2,     2,     3,     3,     1,     4,     4,     3,     8,
-       3,     1,     1,     2,     1,     1,     2,     3,     2,     3,
-       2,     3,     3,     2,     4,     3,     2,     3,     2,     4,
-       3,     2,     6,     6,     6,     7,     1,     2,     1,     1,
-       1,     2,     3,     2,     3,     2,     3,     3,     4,     2,
-       3,     4,     2,     5,     5,     6,     6,     0,     1,     0,
-       2
+       3,     8,     3,     2,     1,     2,     6,     8,     3,     2,
+       3,     3,     4,     4,     3,     1,     1,     1,     4,     6,
+       3,     2,     3,     3,     4,     4,     3,     2,     1,     2,
+       2,     1,     3,     2,     3,     3,     2,     4,     4,     3,
+       6,     8,     3,     2,     1,     2,     2,     2,     3,     3,
+       2,     4,     4,     3,     6,     8,     3,     2,     1,     2,
+       2,     1,     1,     2,     3,     3,     2,     4,     6,     8,
+       1,     2,     2,     1,     2,     2,     3,     3,     1,     4,
+       4,     3,     5,     8,     3,     2,     3,     1,     5,     5,
+       6,     6,     1,     2,     2,     1,     2,     2,     3,     3,
+       1,     4,     4,     3,     5,     8,     3,     1,     2,     1,
+       2,     6,     5,     6,     7,     7,     1,     2,     2,     1,
+       2,     2,     3,     3,     1,     4,     4,     3,     8,     3,
+       1,     1,     2,     1,     1,     2,     3,     2,     3,     2,
+       3,     3,     2,     4,     3,     2,     3,     2,     4,     3,
+       2,     6,     6,     6,     7,     1,     2,     1,     1,     1,
+       2,     3,     2,     3,     2,     3,     3,     4,     2,     3,
+       4,     2,     5,     5,     6,     6,     0,     1,     0,     2
 };
 
@@ -1366,157 +1386,161 @@
 static const yytype_uint16 yydefact[] =
 {
-     285,   285,   306,   304,   307,   305,   308,   309,   291,   293,
-     292,     0,   294,   320,   312,   317,   315,   316,   314,   313,
-     318,   319,   321,   322,   323,   535,   535,   535,     0,     0,
-       0,   285,   211,   295,   310,   311,     7,   350,     0,     8,
-      13,    14,     0,     2,   285,   553,     9,   513,   511,   238,
-       3,   443,     3,   251,     0,     3,     3,     3,   239,     3,
-       0,     0,     0,   286,   287,   289,   285,   298,   301,   303,
-     331,   277,   324,   329,   278,   339,   279,   346,   343,   353,
-       0,     0,   354,   280,   461,   465,     3,     3,     0,     2,
-     507,   512,   517,   290,     0,     0,   535,   565,   535,     2,
-     576,   577,   578,   285,     0,   719,   720,     0,    12,   285,
-       0,   261,   262,     0,   286,   281,   282,   283,   284,   514,
-     296,   382,   536,   537,   360,   361,    12,   434,   435,    11,
-     430,   433,     0,   491,   486,   477,   434,   435,     0,     0,
-     516,   212,     0,   285,     0,     0,     0,     0,     0,     0,
-       0,     0,   285,   285,     2,     0,   721,   286,   570,   582,
-     725,   718,   716,   723,     0,     0,   245,     2,     0,   520,
-     428,   429,   427,     0,     0,     0,     0,   535,     0,   622,
-     623,     0,     0,   533,   529,   535,   550,   535,   535,   530,
-       2,   531,   535,   589,   535,   535,   592,     0,     0,     0,
-     285,   285,   304,   351,     2,   285,   252,   288,   299,   332,
-     344,   466,     0,     2,     0,   443,   253,   286,   325,   340,
-     347,   462,     0,     2,     0,   302,   326,   333,   334,     0,
-     341,   345,   348,   352,   435,   285,   285,   356,   359,     0,
-     385,   463,   467,     0,     0,     0,     1,   285,     2,   518,
-     564,   566,   285,     2,   729,   286,   732,   533,   533,   286,
-       0,     0,     0,   264,   535,   530,     2,   285,     0,     0,
-     285,   538,     2,   489,     2,   542,     0,     0,     0,     0,
-       0,    17,    56,     4,     5,     6,    15,     0,     0,     0,
-     285,     2,     0,   285,    62,    63,    64,    65,    46,    18,
-      47,    21,    45,    66,     0,    69,    73,    76,    79,    84,
-      87,    89,    91,    93,    95,    97,   102,   483,   739,   441,
-     482,     0,   439,   440,     0,   554,   569,   572,   575,   581,
-     584,   587,   350,     0,     2,   727,     0,   285,   730,     2,
-     285,     3,   415,     0,   423,   286,   285,   298,   324,   278,
-     339,   346,     3,     3,   397,   401,   411,   416,   461,   285,
-     417,   694,   695,   285,   418,   420,   285,     2,   571,   583,
-     717,     2,     2,   240,     2,     0,     0,   445,   444,   137,
-       2,     2,   242,     2,     2,   241,     2,   272,     2,   273,
-       0,   271,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   555,   594,     0,   443,     2,   549,   558,   648,   551,
-     552,   521,   285,     2,   588,   597,   590,   591,     0,   267,
-     285,   285,   330,   286,     0,   286,     0,   285,   722,   726,
-     724,   522,   285,   533,   246,   254,   300,     0,     2,   523,
-     285,   487,   327,   328,   274,   342,   349,     0,   285,     2,
-     374,   285,   362,     0,     0,   368,   716,   285,   737,   388,
-       0,   464,   488,   243,   244,   508,   285,   425,     0,   285,
-     228,     0,     2,   230,     0,   286,     0,   248,     2,   249,
-     269,     0,     0,     2,   285,   533,   285,   474,   476,   475,
-       0,     0,   739,     0,   285,     0,   285,   478,   285,   548,
-     546,   547,   545,     0,   540,   543,     0,     0,   285,    54,
-      66,    50,   285,    59,   285,   285,    48,    49,    61,     2,
-     124,     0,     0,   437,     0,   436,   108,   285,    52,    53,
-      16,     0,    28,    29,    33,     2,     0,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,     0,     0,    51,
+     292,   292,   313,   311,   314,   312,   315,   316,   298,   300,
+     299,     0,   301,   327,   319,   324,   322,   323,   321,   320,
+     325,   326,   328,   329,   330,   544,   544,   544,     0,     0,
+       0,   292,   218,   302,   317,   318,     7,   357,     0,     8,
+      13,    14,     0,     2,   292,   562,     9,   522,   520,   245,
+       3,   450,     3,   258,     0,     3,     3,     3,   246,     3,
+       0,     0,     0,   293,   294,   296,   292,   305,   308,   310,
+     338,   284,   331,   336,   285,   346,   286,   353,   350,   360,
+       0,     0,   361,   287,   470,   474,     3,     3,     0,     2,
+     516,   521,   526,   297,     0,     0,   544,   574,   544,     2,
+     585,   586,   587,   292,     0,   728,   729,     0,    12,   292,
+       0,   268,   269,     0,   293,   288,   289,   290,   291,   523,
+     303,   389,   545,   546,   367,   368,    12,   441,   442,    11,
+     437,   440,     0,   500,   495,   486,   441,   442,     0,     0,
+     525,   219,     0,   292,     0,     0,     0,     0,     0,     0,
+       0,     0,   292,   292,     2,     0,   730,   293,   579,   591,
+     734,   727,   725,   732,     0,     0,     0,   252,     2,     0,
+     529,   435,   436,   434,     0,     0,     0,     0,   544,     0,
+     631,   632,     0,     0,   542,   538,   544,   559,   544,   544,
+     539,     2,   540,   544,   598,   544,   544,   601,     0,     0,
+       0,   292,   292,   311,   358,     2,   292,   259,   295,   306,
+     339,   351,   475,     0,     2,     0,   450,   260,   293,   332,
+     347,   354,   471,     0,     2,     0,   309,   333,   340,   341,
+       0,   348,   352,   355,   359,   442,   292,   292,   363,   366,
+       0,   392,   472,   476,     0,     0,     0,     1,   292,     2,
+     527,   573,   575,   292,     2,   738,   293,   741,   542,   542,
+     293,     0,     0,     0,   271,   544,   539,     2,   292,     0,
+       0,   292,   547,     2,   498,     2,   551,     0,     0,     0,
+       0,     0,    17,    57,     4,     5,     6,    15,     0,     0,
+       0,   292,     2,     0,   292,    63,    64,    65,    66,    47,
+      18,    48,    21,    46,    67,     0,    70,    74,    77,    80,
+      85,    88,    90,    92,    94,    96,    98,   103,   492,   748,
+     448,   491,     0,   446,   447,     0,   563,   578,   581,   584,
+     590,   593,   596,   357,     0,     2,   736,     0,   292,   739,
+       2,   292,     3,   422,     0,   430,   293,   292,   305,   331,
+     285,   346,   353,     3,     3,   404,   408,   418,   423,   470,
+     292,   424,   703,   704,   292,   425,   427,   292,     2,   580,
+     592,   726,     2,     2,   247,     2,   455,     0,   453,   452,
+     451,   139,     2,     2,   249,     2,     2,   248,     2,   279,
+       2,   280,     0,   278,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   564,   603,     0,   450,     2,   558,   567,
+     657,   560,   561,   530,   292,     2,   597,   606,   599,   600,
+       0,   274,   292,   292,   337,   293,     0,   293,     0,   292,
+     731,   735,   733,   531,   292,   542,   253,   261,   307,     0,
+       2,   532,   292,   496,   334,   335,   281,   349,   356,     0,
+     292,     2,   381,   292,   369,     0,     0,   375,   725,   292,
+     746,   395,     0,   473,   497,   250,   251,   517,   292,   432,
+       0,   292,   235,     0,     2,   237,     0,   293,     0,   255,
+       2,   256,   276,     0,     0,     2,   292,   542,   292,   483,
+     485,   484,     0,     0,   748,     0,   292,     0,   292,   487,
+     292,   557,   555,   556,   554,     0,   549,   552,     0,     0,
+     292,    55,    67,    51,   292,    60,   292,   292,    49,    50,
+      62,     2,   125,     0,     0,   444,     0,   443,   109,   292,
+      53,    54,    16,     0,    28,    29,    34,     2,     0,    34,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+       0,     0,    52,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     105,     2,   634,   442,   631,   535,   535,   639,   468,   285,
-       2,   573,   574,     0,   585,   586,     0,     2,   728,   731,
-     108,   285,     2,   285,     0,   696,   286,   700,   691,   692,
-     698,     0,     2,     2,   656,   535,   739,   605,   535,   535,
-     739,   535,   619,   535,   535,   670,   424,   653,   535,   535,
-     661,   668,   285,   419,   286,     0,     0,   285,   706,   286,
-     711,   739,   703,   285,   708,   739,   285,   285,   285,     0,
-     108,     0,    17,     5,     2,     0,     0,   447,   737,     0,
-       0,   453,   232,     0,   285,     0,     0,     0,   533,   557,
-     561,   563,   593,   596,   600,   603,   556,   595,     0,   275,
-     646,     0,   285,   268,     0,     0,     0,     0,   266,     2,
-       0,   250,   524,   285,     0,     0,     0,     0,   285,   285,
-       0,     0,   680,   372,   375,   379,   535,   379,   685,   378,
-     677,   535,   535,   355,   363,   371,   364,   535,   366,   369,
-     285,   738,     0,     0,   386,   737,   286,     3,   404,     3,
-     408,   407,   579,     0,   519,   285,     3,     3,   285,   423,
-     286,     3,   417,   418,     2,     0,     0,     0,   473,   297,
-     285,   469,   471,     3,     2,     2,     0,   490,     3,     0,
-     542,   126,     0,     0,   213,     0,     0,     2,     0,     0,
-      34,     0,     0,   108,   285,    19,     0,    20,     0,   680,
-     438,     0,   106,     3,     2,    26,     2,     0,    31,     0,
-       2,    24,   103,   104,    70,    71,    72,    74,    75,    77,
-      78,    82,    83,    80,    81,    85,    86,    88,    90,    92,
-      94,    96,     0,     0,   740,   285,     0,     0,     0,   635,
-     636,   632,   633,   485,   484,   285,     0,     3,   285,   702,
-     285,   707,   286,   285,   285,   285,   650,   693,   649,     2,
-     285,     0,     0,     0,     0,     0,     0,     0,     0,   671,
-       0,   657,   608,   624,   658,     2,   604,   611,   421,   606,
-     607,   422,     2,   618,   627,   620,   621,   654,   655,   669,
-     697,   701,   699,   739,   259,     2,   733,     2,   412,   705,
-     710,   413,     0,   391,     3,     3,     3,     3,   443,     3,
-       0,     2,   456,   452,   738,     0,   448,   455,     2,   451,
-     454,     0,   285,   233,   255,     3,   263,   265,     0,   443,
-       2,   559,   560,     2,   598,   599,     0,   647,   525,     3,
-     336,   335,   338,   337,   285,   526,     0,   527,   285,   365,
-     367,     2,     0,     0,     0,     0,   101,   381,   681,   682,
-     376,   380,   377,   678,   679,   370,   374,   357,   388,   383,
-     389,     0,     0,     0,   426,   231,     0,     0,     3,     2,
-     656,   419,     0,   515,     0,   739,   477,     0,   285,   285,
-     285,     0,   539,   541,   127,     0,     0,   206,     0,     0,
-       0,   214,   215,    55,    60,   285,     0,    58,    57,     0,
-     125,   681,     0,    67,    68,   107,   112,     3,   106,     0,
-       0,     0,    23,    33,     3,     0,    99,     0,     3,   638,
-     642,   645,   637,     3,   580,     3,   704,   709,     2,   285,
-       3,     3,   286,     0,     3,   610,   614,   617,   626,   660,
-     664,   667,   285,     3,   609,   625,   659,   285,   285,   414,
-     285,   285,   734,     0,     0,     0,     0,   247,     0,   101,
-       0,     3,     3,     0,   449,     0,   446,     0,     0,   236,
-     285,     0,     0,   126,     0,     0,     0,     0,     0,   126,
-       0,     0,     0,     2,     0,     0,     3,   128,   129,     2,
-     139,   130,   131,   132,   133,   134,   135,   141,   143,     0,
-       0,     0,   276,   285,   285,   535,     0,   528,   285,   108,
-     684,   688,   690,   683,   373,   387,   384,   567,     2,   652,
-     651,     0,   657,     2,   470,   472,   492,     3,   500,   501,
-       0,     2,   496,     3,     3,     0,     0,   544,   213,     0,
-       0,     0,   213,     0,     3,    35,   737,   106,     0,     3,
-     649,    40,     3,    38,     3,    32,     0,     3,    98,   100,
-       0,     2,   640,   641,     0,     0,   285,     0,     0,     0,
-       3,   626,     0,     2,   612,   613,     2,   628,     2,   662,
-     663,     0,     0,     3,     0,     3,     3,     3,     3,   399,
-     398,   402,     2,     2,   736,   735,   109,     0,     0,     0,
-       0,     3,   450,     3,     0,   234,   142,     3,   286,   285,
-       0,     0,     0,     0,     2,   187,     0,   185,     0,     0,
-       0,     0,     0,     0,   191,     0,   108,   535,   147,   144,
-     285,     0,     0,   258,   270,     3,     3,   534,   601,   358,
-       2,   686,   687,   285,   257,   285,     0,   503,   480,   285,
-       0,     0,   479,   494,     0,     0,     0,   207,     0,   216,
-     106,     0,     0,   113,   110,     0,     0,     0,     0,     0,
-       0,    22,     0,   643,   285,   568,   256,   712,   713,   714,
-       0,   665,   285,   285,   285,     3,     3,     0,   673,     0,
-       0,     0,     0,   285,   285,     3,   532,   457,   458,     0,
-       0,   237,   286,     0,     0,     0,     0,   285,   188,   186,
-       0,   183,   189,     0,     0,     0,   192,   195,   193,   190,
-     126,   140,   138,   235,     0,     0,   285,   406,   410,   409,
-       0,   497,     2,   498,     2,   499,   493,   285,   219,     0,
-     217,     0,   219,     3,   649,    30,   111,     2,    43,     2,
-      41,    39,    27,   109,    25,     3,   715,     3,     3,     3,
-       0,     0,   672,   674,   615,   629,   260,     2,   396,     3,
-     395,     0,   460,   457,   126,     0,     0,   126,     3,     0,
-     126,   184,     0,     2,   200,   194,     0,   136,   562,   602,
-       3,     2,     0,     0,     2,   220,     0,     0,   208,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   675,   676,
-     285,     0,   459,   148,     0,     0,     2,   161,   126,   150,
-       0,   178,     0,   126,     0,     2,   152,     0,     2,     2,
-       0,   285,   502,   504,   495,     0,     0,     0,     0,   111,
-      36,     3,     3,   644,   616,   630,   666,   400,   126,   154,
-     157,     0,   156,   160,     3,   163,   162,     0,   126,   180,
-     126,     3,     0,   285,     0,     2,   689,     2,   221,   222,
-       0,   218,   209,     0,     0,     0,   149,     0,     0,   159,
-     224,   164,     2,   226,   179,     0,   182,   168,   196,     3,
-     201,   205,     0,   285,     0,     0,     0,    37,    44,    42,
-     155,   158,   126,     0,   165,   285,   126,   126,     0,   169,
-       0,     0,   680,   202,   203,   204,   197,     3,   285,   210,
-     223,   145,   166,   151,   126,   227,   181,   176,   174,   170,
-     153,   126,     0,   681,     0,     0,   146,   167,   177,   171,
-     175,   174,   172,     3,     0,   481,   173,   198,     3,   199
+       0,     0,     0,   106,     2,   643,   449,   640,   544,   544,
+     648,   477,   292,     2,   582,   583,     0,   594,   595,     0,
+       2,   737,   740,   109,   292,     2,   292,     0,   705,   293,
+     709,   700,   701,   707,     0,     2,     2,   665,   544,   748,
+     614,   544,   544,   748,   544,   628,   544,   544,   679,   431,
+     662,   544,   544,   670,   677,   292,   426,   293,     0,     0,
+     292,   715,   293,   720,   748,   712,   292,   717,   748,   292,
+     292,   292,     0,   109,     0,    17,     5,     2,     0,     0,
+     456,   746,     0,     0,   462,   239,     0,   292,     0,     0,
+       0,   542,   566,   570,   572,   602,   605,   609,   612,   565,
+     604,     0,   282,   655,     0,   292,   275,     0,     0,     0,
+       0,   273,     2,     0,   257,   533,   292,     0,     0,     0,
+       0,   292,   292,     0,     0,   689,   379,   382,   386,   544,
+     386,   694,   385,   686,   544,   544,   362,   370,   378,   371,
+     544,   373,   376,   292,   747,     0,     0,   393,   746,   293,
+       3,   411,     3,   415,   414,   588,     0,   528,   292,     3,
+       3,   292,   430,   293,     3,   424,   425,     2,     0,     0,
+       0,   482,   304,   292,   478,   480,     3,     2,     2,     0,
+     499,     3,     0,   551,   127,     0,     0,   220,     0,     0,
+       2,     0,     0,    35,     0,     0,   109,   292,    19,     0,
+      20,     0,   689,   445,     0,   107,     3,     2,    26,     2,
+       0,    32,     0,     2,    24,     0,   104,   105,    71,    72,
+      73,    75,    76,    78,    79,    83,    84,    81,    82,    86,
+      87,    89,    91,    93,    95,    97,     0,     0,   749,   292,
+       0,     0,     0,   644,   645,   641,   642,   494,   493,   292,
+       0,     3,   292,   711,   292,   716,   293,   292,   292,   292,
+     659,   702,   658,     2,   292,     0,     0,     0,     0,     0,
+       0,     0,     0,   680,     0,   666,   617,   633,   667,     2,
+     613,   620,   428,   615,   616,   429,     2,   627,   636,   629,
+     630,   663,   664,   678,   706,   710,   708,   748,   266,     2,
+     742,     2,   419,   714,   719,   420,     0,   398,     3,     3,
+       3,     3,   450,     3,     0,     2,   465,   461,   747,     0,
+     457,   464,     2,   460,   463,     0,   292,   240,   262,     3,
+     270,   272,     0,   450,     2,   568,   569,     2,   607,   608,
+       0,   656,   534,     3,   343,   342,   345,   344,   292,   535,
+       0,   536,   292,   372,   374,     2,     0,     0,     0,     0,
+     102,   388,   690,   691,   383,   387,   384,   687,   688,   377,
+     381,   364,   395,   390,   396,     0,     0,     0,   433,   238,
+       0,     0,     3,     2,   665,   426,     0,   524,     0,   748,
+     486,     0,   292,   292,   292,     0,   548,   550,   128,     0,
+       0,   213,     0,     0,     0,   221,   222,    56,    61,   292,
+       0,    59,    58,     0,   126,   690,   455,    68,    69,   108,
+     113,     3,   107,     0,     0,     0,    23,    34,     3,     0,
+      31,   100,     0,     3,   647,   651,   654,   646,     3,   589,
+       3,   713,   718,     2,   292,     3,     3,   293,     0,     3,
+     619,   623,   626,   635,   669,   673,   676,   292,     3,   618,
+     634,   668,   292,   292,   421,   292,   292,   743,     0,     0,
+       0,     0,   254,     0,   102,     0,     3,     3,     0,   458,
+       0,   454,     0,     0,   243,   292,     0,     0,   127,     0,
+       0,     0,     0,     0,   127,     0,     0,   107,   107,     2,
+       0,     0,     0,     3,   129,   130,     2,   141,   131,   132,
+     133,   134,   135,   136,   143,   145,     0,     0,     0,   283,
+     292,   292,   544,     0,   537,   292,   109,   693,   697,   699,
+     692,   380,   394,   391,   576,     2,   661,   660,     0,   666,
+       2,   479,   481,   501,     3,   509,   510,     0,     2,   505,
+       3,     3,     0,     0,   553,   220,     0,     0,     0,   220,
+       0,     3,    36,   746,   107,     0,     3,   658,    41,     3,
+      39,     3,    33,     0,     3,    99,   101,     0,     2,   649,
+     650,     0,     0,   292,     0,     0,     0,     3,   635,     0,
+       2,   621,   622,     2,   637,     2,   671,   672,     0,     0,
+       3,     0,     3,     3,     3,     3,   406,   405,   409,     2,
+       2,   745,   744,   110,     0,     0,     0,     0,     3,   459,
+       3,     0,   241,   144,     3,   293,   292,     0,     0,     0,
+       0,     2,   189,     0,   187,     0,     0,     0,     0,     0,
+       0,     0,     0,   109,     0,   544,   149,   146,   292,     0,
+       0,   265,   277,     3,     3,   543,   610,   365,     2,   695,
+     696,   292,   264,   292,     0,   512,   489,   292,     0,     0,
+     488,   503,     0,     0,     0,   214,     0,   223,   107,     0,
+       0,   114,   111,     0,     0,     0,     0,     0,     0,    22,
+       0,   652,   292,   577,   263,   721,   722,   723,     0,   674,
+     292,   292,   292,     3,     3,     0,   682,     0,     0,     0,
+       0,   292,   292,     3,   541,   466,   467,     0,     0,   244,
+     293,     0,     0,     0,     0,   292,   190,   188,     0,   185,
+     191,     0,     0,     0,     0,   195,   198,   196,   192,     0,
+     193,    34,   127,   142,   140,   242,     0,     0,   292,   413,
+     417,   416,     0,   506,     2,   507,     2,   508,   502,   292,
+     226,     0,   224,     0,   226,     3,   658,    30,   112,     2,
+      44,     2,    42,    40,    27,   110,    25,     3,   724,     3,
+       3,     3,     0,     0,   681,   683,   624,   638,   267,     2,
+     403,     3,   402,     0,   469,   466,   127,     0,     0,   127,
+       3,     0,   127,   186,     0,     2,     2,   207,   197,     0,
+       0,     0,     0,   138,   571,   611,     3,     2,     0,     0,
+       2,   227,     0,     0,   215,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   684,   685,   292,     0,   468,   150,
+       0,     0,     2,   163,   127,   152,     0,   180,     0,   127,
+       0,     2,   154,     0,     2,     0,     2,     2,     2,   194,
+      31,     0,   292,   511,   513,   504,     0,     0,     0,     0,
+     112,    37,     3,     3,   653,   625,   639,   675,   407,   127,
+     156,   159,     0,   158,   162,     3,   165,   164,     0,   127,
+     182,   127,     3,     0,   292,     0,   292,     0,     2,     0,
+       2,   137,   698,     2,   228,   229,     0,   225,   216,     0,
+       0,     0,   151,     0,     0,   161,   231,   166,     2,   233,
+     181,     0,   184,   170,   199,     3,   208,   212,   201,     3,
+       0,   292,     0,   292,     0,     0,     0,    38,    45,    43,
+     157,   160,   127,     0,   167,   292,   127,   127,     0,   171,
+       0,     0,   689,   209,   210,   211,     0,   200,     3,   202,
+       3,   292,   217,   230,   147,   168,   153,   127,   234,   183,
+     178,   176,   172,   155,   127,     0,   690,     0,     0,     0,
+       0,   148,   169,   179,   173,   177,   176,   174,     3,     3,
+       0,     0,   490,   175,   203,   205,     3,     3,   204,   206
 };
 
@@ -1524,188 +1548,192 @@
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   830,   470,   298,    45,   130,   131,   299,   300,   301,
-     302,   777,   759,  1132,  1133,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,  1040,
-     520,   986,   318,   987,   548,   964,  1065,  1501,  1067,  1068,
-    1069,  1070,  1502,  1071,  1072,  1430,  1431,  1397,  1398,  1399,
-    1483,  1484,  1488,  1489,  1519,  1520,  1073,  1359,  1074,  1075,
-    1296,  1297,  1298,  1469,  1076,   142,   970,   971,   972,  1376,
-    1450,  1461,  1462,   471,   472,   892,   893,  1048,    48,    49,
-      50,    51,    52,   342,   155,    55,    56,    57,    58,    59,
-     344,    61,    62,   259,    64,    65,   270,   346,   347,    68,
-      69,    70,    71,   115,    73,   200,   349,   116,    76,   117,
-      78,    79,    80,   451,   452,   453,   454,   693,   930,   694,
-      81,    82,   458,   714,   872,   873,   352,   353,   717,   718,
-     719,   354,   355,   356,   357,   468,   336,   132,   133,   524,
-     320,   166,   647,   648,   649,   650,   651,    83,   118,    85,
-     491,   492,   956,   493,   273,   497,   321,    86,   134,   135,
-      87,  1317,  1111,  1112,  1113,  1114,    88,    89,   735,    90,
-     269,    91,    92,   183,  1042,   681,   406,   122,    93,   503,
-     504,   505,   184,   264,   186,   187,   188,   265,    96,    97,
-      98,    99,   100,   101,   102,   191,   192,   193,   194,   195,
-     842,   607,   608,   609,   610,   196,   612,   613,   614,   573,
-     574,   575,   576,   698,   103,   616,   617,   618,   619,   620,
-     621,   929,   700,   701,   702,   597,   360,   361,   362,   363,
-     322,   161,   105,   106,   107,   365,   712,   570
+      -1,   834,   472,   299,    45,   130,   131,   300,   301,   302,
+     303,   780,   781,  1139,  1140,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,  1045,
+     522,   990,   319,   991,   551,   968,  1072,  1534,  1074,  1075,
+    1076,  1077,  1535,  1078,  1079,  1451,  1452,  1413,  1414,  1415,
+    1513,  1514,  1518,  1519,  1554,  1555,  1080,  1371,  1081,  1082,
+    1305,  1306,  1307,  1495,  1083,   142,   974,   975,   976,  1392,
+    1476,  1487,  1488,   473,   474,   896,   897,  1053,    48,    49,
+      50,    51,    52,   343,   155,    55,    56,    57,    58,    59,
+     345,    61,    62,   260,    64,    65,   271,   347,   348,    68,
+      69,    70,    71,   115,    73,   201,   350,   116,    76,   117,
+      78,    79,    80,   453,   454,   455,   456,   696,   934,   697,
+      81,    82,   460,   717,   876,   877,   353,   354,   720,   721,
+     722,   355,   356,   357,   358,   470,   337,   132,   133,   526,
+     321,   167,   650,   651,   652,   653,   654,    83,   118,    85,
+     493,   494,   960,   495,   274,   499,   322,    86,   134,   135,
+      87,  1329,  1118,  1119,  1120,  1121,    88,    89,   738,    90,
+     270,    91,    92,   184,  1047,   684,   408,   122,    93,   505,
+     506,   507,   185,   265,   187,   188,   189,   266,    96,    97,
+      98,    99,   100,   101,   102,   192,   193,   194,   195,   196,
+     846,   610,   611,   612,   613,   197,   615,   616,   617,   576,
+     577,   578,   579,   701,   103,   619,   620,   621,   622,   623,
+     624,   933,   703,   704,   705,   600,   361,   362,   363,   364,
+     323,   161,   105,   106,   107,   366,   715,   573
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1318
+#define YYPACT_NINF -1362
 static const yytype_int16 yypact[] =
 {
-    4413,  9104, -1318,    42, -1318, -1318, -1318, -1318, -1318, -1318,
-   -1318,   -27, -1318, -1318, -1318, -1318, -1318, -1318, -1318, -1318,
-   -1318, -1318, -1318, -1318, -1318,    95,    95,    95,   954,   850,
-      71,  5300,   201, -1318, -1318, -1318, -1318, -1318,   123, -1318,
-   -1318, -1318,   776,   164,  8401, -1318, -1318, -1318, -1318, -1318,
-   -1318,   226,   169, -1318,  1184, -1318, -1318, -1318, -1318,   272,
-    1531,   387,    89,  3759, -1318, -1318,  8469,  1998, -1318, -1318,
-   -1318,   935,   392,  5420,   741,  1183,   935,  1282, -1318, -1318,
-     356,   326, -1318,   935,  1429, -1318,   340, -1318,   453,   463,
-   -1318, -1318, -1318, -1318,   370,   169,    95, -1318,    95, -1318,
-   -1318, -1318, -1318,  9340,  1184, -1318, -1318,  1184, -1318,  9399,
-     389, -1318, -1318,  1617,  9458, -1318,  1087,  1087,  1087, -1318,
-   -1318, -1318,    95, -1318, -1318, -1318,   386,   435,   438, -1318,
-   -1318, -1318,   498, -1318, -1318, -1318, -1318, -1318,   510,   531,
-   -1318, -1318,    34,  7909,  1795,    48,   452,   575,   578,   583,
-     588,   593,  8673,  6319,   543,   605, -1318,  8537, -1318, -1318,
-   -1318, -1318,   652, -1318,   172,  5550, -1318,   473,   232, -1318,
-   -1318, -1318, -1318,   661,   301,   325,   403,    95,   646, -1318,
-   -1318,  1531,  2279,   739, -1318,    21, -1318,    95,    95,   169,
-   -1318, -1318,    35, -1318,    95,    95, -1318,  2781,   700,   710,
-    1087, 10200, -1318, -1318,   717,  8401, -1318, -1318,   935, -1318,
-   -1318, -1318,   169, -1318,  1184,   226, -1318,  7011, -1318,  1087,
-    1087,  1087,   169, -1318,   954, -1318,  3330, -1318, -1318,   704,
-    1087, -1318,  1087, -1318,   123,  7909,  9163,   736, -1318,   850,
-     769,  1087, -1318,   954,   737,   747, -1318,  5300,   814, -1318,
-   -1318, -1318,  2451, -1318, -1318,  3603, -1318,   739,    61,  9458,
-   10457,  1617,  2781, -1318,    68, -1318, -1318,  9399,  1184,   778,
-   11233, -1318, -1318,   428, -1318, 10968,   787,   870, 10685, 10742,
-   10799, -1318,   824, -1318, -1318, -1318, -1318, 10856, 10856,   814,
-    7591,   827, 10742,  8015, -1318, -1318, -1318, -1318, -1318, -1318,
-     874, -1318,   901,  2137, 10742, -1318,   237,   407,   632,   476,
-     638,   859,   855,   869,   890,   101, -1318, -1318,   877,   616,
-   -1318,   336, -1318, -1318,  1795, -1318, -1318,   518,   907, -1318,
-     633,   907,   892,   123, -1318, -1318,   914,  9340, -1318,   916,
-    7697, -1318, -1318,  1197,   771,  5233, 10200,   935, -1318,   935,
-    1087,  1087, -1318, -1318, -1318, -1318, -1318, -1318,  1087,  9517,
-    1184, -1318, -1318,  9576,  1658, -1318,  9222, -1318, -1318, -1318,
-   -1318, -1318, -1318, -1318,   924,  4543, 10742, -1318, -1318, -1318,
-   -1318, -1318, -1318, -1318, -1318, -1318, -1318, -1318, -1318, -1318,
-    1617, -1318,   676,   942,   945,   946,   690,   947,   948,   958,
-    2279, -1318, -1318,   952,   226,   957, -1318, -1318,   959, -1318,
-   -1318, -1318,  2451, -1318, -1318, -1318, -1318, -1318,  2781, -1318,
-    7909,  7909, -1318,  1087,  1617, 11261,  1184,  7402, -1318, -1318,
-   -1318, -1318,  2451,    61, -1318, -1318,   935,   169, -1318, -1318,
-    2451, -1318,  5128, -1318, -1318,  1087,  1087,   364,  9635,   960,
-    2086,  8865, -1318,   432,   454,   850, -1318,  9163,   955,   944,
-     850,  1087, -1318, -1318, -1318, -1318,  9936, -1318,   383,  7322,
-   -1318,   169,   962, -1318,  1617, 11043, 10514, -1318, -1318, -1318,
-   -1318,   755,  2781, -1318,  7467,   739,  6768, -1318, -1318, -1318,
-     885,   414,   877,   850, 11233,   619,  9399, -1318, 11233, -1318,
-   -1318, -1318, -1318,   479, -1318,   964,   870,   125,  7591, -1318,
-   -1318, -1318,  7591, -1318,  7803,  7591, -1318, -1318, -1318,   969,
-   -1318,   544,   972,   640,   974, -1318,  8741,  5983, -1318, -1318,
-   -1318,   103, -1318, -1318, 10571, -1318,   112, -1318, -1318, -1318,
-   -1318, -1318, -1318, -1318, -1318, -1318, -1318, 10457, 10457, -1318,
-   10742, 10742, 10742, 10742, 10742, 10742, 10742, 10742, 10742, 10742,
-   10742, 10742, 10742, 10742, 10742, 10742, 10742, 10742, 10343, 10457,
-   -1318,   616,   900, -1318, -1318,    95,    95, -1318, -1318,  7909,
-   -1318, -1318,   959,   814, -1318,   959, 10628, -1318, -1318, -1318,
-    8333,  5983,   973,  8121,   976, -1318,  9694, -1318, -1318,   652,
-   -1318,   978,   378,   980,  1782,   139,   877, -1318,    95,    95,
-     877,   166, -1318,    95,    95,   959, -1318, -1318,    95,    95,
-   -1318,   907,  9753,  1184, 11174,   137,   273,  9753, -1318,  4101,
-   -1318,   877, -1318,  9517, -1318,   278,  7119,  7119,  7119,  1184,
-   -1318,  3868,   982,   220,   924,   302,   984, -1318,   977,  5550,
-     238, -1318,  1061,  1184,  7119,   814,  1617,   814,   739,   705,
-     907, -1318, -1318,   765,   907, -1318, -1318, -1318,   870, -1318,
-     907,   169,  9936, -1318,   570,  1000,   655,  1005, -1318,  1004,
-     169, -1318, -1318,  2451,   169,  1003,   464,   465,  9812,  6431,
-    1947, 10742,  2536, -1318, -1318,  1001,    20,  1001, -1318, -1318,
-   -1318,    95,    95, -1318, -1318,   850, -1318,    95, -1318, -1318,
-    8924,   850,  1006, 10742, -1318,   955, 11174, -1318, -1318,  1017,
-   -1318, -1318, -1318,   814, -1318, 11109, 10742, -1318,  7119,   671,
-    5233, -1318, -1318,   652,  1013,  1014,   885,  2927, -1318, -1318,
-   11233, -1318, -1318,  1015, -1318, -1318,  1021, -1318,  1015,  1023,
-   10968, 10457,   243,  1002,    53,  1025,  1026,   827,  1027,  1028,
-   -1318,  1030,  1032,  8983,  6095, -1318, 10457, -1318,   640,  1104,
-   -1318, 10400, 10457,  1034, -1318, -1318,   924,   678, -1318, 10457,
-   -1318, -1318, -1318, -1318, -1318, -1318, -1318,   237,   237,   407,
-     407,   632,   632,   632,   632,   476,   476,   638,   859,   855,
-     869,   890, 10742,   716, -1318,  9936,  1038,  1041,  1042,   900,
-   -1318, -1318, -1318, -1318, -1318,  9936,   679, 10742,  7119, -1318,
-    9517, -1318,  6543,  8227,  9281,  6319, -1318, -1318, -1318,   378,
-    9936,   820,  1047,  1051,  1052,  1057,  1058,  1059,  1060, -1318,
-    3170,  1782, -1318, -1318, -1318, -1318, -1318, -1318, -1318, -1318,
-   -1318, -1318, -1318, -1318, -1318, -1318, -1318, -1318, -1318,   959,
-   -1318, -1318, -1318,   877, -1318, -1318, -1318, -1318, -1318, -1318,
-   -1318, -1318,  1063, -1318,  1064,  1065, -1318, -1318,   226,  1034,
-    3868, -1318, -1318, -1318,  4543,  1066, -1318, -1318, -1318, -1318,
-   -1318,   850,  5481,  1140, -1318, -1318, -1318, -1318,  1049,   226,
-   -1318, -1318,   959, -1318, -1318,   959,   127,   959, -1318, -1318,
-   -1318, -1318, -1318, -1318,  8605, -1318,   169, -1318,  9163, -1318,
-   -1318,  1070,   856,  1073,  1076,  1077, -1318, -1318,  2536, -1318,
-   -1318, -1318, -1318, -1318, -1318, -1318,  2086, -1318,   944, -1318,
-   -1318,  1075,  1078,  1082, -1318, -1318,  1080,  1096, -1318,   671,
-    1985, -1318,   514, -1318,  2927,   877, -1318,  1100, 11233,  9871,
-    7909,  1102, -1318, -1318,  1098,  1110,  1107, -1318, 10742,    12,
-     400,  1114, -1318,  1112,  1112,  5983, 10457, -1318, -1318,  1112,
-   -1318,  1104,  4543, -1318, -1318, -1318, -1318,  1115, 10457,  1120,
-     814,  3868, -1318, 10571, -1318,   814, -1318, 10457, -1318,   825,
-     907, -1318, -1318, -1318, -1318, -1318, -1318, -1318,   924,  7697,
-   -1318, -1318,  6655,  1125, -1318,   833,   907, -1318,   845,   852,
-     907, -1318,  1087,  4145, -1318, -1318, -1318,  9936,  9936, -1318,
-    7402,  7402, -1318,  1123,  1124,  1126,  1133, -1318,  1134,   553,
-      38,  1034, -1318,   814, -1318,  5550, -1318, 10457,   466, -1318,
-    5871,  1136,  1141,  5631,  1149,  1155,    13,    17,    14, 10457,
-    1156,   169,  3019,  1137,  1150,  1143, -1318, -1318, -1318,  1161,
-   -1318, -1318, -1318, -1318, -1318, -1318, -1318, -1318, -1318,   850,
-    1167, 10457, -1318,  9936,  9936,    95,  1169, -1318,  9045,  8803,
-     867,   907, -1318, -1318, -1318, -1318, -1318, -1318, -1318, -1318,
-   -1318,  1174,  1985, -1318, -1318,  1158, -1318,  1015, -1318, -1318,
-    1617,  1173, -1318, -1318, -1318,   686,  1175, -1318,    53,  1178,
-   10742,  1159,    53,    53,  1176, -1318,   977, 10457,  1185,  1115,
-     607,   130,  1192, -1318,  1176, -1318,  1198,  1192, -1318, -1318,
-    1199, -1318, -1318,   959,  1201,  1203,  6207,  1202,  1205,  1207,
-   -1318, -1318,  1210, -1318, -1318,   959, -1318, -1318, -1318, -1318,
-     959, 10457, 10457, 10742,  1209, -1318, -1318, -1318, -1318, -1318,
-   -1318, -1318, -1318, -1318, -1318, -1318, -1318, 10742, 10742,  1212,
-    1219,  1192, -1318, -1318,   850, -1318, -1318, -1318,  4876,  9871,
-   10457, 10457,  1262, 10457, -1318, -1318,  1213, -1318,  1214, 10457,
-    1216,  1220, 10457,   929, -1318,  1223,  5017,    95, -1318, -1318,
-    5481,  1224,   469, -1318, -1318, -1318, -1318, -1318, -1318, -1318,
-   -1318, -1318,   959, 10172, -1318,  7467,  1232, -1318, -1318,  9871,
-     478,   509, -1318,  1236,  1239,   870,  1248, -1318,   541, -1318,
-   10457,  1250,  1245, -1318, -1318,  1251,   128,   133,   814,  1253,
-    1254, -1318,  1256, -1318,  9936, -1318, -1318, -1318, -1318, -1318,
-    1258, -1318,  9936,  9936,  9936, -1318, -1318,  1260, -1318,  1263,
-    1269,  1270,   589,  7186,  7294, -1318, -1318,   351, -1318,  1273,
-    1275, -1318,  7532,   721,   742,  1272,   752,  5749, -1318, -1318,
-     545, -1318, -1318,   768,  1279,   169,  1330,  1332, -1318, -1318,
-    5631, -1318, -1318, -1318,  1285,  1286,  9936, -1318, -1318, -1318,
-    1283, -1318, -1318, -1318, -1318, -1318, -1318,  9871,   870,   206,
-   -1318,  1268,   870,  1115,   327, -1318, -1318, -1318, -1318, -1318,
-   -1318, -1318, -1318,  1284, -1318, -1318, -1318, -1318, -1318, -1318,
-    1291,  1294, -1318, -1318, -1318, -1318, -1318, -1318, -1318,  1297,
-   -1318,  1296, -1318, -1318,  5631,   124, 10457,  5631, -1318,  1299,
-   10457, -1318,   270,  1314, -1318, -1318,  1306, -1318, -1318, -1318,
-   -1318, -1318,  1184,  1617,  1301,   874,   879, 10742, -1318,   790,
-    1307, 10457,   814,   814,  1308,  1310,  1316,  1317, -1318, -1318,
-    7402,  1320, -1318,  1376, 10742,  1313, -1318, -1318, 10286, -1318,
-     791, -1318,  1300,  5631,  1305, -1318, -1318,  1323, -1318,  1341,
-    1329,  9871, -1318, -1318, -1318,   870,   814,  1334,  1327,  1325,
-   -1318,  1192,  1192, -1318, -1318, -1318, -1318, -1318,  5631,   246,
-   -1318,   917, -1318, -1318,  6877, -1318, -1318,  1335, 10457, -1318,
-   10457,  6877,   169,  9635,  1342, -1318, -1318,  1351,   874, -1318,
-     793, -1318, -1318, 10457,  1357,  1359, -1318, 10742, 10742, -1318,
-   -1318,   989,    88, -1318, -1318,  1340, -1318,   989, -1318, -1318,
-    2035,   814,   169,  9635,  1364,  1345,   814, -1318, -1318, -1318,
-   -1318, -1318, 10286,  1369,   989,  6946, 10457, 10206,  1373,   989,
-    1380,  2035,  2697, -1318, -1318, -1318, -1318, -1318,  7909, -1318,
-   -1318, -1318, 10051, -1318, 10286, -1318, -1318,  1347,  9970, -1318,
-   -1318, 10206,   169,  2697,  1383,   794, -1318, 10051, -1318, -1318,
-   -1318,  9970, -1318, -1318,   169, -1318, -1318, -1318, -1318, -1318
+    5182,  8315, -1362,    65, -1362, -1362, -1362, -1362, -1362, -1362,
+   -1362,    58, -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362,
+   -1362, -1362, -1362, -1362, -1362,    82,    82,    82,   907,   818,
+     118,  6817,   261, -1362, -1362, -1362, -1362, -1362,   194, -1362,
+   -1362, -1362,   762,   245,  3620, -1362, -1362, -1362, -1362, -1362,
+   -1362,   110,   286, -1362,   690, -1362, -1362, -1362, -1362,   307,
+    1768,   457,   101,  6932, -1362, -1362,  4184,   407, -1362, -1362,
+   -1362,  1616,   474,  5211,   816,  1213,  1616,  2188, -1362, -1362,
+     386,   368, -1362,  1616,  2312, -1362,   370, -1362,   505,   519,
+   -1362, -1362, -1362, -1362,   390,   286,    82, -1362,    82, -1362,
+   -1362, -1362, -1362,  8539,   690, -1362, -1362,   690, -1362,  9099,
+     393, -1362, -1362,  2123,  9180, -1362,   951,   951,   951, -1362,
+   -1362, -1362,    82, -1362, -1362, -1362,   455,   470,   487, -1362,
+   -1362, -1362,   492, -1362, -1362, -1362, -1362, -1362,   517,   553,
+   -1362, -1362,    76,  8285,  1659,   753,   483,   539,   586,   596,
+     599,   606,  7594,  6229,   641,   646, -1362,  8650, -1362, -1362,
+   -1362, -1362,   673, -1362,   126,  3695,  3695, -1362,   682,   235,
+   -1362, -1362, -1362, -1362,   693,   419,   442,   449,    82,   685,
+   -1362, -1362,  1768,  2932,   768, -1362,    90, -1362,    82,    82,
+     286, -1362, -1362,   121, -1362,    82,    82, -1362,  3090,   696,
+     779,   951,  6612, -1362, -1362,   728,  3620, -1362, -1362,  1616,
+   -1362, -1362, -1362,   286, -1362,   690,   110, -1362,  7263, -1362,
+     951,   951,   951,   286, -1362,   907, -1362,  5761, -1362, -1362,
+     745,   951, -1362,   951, -1362,   194,  8285,  8427,   777, -1362,
+     818,   866,   951, -1362,   907,   775,   789, -1362,  6817,   874,
+   -1362, -1362, -1362,  5519, -1362, -1362,  6022, -1362,   768,   173,
+    9180, 10174,  2123,  3090, -1362,   265, -1362, -1362,  9099,   690,
+     879,  6376, -1362, -1362,   507, -1362, 10523,   887,   920,  3349,
+   10328, 10347, -1362,   895, -1362, -1362, -1362, -1362, 10405, 10405,
+     874,  7949,   897, 10328,  8397, -1362, -1362, -1362, -1362, -1362,
+   -1362,   930, -1362,   797,  2723, 10328, -1362,   688,   806,   843,
+     301,   862,   899,   893,   906,   932,    20, -1362, -1362,   934,
+     593, -1362,   402, -1362, -1362,  1659, -1362, -1362,   610,   919,
+   -1362,   621,   919,   946,   194, -1362, -1362,   962,  8539, -1362,
+     961,  8061, -1362, -1362,  1747,  1347,  7675,  6612,  1616, -1362,
+    1616,   951,   951, -1362, -1362, -1362, -1362, -1362, -1362,   951,
+    9209,   690, -1362, -1362,  9247,  1940, -1362,  9032, -1362, -1362,
+   -1362, -1362, -1362, -1362, -1362,   966,  4295, 10328, -1362, -1362,
+   -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362,
+   -1362, -1362,  2123, -1362,   446,   964,   972,   978,   719,   979,
+     987,   990,  2932, -1362, -1362,   994,   110,   992, -1362, -1362,
+     995, -1362, -1362, -1362,  5519, -1362, -1362, -1362, -1362, -1362,
+    3090, -1362,  8285,  8285, -1362,   951,  2123,  6731,   690,  7745,
+   -1362, -1362, -1362, -1362,  5519,   173, -1362, -1362,  1616,   286,
+   -1362, -1362,  5519, -1362,  6258, -1362, -1362,   951,   951,   484,
+    9317,   998,  1130,  4716, -1362,   459,   467,   818, -1362,  8427,
+     991,   980,   818,   951, -1362, -1362, -1362, -1362,  9608, -1362,
+     567,  6494, -1362,   286,   999, -1362,  2123, 10603, 10193, -1362,
+   -1362, -1362, -1362,   793,  3090, -1362,  7815,   768,  6702, -1362,
+   -1362, -1362,   842,   625,   934,   818,  6376,   494,  9099, -1362,
+    6376, -1362, -1362, -1362, -1362,   636, -1362,  1005,   920,   328,
+    7949, -1362, -1362, -1362,  7949, -1362,  8173,  7949, -1362, -1362,
+   -1362,  1004, -1362,   644,  1013,   617,  1014, -1362,  8787,  5845,
+   -1362, -1362, -1362,    93, -1362, -1362, 10251, -1362,   164, 10251,
+   -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362,
+   10174, 10174, -1362, 10328, 10328, 10328, 10328, 10328, 10328, 10328,
+   10328, 10328, 10328, 10328, 10328, 10328, 10328, 10328, 10328, 10328,
+   10328,  4995, 10174, -1362,   593,  1220, -1362, -1362,    82,    82,
+   -1362, -1362,  8285, -1362, -1362,   995,   874, -1362,   995, 10270,
+   -1362, -1362, -1362,  5874,  5845,  1015,  8509,  1017, -1362,  9355,
+   -1362, -1362,   673, -1362,  1019,   506,  1020,  2624,   288,   934,
+   -1362,    82,    82,   934,   294, -1362,    82,    82,   995, -1362,
+   -1362,    82,    82, -1362,   919,  9384,   690, 10744,   254,   525,
+    9384, -1362,  6140, -1362,   934, -1362,  9209, -1362,   255,  7377,
+    7377,  7377,   690, -1362, 10097,  1009,   565,   966,   409,  1022,
+   -1362,  1018,  3695,   612, -1362,  1103,   690,  7377,   874,  2123,
+     874,   768,   628,   919, -1362, -1362,   744,   919, -1362, -1362,
+   -1362,   920, -1362,   919,   286,  9608, -1362,   659,  1026,   668,
+    1031, -1362,  1032,   286, -1362, -1362,  5519,   286,  1029,   497,
+     511,  9465,  6347,  1465, 10328,  2769, -1362, -1362,  1039,    94,
+    1039, -1362, -1362, -1362,    82,    82, -1362, -1362,   818, -1362,
+      82, -1362, -1362,  8924,   818,  1033, 10328, -1362,   991, 10744,
+   -1362, -1362,  1048, -1362, -1362, -1362,   874, -1362, 10674, 10328,
+   -1362,  7377,   639,  7675, -1362, -1362,   673,  1034,  1044,   842,
+    1987, -1362, -1362,  6376, -1362, -1362,  1045, -1362, -1362,  1051,
+   -1362,  1045,  1054, 10523, 10174,   142,  1040,    53,  1055,  1056,
+     897,  1057,  1061, -1362,  1063,  1066,  8203,  5993, -1362, 10174,
+   -1362,   617,  1650, -1362, 10116, 10174,  1062, -1362, -1362,   966,
+     676, -1362, 10174, -1362, -1362,   901, -1362, -1362, -1362, -1362,
+   -1362,   688,   688,   806,   806,   843,   843,   843,   843,   301,
+     301,   862,   899,   893,   906,   932, 10328,   912, -1362,  9608,
+    1069,  1070,  1075,  1220, -1362, -1362, -1362, -1362, -1362,  9608,
+     680, 10328,  7377, -1362,  9209, -1362,  6465,  8621,  9070,  6229,
+   -1362, -1362, -1362,   506,  9608,   832,  1076,  1078,  1079,  1080,
+    1082,  1083,  1088, -1362,  3884,  2624, -1362, -1362, -1362, -1362,
+   -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362,
+   -1362, -1362, -1362,   995, -1362, -1362, -1362,   934, -1362, -1362,
+   -1362, -1362, -1362, -1362, -1362, -1362,  1089, -1362,  1099,  1101,
+   -1362, -1362,   110,  1062, 10097, -1362, -1362, -1362,  4295,  1100,
+   -1362, -1362, -1362, -1362, -1362,   818,  5597,  1173, -1362, -1362,
+   -1362, -1362,  1085,   110, -1362, -1362,   995, -1362, -1362,   995,
+      28,   995, -1362, -1362, -1362, -1362, -1362, -1362,  8758, -1362,
+     286, -1362,  8427, -1362, -1362,  1108,   913,  1111,  1112,  1120,
+   -1362, -1362,  2769, -1362, -1362, -1362, -1362, -1362, -1362, -1362,
+    1130, -1362,   980, -1362, -1362,  1116,  1128,  1124, -1362, -1362,
+    1132,  1133, -1362,   639,  1695, -1362,   589, -1362,  1987,   934,
+   -1362,  1138,  6376,  9494,  8285,  1140, -1362, -1362,  1137,  1144,
+    1147, -1362, 10328,   146,   128,  1150, -1362,  1153,  1153,  5845,
+   10174, -1362, -1362,  1153, -1362,  1650,  4295, -1362, -1362, -1362,
+   -1362,  1152, 10174,  1158,   874, 10097, -1362, 10251, -1362,   874,
+   -1362, -1362, 10174, -1362,   826,   919, -1362, -1362, -1362, -1362,
+   -1362, -1362, -1362,   966,  8061, -1362, -1362,  6583,  1161, -1362,
+     841,   919, -1362,   865,   883,   919, -1362,   951,  4042, -1362,
+   -1362, -1362,  9608,  9608, -1362,  7745,  7745, -1362,  1156,  1157,
+    1168,  1169, -1362,  1174,   677,   212,  1062, -1362,   874, -1362,
+    3695, -1362, 10174,   515, -1362,  5727,  1176,  1179,  9970,  1180,
+    1184,    11,    62,    64, 10174,  1185,   286, 10174, 10174,  1183,
+     535,  1182,  1164, -1362, -1362, -1362,  1187, -1362, -1362, -1362,
+   -1362, -1362, -1362, -1362, -1362, -1362,   818,  1190, 10174, -1362,
+    9608,  9608,    82,  1194, -1362,  8962,  8895,   888,   919, -1362,
+   -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362,  1195,  1695,
+   -1362, -1362,  1186, -1362,  1045, -1362, -1362,  2123,  1196, -1362,
+   -1362, -1362,   684,  1203, -1362,    53,  1197, 10328,  1188,    53,
+      53,  1205, -1362,  1018, 10174,  1207,  1152,   337,   130,  1206,
+   -1362,  1205, -1362,  1214,  1206, -1362, -1362,  1217, -1362, -1362,
+     995,  1218,  1222,  6111,  1221,  1223,  1225, -1362, -1362,  1224,
+   -1362, -1362,   995, -1362, -1362, -1362, -1362,   995, 10174, 10174,
+   10328,  1226, -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362,
+   -1362, -1362, -1362, -1362, 10328, 10328,  1232,  1234,  1206, -1362,
+   -1362,   818, -1362, -1362, -1362,  7193,  9494, 10174, 10174,  1283,
+   10174, -1362, -1362,  1215, -1362,  1219, 10174,  1233,  1242, 10174,
+     900,  1243,    37,  8091,  1006,    82, -1362, -1362,  5597,  1239,
+     523, -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362,
+     995, 10093, -1362,  7815,  1256, -1362, -1362,  9494,   540,   555,
+   -1362,  1263,  1262,   920,  1270, -1362,   354, -1362, 10174,  1271,
+    1269, -1362, -1362,  1273,   206,   262,   874,  1274,  1275, -1362,
+    1276, -1362,  9608, -1362, -1362, -1362, -1362, -1362,  1277, -1362,
+    9608,  9608,  9608, -1362, -1362,  1279, -1362,  1282,  1286,  1287,
+     702,  7447,  7561, -1362, -1362,   388, -1362,  1291,  1292, -1362,
+    7885,   700,   705,  1296,   731,  5363, -1362, -1362,   575, -1362,
+   -1362,   741,  1297,  1299,   286,  1349,   974, -1362, -1362, 10174,
+   -1362, 10251,  9970, -1362, -1362, -1362,  1303,  1304,  9608, -1362,
+   -1362, -1362,  1312, -1362, -1362, -1362, -1362, -1362, -1362,  9494,
+     920,   263, -1362,  1293,   920,  1152,   273, -1362, -1362, -1362,
+   -1362, -1362, -1362, -1362, -1362,  1301, -1362, -1362, -1362, -1362,
+   -1362, -1362,  1316,  1317, -1362, -1362, -1362, -1362, -1362, -1362,
+   -1362,  1322, -1362,  1329, -1362, -1362,  9970,   107, 10174,  9970,
+   -1362,  1332, 10174, -1362,   151,  1351,  1355, -1362, -1362,  1334,
+    1335,  1320,   924, -1362, -1362, -1362, -1362, -1362,   690,  2123,
+    1338,   930,   937, 10328, -1362,   742,  1343, 10174,   874,   874,
+    1352,  1353,  1354,  1357, -1362, -1362,  7745,  1341, -1362,  1417,
+   10328,  1344, -1362, -1362,  9884, -1362,   785, -1362,  1333,  9970,
+    1340, -1362, -1362,  1363, -1362,  1364, -1362,  1379,  1382, -1362,
+    1350,  1371,  9494, -1362, -1362, -1362,   920,   874,  1374,  1365,
+    1370, -1362,  1206,  1206, -1362, -1362, -1362, -1362, -1362,  9970,
+     258, -1362,   941, -1362, -1362,  7047, -1362, -1362,  1367, 10174,
+   -1362, 10174,  7047,   286,  9317,   286,  9317,  1392, -1362,  1396,
+   -1362, -1362, -1362,  1393,   930, -1362,   803, -1362, -1362, 10174,
+    1397,  1398, -1362, 10328, 10328, -1362, -1362,  1016,    97, -1362,
+   -1362,  1383, -1362,  1016, -1362, -1362,  2377,   874, -1362, -1362,
+     286,  9317,   286,  9317,  1405,  1384,   874, -1362, -1362, -1362,
+   -1362, -1362,  9884,  1402,  1016,  7122, 10174,  9798,  1406,  1016,
+    1412,  2377,  2919, -1362, -1362, -1362,  1413, -1362, -1362, -1362,
+   -1362,  8285, -1362, -1362, -1362,  9705, -1362,  9884, -1362, -1362,
+    1400,  9612, -1362, -1362,  9798,   286,  2919,   286,  1414,  1419,
+     807, -1362,  9705, -1362, -1362, -1362,  9612, -1362, -1362, -1362,
+     286,   286, -1362, -1362, -1362, -1362, -1362, -1362, -1362, -1362
 };
 
@@ -1713,28 +1741,28 @@
 static const yytype_int16 yypgoto[] =
 {
-   -1318,  3762,  2543, -1318,  1454, -1318,    -1,     2,   -89, -1318,
-   -1318, -1318,  -483,  -942,  -282,  4006, -1318,  1670,   483,   485,
-     347,   484,   927,   931,   926,   932,   937, -1318,   792,  -594,
-    4587,   375,  -691,  -946, -1318,  -112,  -722,  -695, -1318,   412,
-   -1318,   304, -1184, -1318, -1318,    54, -1318, -1317,  -763,   149,
-   -1318, -1318, -1318, -1318,    -3, -1151, -1318, -1318, -1318, -1318,
-   -1318, -1318,   223,    51,    55, -1318,  -364, -1318,   402,   204,
-   -1318,    86, -1318,  -320, -1318, -1318, -1318,   450,  -745, -1318,
-   -1318,    10,  -865,   258,   180, -1318, -1318, -1318,  -222, -1318,
-     126,    49,  -187,   951,  3574, -1318, -1318,   213,   151,   363,
-    -251,  2053, -1318,  1304, -1318, -1318,   344,  1615, -1318,  1898,
-    1496, -1318, -1318,  -417,  -439,  1083,  1084,   597,   837,   279,
-   -1318, -1318,  1086,   598,   -23, -1318,    37,  -463,   807, -1318,
-   -1318,  -923,  -977,   142,   669,   965,   280, -1318,   175,   -35,
-    -257,  -199,  -156,   555,   651, -1318,   888, -1318,  1925,  1031,
-    -460,   803, -1318, -1318,   594, -1318,  -228, -1318,   140, -1318,
-   -1318, -1318, -1268,   320, -1318, -1318, -1318,  1067, -1318,     6,
-   -1318, -1318,  -851,   -86, -1303,  -124,  2887, -1318,  2837, -1318,
-     812, -1318,  -168,   585,  -176,  -173,  -171,     4,   -41,   -39,
-     -36,   834,    47,    56,    79,  -167,  -162,  -161,  -159,  -158,
-    -273,  -557,  -498,  -458,  -543,  -318,  -539, -1318, -1318,  -499,
-     986,   992,   993,  1485,  4182,  -565,  -577,  -550,  -542,  -536,
-   -1318,  -384,  -672,  -658,  -654,  -591,  -211,  -316, -1318, -1318,
-     152,   299,   -75, -1318,  2880,   592,  -631,  -200
+   -1362,  3493,  1093, -1362,  1502, -1362,    -1,     2,   435, -1362,
+     458,  -522,  -509,  -926,  -270,  4585, -1362,  1298,   508,   516,
+     480,   518,   965,   977,   985,   963,   975, -1362,   450,  -552,
+    3932,  -889,  -691,  -949, -1362,   269,  -657,  -346, -1362,  1391,
+   -1362,   339, -1080, -1362, -1362,    75, -1362, -1321,  -831,   188,
+   -1362, -1362, -1362, -1362,     7, -1083, -1362, -1362, -1362, -1362,
+   -1362, -1362,   268, -1220,    39, -1362,  -255, -1362,   439,   242,
+   -1362,   117, -1362,  -360, -1362, -1362, -1362,   498,  -843, -1362,
+   -1362,    12, -1020,    26,  1825, -1362, -1362, -1362,  -118, -1362,
+     513,    86,  -185,   665,  2995, -1362, -1362,    55,   143,   302,
+    -254,  1799, -1362,  1348, -1362, -1362,   259,  1704, -1362,  2086,
+    1311, -1362, -1362,  -430,  -428,  1135,  1143,   640,   890,   313,
+   -1362, -1362,  1126,   652,  -484, -1362,  -469,  -299,   976, -1362,
+   -1362,  -931,  -975,  -226,  1098,  1011,    22, -1362,   189,   264,
+     -13,  -195,  -156,   609,   711, -1362,   947, -1362,  2242,   541,
+    -458,   859, -1362, -1362,   647, -1362,  -235, -1362,    24, -1362,
+   -1362, -1362, -1279,   371, -1362, -1362, -1362,  1122, -1362,    46,
+   -1362, -1362,  -859,  -108, -1361,   -83,  2954, -1362,  2772, -1362,
+     858, -1362,  -175,   138,  -168,  -167,  -163,     3,   -38,   -31,
+     -30,   910,    25,    70,    79,  -147,  -162,  -159,  -152,  -151,
+    -287,  -573,  -525,  -485,  -559,  -293,  -488, -1362, -1362,  -496,
+    1038,  1041,  1042,  2149,  4025,  -548,  -554,  -520,  -498,  -453,
+   -1362,  -411,  -687,  -675,  -653,  -597,  -296,  -300, -1362, -1362,
+     829,    71,   -28, -1362,  3030,   124,  -627,  -190
 };
 
@@ -1742,748 +1770,701 @@
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -511
+#define YYTABLE_NINF -520
 static const yytype_int16 yytable[] =
 {
-     110,   146,    46,   147,    95,   393,   148,   447,   394,   378,
-     395,   111,   704,   422,   401,   402,   434,   885,   923,   396,
-     397,   731,   398,   399,   500,   836,   611,   263,   256,   965,
-     473,   861,   924,    46,   743,    95,   925,   140,   748,   844,
-     710,  1078,  1129,   630,    46,   832,    46,   634,   158,  1374,
-     113,   778,   837,  1137,  1171,    47,    46,    30,    30,   404,
-     838,   843,    46,   835,   189,    46,   699,   212,    46,   847,
-     222,   606,    30,   810,   120,   854,   215,   338,   108,   108,
-     984,  1436,   108,   276,   941,   393,    47,   530,   394,   149,
-     395,  1432,   671,   156,   401,   402,   923,   927,   150,   396,
-     397,  1181,   398,   399,   833,    30,    46,  1169,  1170,    46,
-     924,   419,   680,  1120,   925,    46,   198,   119,   403,   940,
-     684,   151,   248,   405,   405,  1199,    60,  1177,   286,   598,
-    -225,  -225,    30,   477,   479,   277,   413,  1195,   405,   770,
-     146,  1197,   147,  1447,   834,   148,    46,  1077,   158,   248,
-     325,    67,   254,  1178,    46,  1432,   968,    60,   156,    46,
-     199,   368,   478,   675,   677,  1436,  1394,  1395,   108,   483,
-    1436,   405,   139,   875,   875,   875,    30,   108,   521,   832,
-      54,    54,    67,    46,    46,  1187,   158,  1436,   507,   567,
-     473,   875,   319,   108,  1436,  -225,   160,  1066,   108,    46,
-     530,   335,   530,    30,   138,   669,   774,    46,  1246,   158,
-     473,    54,   141,    66,   208,   780,    46,   738,   473,    46,
-     146,   437,   147,   568,   143,   148,   731,   753,   149,  1085,
-    1396,  1327,   666,   667,   754,  1247,  1329,   150,   833,   747,
-     845,   864,   603,    54,    66,   865,    54,   467,  1171,    46,
-     424,    95,   836,   465,   428,   237,   240,   761,    53,   112,
-     151,   160,   589,    46,    46,   875,   158,   852,   152,   603,
-      46,   704,   832,   732,   821,   167,  1026,    46,   834,   837,
-     372,   530,   695,   697,   319,   450,   611,   838,   518,    53,
-    1013,   338,   741,  -455,  1323,   847,   373,  1171,  1025,   104,
-     104,   731,    47,  1508,   658,  1186,  1139,  1377,   674,   676,
-    1002,   887,  1394,  1395,   666,   667,   428,   870,   530,   490,
-    1517,   206,   814,  -455,   216,  -455,    46,  1521,   368,  -455,
-     104,   833,   673,   343,   173,  1457,  1509,  1201,   678,   523,
-     381,   888,   156,   645,    74,    46,    46,   889,   550,   165,
-    1169,  1170,   966,   551,   552,   875,   382,   429,  1192,  1078,
-    1522,  1178,    46,   916,   441,   104,    46,   108,   436,   136,
-     137,   834,   836,    60,  1119,    74,  1405,   866,   474,   478,
-     177,   867,   598,   462,   257,   844,   588,   258,   455,   595,
-     197,   108,    46,   136,   137,  -281,   521,    54,    67,   837,
-     521,   569,    46,   521,   368,   881,   848,   838,   628,   384,
-     851,   598,   632,  1171,   459,   335,   598,   752,   861,   429,
-      46,   108,  1187,   136,   234,   385,    46,    54,    46,  -109,
-     225,   868,   239,   386,   226,   871,  1381,   230,   578,   232,
-    1421,  1422,   525,    36,   579,   160,   241,    39,   243,   387,
-    -109,   338,    46,   246,    40,    41,   803,   235,  -109,  -109,
-      66,   473,   236,  -506,   169,  1077,   685,  1427,   110,   319,
-     319,   248,   579,   755,  -109,   435,    46,   756,   732,   829,
-     762,   603,  1157,  1159,    46,   722,   368,   -10,    46,   604,
-      95,   723,    46,   886,   433,  1242,   208,   450,  1107,   500,
-     450,  1088,  1121,   945,  1007,    53,   450,   249,   821,  1122,
-    1135,   388,   260,   758,   393,  1066,   739,   394,   113,   395,
-     553,   554,   740,   611,   401,   402,  1236,   389,   396,   397,
-     775,   398,   399,   758,   899,   781,  -431,  1026,   474,  -432,
-     705,    47,  1360,   490,  1093,   319,   104,   490,   485,   495,
-     646,   496,   699,   732,   326,   502,   706,   523,   474,   557,
-     558,   523,   707,   319,   523,  1358,   474,  1168,  1024,  1187,
-     897,   225,   705,   707,  1184,   335,  1187,  1184,   708,   906,
-     379,   749,   467,  1275,  1276,    94,  1312,   750,   919,   920,
-    1185,    74,    46,  1303,   559,   560,    74,  1093,   821,   272,
-     455,   411,  1313,   455,    46,  1367,    46,   343,   720,   455,
-     729,   274,    60,   338,   876,   877,    94,  1314,   866,   580,
-    1187,   405,  1103,   173,   431,    46,   208,   145,   319,    94,
-     709,   895,   275,  1315,   439,   459,   163,    67,  1404,   819,
-     631,    46,   595,  1321,   635,   185,   765,   366,    94,   704,
-    1322,    94,   766,   766,   896,    46,   898,  -102,    46,  1393,
-     525,  -102,  1401,  1029,   525,   969,    54,   525,   742,  1361,
-     746,   860,   910,   874,   874,   874,   595,   327,   766,  1037,
-     328,  1024,   869,   731,   108,   329,   136,   137,   338,  1463,
-     330,   874,    46,  1346,    46,   331,  1463,  1347,  1482,    66,
-    1082,   163,   522,  1435,  1487,   948,   367,   343,  1439,  -109,
-     225,  -109,   230,   555,   556,  -109,  1465,   571,  1466,   405,
-     744,  1504,   944,   561,   562,   745,  1511,   572,  1044,    94,
-    -109,  -109,  1115,  1456,   583,   323,   405,   335,    46,    46,
-    1505,   768,    94,   405,    53,     2,   202,     4,     5,     6,
-       7,   769,    46,   371,  1234,  1104,    74,   912,  1238,   450,
-     666,   667,   383,   766,  1506,   874,   392,   185,   695,   697,
-     391,   343,   949,   821,   603,   436,    74,   248,   325,   405,
-     992,  1004,   950,  1417,    74,   104,   993,   723,  1232,   490,
-      94,   413,   662,   405,   579,  1005,   403,   430,   598,   225,
-    1429,   420,    94,    34,   823,    35,   900,  1516,   405,   474,
-    1349,   421,   335,  1516,   720,   729,   343,   343,   343,   923,
-     882,   426,  1516,  1354,   766,   997,  1516,   323,   444,   766,
-      74,    46,    94,   924,   343,  1161,    36,   925,   179,   180,
-      39,    36,   457,    46,  1355,    39,   481,    40,    41,   682,
-     766,   474,    40,    41,  1357,   874,   483,   325,   405,   430,
-     766,   463,   455,  1480,  1429,    -3,   903,   208,   405,  1006,
-    1362,   464,   602,   819,   603,   460,   766,    42,   159,   108,
-     935,   208,   604,   724,   486,   163,   938,   144,   506,  1182,
-     729,  1064,  1418,  1437,   190,  1475,  1525,   213,  1415,   766,
-     223,  1476,   579,   863,   791,   792,   793,   794,   343,    94,
-       8,     9,    10,    11,    12,   108,    46,   136,   137,   878,
-     522,   845,   325,   603,   522,   514,  1141,   522,   405,   605,
-      46,   526,   600,   894,  1153,   732,   405,    30,    46,     2,
-     202,     4,     5,     6,     7,   286,  1156,   720,   603,   530,
-      36,    63,   114,  1158,    39,   603,    46,   720,   325,   405,
-      33,    40,    41,   819,  1328,  1330,  1331,   450,  1220,  1108,
-     405,   563,   720,   208,   931,   564,   931,   566,   159,   531,
-     532,   533,    63,  1294,  1295,   185,   736,  1415,  1416,  1131,
-     565,   369,   758,  -428,  1131,   157,   737,    34,   343,    35,
-     569,   571,   534,   405,   535,   343,   536,   490,  1110,   319,
-     334,   572,   323,   323,   732,   587,   159,   217,    60,   126,
-     590,   127,   128,   129,  1227,  1458,  1459,    74,   640,   969,
-     502,  1394,  1395,   969,   969,   696,   787,   788,   823,   159,
-     789,   790,  1131,    67,   659,   795,   796,   660,   661,   663,
-     664,   438,  1064,   668,   255,  1196,  1198,  1200,   860,   646,
-     665,   670,   253,   711,   688,   751,  1049,   713,  -229,    74,
-     455,    94,    54,   763,   767,   605,   771,   824,  1283,  1284,
-     826,  1286,   828,   908,   839,   884,  1494,  1290,   323,   891,
-    1293,   -12,   915,   883,   211,   324,   917,     8,     9,    10,
-      11,    12,   911,   255,   345,    66,   323,   913,   914,   918,
-     691,   238,    46,   939,     8,     9,    10,    11,    12,  -405,
-    -510,   953,   960,   740,    30,   962,   967,   973,   974,  1093,
-     977,   338,   978,   400,   979,   721,   976,   450,   819,    54,
-     999,    30,   988,  1000,  1001,   211,  1319,    33,   418,  1015,
-      53,   423,   425,  1016,  1017,   343,   157,   646,   369,  1018,
-    1019,  1020,  1021,   436,    33,  1032,  -393,  -392,  1079,   720,
-     720,   323,  1081,  1046,  1089,  1090,   474,   442,  1091,  1092,
-    1097,   445,  1096,   446,  1099,   600,  -282,   831,   211,   605,
-    1098,   104,   461,     8,     9,    10,    11,    12,    63,   215,
-    1100,    67,  1106,   475,  1116,   768,   766,   405,    46,  1064,
-     343,   343,  1117,   482,   862,   769,  1118,  1109,   982,   600,
-      30,   425,  1123,  1127,  1130,   720,   720,  1151,  1174,  1375,
-      54,  1172,  1173,  1375,   369,  1175,    74,  1190,  1176,  1108,
-     455,  1206,  1191,    33,  1400,  1131,  1131,  1131,   211,    36,
-    1193,   170,   171,    39,  1049,   335,  1194,  1202,   104,  1207,
-      40,    41,    36,  1189,   170,   171,    39,  1208,    -3,  1213,
-    1515,  1218,   729,    40,    41,   922,  1224,   696,  1110,   495,
-    1228,  1233,  1235,  1237,  1240,  -283,   211,  1413,   255,  1244,
-     211,   596,     8,     9,    10,    11,    12,   624,   367,  1064,
-    1248,  1253,  1251,  1255,    72,  1256,  1257,  1285,    53,  1258,
-     629,  1259,  1261,  1268,   629,   393,  1277,   255,   394,    30,
-     395,   831,   605,  1278,   401,   402,  1448,  1108,  1087,   396,
-     397,  1302,   398,   399,  1310,    72,    60,  1288,  1289,   208,
-    1291,   721,    33,  1316,  1292,   666,   667,  1299,  1318,   104,
-    1320,   729,  1325,  1064,  1324,  1326,  1064,  1332,  1333,  1281,
-    1334,    67,  1336,   475,  1342,  1308,  1110,  1343,    54,    54,
-     218,  1344,  1345,  1356,    46,    46,   211,  1352,   345,  1353,
-    1363,  1131,  1131,   475,  1493,  1295,  1366,  1368,  1369,  1371,
-      54,   475,  1378,  1381,    74,  1388,   720,  1064,  1389,  -394,
-    1392,  1403,  1064,  1407,   720,   720,   720,  1409,  1414,    54,
-    1423,  1419,  1424,   474,   831,  1449,  1428,   716,  1425,  1426,
-     425,  1108,  1433,    66,  1438,  1442,   605,  1064,  1347,  1440,
-    1444,  1446,  -284,   436,  1453,   730,  1451,    63,    67,     8,
-       9,    10,    11,    12,  1472,   425,   206,   216,   720,   425,
-     146,  1452,   147,   343,   343,   148,   211,   348,  1474,  1464,
-    1110,  1478,    54,  1479,  1486,  1498,    30,    54,    53,  1499,
-    1495,  1518,    46,  1203,   721,  1500,  1503,   255,   345,   909,
-    1510,  1064,  1512,   926,   721,  1524,  1064,  1109,   104,    33,
-     797,   799,  1470,    46,    46,   798,   158,    54,   800,   721,
-    1189,  1064,  1243,  1064,   801,   926,   211,  1064,   172,   104,
-    1064,  1406,  1481,   696,  1301,    46,  1064,   368,  1526,  1365,
-    1064,   696,  1470,   809,  1497,  1239,  1379,  1467,   104,  1212,
-     443,   686,   687,  1094,   932,  1045,  1095,  1126,   890,   605,
-     435,   629,   822,   955,   596,    53,   715,   319,   816,  1311,
-    1105,    72,   323,   734,    74,   841,    72,   806,   172,   210,
-     474,   172,   963,   807,   808,     0,     0,   474,     0,     0,
-     343,     0,     0,   596,     0,  1109,     0,     0,   596,     0,
-       0,     0,     0,     0,   629,    67,   104,   345,   345,   345,
-       0,    54,    67,     0,   996,  1471,    36,     0,   179,   180,
-      39,   862,     0,     0,     0,   345,   172,    40,    41,     0,
-     210,   474,   998,     0,    54,    75,   104,     0,     0,     0,
-       0,    54,  1003,   716,     0,  1471,     0,   211,     0,     0,
-       0,    74,   181,     0,   475,     0,    67,  1014,     0,   255,
-     730,     0,   182,   928,     0,     0,    75,  1189,     0,     0,
-     218,     0,  1412,   210,  1189,   211,     0,     0,     0,     0,
-     211,     0,     0,     0,     0,    54,     0,     0,   172,  1109,
-     407,     0,  1039,     0,     0,     0,   475,   415,     0,   345,
-       0,   219,    36,     0,   179,   180,    39,     0,   954,     0,
-       0,   425,    53,    40,    41,     0,   721,   721,  1189,    53,
-       0,     0,     0,     0,     0,     0,     0,  1364,     0,     0,
-     104,     0,     0,   210,   255,   730,    72,     0,   261,     0,
-     981,     0,   172,    36,     0,   170,   171,    39,   262,   172,
-       0,   348,     0,   104,    40,    41,    72,     0,     0,     0,
-     104,     0,     0,    53,    72,     0,     0,   211,     0,   407,
-       0,   210,   721,   721,     0,   210,   716,     0,     0,   371,
-     926,   211,     0,     0,     0,     0,   716,     0,   350,   345,
-     348,   629,     0,     0,  1012,   629,   822,     0,    74,     0,
-       0,   716,     0,     0,   104,    74,     0,     0,   348,  1138,
-      72,  1023,     8,     9,    10,    11,    12,   172,     0,     0,
-       0,     0,     0,     0,   577,     8,     9,    10,    11,    12,
-       0,     0,   581,     0,   172,   584,     0,     0,   172,    30,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    74,
-       0,   348,    30,     0,  1166,  1167,     0,     0,     0,  1039,
-       0,   210,    33,    63,     0,     0,     0,    36,     0,   179,
-     180,    39,     0,   211,  1468,    33,     0,     0,    40,    41,
-      36,     0,    75,     0,    39,   629,     0,    75,     0,     0,
-       0,    40,    41,     0,     0,     0,     0,   407,     0,     0,
-     172,   415,     0,   602,  1496,   603,     0,     0,     0,     0,
-    1215,  1216,  1309,   604,     0,   348,    42,     0,    77,     0,
-       0,  1102,     0,     0,     0,     0,   144,     0,     0,   425,
-     114,     0,   926,     0,     0,     0,     0,     0,     0,     0,
-       0,   210,     0,   721,  1523,    84,   345,     0,     0,    77,
-       0,   721,   721,   721,     0,     0,  1528,     0,     0,     0,
-     348,   348,   348,     0,     0,     0,     0,     0,     0,   511,
-       0,     0,     0,     0,     0,     0,    84,     0,   348,     0,
-     596,   219,   528,   529,   220,     0,   407,     0,     0,   926,
-     926,   210,     0,   423,   549,   721,   348,     0,   716,   716,
-       0,   345,   345,     0,     0,     0,     0,    72,     0,     0,
-       0,   221,     0,   348,     0,     8,     9,    10,    11,    12,
-       0,  1188,     2,   202,     4,     5,     6,     7,     0,     0,
-     529,     0,    36,     0,   179,   180,    39,     0,     0,     0,
-       0,     0,    30,    40,    41,     0,     0,    75,     0,    72,
-     224,     0,   348,     0,   716,   716,     0,     0,     0,     0,
-     629,     0,   350,   211,   172,    33,   529,    75,   690,     0,
-     405,   351,     0,     0,     0,    75,   577,   577,   692,     0,
-      34,  1335,    35,     0,     0,     0,     0,     0,   348,  1337,
-    1338,  1339,     0,     0,     0,     0,   481,   172,   358,     0,
-       0,   350,     0,     0,     0,     0,   949,     0,   603,     0,
-     323,     0,   210,   172,     0,     0,   950,   730,     0,   350,
-      36,    75,   179,   180,    39,     0,     0,   172,     0,   348,
-       0,    40,    41,  1370,     0,     0,   209,     0,     0,   348,
-     210,     0,   348,     0,     0,   210,   228,   218,     0,   348,
-       0,     0,     0,     0,   348,     0,  1491,     0,   405,     0,
-    1282,     0,   350,     0,   901,    77,  1492,     0,   904,     0,
-      77,    36,     0,   179,   180,    39,     0,   255,     0,     0,
-       0,    63,    40,    41,     0,     0,     0,   209,     0,   926,
-       0,     0,    84,     0,   716,     0,   730,    84,     0,     0,
-     114,   407,     0,     0,     0,     0,   926,   690,     0,   405,
-       0,     0,     0,     0,     0,   691,    72,   692,     0,     0,
-       0,     0,     0,     0,   172,   716,   350,     0,     0,     0,
-     209,     0,   210,   716,   716,   716,     0,     0,     0,   211,
-     784,   785,   786,     0,   345,   345,   210,   537,   538,   539,
-     540,   541,   542,   543,   544,   545,   546,     0,  1188,     0,
-       0,     0,     0,     0,   220,     0,     0,     0,     0,   926,
-     926,   350,   350,   350,     0,     0,     0,   716,     0,     0,
-     547,     0,     0,   529,     0,     0,     0,     0,   114,   350,
-     209,   221,     0,     0,     0,     0,     0,     0,     0,   348,
-       0,     0,     0,     0,     0,     0,     0,   350,     0,     8,
-       9,    10,    11,    12,   577,     0,     0,     0,    75,     0,
-       0,     0,     0,     0,   350,     0,     0,     0,   209,     0,
-      77,     0,   209,   211,     0,     0,    30,     0,   210,     0,
-       0,     0,     0,     0,     0,   351,     0,     0,   501,     0,
-      77,   348,   348,     0,   348,   348,     0,    84,    77,    33,
-      75,   345,     0,   350,    36,     0,   179,   180,    39,     0,
-       0,     0,   358,     0,    72,    40,    41,    84,     0,     0,
-       0,     0,   114,     0,   351,    84,     0,     0,   172,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   350,
-     181,     0,   351,     0,    77,  1188,     0,   348,   348,     0,
-     182,   358,  1188,     0,     0,     0,   529,     0,   209,     0,
-       0,     0,     0,     0,     0,     0,     0,   407,     0,   358,
-       0,    84,     0,     0,     0,     0,     0,     0,     0,     0,
-     350,     0,     0,     0,     0,   351,     0,     0,     0,     0,
-     350,     0,     0,   350,     0,     0,  1188,     0,   219,     0,
-     350,   983,     0,  1513,     0,   350,     0,     0,     0,     0,
-     348,     0,   358,     0,   469,     2,   202,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,   209,     0,
-      25,    26,    27,     0,  1142,     0,     0,   529,    30,   351,
-       0,     0,     0,   218,     0,   209,     0,     0,     0,     0,
-    1154,     0,     0,     0,     0,     0,     0,    75,   210,     0,
-       0,    33,     0,    34,    72,    35,   358,     0,    37,    38,
-       0,     0,     0,     0,     0,     0,     0,   348,   209,   348,
-       0,     0,     0,     0,   351,   351,   351,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     8,     9,    10,    11,
-      12,     0,   351,     0,     0,     0,     0,    -3,   348,     0,
-       0,   358,   358,   358,     0,     0,   348,   348,   348,     0,
-     351,     0,     0,    30,     0,  1221,     0,   348,   348,   358,
-       0,    77,     0,     0,     0,     0,     0,   351,     0,     0,
-     350,    72,     0,   164,     0,   168,    33,   358,   174,   175,
-     176,    36,   178,   179,   180,    39,     0,     0,    84,     0,
-     348,     0,    40,    41,   358,     0,     0,   229,     0,     0,
-       0,     0,     0,    77,     0,     0,   351,     0,     0,   244,
-     245,     0,     0,     0,     0,     0,     0,   690,     0,   405,
-       0,     0,   350,   350,     0,   350,   350,   692,     0,   209,
-      84,     0,     0,   358,     0,     0,     0,     0,     0,     0,
-     172,     0,   351,     0,     0,    75,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   209,     0,   529,
-       0,     0,   209,     0,   210,     0,     0,     0,     0,   358,
-       0,     0,     0,     0,   348,     0,     0,     0,   350,   350,
-       0,     0,     0,   351,     0,     0,     0,     8,     9,    10,
-      11,    12,     0,   351,     0,     0,   351,     0,     0,     0,
-     511,   220,     0,   351,     0,     0,     0,     0,   351,     0,
-     358,     0,     0,     0,    30,     0,     0,     0,    72,     0,
-     358,     0,     0,   358,     0,    72,     0,     0,   221,     0,
-     358,     0,     0,     0,     0,   358,     0,    33,     0,     0,
-       0,   350,    36,     0,   179,   180,    39,     0,     0,   209,
-       0,     0,     0,    40,    41,     0,     0,     0,   210,     0,
-       0,     0,     0,   209,     0,     0,     0,     0,     0,    72,
-      77,     8,     9,    10,    11,    12,     0,     0,  1491,     0,
-     405,     0,     0,   501,   219,     0,     0,     0,  1492,     0,
-       0,     0,     0,     0,     0,     0,     0,    84,    30,     0,
-       0,     0,     0,     0,     0,    75,   172,     0,     0,     0,
-       0,     0,     0,   529,     0,     0,     0,     0,   350,     0,
-     350,    33,     0,     0,     0,     0,    36,     0,   179,   180,
-      39,     0,     0,     0,     0,     0,     0,    40,    41,     0,
-       0,     0,   123,   123,   123,     0,     0,     0,     0,   350,
-       0,     0,     0,   351,     0,   209,     0,   350,   350,   350,
-       0,     0,   261,   594,   601,     0,     0,     0,   350,   350,
-       0,     0,   262,     0,     0,   625,   626,     0,     0,     0,
-     358,     0,    75,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   121,   124,   125,     0,     0,     0,     0,     0,
-       0,   350,     0,     0,   162,   351,   351,     0,   351,   351,
-       0,     0,     0,   123,     0,   123,     0,     8,     9,    10,
-      11,    12,     0,   214,     0,     0,     0,     0,    77,     0,
-       0,     0,   358,   358,     0,   358,   358,     0,     0,   271,
-       0,     0,     0,     0,    30,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    84,     0,     0,     0,     0,
-       0,   351,   351,   250,     0,   251,     0,    33,     0,   162,
-       0,     0,    36,     0,   268,     0,    39,     0,     0,     0,
-       0,     0,     0,    40,    41,   350,     0,     0,   358,   358,
-       0,     0,     0,     0,   123,     0,     0,     0,     0,     0,
-       0,     0,   123,   162,   123,   123,     0,     0,   736,   123,
-       0,   123,   123,   364,     0,     0,     0,   370,   737,     0,
-       0,     0,     0,     0,   351,     0,     0,     0,     0,    75,
-       0,     0,     0,     0,     0,   278,    75,   279,     0,     0,
-       0,     0,     0,     0,   390,   209,     0,     0,     0,     0,
-       0,   358,     0,     0,   409,   410,     0,     0,   280,   414,
-       0,   416,   417,     0,   281,   162,     0,   220,   282,     0,
-       0,   283,   284,   285,   286,    40,    41,   214,   287,   288,
-      75,   123,     0,     0,     0,     0,   289,     0,    77,     0,
-       0,     0,     0,     0,   221,   162,   456,     0,     0,     0,
-     290,   351,   374,   351,     0,     0,     0,     0,     0,   292,
-     376,   294,   295,   296,   297,    84,     0,     0,     0,   370,
-       0,     0,     0,  1204,     0,     0,     0,   162,   358,     0,
-     358,     0,   351,     0,     0,     0,     0,     0,     0,     0,
-     351,   351,   351,     0,     0,     0,     0,     0,     0,     0,
-     456,   351,   351,   162,     0,     0,     0,  1022,     0,   358,
-       8,     9,    10,    11,    12,    77,     0,   358,   358,   358,
-       0,     0,     0,     0,     0,     0,     0,     0,   358,   358,
-       0,     0,     0,     0,   351,     0,   278,    30,   279,     0,
-       0,     0,    84,     0,     0,     0,     0,     0,     0,     0,
-     599,     0,     0,     0,     0,   623,     0,     0,     0,   280,
-      33,   358,     0,     0,     0,   281,     0,     0,     0,   282,
-       0,   209,   283,   284,   285,   286,    40,    41,     0,   287,
-     288,     0,     0,     0,     0,     0,     0,   289,     0,     0,
-     942,     0,   943,     0,     0,     0,     0,     0,     0,   946,
-     947,   290,     0,   374,   952,     0,     0,     0,     0,     0,
-     292,   817,   294,   295,   296,   297,   957,     0,   351,     0,
-       0,   961,     0,     0,     0,     0,     0,     0,     0,     0,
-     162,   162,     0,     0,     0,     0,     0,   364,     0,     0,
-       0,     0,     0,     0,     0,   358,   989,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   456,     0,
-       0,   456,    77,     0,     0,   209,     0,   456,     0,    77,
+     110,   449,    46,    95,   146,   264,   927,   762,   403,   379,
+     380,   147,   148,   111,   395,   396,   424,   785,   928,   397,
+     398,   436,   502,   399,   889,   707,    53,   112,   865,   713,
+     400,   401,   836,    46,    95,  1194,   404,  1085,   746,    47,
+     929,   702,   751,  1136,    46,   601,    46,   158,   847,  1453,
+    1390,   840,   614,  1084,   674,    66,    46,    53,   609,   848,
+     633,  1178,    46,   190,   637,    46,   213,   149,    46,   223,
+      47,   104,   104,  1144,   683,   257,   174,   140,   216,   814,
+     837,   108,   687,   988,   927,   841,    66,   113,   403,   207,
+     421,   945,   217,  1457,   395,   396,   928,   969,  1309,   397,
+     398,   406,   104,   399,  1176,  1177,    46,   842,   532,    46,
+     400,   401,   150,   570,   773,    46,   404,   839,   929,    30,
+     838,   151,  1188,  1453,   339,   277,   258,    30,   199,   259,
+     156,    30,   108,   287,   108,   475,  1092,   104,    94,  -232,
+    -232,  1202,   931,    67,   146,   119,    46,   158,   571,  1410,
+    1411,   147,   148,  1473,    46,   851,   880,   881,    30,    46,
+     369,   858,   972,   108,   944,   120,   836,  1310,   163,    94,
+     878,   878,   878,   899,    67,   479,   481,   200,  1211,  1212,
+     145,  1206,    94,   278,    46,    46,   158,   734,   878,   255,
+     735,  1457,  1204,  1410,  1411,   156,  1457,   249,   186,   407,
+      46,    94,   777,   407,    94,   741,   209,   149,    46,   158,
+    -232,   672,  1193,  1254,   837,   165,  1457,    46,   138,  1412,
+      46,   439,   532,  1457,   146,   139,   532,   669,   415,   320,
+     407,   147,   148,   163,   108,   405,  1128,   435,   336,   166,
+     373,  1255,   723,  1129,   437,  1251,  1499,   952,   469,   443,
+      46,    95,   150,  1127,   838,   670,   374,   970,  1178,    74,
+     836,   151,   878,  1421,    46,    46,   158,   324,   464,   238,
+     241,    46,   141,   783,    53,  1194,   108,   698,    46,   840,
+     480,  1528,    94,  1530,   661,   707,  1030,    47,   426,   520,
+      74,   487,   430,   825,   467,    94,   475,  1031,   504,  1335,
+     601,   143,    30,    66,   744,   700,  1184,  1178,   837,   669,
+     592,  1146,   676,   841,   614,  1339,   475,  1007,   681,   104,
+     394,   186,   320,   452,   475,    30,   920,    46,   369,   601,
+     432,    30,   108,  1185,   601,   842,   874,   670,  1010,   339,
+     879,   879,   879,   532,    94,  1018,    46,    46,   838,   383,
+    1176,  1177,  1483,   878,   430,   152,    94,   492,   879,  1085,
+     324,   438,   480,    46,   868,   384,   174,    46,   869,   226,
+    1393,  1341,   485,   227,   407,  1084,   231,   525,   233,  1185,
+     156,  -110,   851,   634,   572,   242,    94,   638,  1397,   560,
+     561,    67,   432,   734,    46,   849,   735,   606,   168,   840,
+     483,   856,  -110,   606,    46,   369,   848,  1208,   532,   678,
+     680,     2,   203,     4,     5,     6,     7,   865,   163,   852,
+    1126,   178,    46,   855,   591,   562,   563,   598,    46,   461,
+      46,  1178,   879,   841,  1542,  1194,   756,  1541,   108,   225,
+     136,   137,  1194,   757,   872,  -110,   631,  -110,   875,   723,
+     635,  -110,  1372,   336,    46,   842,   108,  1552,   136,   235,
+     198,  1557,  1333,    94,  1556,   603,  -110,  -110,   734,  1334,
+     110,   735,  1442,  1443,    34,  1448,    35,  -288,    46,   108,
+     240,   136,   137,   608,   244,   750,    46,   369,  1142,   209,
+      46,    95,  1095,   236,    46,  1194,   890,   249,   237,   502,
+     339,  -110,  -110,   764,  1114,   247,  1250,    74,   320,   320,
+     581,   226,    74,    60,    53,   761,   582,  -110,   885,  -515,
+     403,  1100,   261,   879,  1012,   395,   396,    47,   825,   702,
+     397,   398,   778,   386,   399,   761,   452,   784,   761,   452,
+     186,   400,   401,    66,    60,   452,   324,   324,   404,   387,
+    1073,   901,   614,   249,   326,   407,   388,   113,  1029,   104,
+     523,  1031,   -10,   390,   108,   649,   136,   137,   475,   818,
+    1164,  1166,   389,   708,  1100,  1244,    36,  -438,   903,   391,
+      39,   710,   492,   723,   320,   469,   492,    40,    41,   709,
+     699,   327,   688,   723,  -439,    46,   525,   711,   582,   273,
+     525,   747,   320,   525,   212,   282,   748,    46,   723,    46,
+     949,   708,  1489,   833,   336,   606,    40,    41,   825,  1489,
+     209,   239,   324,   607,   275,   710,    94,   923,    46,  1191,
+     608,    67,  1283,  1284,   497,   870,   498,  1191,  1370,   871,
+     324,   924,   517,  -464,    46,  1192,   712,   328,   867,   827,
+     226,   461,   231,  1315,  1324,   212,  1512,   900,    46,   902,
+     276,    46,  1517,   339,   882,    63,   114,   707,   320,  1326,
+    1325,  1029,  1538,    74,  -464,   725,  -464,  1034,   898,   823,
+    -464,   726,   598,  1537,   745,  1327,   749,  1042,  1544,   769,
+     891,   677,   679,    74,   329,    46,    63,    46,   212,   870,
+     574,    74,   407,  1110,   330,  1373,   324,   331,  1089,   157,
+     575,   864,  1199,   509,   332,  1420,   598,   583,   601,   407,
+     603,   892,   873,   648,   771,   948,   407,   893,   586,  1122,
+     407,   218,  1049,   742,   772,   904,  1175,   407,   339,   743,
+     226,    46,    46,   835,   752,   608,   953,    74,   606,   866,
+     753,   367,   768,   368,   603,    46,   954,   669,   769,   212,
+      36,    60,   171,   172,    39,   698,   476,   914,   256,  1111,
+     438,    40,    41,   769,   758,   504,   916,   336,   759,   523,
+     372,   765,   769,   523,   996,   670,   523,  -103,  1009,  1382,
+     997,  -103,  1240,   700,   726,   381,   825,   212,   582,   452,
+     385,   212,  1491,   422,  1492,   553,   723,   723,  1366,   325,
+     554,   555,  1358,  1367,   769,   393,  1359,   256,   346,   769,
+       2,   203,     4,     5,     6,     7,   415,   665,   407,   492,
+     405,   926,    36,   699,   927,    46,    39,   886,   428,  1369,
+     807,  1438,  1168,    40,    41,   769,   928,    46,   402,  1374,
+    1439,   907,   336,   407,   734,   769,  1436,   735,  1450,  1539,
+     249,   326,   209,   420,   723,   723,   425,   427,   929,    42,
+    1242,   157,  1073,   160,  1246,   446,   209,   835,   608,   144,
+     533,   534,   535,    34,   827,    35,   423,   212,   108,   459,
+     136,   137,   444,  1458,  1189,  1071,   447,   939,   448,   769,
+     485,   326,   407,   942,   536,   465,   537,   463,   538,   539,
+    1011,  1505,    36,    63,   823,  1562,    39,  1506,   477,   466,
+      46,   582,    53,    40,    41,   556,   557,   476,   484,   558,
+     559,  1510,  1450,  1148,    46,   407,   427,   735,   160,   849,
+     326,   606,    46,   755,   108,    74,    -3,   476,  1160,   739,
+     407,    66,   564,   565,   159,   476,  1302,  1303,  1304,   740,
+      46,     8,     9,    10,    11,    12,  1383,   104,   212,   209,
+     191,   835,  1163,   214,   606,  1115,   224,   126,   462,   127,
+     128,   129,  1361,   608,  1340,  1342,  1343,    74,    30,  1116,
+    1165,   488,   606,  1138,   508,  1228,   761,   407,  1138,   732,
+     287,    60,   516,   256,   823,  1320,   599,   528,   452,  1235,
+     532,   935,   627,   935,  1000,   997,    33,   566,   212,   567,
+    1409,   326,   407,  1417,   569,   632,   769,  1002,   335,   632,
+    1379,  1380,   256,   568,   104,   431,   723,  1430,   997,    67,
+     795,   796,   797,   798,   723,   723,   723,  1138,   492,  1117,
+     320,  1436,  1437,  -435,   159,  1484,  1485,  1071,  1410,  1411,
+    1203,  1205,  1207,   572,   791,   792,   457,   370,  1456,   590,
+     699,   593,   662,  1460,   793,   794,   643,   649,   699,   477,
+     663,    53,   799,   800,  1054,  1524,   664,   666,   324,   533,
+     534,   535,   723,   159,   346,   667,   608,   431,   668,   477,
+     864,   671,   673,  1482,   254,   714,   910,   477,   691,   716,
+    1196,  -236,   754,   536,   766,   537,   159,   538,  1311,    46,
+     527,   770,   774,   160,   -12,   828,   104,   830,   440,   832,
+     843,   895,   888,   719,   915,  1100,   427,   887,   866,   917,
+     212,   922,   918,   164,   930,   169,   943,  -519,   175,   176,
+     177,   733,   179,    63,   694,    74,  -412,   957,   964,   743,
+     438,   427,   966,   977,   978,   427,   930,   230,   212,   981,
+     971,   982,   980,   212,   983,   649,   992,  1004,  1005,   245,
+     246,   452,   823,  1006,  1020,   339,  1021,  1022,  1023,  1551,
+    1024,  1025,   973,   256,   346,  1551,  1026,  1037,    67,   476,
+      36,  1086,   180,   181,    39,   732,  1551,  -400,   216,  -399,
+    1551,    40,    41,  1051,  1088,    46,  -289,  1071,  1096,  1097,
+    1098,   207,   217,     8,     9,    10,    11,    12,  1099,  1103,
+       8,     9,    10,    11,    12,   370,  1104,   693,  1105,   407,
+     813,   476,  1106,  1107,    53,   694,  1113,   695,  1123,  1115,
+      30,   769,  1124,  1138,  1138,  1138,  1001,    30,   632,   826,
+     212,   599,  1125,  1116,  1130,   986,  1134,   104,  1137,  1158,
+    1179,  1180,   845,    66,   212,  1054,  1181,  1182,    33,   457,
+     732,  1434,   457,  1197,  1183,    33,  1198,  1200,   457,   104,
+     599,  1201,  1209,  1213,  1216,   599,  1550,  1215,  1221,   336,
+      -3,   632,  1226,  1232,   346,   346,   346,  1243,   104,  1236,
+     761,  1071,   370,   497,    74,  1241,   437,  1252,  1245,  1248,
+    1256,    53,   346,  1117,  1259,  1261,  1263,   574,  1293,   407,
+    1264,  1265,  1269,  1266,  1044,  1267,  1276,   575,   209,   527,
+     719,  1115,  1285,   527,  1286,  1296,   527,   403,    72,  1297,
+    1196,   477,  1314,   395,   396,  1116,   256,   733,   397,   398,
+     932,    67,   399,  1299,  1322,  1071,   104,   212,  1071,   400,
+     401,   669,  1300,  1308,   211,   404,  1328,  1330,  1332,    72,
+    1289,  1336,  1337,  1338,  1344,  1345,  1346,  1348,  1523,  1354,
+      46,    46,  1355,   477,  1356,  1357,   346,  1138,  1138,   670,
+     104,  1364,  1365,  1368,  1375,   958,  1376,  1304,   427,    60,
+    1433,  1384,  1385,  1071,   219,  1117,  1397,    36,  1071,   180,
+     181,    39,   930,  1394,  1387,   211,  1404,  1405,    40,    41,
+    -401,   256,   733,   438,   597,   604,  1475,   985,    67,  1408,
+    1419,  1427,  1428,   170,  1115,  1423,   628,   629,  1071,  1425,
+    1429,  1435,  1145,  1440,   605,  1359,   606,  1449,  1116,  1454,
+    1444,  1445,  1446,  1459,   607,  1447,  1291,  1292,   211,  1294,
+    1461,  1463,  1465,  1467,   719,  1298,  1469,    74,  1301,  1472,
+    1471,    53,  1477,   146,   719,  1479,   250,   346,    53,   632,
+     147,   148,  1017,   632,   826,  1478,  1525,  1490,    46,   719,
+    1500,   349,  1044,   104,  1502,  1533,  1504,  1508,  1509,  1028,
+    1196,  1071,  1531,  1516,  1532,  1536,  1071,  1196,  1117,  1543,
+    1545,  1547,  1560,    46,    46,   158,   104,  1561,  1214,   211,
+    1553,   801,   804,   104,  1071,    36,  1071,   180,   181,    39,
+    1071,    53,   457,  1071,   802,   805,    40,    41,    46,   369,
+    1496,  1071,  1496,   803,    74,  1071,   173,  1313,   212,  1511,
+     973,    63,  1422,  1563,   973,   973,   724,   211,   476,  1247,
+    1196,   211,   693,  1378,   407,   445,  1395,   930,   513,  1493,
+    1101,   413,   695,   632,  1220,   689,   104,  1496,   718,  1496,
+     936,   530,   531,   690,  1102,  1133,    72,   820,    67,  1050,
+     894,    72,   959,   552,   433,    67,   173,  1112,  1323,   173,
+     737,   967,   810,     0,   441,   811,   812,   320,     0,  1109,
+       2,   203,     4,     5,     6,     7,     0,   427,   114,     0,
+       0,     0,     0,     0,   930,   930,     0,  1416,     0,   531,
+       0,     0,     0,     0,   346,     0,     0,     0,     0,     0,
+       0,   913,     0,     0,   173,   324,     0,   211,    67,   483,
+       8,     9,    10,    11,    12,     0,   732,     0,     0,     8,
+       9,    10,    11,    12,     0,   531,     0,     0,  1331,   599,
+       0,     0,   524,    34,     0,    35,     0,    30,     0,     0,
+       0,     0,   425,     0,     0,   219,    30,   719,   719,     0,
+     346,   346,     0,     0,    75,     8,     9,    10,    11,    12,
+       0,     0,     0,     0,    74,    33,     0,   173,     0,     0,
+    1195,    74,     0,     0,    33,     0,     0,     0,     0,    36,
+       0,    60,    30,    39,     0,    75,   212,     0,   211,     0,
+      40,    41,     0,     0,     0,     0,   732,     0,     0,     0,
+       0,   457,     0,     0,     0,   719,   719,   771,     0,   407,
+      33,   632,    72,     0,     0,  1391,    42,   772,     0,  1391,
+     220,   173,     0,   724,    74,     0,   144,   349,   173,     0,
+       0,     0,    72,     0,     0,  1003,     0,     0,   211,     0,
+      72,     0,     0,     0,     0,  1008,     0,     0,     0,     0,
+       0,     0,   953,     0,   606,     0,     0,     0,   476,     0,
+    1019,     0,   954,   946,     0,   947,   349,    36,   733,   171,
+     172,    39,   950,   951,     0,    54,    54,   956,    40,    41,
+     685,   212,     0,     0,   349,     0,    72,     0,    36,   961,
+     180,   181,    39,   930,   965,     0,   173,     0,     0,    40,
+      41,   788,   789,   790,   368,     0,    54,   351,     0,     0,
+     930,  1290,   210,   173,   727,     0,     0,   173,     0,   993,
+       0,  1474,   229,     0,     0,   182,     0,   349,   256,     0,
+       0,     0,     0,    63,     0,   183,     0,     0,    54,     0,
+       0,    54,     0,     0,   531,     0,   719,     0,   733,     0,
+       0,   524,   114,     0,     0,   524,     0,   724,   524,     0,
+     211,     0,     0,   210,   597,     0,     0,   724,     0,     0,
+       0,     0,     0,     0,   457,     0,     0,   719,     0,     0,
+     173,     0,   724,   930,   930,   719,   719,   719,   211,     0,
+       0,     0,   349,   211,     0,     0,   346,   346,     0,     0,
+       0,     0,    75,     0,     0,     0,   210,    75,     0,     0,
+    1195,     0,     0,     0,     0,     0,     0,     0,   476,     0,
+       0,  1038,  1039,  1040,  1041,   476,  1043,     0,   344,     0,
+       0,     0,     0,   719,     0,     0,     0,   349,   349,   349,
+       0,     0,  1087,     0,   114,     0,     0,     8,     9,    10,
+      11,    12,     0,     0,     0,   349,  1093,     0,  1173,  1174,
+      36,     0,   171,   172,    39,     0,     0,   210,     0,     0,
+       0,    40,    41,   349,    30,     0,     0,   531,   476,     0,
+     211,     0,     0,     0,    72,     0,     0,     0,     0,     0,
+     349,     0,     0,    54,   211,  1108,     0,   372,     0,     0,
+       0,   220,    33,     0,     0,   210,     0,    36,     0,   210,
+       0,    39,     0,     0,     0,   912,  1223,  1224,    40,    41,
+       0,   346,   987,    54,   919,   503,    72,     0,   921,   349,
+       0,     0,     0,     0,  1135,     0,    77,     0,     0,     0,
+       0,  1143,     0,     0,   739,   173,  1147,   114,     0,     0,
+       0,  1151,     0,  1152,   740,     0,     0,  1154,  1155,  1156,
+       0,     0,  1159,     0,     0,   349,     0,    77,    75,   531,
+    1195,  1171,     0,     0,     0,     0,     0,  1195,   173,     0,
+     724,   724,     0,   351,     0,     0,     0,   211,    75,  1186,
+    1187,     0,     0,     0,   173,   210,    75,     0,     0,     0,
+       0,     0,   221,     0,     0,     0,     0,   349,   173,     0,
+       0,     0,     0,     0,     0,     0,  1217,   349,     0,  1219,
+     349,     0,   351,     0,     0,   219,     0,   349,     0,     0,
+    1195,     0,   349,     0,     0,     0,     0,  1546,   724,   724,
+     351,  -290,    75,    36,     0,   180,   181,    39,     8,     9,
+      10,    11,    12,     0,    40,    41,     0,  1234,     0,     0,
+       0,     0,     0,  1238,  1239,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1249,    30,   210,     0,     0,  1253,
+     262,     0,  1257,   351,  1258,     0,     0,  1260,  1347,   352,
+     263,     0,    84,   210,    72,     0,  1349,  1350,  1351,     0,
+    1268,     0,     0,    33,   344,   173,     0,     0,     0,     0,
+       0,     0,     0,  1275,     0,  1277,  1278,  1279,  1280,     0,
+       0,     0,     0,    84,     0,     0,   210,     0,     0,     0,
+       0,  1287,     0,  1288,     0,     0,     0,   169,     0,     0,
+       0,     0,     0,  1497,  1386,  1497,     0,     0,   351,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   222,     0,
+       0,  1094,   531,    54,     0,  -291,  1316,  1317,     0,     0,
+       0,     0,     8,     9,    10,    11,    12,   349,   211,  1321,
+    1497,     0,  1497,     0,    77,   409,     0,     0,     0,    77,
+       0,     0,   417,   351,   351,   351,     0,     0,     0,    30,
+       0,     0,     0,   513,   344,     0,     0,     0,     0,     0,
+     724,   351,     0,     0,     0,     0,  1352,  1353,   724,   724,
+     724,     0,     0,     0,     0,     0,  1363,    33,     0,   351,
+     349,   349,     0,   349,   349,     0,     0,     0,     0,     0,
+      75,     0,     0,     0,     0,   359,   351,     0,   210,     0,
+       0,     0,     0,    72,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   409,     0,   724,     0,     0,   344,
+     173,     0,     0,     0,     0,     0,   210,     0,  1396,     0,
+       0,   210,    75,   221,     0,   351,     0,     0,   349,   349,
+    1400,     0,  1401,  1402,  1403,     0,     0,    36,     0,   180,
+     181,    39,     0,     0,  1407,     0,     0,  1210,    40,    41,
+       0,     0,     0,  1418,   344,   344,   344,     0,   531,   580,
+       0,   351,     0,     0,     0,     0,     0,   584,     0,  1431,
+     587,     0,   344,     0,  1521,     0,   407,     0,     0,     0,
+      84,     0,     0,     0,  1522,    84,     0,     0,     0,     0,
+      77,   349,     0,     0,     0,     0,   211,     0,     0,     0,
+       0,     0,     0,   351,     0,   352,     0,     0,   210,     0,
+      77,     0,     0,   351,     0,     0,   351,     0,    77,     0,
+       0,   220,   210,   351,     0,  1480,  1481,     0,   351,     0,
+       0,     0,     0,   409,   219,     0,     0,   417,  1486,     0,
+       0,     0,   503,     0,   352,  1486,   344,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    72,     0,     0,     0,
+       0,     0,   352,     0,    77,     0,     0,     0,     0,   349,
+       0,   349,     0,     0,     0,     0,     0,     0,  1520,   222,
+       0,     0,  1526,     0,     0,     0,     0,     0,     0,     0,
+      75,   211,     0,     0,     0,     0,     0,     0,     0,     0,
+     349,     0,     0,     0,     0,   352,     0,     0,   349,   349,
+     349,  1548,     0,  1549,     0,   210,     0,     0,     0,   349,
+     349,     0,   409,     0,     8,     9,    10,    11,    12,     0,
+       0,     0,     0,    72,     0,     0,     0,   344,     0,     0,
+       0,  1564,  1565,     0,   344,     0,    84,     0,     0,  1568,
+    1569,    30,     0,     0,     0,     0,   349,     0,     0,     0,
+       0,   359,     0,     0,     0,     0,    84,     0,     0,     0,
+     352,     0,     0,   351,    84,     0,     0,     0,     0,    33,
+       0,     0,     0,     0,    36,  1377,   180,   181,    39,     0,
+       0,     0,     0,     0,     0,    40,    41,     0,     0,     0,
+     359,     0,     0,     0,     0,   173,     0,     0,     0,     0,
+       0,    54,     0,   580,   580,   352,   352,   352,   359,     0,
+      84,   605,     0,   606,     0,     0,   351,   351,     0,   351,
+     351,   607,     0,   352,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   349,     0,     0,     0,     0,    75,
+       0,   352,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   359,    77,     0,     0,     0,     0,     0,   352,     8,
+       9,    10,    11,    12,     0,     0,     0,     0,    54,     0,
+       0,     0,     0,     0,   351,   351,     0,   123,   123,   123,
+       0,     0,     0,    72,   344,     0,    30,     0,     0,     0,
+      72,   905,     0,     0,    77,   908,   210,   352,   540,   541,
+     542,   543,   544,   545,   546,   547,   548,   549,     0,     0,
+       0,     0,     0,     0,    33,     0,   359,     0,     0,    36,
+       0,   180,   181,    39,     0,     0,     0,     0,   409,     0,
+      40,    41,   550,   352,  1494,     0,  1498,   351,     0,     0,
+     344,   344,     0,    72,     0,     0,     0,     0,   123,     0,
+     123,     0,     0,     0,     0,     0,   693,     0,   407,     0,
+      54,   359,   359,   359,     0,     0,   695,     0,     0,     0,
+     173,  1527,     0,  1529,   272,   352,     0,     0,     0,   359,
+     220,     0,     0,     0,     0,   352,     0,     0,   352,     0,
+       0,     0,     0,   221,     0,   352,     0,   359,     0,     0,
+     352,     0,    75,     0,     0,     0,     0,     0,    84,     8,
+       9,    10,    11,    12,   359,   351,  1558,   351,  1559,     0,
+       0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
+     123,  1566,  1567,     0,     0,     0,    30,     0,   123,     0,
+     123,   123,   580,     0,     0,   123,   351,   123,   123,    30,
+      84,     0,     0,   359,   351,   351,   351,     0,     0,   121,
+     124,   125,    77,     0,    33,   351,   351,     0,     0,    36,
+       0,   180,   181,    39,   210,     0,     0,    33,     0,    75,
+      40,    41,    36,     0,   180,   181,    39,     0,     0,   359,
+       0,     0,     0,    40,    41,     0,     0,     0,     0,     0,
+      54,    54,   351,     0,     0,     0,  1521,     0,   407,     0,
+       0,     0,     0,     0,     0,     0,  1522,   123,     0,   182,
+       0,     0,     0,    54,     0,     0,     0,     0,     0,   183,
+     251,   359,   252,     0,     0,     0,     0,     0,   208,     0,
+       0,   359,    54,     0,   359,   352,     0,     0,   228,   222,
+     232,   359,   234,     0,   162,   409,   359,     0,     0,   243,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   210,
+       0,     0,     0,   215,     0,     0,     0,     0,     0,     0,
+       8,     9,    10,    11,    12,     0,   344,   344,     0,   208,
+     351,   232,   234,   243,     0,    54,     0,     0,   352,   352,
+      54,   352,   352,     0,     0,     0,     0,    30,     0,     0,
+       0,     0,   392,     0,     0,     0,     0,     0,    84,   162,
+       0,    77,   411,   412,   269,     0,     0,   416,     0,   418,
+     419,     0,   208,  1149,    54,    33,     0,     0,     0,    75,
+      36,     0,   180,   181,    39,     0,    75,     0,     0,  1161,
+       0,    40,    41,   162,     0,     0,   352,   352,     0,     0,
+       0,     0,     0,   365,     0,     0,     0,   371,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   262,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   263,     0,     0,
+       0,     0,     0,   208,     0,   232,   234,   243,     0,    75,
+       0,   359,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   344,     0,     0,     0,     0,   162,     0,     0,   352,
+       0,     0,     0,     0,     0,     0,  1229,     0,   215,     0,
+       0,   208,     0,     0,     0,   208,     0,    54,     0,     0,
+       0,     0,     0,     0,     0,     0,   162,   458,     0,     0,
+       0,   501,     0,     0,   359,   359,     0,   359,   359,     0,
+      54,     0,   221,     0,     0,     0,     0,    54,     0,     0,
+     371,     0,     0,     0,     0,     0,     0,    84,   162,     0,
+       0,     0,     0,     0,    77,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   352,     0,   352,
+     208,   458,     0,     0,   162,     0,     0,     0,     0,     0,
+       0,     0,   359,   359,     0,     0,     0,     0,     0,     0,
+      54,   208,     0,     0,     0,     0,   232,   234,   352,     0,
+     123,   123,     0,     0,   243,     0,   352,   352,   352,     0,
+       0,     0,     0,     0,     0,     0,     0,   352,   352,     0,
+       0,   602,     0,     0,     0,     0,   626,     0,     0,     0,
+     123,    77,     0,   123,   123,   279,   123,   280,   123,   123,
+       0,     0,     0,   123,   123,   359,     0,   208,     0,     0,
+       0,     0,     0,     0,   352,     0,     0,     0,     0,     0,
+       0,     0,     0,   281,     0,   208,     0,     0,     0,   282,
+     208,     0,   208,   283,     0,     0,   284,   285,   286,   287,
+      40,    41,     0,   288,   289,     0,     0,     0,   222,   208,
+       0,   290,   208,   208,     0,     0,     0,     0,     0,     0,
+       0,     0,   162,   162,     0,     0,   510,     0,   208,   365,
+      84,     0,     0,     0,     0,   293,   377,   295,   296,   297,
+     298,   123,   208,   359,     0,   359,   123,   123,     0,   208,
+     458,     0,   123,   458,     0,     0,     0,     0,     0,   458,
+       0,     0,   352,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   359,     0,     0,     0,     0,     0,
+       0,     0,   359,   359,   359,     0,   736,     0,     0,     0,
+       0,     0,     0,   359,   359,     0,     0,     0,   162,     0,
+       0,     0,   815,   816,     0,     0,   153,    84,     0,     0,
+     458,    77,     0,     0,   458,     0,   162,   458,    77,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   365,
+     359,     0,   850,     0,     0,   853,   854,     0,   857,     0,
+     859,   860,     0,     0,     0,   861,   862,     0,     0,     0,
+       0,     0,   248,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   253,     0,   208,     0,     0,     0,     0,     0,
+       0,    77,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   162,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   208,     0,   365,     0,   602,   208,     0,   831,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,  -285,     0,    84,
-     594,     0,     0,     0,   733,     0,    84,    30,     0,     0,
-       0,     0,     0,     0,     0,     0,   162,     0,     0,     0,
-       0,     0,     0,    77,     0,     0,     0,     0,   456,     0,
-      33,     0,   456,     0,   162,   456,     0,     0,     0,     0,
-       0,  -285,     0,     0,     0,     0,     0,   364,     0,     0,
-      84,     0,   123,   123,     0,     0,     0,  1033,  1034,  1035,
-    1036,     0,  1038,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1080,     0,
-       0,     0,   123,     0,     0,   123,   123,     0,   123,     0,
-     123,   123,  1086,     0,     0,   123,   123,     0,     0,   162,
-       0,     0,   811,   812,     0,     0,     0,     0,     0,     0,
-       0,   364,     0,   599,     0,     0,   827,     0,     0,     0,
+      18,    19,    20,    21,    22,    23,    24,   153,   359,    25,
+      26,    27,     0,     0,     0,   602,     0,    30,   937,   938,
+     602,   382,     0,     0,   940,     0,     0,     0,     0,   365,
+     365,   365,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   414,    33,     0,   365,     0,     0,
+      36,     0,    37,    38,    39,     0,     0,    84,   429,     0,
+       0,    40,    41,     0,    84,     0,     0,   434,     0,     0,
+       0,     0,     0,     0,   208,     0,     0,   442,     0,     0,
+       0,     0,   736,     0,     0,     0,     0,    42,   208,   154,
+       0,   279,     0,   280,     0,     0,     0,    44,     0,     0,
+       0,     0,   468,   458,     0,     0,     0,   478,   501,     0,
+       0,     0,     0,     0,     0,     0,     0,    84,     0,   281,
+     486,   365,     0,   955,     0,   282,   496,     0,   500,   283,
+       0,     0,   284,   285,   286,   287,    40,    41,     0,   288,
+     289,     0,     0,     0,     0,   529,     0,   290,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   736,     0,     0,
+       0,     0,   291,     0,   375,     0,     0,   376,   208,     0,
+       0,   293,   377,   295,   296,   297,   298,     0,     0,     0,
+       0,   208,     0,     0,     0,     0,     0,     0,   589,     0,
+       0,     0,     0,   594,     0,     0,     0,     0,     0,     0,
+     208,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   365,     0,     0,     0,   626,     0,     0,   365,
+       0,   640,     0,     0,   123,   641,   642,     0,   644,     0,
+       0,     0,     0,     0,     0,   655,   656,     0,   657,   658,
+       0,   659,     0,   660,     0,     0,     0,     0,     0,     0,
+       0,  1027,     0,     0,     8,     9,    10,    11,    12,     0,
+     589,     0,     0,     0,     0,     0,     0,     0,   675,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1101,   846,     0,     0,   849,   850,     0,   853,     0,
-     855,   856,   599,     0,     0,   857,   858,   599,     0,     0,
-       0,     0,     0,     0,     0,     0,   364,   364,   364,     0,
+     279,    30,   280,     0,     0,     0,     0,   208,     0,     0,
+       0,     0,     0,   686,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   692,     0,     0,     0,   281,    33,
+       0,     0,   458,   208,   282,     0,     0,     0,   283,     0,
+       0,   284,   285,   286,   287,    40,    41,   728,   288,   289,
+       0,     0,     0,   731,     0,     0,   290,     0,   468,     0,
+     208,     0,     0,     0,     0,     0,     0,   123,     0,     0,
+       0,   291,     0,   375,   162,     0,     0,     0,     0,     0,
+     293,   821,   295,   296,   297,   298,     0,     0,     0,   365,
+       0,     0,   208,     0,   767,     0,     0,     0,     0,     0,
+       0,     0,     0,   208,     0,     0,     0,     0,     0,     0,
+     782,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   602,     0,  1225,     0,     0,  1169,
+       0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
+       0,     0,     0,     0,     0,   365,   365,   809,     0,     0,
+       0,     0,     0,     0,     0,   318,   819,     0,   279,    30,
+     280,     0,     0,   822,     0,   342,     0,     0,   829,     0,
+       0,     0,     0,     0,     0,     0,     0,   378,   378,   844,
+       0,     0,     0,     0,   208,     0,   281,    33,     0,     0,
+       0,     0,   282,     0,     0,     0,   283,     0,     0,   284,
+     285,   286,   287,    40,    41,   458,   288,   289,     0,     0,
+       0,     0,     0,     0,   290,     0,     0,     0,     0,     0,
+     884,     0,     0,     0,     0,     0,     0,     0,     0,   291,
+       0,   375,     0,     0,     0,     0,     0,     0,   293,  1170,
+     295,   296,   297,   298,     0,     0,     0,     0,   318,  1312,
+       0,     0,     0,     0,     0,   829,     0,   338,   360,     0,
+       0,     0,     0,   736,     0,     0,     0,     0,     0,     0,
+     208,     0,     0,   482,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,   410,     0,    25,    26,    27,     0,     0,   410,     0,
+       0,    30,     0,     0,     0,   215,     0,     0,     0,     0,
+     248,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     962,   963,     0,     0,     0,     0,     0,     0,     0,    33,
+       0,     0,     0,   979,    36,     0,    37,    38,    39,     0,
+       0,     0,     0,   736,     0,    40,    41,     0,     0,     0,
+     994,     0,   995,     0,     0,     0,   999,     0,     0,     0,
+       0,     0,     0,     0,     0,   208,     0,     0,     0,     0,
+     410,    42,     0,    43,     0,     0,     0,     0,     0,     0,
+       0,    44,     0,     0,     0,     0,     0,     0,   378,     0,
+       0,   365,   365,     0,     0,     0,     0,     0,     0,     0,
+     215,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   279,     0,   280,     0,     0,     0,     0,     0,     0,
+       0,     0,  1032,     0,     0,   410,     0,     0,     0,  1033,
+       0,     0,     0,   410,   585,     0,   410,   588,     0,   281,
+       0,     0,  1035,     0,  1036,   645,   360,   136,   137,   283,
+     618,     0,   284,   646,   286,   287,    40,    41,  1048,   288,
+     289,     0,     0,     0,     0,  1052,     0,   290,     0,   636,
+       0,     0,   338,     0,     0,     0,     0,  1090,     0,     0,
+    1091,     0,   291,     0,   647,     0,   648,   376,     0,     0,
+     730,   293,   377,   295,   296,   297,   298,     0,   594,   410,
+       0,     0,     0,   410,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   365,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   763,     0,
+       0,     0,     0,     0,   360,     0,     0,     0,     0,     0,
+       0,   776,     0,     0,     0,     0,     0,     0,   763,     0,
+       0,   763,     0,     0,     0,     0,     0,   410,     0,     0,
+       0,     0,   786,   787,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   458,     0,   458,     0,     0,     0,
+       0,     0,     0,     0,   808,     0,  1153,     0,   410,     0,
+       0,   360,     0,     0,   817,     0,     0,     0,     0,     0,
+       0,   342,     0,     0,     0,     0,   776,     0,     0,     0,
+       0,   458,     0,   458,     0,     0,     0,     0,     0,     0,
+       0,   208,     0,     0,     0,     0,     0,     0,     0,     0,
+     410,     0,     0,   338,   360,     0,     0,     0,     0,     0,
+       0,   162,   529,     0,     0,     0,     0,     0,     0,  1218,
+       0,     0,     0,     0,     0,     0,   883,     0,     0,     0,
+       0,     0,     0,     0,   378,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  1231,   410,
+     410,     0,     0,  1233,     0,     0,     0,     0,     0,     0,
+       0,  1237,     0,     0,     0,     0,     0,     0,   824,   360,
+       0,   360,     0,     0,   342,     0,     0,     0,     0,     0,
+     618,     0,   618,   618,     0,     0,     0,     0,     0,   618,
+       0,  1262,     0,     0,     0,     0,     0,     0,     0,   863,
+     360,     0,     0,  1270,     0,   360,  1271,     0,  1272,     0,
+       0,     0,     0,     0,   360,   360,   360,     0,     0,     0,
+       0,     0,  1281,  1282,     0,     0,     0,     0,     0,     0,
+       0,     0,   360,     0,     0,     0,     0,   410,   906,     0,
+       0,   410,   909,     0,  1295,     0,     0,     0,   911,   776,
+       0,   984,     0,     0,     0,     0,     0,   989,     0,     0,
+       0,     0,     0,     0,   998,     0,   338,   360,   410,     0,
+     410,  1318,     0,     0,   410,     0,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
+       0,     0,     0,    30,   450,     0,   360,   618,  1015,  1016,
+       0,   342,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   342,     0,     0,     0,
+       0,    33,     0,     0,     0,     0,     0,     0,    37,    38,
+       0,   338,   360,     0,     0,     0,   410,   410,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1128,     0,     0,   123,   364,     0,     0,  1136,   123,   123,
-       0,  1140,     0,     0,   123,     0,  1144,     0,  1145,     0,
-       0,     0,  1147,  1148,  1149,     0,     0,  1152,     0,     0,
-       0,     0,     0,     0,     0,     0,  1164,     0,     0,   733,
+       0,     0,     0,     0,     0,     0,  1046,  1388,     0,  1389,
+     378,     0,     0,     0,     0,   451,     0,     0,     0,   706,
+       0,     0,  1398,   109,  1399,     0,     0,     0,   410,     0,
+       0,     0,     0,     0,     0,     0,     0,   360,     0,     0,
+       0,     0,  1406,   824,   360,     0,     0,     0,   618,     0,
+     618,     0,     0,     0,   511,   512,   515,     0,  1424,  1426,
+     618,     0,     0,   518,   519,     0,     0,     0,   512,   512,
+    1432,     0,     0,  1237,     0,     0,     0,     0,     0,     0,
+     512,     0,     0,     0,     0,     0,   318,     0,     0,     0,
+       0,     0,     0,     0,     0,  1455,     0,     0,     0,     0,
+       0,  1131,  1132,     0,  1462,     0,     0,  1464,   378,  1466,
+    1468,  1470,     0,     0,   989,     0,   512,  1141,     0,   763,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1179,  1180,     0,     0,   933,   934,
-     456,     0,     0,     0,   936,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   364,  1209,
-     951,     0,  1211,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,     0,   207,     0,     0,
-      30,     0,     0,     0,   733,     0,     0,   227,     0,   231,
-    1226,   233,     0,     0,     0,     0,  1230,  1231,   242,     0,
-       0,     0,     0,    33,     0,     0,     0,  1241,     0,     0,
-     203,    38,  1245,     0,     0,  1249,     0,  1250,     0,     0,
-    1252,     0,     0,     0,     0,     0,     0,     0,   207,     0,
-     231,   233,   242,  1260,     0,     0,     0,     0,   364,     0,
-       0,     0,   623,     0,     0,   364,  1267,     0,  1269,  1270,
-    1271,  1272,     0,     0,   267,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1279,     0,  1280,     0,     0,     0,
-     168,   207,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   824,     0,     0,     0,     0,     0,  1157,
+       0,   410,     0,     0,     0,     0,     0,   410,     0,     0,
+    1172,  1501,   512,  1503,     0,   410,  1237,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   618,   618,
+       0,  1515,   378,     0,  1190,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   989,
+     989,     0,     0,     0,   360,     0,     0,     0,     0,     0,
+     410,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1222,     0,     0,     0,     0,     0,     0,     0,     0,   410,
+    1150,   279,     0,   280,     0,     0,     0,     0,     0,   360,
+       0,     0,     0,     0,     0,   410,  1162,     0,   618,   618,
+    1167,     0,     0,     0,     0,     0,     0,     0,     0,   281,
+     360,   360,     0,     0,     0,   282,   989,     0,     0,   283,
+       0,     0,   284,   285,   286,   287,    40,    41,     0,   288,
+     289,     0,     0,     0,     0,   883,     0,   290,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1304,  1305,
-       0,     0,   201,     2,   202,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,   207,     0,   231,   233,   242,    30,     0,   456,     0,
-       0,     0,     0,     0,     0,   153,     0,     0,  1340,  1341,
-       0,     0,     0,     0,     0,     0,     0,     0,  1351,    33,
-       0,    34,     0,    35,    36,     0,   203,    38,    39,   207,
-       0,     0,     0,   207,     0,    40,    41,     0,     0,     0,
-     162,     0,     0,     0,     0,     0,     0,     0,     0,   499,
-       0,   247,     0,     0,     0,   364,     0,     0,     0,     0,
-      42,   252,   204,     0,     0,     0,  1380,     0,     0,     0,
-     205,     0,     0,     0,     0,     0,     0,     0,  1384,     0,
-    1385,  1386,  1387,     0,     0,     0,     0,     0,     0,   599,
-       0,     0,  1391,     0,     0,     0,     0,     0,   207,     0,
-       0,  1402,     0,     0,   278,     0,   279,     0,     0,     0,
-     364,   364,     0,  1410,     0,     0,   153,     0,     0,   207,
-       0,     0,   123,     0,   231,   233,     0,   280,     0,   380,
-       0,     0,   242,   281,     0,     0,     0,   282,     0,     0,
-     283,   284,   285,   286,    40,    41,     0,   287,   288,     0,
-       0,     0,   412,     0,     0,   289,     0,     0,     0,     0,
-       0,     0,     0,     0,  1454,  1455,   427,     0,   456,   290,
-       0,   374,  1217,     0,   207,   432,   772,  1460,   292,   376,
-     294,   295,   296,   297,  1460,   440,     0,     0,     0,     0,
-       0,     0,   207,     0,     0,     0,     0,   207,     0,   207,
+    1273,  1274,   291,     0,   375,     0,     0,     0,     0,     0,
+     806,   293,   377,   295,   296,   297,   298,     0,     0,     0,
+       0,   824,   410,  1230,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   618,     0,     0,     0,   512,   512,
+     512,   512,   512,   512,   512,   512,   512,   512,   512,   512,
+     512,   512,   512,   512,   512,   512,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     466,     0,  1490,     0,     0,   476,   207,     0,     0,   207,
-     207,     0,     0,     0,     0,     0,   733,     0,   484,     0,
-       0,     0,     0,     0,   494,   207,   498,     0,     0,     0,
-    1514,     0,     0,     0,   123,     0,     0,     0,     0,   207,
-       0,     0,     0,   527,     0,     0,   207,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1527,     0,   214,     0,
-       0,  1529,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   360,     0,
+     989,   512,  -514,     0,     0,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
+       0,    25,    26,    27,    28,     0,     0,    29,     0,    30,
+      31,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,   338,     0,
+       0,  1381,     0,   763,    32,     0,     0,    33,    30,    34,
+       0,    35,    36,     0,    37,    38,    39,     0,   360,     0,
+       0,     0,     0,    40,    41,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    33,     0,     0,   512,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    42,
+       0,    43,     0,     0,     0,     0,     0,     0,     0,    44,
+       0,   512,     0,     0,     0,     0,   360,   360,     0,     0,
+       0,     0,     0,     0,   512,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,  1441,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1300,     0,   586,     0,     0,     0,
-       0,   591,     0,     0,     0,   733,     0,     0,     0,     0,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,   637,
-      25,    26,    27,   638,   639,     0,   641,     0,    30,     0,
-       0,     0,   652,   653,     0,   654,   655,     0,   656,     0,
-     657,     0,  1162,   364,   364,     8,     9,    10,    11,    12,
-       0,    33,   214,     0,     0,     0,     0,   586,   203,    38,
-     207,     0,     0,     0,     0,   672,     0,     0,     0,     0,
-       0,   278,    30,   279,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   207,     0,
-     683,     0,     0,   207,   280,    33,     0,     0,     0,     0,
-     281,   689,   622,     0,   282,     0,     0,   283,   284,   285,
-     286,    40,    41,     0,   287,   288,     0,     0,     0,     0,
-       0,     0,   289,     0,   725,     0,     0,     0,     0,     0,
-     728,     0,     0,     0,     0,   466,   290,     0,   374,     0,
-       0,     0,     0,     0,     0,   292,  1163,   294,   295,   296,
-     297,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     364,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   764,     0,     0,   509,   510,   513,     0,     0,     0,
-     207,     0,     0,   516,   517,     0,     0,   779,   510,   510,
-       0,     0,     0,     0,   207,     0,     0,     0,     0,     0,
-     510,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   456,   499,     0,     0,     0,     0,     0,
-       0,     0,     0,   805,   337,   359,     0,     0,     0,     0,
-       0,     0,   815,     0,     0,     0,   510,     0,     0,   818,
-       0,     0,     0,   456,   825,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   840,     0,   408,     0,     0,
-       0,     0,     0,     0,   408,     0,     0,     0,   162,     0,
-       0,     0,   510,   207,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   207,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   880,     0,     0,     0,
-       0,     0,     0,  -505,     0,   207,     1,     2,     3,     4,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   512,
+       0,     0,     0,     0,     0,     0,     1,     2,   203,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,   825,    25,    26,    27,    28,   408,     0,    29,     0,
-      30,    31,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   512,    25,    26,    27,    28,     0,     0,    29,   279,
+      30,   280,     0,     0,     0,     0,   512,     0,     0,     0,
+       0,  1507,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   281,    33,     0,
+      34,   360,    35,   282,     0,    37,    38,   283,     0,     0,
+     284,   285,   286,   287,    40,    41,     0,   288,   289,     0,
+       0,     0,     0,     0,     0,   290,     0,     0,     0,     0,
+       0,     0,     0,   318,     0,     0,     0,     0,     0,     0,
+     291,     0,  1069,     0,     0,     0,     0,     0,     0,   293,
+     294,   295,   296,   297,   298,     0,     0,     0,     0,     0,
+       0,     0,     0,  -127,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      32,     0,     0,    33,     0,    34,     0,    35,    36,     0,
-      37,    38,    39,     0,     0,     0,     0,     0,     0,    40,
-      41,     0,     0,     0,     0,     0,   247,     0,     0,     0,
-       0,   408,   207,     0,     0,     0,   958,   959,     0,   408,
-     582,     0,   408,   585,    42,     0,    43,     0,     0,   975,
-       0,     0,   359,     0,    44,     0,   615,     0,   207,     0,
-       0,     0,     0,     0,     0,     0,   990,     0,   991,     0,
-       0,     0,   995,     0,     0,   633,     0,     0,   337,     0,
-       0,     0,     0,     0,     0,   207,   510,   510,   510,   510,
-     510,   510,   510,   510,   510,   510,   510,   510,   510,   510,
-     510,   510,   510,   510,   408,     0,     0,     0,   408,   278,
-       0,   279,     0,     0,     0,     0,   207,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   207,     0,   510,
-       0,     0,   280,     0,     0,     0,     0,  1027,   642,   359,
-     136,   137,   282,     0,  1028,   283,   643,   285,   286,    40,
-      41,     0,   287,   288,     0,     0,     0,  1030,     0,  1031,
-     289,     0,   408,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1043,   290,     0,   644,     0,   645,   375,
-    1047,     0,     0,   292,   376,   294,   295,   296,   297,     0,
-       0,     0,  1083,   408,     0,  1084,   359,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   207,     0,     0,     0,
-       0,     0,     0,   591,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   510,     0,     0,
-       0,     0,     0,     0,     0,   408,     0,     0,   337,   359,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   510,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     317,     0,   510,     0,     0,     0,     0,     0,     0,     0,
-     341,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   377,   408,   408,     0,     0,     0,     0,     0,
-       0,     0,   207,     0,     0,     0,     0,     0,     0,     0,
-    1146,     0,   820,   359,     0,   359,     0,   510,     0,     0,
-       0,     0,     0,     0,   615,     0,   615,   615,     0,     0,
-       0,     0,     0,   615,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   859,   359,     0,     0,     0,   510,   359,
-       0,     0,     0,     0,     0,     0,     0,     0,   359,   359,
-     359,     0,   317,   510,     0,   527,     0,     0,     0,     0,
-       0,  1210,     0,     0,     0,     0,   359,     0,     0,     0,
-       0,   408,   902,     0,     0,   408,   905,   480,     0,     0,
-       0,     0,   907,     0,     0,     0,   207,     0,     0,     0,
-    1223,     0,     0,     0,     0,  1225,     0,     0,     0,     0,
-     337,   359,   408,  1229,   408,     0,     0,     0,   408,   201,
-       2,   202,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,  1254,     0,    25,    26,    27,     0,     0,
-     359,   615,     0,    30,     0,  1262,     0,     0,  1263,     0,
-    1264,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1273,  1274,    33,     0,    34,     0,
-      35,     0,     0,   203,    38,   337,   359,     0,     0,     0,
-     408,   408,     0,     0,     0,     0,  1287,     0,     0,     0,
-       0,     0,   377,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   510,     0,     0,     0,     0,   204,
-       0,     0,  1306,     0,     0,     0,     0,   267,     0,     0,
-       0,   408,     0,     0,     0,     0,     0,     0,     0,     0,
-     359,     0,     0,   510,     0,     0,   820,   359,     0,     0,
-       0,   615,     0,   615,     0,   510,     0,     0,     0,     0,
-       0,     0,     0,   615,     0,     0,     0,     8,     9,    10,
+       0,   410,   471,     2,   203,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,   410,   410,    25,    26,
+      27,     0,     0,     0,     0,     0,    30,   512,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   410,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    33,     0,    34,   512,    35,     0,
+       0,    37,    38,     0,     0,     0,     0,     0,     0,   512,
+       1,     2,   203,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,  -285,     0,    25,    26,    27,     0,
-       0,     0,     0,     0,    30,     0,   510,     0,     0,     0,
-       0,     0,     0,   727,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1372,     0,  1373,    33,     0,     0,
-       0,     0,    36,     0,   332,   333,    39,   207,  -285,  1382,
-       0,  1383,     0,    40,    41,     0,   820,     0,     0,     0,
-       0,   760,     0,     0,   408,     0,     0,     0,     0,  1390,
-     408,     0,     0,     0,   773,     0,     0,     0,   408,     0,
-     334,   760,     0,     0,     0,  1408,   510,     0,   109,     0,
-       0,   615,   615,  1411,   782,   783,  1229,     0,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,  -286,   804,   359,  1434,     0,
-       0,     0,     0,   408,     0,    30,   813,  1441,     0,   510,
-    1443,  1445,     0,   341,     0,     0,     0,     0,   773,     0,
-       0,   408,  1143,   510,   510,     0,     0,     0,    33,     0,
-       0,   359,     0,     0,     0,     0,     0,   408,  1155,  -286,
-     615,   615,  1160,     0,     0,     0,     0,  1473,     0,  1229,
-       0,     0,   359,   359,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1485,     0,     0,     0,   879,     0,
-       0,     0,     0,     0,     0,     0,   377,     2,   202,     4,
+      21,    22,    23,    24,     0,     0,    25,    26,    27,    28,
+       0,    -3,    29,   279,    30,  1055,  1056,     0,  1057,     0,
+     512,  1058,  1059,  1060,  1061,  1062,  1063,  1064,  1065,     0,
+       0,     0,  1066,     0,     0,     0,  1067,  1068,     0,    32,
+       0,   281,    33,     0,    34,     0,    35,   645,     0,    37,
+      38,   283,     0,     0,   284,   285,   286,   287,    40,    41,
+       0,   288,   289,     0,     0,     0,     0,     0,     0,   290,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   291,     0,  1069,     0,     0,   168,
+       0,     0,   512,   293,   294,   295,   296,   297,   298,     0,
+       0,     0,     0,  1070,     0,     0,     0,  -127,     0,     0,
+       1,     2,   203,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,     0,   512,    25,    26,    27,    28,
+       0,     0,    29,   279,    30,   280,     0,     0,     0,   512,
+     512,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,  -292,     0,
+       0,   281,    33,     0,    34,     0,    35,   282,    30,    37,
+      38,   283,     0,     0,   284,   285,   286,   287,    40,    41,
+       0,   288,   289,     0,     0,     0,     0,     0,     0,   290,
+       0,     0,     0,     0,     0,     0,    33,     0,     0,     0,
+       0,     0,     0,     0,   291,     0,    43,  -292,     0,     0,
+       0,     0,     0,   293,   294,   295,   296,   297,   298,     2,
+     203,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
+       0,   279,    30,   280,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,  -292,     0,    25,    26,    27,     0,     0,     0,   281,
+      33,    30,    34,     0,    35,   282,     0,    37,    38,   283,
+       0,     0,   284,   285,   286,   287,    40,    41,     0,   288,
+     289,     0,     0,     0,     0,     0,     0,   290,     0,    33,
+       0,     0,     0,     0,    36,     0,   333,   334,    39,     0,
+    -292,     0,   291,     0,   340,    40,    41,     0,     0,   775,
+       0,   293,   341,   295,   296,   297,   298,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   512,     0,
+       0,   639,     0,   335,     0,     0,     0,     0,     0,     0,
+       0,   630,     0,     0,     0,   512,     0,     2,   203,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,     0,     0,     0,     0,
-      30,   820,   408,  1222,     0,     0,   341,     0,     0,     0,
-       0,     0,     0,     0,   615,     0,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,    34,     0,    35,     0,     0,
-     203,    38,     0,     1,     2,     3,     4,     5,     6,     7,
+       0,     0,    25,    26,    27,     0,     0,     0,     0,   279,
+      30,   280,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
+       0,    25,    26,    27,     0,     0,     0,   281,    33,    30,
+      34,     0,    35,   282,     0,    37,    38,   283,   512,   512,
+     284,   285,   286,   287,    40,    41,     0,   288,   289,     0,
+       0,     0,     0,     0,     0,   290,     0,    33,     0,     0,
+       0,     0,     0,     0,   204,    38,     0,     0,     0,     0,
+     291,     0,   925,     0,     0,     0,     0,   775,     0,   293,
+     341,   295,   296,   297,   298,     2,   203,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,     0,   268,
+      25,    26,    27,     0,     0,     0,     0,   279,    30,   280,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,   359,    25,
-      26,    27,    28,     0,     0,    29,   266,    30,    31,     0,
-       0,     0,     0,     0,   622,     0,     0,     0,     0,     0,
-       0,   773,     0,   980,     0,     0,     0,    32,     0,   985,
-      33,     0,    34,     0,    35,    36,   994,    37,    38,    39,
-       0,     0,     0,     0,     0,     0,    40,    41,     0,     0,
-       0,     0,     0,   510,     0,     0,     0,     0,   337,     0,
+      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
+      26,    27,     0,     0,     0,   281,    33,    30,    34,     0,
+      35,   282,     0,    37,    38,   283,     0,     0,   284,   285,
+     286,   287,    40,    41,     0,   288,   289,     0,     0,     0,
+       0,     0,     0,   290,     0,    33,     0,     0,     0,     0,
+       0,     0,   204,    38,     0,     0,     0,     0,   291,     0,
+     925,     0,     0,     0,     0,   775,     0,   293,   596,   295,
+     296,   297,   298,     2,   203,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,     0,   625,    25,    26,
+      27,     0,     0,     0,     0,   279,    30,   280,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,  -293,     0,     0,     0,     0,
+       0,     0,     0,   281,    33,    30,    34,     0,    35,   282,
+       0,    37,    38,   283,     0,     0,   284,   285,   286,   287,
+      40,    41,     0,   288,   289,     0,     0,     0,     0,     0,
+       0,   290,     0,    33,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  -293,     0,   291,     0,   340,     0,
+       0,     0,     0,     0,     0,   293,   341,   295,   296,   297,
+     298,     2,   203,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
+       0,     0,     0,   279,    30,   280,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,     0,     0,    25,    26,    27,   489,   490,
+     491,   281,    33,    30,    34,     0,    35,   282,     0,    37,
+      38,   283,     0,     0,   284,   285,   286,   287,    40,    41,
+       0,   288,   289,     0,     0,     0,     0,     0,     0,   290,
+       0,    33,     0,     0,     0,     0,     0,     0,    37,    38,
+       0,     0,     0,     0,   291,     0,   925,     0,     0,     0,
+       0,     0,     0,   293,   341,   295,   296,   297,   298,     2,
+     203,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
+       0,   279,    30,   280,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,     0,     0,    25,    26,    27,     0,     0,     0,   281,
+      33,    30,    34,     0,    35,   282,     0,   204,    38,   283,
+       0,     0,   284,   285,   286,   287,    40,    41,     0,   288,
+     289,     0,     0,     0,     0,     0,     0,   290,     0,    33,
+       0,     0,     0,     0,   108,     0,    37,    38,     0,     0,
+       0,     0,   291,     0,  1013,     0,     0,     0,     0,     0,
+       0,   293,  1014,   295,   296,   297,   298,     2,   203,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+       0,     0,    25,    26,    27,     0,     0,     0,     0,   279,
+      30,   280,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
+       0,    25,    26,    27,     0,     0,     0,   281,    33,    30,
+      34,     0,    35,   282,     0,   204,    38,   283,     0,     0,
+     284,   285,   286,   287,    40,    41,     0,   288,   289,     0,
+       0,     0,     0,     0,     0,   290,     0,    33,     0,     0,
+       0,     0,     0,     0,    37,    38,     0,     0,     0,     0,
+     291,     0,   375,     0,     0,     0,     0,     0,     0,   293,
+     377,   295,   296,   297,   298,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
+       0,    25,    26,    27,    28,     0,     0,    29,     0,    30,
+      31,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
+      25,    26,    27,     0,    32,     0,     0,    33,    30,    34,
+       0,    35,    36,     0,    37,    38,    39,     0,     0,     0,
+       0,     0,     0,    40,    41,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    33,     0,     0,     0,
+       0,     0,     0,   204,    38,     0,     0,     0,     0,    42,
+       0,    43,     0,     0,     0,  -518,     0,     0,     0,    44,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,     0,     0,    25,    26,    27,    28,
+       0,     0,    29,     0,    30,    31,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     510,    42,     0,    43,     0,     0,     0,   359,     0,  1010,
-    1011,    44,   341,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   341,     0,     0,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,     0,
-       0,     0,     0,     0,     0,   359,   359,    30,     0,     0,
-       0,     0,     0,   510,   510,     0,     0,  1041,     0,     0,
-       0,   377,     0,     0,     0,     0,     0,     0,     0,     0,
-      33,     0,     0,     0,     1,     2,   202,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,    28,     0,     0,    29,   278,    30,  1050,
-    1051,     0,  1052,     0,     0,  1053,  1054,  1055,  1056,  1057,
-    1058,  1059,  1060,     0,  1061,     0,     0,  1062,    32,     0,
-     280,    33,     0,    34,     0,    35,   642,   317,    37,    38,
-     282,     0,     0,   283,   284,   285,   286,    40,    41,     0,
-     287,   288,  1124,  1125,     0,     0,     0,     0,   289,   377,
-       0,     0,   359,     0,     0,   985,     0,     0,  1134,     0,
-     760,     0,   290,     0,  1063,     0,   278,   167,   279,     0,
-       0,   292,   293,   294,   295,   296,   297,     0,     0,  1150,
-       0,     0,     0,     0,     0,  -126,     0,     0,     0,   280,
-    1165,     0,     0,     0,     0,   281,     0,     0,     0,   282,
-       0,     0,   283,   284,   285,   286,    40,    41,     0,   287,
-     288,     0,   377,     0,  1183,     0,     0,   289,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,  1205,
-       0,   290,   408,   374,     0,     0,   375,     0,     0,     0,
-     292,   376,   294,   295,   296,   297,     0,   278,  1214,   279,
-    1051,     0,  1052,   408,   408,  1053,  1054,  1055,  1056,  1057,
-    1058,  1059,  1060,     0,  1061,     0,     0,  1062,    32,     0,
-     280,     0,     0,     0,     0,   408,   642,     0,     0,     0,
-     282,     0,     0,   283,   284,   285,   286,    40,    41,     0,
-     287,   288,     0,     0,   985,     0,     0,     0,   289,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   290,   879,   374,     0,     0,   167,     0,     0,
-       0,   292,   376,   294,   295,   296,   297,     0,  1265,  1266,
-       0,     0,     1,     2,   202,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,    28,     0,     0,    29,   278,    30,   279,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   280,    33,
-       0,    34,     0,    35,   281,     0,    37,    38,   282,     0,
-       0,   283,   284,   285,   286,    40,    41,   985,   287,   288,
-       0,     0,     0,     0,     0,     0,   289,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     290,     0,  1063,     0,     0,     0,     0,     0,     0,   292,
-     293,   294,   295,   296,   297,     0,     0,     0,     0,     0,
-       0,     0,     0,  -126,     1,     2,   202,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,    28,     0,     0,    29,   278,    30,   279,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    32,
+       0,     0,    33,     0,    34,     0,    35,    36,     0,    37,
+      38,    39,     0,     0,     0,     0,     0,     0,    40,    41,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     280,    33,     0,    34,     0,    35,   281,     0,    37,    38,
-     282,     0,     0,   283,   284,   285,   286,    40,    41,     0,
-     287,   288,     0,     0,     0,     0,     0,     0,   289,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1420,     0,
-       0,     0,   290,     0,    43,     0,     0,     0,     0,     0,
-       0,   292,   293,   294,   295,   296,   297,     2,   202,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,     0,     0,     0,   278,
-      30,   279,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1477,     0,   280,    33,     0,    34,     0,    35,   281,     0,
-      37,    38,   282,     0,     0,   283,   284,   285,   286,    40,
-      41,     0,   287,   288,     0,     0,     0,     0,     0,     0,
-     289,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   290,   317,   339,     0,     0,     0,
-       0,   772,     0,   292,   340,   294,   295,   296,   297,     2,
-     202,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
-       0,   278,    30,   279,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   280,    33,     0,    34,     0,    35,
-     281,     0,    37,    38,   282,     0,     0,   283,   284,   285,
-     286,    40,    41,     0,   287,   288,     0,     0,     0,     0,
-       0,     0,   289,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   290,     0,   921,     0,
-       0,     0,     0,   772,     0,   292,   340,   294,   295,   296,
-     297,     2,   202,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-       0,     0,     0,   278,    30,   279,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   280,    33,     0,    34,
-       0,    35,   281,     0,    37,    38,   282,     0,     0,   283,
-     284,   285,   286,    40,    41,     0,   287,   288,     0,     0,
-       0,     0,     0,     0,   289,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   290,     0,
-     921,     0,     0,     0,     0,   772,     0,   292,   593,   294,
-     295,   296,   297,     2,   202,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,     0,     0,     0,     0,   278,    30,   279,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   280,    33,
-       0,    34,     0,    35,   281,     0,    37,    38,   282,     0,
-       0,   283,   284,   285,   286,    40,    41,     0,   287,   288,
-       0,     0,     0,     0,     0,     0,   289,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     290,     0,   339,     0,     0,     0,     0,     0,     0,   292,
-     340,   294,   295,   296,   297,     2,   202,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,     0,     0,     0,   278,    30,   279,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     280,    33,     0,    34,     0,    35,   281,     0,    37,    38,
-     282,     0,     0,   283,   284,   285,   286,    40,    41,     0,
-     287,   288,     0,     0,     0,     0,     0,     0,   289,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   290,     0,   921,     0,     0,     0,     0,     0,
-       0,   292,   340,   294,   295,   296,   297,     2,   202,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,     0,     0,     0,   278,
-      30,   279,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   280,    33,     0,    34,     0,    35,   281,     0,
-     203,    38,   282,     0,     0,   283,   284,   285,   286,    40,
-      41,     0,   287,   288,     0,     0,     0,     0,     0,     0,
-     289,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   290,     0,  1008,     0,     0,     0,
-       0,     0,     0,   292,  1009,   294,   295,   296,   297,     2,
-     202,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
-       0,   278,    30,   279,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   280,    33,     0,    34,     0,    35,
-     281,     0,   203,    38,   282,     0,     0,   283,   284,   285,
-     286,    40,    41,     0,   287,   288,     0,     0,     0,     0,
-       0,     0,   289,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   290,     0,   374,     0,
-       0,     0,     0,     0,     0,   292,   376,   294,   295,   296,
-     297,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
-      28,     0,     0,    29,     0,    30,    31,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    32,     0,     0,    33,     0,
-      34,     0,    35,    36,     0,    37,    38,    39,     0,     0,
-       0,     0,     0,     0,    40,    41,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    42,
-       0,    43,     0,     0,     0,  -509,     0,     0,     0,    44,
-       1,     2,   202,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,  -285,     0,    25,    26,    27,    28,
-       0,     0,    29,     0,    30,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    33,     0,    34,
-       0,    35,     0,     0,    37,    38,     0,     0,  -285,     1,
-       2,   202,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,    28,     0,
-      43,    29,     0,    30,     0,     0,     0,     0,   109,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
-      35,     0,     0,    37,    38,     2,   202,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,     0,     0,     0,     0,    30,    43,
-       0,     0,     0,     0,     0,     0,     0,   109,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,    34,     0,    35,    36,     0,   203,    38,
-      39,     0,     0,     0,     0,     0,     0,    40,    41,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    42,     0,   204,     0,     0,     0,     0,     0,
-       0,     0,   205,     2,   202,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,     0,     0,     0,     0,     0,    30,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,    34,     0,    35,     0,     0,    37,    38,     0,     0,
-       2,   202,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
-       0,  -390,   679,    30,     0,     0,     0,     0,     0,     0,
-     627,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
-      35,     0,     0,    37,    38,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1348,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   679,
-       0,     0,     0,     0,     0,     0,     0,   627,     2,   202,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,     0,    25,    26,    27,     0,     0,     0,     0,
-       0,    30,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-       0,    25,    26,    27,    33,     0,    34,     0,    35,    30,
-       0,    37,    38,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    33,  1350,     0,     0,     0,   108,     0,    37,
-      38,     0,     0,     0,     0,     0,     0,   679,     0,     0,
-       0,     0,     0,     0,     0,   627,     2,   202,     4,     5,
+       0,     0,     0,     0,    42,     0,    43,     0,     0,     0,
+       0,     0,     0,     0,    44,   202,     2,   203,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
@@ -2491,363 +2472,366 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    33,     0,    34,
+       0,    35,    36,     0,   204,    38,    39,     0,     0,     0,
+       0,     0,     0,    40,    41,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    42,
+       0,   205,     0,     0,     0,     0,     0,     0,     0,   206,
+       1,     2,   203,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,  -292,     0,    25,    26,    27,    28,
+       0,     0,    29,     0,    30,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    33,     0,    34,     0,    35,     0,     0,    37,
-      38,     2,   202,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-       0,     0,     0,     0,    30,   679,     0,     0,     0,     0,
-       0,     0,     0,   627,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    33,     0,    34,
-       0,    35,     0,     0,    37,    38,     2,   202,     4,     5,
+      38,     0,     0,  -292,     0,     1,     2,   203,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-       0,    25,    26,    27,     0,     0,     0,     0,     0,    30,
-     592,     0,     0,     0,     0,     0,     0,     0,   627,     0,
+       0,    25,    26,    27,    28,     0,    43,    29,     0,    30,
+       0,     0,     0,     0,   109,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    33,     0,    34,     0,    35,     0,     0,   203,
-      38,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,     0,     0,     0,   278,    30,   279,
-       0,     0,     0,     0,     0,   204,     0,     0,     0,     0,
-       0,     0,     0,   267,     0,     0,     0,     0,     0,     0,
-     280,    33,     0,     0,     0,     0,   281,     0,    37,    38,
-     282,     0,     0,   283,   284,   285,   286,    40,    41,     0,
-     287,   288,     0,     0,     0,     0,     0,     0,   289,     0,
+       0,     0,     0,     0,     0,     0,     0,    33,     0,    34,
+       0,    35,     0,     0,    37,    38,   202,     2,   203,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+       0,     0,    25,    26,    27,     0,     0,     0,     0,     0,
+      30,    43,     0,     0,     0,     0,     0,     0,     0,   109,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   290,     0,   519,     0,     0,   167,     0,     0,
-       0,   292,   293,   294,   295,   296,   297,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-       0,     0,     0,   278,    30,   279,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   280,    33,     0,     0,
-       0,     0,   281,     0,    37,    38,   282,     0,     0,   283,
-     284,   285,   286,    40,    41,     0,   287,   288,     0,     0,
-       0,     0,     0,     0,   289,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   290,     0,
-     592,    -3,     0,     0,     0,     0,     0,   292,   593,   294,
-     295,   296,   297,     8,     9,    10,    11,    12,    13,    14,
+       0,     0,     0,     0,     0,     0,     0,     0,    33,     0,
+      34,     0,    35,     0,     0,   204,    38,     2,   203,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,     0,     0,     0,   278,
-      30,   279,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   280,    33,     0,     0,     0,     0,   642,     0,
-      37,    38,   282,     0,     0,   283,   284,   285,   286,    40,
-      41,     0,   287,   288,     0,     0,     0,     0,     0,     0,
-     289,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   290,   -33,   757,     0,     0,     0,
-       0,     0,     0,   292,   293,   294,   295,   296,   297,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,     0,     0,     0,     0,   278,    30,   279,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   280,    33,
-       0,     0,     0,     0,   281,     0,    37,    38,   282,     0,
-       0,   283,   284,   285,   286,    40,    41,     0,   287,   288,
-       0,     0,     0,     0,     0,     0,   289,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     290,     0,   291,     0,     0,     0,     0,     0,     0,   292,
-     293,   294,   295,   296,   297,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
-       0,   278,    30,   279,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   280,    33,     0,     0,     0,     0,
-     281,     0,    37,    38,   282,     0,     0,   283,   284,   285,
-     286,    40,    41,     0,   287,   288,     0,     0,     0,     0,
-       0,     0,   289,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   290,     0,   154,     0,
-       0,     0,     0,     0,     0,   292,   293,   294,   295,   296,
-     297,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,     0,     0,     0,   278,    30,   279,
+       0,     0,    25,    26,    27,     0,     0,     0,     0,     0,
+      30,     0,   205,     0,     0,     0,     0,     0,     0,     0,
+     268,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    33,     0,
+      34,     0,    35,    36,     0,   204,    38,    39,     0,     0,
+       0,     0,     0,     0,    40,    41,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     280,    33,     0,     0,     0,     0,   281,     0,    37,    38,
-     282,     0,     0,   283,   284,   285,   286,    40,    41,     0,
-     287,   288,     0,     0,     0,     0,     0,     0,   289,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   290,     0,   592,     0,     0,     0,     0,     0,
-       0,   292,   593,   294,   295,   296,   297,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-       0,     0,     0,   278,    30,   279,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   280,    33,     0,     0,
-       0,     0,   281,     0,    37,    38,   282,     0,     0,   283,
-     284,   285,   286,    40,    41,     0,   287,   288,     0,     0,
-       0,     0,     0,     0,   289,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   290,     0,
-     374,     0,     0,     0,     0,     0,     0,   292,   376,   294,
-     295,   296,   297,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    -285,     0,    25,    26,    27,     0,     0,     0,     0,     0,
-      30,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,    36,     0,
-     332,   333,    39,     0,  -285,     0,     0,     0,     0,    40,
-      41,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,   636,     0,   334,     0,    30,     0,
-       0,     0,     0,     0,   627,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,     0,     0,     0,    36,     0,    37,    38,
-      39,     0,     0,     0,     0,     0,     0,    40,    41,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,     0,    42,     0,   154,     0,    30,     0,     0,     0,
-       0,     0,    44,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,     0,     0,     0,    36,     0,    37,    38,    39,     0,
-       0,     0,     0,     0,     0,    40,    41,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-      42,     0,    43,     0,    30,     0,     0,     0,     0,     0,
-      44,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    33,     0,     0,
-       0,     0,    36,     0,   203,    38,    39,     0,     0,     0,
-       0,     0,     0,    40,    41,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,     0,    42,     0,
-     266,     0,    30,     0,     0,     0,     0,     0,   205,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-      36,     0,   332,   333,    39,     0,     0,     0,     0,     0,
-       0,    40,    41,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,   636,     0,   334,     0,
-      30,     0,     0,     0,     0,     0,   627,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,    36,     0,
-     332,   333,    39,     0,     0,     0,     0,     0,     0,    40,
-      41,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,  -285,     0,
-      25,    26,    27,     0,     0,     0,   334,     0,    30,     0,
-       0,     0,     0,     0,   109,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,     0,     0,     0,     0,     0,    37,    38,
-       0,     0,  -285,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    -285,     0,    25,    26,    27,     0,     0,     0,     0,     0,
-      30,     0,   636,     0,   334,     0,     0,     0,     0,     0,
-       0,     0,   109,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
-      37,    38,     0,     0,  -285,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
-       0,     0,    30,   448,   636,     0,   334,     0,     0,     0,
-       0,     0,     0,     0,   627,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-       0,     0,    37,    38,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,     0,    25,    26,    27,     0,     0,     0,     0,
-       0,    30,   448,     0,     0,     0,     0,     0,   449,     0,
-       0,     0,   703,     0,     0,     0,   109,     0,     0,     0,
-       0,     0,     0,     0,    33,     0,     0,     0,     0,     0,
-       0,    37,    38,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    -285,     0,    25,    26,    27,     0,     0,     0,     0,     0,
-      30,     0,     0,     0,     0,     0,     0,   449,     0,     0,
-       0,   937,     0,     0,     0,   109,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
-      37,    38,     0,     0,  -285,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
-       0,     0,    30,   448,     0,     0,   334,     0,     0,     0,
-       0,     0,     0,     0,   109,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-       0,     0,    37,    38,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,     0,    25,    26,    27,     0,     0,     0,     0,
-       0,    30,     0,     0,     0,     0,     0,     0,   449,     0,
-       0,     0,  1219,     0,     0,     0,   109,     0,     0,     0,
-       0,     0,     0,     0,    33,     0,     0,     0,     0,   108,
-       0,    37,    38,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,     0,     0,     0,     0,
-      30,   448,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,   109,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
-      37,    38,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-       0,    25,    26,    27,     0,     0,     0,     0,     0,    30,
-       0,     0,     0,     0,     0,     0,   449,     0,     0,     0,
-       0,     0,     0,     0,   109,     0,     0,     0,     0,     0,
-       0,     0,    33,     0,     0,     0,     0,     0,     0,    37,
-      38,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,     0,     0,     0,     0,    30,     0,
-       0,     0,     0,   636,     0,   334,     0,     0,     0,     0,
-       0,     0,     0,   109,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,     0,     0,     0,     0,     0,    37,    38,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
-      26,    27,     0,     0,     0,     0,     0,    30,     0,     0,
-       0,     0,   636,     0,   334,     0,     0,     0,     0,     0,
-       0,     0,   627,     0,     0,     0,     0,     0,     0,     0,
-      33,     0,     0,     0,     0,     0,     0,    37,    38,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,     0,     0,     0,     0,     0,    30,     0,     0,     0,
-       0,     0,     0,   253,     0,     0,     0,     0,     0,     0,
-       0,   109,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,     0,     0,     0,     0,     0,    37,    38,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
-       0,     0,     0,     0,     0,    30,     0,     0,     0,     0,
-       0,     0,   154,     0,     0,     0,     0,     0,     0,     0,
-     109,     0,     0,     0,     0,     0,     0,     0,    33,     0,
-       0,     0,     0,     0,     0,   203,    38,     8,     9,    10,
+      42,     0,   205,     0,     0,     0,     0,     0,     0,     0,
+     206,     2,   203,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
        0,     0,     0,     0,    30,     0,     0,     0,     0,     0,
-       0,   266,     0,     0,     0,     0,     0,     0,     0,   267,
-       0,     0,     0,     0,     0,     0,     0,    33,     0,     0,
-       0,     0,     0,     0,    37,    38,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
-       0,     0,     0,    30,     0,     0,     0,     0,     0,     0,
-     253,     0,     0,     0,     0,     0,     0,     0,   627,     0,
-       0,     0,     0,     0,     0,     0,    33,     0,     0,     0,
-       0,     0,     0,    37,    38,     8,     9,    10,    11,    12,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    33,     0,    34,     0,    35,     0,     0,    37,
+      38,     2,   203,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
+       0,     0,     0,     0,    30,  -397,   682,     0,     0,     0,
+       0,     0,     0,     0,   630,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    33,     0,    34,     0,    35,     0,     0,    37,
+      38,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1360,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   682,     0,     0,     0,
+       0,     0,     0,     0,   630,     2,   203,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
+      25,    26,    27,     0,     0,     0,     0,     0,    30,     0,
+       0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,     0,     0,    25,    26,    27,    33,     0,    34,     0,
+      35,    30,     0,    37,    38,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1362,     0,     0,     0,    33,
+       0,     0,     0,     0,    36,     0,   333,   334,    39,     0,
+     682,     0,     0,     0,     0,    40,    41,     0,   630,     2,
+     203,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,     0,   335,    25,    26,    27,     0,     0,     0,
+       0,   109,    30,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      33,     0,    34,     0,    35,     0,     0,   204,    38,     2,
+     203,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
-       0,     0,    30,     0,     0,     0,     0,     0,     0,   334,
-       0,     0,     0,     0,     0,     0,     0,   627,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-       0,     0,    37,    38,     8,     9,    10,    11,    12,    13,
+       0,     0,    30,     0,   267,     0,     0,     0,     0,     0,
+       0,     0,   625,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      33,     0,    34,     0,    35,     0,     0,    37,    38,     2,
+     203,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
+       0,     0,    30,     0,   682,     0,     0,     0,     0,     0,
+       0,     0,   630,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      33,     0,    34,     0,    35,     0,     0,    37,    38,     2,
+     203,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
+       0,     0,    30,     0,   595,     0,     0,     0,     0,     0,
+       0,     0,   630,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      33,     0,    34,     0,    35,     0,     0,   204,    38,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
+      27,     0,     0,     0,     0,   279,    30,   280,     0,     0,
+       0,     0,     0,     0,   205,     0,     0,     0,     0,     0,
+       0,     0,   268,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   281,    33,     0,     0,     0,     0,   282,
+       0,    37,    38,   283,     0,     0,   284,   285,   286,   287,
+      40,    41,     0,   288,   289,     0,     0,     0,     0,     0,
+       0,   290,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   291,     0,   521,     0,
+       0,   168,     0,     0,     0,   293,   294,   295,   296,   297,
+     298,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
+      25,    26,    27,     0,     0,     0,     0,   279,    30,   280,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,  -292,     0,
+      25,    26,    27,     0,     0,   281,    33,     0,    30,     0,
+       0,   282,     0,    37,    38,   283,     0,     0,   284,   285,
+     286,   287,    40,    41,     0,   288,   289,     0,     0,     0,
+       0,     0,     0,   290,     0,     0,    33,     0,     0,     0,
+       0,    36,     0,   333,   334,    39,     0,  -292,   291,     0,
+     595,    -3,    40,    41,     0,     0,     0,   293,   596,   295,
+     296,   297,   298,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+     335,     0,    25,    26,    27,     0,     0,     0,   109,   279,
+      30,   280,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+    -292,     0,    25,    26,    27,     0,     0,   281,    33,     0,
+      30,     0,     0,   645,     0,    37,    38,   283,     0,     0,
+     284,   285,   286,   287,    40,    41,     0,   288,   289,     0,
+       0,     0,     0,     0,     0,   290,     0,     0,    33,     0,
+       0,     0,     0,     0,     0,    37,    38,     0,     0,  -292,
+     291,   -34,   760,     0,     0,     0,     0,     0,     0,   293,
+     294,   295,   296,   297,   298,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,   335,     0,    25,    26,    27,     0,     0,     0,
+     109,   279,    30,   280,     0,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,     0,     0,    25,    26,    27,     0,     0,   281,
+      33,     0,    30,     0,     0,   282,     0,    37,    38,   283,
+       0,     0,   284,   285,   286,   287,    40,    41,     0,   288,
+     289,     0,     0,     0,     0,     0,     0,   290,     0,     0,
+      33,     0,     0,     0,     0,   108,     0,    37,    38,     0,
+       0,     0,   291,     0,   292,     0,     0,     0,     0,     0,
+       0,   293,   294,   295,   296,   297,   298,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    43,     0,    25,    26,    27,     0,
+       0,     0,   109,   279,    30,   280,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
+       0,   281,    33,     0,    30,   450,     0,   282,     0,    37,
+      38,   283,     0,     0,   284,   285,   286,   287,    40,    41,
+       0,   288,   289,     0,     0,     0,     0,     0,     0,   290,
+       0,     0,    33,     0,     0,     0,     0,     0,     0,    37,
+      38,     0,     0,     0,   291,     0,   154,     0,     0,     0,
+       0,     0,     0,   293,   294,   295,   296,   297,   298,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,   451,     0,    25,    26,
+      27,     0,     0,     0,   109,   279,    30,   280,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
+      27,     0,     0,   281,    33,     0,    30,     0,     0,   282,
+       0,    37,    38,   283,     0,     0,   284,   285,   286,   287,
+      40,    41,     0,   288,   289,     0,     0,     0,     0,     0,
+       0,   290,     0,     0,    33,     0,     0,     0,     0,     0,
+       0,    37,    38,     0,     0,     0,   291,     0,   595,     0,
+       0,     0,     0,     0,     0,   293,   596,   295,   296,   297,
+     298,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,   254,     0,
+      25,    26,    27,     0,     0,     0,   109,   279,    30,   280,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
+      26,    27,     0,     0,     0,   281,    33,    30,     0,     0,
+       0,   282,     0,    37,    38,   283,     0,     0,   284,   285,
+     286,   287,    40,    41,     0,   288,   289,     0,     0,     0,
+       0,     0,     0,   290,     0,    33,     0,     0,     0,     0,
+      36,     0,   204,    38,    39,     0,     0,     0,   291,     0,
+     375,    40,    41,     0,     0,     0,     0,   293,   377,   295,
+     296,   297,   298,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    42,     0,   267,
+       0,     0,     0,     0,     0,     0,     0,   206,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
+       0,     0,     0,     0,     0,    30,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,  -292,     0,    25,    26,    27,     0,
+       0,     0,     0,    33,    30,     0,     0,     0,    36,     0,
+     333,   334,    39,     0,     0,     0,     0,     0,     0,    40,
+      41,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    33,     0,     0,     0,     0,     0,     0,    37,
+      38,     0,     0,  -292,     0,   639,     0,   335,     0,     0,
+       0,     0,     0,     0,     0,   630,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   639,     0,   335,     0,     0,     0,
+       0,     0,     0,     0,   109,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,  -292,     0,    25,    26,    27,     0,     0,     0,
+       0,     0,    30,     0,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,     0,     0,    25,    26,    27,     0,     0,     0,     0,
-       0,    30,     0,     0,     0,     0,     0,     0,   449,     0,
-       0,     0,     0,     0,     0,     0,   109,     0,     0,     0,
+      33,    30,   450,     0,     0,     0,     0,    37,    38,     0,
+       0,  -292,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    33,
+       0,    25,    26,    27,     0,     0,    37,    38,     0,    30,
+     450,     0,   639,     0,   335,     0,     0,     0,     0,     0,
+       0,     0,   630,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    33,     0,     0,
+       0,     0,     0,   451,    37,    38,     0,   941,     0,     0,
+       0,   109,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
+       0,    25,    26,    27,     0,     0,     0,     0,     0,    30,
+       0,   451,     0,     0,     0,  1227,     0,     0,     0,   109,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    33,     0,    25,
+      26,    27,     0,     0,    37,    38,     0,    30,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
+      27,     0,     0,     0,     0,    33,    30,     0,     0,   639,
+       0,   335,    37,    38,     0,     0,     0,     0,     0,   109,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    33,     0,     0,     0,     0,     0,
-       0,   203,    38,     8,     9,    10,    11,    12,    13,    14,
+       0,    37,    38,     0,     0,     0,     0,   639,     0,   335,
+       0,     0,     0,     0,     0,     0,     0,   630,     0,     0,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,     0,   154,    25,
+      26,    27,     0,     0,     0,     0,   109,    30,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
+      27,     0,     0,     0,     0,    33,    30,     0,     0,     0,
+       0,     0,   204,    38,     0,     0,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    33,     0,    25,    26,    27,     0,
+       0,    37,    38,     0,    30,     0,     0,     0,     0,   267,
+       0,     0,     0,     0,     0,     0,     0,   268,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    33,     0,     0,     0,     0,     0,   254,    37,
+      38,     0,     0,     0,     0,     0,   630,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
+       0,     0,     0,     0,    30,     0,   335,     0,     0,     0,
+       0,     0,     0,     0,   630,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    33,     0,    25,    26,    27,     0,     0,    37,
+      38,     0,    30,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,     0,     0,    25,    26,    27,     0,     0,     0,     0,
+      33,    30,     0,     0,     0,     0,   451,   204,    38,     0,
+       0,     0,     0,     0,   109,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
+       0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
+       0,     0,     0,     0,   267,     0,     0,     0,     0,     0,
+       0,     0,   625,     0,     0,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,     0,   595,    25,    26,    27,     0,     0,     0,
+       0,   630,    30,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,     0,     0,    25,    26,    27,     0,     0,     0,     0,
+      33,    30,     0,     0,     0,     0,     0,    37,    38,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
+       0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
+       0,     0,     0,     0,   335,     0,     0,     0,     0,     0,
+       0,     0,   109,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
+       0,   109,     2,   203,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
+       0,     0,     0,     0,     0,    30,     0,     0,   279,     0,
+     280,  1056,     0,  1057,     0,     0,  1058,  1059,  1060,  1061,
+    1062,  1063,  1064,  1065,     0,     0,  1540,  1066,     0,     0,
+       0,  1067,  1068,    33,    32,    34,   281,    35,     0,     0,
+      37,    38,   645,     0,     0,     0,   283,     0,     0,   284,
+     285,   286,   287,    40,    41,     0,   288,   289,     0,     0,
+       0,     0,     0,     0,   290,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  -410,     0,     0,   291,
+       0,   375,     0,     0,   168,     0,     0,     0,   293,   377,
+     295,   296,   297,   298,     0,     0,     0,     0,  1070,     0,
+       0,   279,  -127,   280,  1056,     0,  1057,     0,     0,  1058,
+    1059,  1060,  1061,  1062,  1063,  1064,  1065,     0,     0,     0,
+    1066,     0,     0,     0,  1067,  1068,     0,    32,     0,   281,
+       0,     0,     0,     0,     0,   645,     0,     0,     0,   283,
+       0,     0,   284,   285,   286,   287,    40,    41,     0,   288,
+     289,     0,     0,     0,     0,     0,     0,   290,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   291,     0,   375,     0,     0,   168,     0,     0,
+       0,   293,   377,   295,   296,   297,   298,     0,     0,     0,
+       0,  1070,     0,     0,   279,  -127,   280,  1056,     0,  1057,
+    1410,  1411,  1058,  1059,  1060,  1061,  1062,  1063,  1064,  1065,
+       0,     0,  1540,  1066,     0,     0,     0,  1067,  1068,     0,
+      32,     0,   281,     0,     0,     0,     0,     0,   645,     0,
+       0,     0,   283,     0,     0,   284,   285,   286,   287,    40,
+      41,     0,   288,   289,     0,     0,     0,     0,     0,     0,
+     290,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   291,     0,   375,     0,     0,
+     168,     0,     0,     0,   293,   377,   295,   296,   297,   298,
+     279,     0,   280,  1056,  1070,  1057,  1410,  1411,  1058,  1059,
+    1060,  1061,  1062,  1063,  1064,  1065,     0,     0,     0,  1066,
+       0,     0,     0,  1067,  1068,     0,    32,     0,   281,     0,
+       0,     0,     0,     0,   645,     0,     0,     0,   283,     0,
+       0,   284,   285,   286,   287,    40,    41,     0,   288,   289,
+       0,     0,     0,     0,     0,     0,   290,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   291,     0,   375,     0,     0,   168,     0,     0,     0,
+     293,   377,   295,   296,   297,   298,   279,     0,   280,  1056,
+    1070,  1057,     0,     0,  1058,  1059,  1060,  1061,  1062,  1063,
+    1064,  1065,     0,     0,     0,  1066,     0,     0,     0,  1067,
+    1068,     0,    32,     0,   281,     0,     0,     0,     0,     0,
+     645,     0,     0,     0,   283,     0,     0,   284,   285,   286,
+     287,    40,    41,     0,   288,   289,     0,     0,     0,     0,
+       0,     0,   290,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   291,     0,   375,
+       0,     0,   168,     0,     0,     0,   293,   377,   295,   296,
+     297,   298,     0,     0,     0,     0,  1070,     2,   203,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
        0,     0,    25,    26,    27,     0,     0,     0,     0,     0,
-      30,     0,     0,     0,     0,     0,     0,   266,     0,     0,
-       0,     0,     0,     0,     0,   622,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
-      37,    38,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-       0,    25,    26,    27,     0,     0,     0,     0,     0,    30,
-       0,     0,     0,     0,     0,     0,   592,     0,     0,     0,
-       0,     0,     0,     0,   627,     0,     0,     0,     0,     0,
-       0,     0,    33,     0,     0,     0,     0,     0,     0,    37,
-      38,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,     0,     0,     0,     0,    30,     0,
-       0,     0,     0,     0,     0,   334,     0,     0,     0,     0,
-       0,     0,     0,   109,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,     0,     0,     0,     0,     0,    37,    38,
-       2,   202,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
-       0,     0,     0,    30,    43,     0,     0,     0,     0,     0,
-       0,     0,   109,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
-      35,     0,     0,    37,    38,     0,   278,     0,   279,  1051,
-       0,  1052,     0,     0,  1053,  1054,  1055,  1056,  1057,  1058,
-    1059,  1060,  1507,  1061,     0,     0,  1062,    32,     0,   280,
-       0,     0,     0,     0,     0,   642,     0,     0,  -403,   282,
-       0,     0,   283,   284,   285,   286,    40,    41,     0,   287,
-     288,     0,     0,     0,     0,     0,     0,   289,     0,     0,
+      30,     0,     0,   279,     0,   280,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   290,     0,   374,     0,     0,   167,     0,     0,     0,
-     292,   376,   294,   295,   296,   297,     0,   278,     0,   279,
-    1051,     0,  1052,     0,  -126,  1053,  1054,  1055,  1056,  1057,
-    1058,  1059,  1060,     0,  1061,     0,     0,  1062,    32,     0,
-     280,     0,     0,     0,     0,     0,   642,     0,     0,     0,
-     282,     0,     0,   283,   284,   285,   286,    40,    41,     0,
-     287,   288,     0,     0,     0,     0,     0,     0,   289,     0,
+       0,     0,   279,     0,   280,     0,     0,     0,    33,     0,
+      34,   281,    35,     0,     0,    37,    38,   282,     0,     0,
+       0,   283,     0,     0,   284,   285,   286,   287,    40,    41,
+     281,   288,   289,     0,     0,     0,   282,  1319,     0,   290,
+     283,     0,     0,   284,   285,   286,   287,    40,    41,     0,
+     288,   289,     0,     0,   291,     0,   375,     0,   290,     0,
+     279,   775,   280,   293,   377,   295,   296,   297,   298,     0,
+       0,     0,     0,   291,     0,   375,     0,     0,   986,   279,
+       0,   280,   293,   377,   295,   296,   297,   298,   281,     0,
+       0,     0,     0,     0,   282,     0,     0,     0,   283,     0,
+       0,   284,   285,   286,   287,    40,    41,   281,   288,   289,
+       0,     0,     0,   282,     0,     0,   290,   283,     0,     0,
+     284,   285,   286,   287,    40,    41,     0,   288,   289,     0,
+       0,   291,     0,   375,     0,   290,     0,   279,     0,   280,
+     293,   377,   295,   296,   297,   298,     0,     0,     0,     0,
+     291,     0,   375,     0,     0,     0,   279,     0,   280,   293,
+     729,   295,   296,   297,   298,   281,     0,     0,     0,     0,
+       0,   645,     0,     0,     0,   283,     0,     0,   284,   285,
+     286,   287,    40,    41,   281,   288,   289,     0,     0,     0,
+     282,     0,     0,   290,   283,     0,     0,   284,   285,   286,
+     287,    40,    41,     0,   288,   289,     0,     0,   291,     0,
+     779,     0,   290,     0,   279,     0,   280,   293,   377,   295,
+     296,   297,   298,     0,     0,     0,     0,   291,     0,   375,
+       0,     0,     0,   279,     0,   280,   293,   821,   295,   296,
+     297,   298,   281,     0,     0,     0,     0,     0,   282,     0,
+       0,     0,   283,     0,     0,   284,   285,   286,   287,    40,
+      41,   281,   288,   289,     0,     0,     0,   282,     0,     0,
+     290,   283,     0,     0,   284,   285,   286,   287,    40,    41,
+       0,   288,   289,     0,     0,   291,     0,     0,     0,   290,
+       0,   279,     0,   280,   293,   377,   295,   296,   297,   298,
+       0,     0,     0,     0,   514,     0,     0,     0,     0,     0,
+       0,     0,     0,   293,   377,   295,   296,   297,   298,   281,
+       0,     0,     0,     0,     0,   282,     0,     0,     0,   283,
+       0,     0,   284,   285,   286,   287,    40,    41,     0,   288,
+     289,     0,     0,     0,     0,     0,     0,   290,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   290,     0,   374,     0,     0,   167,     0,     0,
-       0,   292,   376,   294,   295,   296,   297,     0,     0,     0,
-       0,     0,     0,     0,     0,  -126,     2,   202,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-       0,    25,    26,    27,     0,     0,     0,     0,     0,    30,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
-      26,    27,    33,     0,    34,     0,    35,    30,     0,    37,
-      38,     0,   278,     0,   279,  1051,     0,  1052,  1394,  1395,
-    1053,  1054,  1055,  1056,  1057,  1058,  1059,  1060,  1507,  1061,
-      33,  1307,  1062,    32,     0,   280,     0,    37,    38,     0,
-       0,   642,     0,     0,     0,   282,     0,     0,   283,   284,
-     285,   286,    40,    41,     0,   287,   288,     0,     0,     0,
-       0,     0,     0,   289,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   290,     0,   374,
-       0,     0,   167,     0,     0,     0,   292,   376,   294,   295,
-     296,   297,   278,     0,   279,  1051,     0,  1052,  1394,  1395,
-    1053,  1054,  1055,  1056,  1057,  1058,  1059,  1060,     0,  1061,
-       0,     0,  1062,    32,     0,   280,     0,     0,     0,     0,
-       0,   642,     0,     0,     0,   282,     0,     0,   283,   284,
-     285,   286,    40,    41,     0,   287,   288,     0,     0,     0,
-       0,     0,     0,   289,     0,     0,     0,     0,     0,   278,
-       0,   279,     0,     0,     0,     0,     0,   290,     0,   374,
-       0,     0,   167,     0,     0,     0,   292,   376,   294,   295,
-     296,   297,   280,     0,     0,     0,     0,     0,   281,     0,
-       0,     0,   282,     0,     0,   283,   284,   285,   286,    40,
-      41,     0,   287,   288,     0,     0,     0,     0,     0,     0,
-     289,     0,     0,     0,     0,     0,   278,     0,   279,     0,
-       0,     0,     0,     0,   290,     0,   374,     0,     0,     0,
-       0,     0,   802,   292,   376,   294,   295,   296,   297,   280,
-       0,     0,     0,     0,     0,   281,     0,     0,     0,   282,
-       0,     0,   283,   284,   285,   286,    40,    41,     0,   287,
-     288,     0,     0,     0,     0,     0,     0,   289,     0,     0,
-       0,     0,     0,   278,     0,   279,     0,     0,     0,     0,
-       0,   290,     0,   374,     0,     0,   982,     0,     0,     0,
-     292,   376,   294,   295,   296,   297,   280,     0,     0,     0,
-       0,     0,   281,     0,     0,     0,   282,     0,     0,   283,
-     284,   285,   286,    40,    41,     0,   287,   288,     0,     0,
-       0,     0,     0,     0,   289,     0,     0,     0,     0,     0,
-     278,     0,   279,     0,     0,     0,     0,     0,   290,     0,
-     374,     0,     0,     0,     0,     0,     0,   292,   376,   294,
-     295,   296,   297,   280,     0,     0,     0,     0,     0,   281,
-       0,     0,     0,   282,     0,     0,   283,   284,   285,   286,
-      40,    41,     0,   287,   288,     0,     0,     0,     0,     0,
-       0,   289,     0,     0,     0,     0,     0,   278,     0,   279,
-       0,     0,     0,     0,     0,   290,     0,   374,     0,     0,
-       0,     0,     0,     0,   292,   726,   294,   295,   296,   297,
-     280,     0,     0,     0,     0,     0,   642,     0,     0,     0,
-     282,     0,     0,   283,   284,   285,   286,    40,    41,     0,
-     287,   288,     0,     0,     0,     0,     0,     0,   289,     0,
-       0,     0,     0,     0,   278,     0,   279,     0,     0,     0,
-       0,     0,   290,     0,   776,     0,     0,     0,     0,     0,
-       0,   292,   376,   294,   295,   296,   297,   280,     0,     0,
-       0,     0,     0,   281,     0,     0,     0,   282,     0,     0,
-     283,   284,   285,   286,    40,    41,     0,   287,   288,     0,
-       0,     0,     0,     0,     0,   289,     0,     0,     0,     0,
-       0,   278,     0,   279,     0,     0,     0,     0,     0,   290,
-       0,   374,     0,     0,     0,     0,     0,     0,   292,   817,
-     294,   295,   296,   297,   280,     0,     0,     0,     0,     0,
-     281,     0,     0,     0,   282,     0,     0,   283,   284,   285,
-     286,    40,    41,     0,   287,   288,     0,     0,     0,     0,
-       0,     0,   289,     0,     0,     0,     0,     0,   278,     0,
-     279,     0,     0,     0,     0,     0,   508,     0,     0,     0,
-       0,     0,     0,     0,     0,   292,   376,   294,   295,   296,
-     297,   280,     0,     0,     0,     0,     0,   281,     0,     0,
-       0,   282,     0,     0,   283,   284,   285,   286,    40,    41,
-       0,   287,   288,     0,     0,     0,     0,     0,     0,   289,
-       0,     0,     0,     0,     0,   278,     0,   279,     0,     0,
-       0,     0,     0,   290,     0,     0,     0,     0,     0,     0,
-       0,     0,   292,   376,   294,   295,   296,   297,   280,     0,
-       0,     0,     0,     0,   281,     0,     0,     0,   282,     0,
-       0,   283,   284,   285,   286,    40,    41,     0,   287,   288,
-       0,     0,     0,     0,     0,     0,   289,     0,     0,     0,
-       0,     0,   278,     0,   279,     0,     0,     0,     0,     0,
-     512,     0,     0,     0,     0,     0,     0,     0,     0,   292,
-     376,   294,   295,   296,   297,   280,     0,     0,     0,     0,
-       0,   281,     0,     0,     0,   282,     0,     0,   283,   284,
-     285,   286,    40,    41,     0,   287,   288,     0,     0,     0,
-       0,     0,     0,   289,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   515,     0,     0,
-       0,     0,     0,     0,     0,     0,   292,   376,   294,   295,
-     296,   297,     2,   202,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    30,     0,     0,     0,     0,
+       0,     0,   517,     0,     0,     0,     0,     0,     0,     0,
+       0,   293,   377,   295,   296,   297,   298,     2,   203,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      30,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    33,     0,
-      34,     0,    35,    36,     0,   170,   171,    39,     0,     0,
-       0,     0,     0,     0,    40,    41,   201,     2,   202,     4,
+      34,     0,    35,    36,     0,   171,   172,    39,     0,     0,
+       0,     0,     0,     0,    40,    41,   202,     2,   203,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
@@ -2855,12 +2839,6 @@
       30,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,    34,     0,    35,     0,     0,
-     203,    38,   469,     2,   202,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,     0,     0,     0,     0,     0,    30,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,    34,     0,    35,     0,     0,    37,    38,     2,   202,
+       0,     0,     0,     0,     0,     0,     0,     0,    33,     0,
+      34,     0,    35,     0,     0,   204,    38,   471,     2,   203,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
@@ -2868,18 +2846,17 @@
        0,    30,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    33,     0,    34,     0,    35,     0,
-       0,   203,    38,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,   487,   488,   489,     0,     0,
-      30,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,    33,     0,     0,     0,     0,    30,     0,
-      37,    38,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
+       0,    34,     0,    35,     0,     0,    37,    38,     2,   203,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,     0,     0,    25,    26,    27,     0,     0,     0,     0,
+       0,    30,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,     0,     0,     0,     0,     0,   203,    38
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
+       0,    34,     0,    35,     0,     0,   204,    38
 };
 
 #define yypact_value_is_default(yystate) \
-  ((yystate) == (-1318))
+  ((yystate) == (-1362))
 
 #define yytable_value_is_error(yytable_value) \
@@ -2888,692 +2865,709 @@
 static const yytype_int16 yycheck[] =
 {
-       1,    42,     0,    42,     0,   181,    42,   235,   181,   165,
-     181,     1,   451,   200,   182,   182,   215,   648,   690,   181,
-     181,   484,   181,   181,   275,   602,   344,   113,   103,   751,
-     252,   622,   690,    31,   494,    31,   690,    31,   498,   604,
-     457,   892,   988,   359,    42,   602,    44,   363,    44,  1317,
-       1,   534,   602,   995,  1031,     0,    54,    37,    37,   183,
-     602,   604,    60,   602,    60,    63,   450,    63,    66,   605,
-      66,   344,    37,   572,   101,   611,    66,   152,    65,    65,
-     771,  1398,    65,    49,   715,   261,    31,    75,   261,    42,
-     261,  1394,   412,    44,   262,   262,   768,   691,    42,   261,
-     261,  1043,   261,   261,   602,    37,   104,  1030,  1031,   107,
-     768,   197,   432,   101,   768,   113,    27,    75,    57,   713,
-     440,    42,   101,   103,   103,   111,     0,    89,    75,   340,
-      42,    43,    37,   257,   258,   101,   101,   124,   103,   523,
-     181,   124,   181,  1411,   602,   181,   144,   892,   144,   101,
-     102,     0,   103,   115,   152,  1458,   103,    31,   109,   157,
-      71,   157,   101,   420,   421,  1482,    42,    43,    65,   101,
-    1487,   103,   101,   636,   637,   638,    37,    65,   290,   736,
-       0,     1,    31,   181,   182,  1050,   182,  1504,   277,    88,
-     412,   654,   143,    65,  1511,   107,    44,   892,    65,   197,
-      75,   152,    75,    37,    29,   404,   103,   205,    78,   205,
-     432,    31,    11,     0,    63,   103,   214,   490,   440,   217,
-     261,   217,   261,   122,   101,   261,   689,   102,   181,   102,
-     106,   103,   400,   400,   109,   105,   103,   181,   736,   496,
-     101,   104,   103,    63,    31,   108,    66,   248,  1225,   247,
-     201,   247,   829,   247,   205,    80,    81,   514,     0,     1,
-     181,   109,   337,   261,   262,   728,   262,   101,   104,   103,
-     268,   710,   829,   484,   590,   106,   841,   275,   736,   829,
-     108,    75,   450,   450,   235,   236,   604,   829,   289,    31,
-     829,   366,   492,    73,  1240,   831,   124,  1274,   841,     0,
-       1,   764,   247,  1487,   390,  1050,   997,   101,   420,   421,
-     809,    73,    42,    43,   482,   482,   267,   633,    75,   270,
-    1504,    63,   579,   103,    66,   105,   324,  1511,   324,   109,
-      31,   829,   418,   153,    54,    89,  1487,  1059,   424,   290,
-     108,   103,   293,   105,     0,   343,   344,   109,   111,   123,
-    1273,  1274,   109,   116,   117,   818,   124,   205,  1053,  1210,
-    1511,   115,   360,   683,   224,    66,   364,    65,   217,    67,
-      68,   829,   949,   247,   968,    31,   106,   104,   252,   101,
-     108,   108,   593,   243,   104,   950,   337,   107,   236,   340,
-       3,    65,   390,    67,    68,     3,   508,   217,   247,   949,
-     512,   123,   400,   515,   400,   103,   606,   949,   359,   108,
-     610,   622,   363,  1390,   239,   366,   627,   506,  1009,   267,
-     418,    65,  1287,    67,    68,   124,   424,   247,   426,   102,
-      67,   631,   106,   108,    71,   635,   109,    74,   102,    76,
-    1382,  1383,   290,    65,   108,   293,    83,    69,   108,   124,
-     123,   526,   450,     0,    76,    77,   568,   101,   107,   108,
-     247,   683,   106,     0,    52,  1210,   102,  1390,   469,   420,
-     421,   101,   108,   508,   123,   217,   474,   512,   689,   101,
-     515,   103,  1018,  1019,   482,   102,   482,   101,   486,   111,
-     486,   108,   490,   649,   214,  1126,   345,   448,   958,   750,
-     451,   918,   102,   725,   820,   247,   457,    95,   824,   109,
-     993,   108,   123,   514,   690,  1210,   102,   690,   469,   690,
-     113,   114,   108,   841,   692,   692,  1120,   124,   690,   690,
-     531,   690,   690,   534,   658,   536,   101,  1102,   412,   101,
-     108,   486,  1287,   494,   928,   496,   247,   498,   268,   121,
-     375,   123,   936,   764,   102,   275,   124,   508,   432,    83,
-      84,   512,   108,   514,   515,  1287,   440,  1030,   841,  1434,
-     656,   208,   108,   108,   108,   526,  1441,   108,   124,   668,
-     107,   102,   583,  1177,  1178,     0,   108,   108,   124,   124,
-     124,   247,   590,   124,   118,   119,   252,   981,   914,   101,
-     448,   189,   124,   451,   602,  1300,   604,   427,   466,   457,
-     484,   101,   486,   688,   637,   638,    31,   108,   104,   101,
-    1485,   103,   108,   343,   212,   623,   475,    42,   579,    44,
-     455,   654,   101,   124,   222,   460,    44,   486,  1360,   590,
-     360,   639,   593,   102,   364,    60,   102,   104,    63,  1088,
-     109,    66,   108,   108,   655,   653,   657,   104,   656,  1354,
-     508,   108,  1357,   863,   512,   754,   486,   515,   493,   124,
-     495,   622,   102,   636,   637,   638,   627,   102,   108,   878,
-     102,   954,   633,  1146,    65,   102,    67,    68,   763,  1434,
-     102,   654,   690,   104,   692,   102,  1441,   108,  1461,   486,
-     899,   109,   290,  1398,  1467,   728,   101,   527,  1403,   102,
-     347,   104,   349,    81,    82,   108,  1438,   101,  1440,   103,
-     101,  1484,   723,    85,    86,   106,  1489,   111,   884,   144,
-     123,   124,   960,  1428,   101,   143,   103,   688,   736,   737,
-    1485,   101,   157,   103,   486,     4,     5,     6,     7,     8,
-       9,   111,   750,   101,  1118,   955,   412,   102,  1122,   710,
-     928,   928,   101,   108,  1486,   728,   181,   182,   936,   936,
-     124,   591,   101,  1089,   103,   624,   432,   101,   102,   103,
-     102,   102,   111,  1377,   440,   486,   108,   108,   102,   740,
-     205,   101,   102,   103,   108,   818,    57,   205,  1009,   436,
-    1394,   101,   217,    62,   591,    64,   101,  1502,   103,   683,
-    1273,   101,   763,  1508,   672,   689,   636,   637,   638,  1491,
-     645,   104,  1517,   102,   108,   109,  1521,   235,   124,   108,
-     486,   829,   247,  1491,   654,  1022,    65,  1491,    67,    68,
-      69,    65,   106,   841,   102,    69,   261,    76,    77,   437,
-     108,   725,    76,    77,   102,   818,   101,   102,   103,   267,
-     108,   124,   710,  1457,  1458,   124,   101,   716,   103,   820,
-     102,   124,   101,   824,   103,   106,   108,   101,    44,    65,
-     705,   730,   111,   471,   106,   293,   711,   111,   101,  1045,
-     764,   892,   102,   102,    60,   102,   102,    63,   108,   108,
-      66,   108,   108,   623,   557,   558,   559,   560,   728,   324,
-      10,    11,    12,    13,    14,    65,   914,    67,    68,   639,
-     508,   101,   102,   103,   512,   101,   101,   515,   103,   344,
-     928,   104,   340,   653,   101,  1146,   103,    37,   936,     4,
-       5,     6,     7,     8,     9,    75,   101,   805,   103,    75,
-      65,     0,     1,   101,    69,   103,   954,   815,   102,   103,
-      60,    76,    77,   914,  1246,  1247,  1248,   918,   101,   959,
-     103,   112,   830,   822,   695,   120,   697,    87,   144,    78,
-      79,    80,    31,    54,    55,   400,   101,   108,   109,   990,
-     121,   157,   993,   101,   995,    44,   111,    62,   818,    64,
-     123,   101,   101,   103,   103,   825,   105,   958,   959,   960,
-     103,   111,   420,   421,  1225,   101,   182,    66,   892,    65,
-     104,    67,    68,    69,  1110,   108,   109,   683,   104,  1118,
-     750,    42,    43,  1122,  1123,   450,   553,   554,   825,   205,
-     555,   556,  1043,   892,   102,   561,   562,   102,   102,   102,
-     102,   217,  1053,   101,   103,  1056,  1057,  1058,  1009,   884,
-     102,   104,   103,   108,   104,   101,   891,   123,   106,   725,
-     918,   486,   892,   104,   102,   490,   102,   104,  1190,  1191,
-     104,  1193,   104,   671,   104,   108,  1470,  1199,   496,    28,
-    1202,   109,   680,   109,    63,   144,   684,    10,    11,    12,
-      13,    14,   102,   152,   153,   892,   514,   102,   104,   106,
-     109,    80,  1110,   107,    10,    11,    12,    13,    14,   102,
-     107,   107,   101,   108,    37,   102,   124,   102,   102,  1513,
-     102,  1206,   102,   182,   102,   466,   109,  1088,  1089,   959,
-     102,    37,   108,   102,   102,   114,  1235,    60,   197,   102,
-     892,   200,   201,   102,   102,   975,   205,   982,   324,   102,
-     102,   102,   102,  1012,    60,   102,   102,   102,    28,  1027,
-    1028,   579,   123,   107,   104,   102,  1050,   226,   102,   102,
-     102,   230,   107,   232,   104,   593,     3,   602,   157,   604,
-     108,   892,   241,    10,    11,    12,    13,    14,   247,  1189,
-     104,  1050,   102,   252,   102,   101,   108,   103,  1206,  1210,
-    1030,  1031,   102,   262,   622,   111,   109,   959,   106,   627,
-      37,   270,   108,   108,   104,  1083,  1084,   102,   102,  1318,
-    1050,   108,   108,  1322,   400,   102,   892,   101,   104,  1229,
-    1088,   104,   101,    60,  1356,  1246,  1247,  1248,   217,    65,
-     101,    67,    68,    69,  1079,  1206,   101,   101,   959,   109,
-      76,    77,    65,  1050,    67,    68,    69,   124,   107,   102,
-    1498,   102,  1146,    76,    77,   690,   102,   692,  1229,   121,
-     107,   106,   104,   124,   108,     3,   255,  1373,   337,   104,
-     259,   340,    10,    11,    12,    13,    14,   346,   101,  1300,
-     108,   102,   104,   102,     0,   102,   104,    45,  1050,   104,
-     359,   104,   102,   104,   363,  1491,   104,   366,  1491,    37,
-    1491,   736,   737,   104,  1492,  1492,  1415,  1317,   916,  1491,
-    1491,   107,  1491,  1491,   102,    31,  1210,   124,   124,  1188,
-     124,   672,    60,   107,   124,  1513,  1513,   124,   109,  1050,
-     102,  1225,   107,  1354,   104,   104,  1357,   104,   104,  1184,
-     104,  1210,   104,   412,   104,  1223,  1317,   104,  1188,  1189,
-      66,   102,   102,   101,  1372,  1373,   345,   104,   427,   104,
-     101,  1382,  1383,   432,  1470,    55,    54,   102,   102,   106,
-    1210,   440,   124,   109,  1050,   104,  1254,  1398,   104,   102,
-     104,   102,  1403,    89,  1262,  1263,  1264,   101,   107,  1229,
-     102,   104,   102,  1287,   829,  1416,    40,   466,   102,   102,
-     469,  1411,   109,  1210,   124,   102,   841,  1428,   108,   124,
-      89,   102,     3,  1282,   109,   484,   102,   486,  1287,    10,
-      11,    12,    13,    14,   102,   494,  1188,  1189,  1306,   498,
-    1491,   124,  1491,  1273,  1274,  1491,   425,   153,   107,   124,
-    1411,   104,  1282,   104,   124,   101,    37,  1287,  1210,   124,
-    1471,   124,  1470,  1061,   805,  1476,   107,   526,   527,   672,
-     107,  1482,   102,   691,   815,   102,  1487,  1229,  1189,    60,
-     563,   565,  1443,  1491,  1492,   564,  1492,  1317,   566,   830,
-    1287,  1502,  1127,  1504,   567,   713,   475,  1508,    54,  1210,
-    1511,  1362,  1458,   928,  1210,  1513,  1517,  1513,  1521,  1296,
-    1521,   936,  1473,   572,  1473,  1123,  1322,  1441,  1229,  1079,
-     226,   448,   448,   936,   697,   884,   938,   982,   650,   954,
-    1282,   590,   591,   740,   593,  1287,   460,  1498,   583,  1229,
-     956,   247,   960,   486,  1210,   604,   252,   571,   104,    63,
-    1434,   107,   750,   571,   571,    -1,    -1,  1441,    -1,    -1,
-    1390,    -1,    -1,   622,    -1,  1317,    -1,    -1,   627,    -1,
-      -1,    -1,    -1,    -1,   633,  1434,  1287,   636,   637,   638,
-      -1,  1411,  1441,    -1,   802,  1443,    65,    -1,    67,    68,
-      69,  1009,    -1,    -1,    -1,   654,   152,    76,    77,    -1,
-     114,  1485,   805,    -1,  1434,     0,  1317,    -1,    -1,    -1,
-      -1,  1441,   815,   672,    -1,  1473,    -1,   596,    -1,    -1,
-      -1,  1287,   101,    -1,   683,    -1,  1485,   830,    -1,   688,
-     689,    -1,   111,   692,    -1,    -1,    31,  1434,    -1,    -1,
-     346,    -1,  1372,   157,  1441,   624,    -1,    -1,    -1,    -1,
-     629,    -1,    -1,    -1,    -1,  1485,    -1,    -1,   214,  1411,
-     185,    -1,   880,    -1,    -1,    -1,   725,   192,    -1,   728,
-      -1,    66,    65,    -1,    67,    68,    69,    -1,   737,    -1,
-      -1,   740,  1434,    76,    77,    -1,  1027,  1028,  1485,  1441,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1295,    -1,    -1,
-    1411,    -1,    -1,   217,   763,   764,   412,    -1,   101,    -1,
-     769,    -1,   268,    65,    -1,    67,    68,    69,   111,   275,
-      -1,   427,    -1,  1434,    76,    77,   432,    -1,    -1,    -1,
-    1441,    -1,    -1,  1485,   440,    -1,    -1,   716,    -1,   264,
-      -1,   255,  1083,  1084,    -1,   259,   805,    -1,    -1,   101,
-     968,   730,    -1,    -1,    -1,    -1,   815,    -1,   153,   818,
-     466,   820,    -1,    -1,   823,   824,   825,    -1,  1434,    -1,
-      -1,   830,    -1,    -1,  1485,  1441,    -1,    -1,   484,   997,
-     486,   840,    10,    11,    12,    13,    14,   343,    -1,    -1,
-      -1,    -1,    -1,    -1,   319,    10,    11,    12,    13,    14,
-      -1,    -1,   327,    -1,   360,   330,    -1,    -1,   364,    37,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1485,
-      -1,   527,    37,    -1,  1027,  1028,    -1,    -1,    -1,  1047,
-      -1,   345,    60,   892,    -1,    -1,    -1,    65,    -1,    67,
-      68,    69,    -1,   822,  1442,    60,    -1,    -1,    76,    77,
-      65,    -1,   247,    -1,    69,   914,    -1,   252,    -1,    -1,
-      -1,    76,    77,    -1,    -1,    -1,    -1,   392,    -1,    -1,
-     426,   396,    -1,   101,  1472,   103,    -1,    -1,    -1,    -1,
-    1083,  1084,  1223,   111,    -1,   591,   101,    -1,     0,    -1,
-      -1,   950,    -1,    -1,    -1,    -1,   111,    -1,    -1,   958,
-     959,    -1,  1120,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   425,    -1,  1254,  1512,     0,   975,    -1,    -1,    31,
-      -1,  1262,  1263,  1264,    -1,    -1,  1524,    -1,    -1,    -1,
-     636,   637,   638,    -1,    -1,    -1,    -1,    -1,    -1,   279,
-      -1,    -1,    -1,    -1,    -1,    -1,    31,    -1,   654,    -1,
-    1009,   346,   292,   293,    66,    -1,   481,    -1,    -1,  1177,
-    1178,   475,    -1,  1022,   304,  1306,   672,    -1,  1027,  1028,
-      -1,  1030,  1031,    -1,    -1,    -1,    -1,   683,    -1,    -1,
-      -1,    66,    -1,   689,    -1,    10,    11,    12,    13,    14,
-      -1,  1050,     4,     5,     6,     7,     8,     9,    -1,    -1,
-     340,    -1,    65,    -1,    67,    68,    69,    -1,    -1,    -1,
-      -1,    -1,    37,    76,    77,    -1,    -1,   412,    -1,   725,
-      32,    -1,   728,    -1,  1083,  1084,    -1,    -1,    -1,    -1,
-    1089,    -1,   427,  1012,   590,    60,   376,   432,   101,    -1,
-     103,   153,    -1,    -1,    -1,   440,   571,   572,   111,    -1,
-      62,  1254,    64,    -1,    -1,    -1,    -1,    -1,   764,  1262,
-    1263,  1264,    -1,    -1,    -1,    -1,  1491,   623,   153,    -1,
-      -1,   466,    -1,    -1,    -1,    -1,   101,    -1,   103,    -1,
-    1498,    -1,   596,   639,    -1,    -1,   111,  1146,    -1,   484,
-      65,   486,    67,    68,    69,    -1,    -1,   653,    -1,   805,
-      -1,    76,    77,  1306,    -1,    -1,    63,    -1,    -1,   815,
-     624,    -1,   818,    -1,    -1,   629,    73,   823,    -1,   825,
-      -1,    -1,    -1,    -1,   830,    -1,   101,    -1,   103,    -1,
-    1189,    -1,   527,    -1,   659,   247,   111,    -1,   663,    -1,
-     252,    65,    -1,    67,    68,    69,    -1,  1206,    -1,    -1,
-      -1,  1210,    76,    77,    -1,    -1,    -1,   114,    -1,  1377,
-      -1,    -1,   247,    -1,  1223,    -1,  1225,   252,    -1,    -1,
-    1229,   696,    -1,    -1,    -1,    -1,  1394,   101,    -1,   103,
-      -1,    -1,    -1,    -1,    -1,   109,   892,   111,    -1,    -1,
-      -1,    -1,    -1,    -1,   750,  1254,   591,    -1,    -1,    -1,
-     157,    -1,   716,  1262,  1263,  1264,    -1,    -1,    -1,  1188,
-     550,   551,   552,    -1,  1273,  1274,   730,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,    -1,  1287,    -1,
-      -1,    -1,    -1,    -1,   346,    -1,    -1,    -1,    -1,  1457,
-    1458,   636,   637,   638,    -1,    -1,    -1,  1306,    -1,    -1,
-     123,    -1,    -1,   593,    -1,    -1,    -1,    -1,  1317,   654,
-     217,   346,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   975,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   672,    -1,    10,
-      11,    12,    13,    14,   809,    -1,    -1,    -1,   683,    -1,
-      -1,    -1,    -1,    -1,   689,    -1,    -1,    -1,   255,    -1,
-     412,    -1,   259,  1282,    -1,    -1,    37,    -1,   822,    -1,
-      -1,    -1,    -1,    -1,    -1,   427,    -1,    -1,   275,    -1,
-     432,  1027,  1028,    -1,  1030,  1031,    -1,   412,   440,    60,
-     725,  1390,    -1,   728,    65,    -1,    67,    68,    69,    -1,
-      -1,    -1,   427,    -1,  1050,    76,    77,   432,    -1,    -1,
-      -1,    -1,  1411,    -1,   466,   440,    -1,    -1,   914,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   764,
-     101,    -1,   484,    -1,   486,  1434,    -1,  1083,  1084,    -1,
-     111,   466,  1441,    -1,    -1,    -1,   726,    -1,   345,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   922,    -1,   484,
-      -1,   486,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     805,    -1,    -1,    -1,    -1,   527,    -1,    -1,    -1,    -1,
-     815,    -1,    -1,   818,    -1,    -1,  1485,    -1,   823,    -1,
-     825,   771,    -1,  1492,    -1,   830,    -1,    -1,    -1,    -1,
-    1146,    -1,   527,    -1,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,   425,    -1,
-      29,    30,    31,    -1,   999,    -1,    -1,   817,    37,   591,
-      -1,    -1,    -1,  1189,    -1,   442,    -1,    -1,    -1,    -1,
-    1015,    -1,    -1,    -1,    -1,    -1,    -1,   892,  1012,    -1,
-      -1,    60,    -1,    62,  1210,    64,   591,    -1,    67,    68,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1223,   475,  1225,
-      -1,    -1,    -1,    -1,   636,   637,   638,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
-      14,    -1,   654,    -1,    -1,    -1,    -1,   106,  1254,    -1,
-      -1,   636,   637,   638,    -1,    -1,  1262,  1263,  1264,    -1,
-     672,    -1,    -1,    37,    -1,  1090,    -1,  1273,  1274,   654,
-      -1,   683,    -1,    -1,    -1,    -1,    -1,   689,    -1,    -1,
-     975,  1287,    -1,    50,    -1,    52,    60,   672,    55,    56,
-      57,    65,    59,    67,    68,    69,    -1,    -1,   683,    -1,
-    1306,    -1,    76,    77,   689,    -1,    -1,    74,    -1,    -1,
-      -1,    -1,    -1,   725,    -1,    -1,   728,    -1,    -1,    86,
-      87,    -1,    -1,    -1,    -1,    -1,    -1,   101,    -1,   103,
-      -1,    -1,  1027,  1028,    -1,  1030,  1031,   111,    -1,   596,
-     725,    -1,    -1,   728,    -1,    -1,    -1,    -1,    -1,    -1,
-    1206,    -1,   764,    -1,    -1,  1050,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   624,    -1,  1009,
-      -1,    -1,   629,    -1,  1188,    -1,    -1,    -1,    -1,   764,
-      -1,    -1,    -1,    -1,  1390,    -1,    -1,    -1,  1083,  1084,
-      -1,    -1,    -1,   805,    -1,    -1,    -1,    10,    11,    12,
-      13,    14,    -1,   815,    -1,    -1,   818,    -1,    -1,    -1,
-    1050,   823,    -1,   825,    -1,    -1,    -1,    -1,   830,    -1,
-     805,    -1,    -1,    -1,    37,    -1,    -1,    -1,  1434,    -1,
-     815,    -1,    -1,   818,    -1,  1441,    -1,    -1,   823,    -1,
-     825,    -1,    -1,    -1,    -1,   830,    -1,    60,    -1,    -1,
-      -1,  1146,    65,    -1,    67,    68,    69,    -1,    -1,   716,
-      -1,    -1,    -1,    76,    77,    -1,    -1,    -1,  1282,    -1,
-      -1,    -1,    -1,   730,    -1,    -1,    -1,    -1,    -1,  1485,
-     892,    10,    11,    12,    13,    14,    -1,    -1,   101,    -1,
-     103,    -1,    -1,   750,  1189,    -1,    -1,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   892,    37,    -1,
-      -1,    -1,    -1,    -1,    -1,  1210,  1372,    -1,    -1,    -1,
-      -1,    -1,    -1,  1163,    -1,    -1,    -1,    -1,  1223,    -1,
-    1225,    60,    -1,    -1,    -1,    -1,    65,    -1,    67,    68,
-      69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,
-      -1,    -1,    25,    26,    27,    -1,    -1,    -1,    -1,  1254,
-      -1,    -1,    -1,   975,    -1,   822,    -1,  1262,  1263,  1264,
-      -1,    -1,   101,   340,   341,    -1,    -1,    -1,  1273,  1274,
-      -1,    -1,   111,    -1,    -1,   352,   353,    -1,    -1,    -1,
-     975,    -1,  1287,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    25,    26,    27,    -1,    -1,    -1,    -1,    -1,
-      -1,  1306,    -1,    -1,    44,  1027,  1028,    -1,  1030,  1031,
-      -1,    -1,    -1,    96,    -1,    98,    -1,    10,    11,    12,
-      13,    14,    -1,    63,    -1,    -1,    -1,    -1,  1050,    -1,
-      -1,    -1,  1027,  1028,    -1,  1030,  1031,    -1,    -1,   122,
-      -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1050,    -1,    -1,    -1,    -1,
-      -1,  1083,  1084,    96,    -1,    98,    -1,    60,    -1,   109,
-      -1,    -1,    65,    -1,   114,    -1,    69,    -1,    -1,    -1,
-      -1,    -1,    -1,    76,    77,  1390,    -1,    -1,  1083,  1084,
-      -1,    -1,    -1,    -1,   177,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   185,   143,   187,   188,    -1,    -1,   101,   192,
-      -1,   194,   195,   153,    -1,    -1,    -1,   157,   111,    -1,
-      -1,    -1,    -1,    -1,  1146,    -1,    -1,    -1,    -1,  1434,
-      -1,    -1,    -1,    -1,    -1,    36,  1441,    38,    -1,    -1,
-      -1,    -1,    -1,    -1,   177,  1012,    -1,    -1,    -1,    -1,
-      -1,  1146,    -1,    -1,   187,   188,    -1,    -1,    59,   192,
-      -1,   194,   195,    -1,    65,   205,    -1,  1189,    69,    -1,
-      -1,    72,    73,    74,    75,    76,    77,   217,    79,    80,
-    1485,   264,    -1,    -1,    -1,    -1,    87,    -1,  1210,    -1,
-      -1,    -1,    -1,    -1,  1189,   235,   236,    -1,    -1,    -1,
-     101,  1223,   103,  1225,    -1,    -1,    -1,    -1,    -1,   110,
-     111,   112,   113,   114,   115,  1210,    -1,    -1,    -1,   259,
-      -1,    -1,    -1,   124,    -1,    -1,    -1,   267,  1223,    -1,
-    1225,    -1,  1254,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1262,  1263,  1264,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     290,  1273,  1274,   293,    -1,    -1,    -1,     7,    -1,  1254,
-      10,    11,    12,    13,    14,  1287,    -1,  1262,  1263,  1264,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1273,  1274,
-      -1,    -1,    -1,    -1,  1306,    -1,    36,    37,    38,    -1,
-      -1,    -1,  1287,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     340,    -1,    -1,    -1,    -1,   345,    -1,    -1,    -1,    59,
-      60,  1306,    -1,    -1,    -1,    65,    -1,    -1,    -1,    69,
-      -1,  1188,    72,    73,    74,    75,    76,    77,    -1,    79,
-      80,    -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,    -1,
-     717,    -1,   719,    -1,    -1,    -1,    -1,    -1,    -1,   726,
-     727,   101,    -1,   103,   731,    -1,    -1,    -1,    -1,    -1,
-     110,   111,   112,   113,   114,   115,   743,    -1,  1390,    -1,
-      -1,   748,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     420,   421,    -1,    -1,    -1,    -1,    -1,   427,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1390,   773,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   448,    -1,
-      -1,   451,  1434,    -1,    -1,  1282,    -1,   457,    -1,  1441,
+       1,   236,     0,     0,    42,   113,   693,   516,   183,   165,
+     166,    42,    42,     1,   182,   182,   201,   539,   693,   182,
+     182,   216,   276,   182,   651,   453,     0,     1,   625,   459,
+     182,   182,   605,    31,    31,  1055,   183,   896,   496,     0,
+     693,   452,   500,   992,    42,   341,    44,    44,   607,  1410,
+    1329,   605,   345,   896,   414,     0,    54,    31,   345,   607,
+     360,  1036,    60,    60,   364,    63,    63,    42,    66,    66,
+      31,     0,     1,   999,   434,   103,    54,    31,    66,   575,
+     605,    70,   442,   774,   771,   605,    31,     1,   263,    63,
+     198,   718,    66,  1414,   262,   262,   771,   754,    61,   262,
+     262,   184,    31,   262,  1035,  1036,   104,   605,    80,   107,
+     262,   262,    42,    93,   525,   113,   263,   605,   771,    37,
+     605,    42,  1048,  1484,   152,    49,   104,    37,    27,   107,
+      44,    37,    70,    80,    70,   253,   108,    66,     0,    42,
+      43,   130,   694,     0,   182,    80,   144,   144,   128,    42,
+      43,   182,   182,  1432,   152,   608,   640,   641,    37,   157,
+     157,   614,   109,    70,   716,   107,   739,   130,    44,    31,
+     639,   640,   641,   657,    31,   258,   259,    76,  1067,  1068,
+      42,   117,    44,   107,   182,   183,   183,   486,   657,   103,
+     486,  1512,   130,    42,    43,   109,  1517,   107,    60,   109,
+     198,    63,   109,   109,    66,   492,    63,   182,   206,   206,
+     113,   406,  1055,    83,   739,   105,  1537,   215,    29,   112,
+     218,   218,    80,  1544,   262,   107,    80,   402,   107,   143,
+     109,   262,   262,   109,    70,    62,   108,   215,   152,   129,
+     114,   111,   468,   115,   218,  1134,  1466,   731,   249,   225,
+     248,   248,   182,   107,   739,   402,   130,   115,  1233,     0,
+     833,   182,   731,   112,   262,   263,   263,   143,   244,    80,
+      81,   269,    11,   109,   248,  1295,    70,   452,   276,   833,
+     107,  1501,   144,  1503,   392,   713,   845,   248,   202,   290,
+      31,   269,   206,   593,   248,   157,   414,   845,   276,  1248,
+     596,   107,    37,   248,   494,   452,    94,  1282,   833,   484,
+     338,  1002,   420,   833,   607,   109,   434,   813,   426,   248,
+     182,   183,   236,   237,   442,    37,   686,   325,   325,   625,
+     206,    37,    70,   121,   630,   833,   636,   484,   822,   367,
+     639,   640,   641,    80,   206,   833,   344,   345,   833,   114,
+    1281,  1282,    94,   822,   268,   110,   218,   271,   657,  1218,
+     236,   218,   107,   361,   110,   130,   344,   365,   114,    67,
+     107,   109,   107,    71,   109,  1218,    74,   291,    76,   121,
+     294,   108,   835,   361,   129,    83,   248,   365,   115,    88,
+      89,   248,   268,   692,   392,   107,   692,   109,   112,   953,
+     262,   107,   129,   109,   402,   402,   954,  1064,    80,   422,
+     423,     4,     5,     6,     7,     8,     9,  1014,   294,   609,
+     972,   114,   420,   613,   338,   124,   125,   341,   426,   240,
+     428,  1406,   731,   953,  1517,  1455,   108,  1517,    70,    32,
+      72,    73,  1462,   115,   634,   108,   360,   110,   638,   675,
+     364,   114,  1295,   367,   452,   953,    70,  1537,    72,    73,
+       3,  1544,   108,   325,  1544,   341,   129,   130,   767,   115,
+     471,   767,  1398,  1399,    67,  1406,    69,     3,   476,    70,
+     112,    72,    73,   345,   114,   498,   484,   484,   997,   346,
+     488,   488,   922,   107,   492,  1515,   652,   107,   112,   753,
+     528,   113,   114,   516,   962,     0,  1133,   248,   422,   423,
+     108,   209,   253,     0,   488,   516,   114,   129,   109,     0,
+     695,   932,   129,   822,   824,   693,   693,   488,   828,   940,
+     693,   693,   533,   114,   693,   536,   450,   538,   539,   453,
+     402,   693,   693,   488,    31,   459,   422,   423,   695,   130,
+     896,   659,   845,   107,   108,   109,   114,   471,   845,   488,
+     291,  1109,   107,   114,    70,   376,    72,    73,   686,   582,
+    1023,  1024,   130,   114,   985,  1127,    70,   107,   661,   130,
+      74,   114,   496,   809,   498,   586,   500,    81,    82,   130,
+     452,   108,   108,   819,   107,   593,   510,   130,   114,   107,
+     514,   107,   516,   517,    63,    70,   112,   605,   834,   607,
+     728,   114,  1455,   107,   528,   109,    81,    82,   918,  1462,
+     477,    80,   498,   117,   107,   114,   488,   130,   626,   114,
+     492,   488,  1184,  1185,   127,   110,   129,   114,  1295,   114,
+     516,   130,   107,    78,   642,   130,   457,   108,   626,   594,
+     348,   462,   350,   130,   114,   114,  1487,   658,   656,   660,
+     107,   659,  1493,   691,   642,     0,     1,  1095,   582,   114,
+     130,   958,  1515,   414,   109,   108,   111,   867,   656,   593,
+     115,   114,   596,  1514,   495,   130,   497,   882,  1519,   114,
+      78,   422,   423,   434,   108,   693,    31,   695,   157,   110,
+     107,   442,   109,   114,   108,   130,   582,   108,   903,    44,
+     117,   625,  1058,   278,   108,  1372,   630,   107,  1014,   109,
+     596,   109,   636,   111,   107,   726,   109,   115,   107,   964,
+     109,    66,   888,   108,   117,   107,  1035,   109,   766,   114,
+     438,   739,   740,   605,   108,   607,   107,   488,   109,   625,
+     114,   110,   108,   107,   630,   753,   117,   932,   114,   218,
+      70,   248,    72,    73,    74,   940,   253,   108,   103,   959,
+     627,    81,    82,   114,   510,   753,   108,   691,   514,   510,
+     107,   517,   114,   514,   108,   932,   517,   110,   108,  1311,
+     114,   114,   108,   940,   114,   113,  1096,   256,   114,   713,
+     107,   260,  1459,   107,  1461,   117,  1032,  1033,   108,   144,
+     122,   123,   110,   108,   114,   130,   114,   152,   153,   114,
+       4,     5,     6,     7,     8,     9,   107,   108,   109,   743,
+      62,   693,    70,   695,  1521,   833,    74,   648,   110,   108,
+     571,  1393,  1027,    81,    82,   114,  1521,   845,   183,   108,
+     108,   107,   766,   109,  1153,   114,   114,  1153,  1410,  1516,
+     107,   108,   719,   198,  1090,  1091,   201,   202,  1521,   107,
+    1125,   206,  1218,    44,  1129,   130,   733,   739,   740,   117,
+      83,    84,    85,    67,   829,    69,   107,   346,    70,   112,
+      72,    73,   227,   108,  1050,   896,   231,   708,   233,   114,
+     107,   108,   109,   714,   107,   130,   109,   242,   111,   112,
+     824,   108,    70,   248,   828,   108,    74,   114,   253,   130,
+     918,   114,   896,    81,    82,   119,   120,   414,   263,    86,
+      87,  1483,  1484,   107,   932,   109,   271,  1233,   109,   107,
+     108,   109,   940,   508,    70,   686,   130,   434,   107,   107,
+     109,   896,    90,    91,    44,   442,    56,    57,    58,   117,
+     958,    10,    11,    12,    13,    14,  1312,   896,   427,   826,
+      60,   833,   107,    63,   109,   963,    66,    70,   112,    72,
+      73,    74,  1281,   845,  1254,  1255,  1256,   728,    37,   963,
+     107,   112,   109,   994,   107,   107,   997,   109,   999,   486,
+      80,   488,   107,   338,   918,  1231,   341,   110,   922,  1117,
+      80,   698,   347,   700,   113,   114,    65,   118,   477,   126,
+    1366,   108,   109,  1369,    92,   360,   114,   115,   109,   364,
+      56,    57,   367,   127,   963,   206,  1262,   113,   114,   896,
+     560,   561,   562,   563,  1270,  1271,  1272,  1048,   962,   963,
+     964,   114,   115,   107,   144,   114,   115,  1058,    42,    43,
+    1061,  1062,  1063,   129,   556,   557,   237,   157,  1414,   107,
+     932,   110,   108,  1419,   558,   559,   110,   888,   940,   414,
+     108,  1055,   564,   565,   895,  1496,   108,   108,   964,    83,
+      84,    85,  1318,   183,   429,   108,   958,   268,   108,   434,
+    1014,   107,   110,  1449,   109,   114,   671,   442,   110,   129,
+    1055,   112,   107,   107,   110,   109,   206,   111,   112,  1117,
+     291,   108,   108,   294,   115,   110,  1055,   110,   218,   110,
+     110,    28,   114,   468,   108,  1546,   471,   115,  1014,   108,
+     599,   112,   110,    50,   694,    52,   113,   113,    55,    56,
+      57,   486,    59,   488,   115,   896,   108,   113,   107,   114,
+    1017,   496,   108,   108,   108,   500,   716,    74,   627,   108,
+     130,   108,   115,   632,   108,   986,   114,   108,   108,    86,
+      87,  1095,  1096,   108,   108,  1213,   108,   108,   108,  1535,
+     108,   108,   757,   528,   529,  1541,   108,   108,  1055,   686,
+      70,    28,    72,    73,    74,   692,  1552,   108,  1196,   108,
+    1556,    81,    82,   113,   129,  1213,     3,  1218,   110,   108,
+     108,  1195,  1196,    10,    11,    12,    13,    14,   108,   113,
+      10,    11,    12,    13,    14,   325,   108,   107,   114,   109,
+     575,   728,   110,   110,  1218,   115,   108,   117,   108,  1237,
+      37,   114,   108,  1254,  1255,  1256,   806,    37,   593,   594,
+     719,   596,   115,  1237,   114,   112,   114,  1196,   110,   108,
+     114,   114,   607,  1218,   733,  1086,   108,   108,    65,   450,
+     767,  1389,   453,   107,   110,    65,   107,   107,   459,  1218,
+     625,   107,   107,   110,   130,   630,  1531,   115,   108,  1213,
+     113,   636,   108,   108,   639,   640,   641,   110,  1237,   113,
+    1311,  1312,   402,   127,  1055,   112,  1290,   110,   130,   114,
+     114,  1295,   657,  1237,   110,   108,   108,   107,    45,   109,
+     108,   110,   108,   110,   884,   110,   110,   117,  1195,   510,
+     675,  1329,   110,   514,   110,   130,   517,  1522,     0,   130,
+    1295,   686,   113,  1521,  1521,  1329,   691,   692,  1521,  1521,
+     695,  1218,  1521,   130,   108,  1366,  1295,   826,  1369,  1521,
+    1521,  1546,   130,   130,    63,  1522,   113,   115,   108,    31,
+    1191,   110,   113,   110,   110,   110,   110,   110,  1496,   110,
+    1388,  1389,   110,   728,   108,   108,   731,  1398,  1399,  1546,
+    1329,   110,   110,   107,   107,   740,   107,    58,   743,   896,
+    1388,   108,   108,  1414,    66,  1329,   115,    70,  1419,    72,
+      73,    74,   972,   130,   112,   114,   110,   110,    81,    82,
+     108,   766,   767,  1290,   341,   342,  1437,   772,  1295,   110,
+     108,   107,   107,    52,  1432,    94,   353,   354,  1449,    94,
+     130,   113,  1002,   110,   107,   114,   109,    40,  1432,   115,
+     108,   108,   108,   130,   117,   108,  1197,  1198,   157,  1200,
+     130,   108,   108,    94,   809,  1206,    94,  1218,  1209,   108,
+     130,  1455,   108,  1521,   819,   115,    95,   822,  1462,   824,
+    1521,  1521,   827,   828,   829,   130,  1497,   130,  1496,   834,
+     108,   153,  1052,  1432,   108,  1506,   113,   110,   110,   844,
+    1455,  1512,   107,   130,   130,   113,  1517,  1462,  1432,   113,
+     108,   108,   108,  1521,  1522,  1522,  1455,   108,  1070,   218,
+     130,   566,   569,  1462,  1535,    70,  1537,    72,    73,    74,
+    1541,  1515,   713,  1544,   567,   570,    81,    82,  1546,  1546,
+    1464,  1552,  1466,   568,  1295,  1556,    54,  1218,  1017,  1484,
+    1125,   896,  1374,  1556,  1129,  1130,   468,   256,  1055,  1130,
+    1515,   260,   107,  1305,   109,   227,  1334,  1127,   280,  1462,
+     940,   190,   117,   918,  1086,   450,  1515,  1501,   462,  1503,
+     700,   293,   294,   450,   942,   986,   248,   586,  1455,   888,
+     653,   253,   743,   305,   213,  1462,   104,   960,  1237,   107,
+     488,   753,   574,    -1,   223,   574,   574,  1531,    -1,   954,
+       4,     5,     6,     7,     8,     9,    -1,   962,   963,    -1,
+      -1,    -1,    -1,    -1,  1184,  1185,    -1,  1368,    -1,   341,
+      -1,    -1,    -1,    -1,   979,    -1,    -1,    -1,    -1,    -1,
+      -1,   675,    -1,    -1,   152,  1531,    -1,   346,  1515,  1521,
+      10,    11,    12,    13,    14,    -1,  1153,    -1,    -1,    10,
+      11,    12,    13,    14,    -1,   377,    -1,    -1,  1243,  1014,
+      -1,    -1,   291,    67,    -1,    69,    -1,    37,    -1,    -1,
+      -1,    -1,  1027,    -1,    -1,   347,    37,  1032,  1033,    -1,
+    1035,  1036,    -1,    -1,     0,    10,    11,    12,    13,    14,
+      -1,    -1,    -1,    -1,  1455,    65,    -1,   215,    -1,    -1,
+    1055,  1462,    -1,    -1,    65,    -1,    -1,    -1,    -1,    70,
+      -1,  1218,    37,    74,    -1,    31,  1195,    -1,   427,    -1,
+      81,    82,    -1,    -1,    -1,    -1,  1233,    -1,    -1,    -1,
+      -1,   922,    -1,    -1,    -1,  1090,  1091,   107,    -1,   109,
+      65,  1096,   414,    -1,    -1,  1330,   107,   117,    -1,  1334,
+      66,   269,    -1,   675,  1515,    -1,   117,   429,   276,    -1,
+      -1,    -1,   434,    -1,    -1,   809,    -1,    -1,   477,    -1,
+     442,    -1,    -1,    -1,    -1,   819,    -1,    -1,    -1,    -1,
+      -1,    -1,   107,    -1,   109,    -1,    -1,    -1,  1295,    -1,
+     834,    -1,   117,   720,    -1,   722,   468,    70,  1153,    72,
+      73,    74,   729,   730,    -1,     0,     1,   734,    81,    82,
+     439,  1290,    -1,    -1,   486,    -1,   488,    -1,    70,   746,
+      72,    73,    74,  1393,   751,    -1,   344,    -1,    -1,    81,
+      82,   553,   554,   555,   107,    -1,    31,   153,    -1,    -1,
+    1410,  1196,    63,   361,   473,    -1,    -1,   365,    -1,   776,
+      -1,  1436,    73,    -1,    -1,   107,    -1,   529,  1213,    -1,
+      -1,    -1,    -1,  1218,    -1,   117,    -1,    -1,    63,    -1,
+      -1,    66,    -1,    -1,   596,    -1,  1231,    -1,  1233,    -1,
+      -1,   510,  1237,    -1,    -1,   514,    -1,   809,   517,    -1,
+     599,    -1,    -1,   114,   821,    -1,    -1,   819,    -1,    -1,
+      -1,    -1,    -1,    -1,  1095,    -1,    -1,  1262,    -1,    -1,
+     428,    -1,   834,  1483,  1484,  1270,  1271,  1272,   627,    -1,
+      -1,    -1,   594,   632,    -1,    -1,  1281,  1282,    -1,    -1,
+      -1,    -1,   248,    -1,    -1,    -1,   157,   253,    -1,    -1,
+    1295,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1455,    -1,
+      -1,   878,   879,   880,   881,  1462,   883,    -1,   153,    -1,
+      -1,    -1,    -1,  1318,    -1,    -1,    -1,   639,   640,   641,
+      -1,    -1,   899,    -1,  1329,    -1,    -1,    10,    11,    12,
+      13,    14,    -1,    -1,    -1,   657,   913,    -1,  1032,  1033,
+      70,    -1,    72,    73,    74,    -1,    -1,   218,    -1,    -1,
+      -1,    81,    82,   675,    37,    -1,    -1,   729,  1515,    -1,
+     719,    -1,    -1,    -1,   686,    -1,    -1,    -1,    -1,    -1,
+     692,    -1,    -1,   218,   733,   952,    -1,   107,    -1,    -1,
+      -1,   347,    65,    -1,    -1,   256,    -1,    70,    -1,   260,
+      -1,    74,    -1,    -1,    -1,   674,  1090,  1091,    81,    82,
+      -1,  1406,   774,   248,   683,   276,   728,    -1,   687,   731,
+      -1,    -1,    -1,    -1,   991,    -1,     0,    -1,    -1,    -1,
+      -1,   998,    -1,    -1,   107,   593,  1003,  1432,    -1,    -1,
+      -1,  1008,    -1,  1010,   117,    -1,    -1,  1014,  1015,  1016,
+      -1,    -1,  1019,    -1,    -1,   767,    -1,    31,   414,   821,
+    1455,  1028,    -1,    -1,    -1,    -1,    -1,  1462,   626,    -1,
+    1032,  1033,    -1,   429,    -1,    -1,    -1,   826,   434,  1046,
+    1047,    -1,    -1,    -1,   642,   346,   442,    -1,    -1,    -1,
+      -1,    -1,    66,    -1,    -1,    -1,    -1,   809,   656,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1073,   819,    -1,  1076,
+     822,    -1,   468,    -1,    -1,   827,    -1,   829,    -1,    -1,
+    1515,    -1,   834,    -1,    -1,    -1,    -1,  1522,  1090,  1091,
+     486,     3,   488,    70,    -1,    72,    73,    74,    10,    11,
+      12,    13,    14,    -1,    81,    82,    -1,  1114,    -1,    -1,
+      -1,    -1,    -1,  1120,  1121,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1131,    37,   427,    -1,    -1,  1136,
+     107,    -1,  1139,   529,  1141,    -1,    -1,  1144,  1262,   153,
+     117,    -1,     0,   444,   896,    -1,  1270,  1271,  1272,    -1,
+    1157,    -1,    -1,    65,   429,   753,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1170,    -1,  1172,  1173,  1174,  1175,    -1,
+      -1,    -1,    -1,    31,    -1,    -1,   477,    -1,    -1,    -1,
+      -1,  1188,    -1,  1190,    -1,    -1,    -1,  1194,    -1,    -1,
+      -1,    -1,    -1,  1464,  1318,  1466,    -1,    -1,   594,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
+      -1,   920,  1014,   488,    -1,     3,  1223,  1224,    -1,    -1,
+      -1,    -1,    10,    11,    12,    13,    14,   979,  1017,  1231,
+    1501,    -1,  1503,    -1,   248,   186,    -1,    -1,    -1,   253,
+      -1,    -1,   193,   639,   640,   641,    -1,    -1,    -1,    37,
+      -1,    -1,    -1,  1055,   529,    -1,    -1,    -1,    -1,    -1,
+    1262,   657,    -1,    -1,    -1,    -1,  1273,  1274,  1270,  1271,
+    1272,    -1,    -1,    -1,    -1,    -1,  1283,    65,    -1,   675,
+    1032,  1033,    -1,  1035,  1036,    -1,    -1,    -1,    -1,    -1,
+     686,    -1,    -1,    -1,    -1,   153,   692,    -1,   599,    -1,
+      -1,    -1,    -1,  1055,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   265,    -1,  1318,    -1,    -1,   594,
+     918,    -1,    -1,    -1,    -1,    -1,   627,    -1,  1335,    -1,
+      -1,   632,   728,   347,    -1,   731,    -1,    -1,  1090,  1091,
+    1347,    -1,  1349,  1350,  1351,    -1,    -1,    70,    -1,    72,
+      73,    74,    -1,    -1,  1361,    -1,    -1,  1066,    81,    82,
+      -1,    -1,    -1,  1370,   639,   640,   641,    -1,  1170,   320,
+      -1,   767,    -1,    -1,    -1,    -1,    -1,   328,    -1,  1386,
+     331,    -1,   657,    -1,   107,    -1,   109,    -1,    -1,    -1,
+     248,    -1,    -1,    -1,   117,   253,    -1,    -1,    -1,    -1,
+     414,  1153,    -1,    -1,    -1,    -1,  1195,    -1,    -1,    -1,
+      -1,    -1,    -1,   809,    -1,   429,    -1,    -1,   719,    -1,
+     434,    -1,    -1,   819,    -1,    -1,   822,    -1,   442,    -1,
+      -1,   827,   733,   829,    -1,  1442,  1443,    -1,   834,    -1,
+      -1,    -1,    -1,   394,  1196,    -1,    -1,   398,  1455,    -1,
+      -1,    -1,   753,    -1,   468,  1462,   731,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1218,    -1,    -1,    -1,
+      -1,    -1,   486,    -1,   488,    -1,    -1,    -1,    -1,  1231,
+      -1,  1233,    -1,    -1,    -1,    -1,    -1,    -1,  1495,   347,
+      -1,    -1,  1499,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     896,  1290,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1262,    -1,    -1,    -1,    -1,   529,    -1,    -1,  1270,  1271,
+    1272,  1528,    -1,  1530,    -1,   826,    -1,    -1,    -1,  1281,
+    1282,    -1,   483,    -1,    10,    11,    12,    13,    14,    -1,
+      -1,    -1,    -1,  1295,    -1,    -1,    -1,   822,    -1,    -1,
+      -1,  1558,  1559,    -1,   829,    -1,   414,    -1,    -1,  1566,
+    1567,    37,    -1,    -1,    -1,    -1,  1318,    -1,    -1,    -1,
+      -1,   429,    -1,    -1,    -1,    -1,   434,    -1,    -1,    -1,
+     594,    -1,    -1,   979,   442,    -1,    -1,    -1,    -1,    65,
+      -1,    -1,    -1,    -1,    70,  1304,    72,    73,    74,    -1,
+      -1,    -1,    -1,    -1,    -1,    81,    82,    -1,    -1,    -1,
+     468,    -1,    -1,    -1,    -1,  1213,    -1,    -1,    -1,    -1,
+      -1,   896,    -1,   574,   575,   639,   640,   641,   486,    -1,
+     488,   107,    -1,   109,    -1,    -1,  1032,  1033,    -1,  1035,
+    1036,   117,    -1,   657,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1406,    -1,    -1,    -1,    -1,  1055,
+      -1,   675,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   529,   686,    -1,    -1,    -1,    -1,    -1,   692,    10,
+      11,    12,    13,    14,    -1,    -1,    -1,    -1,   963,    -1,
+      -1,    -1,    -1,    -1,  1090,  1091,    -1,    25,    26,    27,
+      -1,    -1,    -1,  1455,   979,    -1,    37,    -1,    -1,    -1,
+    1462,   662,    -1,    -1,   728,   666,  1017,   731,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,    -1,    -1,
+      -1,    -1,    -1,    -1,    65,    -1,   594,    -1,    -1,    70,
+      -1,    72,    73,    74,    -1,    -1,    -1,    -1,   699,    -1,
+      81,    82,   129,   767,  1463,    -1,  1465,  1153,    -1,    -1,
+    1035,  1036,    -1,  1515,    -1,    -1,    -1,    -1,    96,    -1,
+      98,    -1,    -1,    -1,    -1,    -1,   107,    -1,   109,    -1,
+    1055,   639,   640,   641,    -1,    -1,   117,    -1,    -1,    -1,
+    1388,  1500,    -1,  1502,   122,   809,    -1,    -1,    -1,   657,
+    1196,    -1,    -1,    -1,    -1,   819,    -1,    -1,   822,    -1,
+      -1,    -1,    -1,   827,    -1,   829,    -1,   675,    -1,    -1,
+     834,    -1,  1218,    -1,    -1,    -1,    -1,    -1,   686,    10,
+      11,    12,    13,    14,   692,  1231,  1545,  1233,  1547,    -1,
+      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
+     178,  1560,  1561,    -1,    -1,    -1,    37,    -1,   186,    -1,
+     188,   189,   813,    -1,    -1,   193,  1262,   195,   196,    37,
+     728,    -1,    -1,   731,  1270,  1271,  1272,    -1,    -1,    25,
+      26,    27,   896,    -1,    65,  1281,  1282,    -1,    -1,    70,
+      -1,    72,    73,    74,  1195,    -1,    -1,    65,    -1,  1295,
+      81,    82,    70,    -1,    72,    73,    74,    -1,    -1,   767,
+      -1,    -1,    -1,    81,    82,    -1,    -1,    -1,    -1,    -1,
+    1195,  1196,  1318,    -1,    -1,    -1,   107,    -1,   109,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   117,   265,    -1,   107,
+      -1,    -1,    -1,  1218,    -1,    -1,    -1,    -1,    -1,   117,
+      96,   809,    98,    -1,    -1,    -1,    -1,    -1,    63,    -1,
+      -1,   819,  1237,    -1,   822,   979,    -1,    -1,    73,   827,
+      75,   829,    77,    -1,    44,   926,   834,    -1,    -1,    84,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1290,
+      -1,    -1,    -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,
+      10,    11,    12,    13,    14,    -1,  1281,  1282,    -1,   114,
+    1406,   116,   117,   118,    -1,  1290,    -1,    -1,  1032,  1033,
+    1295,  1035,  1036,    -1,    -1,    -1,    -1,    37,    -1,    -1,
+      -1,    -1,   178,    -1,    -1,    -1,    -1,    -1,   896,   109,
+      -1,  1055,   188,   189,   114,    -1,    -1,   193,    -1,   195,
+     196,    -1,   157,  1004,  1329,    65,    -1,    -1,    -1,  1455,
+      70,    -1,    72,    73,    74,    -1,  1462,    -1,    -1,  1020,
+      -1,    81,    82,   143,    -1,    -1,  1090,  1091,    -1,    -1,
+      -1,    -1,    -1,   153,    -1,    -1,    -1,   157,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,    -1,    -1,
+      -1,    -1,    -1,   218,    -1,   220,   221,   222,    -1,  1515,
+      -1,   979,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1406,    -1,    -1,    -1,    -1,   206,    -1,    -1,  1153,
+      -1,    -1,    -1,    -1,    -1,    -1,  1097,    -1,   218,    -1,
+      -1,   256,    -1,    -1,    -1,   260,    -1,  1432,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   236,   237,    -1,    -1,
+      -1,   276,    -1,    -1,  1032,  1033,    -1,  1035,  1036,    -1,
+    1455,    -1,  1196,    -1,    -1,    -1,    -1,  1462,    -1,    -1,
+     260,    -1,    -1,    -1,    -1,    -1,    -1,  1055,   268,    -1,
+      -1,    -1,    -1,    -1,  1218,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1231,    -1,  1233,
+     325,   291,    -1,    -1,   294,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1090,  1091,    -1,    -1,    -1,    -1,    -1,    -1,
+    1515,   346,    -1,    -1,    -1,    -1,   351,   352,  1262,    -1,
+     578,   579,    -1,    -1,   359,    -1,  1270,  1271,  1272,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1281,  1282,    -1,
+      -1,   341,    -1,    -1,    -1,    -1,   346,    -1,    -1,    -1,
+     608,  1295,    -1,   611,   612,    36,   614,    38,   616,   617,
+      -1,    -1,    -1,   621,   622,  1153,    -1,   402,    -1,    -1,
+      -1,    -1,    -1,    -1,  1318,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    64,    -1,   420,    -1,    -1,    -1,    70,
+     425,    -1,   427,    74,    -1,    -1,    77,    78,    79,    80,
+      81,    82,    -1,    84,    85,    -1,    -1,    -1,  1196,   444,
+      -1,    92,   447,   448,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   422,   423,    -1,    -1,   107,    -1,   463,   429,
+    1218,    -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,
+     121,   699,   477,  1231,    -1,  1233,   704,   705,    -1,   484,
+     450,    -1,   710,   453,    -1,    -1,    -1,    -1,    -1,   459,
+      -1,    -1,  1406,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1262,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1270,  1271,  1272,    -1,   486,    -1,    -1,    -1,
+      -1,    -1,    -1,  1281,  1282,    -1,    -1,    -1,   498,    -1,
+      -1,    -1,   578,   579,    -1,    -1,    43,  1295,    -1,    -1,
+     510,  1455,    -1,    -1,   514,    -1,   516,   517,  1462,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   529,
+    1318,    -1,   608,    -1,    -1,   611,   612,    -1,   614,    -1,
+     616,   617,    -1,    -1,    -1,   621,   622,    -1,    -1,    -1,
+      -1,    -1,    89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    99,    -1,   599,    -1,    -1,    -1,    -1,    -1,
+      -1,  1515,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   582,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   627,    -1,   594,    -1,   596,   632,    -1,   599,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    -1,  1434,
-     817,    -1,    -1,    -1,   484,    -1,  1441,    37,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   496,    -1,    -1,    -1,
-      -1,    -1,    -1,  1485,    -1,    -1,    -1,    -1,   508,    -1,
-      60,    -1,   512,    -1,   514,   515,    -1,    -1,    -1,    -1,
-      -1,    71,    -1,    -1,    -1,    -1,    -1,   527,    -1,    -1,
-    1485,    -1,   575,   576,    -1,    -1,    -1,   874,   875,   876,
-     877,    -1,   879,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   895,    -1,
-      -1,    -1,   605,    -1,    -1,   608,   609,    -1,   611,    -1,
-     613,   614,   909,    -1,    -1,   618,   619,    -1,    -1,   579,
-      -1,    -1,   575,   576,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   591,    -1,   593,    -1,    -1,   596,    -1,    -1,    -1,
+      20,    21,    22,    23,    24,    25,    26,   154,  1406,    29,
+      30,    31,    -1,    -1,    -1,   625,    -1,    37,   704,   705,
+     630,   168,    -1,    -1,   710,    -1,    -1,    -1,    -1,   639,
+     640,   641,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   191,    65,    -1,   657,    -1,    -1,
+      70,    -1,    72,    73,    74,    -1,    -1,  1455,   205,    -1,
+      -1,    81,    82,    -1,  1462,    -1,    -1,   214,    -1,    -1,
+      -1,    -1,    -1,    -1,   719,    -1,    -1,   224,    -1,    -1,
+      -1,    -1,   692,    -1,    -1,    -1,    -1,   107,   733,   109,
+      -1,    36,    -1,    38,    -1,    -1,    -1,   117,    -1,    -1,
+      -1,    -1,   249,   713,    -1,    -1,    -1,   254,   753,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1515,    -1,    64,
+     267,   731,    -1,   733,    -1,    70,   273,    -1,   275,    74,
+      -1,    -1,    77,    78,    79,    80,    81,    82,    -1,    84,
+      85,    -1,    -1,    -1,    -1,   292,    -1,    92,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   767,    -1,    -1,
+      -1,    -1,   107,    -1,   109,    -1,    -1,   112,   813,    -1,
+      -1,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
+      -1,   826,    -1,    -1,    -1,    -1,    -1,    -1,   335,    -1,
+      -1,    -1,    -1,   340,    -1,    -1,    -1,    -1,    -1,    -1,
+     845,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   822,    -1,    -1,    -1,   826,    -1,    -1,   829,
+      -1,   368,    -1,    -1,  1092,   372,   373,    -1,   375,    -1,
+      -1,    -1,    -1,    -1,    -1,   382,   383,    -1,   385,   386,
+      -1,   388,    -1,   390,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     7,    -1,    -1,    10,    11,    12,    13,    14,    -1,
+     407,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   415,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   948,   605,    -1,    -1,   608,   609,    -1,   611,    -1,
-     613,   614,   622,    -1,    -1,   618,   619,   627,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   636,   637,   638,    -1,
+      36,    37,    38,    -1,    -1,    -1,    -1,   932,    -1,    -1,
+      -1,    -1,    -1,   440,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   451,    -1,    -1,    -1,    64,    65,
+      -1,    -1,   922,   958,    70,    -1,    -1,    -1,    74,    -1,
+      -1,    77,    78,    79,    80,    81,    82,   474,    84,    85,
+      -1,    -1,    -1,   480,    -1,    -1,    92,    -1,   485,    -1,
+     985,    -1,    -1,    -1,    -1,    -1,    -1,  1215,    -1,    -1,
+      -1,   107,    -1,   109,   964,    -1,    -1,    -1,    -1,    -1,
+     116,   117,   118,   119,   120,   121,    -1,    -1,    -1,   979,
+      -1,    -1,  1017,    -1,   521,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1028,    -1,    -1,    -1,    -1,    -1,    -1,
+     537,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1014,    -1,  1092,    -1,    -1,     7,
+      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1035,  1036,   574,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   143,   583,    -1,    36,    37,
+      38,    -1,    -1,   590,    -1,   153,    -1,    -1,   595,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   165,   166,   606,
+      -1,    -1,    -1,    -1,  1109,    -1,    64,    65,    -1,    -1,
+      -1,    -1,    70,    -1,    -1,    -1,    74,    -1,    -1,    77,
+      78,    79,    80,    81,    82,  1095,    84,    85,    -1,    -1,
+      -1,    -1,    -1,    -1,    92,    -1,    -1,    -1,    -1,    -1,
+     647,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,
+      -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,   116,   117,
+     118,   119,   120,   121,    -1,    -1,    -1,    -1,   236,  1215,
+      -1,    -1,    -1,    -1,    -1,   682,    -1,   152,   153,    -1,
+      -1,    -1,    -1,  1153,    -1,    -1,    -1,    -1,    -1,    -1,
+    1195,    -1,    -1,   261,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,   186,    -1,    29,    30,    31,    -1,    -1,   193,    -1,
+      -1,    37,    -1,    -1,    -1,  1195,    -1,    -1,    -1,    -1,
+     737,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     747,   748,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,
+      -1,    -1,    -1,   760,    70,    -1,    72,    73,    74,    -1,
+      -1,    -1,    -1,  1233,    -1,    81,    82,    -1,    -1,    -1,
+     777,    -1,   779,    -1,    -1,    -1,   783,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1290,    -1,    -1,    -1,    -1,
+     265,   107,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   117,    -1,    -1,    -1,    -1,    -1,    -1,   376,    -1,
+      -1,  1281,  1282,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1290,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    36,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   849,    -1,    -1,   320,    -1,    -1,    -1,   856,
+      -1,    -1,    -1,   328,   329,    -1,   331,   332,    -1,    64,
+      -1,    -1,   869,    -1,   871,    70,   341,    72,    73,    74,
+     345,    -1,    77,    78,    79,    80,    81,    82,   885,    84,
+      85,    -1,    -1,    -1,    -1,   892,    -1,    92,    -1,   364,
+      -1,    -1,   367,    -1,    -1,    -1,    -1,   904,    -1,    -1,
+     907,    -1,   107,    -1,   109,    -1,   111,   112,    -1,    -1,
+     478,   116,   117,   118,   119,   120,   121,    -1,   925,   394,
+      -1,    -1,    -1,   398,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1406,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   516,    -1,
+      -1,    -1,    -1,    -1,   429,    -1,    -1,    -1,    -1,    -1,
+      -1,   529,    -1,    -1,    -1,    -1,    -1,    -1,   536,    -1,
+      -1,   539,    -1,    -1,    -1,    -1,    -1,   452,    -1,    -1,
+      -1,    -1,   550,   551,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1464,    -1,  1466,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   572,    -1,  1013,    -1,   483,    -1,
+      -1,   486,    -1,    -1,   582,    -1,    -1,    -1,    -1,    -1,
+      -1,   589,    -1,    -1,    -1,    -1,   594,    -1,    -1,    -1,
+      -1,  1501,    -1,  1503,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1546,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     525,    -1,    -1,   528,   529,    -1,    -1,    -1,    -1,    -1,
+      -1,  1531,  1069,    -1,    -1,    -1,    -1,    -1,    -1,  1076,
+      -1,    -1,    -1,    -1,    -1,    -1,   644,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   652,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1105,   574,
+     575,    -1,    -1,  1110,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1118,    -1,    -1,    -1,    -1,    -1,    -1,   593,   594,
+      -1,   596,    -1,    -1,   692,    -1,    -1,    -1,    -1,    -1,
+     605,    -1,   607,   608,    -1,    -1,    -1,    -1,    -1,   614,
+      -1,  1148,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   624,
+     625,    -1,    -1,  1160,    -1,   630,  1163,    -1,  1165,    -1,
+      -1,    -1,    -1,    -1,   639,   640,   641,    -1,    -1,    -1,
+      -1,    -1,  1179,  1180,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   657,    -1,    -1,    -1,    -1,   662,   663,    -1,
+      -1,   666,   667,    -1,  1201,    -1,    -1,    -1,   673,   767,
+      -1,   769,    -1,    -1,    -1,    -1,    -1,   775,    -1,    -1,
+      -1,    -1,    -1,    -1,   782,    -1,   691,   692,   693,    -1,
+     695,  1228,    -1,    -1,   699,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
+      -1,    -1,    -1,    37,    38,    -1,   731,   732,   826,   827,
+      -1,   829,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   844,    -1,    -1,    -1,
+      -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,
+      -1,   766,   767,    -1,    -1,    -1,   771,   772,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     987,    -1,    -1,   696,   654,    -1,    -1,   994,   701,   702,
-      -1,   998,    -1,    -1,   707,    -1,  1003,    -1,  1005,    -1,
-      -1,    -1,  1009,  1010,  1011,    -1,    -1,  1014,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1023,    -1,    -1,   689,
+      -1,    -1,    -1,    -1,    -1,    -1,   884,  1324,    -1,  1326,
+     888,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,   113,
+      -1,    -1,  1339,   117,  1341,    -1,    -1,    -1,   813,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   822,    -1,    -1,
+      -1,    -1,  1359,   828,   829,    -1,    -1,    -1,   833,    -1,
+     835,    -1,    -1,    -1,   279,   280,   281,    -1,  1375,  1376,
+     845,    -1,    -1,   288,   289,    -1,    -1,    -1,   293,   294,
+    1387,    -1,    -1,  1390,    -1,    -1,    -1,    -1,    -1,    -1,
+     305,    -1,    -1,    -1,    -1,    -1,   964,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1412,    -1,    -1,    -1,    -1,
+      -1,   979,   980,    -1,  1421,    -1,    -1,  1424,   986,  1426,
+    1427,  1428,    -1,    -1,   992,    -1,   341,   995,    -1,   997,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1041,  1042,    -1,    -1,   701,   702,
-     710,    -1,    -1,    -1,   707,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   728,  1066,
-     730,    -1,  1069,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    -1,    -1,    63,    -1,    -1,
-      37,    -1,    -1,    -1,   764,    -1,    -1,    73,    -1,    75,
-    1107,    77,    -1,    -1,    -1,    -1,  1113,  1114,    84,    -1,
-      -1,    -1,    -1,    60,    -1,    -1,    -1,  1124,    -1,    -1,
-      67,    68,  1129,    -1,    -1,  1132,    -1,  1134,    -1,    -1,
-    1137,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
-     116,   117,   118,  1150,    -1,    -1,    -1,    -1,   818,    -1,
-      -1,    -1,   822,    -1,    -1,   825,  1163,    -1,  1165,  1166,
-    1167,  1168,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1181,    -1,  1183,    -1,    -1,    -1,
-    1187,   157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   918,    -1,    -1,    -1,    -1,    -1,  1017,
+      -1,   926,    -1,    -1,    -1,    -1,    -1,   932,    -1,    -1,
+    1028,  1468,   377,  1470,    -1,   940,  1473,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   953,   954,
+      -1,  1488,  1050,    -1,  1052,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1067,
+    1068,    -1,    -1,    -1,   979,    -1,    -1,    -1,    -1,    -1,
+     985,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1088,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1004,
+    1005,    36,    -1,    38,    -1,    -1,    -1,    -1,    -1,  1014,
+      -1,    -1,    -1,    -1,    -1,  1020,  1021,    -1,  1023,  1024,
+    1025,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,
+    1035,  1036,    -1,    -1,    -1,    70,  1134,    -1,    -1,    74,
+      -1,    -1,    77,    78,    79,    80,    81,    82,    -1,    84,
+      85,    -1,    -1,    -1,    -1,  1153,    -1,    92,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1215,  1216,
-      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
-      31,   217,    -1,   219,   220,   221,    37,    -1,   918,    -1,
-      -1,    -1,    -1,    -1,    -1,    43,    -1,    -1,  1265,  1266,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1275,    60,
-      -1,    62,    -1,    64,    65,    -1,    67,    68,    69,   255,
-      -1,    -1,    -1,   259,    -1,    76,    77,    -1,    -1,    -1,
-     960,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   275,
-      -1,    89,    -1,    -1,    -1,   975,    -1,    -1,    -1,    -1,
-     101,    99,   103,    -1,    -1,    -1,  1323,    -1,    -1,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1335,    -1,
-    1337,  1338,  1339,    -1,    -1,    -1,    -1,    -1,    -1,  1009,
-      -1,    -1,  1349,    -1,    -1,    -1,    -1,    -1,   324,    -1,
-      -1,  1358,    -1,    -1,    36,    -1,    38,    -1,    -1,    -1,
-    1030,  1031,    -1,  1370,    -1,    -1,   154,    -1,    -1,   345,
-      -1,    -1,  1085,    -1,   350,   351,    -1,    59,    -1,   167,
-      -1,    -1,   358,    65,    -1,    -1,    -1,    69,    -1,    -1,
-      72,    73,    74,    75,    76,    77,    -1,    79,    80,    -1,
-      -1,    -1,   190,    -1,    -1,    87,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1421,  1422,   204,    -1,  1088,   101,
-      -1,   103,  1085,    -1,   400,   213,   108,  1434,   110,   111,
-     112,   113,   114,   115,  1441,   223,    -1,    -1,    -1,    -1,
-      -1,    -1,   418,    -1,    -1,    -1,    -1,   423,    -1,   425,
+    1168,  1169,   107,    -1,   109,    -1,    -1,    -1,    -1,    -1,
+     115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
+      -1,  1096,  1097,  1098,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1109,    -1,    -1,    -1,   553,   554,
+     555,   556,   557,   558,   559,   560,   561,   562,   563,   564,
+     565,   566,   567,   568,   569,   570,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     248,    -1,  1469,    -1,    -1,   253,   442,    -1,    -1,   445,
-     446,    -1,    -1,    -1,    -1,    -1,  1146,    -1,   266,    -1,
-      -1,    -1,    -1,    -1,   272,   461,   274,    -1,    -1,    -1,
-    1497,    -1,    -1,    -1,  1207,    -1,    -1,    -1,    -1,   475,
-      -1,    -1,    -1,   291,    -1,    -1,   482,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1523,    -1,  1188,    -1,
-      -1,  1528,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1153,    -1,
+    1248,   596,     0,    -1,    -1,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
+      -1,    29,    30,    31,    32,    -1,    -1,    35,    -1,    37,
+      38,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,  1213,    -1,
+      -1,  1309,    -1,  1311,    62,    -1,    -1,    65,    37,    67,
+      -1,    69,    70,    -1,    72,    73,    74,    -1,  1233,    -1,
+      -1,    -1,    -1,    81,    82,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,   694,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,
+      -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,
+      -1,   716,    -1,    -1,    -1,    -1,  1281,  1282,    -1,    -1,
+      -1,    -1,    -1,    -1,   729,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1397,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1207,    -1,   334,    -1,    -1,    -1,
-      -1,   339,    -1,    -1,    -1,  1225,    -1,    -1,    -1,    -1,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,   367,
-      29,    30,    31,   371,   372,    -1,   374,    -1,    37,    -1,
-      -1,    -1,   380,   381,    -1,   383,   384,    -1,   386,    -1,
-     388,    -1,     7,  1273,  1274,    10,    11,    12,    13,    14,
-      -1,    60,  1282,    -1,    -1,    -1,    -1,   405,    67,    68,
-     596,    -1,    -1,    -1,    -1,   413,    -1,    -1,    -1,    -1,
-      -1,    36,    37,    38,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   624,    -1,
-     438,    -1,    -1,   629,    59,    60,    -1,    -1,    -1,    -1,
-      65,   449,   111,    -1,    69,    -1,    -1,    72,    73,    74,
-      75,    76,    77,    -1,    79,    80,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    -1,   472,    -1,    -1,    -1,    -1,    -1,
-     478,    -1,    -1,    -1,    -1,   483,   101,    -1,   103,    -1,
-      -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,   114,
-     115,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1390,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   519,    -1,    -1,   278,   279,   280,    -1,    -1,    -1,
-     716,    -1,    -1,   287,   288,    -1,    -1,   535,   292,   293,
-      -1,    -1,    -1,    -1,   730,    -1,    -1,    -1,    -1,    -1,
-     304,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1443,   750,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   571,   152,   153,    -1,    -1,    -1,    -1,
-      -1,    -1,   580,    -1,    -1,    -1,   340,    -1,    -1,   587,
-      -1,    -1,    -1,  1473,   592,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   603,    -1,   185,    -1,    -1,
-      -1,    -1,    -1,    -1,   192,    -1,    -1,    -1,  1498,    -1,
-      -1,    -1,   376,   809,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   822,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   644,    -1,    -1,    -1,
-      -1,    -1,    -1,     0,    -1,   841,     3,     4,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   774,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,   679,    29,    30,    31,    32,   264,    -1,    35,    -1,
-      37,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      57,    -1,    -1,    60,    -1,    62,    -1,    64,    65,    -1,
-      67,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,
-      77,    -1,    -1,    -1,    -1,    -1,   734,    -1,    -1,    -1,
-      -1,   319,   928,    -1,    -1,    -1,   744,   745,    -1,   327,
-     328,    -1,   330,   331,   101,    -1,   103,    -1,    -1,   757,
-      -1,    -1,   340,    -1,   111,    -1,   344,    -1,   954,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   774,    -1,   776,    -1,
-      -1,    -1,   780,    -1,    -1,   363,    -1,    -1,   366,    -1,
-      -1,    -1,    -1,    -1,    -1,   981,   550,   551,   552,   553,
-     554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
-     564,   565,   566,   567,   392,    -1,    -1,    -1,   396,    36,
-      -1,    38,    -1,    -1,    -1,    -1,  1012,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1023,    -1,   593,
-      -1,    -1,    59,    -1,    -1,    -1,    -1,   845,    65,   427,
-      67,    68,    69,    -1,   852,    72,    73,    74,    75,    76,
-      77,    -1,    79,    80,    -1,    -1,    -1,   865,    -1,   867,
-      87,    -1,   450,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   881,   101,    -1,   103,    -1,   105,   106,
-     888,    -1,    -1,   110,   111,   112,   113,   114,   115,    -1,
-      -1,    -1,   900,   481,    -1,   903,   484,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1102,    -1,    -1,    -1,
-      -1,    -1,    -1,   921,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   691,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   523,    -1,    -1,   526,   527,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   713,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     143,    -1,   726,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     153,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   165,   571,   572,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1188,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1008,    -1,   590,   591,    -1,   593,    -1,   771,    -1,    -1,
-      -1,    -1,    -1,    -1,   602,    -1,   604,   605,    -1,    -1,
-      -1,    -1,    -1,   611,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   621,   622,    -1,    -1,    -1,   802,   627,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   636,   637,
-     638,    -1,   235,   817,    -1,  1063,    -1,    -1,    -1,    -1,
-      -1,  1069,    -1,    -1,    -1,    -1,   654,    -1,    -1,    -1,
-      -1,   659,   660,    -1,    -1,   663,   664,   260,    -1,    -1,
-      -1,    -1,   670,    -1,    -1,    -1,  1282,    -1,    -1,    -1,
-    1098,    -1,    -1,    -1,    -1,  1103,    -1,    -1,    -1,    -1,
-     688,   689,   690,  1111,   692,    -1,    -1,    -1,   696,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,  1141,    -1,    29,    30,    31,    -1,    -1,
-     728,   729,    -1,    37,    -1,  1153,    -1,    -1,  1156,    -1,
-    1158,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1172,  1173,    60,    -1,    62,    -1,
-      64,    -1,    -1,    67,    68,   763,   764,    -1,    -1,    -1,
-     768,   769,    -1,    -1,    -1,    -1,  1194,    -1,    -1,    -1,
-      -1,    -1,   375,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   968,    -1,    -1,    -1,    -1,   103,
-      -1,    -1,  1220,    -1,    -1,    -1,    -1,   111,    -1,    -1,
-      -1,   809,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     818,    -1,    -1,   997,    -1,    -1,   824,   825,    -1,    -1,
-      -1,   829,    -1,   831,    -1,  1009,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   841,    -1,    -1,    -1,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    29,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    37,    -1,  1050,    -1,    -1,    -1,
-      -1,    -1,    -1,   476,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1312,    -1,  1314,    60,    -1,    -1,
-      -1,    -1,    65,    -1,    67,    68,    69,  1513,    71,  1327,
-      -1,  1329,    -1,    76,    77,    -1,   914,    -1,    -1,    -1,
-      -1,   514,    -1,    -1,   922,    -1,    -1,    -1,    -1,  1347,
-     928,    -1,    -1,    -1,   527,    -1,    -1,    -1,   936,    -1,
-     103,   534,    -1,    -1,    -1,  1363,  1120,    -1,   111,    -1,
-      -1,   949,   950,  1371,   547,   548,  1374,    -1,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,   569,   975,  1396,    -1,
-      -1,    -1,    -1,   981,    -1,    37,   579,  1405,    -1,  1163,
-    1408,  1409,    -1,   586,    -1,    -1,    -1,    -1,   591,    -1,
-      -1,   999,  1000,  1177,  1178,    -1,    -1,    -1,    60,    -1,
-      -1,  1009,    -1,    -1,    -1,    -1,    -1,  1015,  1016,    71,
-    1018,  1019,  1020,    -1,    -1,    -1,    -1,  1445,    -1,  1447,
-      -1,    -1,  1030,  1031,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1462,    -1,    -1,    -1,   641,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   649,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
-      37,  1089,  1090,  1091,    -1,    -1,   689,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1102,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    60,    -1,    62,    -1,    64,    -1,    -1,
-      67,    68,    -1,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    -1,  1146,    29,
-      30,    31,    32,    -1,    -1,    35,   103,    37,    38,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   764,    -1,   766,    -1,    -1,    -1,    57,    -1,   772,
-      60,    -1,    62,    -1,    64,    65,   779,    67,    68,    69,
-      -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,    -1,
-      -1,    -1,    -1,  1377,    -1,    -1,    -1,    -1,  1206,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1394,   101,    -1,   103,    -1,    -1,    -1,  1225,    -1,   822,
-     823,   111,   825,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   840,    -1,    -1,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1273,  1274,    37,    -1,    -1,
-      -1,    -1,    -1,  1457,  1458,    -1,    -1,   880,    -1,    -1,
-      -1,   884,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      60,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      29,    30,    31,    32,    -1,    -1,    35,    36,    37,    38,
-      39,    -1,    41,    -1,    -1,    44,    45,    46,    47,    48,
-      49,    50,    51,    -1,    53,    -1,    -1,    56,    57,    -1,
-      59,    60,    -1,    62,    -1,    64,    65,   960,    67,    68,
-      69,    -1,    -1,    72,    73,    74,    75,    76,    77,    -1,
-      79,    80,   975,   976,    -1,    -1,    -1,    -1,    87,   982,
-      -1,    -1,  1390,    -1,    -1,   988,    -1,    -1,   991,    -1,
-     993,    -1,   101,    -1,   103,    -1,    36,   106,    38,    -1,
-      -1,   110,   111,   112,   113,   114,   115,    -1,    -1,  1012,
-      -1,    -1,    -1,    -1,    -1,   124,    -1,    -1,    -1,    59,
-    1023,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    69,
-      -1,    -1,    72,    73,    74,    75,    76,    77,    -1,    79,
-      80,    -1,  1045,    -1,  1047,    -1,    -1,    87,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1062,
-      -1,   101,  1470,   103,    -1,    -1,   106,    -1,    -1,    -1,
-     110,   111,   112,   113,   114,   115,    -1,    36,  1081,    38,
-      39,    -1,    41,  1491,  1492,    44,    45,    46,    47,    48,
-      49,    50,    51,    -1,    53,    -1,    -1,    56,    57,    -1,
-      59,    -1,    -1,    -1,    -1,  1513,    65,    -1,    -1,    -1,
-      69,    -1,    -1,    72,    73,    74,    75,    76,    77,    -1,
-      79,    80,    -1,    -1,  1127,    -1,    -1,    -1,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   101,  1146,   103,    -1,    -1,   106,    -1,    -1,
-      -1,   110,   111,   112,   113,   114,   115,    -1,  1161,  1162,
-      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
-      31,    32,    -1,    -1,    35,    36,    37,    38,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,    60,
-      -1,    62,    -1,    64,    65,    -1,    67,    68,    69,    -1,
-      -1,    72,    73,    74,    75,    76,    77,  1240,    79,    80,
-      -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     101,    -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,   110,
-     111,   112,   113,   114,   115,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   124,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      29,    30,    31,    32,    -1,    -1,    35,    36,    37,    38,
+      -1,   806,    29,    30,    31,    32,    -1,    -1,    35,    36,
+      37,    38,    -1,    -1,    -1,    -1,   821,    -1,    -1,    -1,
+      -1,  1479,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,    65,    -1,
+      67,  1406,    69,    70,    -1,    72,    73,    74,    -1,    -1,
+      77,    78,    79,    80,    81,    82,    -1,    84,    85,    -1,
+      -1,    -1,    -1,    -1,    -1,    92,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1531,    -1,    -1,    -1,    -1,    -1,    -1,
+     107,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,   116,
+     117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   130,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      59,    60,    -1,    62,    -1,    64,    65,    -1,    67,    68,
-      69,    -1,    -1,    72,    73,    74,    75,    76,    77,    -1,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1381,    -1,
-      -1,    -1,   101,    -1,   103,    -1,    -1,    -1,    -1,    -1,
-      -1,   110,   111,   112,   113,   114,   115,     4,     5,     6,
+      -1,  1496,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,  1521,  1522,    29,    30,
+      31,    -1,    -1,    -1,    -1,    -1,    37,   972,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1546,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    65,    -1,    67,  1002,    69,    -1,
+      -1,    72,    73,    -1,    -1,    -1,    -1,    -1,    -1,  1014,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    32,
+      -1,   112,    35,    36,    37,    38,    39,    -1,    41,    -1,
+    1055,    44,    45,    46,    47,    48,    49,    50,    51,    -1,
+      -1,    -1,    55,    -1,    -1,    -1,    59,    60,    -1,    62,
+      -1,    64,    65,    -1,    67,    -1,    69,    70,    -1,    72,
+      73,    74,    -1,    -1,    77,    78,    79,    80,    81,    82,
+      -1,    84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    92,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   107,    -1,   109,    -1,    -1,   112,
+      -1,    -1,  1127,   116,   117,   118,   119,   120,   121,    -1,
+      -1,    -1,    -1,   126,    -1,    -1,    -1,   130,    -1,    -1,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,  1170,    29,    30,    31,    32,
+      -1,    -1,    35,    36,    37,    38,    -1,    -1,    -1,  1184,
+    1185,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    64,    65,    -1,    67,    -1,    69,    70,    37,    72,
+      73,    74,    -1,    -1,    77,    78,    79,    80,    81,    82,
+      -1,    84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    92,
+      -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   107,    -1,   109,    76,    -1,    -1,
+      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
+      -1,    36,    37,    38,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    29,    30,    31,    -1,    -1,    -1,    64,
+      65,    37,    67,    -1,    69,    70,    -1,    72,    73,    74,
+      -1,    -1,    77,    78,    79,    80,    81,    82,    -1,    84,
+      85,    -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,    65,
+      -1,    -1,    -1,    -1,    70,    -1,    72,    73,    74,    -1,
+      76,    -1,   107,    -1,   109,    81,    82,    -1,    -1,   114,
+      -1,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1393,    -1,
+      -1,   107,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   117,    -1,    -1,    -1,  1410,    -1,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
-      37,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1453,    -1,    59,    60,    -1,    62,    -1,    64,    65,    -1,
-      67,    68,    69,    -1,    -1,    72,    73,    74,    75,    76,
-      77,    -1,    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   101,  1498,   103,    -1,    -1,    -1,
-      -1,   108,    -1,   110,   111,   112,   113,   114,   115,     4,
+      37,    38,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
+      -1,    29,    30,    31,    -1,    -1,    -1,    64,    65,    37,
+      67,    -1,    69,    70,    -1,    72,    73,    74,  1483,  1484,
+      77,    78,    79,    80,    81,    82,    -1,    84,    85,    -1,
+      -1,    -1,    -1,    -1,    -1,    92,    -1,    65,    -1,    -1,
+      -1,    -1,    -1,    -1,    72,    73,    -1,    -1,    -1,    -1,
+     107,    -1,   109,    -1,    -1,    -1,    -1,   114,    -1,   116,
+     117,   118,   119,   120,   121,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    -1,   117,
+      29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
+      30,    31,    -1,    -1,    -1,    64,    65,    37,    67,    -1,
+      69,    70,    -1,    72,    73,    74,    -1,    -1,    77,    78,
+      79,    80,    81,    82,    -1,    84,    85,    -1,    -1,    -1,
+      -1,    -1,    -1,    92,    -1,    65,    -1,    -1,    -1,    -1,
+      -1,    -1,    72,    73,    -1,    -1,    -1,    -1,   107,    -1,
+     109,    -1,    -1,    -1,    -1,   114,    -1,   116,   117,   118,
+     119,   120,   121,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    -1,   117,    29,    30,
+      31,    -1,    -1,    -1,    -1,    36,    37,    38,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    64,    65,    37,    67,    -1,    69,    70,
+      -1,    72,    73,    74,    -1,    -1,    77,    78,    79,    80,
+      81,    82,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,
+      -1,    92,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    76,    -1,   107,    -1,   109,    -1,
+      -1,    -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,
+     121,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
+      -1,    -1,    -1,    36,    37,    38,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    -1,    -1,    29,    30,    31,    32,    33,
+      34,    64,    65,    37,    67,    -1,    69,    70,    -1,    72,
+      73,    74,    -1,    -1,    77,    78,    79,    80,    81,    82,
+      -1,    84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    92,
+      -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,
+      -1,    -1,    -1,    -1,   107,    -1,   109,    -1,    -1,    -1,
+      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
-      -1,    36,    37,    38,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,    64,
-      65,    -1,    67,    68,    69,    -1,    -1,    72,    73,    74,
-      75,    76,    77,    -1,    79,    80,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   101,    -1,   103,    -1,
-      -1,    -1,    -1,   108,    -1,   110,   111,   112,   113,   114,
-     115,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      -1,    -1,    -1,    36,    37,    38,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,
-      -1,    64,    65,    -1,    67,    68,    69,    -1,    -1,    72,
-      73,    74,    75,    76,    77,    -1,    79,    80,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,    -1,
-     103,    -1,    -1,    -1,    -1,   108,    -1,   110,   111,   112,
-     113,   114,   115,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
-      31,    -1,    -1,    -1,    -1,    36,    37,    38,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,    60,
-      -1,    62,    -1,    64,    65,    -1,    67,    68,    69,    -1,
-      -1,    72,    73,    74,    75,    76,    77,    -1,    79,    80,
-      -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     101,    -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,   110,
-     111,   112,   113,   114,   115,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      59,    60,    -1,    62,    -1,    64,    65,    -1,    67,    68,
-      69,    -1,    -1,    72,    73,    74,    75,    76,    77,    -1,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   101,    -1,   103,    -1,    -1,    -1,    -1,    -1,
-      -1,   110,   111,   112,   113,   114,   115,     4,     5,     6,
+      -1,    36,    37,    38,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    64,
+      65,    37,    67,    -1,    69,    70,    -1,    72,    73,    74,
+      -1,    -1,    77,    78,    79,    80,    81,    82,    -1,    84,
+      85,    -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,    65,
+      -1,    -1,    -1,    -1,    70,    -1,    72,    73,    -1,    -1,
+      -1,    -1,   107,    -1,   109,    -1,    -1,    -1,    -1,    -1,
+      -1,   116,   117,   118,   119,   120,   121,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
-      37,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      37,    38,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
+      -1,    29,    30,    31,    -1,    -1,    -1,    64,    65,    37,
+      67,    -1,    69,    70,    -1,    72,    73,    74,    -1,    -1,
+      77,    78,    79,    80,    81,    82,    -1,    84,    85,    -1,
+      -1,    -1,    -1,    -1,    -1,    92,    -1,    65,    -1,    -1,
+      -1,    -1,    -1,    -1,    72,    73,    -1,    -1,    -1,    -1,
+     107,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,   116,
+     117,   118,   119,   120,   121,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
+      -1,    29,    30,    31,    32,    -1,    -1,    35,    -1,    37,
+      38,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
+      29,    30,    31,    -1,    62,    -1,    -1,    65,    37,    67,
+      -1,    69,    70,    -1,    72,    73,    74,    -1,    -1,    -1,
+      -1,    -1,    -1,    81,    82,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
+      -1,    -1,    -1,    72,    73,    -1,    -1,    -1,    -1,   107,
+      -1,   109,    -1,    -1,    -1,   113,    -1,    -1,    -1,   117,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    32,
+      -1,    -1,    35,    -1,    37,    38,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    59,    60,    -1,    62,    -1,    64,    65,    -1,
-      67,    68,    69,    -1,    -1,    72,    73,    74,    75,    76,
-      77,    -1,    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   101,    -1,   103,    -1,    -1,    -1,
-      -1,    -1,    -1,   110,   111,   112,   113,   114,   115,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
-      -1,    36,    37,    38,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    62,
+      -1,    -1,    65,    -1,    67,    -1,    69,    70,    -1,    72,
+      73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    81,    82,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,    64,
-      65,    -1,    67,    68,    69,    -1,    -1,    72,    73,    74,
-      75,    76,    77,    -1,    79,    80,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   101,    -1,   103,    -1,
-      -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,   114,
-     115,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
-      32,    -1,    -1,    35,    -1,    37,    38,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
-      62,    -1,    64,    65,    -1,    67,    68,    69,    -1,    -1,
-      -1,    -1,    -1,    -1,    76,    77,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   107,    -1,   109,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   117,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
+      -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    37,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,
-      -1,   103,    -1,    -1,    -1,   107,    -1,    -1,    -1,   111,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,    67,
+      -1,    69,    70,    -1,    72,    73,    74,    -1,    -1,    -1,
+      -1,    -1,    -1,    81,    82,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,
+      -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
@@ -3581,416 +3575,355 @@
       -1,    -1,    35,    -1,    37,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    62,
-      -1,    64,    -1,    -1,    67,    68,    -1,    -1,    71,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    29,    30,    31,    32,    -1,
-     103,    35,    -1,    37,    -1,    -1,    -1,    -1,   111,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    62,    -1,
-      64,    -1,    -1,    67,    68,     4,     5,     6,     7,     8,
+      -1,    -1,    65,    -1,    67,    -1,    69,    -1,    -1,    72,
+      73,    -1,    -1,    76,    -1,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
+      -1,    29,    30,    31,    32,    -1,   109,    35,    -1,    37,
+      -1,    -1,    -1,    -1,   117,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,    67,
+      -1,    69,    -1,    -1,    72,    73,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
+      37,   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,
+      67,    -1,    69,    -1,    -1,    72,    73,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
+      37,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     117,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,
+      67,    -1,    69,    70,    -1,    72,    73,    74,    -1,    -1,
+      -1,    -1,    -1,    -1,    81,    82,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     107,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     117,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
+      -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    65,    -1,    67,    -1,    69,    -1,    -1,    72,
+      73,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
+      -1,    -1,    -1,    -1,    37,   108,   109,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   117,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    65,    -1,    67,    -1,    69,    -1,    -1,    72,
+      73,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   117,     4,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    37,   103,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,
+      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    37,    -1,
+      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    -1,    -1,    29,    30,    31,    65,    -1,    67,    -1,
+      69,    37,    -1,    72,    73,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    60,    -1,    62,    -1,    64,    65,    -1,    67,    68,
-      69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,
+      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    65,
+      -1,    -1,    -1,    -1,    70,    -1,    72,    73,    74,    -1,
+     109,    -1,    -1,    -1,    -1,    81,    82,    -1,   117,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    -1,   109,    29,    30,    31,    -1,    -1,    -1,
+      -1,   117,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   101,    -1,   103,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
-      31,    -1,    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,
+      65,    -1,    67,    -1,    69,    -1,    -1,    72,    73,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
+      -1,    -1,    37,    -1,   109,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   117,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,
-      -1,    62,    -1,    64,    -1,    -1,    67,    68,    -1,    -1,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
-      -1,   102,   103,    37,    -1,    -1,    -1,    -1,    -1,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    62,    -1,
-      64,    -1,    -1,    67,    68,    -1,    -1,    -1,    -1,    -1,
+      65,    -1,    67,    -1,    69,    -1,    -1,    72,    73,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
+      -1,    -1,    37,    -1,   109,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   117,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
-      -1,    37,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-      -1,    29,    30,    31,    60,    -1,    62,    -1,    64,    37,
-      -1,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      65,    -1,    67,    -1,    69,    -1,    -1,    72,    73,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
+      -1,    -1,    37,    -1,   109,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   117,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    60,    89,    -1,    -1,    -1,    65,    -1,    67,
-      68,    -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-      -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    37,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    60,    -1,    62,    -1,    64,    -1,    -1,    67,
-      68,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    37,   103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    62,
-      -1,    64,    -1,    -1,    67,    68,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-      -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    37,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    60,    -1,    62,    -1,    64,    -1,    -1,    67,
-      68,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,
-      -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-      59,    60,    -1,    -1,    -1,    -1,    65,    -1,    67,    68,
-      69,    -1,    -1,    72,    73,    74,    75,    76,    77,    -1,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   101,    -1,   103,    -1,    -1,   106,    -1,    -1,
-      -1,   110,   111,   112,   113,   114,   115,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      -1,    -1,    -1,    36,    37,    38,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    -1,
-      -1,    -1,    65,    -1,    67,    68,    69,    -1,    -1,    72,
-      73,    74,    75,    76,    77,    -1,    79,    80,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,    -1,
-     103,   104,    -1,    -1,    -1,    -1,    -1,   110,   111,   112,
-     113,   114,   115,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
-      37,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    59,    60,    -1,    -1,    -1,    -1,    65,    -1,
-      67,    68,    69,    -1,    -1,    72,    73,    74,    75,    76,
-      77,    -1,    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   101,   102,   103,    -1,    -1,    -1,
-      -1,    -1,    -1,   110,   111,   112,   113,   114,   115,    10,
+      65,    -1,    67,    -1,    69,    -1,    -1,    72,    73,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
       31,    -1,    -1,    -1,    -1,    36,    37,    38,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,    60,
-      -1,    -1,    -1,    -1,    65,    -1,    67,    68,    69,    -1,
-      -1,    72,    73,    74,    75,    76,    77,    -1,    79,    80,
-      -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     101,    -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,   110,
-     111,   112,   113,   114,   115,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
-      -1,    36,    37,    38,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    59,    60,    -1,    -1,    -1,    -1,
-      65,    -1,    67,    68,    69,    -1,    -1,    72,    73,    74,
-      75,    76,    77,    -1,    79,    80,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   101,    -1,   103,    -1,
-      -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,   114,
-     115,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   117,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    64,    65,    -1,    -1,    -1,    -1,    70,
+      -1,    72,    73,    74,    -1,    -1,    77,    78,    79,    80,
+      81,    82,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,
+      -1,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,   109,    -1,
+      -1,   112,    -1,    -1,    -1,   116,   117,   118,   119,   120,
+     121,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
       29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      59,    60,    -1,    -1,    -1,    -1,    65,    -1,    67,    68,
-      69,    -1,    -1,    72,    73,    74,    75,    76,    77,    -1,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   101,    -1,   103,    -1,    -1,    -1,    -1,    -1,
-      -1,   110,   111,   112,   113,   114,   115,    10,    11,    12,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      29,    30,    31,    -1,    -1,    64,    65,    -1,    37,    -1,
+      -1,    70,    -1,    72,    73,    74,    -1,    -1,    77,    78,
+      79,    80,    81,    82,    -1,    84,    85,    -1,    -1,    -1,
+      -1,    -1,    -1,    92,    -1,    -1,    65,    -1,    -1,    -1,
+      -1,    70,    -1,    72,    73,    74,    -1,    76,   107,    -1,
+     109,   110,    81,    82,    -1,    -1,    -1,   116,   117,   118,
+     119,   120,   121,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+     109,    -1,    29,    30,    31,    -1,    -1,    -1,   117,    36,
+      37,    38,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    29,    30,    31,    -1,    -1,    64,    65,    -1,
+      37,    -1,    -1,    70,    -1,    72,    73,    74,    -1,    -1,
+      77,    78,    79,    80,    81,    82,    -1,    84,    85,    -1,
+      -1,    -1,    -1,    -1,    -1,    92,    -1,    -1,    65,    -1,
+      -1,    -1,    -1,    -1,    -1,    72,    73,    -1,    -1,    76,
+     107,   108,   109,    -1,    -1,    -1,    -1,    -1,    -1,   116,
+     117,   118,   119,   120,   121,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,   109,    -1,    29,    30,    31,    -1,    -1,    -1,
+     117,    36,    37,    38,    -1,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    64,
+      65,    -1,    37,    -1,    -1,    70,    -1,    72,    73,    74,
+      -1,    -1,    77,    78,    79,    80,    81,    82,    -1,    84,
+      85,    -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,    -1,
+      65,    -1,    -1,    -1,    -1,    70,    -1,    72,    73,    -1,
+      -1,    -1,   107,    -1,   109,    -1,    -1,    -1,    -1,    -1,
+      -1,   116,   117,   118,   119,   120,   121,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,   109,    -1,    29,    30,    31,    -1,
+      -1,    -1,   117,    36,    37,    38,    -1,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      -1,    -1,    -1,    36,    37,    38,    -1,    -1,    -1,    -1,
+      -1,    64,    65,    -1,    37,    38,    -1,    70,    -1,    72,
+      73,    74,    -1,    -1,    77,    78,    79,    80,    81,    82,
+      -1,    84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    92,
+      -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+      73,    -1,    -1,    -1,   107,    -1,   109,    -1,    -1,    -1,
+      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,   109,    -1,    29,    30,
+      31,    -1,    -1,    -1,   117,    36,    37,    38,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
+      31,    -1,    -1,    64,    65,    -1,    37,    -1,    -1,    70,
+      -1,    72,    73,    74,    -1,    -1,    77,    78,    79,    80,
+      81,    82,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,
+      -1,    92,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
+      -1,    72,    73,    -1,    -1,    -1,   107,    -1,   109,    -1,
+      -1,    -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,
+     121,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,   109,    -1,
+      29,    30,    31,    -1,    -1,    -1,   117,    36,    37,    38,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
+      30,    31,    -1,    -1,    -1,    64,    65,    37,    -1,    -1,
+      -1,    70,    -1,    72,    73,    74,    -1,    -1,    77,    78,
+      79,    80,    81,    82,    -1,    84,    85,    -1,    -1,    -1,
+      -1,    -1,    -1,    92,    -1,    65,    -1,    -1,    -1,    -1,
+      70,    -1,    72,    73,    74,    -1,    -1,    -1,   107,    -1,
+     109,    81,    82,    -1,    -1,    -1,    -1,   116,   117,   118,
+     119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,   109,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
+      -1,    -1,    -1,    -1,    -1,    37,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    29,    30,    31,    -1,
+      -1,    -1,    -1,    65,    37,    -1,    -1,    -1,    70,    -1,
+      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    81,
+      82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+      73,    -1,    -1,    76,    -1,   107,    -1,   109,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   117,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    -1,
-      -1,    -1,    65,    -1,    67,    68,    69,    -1,    -1,    72,
-      73,    74,    75,    76,    77,    -1,    79,    80,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,    -1,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,   110,   111,   112,
-     113,   114,   115,    10,    11,    12,    13,    14,    15,    16,
+      -1,    -1,    -1,    -1,   107,    -1,   109,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   117,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    29,    30,    31,    -1,    -1,    -1,
+      -1,    -1,    37,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
+      65,    37,    38,    -1,    -1,    -1,    -1,    72,    73,    -1,
+      -1,    76,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    65,
+      -1,    29,    30,    31,    -1,    -1,    72,    73,    -1,    37,
+      38,    -1,   107,    -1,   109,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   117,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,
+      -1,    -1,    -1,   109,    72,    73,    -1,   113,    -1,    -1,
+      -1,   117,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
+      -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    37,
+      -1,   109,    -1,    -1,    -1,   113,    -1,    -1,    -1,   117,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    65,    -1,    29,
+      30,    31,    -1,    -1,    72,    73,    -1,    37,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
+      31,    -1,    -1,    -1,    -1,    65,    37,    -1,    -1,   107,
+      -1,   109,    72,    73,    -1,    -1,    -1,    -1,    -1,   117,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
+      -1,    72,    73,    -1,    -1,    -1,    -1,   107,    -1,   109,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,    -1,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    -1,   109,    29,
+      30,    31,    -1,    -1,    -1,    -1,   117,    37,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
+      31,    -1,    -1,    -1,    -1,    65,    37,    -1,    -1,    -1,
+      -1,    -1,    72,    73,    -1,    -1,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    65,    -1,    29,    30,    31,    -1,
+      -1,    72,    73,    -1,    37,    -1,    -1,    -1,    -1,   109,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,   109,    72,
+      73,    -1,    -1,    -1,    -1,    -1,   117,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
+      -1,    -1,    -1,    -1,    37,    -1,   109,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   117,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    65,    -1,    29,    30,    31,    -1,    -1,    72,
+      73,    -1,    37,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
+      65,    37,    -1,    -1,    -1,    -1,   109,    72,    73,    -1,
+      -1,    -1,    -1,    -1,   117,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,
+      -1,    -1,    -1,    -1,    -1,    -1,    72,    73,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   117,    -1,    -1,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    -1,   109,    29,    30,    31,    -1,    -1,    -1,
+      -1,   117,    37,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
+      65,    37,    -1,    -1,    -1,    -1,    -1,    72,    73,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,
+      -1,    -1,    -1,    -1,    -1,    -1,    72,    73,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   117,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   117,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
+      -1,    -1,    -1,    -1,    -1,    37,    -1,    -1,    36,    -1,
+      38,    39,    -1,    41,    -1,    -1,    44,    45,    46,    47,
+      48,    49,    50,    51,    -1,    -1,    54,    55,    -1,    -1,
+      -1,    59,    60,    65,    62,    67,    64,    69,    -1,    -1,
+      72,    73,    70,    -1,    -1,    -1,    74,    -1,    -1,    77,
+      78,    79,    80,    81,    82,    -1,    84,    85,    -1,    -1,
+      -1,    -1,    -1,    -1,    92,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,    -1,   107,
+      -1,   109,    -1,    -1,   112,    -1,    -1,    -1,   116,   117,
+     118,   119,   120,   121,    -1,    -1,    -1,    -1,   126,    -1,
+      -1,    36,   130,    38,    39,    -1,    41,    -1,    -1,    44,
+      45,    46,    47,    48,    49,    50,    51,    -1,    -1,    -1,
+      55,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,    64,
+      -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    74,
+      -1,    -1,    77,    78,    79,    80,    81,    82,    -1,    84,
+      85,    -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   107,    -1,   109,    -1,    -1,   112,    -1,    -1,
+      -1,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
+      -1,   126,    -1,    -1,    36,   130,    38,    39,    -1,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      -1,    -1,    54,    55,    -1,    -1,    -1,    59,    60,    -1,
+      62,    -1,    64,    -1,    -1,    -1,    -1,    -1,    70,    -1,
+      -1,    -1,    74,    -1,    -1,    77,    78,    79,    80,    81,
+      82,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,    -1,
+      92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   107,    -1,   109,    -1,    -1,
+     112,    -1,    -1,    -1,   116,   117,   118,   119,   120,   121,
+      36,    -1,    38,    39,   126,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    -1,    -1,    -1,    55,
+      -1,    -1,    -1,    59,    60,    -1,    62,    -1,    64,    -1,
+      -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    74,    -1,
+      -1,    77,    78,    79,    80,    81,    82,    -1,    84,    85,
+      -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   107,    -1,   109,    -1,    -1,   112,    -1,    -1,    -1,
+     116,   117,   118,   119,   120,   121,    36,    -1,    38,    39,
+     126,    41,    -1,    -1,    44,    45,    46,    47,    48,    49,
+      50,    51,    -1,    -1,    -1,    55,    -1,    -1,    -1,    59,
+      60,    -1,    62,    -1,    64,    -1,    -1,    -1,    -1,    -1,
+      70,    -1,    -1,    -1,    74,    -1,    -1,    77,    78,    79,
+      80,    81,    82,    -1,    84,    85,    -1,    -1,    -1,    -1,
+      -1,    -1,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,   109,
+      -1,    -1,   112,    -1,    -1,    -1,   116,   117,   118,   119,
+     120,   121,    -1,    -1,    -1,    -1,   126,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
+      37,    -1,    -1,    36,    -1,    38,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    36,    -1,    38,    -1,    -1,    -1,    65,    -1,
+      67,    64,    69,    -1,    -1,    72,    73,    70,    -1,    -1,
+      -1,    74,    -1,    -1,    77,    78,    79,    80,    81,    82,
+      64,    84,    85,    -1,    -1,    -1,    70,    94,    -1,    92,
+      74,    -1,    -1,    77,    78,    79,    80,    81,    82,    -1,
+      84,    85,    -1,    -1,   107,    -1,   109,    -1,    92,    -1,
+      36,   114,    38,   116,   117,   118,   119,   120,   121,    -1,
+      -1,    -1,    -1,   107,    -1,   109,    -1,    -1,   112,    36,
+      -1,    38,   116,   117,   118,   119,   120,   121,    64,    -1,
+      -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    74,    -1,
+      -1,    77,    78,    79,    80,    81,    82,    64,    84,    85,
+      -1,    -1,    -1,    70,    -1,    -1,    92,    74,    -1,    -1,
+      77,    78,    79,    80,    81,    82,    -1,    84,    85,    -1,
+      -1,   107,    -1,   109,    -1,    92,    -1,    36,    -1,    38,
+     116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
+     107,    -1,   109,    -1,    -1,    -1,    36,    -1,    38,   116,
+     117,   118,   119,   120,   121,    64,    -1,    -1,    -1,    -1,
+      -1,    70,    -1,    -1,    -1,    74,    -1,    -1,    77,    78,
+      79,    80,    81,    82,    64,    84,    85,    -1,    -1,    -1,
+      70,    -1,    -1,    92,    74,    -1,    -1,    77,    78,    79,
+      80,    81,    82,    -1,    84,    85,    -1,    -1,   107,    -1,
+     109,    -1,    92,    -1,    36,    -1,    38,   116,   117,   118,
+     119,   120,   121,    -1,    -1,    -1,    -1,   107,    -1,   109,
+      -1,    -1,    -1,    36,    -1,    38,   116,   117,   118,   119,
+     120,   121,    64,    -1,    -1,    -1,    -1,    -1,    70,    -1,
+      -1,    -1,    74,    -1,    -1,    77,    78,    79,    80,    81,
+      82,    64,    84,    85,    -1,    -1,    -1,    70,    -1,    -1,
+      92,    74,    -1,    -1,    77,    78,    79,    80,    81,    82,
+      -1,    84,    85,    -1,    -1,   107,    -1,    -1,    -1,    92,
+      -1,    36,    -1,    38,   116,   117,   118,   119,   120,   121,
+      -1,    -1,    -1,    -1,   107,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,    64,
+      -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    74,
+      -1,    -1,    77,    78,    79,    80,    81,    82,    -1,    84,
+      85,    -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   116,   117,   118,   119,   120,   121,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    65,    -1,
-      67,    68,    69,    -1,    71,    -1,    -1,    -1,    -1,    76,
-      77,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      29,    30,    31,    -1,   101,    -1,   103,    -1,    37,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    60,    -1,    -1,    -1,    -1,    65,    -1,    67,    68,
-      69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
-      31,    -1,   101,    -1,   103,    -1,    37,    -1,    -1,    -1,
-      -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,
-      -1,    -1,    -1,    -1,    65,    -1,    67,    68,    69,    -1,
-      -1,    -1,    -1,    -1,    -1,    76,    77,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-     101,    -1,   103,    -1,    37,    -1,    -1,    -1,    -1,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,
-      -1,    -1,    65,    -1,    67,    68,    69,    -1,    -1,    -1,
-      -1,    -1,    -1,    76,    77,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,    -1,   101,    -1,
-     103,    -1,    37,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
-      65,    -1,    67,    68,    69,    -1,    -1,    -1,    -1,    -1,
-      -1,    76,    77,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    -1,   101,    -1,   103,    -1,
-      37,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    65,    -1,
-      67,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,
-      77,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      29,    30,    31,    -1,    -1,    -1,   103,    -1,    37,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,    67,    68,
-      -1,    -1,    71,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
-      37,    -1,   101,    -1,   103,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    68,    -1,    -1,    71,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
-      -1,    -1,    37,    38,   101,    -1,   103,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    68,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
-      -1,    37,    38,    -1,    -1,    -1,    -1,    -1,   103,    -1,
-      -1,    -1,   107,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
-      -1,    67,    68,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
-      37,    -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,
-      -1,   107,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    68,    -1,    -1,    71,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
-      -1,    -1,    37,    38,    -1,    -1,   103,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    68,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
-      -1,    37,    -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,
-      -1,    -1,   107,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    65,
-      -1,    67,    68,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
-      37,    38,    -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    68,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-      -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    37,
-      -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-      68,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    37,    -1,
-      -1,    -1,    -1,   101,    -1,   103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,    67,    68,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
-      30,    31,    -1,    -1,    -1,    -1,    -1,    37,    -1,    -1,
-      -1,    -1,   101,    -1,   103,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      60,    -1,    -1,    -1,    -1,    -1,    -1,    67,    68,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
-      31,    -1,    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,
-      -1,    -1,    -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    68,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
-      -1,    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,
-      -1,    -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,
-      -1,    -1,    -1,    -1,    -1,    67,    68,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,
-      -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    68,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
-      -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,    -1,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,
-      -1,    -1,    -1,    67,    68,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
-      -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,    -1,   103,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    68,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
-      -1,    37,    -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
-      -1,    67,    68,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
-      37,    -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    68,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-      -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    37,
-      -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-      68,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    37,    -1,
-      -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,    67,    68,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
-      -1,    -1,    -1,    37,   103,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    62,    -1,
-      64,    -1,    -1,    67,    68,    -1,    36,    -1,    38,    39,
-      -1,    41,    -1,    -1,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    -1,    -1,    56,    57,    -1,    59,
-      -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,   102,    69,
-      -1,    -1,    72,    73,    74,    75,    76,    77,    -1,    79,
-      80,    -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   101,    -1,   103,    -1,    -1,   106,    -1,    -1,    -1,
-     110,   111,   112,   113,   114,   115,    -1,    36,    -1,    38,
-      39,    -1,    41,    -1,   124,    44,    45,    46,    47,    48,
-      49,    50,    51,    -1,    53,    -1,    -1,    56,    57,    -1,
-      59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
-      69,    -1,    -1,    72,    73,    74,    75,    76,    77,    -1,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   101,    -1,   103,    -1,    -1,   106,    -1,    -1,
-      -1,   110,   111,   112,   113,   114,   115,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   124,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-      -1,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    37,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
-      30,    31,    60,    -1,    62,    -1,    64,    37,    -1,    67,
-      68,    -1,    36,    -1,    38,    39,    -1,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      60,    89,    56,    57,    -1,    59,    -1,    67,    68,    -1,
-      -1,    65,    -1,    -1,    -1,    69,    -1,    -1,    72,    73,
-      74,    75,    76,    77,    -1,    79,    80,    -1,    -1,    -1,
-      -1,    -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,    -1,   103,
-      -1,    -1,   106,    -1,    -1,    -1,   110,   111,   112,   113,
-     114,   115,    36,    -1,    38,    39,    -1,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    -1,    53,
-      -1,    -1,    56,    57,    -1,    59,    -1,    -1,    -1,    -1,
-      -1,    65,    -1,    -1,    -1,    69,    -1,    -1,    72,    73,
-      74,    75,    76,    77,    -1,    79,    80,    -1,    -1,    -1,
-      -1,    -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,    36,
-      -1,    38,    -1,    -1,    -1,    -1,    -1,   101,    -1,   103,
-      -1,    -1,   106,    -1,    -1,    -1,   110,   111,   112,   113,
-     114,   115,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,
-      -1,    -1,    69,    -1,    -1,    72,    73,    74,    75,    76,
-      77,    -1,    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    -1,    -1,    -1,    -1,    -1,    36,    -1,    38,    -1,
-      -1,    -1,    -1,    -1,   101,    -1,   103,    -1,    -1,    -1,
-      -1,    -1,   109,   110,   111,   112,   113,   114,   115,    59,
-      -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    69,
-      -1,    -1,    72,    73,    74,    75,    76,    77,    -1,    79,
-      80,    -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,    -1,
-      -1,    -1,    -1,    36,    -1,    38,    -1,    -1,    -1,    -1,
-      -1,   101,    -1,   103,    -1,    -1,   106,    -1,    -1,    -1,
-     110,   111,   112,   113,   114,   115,    59,    -1,    -1,    -1,
-      -1,    -1,    65,    -1,    -1,    -1,    69,    -1,    -1,    72,
-      73,    74,    75,    76,    77,    -1,    79,    80,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,
-      36,    -1,    38,    -1,    -1,    -1,    -1,    -1,   101,    -1,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,   110,   111,   112,
-     113,   114,   115,    59,    -1,    -1,    -1,    -1,    -1,    65,
-      -1,    -1,    -1,    69,    -1,    -1,    72,    73,    74,    75,
-      76,    77,    -1,    79,    80,    -1,    -1,    -1,    -1,    -1,
-      -1,    87,    -1,    -1,    -1,    -1,    -1,    36,    -1,    38,
-      -1,    -1,    -1,    -1,    -1,   101,    -1,   103,    -1,    -1,
-      -1,    -1,    -1,    -1,   110,   111,   112,   113,   114,   115,
-      59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
-      69,    -1,    -1,    72,    73,    74,    75,    76,    77,    -1,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,
-      -1,    -1,    -1,    -1,    36,    -1,    38,    -1,    -1,    -1,
-      -1,    -1,   101,    -1,   103,    -1,    -1,    -1,    -1,    -1,
-      -1,   110,   111,   112,   113,   114,   115,    59,    -1,    -1,
-      -1,    -1,    -1,    65,    -1,    -1,    -1,    69,    -1,    -1,
-      72,    73,    74,    75,    76,    77,    -1,    79,    80,    -1,
-      -1,    -1,    -1,    -1,    -1,    87,    -1,    -1,    -1,    -1,
-      -1,    36,    -1,    38,    -1,    -1,    -1,    -1,    -1,   101,
-      -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,   110,   111,
-     112,   113,   114,   115,    59,    -1,    -1,    -1,    -1,    -1,
-      65,    -1,    -1,    -1,    69,    -1,    -1,    72,    73,    74,
-      75,    76,    77,    -1,    79,    80,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,    36,    -1,
-      38,    -1,    -1,    -1,    -1,    -1,   101,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,   114,
-     115,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,
-      -1,    69,    -1,    -1,    72,    73,    74,    75,    76,    77,
-      -1,    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    87,
-      -1,    -1,    -1,    -1,    -1,    36,    -1,    38,    -1,    -1,
-      -1,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   110,   111,   112,   113,   114,   115,    59,    -1,
-      -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    69,    -1,
-      -1,    72,    73,    74,    75,    76,    77,    -1,    79,    80,
-      -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,    -1,    -1,
-      -1,    -1,    36,    -1,    38,    -1,    -1,    -1,    -1,    -1,
-     101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
-     111,   112,   113,   114,   115,    59,    -1,    -1,    -1,    -1,
-      -1,    65,    -1,    -1,    -1,    69,    -1,    -1,    72,    73,
-      74,    75,    76,    77,    -1,    79,    80,    -1,    -1,    -1,
-      -1,    -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,
-     114,   115,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,
-      62,    -1,    64,    65,    -1,    67,    68,    69,    -1,    -1,
-      -1,    -1,    -1,    -1,    76,    77,     3,     4,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,
+      67,    -1,    69,    70,    -1,    72,    73,    74,    -1,    -1,
+      -1,    -1,    -1,    -1,    81,    82,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
@@ -3998,12 +3931,6 @@
       37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    60,    -1,    62,    -1,    64,    -1,    -1,
-      67,    68,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
-      31,    -1,    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,
-      -1,    62,    -1,    64,    -1,    -1,    67,    68,     4,     5,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,
+      67,    -1,    69,    -1,    -1,    72,    73,     3,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
@@ -4011,14 +3938,13 @@
       -1,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    60,    -1,    62,    -1,    64,    -1,
-      -1,    67,    68,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
-      37,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      29,    30,    31,    60,    -1,    -1,    -1,    -1,    37,    -1,
-      67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,
+      -1,    67,    -1,    69,    -1,    -1,    72,    73,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
+      -1,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,    67,    68
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,
+      -1,    67,    -1,    69,    -1,    -1,    72,    73
 };
 
@@ -4030,154 +3956,158 @@
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    29,    30,    31,    32,    35,
-      37,    38,    57,    60,    62,    64,    65,    67,    68,    69,
-      76,    77,   101,   103,   111,   129,   132,   189,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   222,   223,   224,   225,
-     226,   227,   228,   229,   231,   232,   233,   234,   235,   236,
-     237,   245,   246,   272,   273,   274,   282,   285,   291,   292,
-     294,   296,   297,   303,   308,   312,   313,   314,   315,   316,
-     317,   318,   319,   339,   356,   357,   358,   359,    65,   111,
-     131,   206,   208,   216,   218,   228,   232,   234,   273,    75,
-     101,   301,   302,   303,   301,   301,    65,    67,    68,    69,
-     130,   131,   262,   263,   283,   284,    67,    68,   263,   101,
-     294,    11,   190,   101,   111,   308,   313,   314,   315,   317,
-     318,   319,   104,   126,   103,   209,   216,   218,   312,   316,
-     355,   356,   359,   360,   127,   123,   266,   106,   127,   164,
-      67,    68,   129,   261,   127,   127,   127,   108,   127,    67,
-      68,   101,   111,   298,   307,   308,   309,   310,   311,   312,
-     316,   320,   321,   322,   323,   324,   330,     3,    27,    71,
-     230,     3,     5,    67,   103,   111,   208,   219,   223,   226,
-     235,   274,   312,   316,   359,   206,   208,   218,   228,   232,
-     234,   273,   312,   316,    32,   224,   224,   219,   226,   127,
-     224,   219,   224,   219,    68,   101,   106,   263,   274,   106,
-     263,   224,   219,   108,   127,   127,     0,   126,   101,   164,
-     301,   301,   126,   103,   216,   218,   357,   261,   261,   218,
-     123,   101,   111,   298,   308,   312,   103,   111,   359,   295,
-     221,   303,   101,   279,   101,   101,    49,   101,    36,    38,
-      59,    65,    69,    72,    73,    74,    75,    79,    80,    87,
-     101,   103,   110,   111,   112,   113,   114,   115,   128,   132,
-     133,   134,   135,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   155,   157,   216,
-     265,   281,   355,   360,   218,   102,   102,   102,   102,   102,
-     102,   102,    67,    68,   103,   216,   261,   339,   357,   103,
-     111,   155,   208,   209,   215,   218,   222,   223,   228,   231,
-     232,   234,   251,   252,   256,   257,   258,   259,   273,   339,
-     351,   352,   353,   354,   359,   360,   104,   101,   312,   316,
-     359,   101,   108,   124,   103,   106,   111,   155,   267,   107,
-     126,   108,   124,   101,   108,   124,   108,   124,   108,   124,
-     301,   124,   308,   309,   310,   311,   321,   322,   323,   324,
-     218,   307,   320,    57,   300,   103,   301,   338,   339,   301,
-     301,   164,   126,   101,   301,   338,   301,   301,   218,   298,
-     101,   101,   217,   218,   216,   218,   104,   126,   216,   355,
-     360,   164,   126,   261,   266,   208,   223,   312,   316,   164,
-     126,   283,   218,   228,   124,   218,   218,   281,    38,   103,
-     216,   238,   239,   240,   241,   355,   359,   106,   247,   263,
-     106,   218,   283,   124,   124,   294,   126,   131,   260,     3,
-     127,   198,   199,   213,   215,   218,   126,   300,   101,   300,
-     155,   308,   218,   101,   126,   261,   106,    32,    33,    34,
-     216,   275,   276,   278,   126,   121,   123,   280,   126,   219,
-     225,   226,   261,   304,   305,   306,   101,   133,   101,   140,
-     140,   142,   101,   140,   101,   101,   140,   140,   131,   103,
-     155,   160,   164,   216,   264,   355,   104,   126,   142,   142,
-      75,    78,    79,    80,   101,   103,   105,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   123,   159,   142,
-     111,   116,   117,   113,   114,    81,    82,    83,    84,   118,
-     119,    85,    86,   112,   120,   121,    87,    88,   122,   123,
-     362,   101,   111,   334,   335,   336,   337,   338,   102,   108,
-     101,   338,   339,   101,   338,   339,   126,   101,   216,   357,
-     104,   126,   103,   111,   127,   216,   218,   350,   351,   359,
-     360,   127,   101,   103,   111,   308,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   339,   340,   341,   342,   343,
-     344,   345,   111,   359,   218,   127,   127,   111,   216,   218,
-     352,   261,   216,   339,   352,   261,   101,   126,   126,   126,
-     104,   126,    65,    73,   103,   105,   263,   267,   268,   269,
-     270,   271,   126,   126,   126,   126,   126,   126,   298,   102,
-     102,   102,   102,   102,   102,   102,   307,   320,   101,   266,
-     104,   198,   126,   298,   160,   265,   160,   265,   298,   103,
-     198,   300,   164,   126,   198,   102,   240,   241,   104,   126,
-     101,   109,   111,   242,   244,   307,   308,   320,   338,   346,
-     347,   348,   349,   107,   239,   108,   124,   108,   124,   263,
-     238,   108,   361,   123,   248,   247,   218,   253,   254,   255,
-     258,   259,   102,   108,   164,   126,   111,   155,   126,   215,
-     218,   252,   351,   359,   292,   293,   101,   111,   325,   102,
-     108,   362,   263,   275,   101,   106,   263,   265,   275,   102,
-     108,   101,   133,   102,   109,   264,   264,   103,   131,   137,
-     155,   265,   264,   104,   126,   102,   108,   102,   101,   111,
-     346,   102,   108,   155,   103,   131,   103,   136,   137,   126,
-     103,   131,   155,   155,   142,   142,   142,   143,   143,   144,
-     144,   145,   145,   145,   145,   146,   146,   147,   148,   149,
-     150,   151,   109,   160,   155,   126,   335,   336,   337,   218,
-     334,   301,   301,   155,   265,   126,   260,   111,   126,   216,
-     339,   352,   218,   222,   104,   126,   104,   359,   104,   101,
-     126,   308,   326,   327,   328,   331,   341,   342,   343,   104,
-     126,   218,   325,   329,   340,   101,   301,   344,   362,   301,
-     301,   362,   101,   301,   344,   301,   301,   301,   301,   339,
-     216,   350,   360,   261,   104,   108,   104,   108,   362,   216,
-     352,   362,   249,   250,   251,   252,   249,   249,   261,   155,
-     126,   103,   263,   109,   108,   361,   267,    73,   103,   109,
-     271,    28,   200,   201,   261,   249,   131,   298,   131,   300,
-     101,   338,   339,   101,   338,   339,   133,   339,   164,   253,
-     102,   102,   102,   102,   104,   164,   198,   164,   106,   124,
-     124,   103,   308,   347,   348,   349,   153,   154,   218,   346,
-     243,   244,   243,   301,   301,   263,   301,   107,   263,   107,
-     154,   361,   127,   127,   131,   213,   127,   127,   249,   101,
-     111,   359,   127,   107,   218,   276,   277,   127,   126,   126,
-     101,   127,   102,   305,   160,   161,   109,   124,   103,   133,
-     191,   192,   193,   102,   102,   126,   109,   102,   102,   102,
-     155,   218,   106,   142,   157,   155,   156,   158,   108,   127,
-     126,   126,   102,   108,   155,   126,   153,   109,   253,   102,
-     102,   102,   334,   253,   102,   249,   216,   352,   103,   111,
-     155,   155,   218,   331,   253,   102,   102,   102,   102,   102,
-     102,   102,     7,   218,   325,   329,   340,   126,   126,   362,
-     126,   126,   102,   127,   127,   127,   127,   266,   127,   153,
-     154,   155,   299,   126,   267,   269,   107,   126,   202,   263,
-      38,    39,    41,    44,    45,    46,    47,    48,    49,    50,
-      51,    53,    56,   103,   131,   161,   162,   163,   164,   165,
-     166,   168,   169,   181,   183,   184,   189,   203,   297,    28,
-     127,   123,   266,   126,   126,   102,   127,   164,   238,   104,
-     102,   102,   102,   346,   242,   248,   107,   102,   108,   104,
-     104,   127,   218,   108,   362,   279,   102,   275,   206,   208,
-     216,   287,   288,   289,   290,   281,   102,   102,   109,   154,
-     101,   102,   109,   108,   155,   155,   268,   108,   127,   158,
-     104,   131,   138,   139,   155,   137,   127,   138,   153,   157,
-     127,   101,   338,   339,   127,   127,   126,   127,   127,   127,
-     155,   102,   127,   101,   338,   339,   101,   344,   101,   344,
-     339,   217,     7,   111,   127,   155,   253,   253,   252,   256,
-     256,   257,   108,   108,   102,   102,   104,    89,   115,   127,
-     127,   138,   267,   155,   108,   124,   203,   207,   218,   222,
-     101,   101,   162,   101,   101,   124,   131,   124,   131,   111,
-     131,   161,   101,   164,   124,   155,   104,   109,   124,   127,
-     126,   127,   202,   102,   155,   253,   253,   301,   102,   107,
-     101,   338,   339,   126,   102,   126,   127,   298,   107,   126,
-     127,   127,   102,   106,   191,   104,   154,   124,   191,   193,
-     108,   127,   361,   156,   104,   127,    78,   105,   108,   127,
-     127,   104,   127,   102,   126,   102,   102,   104,   104,   104,
-     127,   102,   126,   126,   126,   155,   155,   127,   104,   127,
-     127,   127,   127,   126,   126,   154,   154,   104,   104,   127,
-     127,   263,   218,   160,   160,    45,   160,   126,   124,   124,
-     160,   124,   124,   160,    54,    55,   185,   186,   187,   124,
-     301,   166,   107,   124,   127,   127,   126,    89,   258,   259,
-     102,   288,   108,   124,   108,   124,   107,   286,   109,   133,
-     102,   102,   109,   158,   104,   107,   104,   103,   139,   103,
-     139,   139,   104,   104,   104,   253,   104,   253,   253,   253,
-     127,   127,   104,   104,   102,   102,   104,   108,    89,   252,
-      89,   127,   104,   104,   102,   102,   101,   102,   161,   182,
-     203,   124,   102,   101,   164,   187,    54,   162,   102,   102,
-     253,   106,   126,   126,   287,   133,   194,   101,   124,   194,
-     127,   109,   126,   126,   127,   127,   127,   127,   104,   104,
-     126,   127,   104,   162,    42,    43,   106,   172,   173,   174,
-     160,   162,   127,   102,   161,   106,   174,    89,   126,   101,
-     127,   126,   261,   298,   107,   108,   109,   154,   102,   104,
-     155,   138,   138,   102,   102,   102,   102,   256,    40,   154,
-     170,   171,   299,   109,   126,   162,   172,   102,   124,   162,
-     124,   126,   102,   126,    89,   126,   102,   287,   133,   131,
-     195,   102,   124,   109,   127,   127,   162,    89,   108,   109,
-     127,   196,   197,   203,   124,   161,   161,   196,   164,   188,
-     216,   355,   102,   126,   107,   102,   108,   155,   104,   104,
-     154,   170,   173,   175,   176,   126,   124,   173,   177,   178,
-     127,   101,   111,   298,   346,   131,   164,   188,   101,   124,
-     131,   162,   167,   107,   173,   203,   161,    52,   167,   180,
-     107,   173,   102,   218,   127,   281,   162,   167,   124,   179,
-     180,   167,   180,   164,   102,   102,   179,   127,   164,   127
+      37,    38,    62,    65,    67,    69,    70,    72,    73,    74,
+      81,    82,   107,   109,   117,   135,   138,   195,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   228,   229,   230,   231,
+     232,   233,   234,   235,   237,   238,   239,   240,   241,   242,
+     243,   251,   252,   278,   279,   280,   288,   291,   297,   298,
+     300,   302,   303,   309,   314,   318,   319,   320,   321,   322,
+     323,   324,   325,   345,   362,   363,   364,   365,    70,   117,
+     137,   212,   214,   222,   224,   234,   238,   240,   279,    80,
+     107,   307,   308,   309,   307,   307,    70,    72,    73,    74,
+     136,   137,   268,   269,   289,   290,    72,    73,   269,   107,
+     300,    11,   196,   107,   117,   314,   319,   320,   321,   323,
+     324,   325,   110,   132,   109,   215,   222,   224,   318,   322,
+     361,   362,   365,   366,   133,   105,   129,   272,   112,   133,
+     170,    72,    73,   135,   267,   133,   133,   133,   114,   133,
+      72,    73,   107,   117,   304,   313,   314,   315,   316,   317,
+     318,   322,   326,   327,   328,   329,   330,   336,     3,    27,
+      76,   236,     3,     5,    72,   109,   117,   214,   225,   229,
+     232,   241,   280,   318,   322,   365,   212,   214,   224,   234,
+     238,   240,   279,   318,   322,    32,   230,   230,   225,   232,
+     133,   230,   225,   230,   225,    73,   107,   112,   269,   280,
+     112,   269,   230,   225,   114,   133,   133,     0,   132,   107,
+     170,   307,   307,   132,   109,   222,   224,   363,   267,   267,
+     224,   129,   107,   117,   304,   314,   318,   109,   117,   365,
+     301,   227,   309,   107,   285,   107,   107,    49,   107,    36,
+      38,    64,    70,    74,    77,    78,    79,    80,    84,    85,
+      92,   107,   109,   116,   117,   118,   119,   120,   121,   134,
+     138,   139,   140,   141,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   161,   163,
+     222,   271,   287,   361,   366,   224,   108,   108,   108,   108,
+     108,   108,   108,    72,    73,   109,   222,   267,   345,   363,
+     109,   117,   161,   214,   215,   221,   224,   228,   229,   234,
+     237,   238,   240,   257,   258,   262,   263,   264,   265,   279,
+     345,   357,   358,   359,   360,   365,   366,   110,   107,   318,
+     322,   365,   107,   114,   130,   109,   112,   117,   161,   273,
+     273,   113,   132,   114,   130,   107,   114,   130,   114,   130,
+     114,   130,   307,   130,   314,   315,   316,   317,   327,   328,
+     329,   330,   224,   313,   326,    62,   306,   109,   307,   344,
+     345,   307,   307,   170,   132,   107,   307,   344,   307,   307,
+     224,   304,   107,   107,   223,   224,   222,   224,   110,   132,
+     222,   361,   366,   170,   132,   267,   272,   214,   229,   318,
+     322,   170,   132,   289,   224,   234,   130,   224,   224,   287,
+      38,   109,   222,   244,   245,   246,   247,   361,   365,   112,
+     253,   269,   112,   224,   289,   130,   130,   300,   132,   137,
+     266,     3,   133,   204,   205,   219,   221,   224,   132,   306,
+     107,   306,   161,   314,   224,   107,   132,   267,   112,    32,
+      33,    34,   222,   281,   282,   284,   132,   127,   129,   286,
+     132,   225,   231,   232,   267,   310,   311,   312,   107,   139,
+     107,   146,   146,   148,   107,   146,   107,   107,   146,   146,
+     137,   109,   161,   166,   170,   222,   270,   361,   110,   132,
+     148,   148,    80,    83,    84,    85,   107,   109,   111,   112,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     129,   165,   148,   117,   122,   123,   119,   120,    86,    87,
+      88,    89,   124,   125,    90,    91,   118,   126,   127,    92,
+      93,   128,   129,   368,   107,   117,   340,   341,   342,   343,
+     344,   108,   114,   107,   344,   345,   107,   344,   345,   132,
+     107,   222,   363,   110,   132,   109,   117,   133,   222,   224,
+     356,   357,   365,   366,   133,   107,   109,   117,   314,   331,
+     332,   333,   334,   335,   336,   337,   338,   339,   345,   346,
+     347,   348,   349,   350,   351,   117,   365,   224,   133,   133,
+     117,   222,   224,   358,   267,   222,   345,   358,   267,   107,
+     132,   132,   132,   110,   132,    70,    78,   109,   111,   269,
+     273,   274,   275,   276,   277,   132,   132,   132,   132,   132,
+     132,   304,   108,   108,   108,   108,   108,   108,   108,   313,
+     326,   107,   272,   110,   204,   132,   304,   166,   271,   166,
+     271,   304,   109,   204,   306,   170,   132,   204,   108,   246,
+     247,   110,   132,   107,   115,   117,   248,   250,   313,   314,
+     326,   344,   352,   353,   354,   355,   113,   245,   114,   130,
+     114,   130,   269,   244,   114,   367,   129,   254,   253,   224,
+     259,   260,   261,   264,   265,   108,   114,   170,   132,   117,
+     161,   132,   221,   224,   258,   357,   365,   298,   299,   107,
+     117,   331,   108,   114,   368,   269,   281,   107,   112,   269,
+     271,   281,   108,   114,   107,   139,   108,   115,   270,   270,
+     109,   137,   143,   161,   271,   270,   110,   132,   108,   114,
+     108,   107,   117,   352,   108,   114,   161,   109,   137,   109,
+     142,   143,   132,   109,   137,   142,   161,   161,   148,   148,
+     148,   149,   149,   150,   150,   151,   151,   151,   151,   152,
+     152,   153,   154,   155,   156,   157,   115,   166,   161,   132,
+     341,   342,   343,   224,   340,   307,   307,   161,   271,   132,
+     266,   117,   132,   222,   345,   358,   224,   228,   110,   132,
+     110,   365,   110,   107,   132,   314,   332,   333,   334,   337,
+     347,   348,   349,   110,   132,   224,   331,   335,   346,   107,
+     307,   350,   368,   307,   307,   368,   107,   307,   350,   307,
+     307,   307,   307,   345,   222,   356,   366,   267,   110,   114,
+     110,   114,   368,   222,   358,   368,   255,   256,   257,   258,
+     255,   255,   267,   161,   132,   109,   269,   115,   114,   367,
+     273,    78,   109,   115,   277,    28,   206,   207,   267,   255,
+     137,   304,   137,   306,   107,   344,   345,   107,   344,   345,
+     139,   345,   170,   259,   108,   108,   108,   108,   110,   170,
+     204,   170,   112,   130,   130,   109,   314,   353,   354,   355,
+     159,   160,   224,   352,   249,   250,   249,   307,   307,   269,
+     307,   113,   269,   113,   160,   367,   133,   133,   137,   219,
+     133,   133,   255,   107,   117,   365,   133,   113,   224,   282,
+     283,   133,   132,   132,   107,   133,   108,   311,   166,   167,
+     115,   130,   109,   139,   197,   198,   199,   108,   108,   132,
+     115,   108,   108,   108,   161,   224,   112,   148,   163,   161,
+     162,   164,   114,   133,   132,   132,   108,   114,   161,   132,
+     113,   159,   115,   259,   108,   108,   108,   340,   259,   108,
+     255,   222,   358,   109,   117,   161,   161,   224,   337,   259,
+     108,   108,   108,   108,   108,   108,   108,     7,   224,   331,
+     335,   346,   132,   132,   368,   132,   132,   108,   133,   133,
+     133,   133,   272,   133,   159,   160,   161,   305,   132,   273,
+     275,   113,   132,   208,   269,    38,    39,    41,    44,    45,
+      46,    47,    48,    49,    50,    51,    55,    59,    60,   109,
+     126,   137,   167,   168,   169,   170,   171,   172,   174,   175,
+     187,   189,   190,   195,   209,   303,    28,   133,   129,   272,
+     132,   132,   108,   133,   170,   244,   110,   108,   108,   108,
+     352,   248,   254,   113,   108,   114,   110,   110,   133,   224,
+     114,   368,   285,   108,   281,   212,   214,   222,   293,   294,
+     295,   296,   287,   108,   108,   115,   160,   107,   108,   115,
+     114,   161,   161,   274,   114,   133,   164,   110,   137,   144,
+     145,   161,   143,   133,   144,   159,   163,   133,   107,   344,
+     345,   133,   133,   132,   133,   133,   133,   161,   108,   133,
+     107,   344,   345,   107,   350,   107,   350,   345,   223,     7,
+     117,   133,   161,   259,   259,   258,   262,   262,   263,   114,
+     114,   108,   108,   110,    94,   121,   133,   133,   144,   273,
+     161,   114,   130,   209,   213,   224,   228,   107,   107,   168,
+     107,   107,   130,   137,   130,   137,   117,   137,   167,   107,
+     170,   162,   162,   110,   141,   115,   130,   133,   132,   133,
+     208,   108,   161,   259,   259,   307,   108,   113,   107,   344,
+     345,   132,   108,   132,   133,   304,   113,   132,   133,   133,
+     108,   112,   197,   110,   160,   130,   197,   199,   114,   133,
+     367,   162,   110,   133,    83,   111,   114,   133,   133,   110,
+     133,   108,   132,   108,   108,   110,   110,   110,   133,   108,
+     132,   132,   132,   161,   161,   133,   110,   133,   133,   133,
+     133,   132,   132,   160,   160,   110,   110,   133,   133,   269,
+     224,   166,   166,    45,   166,   132,   130,   130,   166,   130,
+     130,   166,    56,    57,    58,   191,   192,   193,   130,    61,
+     130,   112,   307,   172,   113,   130,   133,   133,   132,    94,
+     264,   265,   108,   294,   114,   130,   114,   130,   113,   292,
+     115,   139,   108,   108,   115,   164,   110,   113,   110,   109,
+     145,   109,   145,   145,   110,   110,   110,   259,   110,   259,
+     259,   259,   133,   133,   110,   110,   108,   108,   110,   114,
+      94,   258,    94,   133,   110,   110,   108,   108,   107,   108,
+     167,   188,   209,   130,   108,   107,   107,   170,   193,    56,
+      57,   161,   142,   168,   108,   108,   259,   112,   132,   132,
+     293,   139,   200,   107,   130,   200,   133,   115,   132,   132,
+     133,   133,   133,   133,   110,   110,   132,   133,   110,   168,
+      42,    43,   112,   178,   179,   180,   166,   168,   133,   108,
+     167,   112,   180,    94,   132,    94,   132,   107,   107,   130,
+     113,   133,   132,   267,   304,   113,   114,   115,   160,   108,
+     110,   161,   144,   144,   108,   108,   108,   108,   262,    40,
+     160,   176,   177,   305,   115,   132,   168,   178,   108,   130,
+     168,   130,   132,   108,   132,   108,   132,    94,   132,    94,
+     132,   130,   108,   293,   139,   137,   201,   108,   130,   115,
+     133,   133,   168,    94,   114,   115,   133,   202,   203,   209,
+     130,   167,   167,   202,   170,   194,   222,   361,   170,   194,
+     108,   132,   108,   132,   113,   108,   114,   161,   110,   110,
+     160,   176,   179,   181,   182,   132,   130,   179,   183,   184,
+     133,   107,   117,   304,   352,   137,   133,   170,   194,   170,
+     194,   107,   130,   137,   168,   173,   113,   179,   209,   167,
+      54,   173,   186,   113,   179,   108,   224,   108,   133,   133,
+     287,   168,   173,   130,   185,   186,   173,   186,   170,   170,
+     108,   108,   108,   185,   133,   133,   170,   170,   133,   133
 };
 
@@ -5016,5 +4946,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 288 "parser.yy"
+#line 290 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -5025,5 +4955,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 294 "parser.yy"
+#line 296 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -5034,5 +4964,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 303 "parser.yy"
+#line 305 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5041,5 +4971,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 304 "parser.yy"
+#line 306 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5048,5 +4978,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 305 "parser.yy"
+#line 307 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5055,5 +4985,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 329 "parser.yy"
+#line 332 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5062,5 +4992,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 330 "parser.yy"
+#line 333 "parser.yy"
     { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -5069,5 +4999,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 337 "parser.yy"
+#line 340 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5076,5 +5006,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 339 "parser.yy"
+#line 342 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5083,5 +5013,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 341 "parser.yy"
+#line 344 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5090,5 +5020,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 343 "parser.yy"
+#line 346 "parser.yy"
     { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
     break;
@@ -5097,5 +5027,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 353 "parser.yy"
+#line 356 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
     break;
@@ -5104,5 +5034,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 355 "parser.yy"
+#line 358 "parser.yy"
     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5111,5 +5041,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 357 "parser.yy"
+#line 360 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     break;
@@ -5118,5 +5048,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 360 "parser.yy"
+#line 363 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     break;
@@ -5125,5 +5055,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 363 "parser.yy"
+#line 366 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
     break;
@@ -5132,5 +5062,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 365 "parser.yy"
+#line 368 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
     break;
@@ -5139,195 +5069,198 @@
 
 /* Line 1806 of yacc.c  */
-#line 368 "parser.yy"
+#line 370 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 32:
-
-/* Line 1806 of yacc.c  */
-#line 374 "parser.yy"
+  case 31:
+
+/* Line 1806 of yacc.c  */
+#line 372 "parser.yy"
+    {
+			Token fn; fn.str = new std::string( "?{}" ); // location undefined
+			(yyval.en) = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) );
+		}
+    break;
+
+  case 33:
+
+/* Line 1806 of yacc.c  */
+#line 381 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
 
-  case 33:
-
-/* Line 1806 of yacc.c  */
-#line 379 "parser.yy"
+  case 34:
+
+/* Line 1806 of yacc.c  */
+#line 386 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 35:
-
-/* Line 1806 of yacc.c  */
-#line 382 "parser.yy"
+  case 36:
+
+/* Line 1806 of yacc.c  */
+#line 389 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
     break;
 
-  case 36:
-
-/* Line 1806 of yacc.c  */
-#line 387 "parser.yy"
+  case 37:
+
+/* Line 1806 of yacc.c  */
+#line 394 "parser.yy"
     { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
     break;
 
-  case 37:
-
-/* Line 1806 of yacc.c  */
-#line 389 "parser.yy"
+  case 38:
+
+/* Line 1806 of yacc.c  */
+#line 396 "parser.yy"
     { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
     break;
 
-  case 39:
-
-/* Line 1806 of yacc.c  */
-#line 394 "parser.yy"
+  case 40:
+
+/* Line 1806 of yacc.c  */
+#line 401 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 40:
-
-/* Line 1806 of yacc.c  */
-#line 399 "parser.yy"
+  case 41:
+
+/* Line 1806 of yacc.c  */
+#line 406 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 41:
-
-/* Line 1806 of yacc.c  */
-#line 401 "parser.yy"
+  case 42:
+
+/* Line 1806 of yacc.c  */
+#line 408 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 42:
-
-/* Line 1806 of yacc.c  */
-#line 403 "parser.yy"
+  case 43:
+
+/* Line 1806 of yacc.c  */
+#line 410 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     break;
 
-  case 43:
-
-/* Line 1806 of yacc.c  */
-#line 405 "parser.yy"
+  case 44:
+
+/* Line 1806 of yacc.c  */
+#line 412 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 44:
-
-/* Line 1806 of yacc.c  */
-#line 407 "parser.yy"
+  case 45:
+
+/* Line 1806 of yacc.c  */
+#line 414 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     break;
 
-  case 46:
-
-/* Line 1806 of yacc.c  */
-#line 415 "parser.yy"
+  case 47:
+
+/* Line 1806 of yacc.c  */
+#line 422 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     break;
 
-  case 47:
-
-/* Line 1806 of yacc.c  */
-#line 417 "parser.yy"
+  case 48:
+
+/* Line 1806 of yacc.c  */
+#line 424 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     break;
 
-  case 48:
-
-/* Line 1806 of yacc.c  */
-#line 419 "parser.yy"
+  case 49:
+
+/* Line 1806 of yacc.c  */
+#line 426 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 49:
-
-/* Line 1806 of yacc.c  */
-#line 421 "parser.yy"
+  case 50:
+
+/* Line 1806 of yacc.c  */
+#line 428 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 50:
-
-/* Line 1806 of yacc.c  */
-#line 423 "parser.yy"
+  case 51:
+
+/* Line 1806 of yacc.c  */
+#line 430 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
-  case 51:
-
-/* Line 1806 of yacc.c  */
-#line 425 "parser.yy"
+  case 52:
+
+/* Line 1806 of yacc.c  */
+#line 432 "parser.yy"
     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 52:
-
-/* Line 1806 of yacc.c  */
-#line 427 "parser.yy"
+  case 53:
+
+/* Line 1806 of yacc.c  */
+#line 434 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 53:
-
-/* Line 1806 of yacc.c  */
-#line 429 "parser.yy"
+  case 54:
+
+/* Line 1806 of yacc.c  */
+#line 436 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 54:
-
-/* Line 1806 of yacc.c  */
-#line 435 "parser.yy"
+  case 55:
+
+/* Line 1806 of yacc.c  */
+#line 442 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 55:
-
-/* Line 1806 of yacc.c  */
-#line 437 "parser.yy"
+  case 56:
+
+/* Line 1806 of yacc.c  */
+#line 444 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     break;
 
-  case 56:
-
-/* Line 1806 of yacc.c  */
-#line 439 "parser.yy"
+  case 57:
+
+/* Line 1806 of yacc.c  */
+#line 446 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
     break;
 
-  case 57:
-
-/* Line 1806 of yacc.c  */
-#line 441 "parser.yy"
+  case 58:
+
+/* Line 1806 of yacc.c  */
+#line 448 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     break;
 
-  case 58:
-
-/* Line 1806 of yacc.c  */
-#line 443 "parser.yy"
+  case 59:
+
+/* Line 1806 of yacc.c  */
+#line 450 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 59:
-
-/* Line 1806 of yacc.c  */
-#line 445 "parser.yy"
+  case 60:
+
+/* Line 1806 of yacc.c  */
+#line 452 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 60:
-
-/* Line 1806 of yacc.c  */
-#line 447 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
-    break;
-
   case 61:
 
 /* Line 1806 of yacc.c  */
-#line 449 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true )); }
+#line 454 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
     break;
 
@@ -5335,348 +5268,366 @@
 
 /* Line 1806 of yacc.c  */
-#line 453 "parser.yy"
+#line 456 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true ) ); }
+    break;
+
+  case 63:
+
+/* Line 1806 of yacc.c  */
+#line 460 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
     break;
 
-  case 63:
-
-/* Line 1806 of yacc.c  */
-#line 454 "parser.yy"
+  case 64:
+
+/* Line 1806 of yacc.c  */
+#line 461 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
     break;
 
-  case 64:
-
-/* Line 1806 of yacc.c  */
-#line 455 "parser.yy"
+  case 65:
+
+/* Line 1806 of yacc.c  */
+#line 462 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
     break;
 
-  case 65:
-
-/* Line 1806 of yacc.c  */
-#line 456 "parser.yy"
+  case 66:
+
+/* Line 1806 of yacc.c  */
+#line 463 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
     break;
 
-  case 67:
-
-/* Line 1806 of yacc.c  */
-#line 462 "parser.yy"
+  case 68:
+
+/* Line 1806 of yacc.c  */
+#line 469 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     break;
 
-  case 68:
-
-/* Line 1806 of yacc.c  */
-#line 464 "parser.yy"
+  case 69:
+
+/* Line 1806 of yacc.c  */
+#line 471 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     break;
 
-  case 70:
-
-/* Line 1806 of yacc.c  */
-#line 470 "parser.yy"
+  case 71:
+
+/* Line 1806 of yacc.c  */
+#line 477 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 71:
-
-/* Line 1806 of yacc.c  */
-#line 472 "parser.yy"
+  case 72:
+
+/* Line 1806 of yacc.c  */
+#line 479 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 72:
-
-/* Line 1806 of yacc.c  */
-#line 474 "parser.yy"
+  case 73:
+
+/* Line 1806 of yacc.c  */
+#line 481 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 74:
-
-/* Line 1806 of yacc.c  */
-#line 480 "parser.yy"
+  case 75:
+
+/* Line 1806 of yacc.c  */
+#line 487 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 75:
-
-/* Line 1806 of yacc.c  */
-#line 482 "parser.yy"
+  case 76:
+
+/* Line 1806 of yacc.c  */
+#line 489 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 77:
-
-/* Line 1806 of yacc.c  */
-#line 488 "parser.yy"
+  case 78:
+
+/* Line 1806 of yacc.c  */
+#line 495 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 78:
-
-/* Line 1806 of yacc.c  */
-#line 490 "parser.yy"
+  case 79:
+
+/* Line 1806 of yacc.c  */
+#line 497 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 80:
-
-/* Line 1806 of yacc.c  */
-#line 496 "parser.yy"
+  case 81:
+
+/* Line 1806 of yacc.c  */
+#line 503 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 81:
-
-/* Line 1806 of yacc.c  */
-#line 498 "parser.yy"
+  case 82:
+
+/* Line 1806 of yacc.c  */
+#line 505 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 82:
-
-/* Line 1806 of yacc.c  */
-#line 500 "parser.yy"
+  case 83:
+
+/* Line 1806 of yacc.c  */
+#line 507 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 83:
-
-/* Line 1806 of yacc.c  */
-#line 502 "parser.yy"
+  case 84:
+
+/* Line 1806 of yacc.c  */
+#line 509 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 85:
-
-/* Line 1806 of yacc.c  */
-#line 508 "parser.yy"
+  case 86:
+
+/* Line 1806 of yacc.c  */
+#line 515 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 86:
-
-/* Line 1806 of yacc.c  */
-#line 510 "parser.yy"
+  case 87:
+
+/* Line 1806 of yacc.c  */
+#line 517 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 88:
-
-/* Line 1806 of yacc.c  */
-#line 516 "parser.yy"
+  case 89:
+
+/* Line 1806 of yacc.c  */
+#line 523 "parser.yy"
     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 90:
-
-/* Line 1806 of yacc.c  */
-#line 522 "parser.yy"
+  case 91:
+
+/* Line 1806 of yacc.c  */
+#line 529 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 92:
-
-/* Line 1806 of yacc.c  */
-#line 528 "parser.yy"
+  case 93:
+
+/* Line 1806 of yacc.c  */
+#line 535 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 94:
-
-/* Line 1806 of yacc.c  */
-#line 534 "parser.yy"
+  case 95:
+
+/* Line 1806 of yacc.c  */
+#line 541 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 96:
-
-/* Line 1806 of yacc.c  */
-#line 540 "parser.yy"
+  case 97:
+
+/* Line 1806 of yacc.c  */
+#line 547 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 98:
-
-/* Line 1806 of yacc.c  */
-#line 546 "parser.yy"
+  case 99:
+
+/* Line 1806 of yacc.c  */
+#line 553 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     break;
 
-  case 99:
-
-/* Line 1806 of yacc.c  */
-#line 548 "parser.yy"
+  case 100:
+
+/* Line 1806 of yacc.c  */
+#line 555 "parser.yy"
     { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
 
-  case 100:
-
-/* Line 1806 of yacc.c  */
-#line 550 "parser.yy"
+  case 101:
+
+/* Line 1806 of yacc.c  */
+#line 557 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     break;
 
-  case 103:
-
-/* Line 1806 of yacc.c  */
-#line 561 "parser.yy"
+  case 104:
+
+/* Line 1806 of yacc.c  */
+#line 568 "parser.yy"
     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 104:
-
-/* Line 1806 of yacc.c  */
-#line 563 "parser.yy"
+  case 105:
+
+/* Line 1806 of yacc.c  */
+#line 570 "parser.yy"
     { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 105:
-
-/* Line 1806 of yacc.c  */
-#line 565 "parser.yy"
+  case 106:
+
+/* Line 1806 of yacc.c  */
+#line 572 "parser.yy"
     { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 106:
-
-/* Line 1806 of yacc.c  */
-#line 570 "parser.yy"
+  case 107:
+
+/* Line 1806 of yacc.c  */
+#line 577 "parser.yy"
     { (yyval.en) = new NullExprNode; }
     break;
 
-  case 108:
-
-/* Line 1806 of yacc.c  */
-#line 578 "parser.yy"
+  case 109:
+
+/* Line 1806 of yacc.c  */
+#line 585 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
     break;
 
-  case 109:
-
-/* Line 1806 of yacc.c  */
-#line 580 "parser.yy"
+  case 110:
+
+/* Line 1806 of yacc.c  */
+#line 587 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
     break;
 
-  case 110:
-
-/* Line 1806 of yacc.c  */
-#line 582 "parser.yy"
+  case 111:
+
+/* Line 1806 of yacc.c  */
+#line 589 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
     break;
 
-  case 111:
-
-/* Line 1806 of yacc.c  */
-#line 584 "parser.yy"
+  case 112:
+
+/* Line 1806 of yacc.c  */
+#line 591 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
 
-  case 113:
-
-/* Line 1806 of yacc.c  */
-#line 590 "parser.yy"
+  case 114:
+
+/* Line 1806 of yacc.c  */
+#line 597 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 114:
-
-/* Line 1806 of yacc.c  */
-#line 594 "parser.yy"
+  case 115:
+
+/* Line 1806 of yacc.c  */
+#line 601 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
     break;
 
-  case 115:
-
-/* Line 1806 of yacc.c  */
-#line 595 "parser.yy"
+  case 116:
+
+/* Line 1806 of yacc.c  */
+#line 602 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
     break;
 
-  case 116:
-
-/* Line 1806 of yacc.c  */
-#line 596 "parser.yy"
+  case 117:
+
+/* Line 1806 of yacc.c  */
+#line 603 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
     break;
 
-  case 117:
-
-/* Line 1806 of yacc.c  */
-#line 597 "parser.yy"
+  case 118:
+
+/* Line 1806 of yacc.c  */
+#line 604 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
     break;
 
-  case 118:
-
-/* Line 1806 of yacc.c  */
-#line 598 "parser.yy"
+  case 119:
+
+/* Line 1806 of yacc.c  */
+#line 605 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
     break;
 
-  case 119:
-
-/* Line 1806 of yacc.c  */
-#line 599 "parser.yy"
+  case 120:
+
+/* Line 1806 of yacc.c  */
+#line 606 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
     break;
 
-  case 120:
-
-/* Line 1806 of yacc.c  */
-#line 600 "parser.yy"
+  case 121:
+
+/* Line 1806 of yacc.c  */
+#line 607 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
     break;
 
-  case 121:
-
-/* Line 1806 of yacc.c  */
-#line 601 "parser.yy"
+  case 122:
+
+/* Line 1806 of yacc.c  */
+#line 608 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
     break;
 
-  case 122:
-
-/* Line 1806 of yacc.c  */
-#line 602 "parser.yy"
+  case 123:
+
+/* Line 1806 of yacc.c  */
+#line 609 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
     break;
 
-  case 123:
-
-/* Line 1806 of yacc.c  */
-#line 603 "parser.yy"
+  case 124:
+
+/* Line 1806 of yacc.c  */
+#line 610 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
     break;
 
-  case 125:
-
-/* Line 1806 of yacc.c  */
-#line 609 "parser.yy"
+  case 126:
+
+/* Line 1806 of yacc.c  */
+#line 616 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 126:
-
-/* Line 1806 of yacc.c  */
-#line 614 "parser.yy"
+  case 127:
+
+/* Line 1806 of yacc.c  */
+#line 621 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 130:
-
-/* Line 1806 of yacc.c  */
-#line 623 "parser.yy"
+  case 131:
+
+/* Line 1806 of yacc.c  */
+#line 630 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
 
-  case 136:
-
-/* Line 1806 of yacc.c  */
-#line 633 "parser.yy"
+  case 137:
+
+/* Line 1806 of yacc.c  */
+#line 637 "parser.yy"
+    {
+			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
+			(yyval.sn) = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),
+				(ExpressionNode *)(new CompositeExprNode( new OperatorNode( OperatorNode::AddressOf ), (yyvsp[(2) - (6)].en) ))->set_link( (yyvsp[(4) - (6)].en) ) ), 0 );
+		}
+    break;
+
+  case 138:
+
+/* Line 1806 of yacc.c  */
+#line 646 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5684,173 +5635,152 @@
     break;
 
-  case 137:
-
-/* Line 1806 of yacc.c  */
-#line 640 "parser.yy"
+  case 139:
+
+/* Line 1806 of yacc.c  */
+#line 653 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
     break;
 
-  case 138:
-
-/* Line 1806 of yacc.c  */
-#line 647 "parser.yy"
+  case 140:
+
+/* Line 1806 of yacc.c  */
+#line 660 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
     break;
 
-  case 140:
-
-/* Line 1806 of yacc.c  */
-#line 653 "parser.yy"
+  case 142:
+
+/* Line 1806 of yacc.c  */
+#line 666 "parser.yy"
     { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     break;
 
-  case 141:
-
-/* Line 1806 of yacc.c  */
-#line 658 "parser.yy"
+  case 143:
+
+/* Line 1806 of yacc.c  */
+#line 671 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
-  case 142:
-
-/* Line 1806 of yacc.c  */
-#line 660 "parser.yy"
+  case 144:
+
+/* Line 1806 of yacc.c  */
+#line 673 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 143:
-
-/* Line 1806 of yacc.c  */
-#line 662 "parser.yy"
+  case 145:
+
+/* Line 1806 of yacc.c  */
+#line 675 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
-  case 146:
-
-/* Line 1806 of yacc.c  */
-#line 669 "parser.yy"
+  case 148:
+
+/* Line 1806 of yacc.c  */
+#line 682 "parser.yy"
     { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     break;
 
-  case 147:
-
-/* Line 1806 of yacc.c  */
-#line 674 "parser.yy"
+  case 149:
+
+/* Line 1806 of yacc.c  */
+#line 687 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
     break;
 
-  case 148:
-
-/* Line 1806 of yacc.c  */
-#line 680 "parser.yy"
+  case 150:
+
+/* Line 1806 of yacc.c  */
+#line 693 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
 
-  case 149:
-
-/* Line 1806 of yacc.c  */
-#line 682 "parser.yy"
+  case 151:
+
+/* Line 1806 of yacc.c  */
+#line 695 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
     break;
 
-  case 150:
-
-/* Line 1806 of yacc.c  */
-#line 684 "parser.yy"
+  case 152:
+
+/* Line 1806 of yacc.c  */
+#line 697 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
 
-  case 151:
-
-/* Line 1806 of yacc.c  */
-#line 686 "parser.yy"
+  case 153:
+
+/* Line 1806 of yacc.c  */
+#line 699 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
     break;
 
-  case 152:
-
-/* Line 1806 of yacc.c  */
-#line 691 "parser.yy"
+  case 154:
+
+/* Line 1806 of yacc.c  */
+#line 704 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
 
-  case 153:
-
-/* Line 1806 of yacc.c  */
-#line 693 "parser.yy"
+  case 155:
+
+/* Line 1806 of yacc.c  */
+#line 706 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); }
     break;
 
-  case 154:
-
-/* Line 1806 of yacc.c  */
-#line 700 "parser.yy"
+  case 156:
+
+/* Line 1806 of yacc.c  */
+#line 713 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
-  case 155:
-
-/* Line 1806 of yacc.c  */
-#line 702 "parser.yy"
+  case 157:
+
+/* Line 1806 of yacc.c  */
+#line 715 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 158:
-
-/* Line 1806 of yacc.c  */
-#line 709 "parser.yy"
+  case 160:
+
+/* Line 1806 of yacc.c  */
+#line 722 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 159:
-
-/* Line 1806 of yacc.c  */
-#line 713 "parser.yy"
+  case 161:
+
+/* Line 1806 of yacc.c  */
+#line 726 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
     break;
 
-  case 160:
-
-/* Line 1806 of yacc.c  */
-#line 714 "parser.yy"
+  case 162:
+
+/* Line 1806 of yacc.c  */
+#line 727 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
 
-  case 162:
-
-/* Line 1806 of yacc.c  */
-#line 720 "parser.yy"
+  case 164:
+
+/* Line 1806 of yacc.c  */
+#line 733 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
 
-  case 163:
-
-/* Line 1806 of yacc.c  */
-#line 724 "parser.yy"
+  case 165:
+
+/* Line 1806 of yacc.c  */
+#line 737 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
 
-  case 164:
-
-/* Line 1806 of yacc.c  */
-#line 729 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
   case 166:
-
-/* Line 1806 of yacc.c  */
-#line 735 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
-    break;
-
-  case 167:
-
-/* Line 1806 of yacc.c  */
-#line 737 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
-    break;
-
-  case 168:
 
 /* Line 1806 of yacc.c  */
@@ -5859,5 +5789,5 @@
     break;
 
-  case 170:
+  case 168:
 
 /* Line 1806 of yacc.c  */
@@ -5866,162 +5796,190 @@
     break;
 
-  case 171:
+  case 169:
 
 /* Line 1806 of yacc.c  */
 #line 750 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
+    break;
+
+  case 170:
+
+/* Line 1806 of yacc.c  */
+#line 755 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
+  case 172:
+
+/* Line 1806 of yacc.c  */
+#line 761 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
+    break;
+
+  case 173:
+
+/* Line 1806 of yacc.c  */
+#line 763 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
     break;
 
-  case 172:
-
-/* Line 1806 of yacc.c  */
-#line 752 "parser.yy"
+  case 174:
+
+/* Line 1806 of yacc.c  */
+#line 765 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
 
-  case 173:
-
-/* Line 1806 of yacc.c  */
-#line 754 "parser.yy"
+  case 175:
+
+/* Line 1806 of yacc.c  */
+#line 767 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); }
     break;
 
-  case 174:
-
-/* Line 1806 of yacc.c  */
-#line 759 "parser.yy"
+  case 176:
+
+/* Line 1806 of yacc.c  */
+#line 772 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 176:
-
-/* Line 1806 of yacc.c  */
-#line 764 "parser.yy"
+  case 178:
+
+/* Line 1806 of yacc.c  */
+#line 777 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
     break;
 
-  case 177:
-
-/* Line 1806 of yacc.c  */
-#line 765 "parser.yy"
+  case 179:
+
+/* Line 1806 of yacc.c  */
+#line 778 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
     break;
 
-  case 178:
-
-/* Line 1806 of yacc.c  */
-#line 770 "parser.yy"
+  case 180:
+
+/* Line 1806 of yacc.c  */
+#line 783 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
 
-  case 179:
-
-/* Line 1806 of yacc.c  */
-#line 772 "parser.yy"
+  case 181:
+
+/* Line 1806 of yacc.c  */
+#line 785 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
     break;
 
-  case 180:
-
-/* Line 1806 of yacc.c  */
-#line 774 "parser.yy"
+  case 182:
+
+/* Line 1806 of yacc.c  */
+#line 787 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
     break;
 
-  case 181:
-
-/* Line 1806 of yacc.c  */
-#line 779 "parser.yy"
+  case 183:
+
+/* Line 1806 of yacc.c  */
+#line 792 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
 
-  case 182:
-
-/* Line 1806 of yacc.c  */
-#line 781 "parser.yy"
+  case 184:
+
+/* Line 1806 of yacc.c  */
+#line 794 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
 
-  case 183:
-
-/* Line 1806 of yacc.c  */
-#line 786 "parser.yy"
+  case 185:
+
+/* Line 1806 of yacc.c  */
+#line 799 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
     break;
 
-  case 184:
-
-/* Line 1806 of yacc.c  */
-#line 790 "parser.yy"
+  case 186:
+
+/* Line 1806 of yacc.c  */
+#line 803 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 185:
-
-/* Line 1806 of yacc.c  */
-#line 793 "parser.yy"
+  case 187:
+
+/* Line 1806 of yacc.c  */
+#line 806 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
     break;
 
-  case 186:
-
-/* Line 1806 of yacc.c  */
-#line 797 "parser.yy"
+  case 188:
+
+/* Line 1806 of yacc.c  */
+#line 810 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
     break;
 
-  case 187:
-
-/* Line 1806 of yacc.c  */
-#line 800 "parser.yy"
+  case 189:
+
+/* Line 1806 of yacc.c  */
+#line 813 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
 
-  case 188:
-
-/* Line 1806 of yacc.c  */
-#line 804 "parser.yy"
+  case 190:
+
+/* Line 1806 of yacc.c  */
+#line 817 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     break;
 
-  case 189:
-
-/* Line 1806 of yacc.c  */
-#line 806 "parser.yy"
+  case 191:
+
+/* Line 1806 of yacc.c  */
+#line 819 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     break;
 
-  case 190:
-
-/* Line 1806 of yacc.c  */
-#line 808 "parser.yy"
+  case 192:
+
+/* Line 1806 of yacc.c  */
+#line 821 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
 
-  case 191:
-
-/* Line 1806 of yacc.c  */
-#line 810 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw ); }
-    break;
-
-  case 192:
-
-/* Line 1806 of yacc.c  */
-#line 815 "parser.yy"
+  case 193:
+
+/* Line 1806 of yacc.c  */
+#line 825 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
+    break;
+
+  case 194:
+
+/* Line 1806 of yacc.c  */
+#line 827 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
+    break;
+
+  case 195:
+
+/* Line 1806 of yacc.c  */
+#line 834 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
 
-  case 193:
-
-/* Line 1806 of yacc.c  */
-#line 817 "parser.yy"
+  case 196:
+
+/* Line 1806 of yacc.c  */
+#line 836 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
 
-  case 194:
-
-/* Line 1806 of yacc.c  */
-#line 819 "parser.yy"
+  case 197:
+
+/* Line 1806 of yacc.c  */
+#line 838 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6030,36 +5988,64 @@
     break;
 
-  case 196:
-
-/* Line 1806 of yacc.c  */
-#line 830 "parser.yy"
+  case 199:
+
+/* Line 1806 of yacc.c  */
+#line 849 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
 
-  case 197:
-
-/* Line 1806 of yacc.c  */
-#line 832 "parser.yy"
+  case 200:
+
+/* Line 1806 of yacc.c  */
+#line 851 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
 
-  case 198:
-
-/* Line 1806 of yacc.c  */
-#line 837 "parser.yy"
+  case 201:
+
+/* Line 1806 of yacc.c  */
+#line 853 "parser.yy"
+    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
+    break;
+
+  case 202:
+
+/* Line 1806 of yacc.c  */
+#line 855 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
+    break;
+
+  case 203:
+
+/* Line 1806 of yacc.c  */
+#line 860 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
 
-  case 199:
-
-/* Line 1806 of yacc.c  */
-#line 839 "parser.yy"
+  case 204:
+
+/* Line 1806 of yacc.c  */
+#line 862 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
 
-  case 200:
-
-/* Line 1806 of yacc.c  */
-#line 844 "parser.yy"
+  case 205:
+
+/* Line 1806 of yacc.c  */
+#line 864 "parser.yy"
+    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
+    break;
+
+  case 206:
+
+/* Line 1806 of yacc.c  */
+#line 866 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
+    break;
+
+  case 207:
+
+/* Line 1806 of yacc.c  */
+#line 871 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6068,8 +6054,8 @@
     break;
 
-  case 202:
-
-/* Line 1806 of yacc.c  */
-#line 858 "parser.yy"
+  case 209:
+
+/* Line 1806 of yacc.c  */
+#line 885 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6078,15 +6064,15 @@
     break;
 
-  case 203:
-
-/* Line 1806 of yacc.c  */
-#line 863 "parser.yy"
+  case 210:
+
+/* Line 1806 of yacc.c  */
+#line 890 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 204:
-
-/* Line 1806 of yacc.c  */
-#line 865 "parser.yy"
+  case 211:
+
+/* Line 1806 of yacc.c  */
+#line 892 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6095,162 +6081,162 @@
     break;
 
-  case 206:
-
-/* Line 1806 of yacc.c  */
-#line 874 "parser.yy"
+  case 213:
+
+/* Line 1806 of yacc.c  */
+#line 901 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
     break;
 
-  case 207:
-
-/* Line 1806 of yacc.c  */
-#line 876 "parser.yy"
+  case 214:
+
+/* Line 1806 of yacc.c  */
+#line 903 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
     break;
 
-  case 208:
-
-/* Line 1806 of yacc.c  */
-#line 878 "parser.yy"
+  case 215:
+
+/* Line 1806 of yacc.c  */
+#line 905 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
     break;
 
-  case 209:
-
-/* Line 1806 of yacc.c  */
-#line 880 "parser.yy"
+  case 216:
+
+/* Line 1806 of yacc.c  */
+#line 907 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
     break;
 
-  case 210:
-
-/* Line 1806 of yacc.c  */
-#line 882 "parser.yy"
+  case 217:
+
+/* Line 1806 of yacc.c  */
+#line 909 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
     break;
 
-  case 211:
-
-/* Line 1806 of yacc.c  */
-#line 887 "parser.yy"
+  case 218:
+
+/* Line 1806 of yacc.c  */
+#line 914 "parser.yy"
     { (yyval.flag) = false; }
     break;
 
-  case 212:
-
-/* Line 1806 of yacc.c  */
-#line 889 "parser.yy"
+  case 219:
+
+/* Line 1806 of yacc.c  */
+#line 916 "parser.yy"
     { (yyval.flag) = true; }
     break;
 
-  case 213:
-
-/* Line 1806 of yacc.c  */
-#line 894 "parser.yy"
+  case 220:
+
+/* Line 1806 of yacc.c  */
+#line 921 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 216:
-
-/* Line 1806 of yacc.c  */
-#line 901 "parser.yy"
+  case 223:
+
+/* Line 1806 of yacc.c  */
+#line 928 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 217:
-
-/* Line 1806 of yacc.c  */
-#line 906 "parser.yy"
+  case 224:
+
+/* Line 1806 of yacc.c  */
+#line 933 "parser.yy"
     { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 218:
-
-/* Line 1806 of yacc.c  */
-#line 908 "parser.yy"
+  case 225:
+
+/* Line 1806 of yacc.c  */
+#line 935 "parser.yy"
     { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
     break;
 
-  case 219:
-
-/* Line 1806 of yacc.c  */
-#line 913 "parser.yy"
+  case 226:
+
+/* Line 1806 of yacc.c  */
+#line 940 "parser.yy"
     { (yyval.constant) = 0; }
     break;
 
-  case 220:
-
-/* Line 1806 of yacc.c  */
-#line 915 "parser.yy"
+  case 227:
+
+/* Line 1806 of yacc.c  */
+#line 942 "parser.yy"
     { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
     break;
 
-  case 221:
-
-/* Line 1806 of yacc.c  */
-#line 917 "parser.yy"
+  case 228:
+
+/* Line 1806 of yacc.c  */
+#line 944 "parser.yy"
     { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
     break;
 
-  case 222:
-
-/* Line 1806 of yacc.c  */
-#line 922 "parser.yy"
+  case 229:
+
+/* Line 1806 of yacc.c  */
+#line 949 "parser.yy"
     { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 223:
-
-/* Line 1806 of yacc.c  */
-#line 924 "parser.yy"
+  case 230:
+
+/* Line 1806 of yacc.c  */
+#line 951 "parser.yy"
     { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
 
-  case 224:
-
-/* Line 1806 of yacc.c  */
-#line 931 "parser.yy"
+  case 231:
+
+/* Line 1806 of yacc.c  */
+#line 958 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 227:
-
-/* Line 1806 of yacc.c  */
-#line 938 "parser.yy"
+  case 234:
+
+/* Line 1806 of yacc.c  */
+#line 965 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 228:
-
-/* Line 1806 of yacc.c  */
-#line 943 "parser.yy"
+  case 235:
+
+/* Line 1806 of yacc.c  */
+#line 970 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 231:
-
-/* Line 1806 of yacc.c  */
-#line 950 "parser.yy"
+  case 238:
+
+/* Line 1806 of yacc.c  */
+#line 977 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 236:
-
-/* Line 1806 of yacc.c  */
-#line 964 "parser.yy"
+  case 243:
+
+/* Line 1806 of yacc.c  */
+#line 991 "parser.yy"
     {}
     break;
 
-  case 237:
-
-/* Line 1806 of yacc.c  */
-#line 965 "parser.yy"
+  case 244:
+
+/* Line 1806 of yacc.c  */
+#line 992 "parser.yy"
     {}
     break;
 
-  case 245:
-
-/* Line 1806 of yacc.c  */
-#line 994 "parser.yy"
+  case 252:
+
+/* Line 1806 of yacc.c  */
+#line 1021 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6259,8 +6245,8 @@
     break;
 
-  case 246:
-
-/* Line 1806 of yacc.c  */
-#line 1001 "parser.yy"
+  case 253:
+
+/* Line 1806 of yacc.c  */
+#line 1028 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6269,8 +6255,8 @@
     break;
 
-  case 247:
-
-/* Line 1806 of yacc.c  */
-#line 1006 "parser.yy"
+  case 254:
+
+/* Line 1806 of yacc.c  */
+#line 1033 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6279,8 +6265,8 @@
     break;
 
-  case 248:
-
-/* Line 1806 of yacc.c  */
-#line 1016 "parser.yy"
+  case 255:
+
+/* Line 1806 of yacc.c  */
+#line 1043 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6289,8 +6275,8 @@
     break;
 
-  case 249:
-
-/* Line 1806 of yacc.c  */
-#line 1021 "parser.yy"
+  case 256:
+
+/* Line 1806 of yacc.c  */
+#line 1048 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6299,8 +6285,8 @@
     break;
 
-  case 250:
-
-/* Line 1806 of yacc.c  */
-#line 1026 "parser.yy"
+  case 257:
+
+/* Line 1806 of yacc.c  */
+#line 1053 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6309,8 +6295,8 @@
     break;
 
-  case 251:
-
-/* Line 1806 of yacc.c  */
-#line 1034 "parser.yy"
+  case 258:
+
+/* Line 1806 of yacc.c  */
+#line 1061 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6319,8 +6305,8 @@
     break;
 
-  case 252:
-
-/* Line 1806 of yacc.c  */
-#line 1039 "parser.yy"
+  case 259:
+
+/* Line 1806 of yacc.c  */
+#line 1066 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6329,8 +6315,8 @@
     break;
 
-  case 253:
-
-/* Line 1806 of yacc.c  */
-#line 1044 "parser.yy"
+  case 260:
+
+/* Line 1806 of yacc.c  */
+#line 1071 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6339,8 +6325,8 @@
     break;
 
-  case 254:
-
-/* Line 1806 of yacc.c  */
-#line 1049 "parser.yy"
+  case 261:
+
+/* Line 1806 of yacc.c  */
+#line 1076 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6349,8 +6335,8 @@
     break;
 
-  case 255:
-
-/* Line 1806 of yacc.c  */
-#line 1054 "parser.yy"
+  case 262:
+
+/* Line 1806 of yacc.c  */
+#line 1081 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6359,8 +6345,8 @@
     break;
 
-  case 256:
-
-/* Line 1806 of yacc.c  */
-#line 1062 "parser.yy"
+  case 263:
+
+/* Line 1806 of yacc.c  */
+#line 1089 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6368,8 +6354,8 @@
     break;
 
-  case 257:
-
-/* Line 1806 of yacc.c  */
-#line 1085 "parser.yy"
+  case 264:
+
+/* Line 1806 of yacc.c  */
+#line 1112 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6377,8 +6363,8 @@
     break;
 
-  case 258:
-
-/* Line 1806 of yacc.c  */
-#line 1089 "parser.yy"
+  case 265:
+
+/* Line 1806 of yacc.c  */
+#line 1116 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6386,22 +6372,22 @@
     break;
 
-  case 259:
-
-/* Line 1806 of yacc.c  */
-#line 1096 "parser.yy"
+  case 266:
+
+/* Line 1806 of yacc.c  */
+#line 1123 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 260:
-
-/* Line 1806 of yacc.c  */
-#line 1100 "parser.yy"
+  case 267:
+
+/* Line 1806 of yacc.c  */
+#line 1127 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
 
-  case 261:
-
-/* Line 1806 of yacc.c  */
-#line 1105 "parser.yy"
+  case 268:
+
+/* Line 1806 of yacc.c  */
+#line 1132 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6410,8 +6396,8 @@
     break;
 
-  case 262:
-
-/* Line 1806 of yacc.c  */
-#line 1110 "parser.yy"
+  case 269:
+
+/* Line 1806 of yacc.c  */
+#line 1137 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6420,8 +6406,8 @@
     break;
 
-  case 263:
-
-/* Line 1806 of yacc.c  */
-#line 1115 "parser.yy"
+  case 270:
+
+/* Line 1806 of yacc.c  */
+#line 1142 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6430,8 +6416,8 @@
     break;
 
-  case 264:
-
-/* Line 1806 of yacc.c  */
-#line 1126 "parser.yy"
+  case 271:
+
+/* Line 1806 of yacc.c  */
+#line 1153 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6440,8 +6426,8 @@
     break;
 
-  case 265:
-
-/* Line 1806 of yacc.c  */
-#line 1131 "parser.yy"
+  case 272:
+
+/* Line 1806 of yacc.c  */
+#line 1158 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6450,8 +6436,8 @@
     break;
 
-  case 266:
-
-/* Line 1806 of yacc.c  */
-#line 1136 "parser.yy"
+  case 273:
+
+/* Line 1806 of yacc.c  */
+#line 1163 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6460,8 +6446,8 @@
     break;
 
-  case 267:
-
-/* Line 1806 of yacc.c  */
-#line 1141 "parser.yy"
+  case 274:
+
+/* Line 1806 of yacc.c  */
+#line 1168 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6470,8 +6456,8 @@
     break;
 
-  case 268:
-
-/* Line 1806 of yacc.c  */
-#line 1146 "parser.yy"
+  case 275:
+
+/* Line 1806 of yacc.c  */
+#line 1173 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6480,8 +6466,8 @@
     break;
 
-  case 269:
-
-/* Line 1806 of yacc.c  */
-#line 1155 "parser.yy"
+  case 276:
+
+/* Line 1806 of yacc.c  */
+#line 1182 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6490,8 +6476,8 @@
     break;
 
-  case 270:
-
-/* Line 1806 of yacc.c  */
-#line 1160 "parser.yy"
+  case 277:
+
+/* Line 1806 of yacc.c  */
+#line 1187 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6500,8 +6486,8 @@
     break;
 
-  case 275:
-
-/* Line 1806 of yacc.c  */
-#line 1177 "parser.yy"
+  case 282:
+
+/* Line 1806 of yacc.c  */
+#line 1204 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6510,8 +6496,8 @@
     break;
 
-  case 276:
-
-/* Line 1806 of yacc.c  */
-#line 1182 "parser.yy"
+  case 283:
+
+/* Line 1806 of yacc.c  */
+#line 1209 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6520,57 +6506,57 @@
     break;
 
-  case 285:
-
-/* Line 1806 of yacc.c  */
-#line 1204 "parser.yy"
+  case 292:
+
+/* Line 1806 of yacc.c  */
+#line 1231 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 288:
-
-/* Line 1806 of yacc.c  */
-#line 1216 "parser.yy"
+  case 295:
+
+/* Line 1806 of yacc.c  */
+#line 1243 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 291:
-
-/* Line 1806 of yacc.c  */
-#line 1227 "parser.yy"
+  case 298:
+
+/* Line 1806 of yacc.c  */
+#line 1254 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
 
-  case 292:
-
-/* Line 1806 of yacc.c  */
-#line 1229 "parser.yy"
+  case 299:
+
+/* Line 1806 of yacc.c  */
+#line 1256 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
 
-  case 293:
-
-/* Line 1806 of yacc.c  */
-#line 1231 "parser.yy"
+  case 300:
+
+/* Line 1806 of yacc.c  */
+#line 1258 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
 
-  case 294:
-
-/* Line 1806 of yacc.c  */
-#line 1233 "parser.yy"
+  case 301:
+
+/* Line 1806 of yacc.c  */
+#line 1260 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
 
-  case 295:
-
-/* Line 1806 of yacc.c  */
-#line 1235 "parser.yy"
+  case 302:
+
+/* Line 1806 of yacc.c  */
+#line 1262 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
 
-  case 296:
-
-/* Line 1806 of yacc.c  */
-#line 1237 "parser.yy"
+  case 303:
+
+/* Line 1806 of yacc.c  */
+#line 1264 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6578,8 +6564,8 @@
     break;
 
-  case 297:
-
-/* Line 1806 of yacc.c  */
-#line 1241 "parser.yy"
+  case 304:
+
+/* Line 1806 of yacc.c  */
+#line 1268 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6588,530 +6574,481 @@
     break;
 
-  case 299:
-
-/* Line 1806 of yacc.c  */
-#line 1250 "parser.yy"
+  case 306:
+
+/* Line 1806 of yacc.c  */
+#line 1277 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 300:
-
-/* Line 1806 of yacc.c  */
-#line 1252 "parser.yy"
+  case 307:
+
+/* Line 1806 of yacc.c  */
+#line 1279 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 302:
-
-/* Line 1806 of yacc.c  */
-#line 1263 "parser.yy"
+  case 309:
+
+/* Line 1806 of yacc.c  */
+#line 1290 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 304:
-
-/* Line 1806 of yacc.c  */
-#line 1272 "parser.yy"
+  case 311:
+
+/* Line 1806 of yacc.c  */
+#line 1299 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
 
-  case 305:
-
-/* Line 1806 of yacc.c  */
-#line 1274 "parser.yy"
+  case 312:
+
+/* Line 1806 of yacc.c  */
+#line 1301 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
 
-  case 306:
-
-/* Line 1806 of yacc.c  */
-#line 1276 "parser.yy"
+  case 313:
+
+/* Line 1806 of yacc.c  */
+#line 1303 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
 
-  case 307:
-
-/* Line 1806 of yacc.c  */
-#line 1278 "parser.yy"
+  case 314:
+
+/* Line 1806 of yacc.c  */
+#line 1305 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
 
-  case 308:
-
-/* Line 1806 of yacc.c  */
-#line 1280 "parser.yy"
+  case 315:
+
+/* Line 1806 of yacc.c  */
+#line 1307 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
     break;
 
-  case 309:
-
-/* Line 1806 of yacc.c  */
-#line 1282 "parser.yy"
+  case 316:
+
+/* Line 1806 of yacc.c  */
+#line 1309 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
 
-  case 310:
-
-/* Line 1806 of yacc.c  */
-#line 1284 "parser.yy"
+  case 317:
+
+/* Line 1806 of yacc.c  */
+#line 1311 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
     break;
 
-  case 311:
-
-/* Line 1806 of yacc.c  */
-#line 1286 "parser.yy"
+  case 318:
+
+/* Line 1806 of yacc.c  */
+#line 1313 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
 
-  case 312:
-
-/* Line 1806 of yacc.c  */
-#line 1291 "parser.yy"
+  case 319:
+
+/* Line 1806 of yacc.c  */
+#line 1318 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
 
-  case 313:
-
-/* Line 1806 of yacc.c  */
-#line 1293 "parser.yy"
+  case 320:
+
+/* Line 1806 of yacc.c  */
+#line 1320 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
 
-  case 314:
-
-/* Line 1806 of yacc.c  */
-#line 1295 "parser.yy"
+  case 321:
+
+/* Line 1806 of yacc.c  */
+#line 1322 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
 
-  case 315:
-
-/* Line 1806 of yacc.c  */
-#line 1297 "parser.yy"
+  case 322:
+
+/* Line 1806 of yacc.c  */
+#line 1324 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
 
-  case 316:
-
-/* Line 1806 of yacc.c  */
-#line 1299 "parser.yy"
+  case 323:
+
+/* Line 1806 of yacc.c  */
+#line 1326 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
     break;
 
-  case 317:
-
-/* Line 1806 of yacc.c  */
-#line 1301 "parser.yy"
+  case 324:
+
+/* Line 1806 of yacc.c  */
+#line 1328 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
     break;
 
-  case 318:
-
-/* Line 1806 of yacc.c  */
-#line 1303 "parser.yy"
+  case 325:
+
+/* Line 1806 of yacc.c  */
+#line 1330 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
     break;
 
-  case 319:
-
-/* Line 1806 of yacc.c  */
-#line 1305 "parser.yy"
+  case 326:
+
+/* Line 1806 of yacc.c  */
+#line 1332 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
     break;
 
-  case 320:
-
-/* Line 1806 of yacc.c  */
-#line 1307 "parser.yy"
+  case 327:
+
+/* Line 1806 of yacc.c  */
+#line 1334 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
 
-  case 321:
-
-/* Line 1806 of yacc.c  */
-#line 1309 "parser.yy"
+  case 328:
+
+/* Line 1806 of yacc.c  */
+#line 1336 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
 
-  case 322:
-
-/* Line 1806 of yacc.c  */
-#line 1311 "parser.yy"
+  case 329:
+
+/* Line 1806 of yacc.c  */
+#line 1338 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
     break;
 
-  case 323:
-
-/* Line 1806 of yacc.c  */
-#line 1313 "parser.yy"
+  case 330:
+
+/* Line 1806 of yacc.c  */
+#line 1340 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     break;
 
-  case 325:
-
-/* Line 1806 of yacc.c  */
-#line 1320 "parser.yy"
+  case 332:
+
+/* Line 1806 of yacc.c  */
+#line 1347 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 326:
-
-/* Line 1806 of yacc.c  */
-#line 1322 "parser.yy"
+  case 333:
+
+/* Line 1806 of yacc.c  */
+#line 1349 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 327:
-
-/* Line 1806 of yacc.c  */
-#line 1324 "parser.yy"
+  case 334:
+
+/* Line 1806 of yacc.c  */
+#line 1351 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 328:
-
-/* Line 1806 of yacc.c  */
-#line 1326 "parser.yy"
+  case 335:
+
+/* Line 1806 of yacc.c  */
+#line 1353 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 330:
-
-/* Line 1806 of yacc.c  */
-#line 1332 "parser.yy"
+  case 337:
+
+/* Line 1806 of yacc.c  */
+#line 1359 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 332:
-
-/* Line 1806 of yacc.c  */
-#line 1339 "parser.yy"
+  case 339:
+
+/* Line 1806 of yacc.c  */
+#line 1366 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 333:
-
-/* Line 1806 of yacc.c  */
-#line 1341 "parser.yy"
+  case 340:
+
+/* Line 1806 of yacc.c  */
+#line 1368 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 334:
-
-/* Line 1806 of yacc.c  */
-#line 1343 "parser.yy"
+  case 341:
+
+/* Line 1806 of yacc.c  */
+#line 1370 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 335:
-
-/* Line 1806 of yacc.c  */
-#line 1348 "parser.yy"
+  case 342:
+
+/* Line 1806 of yacc.c  */
+#line 1375 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
 
-  case 336:
-
-/* Line 1806 of yacc.c  */
-#line 1350 "parser.yy"
+  case 343:
+
+/* Line 1806 of yacc.c  */
+#line 1377 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 337:
-
-/* Line 1806 of yacc.c  */
-#line 1352 "parser.yy"
+  case 344:
+
+/* Line 1806 of yacc.c  */
+#line 1379 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 338:
-
-/* Line 1806 of yacc.c  */
-#line 1354 "parser.yy"
+  case 345:
+
+/* Line 1806 of yacc.c  */
+#line 1381 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 340:
-
-/* Line 1806 of yacc.c  */
-#line 1360 "parser.yy"
+  case 347:
+
+/* Line 1806 of yacc.c  */
+#line 1387 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 341:
-
-/* Line 1806 of yacc.c  */
-#line 1362 "parser.yy"
+  case 348:
+
+/* Line 1806 of yacc.c  */
+#line 1389 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 342:
-
-/* Line 1806 of yacc.c  */
-#line 1364 "parser.yy"
+  case 349:
+
+/* Line 1806 of yacc.c  */
+#line 1391 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 344:
-
-/* Line 1806 of yacc.c  */
-#line 1370 "parser.yy"
+  case 351:
+
+/* Line 1806 of yacc.c  */
+#line 1397 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 345:
-
-/* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
+  case 352:
+
+/* Line 1806 of yacc.c  */
+#line 1399 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 347:
-
-/* Line 1806 of yacc.c  */
-#line 1378 "parser.yy"
+  case 354:
+
+/* Line 1806 of yacc.c  */
+#line 1405 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 348:
-
-/* Line 1806 of yacc.c  */
-#line 1380 "parser.yy"
+  case 355:
+
+/* Line 1806 of yacc.c  */
+#line 1407 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 349:
-
-/* Line 1806 of yacc.c  */
-#line 1382 "parser.yy"
+  case 356:
+
+/* Line 1806 of yacc.c  */
+#line 1409 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 350:
-
-/* Line 1806 of yacc.c  */
-#line 1387 "parser.yy"
+  case 357:
+
+/* Line 1806 of yacc.c  */
+#line 1414 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1389 "parser.yy"
+  case 358:
+
+/* Line 1806 of yacc.c  */
+#line 1416 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 352:
-
-/* Line 1806 of yacc.c  */
-#line 1391 "parser.yy"
+  case 359:
+
+/* Line 1806 of yacc.c  */
+#line 1418 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 355:
-
-/* Line 1806 of yacc.c  */
-#line 1401 "parser.yy"
+  case 362:
+
+/* Line 1806 of yacc.c  */
+#line 1428 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 356:
-
-/* Line 1806 of yacc.c  */
-#line 1403 "parser.yy"
+  case 363:
+
+/* Line 1806 of yacc.c  */
+#line 1430 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); }
     break;
 
-  case 357:
-
-/* Line 1806 of yacc.c  */
-#line 1405 "parser.yy"
+  case 364:
+
+/* Line 1806 of yacc.c  */
+#line 1432 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); }
     break;
 
-  case 358:
-
-/* Line 1806 of yacc.c  */
-#line 1407 "parser.yy"
+  case 365:
+
+/* Line 1806 of yacc.c  */
+#line 1434 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
     break;
 
-  case 359:
-
-/* Line 1806 of yacc.c  */
-#line 1409 "parser.yy"
+  case 366:
+
+/* Line 1806 of yacc.c  */
+#line 1436 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 360:
-
-/* Line 1806 of yacc.c  */
-#line 1414 "parser.yy"
+  case 367:
+
+/* Line 1806 of yacc.c  */
+#line 1441 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
 
-  case 361:
-
-/* Line 1806 of yacc.c  */
-#line 1416 "parser.yy"
+  case 368:
+
+/* Line 1806 of yacc.c  */
+#line 1443 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
 
-  case 362:
-
-/* Line 1806 of yacc.c  */
-#line 1421 "parser.yy"
+  case 369:
+
+/* Line 1806 of yacc.c  */
+#line 1448 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
     break;
 
-  case 363:
-
-/* Line 1806 of yacc.c  */
-#line 1423 "parser.yy"
+  case 370:
+
+/* Line 1806 of yacc.c  */
+#line 1450 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 365:
-
-/* Line 1806 of yacc.c  */
-#line 1429 "parser.yy"
+  case 372:
+
+/* Line 1806 of yacc.c  */
+#line 1456 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 367:
-
-/* Line 1806 of yacc.c  */
-#line 1432 "parser.yy"
+  case 374:
+
+/* Line 1806 of yacc.c  */
+#line 1459 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 369:
-
-/* Line 1806 of yacc.c  */
-#line 1438 "parser.yy"
+  case 376:
+
+/* Line 1806 of yacc.c  */
+#line 1465 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
 
-  case 370:
-
-/* Line 1806 of yacc.c  */
-#line 1440 "parser.yy"
+  case 377:
+
+/* Line 1806 of yacc.c  */
+#line 1467 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
-  case 371:
-
-/* Line 1806 of yacc.c  */
-#line 1442 "parser.yy"
+  case 378:
+
+/* Line 1806 of yacc.c  */
+#line 1469 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
 
-  case 372:
-
-/* Line 1806 of yacc.c  */
-#line 1447 "parser.yy"
+  case 379:
+
+/* Line 1806 of yacc.c  */
+#line 1474 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 373:
-
-/* Line 1806 of yacc.c  */
-#line 1449 "parser.yy"
+  case 380:
+
+/* Line 1806 of yacc.c  */
+#line 1476 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
 
-  case 374:
-
-/* Line 1806 of yacc.c  */
-#line 1454 "parser.yy"
+  case 381:
+
+/* Line 1806 of yacc.c  */
+#line 1481 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
 
-  case 375:
-
-/* Line 1806 of yacc.c  */
-#line 1456 "parser.yy"
+  case 382:
+
+/* Line 1806 of yacc.c  */
+#line 1483 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
 
-  case 376:
-
-/* Line 1806 of yacc.c  */
-#line 1459 "parser.yy"
+  case 383:
+
+/* Line 1806 of yacc.c  */
+#line 1486 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 377:
-
-/* Line 1806 of yacc.c  */
-#line 1462 "parser.yy"
+  case 384:
+
+/* Line 1806 of yacc.c  */
+#line 1489 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 379:
-
-/* Line 1806 of yacc.c  */
-#line 1468 "parser.yy"
+  case 386:
+
+/* Line 1806 of yacc.c  */
+#line 1495 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 380:
-
-/* Line 1806 of yacc.c  */
-#line 1470 "parser.yy"
+  case 387:
+
+/* Line 1806 of yacc.c  */
+#line 1497 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
-  case 381:
-
-/* Line 1806 of yacc.c  */
-#line 1475 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en); }
-    break;
-
-  case 383:
-
-/* Line 1806 of yacc.c  */
-#line 1484 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
-    break;
-
-  case 384:
-
-/* Line 1806 of yacc.c  */
-#line 1486 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 385:
-
-/* Line 1806 of yacc.c  */
-#line 1488 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
-    break;
-
-  case 386:
-
-/* Line 1806 of yacc.c  */
-#line 1493 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 387:
-
-/* Line 1806 of yacc.c  */
-#line 1495 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
-    break;
-
   case 388:
-
-/* Line 1806 of yacc.c  */
-#line 1500 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 389:
 
 /* Line 1806 of yacc.c  */
@@ -7123,72 +7060,86 @@
 
 /* Line 1806 of yacc.c  */
-#line 1509 "parser.yy"
+#line 1511 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
+    break;
+
+  case 391:
+
+/* Line 1806 of yacc.c  */
+#line 1513 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 392:
+
+/* Line 1806 of yacc.c  */
+#line 1515 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
+    break;
+
+  case 393:
+
+/* Line 1806 of yacc.c  */
+#line 1520 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
+    break;
+
+  case 394:
+
+/* Line 1806 of yacc.c  */
+#line 1522 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
+  case 395:
+
+/* Line 1806 of yacc.c  */
+#line 1527 "parser.yy"
+    { (yyval.en) = 0; }
+    break;
+
+  case 396:
+
+/* Line 1806 of yacc.c  */
+#line 1529 "parser.yy"
+    { (yyval.en) = (yyvsp[(2) - (2)].en); }
+    break;
+
+  case 397:
+
+/* Line 1806 of yacc.c  */
+#line 1536 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 394:
-
-/* Line 1806 of yacc.c  */
-#line 1517 "parser.yy"
+  case 401:
+
+/* Line 1806 of yacc.c  */
+#line 1544 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 395:
-
-/* Line 1806 of yacc.c  */
-#line 1519 "parser.yy"
+  case 402:
+
+/* Line 1806 of yacc.c  */
+#line 1546 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 396:
-
-/* Line 1806 of yacc.c  */
-#line 1521 "parser.yy"
+  case 403:
+
+/* Line 1806 of yacc.c  */
+#line 1548 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 398:
-
-/* Line 1806 of yacc.c  */
-#line 1529 "parser.yy"
+  case 405:
+
+/* Line 1806 of yacc.c  */
+#line 1556 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 399:
-
-/* Line 1806 of yacc.c  */
-#line 1531 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 400:
-
-/* Line 1806 of yacc.c  */
-#line 1533 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
-    break;
-
-  case 402:
-
-/* Line 1806 of yacc.c  */
-#line 1539 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 403:
-
-/* Line 1806 of yacc.c  */
-#line 1544 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
   case 406:
-
-/* Line 1806 of yacc.c  */
-#line 1551 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 409:
 
 /* Line 1806 of yacc.c  */
@@ -7197,43 +7148,78 @@
     break;
 
+  case 407:
+
+/* Line 1806 of yacc.c  */
+#line 1560 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
+    break;
+
+  case 409:
+
+/* Line 1806 of yacc.c  */
+#line 1566 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
   case 410:
 
 /* Line 1806 of yacc.c  */
-#line 1560 "parser.yy"
+#line 1571 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 413:
+
+/* Line 1806 of yacc.c  */
+#line 1578 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 416:
+
+/* Line 1806 of yacc.c  */
+#line 1585 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 412:
-
-/* Line 1806 of yacc.c  */
-#line 1569 "parser.yy"
+  case 417:
+
+/* Line 1806 of yacc.c  */
+#line 1587 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 419:
+
+/* Line 1806 of yacc.c  */
+#line 1596 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
-  case 413:
-
-/* Line 1806 of yacc.c  */
-#line 1572 "parser.yy"
+  case 420:
+
+/* Line 1806 of yacc.c  */
+#line 1599 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
-  case 414:
-
-/* Line 1806 of yacc.c  */
-#line 1574 "parser.yy"
+  case 421:
+
+/* Line 1806 of yacc.c  */
+#line 1601 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
 
-  case 419:
-
-/* Line 1806 of yacc.c  */
-#line 1584 "parser.yy"
+  case 426:
+
+/* Line 1806 of yacc.c  */
+#line 1611 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 421:
-
-/* Line 1806 of yacc.c  */
-#line 1590 "parser.yy"
+  case 428:
+
+/* Line 1806 of yacc.c  */
+#line 1617 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7242,8 +7228,8 @@
     break;
 
-  case 422:
-
-/* Line 1806 of yacc.c  */
-#line 1595 "parser.yy"
+  case 429:
+
+/* Line 1806 of yacc.c  */
+#line 1622 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7252,246 +7238,260 @@
     break;
 
-  case 424:
-
-/* Line 1806 of yacc.c  */
-#line 1604 "parser.yy"
+  case 431:
+
+/* Line 1806 of yacc.c  */
+#line 1631 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 425:
-
-/* Line 1806 of yacc.c  */
-#line 1613 "parser.yy"
+  case 432:
+
+/* Line 1806 of yacc.c  */
+#line 1640 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 426:
-
-/* Line 1806 of yacc.c  */
-#line 1615 "parser.yy"
+  case 433:
+
+/* Line 1806 of yacc.c  */
+#line 1642 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
-  case 438:
-
-/* Line 1806 of yacc.c  */
-#line 1640 "parser.yy"
+  case 445:
+
+/* Line 1806 of yacc.c  */
+#line 1667 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 442:
-
-/* Line 1806 of yacc.c  */
-#line 1648 "parser.yy"
+  case 449:
+
+/* Line 1806 of yacc.c  */
+#line 1675 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 443:
-
-/* Line 1806 of yacc.c  */
-#line 1653 "parser.yy"
+  case 450:
+
+/* Line 1806 of yacc.c  */
+#line 1680 "parser.yy"
     { (yyval.in) = 0; }
     break;
 
-  case 444:
-
-/* Line 1806 of yacc.c  */
-#line 1655 "parser.yy"
+  case 451:
+
+/* Line 1806 of yacc.c  */
+#line 1682 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
 
-  case 445:
-
-/* Line 1806 of yacc.c  */
-#line 1659 "parser.yy"
+  case 452:
+
+/* Line 1806 of yacc.c  */
+#line 1684 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in); }
+    break;
+
+  case 453:
+
+/* Line 1806 of yacc.c  */
+#line 1688 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
 
-  case 446:
-
-/* Line 1806 of yacc.c  */
-#line 1660 "parser.yy"
+  case 454:
+
+/* Line 1806 of yacc.c  */
+#line 1689 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
 
-  case 448:
-
-/* Line 1806 of yacc.c  */
-#line 1665 "parser.yy"
+  case 455:
+
+/* Line 1806 of yacc.c  */
+#line 1694 "parser.yy"
+    { (yyval.in) = 0; }
+    break;
+
+  case 457:
+
+/* Line 1806 of yacc.c  */
+#line 1696 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
 
-  case 449:
-
-/* Line 1806 of yacc.c  */
-#line 1666 "parser.yy"
+  case 458:
+
+/* Line 1806 of yacc.c  */
+#line 1697 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     break;
 
-  case 450:
-
-/* Line 1806 of yacc.c  */
-#line 1668 "parser.yy"
+  case 459:
+
+/* Line 1806 of yacc.c  */
+#line 1699 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
 
-  case 452:
-
-/* Line 1806 of yacc.c  */
-#line 1684 "parser.yy"
+  case 461:
+
+/* Line 1806 of yacc.c  */
+#line 1715 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     break;
 
-  case 454:
-
-/* Line 1806 of yacc.c  */
-#line 1690 "parser.yy"
+  case 463:
+
+/* Line 1806 of yacc.c  */
+#line 1721 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
     break;
 
-  case 455:
-
-/* Line 1806 of yacc.c  */
-#line 1697 "parser.yy"
+  case 464:
+
+/* Line 1806 of yacc.c  */
+#line 1729 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
-  case 456:
-
-/* Line 1806 of yacc.c  */
-#line 1699 "parser.yy"
+  case 465:
+
+/* Line 1806 of yacc.c  */
+#line 1731 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
     break;
 
-  case 457:
-
-/* Line 1806 of yacc.c  */
-#line 1702 "parser.yy"
+  case 466:
+
+/* Line 1806 of yacc.c  */
+#line 1734 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
 
-  case 458:
-
-/* Line 1806 of yacc.c  */
-#line 1704 "parser.yy"
+  case 467:
+
+/* Line 1806 of yacc.c  */
+#line 1736 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
 
-  case 459:
-
-/* Line 1806 of yacc.c  */
-#line 1706 "parser.yy"
+  case 468:
+
+/* Line 1806 of yacc.c  */
+#line 1738 "parser.yy"
     { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
     break;
 
-  case 460:
-
-/* Line 1806 of yacc.c  */
-#line 1708 "parser.yy"
+  case 469:
+
+/* Line 1806 of yacc.c  */
+#line 1740 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
     break;
 
-  case 462:
-
-/* Line 1806 of yacc.c  */
-#line 1732 "parser.yy"
+  case 471:
+
+/* Line 1806 of yacc.c  */
+#line 1764 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 463:
-
-/* Line 1806 of yacc.c  */
-#line 1734 "parser.yy"
+  case 472:
+
+/* Line 1806 of yacc.c  */
+#line 1766 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 464:
-
-/* Line 1806 of yacc.c  */
-#line 1736 "parser.yy"
+  case 473:
+
+/* Line 1806 of yacc.c  */
+#line 1768 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 466:
-
-/* Line 1806 of yacc.c  */
-#line 1742 "parser.yy"
+  case 475:
+
+/* Line 1806 of yacc.c  */
+#line 1774 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 467:
-
-/* Line 1806 of yacc.c  */
-#line 1744 "parser.yy"
+  case 476:
+
+/* Line 1806 of yacc.c  */
+#line 1776 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 468:
-
-/* Line 1806 of yacc.c  */
-#line 1749 "parser.yy"
+  case 477:
+
+/* Line 1806 of yacc.c  */
+#line 1781 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 470:
-
-/* Line 1806 of yacc.c  */
-#line 1755 "parser.yy"
+  case 479:
+
+/* Line 1806 of yacc.c  */
+#line 1787 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 471:
-
-/* Line 1806 of yacc.c  */
-#line 1760 "parser.yy"
+  case 480:
+
+/* Line 1806 of yacc.c  */
+#line 1792 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
 
-  case 472:
-
-/* Line 1806 of yacc.c  */
-#line 1762 "parser.yy"
+  case 481:
+
+/* Line 1806 of yacc.c  */
+#line 1794 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 474:
-
-/* Line 1806 of yacc.c  */
-#line 1768 "parser.yy"
+  case 483:
+
+/* Line 1806 of yacc.c  */
+#line 1800 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Type; }
     break;
 
-  case 475:
-
-/* Line 1806 of yacc.c  */
-#line 1770 "parser.yy"
+  case 484:
+
+/* Line 1806 of yacc.c  */
+#line 1802 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
 
-  case 476:
-
-/* Line 1806 of yacc.c  */
-#line 1772 "parser.yy"
+  case 485:
+
+/* Line 1806 of yacc.c  */
+#line 1804 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
 
-  case 477:
-
-/* Line 1806 of yacc.c  */
-#line 1777 "parser.yy"
+  case 486:
+
+/* Line 1806 of yacc.c  */
+#line 1809 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 478:
-
-/* Line 1806 of yacc.c  */
-#line 1779 "parser.yy"
+  case 487:
+
+/* Line 1806 of yacc.c  */
+#line 1811 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 479:
-
-/* Line 1806 of yacc.c  */
-#line 1784 "parser.yy"
+  case 488:
+
+/* Line 1806 of yacc.c  */
+#line 1816 "parser.yy"
     {
 			typedefTable.openContext( *(yyvsp[(2) - (5)].tok) );
@@ -7500,78 +7500,78 @@
     break;
 
-  case 480:
-
-/* Line 1806 of yacc.c  */
-#line 1789 "parser.yy"
+  case 489:
+
+/* Line 1806 of yacc.c  */
+#line 1821 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
 
-  case 481:
-
-/* Line 1806 of yacc.c  */
-#line 1791 "parser.yy"
+  case 490:
+
+/* Line 1806 of yacc.c  */
+#line 1823 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 482:
-
-/* Line 1806 of yacc.c  */
-#line 1796 "parser.yy"
+  case 491:
+
+/* Line 1806 of yacc.c  */
+#line 1828 "parser.yy"
     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
-  case 484:
-
-/* Line 1806 of yacc.c  */
-#line 1799 "parser.yy"
+  case 493:
+
+/* Line 1806 of yacc.c  */
+#line 1831 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
     break;
 
-  case 485:
-
-/* Line 1806 of yacc.c  */
-#line 1801 "parser.yy"
+  case 494:
+
+/* Line 1806 of yacc.c  */
+#line 1833 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
 
-  case 486:
-
-/* Line 1806 of yacc.c  */
-#line 1806 "parser.yy"
+  case 495:
+
+/* Line 1806 of yacc.c  */
+#line 1838 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 487:
-
-/* Line 1806 of yacc.c  */
-#line 1808 "parser.yy"
+  case 496:
+
+/* Line 1806 of yacc.c  */
+#line 1840 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 488:
-
-/* Line 1806 of yacc.c  */
-#line 1810 "parser.yy"
+  case 497:
+
+/* Line 1806 of yacc.c  */
+#line 1842 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 489:
-
-/* Line 1806 of yacc.c  */
-#line 1815 "parser.yy"
+  case 498:
+
+/* Line 1806 of yacc.c  */
+#line 1847 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 490:
-
-/* Line 1806 of yacc.c  */
-#line 1817 "parser.yy"
+  case 499:
+
+/* Line 1806 of yacc.c  */
+#line 1849 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 491:
-
-/* Line 1806 of yacc.c  */
-#line 1822 "parser.yy"
+  case 500:
+
+/* Line 1806 of yacc.c  */
+#line 1854 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7580,8 +7580,8 @@
     break;
 
-  case 492:
-
-/* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
+  case 501:
+
+/* Line 1806 of yacc.c  */
+#line 1859 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7590,8 +7590,8 @@
     break;
 
-  case 493:
-
-/* Line 1806 of yacc.c  */
-#line 1835 "parser.yy"
+  case 502:
+
+/* Line 1806 of yacc.c  */
+#line 1867 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7600,8 +7600,8 @@
     break;
 
-  case 494:
-
-/* Line 1806 of yacc.c  */
-#line 1840 "parser.yy"
+  case 503:
+
+/* Line 1806 of yacc.c  */
+#line 1872 "parser.yy"
     {
 			typedefTable.enterContext( *(yyvsp[(2) - (8)].tok) );
@@ -7610,8 +7610,8 @@
     break;
 
-  case 495:
-
-/* Line 1806 of yacc.c  */
-#line 1845 "parser.yy"
+  case 504:
+
+/* Line 1806 of yacc.c  */
+#line 1877 "parser.yy"
     {
 			typedefTable.leaveContext();
@@ -7621,15 +7621,15 @@
     break;
 
-  case 497:
-
-/* Line 1806 of yacc.c  */
-#line 1855 "parser.yy"
+  case 506:
+
+/* Line 1806 of yacc.c  */
+#line 1887 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 500:
-
-/* Line 1806 of yacc.c  */
-#line 1865 "parser.yy"
+  case 509:
+
+/* Line 1806 of yacc.c  */
+#line 1897 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7638,8 +7638,8 @@
     break;
 
-  case 501:
-
-/* Line 1806 of yacc.c  */
-#line 1870 "parser.yy"
+  case 510:
+
+/* Line 1806 of yacc.c  */
+#line 1902 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7648,8 +7648,8 @@
     break;
 
-  case 502:
-
-/* Line 1806 of yacc.c  */
-#line 1875 "parser.yy"
+  case 511:
+
+/* Line 1806 of yacc.c  */
+#line 1907 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7658,8 +7658,8 @@
     break;
 
-  case 503:
-
-/* Line 1806 of yacc.c  */
-#line 1883 "parser.yy"
+  case 512:
+
+/* Line 1806 of yacc.c  */
+#line 1915 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7668,8 +7668,8 @@
     break;
 
-  case 504:
-
-/* Line 1806 of yacc.c  */
-#line 1888 "parser.yy"
+  case 513:
+
+/* Line 1806 of yacc.c  */
+#line 1920 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7678,15 +7678,15 @@
     break;
 
-  case 505:
-
-/* Line 1806 of yacc.c  */
-#line 1898 "parser.yy"
+  case 514:
+
+/* Line 1806 of yacc.c  */
+#line 1930 "parser.yy"
     {}
     break;
 
-  case 506:
-
-/* Line 1806 of yacc.c  */
-#line 1900 "parser.yy"
+  case 515:
+
+/* Line 1806 of yacc.c  */
+#line 1932 "parser.yy"
     {
 			if ( theTree ) {
@@ -7698,29 +7698,29 @@
     break;
 
-  case 508:
-
-/* Line 1806 of yacc.c  */
-#line 1912 "parser.yy"
+  case 517:
+
+/* Line 1806 of yacc.c  */
+#line 1944 "parser.yy"
     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
 
-  case 509:
-
-/* Line 1806 of yacc.c  */
-#line 1917 "parser.yy"
+  case 518:
+
+/* Line 1806 of yacc.c  */
+#line 1949 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 513:
-
-/* Line 1806 of yacc.c  */
-#line 1925 "parser.yy"
+  case 522:
+
+/* Line 1806 of yacc.c  */
+#line 1957 "parser.yy"
     {}
     break;
 
-  case 514:
-
-/* Line 1806 of yacc.c  */
-#line 1927 "parser.yy"
+  case 523:
+
+/* Line 1806 of yacc.c  */
+#line 1959 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -7729,8 +7729,8 @@
     break;
 
-  case 515:
-
-/* Line 1806 of yacc.c  */
-#line 1932 "parser.yy"
+  case 524:
+
+/* Line 1806 of yacc.c  */
+#line 1964 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7740,15 +7740,15 @@
     break;
 
-  case 516:
-
-/* Line 1806 of yacc.c  */
-#line 1938 "parser.yy"
+  case 525:
+
+/* Line 1806 of yacc.c  */
+#line 1970 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 518:
-
-/* Line 1806 of yacc.c  */
-#line 1948 "parser.yy"
+  case 527:
+
+/* Line 1806 of yacc.c  */
+#line 1980 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7758,8 +7758,8 @@
     break;
 
-  case 519:
-
-/* Line 1806 of yacc.c  */
-#line 1954 "parser.yy"
+  case 528:
+
+/* Line 1806 of yacc.c  */
+#line 1986 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7769,8 +7769,8 @@
     break;
 
-  case 520:
-
-/* Line 1806 of yacc.c  */
-#line 1963 "parser.yy"
+  case 529:
+
+/* Line 1806 of yacc.c  */
+#line 1995 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7780,8 +7780,8 @@
     break;
 
-  case 521:
-
-/* Line 1806 of yacc.c  */
-#line 1969 "parser.yy"
+  case 530:
+
+/* Line 1806 of yacc.c  */
+#line 2001 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7791,8 +7791,8 @@
     break;
 
-  case 522:
-
-/* Line 1806 of yacc.c  */
-#line 1975 "parser.yy"
+  case 531:
+
+/* Line 1806 of yacc.c  */
+#line 2007 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7802,8 +7802,8 @@
     break;
 
-  case 523:
-
-/* Line 1806 of yacc.c  */
-#line 1981 "parser.yy"
+  case 532:
+
+/* Line 1806 of yacc.c  */
+#line 2013 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7813,8 +7813,8 @@
     break;
 
-  case 524:
-
-/* Line 1806 of yacc.c  */
-#line 1987 "parser.yy"
+  case 533:
+
+/* Line 1806 of yacc.c  */
+#line 2019 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7824,8 +7824,8 @@
     break;
 
-  case 525:
-
-/* Line 1806 of yacc.c  */
-#line 1995 "parser.yy"
+  case 534:
+
+/* Line 1806 of yacc.c  */
+#line 2027 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7835,8 +7835,8 @@
     break;
 
-  case 526:
-
-/* Line 1806 of yacc.c  */
-#line 2001 "parser.yy"
+  case 535:
+
+/* Line 1806 of yacc.c  */
+#line 2033 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7846,8 +7846,8 @@
     break;
 
-  case 527:
-
-/* Line 1806 of yacc.c  */
-#line 2009 "parser.yy"
+  case 536:
+
+/* Line 1806 of yacc.c  */
+#line 2041 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7857,8 +7857,8 @@
     break;
 
-  case 528:
-
-/* Line 1806 of yacc.c  */
-#line 2015 "parser.yy"
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2047 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7868,85 +7868,85 @@
     break;
 
-  case 532:
-
-/* Line 1806 of yacc.c  */
-#line 2030 "parser.yy"
+  case 541:
+
+/* Line 1806 of yacc.c  */
+#line 2062 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 535:
-
-/* Line 1806 of yacc.c  */
-#line 2040 "parser.yy"
+  case 544:
+
+/* Line 1806 of yacc.c  */
+#line 2072 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 538:
-
-/* Line 1806 of yacc.c  */
-#line 2047 "parser.yy"
+  case 547:
+
+/* Line 1806 of yacc.c  */
+#line 2079 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 539:
-
-/* Line 1806 of yacc.c  */
-#line 2053 "parser.yy"
+  case 548:
+
+/* Line 1806 of yacc.c  */
+#line 2085 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 545:
-
-/* Line 1806 of yacc.c  */
-#line 2068 "parser.yy"
+  case 554:
+
+/* Line 1806 of yacc.c  */
+#line 2100 "parser.yy"
     {}
     break;
 
-  case 546:
-
-/* Line 1806 of yacc.c  */
-#line 2069 "parser.yy"
+  case 555:
+
+/* Line 1806 of yacc.c  */
+#line 2101 "parser.yy"
     {}
     break;
 
-  case 547:
-
-/* Line 1806 of yacc.c  */
-#line 2070 "parser.yy"
+  case 556:
+
+/* Line 1806 of yacc.c  */
+#line 2102 "parser.yy"
     {}
     break;
 
-  case 548:
-
-/* Line 1806 of yacc.c  */
-#line 2071 "parser.yy"
+  case 557:
+
+/* Line 1806 of yacc.c  */
+#line 2103 "parser.yy"
     {}
     break;
 
-  case 549:
-
-/* Line 1806 of yacc.c  */
-#line 2106 "parser.yy"
+  case 558:
+
+/* Line 1806 of yacc.c  */
+#line 2138 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 551:
-
-/* Line 1806 of yacc.c  */
-#line 2109 "parser.yy"
+  case 560:
+
+/* Line 1806 of yacc.c  */
+#line 2141 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 552:
-
-/* Line 1806 of yacc.c  */
-#line 2111 "parser.yy"
+  case 561:
+
+/* Line 1806 of yacc.c  */
+#line 2143 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 553:
-
-/* Line 1806 of yacc.c  */
-#line 2116 "parser.yy"
+  case 562:
+
+/* Line 1806 of yacc.c  */
+#line 2148 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -7955,428 +7955,428 @@
     break;
 
-  case 554:
-
-/* Line 1806 of yacc.c  */
-#line 2121 "parser.yy"
+  case 563:
+
+/* Line 1806 of yacc.c  */
+#line 2153 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 555:
-
-/* Line 1806 of yacc.c  */
-#line 2126 "parser.yy"
+  case 564:
+
+/* Line 1806 of yacc.c  */
+#line 2158 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 556:
-
-/* Line 1806 of yacc.c  */
-#line 2128 "parser.yy"
+  case 565:
+
+/* Line 1806 of yacc.c  */
+#line 2160 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 557:
-
-/* Line 1806 of yacc.c  */
-#line 2130 "parser.yy"
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2162 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 558:
-
-/* Line 1806 of yacc.c  */
-#line 2135 "parser.yy"
+  case 567:
+
+/* Line 1806 of yacc.c  */
+#line 2167 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 559:
-
-/* Line 1806 of yacc.c  */
-#line 2137 "parser.yy"
+  case 568:
+
+/* Line 1806 of yacc.c  */
+#line 2169 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 560:
-
-/* Line 1806 of yacc.c  */
-#line 2139 "parser.yy"
+  case 569:
+
+/* Line 1806 of yacc.c  */
+#line 2171 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 561:
-
-/* Line 1806 of yacc.c  */
-#line 2141 "parser.yy"
+  case 570:
+
+/* Line 1806 of yacc.c  */
+#line 2173 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 562:
-
-/* Line 1806 of yacc.c  */
-#line 2146 "parser.yy"
+  case 571:
+
+/* Line 1806 of yacc.c  */
+#line 2178 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 563:
-
-/* Line 1806 of yacc.c  */
-#line 2148 "parser.yy"
+  case 572:
+
+/* Line 1806 of yacc.c  */
+#line 2180 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 564:
-
-/* Line 1806 of yacc.c  */
-#line 2158 "parser.yy"
+  case 573:
+
+/* Line 1806 of yacc.c  */
+#line 2190 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 566:
-
-/* Line 1806 of yacc.c  */
-#line 2161 "parser.yy"
+  case 575:
+
+/* Line 1806 of yacc.c  */
+#line 2193 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 567:
-
-/* Line 1806 of yacc.c  */
-#line 2166 "parser.yy"
+  case 576:
+
+/* Line 1806 of yacc.c  */
+#line 2198 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 568:
-
-/* Line 1806 of yacc.c  */
-#line 2168 "parser.yy"
+  case 577:
+
+/* Line 1806 of yacc.c  */
+#line 2200 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 569:
-
-/* Line 1806 of yacc.c  */
-#line 2170 "parser.yy"
+  case 578:
+
+/* Line 1806 of yacc.c  */
+#line 2202 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 570:
-
-/* Line 1806 of yacc.c  */
-#line 2175 "parser.yy"
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2207 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2177 "parser.yy"
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2209 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2179 "parser.yy"
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2211 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2184 "parser.yy"
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2216 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2186 "parser.yy"
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2218 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 575:
-
-/* Line 1806 of yacc.c  */
-#line 2188 "parser.yy"
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2220 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2203 "parser.yy"
+  case 588:
+
+/* Line 1806 of yacc.c  */
+#line 2235 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 580:
-
-/* Line 1806 of yacc.c  */
-#line 2205 "parser.yy"
+  case 589:
+
+/* Line 1806 of yacc.c  */
+#line 2237 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
 
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2207 "parser.yy"
+  case 590:
+
+/* Line 1806 of yacc.c  */
+#line 2239 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2212 "parser.yy"
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2244 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2214 "parser.yy"
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2246 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2216 "parser.yy"
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2248 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2221 "parser.yy"
+  case 594:
+
+/* Line 1806 of yacc.c  */
+#line 2253 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 586:
-
-/* Line 1806 of yacc.c  */
-#line 2223 "parser.yy"
+  case 595:
+
+/* Line 1806 of yacc.c  */
+#line 2255 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 587:
-
-/* Line 1806 of yacc.c  */
-#line 2225 "parser.yy"
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2257 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 588:
-
-/* Line 1806 of yacc.c  */
-#line 2240 "parser.yy"
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2272 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2243 "parser.yy"
+  case 599:
+
+/* Line 1806 of yacc.c  */
+#line 2275 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 591:
-
-/* Line 1806 of yacc.c  */
-#line 2245 "parser.yy"
+  case 600:
+
+/* Line 1806 of yacc.c  */
+#line 2277 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 593:
-
-/* Line 1806 of yacc.c  */
-#line 2251 "parser.yy"
+  case 602:
+
+/* Line 1806 of yacc.c  */
+#line 2283 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 594:
-
-/* Line 1806 of yacc.c  */
-#line 2256 "parser.yy"
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2288 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 595:
-
-/* Line 1806 of yacc.c  */
-#line 2258 "parser.yy"
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2290 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2260 "parser.yy"
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2292 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2265 "parser.yy"
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2297 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2267 "parser.yy"
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2299 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 599:
-
-/* Line 1806 of yacc.c  */
-#line 2269 "parser.yy"
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2301 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2271 "parser.yy"
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2303 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2276 "parser.yy"
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2308 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 602:
-
-/* Line 1806 of yacc.c  */
-#line 2278 "parser.yy"
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2310 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2280 "parser.yy"
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2312 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2290 "parser.yy"
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2322 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2293 "parser.yy"
+  case 615:
+
+/* Line 1806 of yacc.c  */
+#line 2325 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 607:
-
-/* Line 1806 of yacc.c  */
-#line 2295 "parser.yy"
+  case 616:
+
+/* Line 1806 of yacc.c  */
+#line 2327 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2300 "parser.yy"
+  case 617:
+
+/* Line 1806 of yacc.c  */
+#line 2332 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2302 "parser.yy"
+  case 618:
+
+/* Line 1806 of yacc.c  */
+#line 2334 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2304 "parser.yy"
+  case 619:
+
+/* Line 1806 of yacc.c  */
+#line 2336 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2309 "parser.yy"
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2341 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2311 "parser.yy"
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2343 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2313 "parser.yy"
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2345 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2315 "parser.yy"
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2347 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 615:
-
-/* Line 1806 of yacc.c  */
-#line 2320 "parser.yy"
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2352 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 616:
-
-/* Line 1806 of yacc.c  */
-#line 2322 "parser.yy"
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2354 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 617:
-
-/* Line 1806 of yacc.c  */
-#line 2324 "parser.yy"
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2356 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2355 "parser.yy"
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2387 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2358 "parser.yy"
+  case 629:
+
+/* Line 1806 of yacc.c  */
+#line 2390 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2360 "parser.yy"
+  case 630:
+
+/* Line 1806 of yacc.c  */
+#line 2392 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2365 "parser.yy"
+  case 631:
+
+/* Line 1806 of yacc.c  */
+#line 2397 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8385,8 +8385,8 @@
     break;
 
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2370 "parser.yy"
+  case 632:
+
+/* Line 1806 of yacc.c  */
+#line 2402 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8395,687 +8395,687 @@
     break;
 
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2378 "parser.yy"
+  case 633:
+
+/* Line 1806 of yacc.c  */
+#line 2410 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2380 "parser.yy"
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2412 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2382 "parser.yy"
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2414 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2387 "parser.yy"
+  case 636:
+
+/* Line 1806 of yacc.c  */
+#line 2419 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2389 "parser.yy"
+  case 637:
+
+/* Line 1806 of yacc.c  */
+#line 2421 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 629:
-
-/* Line 1806 of yacc.c  */
-#line 2394 "parser.yy"
+  case 638:
+
+/* Line 1806 of yacc.c  */
+#line 2426 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 630:
-
-/* Line 1806 of yacc.c  */
-#line 2396 "parser.yy"
+  case 639:
+
+/* Line 1806 of yacc.c  */
+#line 2428 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 632:
-
-/* Line 1806 of yacc.c  */
-#line 2411 "parser.yy"
+  case 641:
+
+/* Line 1806 of yacc.c  */
+#line 2443 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 633:
-
-/* Line 1806 of yacc.c  */
-#line 2413 "parser.yy"
+  case 642:
+
+/* Line 1806 of yacc.c  */
+#line 2445 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 634:
-
-/* Line 1806 of yacc.c  */
-#line 2418 "parser.yy"
+  case 643:
+
+/* Line 1806 of yacc.c  */
+#line 2450 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 635:
-
-/* Line 1806 of yacc.c  */
-#line 2420 "parser.yy"
+  case 644:
+
+/* Line 1806 of yacc.c  */
+#line 2452 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 636:
-
-/* Line 1806 of yacc.c  */
-#line 2422 "parser.yy"
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2454 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 637:
-
-/* Line 1806 of yacc.c  */
-#line 2424 "parser.yy"
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2456 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 638:
-
-/* Line 1806 of yacc.c  */
-#line 2426 "parser.yy"
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2458 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 640:
-
-/* Line 1806 of yacc.c  */
-#line 2432 "parser.yy"
+  case 649:
+
+/* Line 1806 of yacc.c  */
+#line 2464 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 641:
-
-/* Line 1806 of yacc.c  */
-#line 2434 "parser.yy"
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2466 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 642:
-
-/* Line 1806 of yacc.c  */
-#line 2436 "parser.yy"
+  case 651:
+
+/* Line 1806 of yacc.c  */
+#line 2468 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 643:
-
-/* Line 1806 of yacc.c  */
-#line 2441 "parser.yy"
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2473 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
 
-  case 644:
-
-/* Line 1806 of yacc.c  */
-#line 2443 "parser.yy"
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2475 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2445 "parser.yy"
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2477 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2451 "parser.yy"
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2483 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2453 "parser.yy"
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2485 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 649:
-
-/* Line 1806 of yacc.c  */
-#line 2459 "parser.yy"
+  case 658:
+
+/* Line 1806 of yacc.c  */
+#line 2491 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
 
-  case 650:
-
-/* Line 1806 of yacc.c  */
-#line 2461 "parser.yy"
+  case 659:
+
+/* Line 1806 of yacc.c  */
+#line 2493 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
 
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2463 "parser.yy"
+  case 660:
+
+/* Line 1806 of yacc.c  */
+#line 2495 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
 
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2465 "parser.yy"
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2497 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
 
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2480 "parser.yy"
+  case 663:
+
+/* Line 1806 of yacc.c  */
+#line 2512 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2482 "parser.yy"
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2514 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2487 "parser.yy"
+  case 665:
+
+/* Line 1806 of yacc.c  */
+#line 2519 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2489 "parser.yy"
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2521 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 658:
-
-/* Line 1806 of yacc.c  */
-#line 2491 "parser.yy"
+  case 667:
+
+/* Line 1806 of yacc.c  */
+#line 2523 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 659:
-
-/* Line 1806 of yacc.c  */
-#line 2493 "parser.yy"
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2525 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2495 "parser.yy"
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2527 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2501 "parser.yy"
+  case 671:
+
+/* Line 1806 of yacc.c  */
+#line 2533 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 663:
-
-/* Line 1806 of yacc.c  */
-#line 2503 "parser.yy"
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2535 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 664:
-
-/* Line 1806 of yacc.c  */
-#line 2505 "parser.yy"
+  case 673:
+
+/* Line 1806 of yacc.c  */
+#line 2537 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2510 "parser.yy"
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2542 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
 
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2512 "parser.yy"
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2544 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2514 "parser.yy"
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2546 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2521 "parser.yy"
+  case 678:
+
+/* Line 1806 of yacc.c  */
+#line 2553 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 671:
-
-/* Line 1806 of yacc.c  */
-#line 2532 "parser.yy"
+  case 680:
+
+/* Line 1806 of yacc.c  */
+#line 2564 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 672:
-
-/* Line 1806 of yacc.c  */
-#line 2535 "parser.yy"
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2567 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2537 "parser.yy"
+  case 682:
+
+/* Line 1806 of yacc.c  */
+#line 2569 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
 
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2540 "parser.yy"
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2572 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2542 "parser.yy"
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2574 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
 
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2544 "parser.yy"
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2576 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
 
-  case 678:
-
-/* Line 1806 of yacc.c  */
-#line 2558 "parser.yy"
+  case 687:
+
+/* Line 1806 of yacc.c  */
+#line 2590 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 679:
-
-/* Line 1806 of yacc.c  */
-#line 2560 "parser.yy"
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2592 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 680:
-
-/* Line 1806 of yacc.c  */
-#line 2565 "parser.yy"
+  case 689:
+
+/* Line 1806 of yacc.c  */
+#line 2597 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 681:
-
-/* Line 1806 of yacc.c  */
-#line 2567 "parser.yy"
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2599 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2569 "parser.yy"
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2601 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 683:
-
-/* Line 1806 of yacc.c  */
-#line 2571 "parser.yy"
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2603 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2573 "parser.yy"
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2605 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2579 "parser.yy"
+  case 695:
+
+/* Line 1806 of yacc.c  */
+#line 2611 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 687:
-
-/* Line 1806 of yacc.c  */
-#line 2581 "parser.yy"
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2613 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 688:
-
-/* Line 1806 of yacc.c  */
-#line 2583 "parser.yy"
+  case 697:
+
+/* Line 1806 of yacc.c  */
+#line 2615 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2588 "parser.yy"
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2620 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2590 "parser.yy"
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2622 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2600 "parser.yy"
+  case 702:
+
+/* Line 1806 of yacc.c  */
+#line 2632 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 696:
-
-/* Line 1806 of yacc.c  */
-#line 2610 "parser.yy"
+  case 705:
+
+/* Line 1806 of yacc.c  */
+#line 2642 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2612 "parser.yy"
+  case 706:
+
+/* Line 1806 of yacc.c  */
+#line 2644 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2614 "parser.yy"
+  case 707:
+
+/* Line 1806 of yacc.c  */
+#line 2646 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2616 "parser.yy"
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2648 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2618 "parser.yy"
+  case 709:
+
+/* Line 1806 of yacc.c  */
+#line 2650 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 701:
-
-/* Line 1806 of yacc.c  */
-#line 2620 "parser.yy"
+  case 710:
+
+/* Line 1806 of yacc.c  */
+#line 2652 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 702:
-
-/* Line 1806 of yacc.c  */
-#line 2627 "parser.yy"
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2659 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 703:
-
-/* Line 1806 of yacc.c  */
-#line 2629 "parser.yy"
+  case 712:
+
+/* Line 1806 of yacc.c  */
+#line 2661 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 704:
-
-/* Line 1806 of yacc.c  */
-#line 2631 "parser.yy"
+  case 713:
+
+/* Line 1806 of yacc.c  */
+#line 2663 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 705:
-
-/* Line 1806 of yacc.c  */
-#line 2633 "parser.yy"
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2665 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 706:
-
-/* Line 1806 of yacc.c  */
-#line 2635 "parser.yy"
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2667 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 707:
-
-/* Line 1806 of yacc.c  */
-#line 2637 "parser.yy"
+  case 716:
+
+/* Line 1806 of yacc.c  */
+#line 2669 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 708:
-
-/* Line 1806 of yacc.c  */
-#line 2639 "parser.yy"
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2671 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 709:
-
-/* Line 1806 of yacc.c  */
-#line 2641 "parser.yy"
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2673 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 710:
-
-/* Line 1806 of yacc.c  */
-#line 2643 "parser.yy"
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2675 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 711:
-
-/* Line 1806 of yacc.c  */
-#line 2645 "parser.yy"
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2677 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 712:
-
-/* Line 1806 of yacc.c  */
-#line 2650 "parser.yy"
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2682 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 713:
-
-/* Line 1806 of yacc.c  */
-#line 2652 "parser.yy"
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2684 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 714:
-
-/* Line 1806 of yacc.c  */
-#line 2657 "parser.yy"
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2689 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2659 "parser.yy"
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2691 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
 
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2686 "parser.yy"
+  case 726:
+
+/* Line 1806 of yacc.c  */
+#line 2718 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2697 "parser.yy"
+  case 730:
+
+/* Line 1806 of yacc.c  */
+#line 2729 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2699 "parser.yy"
+  case 731:
+
+/* Line 1806 of yacc.c  */
+#line 2731 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2701 "parser.yy"
+  case 732:
+
+/* Line 1806 of yacc.c  */
+#line 2733 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2703 "parser.yy"
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2735 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2705 "parser.yy"
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2737 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 726:
-
-/* Line 1806 of yacc.c  */
-#line 2707 "parser.yy"
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2739 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 727:
-
-/* Line 1806 of yacc.c  */
-#line 2714 "parser.yy"
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2746 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 728:
-
-/* Line 1806 of yacc.c  */
-#line 2716 "parser.yy"
+  case 737:
+
+/* Line 1806 of yacc.c  */
+#line 2748 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 729:
-
-/* Line 1806 of yacc.c  */
-#line 2718 "parser.yy"
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2750 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 730:
-
-/* Line 1806 of yacc.c  */
-#line 2720 "parser.yy"
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2752 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 731:
-
-/* Line 1806 of yacc.c  */
-#line 2722 "parser.yy"
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2754 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 732:
-
-/* Line 1806 of yacc.c  */
-#line 2724 "parser.yy"
+  case 741:
+
+/* Line 1806 of yacc.c  */
+#line 2756 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 733:
-
-/* Line 1806 of yacc.c  */
-#line 2729 "parser.yy"
+  case 742:
+
+/* Line 1806 of yacc.c  */
+#line 2761 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 734:
-
-/* Line 1806 of yacc.c  */
-#line 2734 "parser.yy"
+  case 743:
+
+/* Line 1806 of yacc.c  */
+#line 2766 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
 
-  case 735:
-
-/* Line 1806 of yacc.c  */
-#line 2736 "parser.yy"
+  case 744:
+
+/* Line 1806 of yacc.c  */
+#line 2768 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
-  case 736:
-
-/* Line 1806 of yacc.c  */
-#line 2738 "parser.yy"
+  case 745:
+
+/* Line 1806 of yacc.c  */
+#line 2770 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
-  case 739:
-
-/* Line 1806 of yacc.c  */
-#line 2762 "parser.yy"
+  case 748:
+
+/* Line 1806 of yacc.c  */
+#line 2794 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2764 "parser.yy"
+  case 749:
+
+/* Line 1806 of yacc.c  */
+#line 2796 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9315,5 +9315,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2767 "parser.yy"
+#line 2799 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/Parser/parser.h	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -87,53 +87,59 @@
      RETURN = 305,
      CHOOSE = 306,
-     FALLTHRU = 307,
-     TRY = 308,
-     CATCH = 309,
-     FINALLY = 310,
-     THROW = 311,
-     ASM = 312,
-     ALIGNAS = 313,
-     ALIGNOF = 314,
-     ATOMIC = 315,
-     GENERIC = 316,
-     NORETURN = 317,
-     STATICASSERT = 318,
-     THREADLOCAL = 319,
-     IDENTIFIER = 320,
-     QUOTED_IDENTIFIER = 321,
-     TYPEDEFname = 322,
-     TYPEGENname = 323,
-     ATTR_IDENTIFIER = 324,
-     ATTR_TYPEDEFname = 325,
-     ATTR_TYPEGENname = 326,
-     INTEGERconstant = 327,
-     FLOATINGconstant = 328,
-     CHARACTERconstant = 329,
-     STRINGliteral = 330,
-     ZERO = 331,
-     ONE = 332,
-     ARROW = 333,
-     ICR = 334,
-     DECR = 335,
-     LS = 336,
-     RS = 337,
-     LE = 338,
-     GE = 339,
-     EQ = 340,
-     NE = 341,
-     ANDAND = 342,
-     OROR = 343,
-     ELLIPSIS = 344,
-     MULTassign = 345,
-     DIVassign = 346,
-     MODassign = 347,
-     PLUSassign = 348,
-     MINUSassign = 349,
-     LSassign = 350,
-     RSassign = 351,
-     ANDassign = 352,
-     ERassign = 353,
-     ORassign = 354,
-     THEN = 355
+     DISABLE = 307,
+     ENABLE = 308,
+     FALLTHRU = 309,
+     TRY = 310,
+     CATCH = 311,
+     CATCHRESUME = 312,
+     FINALLY = 313,
+     THROW = 314,
+     THROWRESUME = 315,
+     AT = 316,
+     ASM = 317,
+     ALIGNAS = 318,
+     ALIGNOF = 319,
+     ATOMIC = 320,
+     GENERIC = 321,
+     NORETURN = 322,
+     STATICASSERT = 323,
+     THREADLOCAL = 324,
+     IDENTIFIER = 325,
+     QUOTED_IDENTIFIER = 326,
+     TYPEDEFname = 327,
+     TYPEGENname = 328,
+     ATTR_IDENTIFIER = 329,
+     ATTR_TYPEDEFname = 330,
+     ATTR_TYPEGENname = 331,
+     INTEGERconstant = 332,
+     FLOATINGconstant = 333,
+     CHARACTERconstant = 334,
+     STRINGliteral = 335,
+     ZERO = 336,
+     ONE = 337,
+     ARROW = 338,
+     ICR = 339,
+     DECR = 340,
+     LS = 341,
+     RS = 342,
+     LE = 343,
+     GE = 344,
+     EQ = 345,
+     NE = 346,
+     ANDAND = 347,
+     OROR = 348,
+     ELLIPSIS = 349,
+     MULTassign = 350,
+     DIVassign = 351,
+     MODassign = 352,
+     PLUSassign = 353,
+     MINUSassign = 354,
+     LSassign = 355,
+     RSassign = 356,
+     ANDassign = 357,
+     ERassign = 358,
+     ORassign = 359,
+     ATassign = 360,
+     THEN = 361
    };
 #endif
@@ -188,53 +194,59 @@
 #define RETURN 305
 #define CHOOSE 306
-#define FALLTHRU 307
-#define TRY 308
-#define CATCH 309
-#define FINALLY 310
-#define THROW 311
-#define ASM 312
-#define ALIGNAS 313
-#define ALIGNOF 314
-#define ATOMIC 315
-#define GENERIC 316
-#define NORETURN 317
-#define STATICASSERT 318
-#define THREADLOCAL 319
-#define IDENTIFIER 320
-#define QUOTED_IDENTIFIER 321
-#define TYPEDEFname 322
-#define TYPEGENname 323
-#define ATTR_IDENTIFIER 324
-#define ATTR_TYPEDEFname 325
-#define ATTR_TYPEGENname 326
-#define INTEGERconstant 327
-#define FLOATINGconstant 328
-#define CHARACTERconstant 329
-#define STRINGliteral 330
-#define ZERO 331
-#define ONE 332
-#define ARROW 333
-#define ICR 334
-#define DECR 335
-#define LS 336
-#define RS 337
-#define LE 338
-#define GE 339
-#define EQ 340
-#define NE 341
-#define ANDAND 342
-#define OROR 343
-#define ELLIPSIS 344
-#define MULTassign 345
-#define DIVassign 346
-#define MODassign 347
-#define PLUSassign 348
-#define MINUSassign 349
-#define LSassign 350
-#define RSassign 351
-#define ANDassign 352
-#define ERassign 353
-#define ORassign 354
-#define THEN 355
+#define DISABLE 307
+#define ENABLE 308
+#define FALLTHRU 309
+#define TRY 310
+#define CATCH 311
+#define CATCHRESUME 312
+#define FINALLY 313
+#define THROW 314
+#define THROWRESUME 315
+#define AT 316
+#define ASM 317
+#define ALIGNAS 318
+#define ALIGNOF 319
+#define ATOMIC 320
+#define GENERIC 321
+#define NORETURN 322
+#define STATICASSERT 323
+#define THREADLOCAL 324
+#define IDENTIFIER 325
+#define QUOTED_IDENTIFIER 326
+#define TYPEDEFname 327
+#define TYPEGENname 328
+#define ATTR_IDENTIFIER 329
+#define ATTR_TYPEDEFname 330
+#define ATTR_TYPEGENname 331
+#define INTEGERconstant 332
+#define FLOATINGconstant 333
+#define CHARACTERconstant 334
+#define STRINGliteral 335
+#define ZERO 336
+#define ONE 337
+#define ARROW 338
+#define ICR 339
+#define DECR 340
+#define LS 341
+#define RS 342
+#define LE 343
+#define GE 344
+#define EQ 345
+#define NE 346
+#define ANDAND 347
+#define OROR 348
+#define ELLIPSIS 349
+#define MULTassign 350
+#define DIVassign 351
+#define MODassign 352
+#define PLUSassign 353
+#define MINUSassign 354
+#define LSassign 355
+#define RSassign 356
+#define ANDassign 357
+#define ERassign 358
+#define ORassign 359
+#define ATassign 360
+#define THEN 361
 
 
@@ -246,5 +258,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 108 "parser.yy"
+#line 110 "parser.yy"
 
 	Token tok;
@@ -263,5 +275,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 266 "Parser/parser.h"
+#line 278 "Parser/parser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/Parser/parser.yy	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug 11 16:01:49 2015
-// Update Count     : 1350
+// Last Modified On : Thu Oct  8 17:17:54 2015
+// Update Count     : 1473
 // 
 
@@ -81,5 +81,5 @@
 %token ATTRIBUTE EXTENSION								// GCC
 %token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN
-%token CHOOSE FALLTHRU TRY CATCH FINALLY THROW			// CFA
+%token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT	// CFA
 %token ASM												// C99, extension ISO/IEC 9899:1999 Section J.5.10(1)
 %token ALIGNAS ALIGNOF ATOMIC GENERIC NORETURN STATICASSERT THREADLOCAL // C11
@@ -103,4 +103,6 @@
 %token LSassign		RSassign							// <<=	>>=
 %token ANDassign	ERassign	ORassign				// &=	^=	|=
+
+%token ATassign											// @=
 
 // Types declaration
@@ -120,5 +122,5 @@
 }
 
-%type<tok> zero_one  identifier  no_attr_identifier  no_01_identifier
+%type<tok> identifier  no_01_identifier  no_attr_identifier zero_one
 %type<tok> identifier_or_type_name  no_attr_identifier_or_type_name  no_01_identifier_or_type_name
 %type<constant> string_literal_list
@@ -317,4 +319,5 @@
 	;
 
+// no zero_one because ambiguity with 0.0 : double constant or field selection
 no_attr_identifier:
 	IDENTIFIER
@@ -364,7 +367,11 @@
 	| postfix_expression DECR
 		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), $1 ); }
-		// GCC has priority: cast_expression
 	| '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
 		{ $$ = 0; }
+	| postfix_expression '{' argument_expression_list '}' // CFA
+		{
+			Token fn; fn.str = new std::string( "?{}" ); // location undefined
+			$$ = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( $1 )->set_link( $3 ) );
+		}
 	;
 
@@ -445,7 +452,7 @@
 		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), $2 ); }
 	| ALIGNOF '(' type_name_no_function ')'				// GCC, type alignment
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( $3 )); }
+		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( $3 ) ); }
 	| ANDAND no_attr_identifier							// GCC, address of label
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true )); }
+		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true ) ); }
 	;
 
@@ -627,4 +634,10 @@
 	| exception_statement
 	| asm_statement
+	| '^' postfix_expression '{' argument_expression_list '}' ';' // CFA
+		{
+			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
+			$$ = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),
+				(ExpressionNode *)(new CompositeExprNode( new OperatorNode( OperatorNode::AddressOf ), $2 ))->set_link( $4 ) ), 0 );
+		}
 	;
 
@@ -805,8 +818,14 @@
 	| RETURN comma_expression_opt ';'
 		{ $$ = new StatementNode( StatementNode::Return, $2, 0 ); }
-	| THROW assignment_expression ';'
+	| THROW assignment_expression_opt ';'
 		{ $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
-	| THROW ';'
-		{ $$ = new StatementNode( StatementNode::Throw ); }
+//	| THROW ';'
+//		{ $$ = new StatementNode( StatementNode::Throw ); }
+	| THROWRESUME assignment_expression_opt ';'
+		{ $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
+	| THROWRESUME assignment_expression_opt AT assignment_expression ';'
+		{ $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
+//	| THROWRESUME ';'
+//		{ $$ = new StatementNode( StatementNode::Throw ); }
 	;
 
@@ -831,4 +850,8 @@
 	| handler_clause CATCH '(' ELLIPSIS ')' compound_statement
 		{ $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); }
+	| CATCHRESUME '(' ELLIPSIS ')' compound_statement
+		{ $$ = StatementNode::newCatchStmt( 0, $5, true ); }
+	| handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement
+		{ $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); }
 	;
 
@@ -837,4 +860,8 @@
 		{ $$ = StatementNode::newCatchStmt( $5, $8 ); }
 	| handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop
+		{ $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); }
+	| CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
+		{ $$ = StatementNode::newCatchStmt( $5, $8 ); }
+	| handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
 		{ $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); }
 	;
@@ -1654,4 +1681,6 @@
 	| '=' initializer
 		{ $$ = $2; }
+	| ATassign initializer
+		{ $$ = $2; }
 	;
 
@@ -1662,5 +1691,7 @@
 
 initializer_list:
-	initializer
+	// empty
+		{ $$ = 0; }
+	| initializer
 	| designation initializer					{ $$ = $2->set_designators( $1 ); }
 	| initializer_list ',' initializer			{ $$ = (InitializerNode *)( $1->set_link( $3 ) ); }
@@ -1693,4 +1724,5 @@
 
 designator:
+	// lexer ambiguity: designator ".0" is floating-point constant or designator for name 0
 	// only ".0" and ".1" allowed => semantic check
 	FLOATINGconstant
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/SymTab/Indexer.h	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 21:38:55 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Wed Aug 05 13:51:39 2015
-// Update Count     : 4
+// Last Modified On : Thu Sep 17 16:05:38 2015
+// Update Count     : 5
 //
 
@@ -19,5 +19,4 @@
 #include <list>
 #include <string>
-#include <map>
 
 #include "SynTree/Visitor.h"
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/SymTab/Validate.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 21:50:04 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Aug 05 14:00:24 2015
-// Update Count     : 195
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Aug 11 16:59:35 2015
+// Update Count     : 196
 //
 
@@ -894,5 +894,7 @@
 		DeclarationWithType *ret = Mutator::mutate( objDecl );
 		typedefNames = oldNames;
+		// is the type a function?
 		if ( FunctionType *funtype = dynamic_cast<FunctionType *>( ret->get_type() ) ) {
+			// replace the current object declaration with a function declaration
 			return new FunctionDecl( ret->get_name(), ret->get_storageClass(), ret->get_linkage(), funtype, 0, ret->get_isInline(), ret->get_isNoreturn() );
 		} else if ( objDecl->get_isInline() || objDecl->get_isNoreturn() ) {
Index: src/SynTree/ArrayType.cc
===================================================================
--- src/SynTree/ArrayType.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/SynTree/ArrayType.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun  6 14:11:48 2015
-// Update Count     : 9
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 14:19:07 2015
+// Update Count     : 11
 //
 
@@ -50,6 +50,6 @@
 	} // if
 	if ( dimension ) {
-		os << "with dimension of ";
-		dimension->print( os, indent );
+		os << " with dimension of ";
+		dimension->print( os, 0 );
 	} // if
 }
Index: src/SynTree/BasicType.cc
===================================================================
--- src/SynTree/BasicType.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/SynTree/BasicType.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jun  7 08:44:36 2015
-// Update Count     : 5
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 14:15:45 2015
+// Update Count     : 6
 //
 
@@ -28,5 +28,5 @@
 
 	Type::print( os, indent );
-	os << kindNames[ kind ] << ' ';
+	os << kindNames[ kind ];
 }
 
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/SynTree/Expression.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 28 16:27:17 2015
-// Update Count     : 22
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Sep 02 12:07:10 2015
+// Update Count     : 33
 //
 
@@ -31,7 +31,6 @@
 Expression::Expression( Expression *_aname ) : env( 0 ), argName( _aname ) {}
 
-Expression::Expression( const Expression &other ) : env( maybeClone( other.env ) ) {
+Expression::Expression( const Expression &other ) : env( maybeClone( other.env ) ), argName( maybeClone( other.get_argName() ) ) {
 	cloneAll( other.results, results );
-	argName = other.get_argName();
 }
 
@@ -72,7 +71,8 @@
 
 void ConstantExpr::print( std::ostream &os, int indent ) const {
-	os << "constant expression " ;
+	os << std::string( indent, ' ' ) << "constant expression " ;
 	constant.print( os );
 	Expression::print( os, indent );
+	os << std::endl;
 }
 
Index: src/SynTree/Initializer.cc
===================================================================
--- src/SynTree/Initializer.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/SynTree/Initializer.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 18 09:02:45 2015
-// Update Count     : 2
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 14:05:25 2015
+// Update Count     : 14
 //
 
@@ -43,11 +43,12 @@
 
 void SingleInit::print( std::ostream &os, int indent ) {
-	os << std::endl << std::string(indent, ' ' ) << "Simple Initializer: ";
-	value->print( os, indent+2 );
+	os << std::endl << std::string(indent, ' ' ) << "Simple Initializer: " << std::endl;
+	value->print( os, indent+4 );
 
 	if ( ! designators.empty() ) {
-		os << std::endl << std::string(indent + 2, ' ' ) << "designated by: "  ;
-		for ( std::list < Expression * >::iterator i = designators.begin(); i != designators.end(); i++ )
+		os << std::endl << std::string(indent + 2, ' ' ) << "designated by: "   << std::endl;
+		for ( std::list < Expression * >::iterator i = designators.begin(); i != designators.end(); i++ ) {
 			( *i )->print(os, indent + 4 );
+		}
 	} // if
 }
Index: src/driver/cfa.cc
===================================================================
--- src/driver/cfa.cc	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/driver/cfa.cc	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -10,6 +10,6 @@
 // Created On       : Tue Aug 20 13:44:49 2002
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 16 17:09:23 2015
-// Update Count     : 124
+// Last Modified On : Mon Aug 17 15:24:30 2015
+// Update Count     : 126
 //
 
@@ -263,4 +263,6 @@
 	args[nargs] = ( *new string( string("-D__CFA_PATCHLEVEL__=") + Patch ) ).c_str();
 	nargs += 1;
+	args[nargs] = "-D__CFORALL__=1";
+	nargs += 1;
 
 	if ( cpp_flag ) {
Index: src/examples/alloc.c
===================================================================
--- src/examples/alloc.c	(revision d2ded3e7b80d4d46102610712560152e44975503)
+++ src/examples/alloc.c	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -0,0 +1,72 @@
+extern "C" {
+    typedef long unsigned int size_t;
+    void *malloc( size_t size );
+    void *calloc( size_t nmemb, size_t size );
+    void *realloc( void *ptr, size_t size );
+    void *memset( void *s, int c, size_t n );
+    void free( void * ptr );
+    int printf( const char *, ... );
+}
+
+forall( type T ) T * malloc( void ) {
+    return (T *)malloc( sizeof(T) );
+}
+forall( type T ) T * calloc( size_t size ) {
+    return (T *)calloc( size, sizeof(T) );
+}
+forall( type T ) T * realloc( T *ptr, size_t n ) {
+    return (T *)(void *)realloc( ptr, sizeof(T) );
+}
+forall( type T ) T * realloc( T *ptr, size_t n, T c ) {
+    return (T *)realloc( ptr, n );
+}
+
+int *foo( int *p, int c );
+int *bar( int *p, int c );
+int *baz( int *p, int c );
+
+int main() {
+    size_t size = 10;
+    int * x = malloc();
+    x = malloc();
+    x = calloc( 10 );					// calloc: array set to 0
+    x = realloc( x, 10 );
+    x = realloc( x, 10, '\0' );
+    x = malloc( 5 );
+    float *fp = malloc() + 1;
+
+    struct St1 { int x; double y; };
+    struct St1 * st1;
+    double *y;
+    x = realloc( st1, 10 );				// SHOULD FAIL!!
+#if 0
+    int *p;
+    p = foo( bar( baz( malloc(), 0 ), 0 ), 0 );
+    free( p );
+
+    struct St2 { int x; double y; };
+    struct St2 * st2;
+
+    y = malloc();
+    st1 = malloc();
+//    st1 = realloc( st2, 10, st1 );
+  
+    *y = 1.0;
+    printf("%f\n", *y);
+
+    st1->x = *x + 1;
+    st1->y = *y *1.5;
+    printf("{ %d, %f }\n", st1->x, st1->y);
+
+    free( y );
+  
+    x = malloc( 10 );
+    for ( int i = 0; i < 10; i += 1 ) {
+	x[i] = i * 10;
+    }
+    for ( int j = 0; j < 10; j += 1 ) {
+	printf( "x[%d] = %d\n", j, x[j] );
+    }
+    free( x );
+#endif
+}
Index: src/examples/asm.c
===================================================================
--- src/examples/asm.c	(revision d2ded3e7b80d4d46102610712560152e44975503)
+++ src/examples/asm.c	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -0,0 +1,29 @@
+int fred() {
+    int src;
+    int dst;
+
+    asm volatile ( "mov %1, %0\n\t"
+		   "add $1, %0" : : : );
+
+    asm volatile ( "mov %1, %0\n\t"
+		   "add $1, %0"
+		   : "=" "r" (dst));
+
+    asm volatile ( "mov %1, %0\n\t"
+		   "add $1, %0"
+		   : "=r" (dst)
+		   : "r" (src));
+
+    asm ( "mov %1, %0\n\t"
+	  "add $1, %0"
+	  : "=r" (dst), "=r" (src)
+	  : [src] "r" (dst)
+	  : "r0");
+
+  L1: L2:
+    asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5"
+	       : /* No outputs. */
+	       : "r"(src), "r"(&dst)
+	       : "r5", "memory"
+	       : L1, L2 );
+}
Index: src/examples/constructors.c
===================================================================
--- src/examples/constructors.c	(revision d2ded3e7b80d4d46102610712560152e44975503)
+++ src/examples/constructors.c	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -0,0 +1,61 @@
+int fred() {
+    // initialize basic structure
+    struct S {
+	int i, j, k;
+    };
+    void ?{}( S *s ) { s->i = 1, s->k = 2; }		// default constructor
+    void ?{}( S *s, int i, int k ) { s->i = i, s->k = k; } // 2 parameter constructor
+    void ?{}( S *s, S c ) { *s = c; }			// copy constructor
+    void ^?{}( S *s ) { s->i = 0, s->k = 0; }		// default destructor
+    void ^?{}( S *s, int i ) { s->i = i, s->k = i; }	// 1 parameter destructor
+    {
+	S s1;			// default constructor
+	S s2 = { 3, 7 };	// 2 parameter constructor
+	S s3 @= { .k:3, .i:7 };	// 2 parameter C initialization
+	?{}( &s3, 2, 5 );	// explicit 2 parameter constructor
+	^?{}( &s1 );		// explicit call to default destructor
+    } // implicit call to default destructor for s2, explicit call s1, no call for s3
+    S s4 @= {};			// no default construction
+    (&s4){ 2, 5 };		// explicit 2 parameter constructor
+    ^s4{ 3 };			// explicit call to 1 parameter destructor
+
+    // initialize pointer to a basic structure
+
+    void ?{}( S **s ) { *s = malloc(); (*s)->i = 1, (*s)->k = 2; } // default constructor
+    void ?{}( S **s, int i, int k ) { *s = malloc(); (*s)->i = i, (*s)->k = k; } // 2 parameter constructor
+    void ^?{}( S **s ) { (*s)->i = 0, (*s)->k = 0; free( *s ); *s = 0; } // default destructor
+    {
+	S *ps1;			// default constructor
+	S *ps2 = { 3, 7 };	// 2 parameter constructor
+	S *ps3 @= 0;		// C initialization
+	S *ps4 @= {};		// no default construction
+    } // implicit call to default destructor for ps2 and ps1, checks ordering of explicit destructor calls
+
+    ?{}( &ps3, 2, 5 );		// explicit 2 parameter constructor
+    (&ps4){ 2, 5 };		// explicit 2 parameter constructor
+    
+    ^?{}( &ps3 );		// explicit call to default destructor
+    ^ps4{};			// explicit call to default destructor
+
+    // initialize complex structure
+
+    struct T {
+	struct S s;
+    };
+
+    void ?{}( T *t ) {}					// default constructor => implicitly call constructor for field s
+    void ?{}( T *t, int i, int k ) { (&t->s){ i, k }; }	// 2 parameter constructor => explicitly call constructor for field s
+    void ?{}( T *t, S c ) { (&t->s){ c }; }		// 1 parameter constructor => explicitly call copy constructor for field s
+    void ^?{}( T *s, int i ) {}				// destructor => implicitly call destructor for field s
+    {
+	S s;			// default constructor
+	T t1;			// default constructor
+	T t2 = { s };		// 1 parameter constructor
+	^?{}( &t1 );		// explicit call to default destructor => implicit call to t1.s's destructor
+    } // implicit call to default destructor for t2 and implicit call for s;
+    T t3;			// default constructor
+    T t4 @= { { 1, 3 } };	// C initialization
+    (&t4){ 2, 5 };		// explicit 2 parameter constructor
+
+    T *pt = malloc(){ 3, 4 };	// common usage
+} // implicit call to default destructor for t3
Index: src/examples/control_structures.c
===================================================================
--- src/examples/control_structures.c	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/examples/control_structures.c	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun  4 14:02:50 2015
-// Update Count     : 24
+// Last Modified On : Fri Sep 18 08:12:17 2015
+// Update Count     : 28
 //
 
@@ -26,6 +26,6 @@
 						break L3;
 						break L4;
-						//continue L1;					// labelled continue - should be an error 
-						//continue L2;					// should be an error
+						//continue L1;					// error: not enclosing loop
+						//continue L2;					// error: not enclosing loop
 						continue L3;
 						continue L4;
Index: src/examples/nestedfunc.c
===================================================================
--- src/examples/nestedfunc.c	(revision d2ded3e7b80d4d46102610712560152e44975503)
+++ src/examples/nestedfunc.c	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -0,0 +1,34 @@
+extern "C" {
+    int printf( const char *, ... );
+}
+
+// Insertion sort on a, of length n
+forall( type T | { int ?<?(T, T); } )
+void sort( T *a, unsigned long n ) {
+    if ( n <= 1 ) return;
+	
+    for ( unsigned long i = 1; i < n; i += 1 ) {
+	T x; x = a[i];
+	unsigned long j = i;
+	for ( j; j > 0 && x < a[j-1]; j -= 1 ) {
+	    a[j] = a[j - 1];
+	} // for
+	a[j] = x;
+    } // for
+}
+
+int main(void) {
+    const int size = 4;
+    int a[4] = { 0, 3, -2, 100 };
+    printf( "a:[%d %d %d %d]\n", a[0], a[1], a[2], a[3] );
+	
+    sort( a, size );
+    printf( "a:[%d %d %d %d]\n", a[0], a[1], a[2], a[3] );
+    {
+	// int ?<?(int, int) = ?>?;
+	int ?<?( int a, int b ) { return a > b; }
+	sort( a, size );
+    }
+    printf( "a:[%d %d %d %d]\n", a[0], a[1], a[2], a[3] );
+}
+
Index: src/examples/poly-bench.c
===================================================================
--- src/examples/poly-bench.c	(revision d2ded3e7b80d4d46102610712560152e44975503)
+++ src/examples/poly-bench.c	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -0,0 +1,207 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// poly-bench.cc -- 
+//
+// Author           : Aaron Moss
+// Created On       : Sat May 16 07:26:30 2015
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed May 27 18:25:19 2015
+// Update Count     : 5
+//
+
+extern "C" {
+#include <stdio.h>
+//#include "my_time.h"
+}
+
+#define N 200000000
+
+struct ipoint {
+	int x;
+	int y;
+};
+
+struct ipoint ?+?(struct ipoint a, struct ipoint b) {
+	struct ipoint r;
+	r.x = a.x + b.x;
+	r.y = a.y + b.y;
+	return r;
+}
+
+struct ipoint ?-?(struct ipoint a, struct ipoint b) {
+	struct ipoint r;
+	r.x = a.x - b.x;
+	r.y = a.y - b.y;
+	return r;
+}
+
+struct ipoint ?*?(struct ipoint a, struct ipoint b) {
+	struct ipoint r;
+	r.x = a.x * b.x;
+	r.y = a.y * b.y;
+	return r;
+}
+
+struct dpoint {
+	double x;
+	double y;
+};
+
+struct dpoint ?+?(struct dpoint a, struct dpoint b) {
+	struct dpoint r;
+	r.x = a.x + b.x;
+	r.y = a.y + b.y;
+	return r;
+}
+
+struct dpoint ?-?(struct dpoint a, struct dpoint b) {
+	struct dpoint r;
+	r.x = a.x - b.x;
+	r.y = a.y - b.y;
+	return r;
+}
+
+struct dpoint ?*?(struct dpoint a, struct dpoint b) {
+	struct dpoint r;
+	r.x = a.x * b.x;
+	r.y = a.y * b.y;
+	return r;
+}
+
+int a2b2_mono_int(int a, int b) {
+	return (a - b)*(a + b);
+}
+
+double a2b2_mono_double(double a, double b) {
+	return (a - b)*(a + b);
+}
+
+struct ipoint a2b2_mono_ipoint(struct ipoint a, struct ipoint b) {
+	return (a - b)*(a + b);
+}
+
+struct dpoint a2b2_mono_dpoint(struct dpoint a, struct dpoint b) {
+	return (a - b)*(a + b);
+}
+
+forall(type T | { T ?+?(T,T); T ?-?(T,T); T ?*?(T,T); })
+T a2b2_poly(T a, T b) {
+	return (a - b)*(a + b);
+}
+
+typedef int clock_t;
+long ms_between(clock_t start, clock_t end) {
+//	return (end - start) / (CLOCKS_PER_SEC / 1000);
+	return 0;
+}
+int clock() { return 3; }
+
+int main(int argc, char** argv) {
+	clock_t start, end;
+	int i;
+	
+	int a, b;
+	double c, d;
+	struct ipoint p, q;
+	struct dpoint r, s;
+	
+	printf("\n## a^2-b^2 ##\n");
+	
+	a = 5, b = 3;
+	start = clock();
+	for (i = 0; i < N/2; ++i) {
+		a = a2b2_mono_int(a, b);
+		b = a2b2_mono_int(b, a);
+	}
+	end = clock();
+	printf("mono_int:   %7ld  [%d,%d]\n", ms_between(start, end), a, b);
+	
+	a = 5, b = 3;
+	start = clock();
+	for (i = 0; i < N/2; ++i) {
+		a = a2b2_poly(a, b);
+		b = a2b2_poly(b, a);
+	}
+	end = clock();
+	printf("poly_int:   %7ld  [%d,%d]\n", ms_between(start, end), a, b);
+	
+/*	{
+	a = 5, b = 3;
+	// below doesn't actually work; a2b2_poly isn't actually assigned, just declared
+	* [int] (int, int) a2b2_poly = a2b2_mono_int;
+	start = clock();
+	for (i = 0; i < N/2; ++i) {
+//			printf("\t[%d,%d]\n", a, b);
+a = a2b2_poly(a, b);
+//			printf("\t[%d,%d]\n", a, b);
+b = a2b2_poly(b, a);
+}
+end = clock();
+printf("spec_int:   %7ld  [%d,%d]\n", ms_between(start, end), a, b);
+}
+*/	
+	c = 5.0, d = 3.0;
+	start = clock();
+	for (i = 0; i < N/2; ++i) {
+		c = a2b2_mono_double(c, d);
+		d = a2b2_mono_double(d, c);
+	}
+	end = clock();
+	printf("mono_double:%7ld  [%f,%f]\n", ms_between(start, end), c, d);
+		
+	c = 5.0, d = 3.0;
+	start = clock();
+	for (i = 0; i < N/2; ++i) {
+		c = a2b2_poly(c, d);
+		d = a2b2_poly(d, c);
+	}
+	end = clock();
+	printf("poly_double:%7ld  [%f,%f]\n", ms_between(start, end), c, d);
+	
+	p.x = 5, p.y = 5, q.x = 3, q.y = 3;
+	start = clock();
+	for (i = 0; i < N/2; ++i) {
+		p = a2b2_mono_ipoint(p, q);
+		q = a2b2_mono_ipoint(q, p);
+	}
+	end = clock();
+	printf("mono_ipoint:%7ld  [(%d,%d),(%d,%d)]\n", ms_between(start, end), p.x, p.y, q.x, q.y);
+		
+	p.x = 5, p.y = 5, q.x = 3, q.y = 3;
+	start = clock();
+	for (i = 0; i < N/2; ++i) {
+		p = a2b2_poly(p, q);
+		q = a2b2_poly(q, p);
+	}
+	end = clock();
+	printf("poly_ipoint:%7ld  [(%d,%d),(%d,%d)]\n", ms_between(start, end), p.x, p.y, q.x, q.y);
+	
+	r.x = 5.0, r.y = 5.0, s.x = 3.0, s.y = 3.0;
+	start = clock();
+	for (i = 0; i < N/2; ++i) {
+		r = a2b2_mono_dpoint(r, s);
+		s = a2b2_mono_dpoint(s, r);
+	}
+	end = clock();
+	printf("mono_dpoint:%7ld  [(%f,%f),(%f,%f)]\n", ms_between(start, end), r.x, r.y, s.x, s.y);
+		
+	r.x = 5.0, r.y = 5.0, s.x = 3.0, s.y = 3.0;
+	start = clock();
+	for (i = 0; i < N/2; ++i) {
+		r = a2b2_poly(r, s);
+		s = a2b2_poly(s, r);
+	}
+	end = clock();
+	printf("poly_dpoint:%7ld  [(%f,%f),(%f,%f)]\n", ms_between(start, end), r.x, r.y, s.x, s.y);
+
+	return 0;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa poly-bench.c" //
+// End: //
Index: src/examples/sum.c
===================================================================
--- src/examples/sum.c	(revision 698664b31ec11656e60452a119fd6318d3f6b810)
+++ src/examples/sum.c	(revision d2ded3e7b80d4d46102610712560152e44975503)
@@ -7,28 +7,29 @@
 // sum.c -- 
 //
-// Author           : Richard C. Bilson
+// Author           : Peter A. Buhr
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun  1 20:46:35 2015
-// Update Count     : 18
+// Last Modified On : Mon Sep 28 15:09:55 2015
+// Update Count     : 118
 //
 
 extern "C" {
-	int printf( const char *, ... );
+	int printf( char *, ... );
 }
+#include "fstream.h"
 
 context sumable( type T ) {
 	const T 0;
 	T ?+?( T, T );
+	T ?+=?( T *, T );
+	T ++?( T * );
 	T ?++( T * );
-	T ?+=?( T *, T );
 };
 
 forall( type T | sumable( T ) )
-T sum( int n, T a[] ) {
-	T total;											// instantiate T, select 0
-	total = 0;
-	for ( int i = 0; i < n; i += 1 )
-		total = total + a[i];							// select +
+T sum( unsigned int n, T a[] ) {
+	T total = 0;										// instantiate T, select 0
+	for ( unsigned int i = 0; i < n; i += 1 )
+		total += a[i];									// select +
 	return total;
 }
@@ -36,37 +37,54 @@
 // Required to satisfy sumable as char does not have addition.
 const char 0;
-char ?+?( char op1, char op2 ) { return op1 + op2; }
-char ?++( char *op ) { return *op + 1; }
-
-const double 0; // TEMPORARY, incorrect use of int 0
+char ?+?( char op1, char op2 ) { return (int)op1 + op2; } // cast forces integer addition or recursion
+char ++?( char *op ) { *op += 1; return *op; }
+char ?++( char *op ) { char temp = *op; *op += 1; return temp; }
 
 int main() {
 	const int low = 5, High = 15, size = High - low;
-	int si = 0, ai[size];
+
+	ofstream *sout = ofstream_stdout();
+
+	char s = 0, a[size];
+	char v = low;
+	for ( int i = 0; i < size; i += 1, v += 1 ) {
+		s += v;
+		a[i] = v;
+	}
+	sout << "sum from " << low << " to " << High << " is "
+		 << (int)sum( size, a ) << ", check " << (int)s << "\n";
+
+	int s = 0, a[size];
 	int v = low;
 	for ( int i = 0; i < size; i += 1, v += 1 ) {
-		si += v;
-		ai[i] = v;
+		s += (int)v;
+		a[i] = (int)v;
 	}
-	printf( "sum from %d to %d is %d, check %d\n",
-			low, High, sum( size, ai ), si );
+	sout << "sum from " << low << " to " << High << " is "
+		 << sum( size, (int *)a ) << ", check " << (int)s << "\n";
 
-//	char ci[size];
-//	char c = sum( size, ci );
-//	float fi[size];
-//	float f = sum( size, fi );
-
-	double sd = 0.0, ad[size];
+	double s = 0.0, a[size];
 	double v = low / 10.0;
 	for ( int i = 0; i < size; i += 1, v += 0.1 ) {
-		sd += v;
-		ad[i] = v;
+		s += (double)v;
+		a[i] = (double)v;
 	}
-	printf( "sum from %g to %g is %g, check %g\n",
-			low / 10.0, High / 10.0, sum( size, ad ), sd );
+	printf( "%g\n", sum( size, (double *)a ) );
+//	sout << "sum from " << low / 10.0 << " to " << High / 10.0 << " is "
+//		 << sum( size, (double *)a ) << ", check " << (double)s << "\n";
+
+	float s = 0.0, a[size];
+	float v = low / 10.0;
+	for ( int i = 0; i < size; i += 1, v += 0.1f ) {
+		s += (float)v;
+		a[i] = (float)v;
+	}
+	printf( "%g\n", sum( size, (float *)a ) );
+//	sout << "sum from " << low / 10.0 << " to " << High / 10.0 << " is "
+//		 << sum( size, (float *)a ) << ", check " << (float)s << "\n";
 }
 
 // Local Variables: //
 // tab-width: 4 //
-// compile-command: "cfa sum.c" //
+// compile-command: "cfa sum.c fstream.o iostream.o" //
 // End: //
