Changeset 32a2a99


Ignore:
Timestamp:
Aug 30, 2016, 4:25:55 PM (6 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
90e2334, fa463f1
Parents:
a2a8d2a6 (diff), ced2e989 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

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

Files:
35 deleted
36 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/ScopedMap.h

    ra2a8d2a6 r32a2a99  
    4242                typedef typename Scope::pointer pointer;
    4343                typedef typename Scope::const_pointer const_pointer;
    44                
     44
    4545                class iterator : public std::iterator< std::bidirectional_iterator_tag,
    4646                                                       value_type > {
     
    6868                        }
    6969
    70                         iterator(scope_list const &_scopes, const wrapped_iterator &_it, size_type _i)
     70                        iterator(scope_list &_scopes, const wrapped_iterator &_it, size_type _i)
    7171                                : scopes(&_scopes), it(_it), i(_i) {}
    7272                public:
     
    7676                                return *this;
    7777                        }
    78                        
     78
    7979                        reference operator* () { return *it; }
    8080                        pointer operator-> () { return it.operator->(); }
     
    109109
    110110                private:
    111                         scope_list const *scopes;
     111                        scope_list *scopes;
    112112                        wrapped_iterator it;
    113113                        size_type i;
     
    189189                        size_type i;
    190190                };
    191                
     191
    192192                /// Starts a new scope
    193193                void beginScope() {
    194                         Scope scope;
    195                         scopes.push_back(scope);
     194                        scopes.emplace_back();
    196195                }
    197196
     
    227226                                return const_iterator( const_cast< ScopedMap< Key, Value >* >(this)->find( key ) );
    228227                }
    229                
     228
    230229                /// Finds the given key in the outermost scope inside the given scope where it occurs
    231230                iterator findNext( const_iterator &it, const Key &key ) {
     
    247246                        return std::make_pair( iterator(scopes, res.first, scopes.size()-1), res.second );
    248247                }
     248
     249                std::pair< iterator, bool > insert( value_type &&value ) {
     250                        std::pair< typename Scope::iterator, bool > res = scopes.back().insert( std::move( value ) );
     251                        return std::make_pair( iterator(scopes, std::move( res.first ), scopes.size()-1), std::move( res.second ) );
     252                }
     253
    249254                std::pair< iterator, bool > insert( const Key &key, const Value &value ) { return insert( std::make_pair( key, value ) ); }
     255                std::pair< iterator, bool > insert( const Key &key, Value &&value ) { return insert( std::make_pair( key, std::move( value ) ) ); }
    250256
    251257                Value& operator[] ( const Key &key ) {
     
    254260                        return insert( key, Value() ).first->second;
    255261                }
     262
     263                iterator erase( iterator pos ) {
     264                        Scope& scope = (*pos.scopes) [ pos.i ];
     265                        const typename iterator::wrapped_iterator& new_it = scope.erase( pos.it );
     266                        iterator it( *pos.scopes, new_it, pos.i );
     267                        return it.next_valid();
     268                }
     269
     270                size_type count( const Key &key ) const {
     271                        size_type c = 0;
     272                        auto it = find( key );
     273                        auto end = cend();
     274
     275                        while(it != end) {
     276                                c++;
     277                                it = findNext(it, key);
     278                        }
     279
     280                        return c;
     281                }
     282
    256283        };
    257284} // namespace GenPoly
  • src/InitTweak/InitTweak.cc

    ra2a8d2a6 r32a2a99  
    7979        public:
    8080                ExprImpl( Expression * expr ) : arg( expr ) {}
     81
     82                ~ExprImpl() { delete arg; }
    8183
    8284                virtual std::list< Expression * > next( std::list< Expression * > & indices ) {
     
    122124
    123125        void InitExpander::clearArrayIndices() {
     126                deleteAll( indices );
    124127                indices.clear();
    125128        }
  • src/Makefile.am

    ra2a8d2a6 r32a2a99  
    2525# Is there a way to use a variable for the directory names?
    2626
    27 include ArgTweak/module.mk
    2827include CodeGen/module.mk
    2928include Common/module.mk
    3029include ControlStruct/module.mk
    31 include Designators/module.mk
    3230include GenPoly/module.mk
    3331include InitTweak/module.mk
  • src/Makefile.in

    ra2a8d2a6 r32a2a99  
    2222###############################################################################
    2323
    24 ######################### -*- Mode: Makefile-Gmake -*- ########################
    25 ###############################################################################
    26 
    2724#SRC +=  ArgTweak/Rewriter.cc \
    2825#       ArgTweak/Mutate.cc
    29 
    30 ######################### -*- Mode: Makefile-Gmake -*- ########################
    31 ###############################################################################
    3226
    3327######################### -*- Mode: Makefile-Gmake -*- ########################
     
    7569PRE_UNINSTALL = :
    7670POST_UNINSTALL = :
    77 DIST_COMMON = $(srcdir)/ArgTweak/module.mk $(srcdir)/CodeGen/module.mk \
    78         $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk \
    79         $(srcdir)/Designators/module.mk $(srcdir)/GenPoly/module.mk \
     71DIST_COMMON = $(srcdir)/CodeGen/module.mk $(srcdir)/Common/module.mk \
     72        $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk \
    8073        $(srcdir)/InitTweak/module.mk $(srcdir)/Makefile.am \
    8174        $(srcdir)/Makefile.in $(srcdir)/Parser/module.mk \
     
    112105        ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT) \
    113106        ControlStruct/driver_cfa_cpp-LabelTypeChecker.$(OBJEXT) \
    114         Designators/driver_cfa_cpp-Processor.$(OBJEXT) \
    115107        GenPoly/driver_cfa_cpp-Box.$(OBJEXT) \
    116108        GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT) \
     
    196188        SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT) \
    197189        SynTree/driver_cfa_cpp-Attribute.$(OBJEXT) \
    198         Tuples/driver_cfa_cpp-Mutate.$(OBJEXT) \
    199         Tuples/driver_cfa_cpp-AssignExpand.$(OBJEXT) \
    200         Tuples/driver_cfa_cpp-FunctionFixer.$(OBJEXT) \
    201190        Tuples/driver_cfa_cpp-TupleAssignment.$(OBJEXT) \
    202         Tuples/driver_cfa_cpp-FunctionChecker.$(OBJEXT) \
    203191        Tuples/driver_cfa_cpp-NameMatcher.$(OBJEXT)
    204192am_driver_cfa_cpp_OBJECTS = $(am__objects_1)
     
    374362        ControlStruct/MLEMutator.cc ControlStruct/Mutate.cc \
    375363        ControlStruct/ForExprMutator.cc \
    376         ControlStruct/LabelTypeChecker.cc Designators/Processor.cc \
    377         GenPoly/Box.cc GenPoly/GenPoly.cc GenPoly/PolyMutator.cc \
     364        ControlStruct/LabelTypeChecker.cc GenPoly/Box.cc \
     365        GenPoly/GenPoly.cc GenPoly/PolyMutator.cc \
    378366        GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \
    379367        GenPoly/CopyParams.cc GenPoly/FindFunction.cc \
     
    413401        SynTree/Initializer.cc SynTree/Visitor.cc SynTree/Mutator.cc \
    414402        SynTree/AddStmtVisitor.cc SynTree/TypeSubstitution.cc \
    415         SynTree/Attribute.cc Tuples/Mutate.cc Tuples/AssignExpand.cc \
    416         Tuples/FunctionFixer.cc Tuples/TupleAssignment.cc \
    417         Tuples/FunctionChecker.cc Tuples/NameMatcher.cc
     403        SynTree/Attribute.cc Tuples/TupleAssignment.cc \
     404        Tuples/NameMatcher.cc
    418405MAINTAINERCLEANFILES = Parser/parser.output ${libdir}/${notdir \
    419406        ${cfa_cpplib_PROGRAMS}}
     
    433420.SUFFIXES:
    434421.SUFFIXES: .cc .ll .o .obj .yy
    435 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/ArgTweak/module.mk $(srcdir)/CodeGen/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/Designators/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk $(am__configure_deps)
     422$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/CodeGen/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk $(am__configure_deps)
    436423        @for dep in $?; do \
    437424          case '$(am__configure_deps)' in \
     
    454441            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
    455442        esac;
    456 $(srcdir)/ArgTweak/module.mk $(srcdir)/CodeGen/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/Designators/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk:
     443$(srcdir)/CodeGen/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk:
    457444
    458445$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
     
    553540        ControlStruct/$(am__dirstamp) \
    554541        ControlStruct/$(DEPDIR)/$(am__dirstamp)
    555 Designators/$(am__dirstamp):
    556         @$(MKDIR_P) Designators
    557         @: > Designators/$(am__dirstamp)
    558 Designators/$(DEPDIR)/$(am__dirstamp):
    559         @$(MKDIR_P) Designators/$(DEPDIR)
    560         @: > Designators/$(DEPDIR)/$(am__dirstamp)
    561 Designators/driver_cfa_cpp-Processor.$(OBJEXT):  \
    562         Designators/$(am__dirstamp) \
    563         Designators/$(DEPDIR)/$(am__dirstamp)
    564542GenPoly/$(am__dirstamp):
    565543        @$(MKDIR_P) GenPoly
     
    789767        @$(MKDIR_P) Tuples/$(DEPDIR)
    790768        @: > Tuples/$(DEPDIR)/$(am__dirstamp)
    791 Tuples/driver_cfa_cpp-Mutate.$(OBJEXT): Tuples/$(am__dirstamp) \
    792         Tuples/$(DEPDIR)/$(am__dirstamp)
    793 Tuples/driver_cfa_cpp-AssignExpand.$(OBJEXT): Tuples/$(am__dirstamp) \
    794         Tuples/$(DEPDIR)/$(am__dirstamp)
    795 Tuples/driver_cfa_cpp-FunctionFixer.$(OBJEXT): Tuples/$(am__dirstamp) \
    796         Tuples/$(DEPDIR)/$(am__dirstamp)
    797769Tuples/driver_cfa_cpp-TupleAssignment.$(OBJEXT):  \
    798         Tuples/$(am__dirstamp) Tuples/$(DEPDIR)/$(am__dirstamp)
    799 Tuples/driver_cfa_cpp-FunctionChecker.$(OBJEXT):  \
    800770        Tuples/$(am__dirstamp) Tuples/$(DEPDIR)/$(am__dirstamp)
    801771Tuples/driver_cfa_cpp-NameMatcher.$(OBJEXT): Tuples/$(am__dirstamp) \
     
    824794        -rm -f ControlStruct/driver_cfa_cpp-MLEMutator.$(OBJEXT)
    825795        -rm -f ControlStruct/driver_cfa_cpp-Mutate.$(OBJEXT)
    826         -rm -f Designators/driver_cfa_cpp-Processor.$(OBJEXT)
    827796        -rm -f GenPoly/driver_cfa_cpp-Box.$(OBJEXT)
    828797        -rm -f GenPoly/driver_cfa_cpp-CopyParams.$(OBJEXT)
     
    908877        -rm -f SynTree/driver_cfa_cpp-Visitor.$(OBJEXT)
    909878        -rm -f SynTree/driver_cfa_cpp-VoidType.$(OBJEXT)
    910         -rm -f Tuples/driver_cfa_cpp-AssignExpand.$(OBJEXT)
    911         -rm -f Tuples/driver_cfa_cpp-FunctionChecker.$(OBJEXT)
    912         -rm -f Tuples/driver_cfa_cpp-FunctionFixer.$(OBJEXT)
    913         -rm -f Tuples/driver_cfa_cpp-Mutate.$(OBJEXT)
    914879        -rm -f Tuples/driver_cfa_cpp-NameMatcher.$(OBJEXT)
    915880        -rm -f Tuples/driver_cfa_cpp-TupleAssignment.$(OBJEXT)
     
    934899@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-MLEMutator.Po@am__quote@
    935900@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-Mutate.Po@am__quote@
    936 @AMDEP_TRUE@@am__include@ @am__quote@Designators/$(DEPDIR)/driver_cfa_cpp-Processor.Po@am__quote@
    937901@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Box.Po@am__quote@
    938902@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-CopyParams.Po@am__quote@
     
    1018982@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Po@am__quote@
    1019983@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VoidType.Po@am__quote@
    1020 @AMDEP_TRUE@@am__include@ @am__quote@Tuples/$(DEPDIR)/driver_cfa_cpp-AssignExpand.Po@am__quote@
    1021 @AMDEP_TRUE@@am__include@ @am__quote@Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionChecker.Po@am__quote@
    1022 @AMDEP_TRUE@@am__include@ @am__quote@Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionFixer.Po@am__quote@
    1023 @AMDEP_TRUE@@am__include@ @am__quote@Tuples/$(DEPDIR)/driver_cfa_cpp-Mutate.Po@am__quote@
    1024984@AMDEP_TRUE@@am__include@ @am__quote@Tuples/$(DEPDIR)/driver_cfa_cpp-NameMatcher.Po@am__quote@
    1025985@AMDEP_TRUE@@am__include@ @am__quote@Tuples/$(DEPDIR)/driver_cfa_cpp-TupleAssignment.Po@am__quote@
     
    12651225@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-LabelTypeChecker.obj `if test -f 'ControlStruct/LabelTypeChecker.cc'; then $(CYGPATH_W) 'ControlStruct/LabelTypeChecker.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/LabelTypeChecker.cc'; fi`
    12661226
    1267 Designators/driver_cfa_cpp-Processor.o: Designators/Processor.cc
    1268 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Designators/driver_cfa_cpp-Processor.o -MD -MP -MF Designators/$(DEPDIR)/driver_cfa_cpp-Processor.Tpo -c -o Designators/driver_cfa_cpp-Processor.o `test -f 'Designators/Processor.cc' || echo '$(srcdir)/'`Designators/Processor.cc
    1269 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Designators/$(DEPDIR)/driver_cfa_cpp-Processor.Tpo Designators/$(DEPDIR)/driver_cfa_cpp-Processor.Po
    1270 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Designators/Processor.cc' object='Designators/driver_cfa_cpp-Processor.o' libtool=no @AMDEPBACKSLASH@
    1271 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1272 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Designators/driver_cfa_cpp-Processor.o `test -f 'Designators/Processor.cc' || echo '$(srcdir)/'`Designators/Processor.cc
    1273 
    1274 Designators/driver_cfa_cpp-Processor.obj: Designators/Processor.cc
    1275 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Designators/driver_cfa_cpp-Processor.obj -MD -MP -MF Designators/$(DEPDIR)/driver_cfa_cpp-Processor.Tpo -c -o Designators/driver_cfa_cpp-Processor.obj `if test -f 'Designators/Processor.cc'; then $(CYGPATH_W) 'Designators/Processor.cc'; else $(CYGPATH_W) '$(srcdir)/Designators/Processor.cc'; fi`
    1276 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Designators/$(DEPDIR)/driver_cfa_cpp-Processor.Tpo Designators/$(DEPDIR)/driver_cfa_cpp-Processor.Po
    1277 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Designators/Processor.cc' object='Designators/driver_cfa_cpp-Processor.obj' libtool=no @AMDEPBACKSLASH@
    1278 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1279 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Designators/driver_cfa_cpp-Processor.obj `if test -f 'Designators/Processor.cc'; then $(CYGPATH_W) 'Designators/Processor.cc'; else $(CYGPATH_W) '$(srcdir)/Designators/Processor.cc'; fi`
    1280 
    12811227GenPoly/driver_cfa_cpp-Box.o: GenPoly/Box.cc
    12821228@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-Box.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-Box.Tpo -c -o GenPoly/driver_cfa_cpp-Box.o `test -f 'GenPoly/Box.cc' || echo '$(srcdir)/'`GenPoly/Box.cc
     
    24412387@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Attribute.obj `if test -f 'SynTree/Attribute.cc'; then $(CYGPATH_W) 'SynTree/Attribute.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Attribute.cc'; fi`
    24422388
    2443 Tuples/driver_cfa_cpp-Mutate.o: Tuples/Mutate.cc
    2444 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Tuples/driver_cfa_cpp-Mutate.o -MD -MP -MF Tuples/$(DEPDIR)/driver_cfa_cpp-Mutate.Tpo -c -o Tuples/driver_cfa_cpp-Mutate.o `test -f 'Tuples/Mutate.cc' || echo '$(srcdir)/'`Tuples/Mutate.cc
    2445 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Tuples/$(DEPDIR)/driver_cfa_cpp-Mutate.Tpo Tuples/$(DEPDIR)/driver_cfa_cpp-Mutate.Po
    2446 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Tuples/Mutate.cc' object='Tuples/driver_cfa_cpp-Mutate.o' libtool=no @AMDEPBACKSLASH@
    2447 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    2448 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Tuples/driver_cfa_cpp-Mutate.o `test -f 'Tuples/Mutate.cc' || echo '$(srcdir)/'`Tuples/Mutate.cc
    2449 
    2450 Tuples/driver_cfa_cpp-Mutate.obj: Tuples/Mutate.cc
    2451 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Tuples/driver_cfa_cpp-Mutate.obj -MD -MP -MF Tuples/$(DEPDIR)/driver_cfa_cpp-Mutate.Tpo -c -o Tuples/driver_cfa_cpp-Mutate.obj `if test -f 'Tuples/Mutate.cc'; then $(CYGPATH_W) 'Tuples/Mutate.cc'; else $(CYGPATH_W) '$(srcdir)/Tuples/Mutate.cc'; fi`
    2452 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Tuples/$(DEPDIR)/driver_cfa_cpp-Mutate.Tpo Tuples/$(DEPDIR)/driver_cfa_cpp-Mutate.Po
    2453 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Tuples/Mutate.cc' object='Tuples/driver_cfa_cpp-Mutate.obj' libtool=no @AMDEPBACKSLASH@
    2454 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    2455 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Tuples/driver_cfa_cpp-Mutate.obj `if test -f 'Tuples/Mutate.cc'; then $(CYGPATH_W) 'Tuples/Mutate.cc'; else $(CYGPATH_W) '$(srcdir)/Tuples/Mutate.cc'; fi`
    2456 
    2457 Tuples/driver_cfa_cpp-AssignExpand.o: Tuples/AssignExpand.cc
    2458 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Tuples/driver_cfa_cpp-AssignExpand.o -MD -MP -MF Tuples/$(DEPDIR)/driver_cfa_cpp-AssignExpand.Tpo -c -o Tuples/driver_cfa_cpp-AssignExpand.o `test -f 'Tuples/AssignExpand.cc' || echo '$(srcdir)/'`Tuples/AssignExpand.cc
    2459 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Tuples/$(DEPDIR)/driver_cfa_cpp-AssignExpand.Tpo Tuples/$(DEPDIR)/driver_cfa_cpp-AssignExpand.Po
    2460 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Tuples/AssignExpand.cc' object='Tuples/driver_cfa_cpp-AssignExpand.o' libtool=no @AMDEPBACKSLASH@
    2461 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    2462 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Tuples/driver_cfa_cpp-AssignExpand.o `test -f 'Tuples/AssignExpand.cc' || echo '$(srcdir)/'`Tuples/AssignExpand.cc
    2463 
    2464 Tuples/driver_cfa_cpp-AssignExpand.obj: Tuples/AssignExpand.cc
    2465 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Tuples/driver_cfa_cpp-AssignExpand.obj -MD -MP -MF Tuples/$(DEPDIR)/driver_cfa_cpp-AssignExpand.Tpo -c -o Tuples/driver_cfa_cpp-AssignExpand.obj `if test -f 'Tuples/AssignExpand.cc'; then $(CYGPATH_W) 'Tuples/AssignExpand.cc'; else $(CYGPATH_W) '$(srcdir)/Tuples/AssignExpand.cc'; fi`
    2466 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Tuples/$(DEPDIR)/driver_cfa_cpp-AssignExpand.Tpo Tuples/$(DEPDIR)/driver_cfa_cpp-AssignExpand.Po
    2467 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Tuples/AssignExpand.cc' object='Tuples/driver_cfa_cpp-AssignExpand.obj' libtool=no @AMDEPBACKSLASH@
    2468 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    2469 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Tuples/driver_cfa_cpp-AssignExpand.obj `if test -f 'Tuples/AssignExpand.cc'; then $(CYGPATH_W) 'Tuples/AssignExpand.cc'; else $(CYGPATH_W) '$(srcdir)/Tuples/AssignExpand.cc'; fi`
    2470 
    2471 Tuples/driver_cfa_cpp-FunctionFixer.o: Tuples/FunctionFixer.cc
    2472 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Tuples/driver_cfa_cpp-FunctionFixer.o -MD -MP -MF Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionFixer.Tpo -c -o Tuples/driver_cfa_cpp-FunctionFixer.o `test -f 'Tuples/FunctionFixer.cc' || echo '$(srcdir)/'`Tuples/FunctionFixer.cc
    2473 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionFixer.Tpo Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionFixer.Po
    2474 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Tuples/FunctionFixer.cc' object='Tuples/driver_cfa_cpp-FunctionFixer.o' libtool=no @AMDEPBACKSLASH@
    2475 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    2476 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Tuples/driver_cfa_cpp-FunctionFixer.o `test -f 'Tuples/FunctionFixer.cc' || echo '$(srcdir)/'`Tuples/FunctionFixer.cc
    2477 
    2478 Tuples/driver_cfa_cpp-FunctionFixer.obj: Tuples/FunctionFixer.cc
    2479 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Tuples/driver_cfa_cpp-FunctionFixer.obj -MD -MP -MF Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionFixer.Tpo -c -o Tuples/driver_cfa_cpp-FunctionFixer.obj `if test -f 'Tuples/FunctionFixer.cc'; then $(CYGPATH_W) 'Tuples/FunctionFixer.cc'; else $(CYGPATH_W) '$(srcdir)/Tuples/FunctionFixer.cc'; fi`
    2480 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionFixer.Tpo Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionFixer.Po
    2481 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Tuples/FunctionFixer.cc' object='Tuples/driver_cfa_cpp-FunctionFixer.obj' libtool=no @AMDEPBACKSLASH@
    2482 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    2483 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Tuples/driver_cfa_cpp-FunctionFixer.obj `if test -f 'Tuples/FunctionFixer.cc'; then $(CYGPATH_W) 'Tuples/FunctionFixer.cc'; else $(CYGPATH_W) '$(srcdir)/Tuples/FunctionFixer.cc'; fi`
    2484 
    24852389Tuples/driver_cfa_cpp-TupleAssignment.o: Tuples/TupleAssignment.cc
    24862390@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Tuples/driver_cfa_cpp-TupleAssignment.o -MD -MP -MF Tuples/$(DEPDIR)/driver_cfa_cpp-TupleAssignment.Tpo -c -o Tuples/driver_cfa_cpp-TupleAssignment.o `test -f 'Tuples/TupleAssignment.cc' || echo '$(srcdir)/'`Tuples/TupleAssignment.cc
     
    24962400@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    24972401@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Tuples/driver_cfa_cpp-TupleAssignment.obj `if test -f 'Tuples/TupleAssignment.cc'; then $(CYGPATH_W) 'Tuples/TupleAssignment.cc'; else $(CYGPATH_W) '$(srcdir)/Tuples/TupleAssignment.cc'; fi`
    2498 
    2499 Tuples/driver_cfa_cpp-FunctionChecker.o: Tuples/FunctionChecker.cc
    2500 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Tuples/driver_cfa_cpp-FunctionChecker.o -MD -MP -MF Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionChecker.Tpo -c -o Tuples/driver_cfa_cpp-FunctionChecker.o `test -f 'Tuples/FunctionChecker.cc' || echo '$(srcdir)/'`Tuples/FunctionChecker.cc
    2501 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionChecker.Tpo Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionChecker.Po
    2502 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Tuples/FunctionChecker.cc' object='Tuples/driver_cfa_cpp-FunctionChecker.o' libtool=no @AMDEPBACKSLASH@
    2503 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    2504 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Tuples/driver_cfa_cpp-FunctionChecker.o `test -f 'Tuples/FunctionChecker.cc' || echo '$(srcdir)/'`Tuples/FunctionChecker.cc
    2505 
    2506 Tuples/driver_cfa_cpp-FunctionChecker.obj: Tuples/FunctionChecker.cc
    2507 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Tuples/driver_cfa_cpp-FunctionChecker.obj -MD -MP -MF Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionChecker.Tpo -c -o Tuples/driver_cfa_cpp-FunctionChecker.obj `if test -f 'Tuples/FunctionChecker.cc'; then $(CYGPATH_W) 'Tuples/FunctionChecker.cc'; else $(CYGPATH_W) '$(srcdir)/Tuples/FunctionChecker.cc'; fi`
    2508 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionChecker.Tpo Tuples/$(DEPDIR)/driver_cfa_cpp-FunctionChecker.Po
    2509 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Tuples/FunctionChecker.cc' object='Tuples/driver_cfa_cpp-FunctionChecker.obj' libtool=no @AMDEPBACKSLASH@
    2510 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    2511 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Tuples/driver_cfa_cpp-FunctionChecker.obj `if test -f 'Tuples/FunctionChecker.cc'; then $(CYGPATH_W) 'Tuples/FunctionChecker.cc'; else $(CYGPATH_W) '$(srcdir)/Tuples/FunctionChecker.cc'; fi`
    25122402
    25132403Tuples/driver_cfa_cpp-NameMatcher.o: Tuples/NameMatcher.cc
     
    26542544        -rm -f ControlStruct/$(DEPDIR)/$(am__dirstamp)
    26552545        -rm -f ControlStruct/$(am__dirstamp)
    2656         -rm -f Designators/$(DEPDIR)/$(am__dirstamp)
    2657         -rm -f Designators/$(am__dirstamp)
    26582546        -rm -f GenPoly/$(DEPDIR)/$(am__dirstamp)
    26592547        -rm -f GenPoly/$(am__dirstamp)
     
    26852573
    26862574distclean: distclean-am
    2687         -rm -rf ./$(DEPDIR) CodeGen/$(DEPDIR) Common/$(DEPDIR) ControlStruct/$(DEPDIR) Designators/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR)
     2575        -rm -rf ./$(DEPDIR) CodeGen/$(DEPDIR) Common/$(DEPDIR) ControlStruct/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR)
    26882576        -rm -f Makefile
    26892577distclean-am: clean-am distclean-compile distclean-generic \
     
    27312619
    27322620maintainer-clean: maintainer-clean-am
    2733         -rm -rf ./$(DEPDIR) CodeGen/$(DEPDIR) Common/$(DEPDIR) ControlStruct/$(DEPDIR) Designators/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR)
     2621        -rm -rf ./$(DEPDIR) CodeGen/$(DEPDIR) Common/$(DEPDIR) ControlStruct/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR)
    27342622        -rm -f Makefile
    27352623maintainer-clean-am: distclean-am maintainer-clean-generic
     
    27662654
    27672655
    2768 #SRC +=  ArgTweak/Rewriter.cc \
    2769 #       ArgTweak/Mutate.cc
    2770 
    2771 #       Tuples/MultipleAssign.cc \
    2772 #       Tuples/FlattenTuple.cc \
    2773 #       Tuples/MultRet.cc \
    2774 #       Tuples/FixReturn.cc \
    2775 #       Tuples/MassAssignment.cc \
    2776 #       Tuples/TupleFixer.cc
    2777 
    27782656# Tell versions [3.59,3.63) of GNU make to not export all variables.
    27792657# Otherwise a system limit (for SysV at least) may be exceeded.
  • src/Parser/DeclarationNode.cc

    ra2a8d2a6 r32a2a99  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Aug 18 23:48:23 2016
    13 // Update Count     : 182
     12// Last Modified On : Sun Aug 28 22:12:44 2016
     13// Update Count     : 278
    1414//
    1515
     
    9393        } // if
    9494
    95         if(storageClass != NoStorageClass) os << DeclarationNode::storageName[storageClass] << ' ';
    96         if(isInline) os << DeclarationNode::storageName[Inline] << ' ';
    97         if(isNoreturn) os << DeclarationNode::storageName[Noreturn] << ' ';
     95        if ( storageClass != NoStorageClass ) os << DeclarationNode::storageName[storageClass] << ' ';
     96        if ( isInline ) os << DeclarationNode::storageName[Inline] << ' ';
     97        if ( isNoreturn ) os << DeclarationNode::storageName[Noreturn] << ' ';
    9898        if ( type ) {
    9999                type->print( os, indent );
     
    147147} // DeclarationNode::newFunction
    148148
    149 DeclarationNode *DeclarationNode::newQualifier( Qualifier q ) {
     149DeclarationNode * DeclarationNode::newQualifier( Qualifier q ) {
    150150        DeclarationNode *newnode = new DeclarationNode;
    151151        newnode->type = new TypeData();
    152         newnode->type->qualifiers.push_back( q );
     152        newnode->type->qualifiers[ q ] = 1;
    153153        return newnode;
    154154} // DeclarationNode::newQualifier
    155155
    156 DeclarationNode *DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) {
    157         DeclarationNode *newnode = new DeclarationNode;
    158         switch (sc) {
    159                 case Inline: newnode->isInline = true; break;
    160                 case Noreturn: newnode->isNoreturn = true; break;
    161                 default: newnode->storageClass = sc; break;
    162         }
     156DeclarationNode * DeclarationNode::newForall( DeclarationNode *forall ) {
     157        DeclarationNode *newnode = new DeclarationNode;
     158        newnode->type = new TypeData( TypeData::Unknown );
     159        newnode->type->forall = forall;
     160        return newnode;
     161} // DeclarationNode::newForall
     162
     163DeclarationNode * DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) {
     164        DeclarationNode *newnode = new DeclarationNode;
     165        //switch (sc) {
     166        //      case Inline: newnode->isInline = true; break;
     167        //      case Noreturn: newnode->isNoreturn = true; break;
     168        //      default: newnode->storageClass = sc; break;
     169        //}
     170        newnode->storageClass = sc;
    163171        return newnode;
    164172} // DeclarationNode::newStorageClass
    165173
    166 DeclarationNode *DeclarationNode::newBasicType( BasicType bt ) {
     174DeclarationNode * DeclarationNode::newBasicType( BasicType bt ) {
    167175        DeclarationNode *newnode = new DeclarationNode;
    168176        newnode->type = new TypeData( TypeData::Basic );
     
    171179} // DeclarationNode::newBasicType
    172180
    173 DeclarationNode *DeclarationNode::newBuiltinType( BuiltinType bt ) {
     181DeclarationNode * DeclarationNode::newModifier( Modifier mod ) {
     182        DeclarationNode *newnode = new DeclarationNode;
     183        newnode->type = new TypeData( TypeData::Basic );
     184        newnode->type->basic->modifiers.push_back( mod );
     185        return newnode;
     186} // DeclarationNode::newModifier
     187
     188DeclarationNode * DeclarationNode::newBuiltinType( BuiltinType bt ) {
    174189        DeclarationNode *newnode = new DeclarationNode;
    175190        newnode->type = new TypeData( TypeData::Builtin );
     
    178193} // DeclarationNode::newBuiltinType
    179194
    180 DeclarationNode *DeclarationNode::newModifier( Modifier mod ) {
    181         DeclarationNode *newnode = new DeclarationNode;
    182         newnode->type = new TypeData( TypeData::Basic );
    183         newnode->type->basic->modifiers.push_back( mod );
    184         return newnode;
    185 } // DeclarationNode::newModifier
    186 
    187 DeclarationNode *DeclarationNode::newForall( DeclarationNode *forall ) {
    188         DeclarationNode *newnode = new DeclarationNode;
    189         newnode->type = new TypeData( TypeData::Unknown );
    190         newnode->type->forall = forall;
    191         return newnode;
    192 } // DeclarationNode::newForall
    193 
    194 DeclarationNode *DeclarationNode::newFromTypedef( std::string *name ) {
     195DeclarationNode * DeclarationNode::newFromTypedef( std::string *name ) {
    195196        DeclarationNode *newnode = new DeclarationNode;
    196197        newnode->type = new TypeData( TypeData::SymbolicInst );
     
    201202} // DeclarationNode::newFromTypedef
    202203
    203 DeclarationNode *DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields, bool body ) {
     204DeclarationNode * DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields, bool body ) {
    204205        DeclarationNode *newnode = new DeclarationNode;
    205206        newnode->type = new TypeData( TypeData::Aggregate );
     
    369370                        src = 0;
    370371                } else {
    371                         dst->qualifiers.splice( dst->qualifiers.end(), src->qualifiers );
    372                 } // if
    373         } // if
    374 }
     372                        dst->qualifiers |= src->qualifiers;
     373                } // if
     374        } // if
     375}
     376
     377void DeclarationNode::checkQualifiers( const TypeData *src, const TypeData *dst ) {
     378        TypeData::Qualifiers qsrc = src->qualifiers, qdst = dst->qualifiers;
     379
     380        if ( (qsrc & qdst).any() ) {                                            // common bits between qualifier masks ?
     381                error = "duplicate qualifier ";
     382                int j = 0;                                                                              // separator detector
     383                for ( int i = 0; i < DeclarationNode::NoOfQualifier; i += 1 ) {
     384                        if ( qsrc[i] & qdst[i] ) {                                      // find specific qualifiers in common
     385                                if ( j > 0 ) error += ", ";
     386                                error += DeclarationNode::qualifierName[i];
     387                                j += 1;
     388                        } // if
     389                } // for
     390                error += " in declaration of ";
     391        } // if
     392} // DeclarationNode::checkQualifiers
    375393
    376394DeclarationNode *DeclarationNode::addQualifiers( DeclarationNode *q ) {
     
    380398                        if ( ! type ) {
    381399                                type = new TypeData;
     400                        } else {
     401                                checkQualifiers( q->type, type );
    382402                        } // if
    383403                        addQualifiersToType( q->type, type );
     
    405425        isInline = isInline || q->isInline;
    406426        isNoreturn = isNoreturn || q->isNoreturn;
    407         if(storageClass == NoStorageClass) {
     427        if ( storageClass == NoStorageClass ) {
    408428                storageClass = q->storageClass;
    409         }
    410         else if (q->storageClass != NoStorageClass) {
     429        } else if ( q->storageClass != NoStorageClass ) {
    411430                q->error = "invalid combination of storage classes in declaration of ";
    412         }
    413         if(error.empty()) error = q->error;
     431        } // if
     432        if ( error.empty() ) error = q->error;
    414433        return this;
    415434}
     
    430449                        switch ( dst->kind ) {
    431450                          case TypeData::Unknown:
    432                                 src->qualifiers.splice( src->qualifiers.end(), dst->qualifiers );
     451                                src->qualifiers |= dst->qualifiers;
    433452                                dst = src;
    434453                                src = 0;
    435454                                break;
    436455                          case TypeData::Basic:
    437                                 dst->qualifiers.splice( dst->qualifiers.end(), src->qualifiers );
     456                                dst->qualifiers |= src->qualifiers;
    438457                                if ( src->kind != TypeData::Unknown ) {
    439458                                        assert( src->kind == TypeData::Basic );
     
    451470                                                dst->base->aggInst->params = maybeClone( src->aggregate->actuals );
    452471                                        } // if
    453                                         dst->base->qualifiers.splice( dst->base->qualifiers.end(), src->qualifiers );
     472                                        dst->base->qualifiers |= src->qualifiers;
    454473                                        src = 0;
    455474                                        break;
     
    480499                                                type->aggInst->params = maybeClone( o->type->aggregate->actuals );
    481500                                        } // if
    482                                         type->qualifiers.splice( type->qualifiers.end(), o->type->qualifiers );
     501                                        type->qualifiers |= o->type->qualifiers;
    483502                                } else {
    484503                                        type = o->type;
     
    615634                                        p->type->base->aggInst->params = maybeClone( type->aggregate->actuals );
    616635                                } // if
    617                                 p->type->base->qualifiers.splice( p->type->base->qualifiers.end(), type->qualifiers );
     636                                p->type->base->qualifiers |= type->qualifiers;
    618637                                break;
    619638
     
    652671                                        lastArray->base->aggInst->params = maybeClone( type->aggregate->actuals );
    653672                                } // if
    654                                 lastArray->base->qualifiers.splice( lastArray->base->qualifiers.end(), type->qualifiers );
     673                                lastArray->base->qualifiers |= type->qualifiers;
    655674                                break;
    656675                          default:
     
    782801DeclarationNode *DeclarationNode::extractAggregate() const {
    783802        if ( type ) {
    784                 TypeData *ret = type->extractAggregate();
     803                TypeData *ret = typeextractAggregate( type );
    785804                if ( ret ) {
    786805                        DeclarationNode *newnode = new DeclarationNode;
     
    875894
    876895Declaration *DeclarationNode::build() const {
    877         if( !error.empty() ) throw SemanticError( error, this );
     896        if ( ! error.empty() ) throw SemanticError( error, this );
    878897        if ( type ) {
    879                 return type->buildDecl( name, storageClass, maybeBuild< Expression >( bitfieldWidth ), isInline, isNoreturn, linkage, maybeBuild< Initializer >(initializer) )->set_extension( extension );
     898                return buildDecl( type, name, storageClass, maybeBuild< Expression >( bitfieldWidth ), isInline, isNoreturn, linkage, maybeBuild< Initializer >(initializer) )->set_extension( extension );
    880899        } // if
    881900        if ( ! isInline && ! isNoreturn ) {
     
    890909        switch ( type->kind ) {
    891910          case TypeData::Enum:
    892                 return new EnumInstType( type->buildQualifiers(), type->enumeration->name );
     911                return new EnumInstType( buildQualifiers( type ), type->enumeration->name );
    893912          case TypeData::Aggregate: {
    894913                  ReferenceToType *ret;
    895914                  switch ( type->aggregate->kind ) {
    896915                        case DeclarationNode::Struct:
    897                           ret = new StructInstType( type->buildQualifiers(), type->aggregate->name );
     916                          ret = new StructInstType( buildQualifiers( type ), type->aggregate->name );
    898917                          break;
    899918                        case DeclarationNode::Union:
    900                           ret = new UnionInstType( type->buildQualifiers(), type->aggregate->name );
     919                          ret = new UnionInstType( buildQualifiers( type ), type->aggregate->name );
    901920                          break;
    902921                        case DeclarationNode::Trait:
    903                           ret = new TraitInstType( type->buildQualifiers(), type->aggregate->name );
     922                          ret = new TraitInstType( buildQualifiers( type ), type->aggregate->name );
    904923                          break;
    905924                        default:
     
    910929          }
    911930          case TypeData::Symbolic: {
    912                   TypeInstType *ret = new TypeInstType( type->buildQualifiers(), type->symbolic->name, false );
     931                  TypeInstType *ret = new TypeInstType( buildQualifiers( type ), type->symbolic->name, false );
    913932                  buildList( type->symbolic->actuals, ret->get_parameters() );
    914933                  return ret;
    915934          }
    916935          default:
    917                 return type->build();
     936                return typebuild( type );
    918937        } // switch
    919938}
  • src/Parser/ExpressionNode.cc

    ra2a8d2a6 r32a2a99  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Aug 21 09:43:31 2016
    13 // Update Count     : 501
     12// Last Modified On : Thu Aug 25 21:39:40 2016
     13// Update Count     : 503
    1414//
    1515
     
    184184        "SizeOf", "AlignOf", "OffsetOf", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
    185185        "?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?",
    186         "?=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
     186        "?=?", "?@=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
    187187        "?[?]", "...",
    188188        // monadic
  • src/Parser/LinkageSpec.cc

    ra2a8d2a6 r32a2a99  
    1414//
    1515
     16#include <memory>
    1617#include <string>
    1718#include <cassert>
     
    2122
    2223LinkageSpec::Spec LinkageSpec::fromString( const std::string &spec ) {
     24        std::unique_ptr<const std::string> guard(&spec);                // allocated by lexer
    2325        if ( spec == "\"Cforall\"" ) {
    2426                return Cforall;
     
    2830                throw SemanticError( "Invalid linkage specifier " + spec );
    2931        } // if
    30         delete &spec;                                                                           // allocated by lexer
    3132}
    3233
  • src/Parser/ParseNode.h

    ra2a8d2a6 r32a2a99  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Aug 21 11:53:59 2016
    13 // Update Count     : 546
     12// Last Modified On : Sun Aug 28 21:14:51 2016
     13// Update Count     : 575
    1414//
    1515
     
    9999        InitializerNode *kids;
    100100        bool maybeConstructed;
    101 };
     101}; // InitializerNode
    102102
    103103//##############################################################################
     
    126126        bool extension = false;
    127127        std::unique_ptr<Expression> expr;
    128 };
     128}; // ExpressionNode
    129129
    130130template< typename T >
     
    145145        SizeOf, AlignOf, OffsetOf, Plus, Minus, Mul, Div, Mod, Or, And,
    146146        BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
    147         Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
     147        Assign, AtAssn, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
    148148        Index, Range,
    149149        // monadic
    150150        UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
    151151        Ctor, Dtor,
    152 };
     152}; // OperKinds
    153153
    154154struct LabelNode {
     
    196196class DeclarationNode : public ParseNode {
    197197  public:
    198         enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic };
     198        enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic, NoOfQualifier };
    199199        enum StorageClass { Extern, Static, Auto, Register, Inline, Fortran, Noreturn, Threadlocal, NoStorageClass, };
    200200        enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary };
     
    204204        enum BuiltinType { Valist };
    205205
     206        static const char *qualifierName[];
    206207        static const char *storageName[];
    207         static const char *qualifierName[];
    208208        static const char *basicTypeName[];
    209209        static const char *modifierName[];
     
    214214        static DeclarationNode *newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle = false );
    215215        static DeclarationNode *newQualifier( Qualifier );
     216        static DeclarationNode *newForall( DeclarationNode *);
    216217        static DeclarationNode *newStorageClass( StorageClass );
    217218        static DeclarationNode *newBasicType( BasicType );
    218219        static DeclarationNode *newModifier( Modifier );
    219         static DeclarationNode *newForall( DeclarationNode *);
     220        static DeclarationNode *newBuiltinType( BuiltinType );
    220221        static DeclarationNode *newFromTypedef( std::string *);
    221222        static DeclarationNode *newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields, bool body );
     
    236237        static DeclarationNode *newAttr( std::string *, ExpressionNode *expr );
    237238        static DeclarationNode *newAttr( std::string *, DeclarationNode *type );
    238         static DeclarationNode *newBuiltinType( BuiltinType );
    239239
    240240        DeclarationNode();
     
    243243
    244244        DeclarationNode *addQualifiers( DeclarationNode *);
     245        void checkQualifiers( const TypeData *, const TypeData * );
    245246        DeclarationNode *copyStorageClasses( DeclarationNode *);
    246247        DeclarationNode *addType( DeclarationNode *);
     
    285286        bool get_extension() const { return extension; }
    286287        DeclarationNode *set_extension( bool exten ) { extension = exten; return this; }
    287   private:
     288  public:
    288289        // StorageClass buildStorageClass() const;
    289290        // bool buildFuncSpecifier( StorageClass key ) const;
     
    307308
    308309Type *buildType( TypeData *type );
     310//Type::Qualifiers buildQualifiers( const TypeData::Qualifiers & qualifiers );
    309311
    310312static inline Type * maybeMoveBuildType( const DeclarationNode *orig ) {
  • src/Parser/TypeData.cc

    ra2a8d2a6 r32a2a99  
    1010// Created On       : Sat May 16 15:12:51 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Aug 18 23:48:44 2016
    13 // Update Count     : 64
     12// Last Modified On : Sun Aug 28 18:28:58 2016
     13// Update Count     : 223
    1414//
    1515
     
    9494                break;
    9595        } // switch
    96 }
     96} // TypeData::TypeData
    9797
    9898TypeData::~TypeData() {
     
    163163                break;
    164164        } // switch
    165 }
    166 
    167 TypeData *TypeData::clone() const {
    168         TypeData *newtype = new TypeData( kind );
     165} // TypeData::~TypeData
     166
     167TypeData * TypeData::clone() const {
     168        TypeData * newtype = new TypeData( kind );
    169169        newtype->qualifiers = qualifiers;
    170170        newtype->base = maybeClone( base );
     
    238238        } // switch
    239239        return newtype;
    240 }
     240} // TypeData::clone
    241241
    242242void TypeData::print( std::ostream &os, int indent ) const {
     
    244244        using std::string;
    245245
    246         printEnums( qualifiers.begin(), qualifiers.end(), DeclarationNode::qualifierName, os );
     246        for ( int i = 0; i < DeclarationNode::NoOfQualifier; i += 1 ) {
     247                if ( qualifiers[i] ) os << DeclarationNode::qualifierName[ i ] << ' ';
     248        } // for
    247249
    248250        if ( forall ) {
     
    416418                assert( false );
    417419        } // switch
    418 }
    419 
    420 TypeData *TypeData::extractAggregate( bool toplevel ) const {
    421         TypeData *ret = 0;
    422 
    423         switch ( kind ) {
    424           case Aggregate:
    425                 if ( ! toplevel && aggregate->fields ) {
    426                         ret = clone();
    427                         ret->qualifiers.clear();
    428                 } // if
    429                 break;
    430           case Enum:
    431                 if ( ! toplevel && enumeration->constants ) {
    432                         ret = clone();
    433                         ret->qualifiers.clear();
    434                 } // if
    435                 break;
    436           case AggregateInst:
    437                 if ( aggInst->aggregate ) {
    438                         ret = aggInst->aggregate->extractAggregate( false );
    439                 } // if
    440                 break;
    441           default:
    442                 if ( base ) {
    443                         ret = base->extractAggregate( false );
    444                 } // if
    445         } // switch
    446         return ret;
    447 }
    448 
    449 void buildForall( const DeclarationNode *firstNode, std::list< TypeDecl* > &outputList ) {
     420} // TypeData::print
     421
     422void buildForall( const DeclarationNode * firstNode, std::list< TypeDecl* > &outputList ) {
    450423        buildList( firstNode, outputList );
    451424        for ( std::list< TypeDecl* >::iterator i = outputList.begin(); i != outputList.end(); ++i ) {
     
    453426                        // add assertion parameters to `type' tyvars in reverse order
    454427                        // add dtor:  void ^?{}(T *)
    455                         FunctionType *dtorType = new FunctionType( Type::Qualifiers(), false );
     428                        FunctionType * dtorType = new FunctionType( Type::Qualifiers(), false );
    456429                        dtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ) ), 0 ) );
    457430                        (*i)->get_assertions().push_front( new FunctionDecl( "^?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, dtorType, 0, false, false ) );
    458431
    459432                        // add copy ctor:  void ?{}(T *, T)
    460                         FunctionType *copyCtorType = new FunctionType( Type::Qualifiers(), false );
     433                        FunctionType * copyCtorType = new FunctionType( Type::Qualifiers(), false );
    461434                        copyCtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ) ), 0 ) );
    462435                        copyCtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ), 0 ) );
     
    464437
    465438                        // add default ctor:  void ?{}(T *)
    466                         FunctionType *ctorType = new FunctionType( Type::Qualifiers(), false );
     439                        FunctionType * ctorType = new FunctionType( Type::Qualifiers(), false );
    467440                        ctorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ) ), 0 ) );
    468441                        (*i)->get_assertions().push_front( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, ctorType, 0, false, false ) );
    469442
    470443                        // add assignment operator:  T * ?=?(T *, T)
    471                         FunctionType *assignType = new FunctionType( Type::Qualifiers(), false );
     444                        FunctionType * assignType = new FunctionType( Type::Qualifiers(), false );
    472445                        assignType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ) ), 0 ) );
    473446                        assignType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ), 0 ) );
     
    478451}
    479452
    480 Declaration *TypeData::buildDecl( std::string name, DeclarationNode::StorageClass sc, Expression *bitfieldWidth, bool isInline, bool isNoreturn, LinkageSpec::Spec linkage, Initializer *init ) const {
    481         if ( kind == TypeData::Function ) {
    482                 FunctionDecl *decl;
    483                 if ( function->hasBody ) {
    484                         if ( function->body ) {
    485                                 Statement *stmt = function->body->build();
    486                                 CompoundStmt *body = dynamic_cast< CompoundStmt* >( stmt );
    487                                 assert( body );
    488                                 decl = new FunctionDecl( name, sc, linkage, buildFunction(), body, isInline, isNoreturn );
    489                         } else {
    490                                 // std::list< Label > ls;
    491                                 decl = new FunctionDecl( name, sc, linkage, buildFunction(), new CompoundStmt( std::list< Label >() ), isInline, isNoreturn );
    492                         } // if
    493                 } else {
    494                         decl = new FunctionDecl( name, sc, linkage, buildFunction(), 0, isInline, isNoreturn );
    495                 } // if
    496                 for ( DeclarationNode *cur = function->idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_next() ) ) {
    497                         if ( cur->get_name() != "" ) {
    498                                 decl->get_oldIdents().insert( decl->get_oldIdents().end(), cur->get_name() );
    499                         } // if
    500                 } // for
    501                 buildList( function->oldDeclList, decl->get_oldDecls() );
    502                 return decl;
    503         } else if ( kind == TypeData::Aggregate ) {
    504                 return buildAggregate();
    505         } else if ( kind == TypeData::Enum ) {
    506                 return buildEnum();
    507         } else if ( kind == TypeData::Symbolic ) {
    508                 return buildSymbolic( name, sc );
    509         } else if ( kind == TypeData::Variable ) {
    510                 return buildVariable();
    511         } else {
    512                 return new ObjectDecl( name, sc, linkage, bitfieldWidth, build(), init, std::list< Attribute * >(),  isInline, isNoreturn );
    513         } // if
    514         return 0;
    515 }
    516 
    517 Type *TypeData::build() const {
    518         switch ( kind ) {
    519           case Unknown:
     453Type * typebuild( const TypeData * td ) {
     454        assert( td );
     455        switch ( td->kind ) {
     456          case TypeData::Unknown:
    520457                // fill in implicit int
    521                 return new BasicType( buildQualifiers(), BasicType::SignedInt );
    522           case Basic:
    523                 return buildBasicType();
    524           case Pointer:
    525                 return buildPointer();
    526           case Array:
    527                 return buildArray();
    528           case Function:
    529                 return buildFunction();
    530           case AggregateInst:
    531                 return buildAggInst();
    532           case EnumConstant:
     458                return new BasicType( buildQualifiers( td ), BasicType::SignedInt );
     459          case TypeData::Basic:
     460                return buildBasicType( td );
     461          case TypeData::Pointer:
     462                return buildPointer( td );
     463          case TypeData::Array:
     464                return buildArray( td );
     465          case TypeData::Function:
     466                return buildFunction( td );
     467          case TypeData::AggregateInst:
     468                return buildAggInst( td );
     469          case TypeData::EnumConstant:
    533470                // the name gets filled in later -- by SymTab::Validate
    534                 return new EnumInstType( buildQualifiers(), "" );
    535           case SymbolicInst:
    536                 return buildSymbolicInst();;
    537           case Tuple:
    538                 return buildTuple();
    539           case Typeof:
    540                 return buildTypeof();
    541           case Builtin:
    542                 return new VarArgsType( buildQualifiers() );
    543           case Attr:
    544                 return buildAttr();
    545           case Symbolic:
    546           case Enum:
    547           case Aggregate:
    548           case Variable:
     471                return new EnumInstType( buildQualifiers( td ), "" );
     472          case TypeData::SymbolicInst:
     473                return buildSymbolicInst( td );;
     474          case TypeData::Tuple:
     475                return buildTuple( td );
     476          case TypeData::Typeof:
     477                return buildTypeof( td );
     478          case TypeData::Builtin:
     479                return new VarArgsType( buildQualifiers( td ) );
     480          case TypeData::Attr:
     481                return buildAttr( td );
     482          case TypeData::Symbolic:
     483          case TypeData::Enum:
     484          case TypeData::Aggregate:
     485          case TypeData::Variable:
    549486                assert( false );
    550487        } // switch
    551488        return 0;
    552 }
    553 
    554 Type::Qualifiers TypeData::buildQualifiers() const {
     489} // typebuild
     490
     491TypeData * typeextractAggregate( const TypeData * td, bool toplevel ) {
     492        TypeData * ret = 0;
     493
     494        switch ( td->kind ) {
     495          case TypeData::Aggregate:
     496                if ( ! toplevel && td->aggregate->fields ) {
     497                        ret = td->clone();
     498                } // if
     499                break;
     500          case TypeData::Enum:
     501                if ( ! toplevel && td->enumeration->constants ) {
     502                        ret = td->clone();
     503                } // if
     504                break;
     505          case TypeData::AggregateInst:
     506                if ( td->aggInst->aggregate ) {
     507                        ret = typeextractAggregate( td->aggInst->aggregate, false );
     508                } // if
     509                break;
     510          default:
     511                if ( td->base ) {
     512                        ret = typeextractAggregate( td->base, false );
     513                } // if
     514        } // switch
     515        return ret;
     516} // typeextractAggregate
     517
     518Type::Qualifiers buildQualifiers( const TypeData * td ) {
    555519        Type::Qualifiers q;
    556         for ( std::list< DeclarationNode::Qualifier >::const_iterator i = qualifiers.begin(); i != qualifiers.end(); ++i ) {
    557                 switch ( *i ) {
    558                   case DeclarationNode::Const:
    559                         q.isConst = true;
    560                         break;
    561                   case DeclarationNode::Volatile:
    562                         q.isVolatile = true;
    563                         break;
    564                   case DeclarationNode::Restrict:
    565                         q.isRestrict = true;
    566                         break;
    567                   case DeclarationNode::Lvalue:
    568                         q.isLvalue = true;
    569                         break;
    570                   case DeclarationNode::Atomic:
    571                         q.isAtomic = true;
    572                         break;
    573                 } // switch
    574         } // for
     520        q.isConst = td->qualifiers[ DeclarationNode::Const ];
     521        q.isVolatile = td->qualifiers[ DeclarationNode::Volatile ];
     522        q.isRestrict = td->qualifiers[ DeclarationNode::Restrict ];
     523        q.isLvalue = td->qualifiers[ DeclarationNode::Lvalue ];
     524        q.isAtomic = td->qualifiers[ DeclarationNode::Atomic ];;
    575525        return q;
    576 }
    577 
    578 Type *TypeData::buildBasicType() const {
     526} // buildQualifiers
     527
     528Type * buildBasicType( const TypeData * td ) {
    579529        static const BasicType::Kind kindMap[] = { BasicType::Char, BasicType::SignedInt, BasicType::Float, BasicType::Double,
    580530                                                                                           BasicType::Char /* void */, BasicType::Bool, BasicType::DoubleComplex,
     
    585535        BasicType::Kind ret;
    586536
    587         for ( std::list< DeclarationNode::BasicType >::const_iterator i = basic->typeSpec.begin(); i != basic->typeSpec.end(); ++i ) {
     537        for ( std::list< DeclarationNode::BasicType >::const_iterator i = td->basic->typeSpec.begin(); i != td->basic->typeSpec.end(); ++i ) {
    588538                if ( ! init ) {
    589539                        init = true;
    590540                        if ( *i == DeclarationNode::Void ) {
    591                                 if ( basic->typeSpec.size() != 1 || ! basic->modifiers.empty() ) {
    592                                         throw SemanticError( "invalid type specifier \"void\" in type: ", this );
     541                                if ( td->basic->typeSpec.size() != 1 || ! td->basic->modifiers.empty() ) {
     542                                        throw SemanticError( "invalid type specifier \"void\" in type: ", td );
    593543                                } else {
    594                                         return new VoidType( buildQualifiers() );
     544                                        return new VoidType( buildQualifiers( td ) );
    595545                                } // if
    596546                        } else {
     
    601551                          case DeclarationNode::Float:
    602552                                if ( sawDouble ) {
    603                                         throw SemanticError( "invalid type specifier \"float\" in type: ", this );
     553                                        throw SemanticError( "invalid type specifier \"float\" in type: ", td );
    604554                                } else {
    605555                                        switch ( ret ) {
     
    611561                                                break;
    612562                                          default:
    613                                                 throw SemanticError( "invalid type specifier \"float\" in type: ", this );
     563                                                throw SemanticError( "invalid type specifier \"float\" in type: ", td );
    614564                                        } // switch
    615565                                } // if
     
    617567                          case DeclarationNode::Double:
    618568                                if ( sawDouble ) {
    619                                         throw SemanticError( "duplicate type specifier \"double\" in type: ", this );
     569                                        throw SemanticError( "duplicate type specifier \"double\" in type: ", td );
    620570                                } else {
    621571                                        switch ( ret ) {
     
    624574                                                break;
    625575                                          default:
    626                                                 throw SemanticError( "invalid type specifier \"double\" in type: ", this );
     576                                                throw SemanticError( "invalid type specifier \"double\" in type: ", td );
    627577                                        } // switch
    628578                                } // if
     
    637587                                        break;
    638588                                  default:
    639                                         throw SemanticError( "invalid type specifier \"_Complex\" in type: ", this );
     589                                        throw SemanticError( "invalid type specifier \"_Complex\" in type: ", td );
    640590                                } // switch
    641591                                break;
     
    649599                                        break;
    650600                                  default:
    651                                         throw SemanticError( "invalid type specifier \"_Imaginary\" in type: ", this );
     601                                        throw SemanticError( "invalid type specifier \"_Imaginary\" in type: ", td );
    652602                                } // switch
    653603                                break;
    654604                          default:
    655                                 throw SemanticError( std::string( "invalid type specifier \"" ) + DeclarationNode::basicTypeName[ *i ] + "\" in type: ", this );
     605                                throw SemanticError( std::string( "invalid type specifier \"" ) + DeclarationNode::basicTypeName[ *i ] + "\" in type: ", td );
    656606                        } // switch
    657607                } // if
     
    661611        } // for
    662612
    663         for ( std::list< DeclarationNode::Modifier >::const_iterator i = basic->modifiers.begin(); i != basic->modifiers.end(); ++i ) {
     613        for ( std::list< DeclarationNode::Modifier >::const_iterator i = td->basic->modifiers.begin(); i != td->basic->modifiers.end(); ++i ) {
    664614                switch ( *i ) {
    665615                  case DeclarationNode::Long:
     
    691641                                        break;
    692642                                  default:
    693                                         throw SemanticError( "invalid type modifier \"long\" in type: ", this );
     643                                        throw SemanticError( "invalid type modifier \"long\" in type: ", td );
    694644                                } // switch
    695645                        } // if
     
    708658                                        break;
    709659                                  default:
    710                                         throw SemanticError( "invalid type modifier \"short\" in type: ", this );
     660                                        throw SemanticError( "invalid type modifier \"short\" in type: ", td );
    711661                                } // switch
    712662                        } // if
     
    717667                                ret = BasicType::SignedInt;
    718668                        } else if ( sawSigned ) {
    719                                 throw SemanticError( "duplicate type modifer \"signed\" in type: ", this );
     669                                throw SemanticError( "duplicate type modifer \"signed\" in type: ", td );
    720670                        } else {
    721671                                switch ( ret ) {
     
    733683                                        break;
    734684                                  default:
    735                                         throw SemanticError( "invalid type modifer \"signed\" in type: ", this );
     685                                        throw SemanticError( "invalid type modifer \"signed\" in type: ", td );
    736686                                } // switch
    737687                        } // if
     
    742692                                ret = BasicType::UnsignedInt;
    743693                        } else if ( sawSigned ) {
    744                                 throw SemanticError( "invalid type modifer \"unsigned\" in type: ", this );
     694                                throw SemanticError( "invalid type modifer \"unsigned\" in type: ", td );
    745695                        } else {
    746696                                switch ( ret ) {
     
    761711                                        break;
    762712                                  default:
    763                                         throw SemanticError( "invalid type modifer \"unsigned\" in type: ", this );
     713                                        throw SemanticError( "invalid type modifer \"unsigned\" in type: ", td );
    764714                                } // switch
    765715                        } // if
     
    772722        } // for
    773723
    774         BasicType *bt;
     724        BasicType * bt;
    775725        if ( ! init ) {
    776                 bt = new BasicType( buildQualifiers(), BasicType::SignedInt );
     726                bt = new BasicType( buildQualifiers( td ), BasicType::SignedInt );
    777727        } else {
    778                 bt = new BasicType( buildQualifiers(), ret );
     728                bt = new BasicType( buildQualifiers( td ), ret );
    779729        } // if
    780         buildForall( forall, bt->get_forall() );
     730        buildForall( td->forall, bt->get_forall() );
    781731        return bt;
    782 }
    783 
    784 
    785 PointerType *TypeData::buildPointer() const {
    786         PointerType *pt;
    787         if ( base ) {
    788                 pt = new PointerType( buildQualifiers(), base->build() );
     732} // buildBasicType
     733
     734PointerType * buildPointer( const TypeData * td ) {
     735        PointerType * pt;
     736        if ( td->base ) {
     737                pt = new PointerType( buildQualifiers( td ), typebuild( td->base ) );
    789738        } else {
    790                 pt = new PointerType( buildQualifiers(), new BasicType( Type::Qualifiers(), BasicType::SignedInt ) );
     739                pt = new PointerType( buildQualifiers( td ), new BasicType( Type::Qualifiers(), BasicType::SignedInt ) );
    791740        } // if
    792         buildForall( forall, pt->get_forall() );
     741        buildForall( td->forall, pt->get_forall() );
    793742        return pt;
    794 }
    795 
    796 ArrayType *TypeData::buildArray() const {
    797         ArrayType *at;
    798         if ( base ) {
    799                 at = new ArrayType( buildQualifiers(), base->build(), maybeBuild< Expression >( array->dimension ),
    800                                                         array->isVarLen, array->isStatic );
     743} // buildPointer
     744
     745ArrayType * buildArray( const TypeData * td ) {
     746        ArrayType * at;
     747        if ( td->base ) {
     748                at = new ArrayType( buildQualifiers( td ), typebuild( td->base ), maybeBuild< Expression >( td->array->dimension ),
     749                                                        td->array->isVarLen, td->array->isStatic );
    801750        } else {
    802                 at = new ArrayType( buildQualifiers(), new BasicType( Type::Qualifiers(), BasicType::SignedInt ),
    803                                                         maybeBuild< Expression >( array->dimension ), array->isVarLen, array->isStatic );
     751                at = new ArrayType( buildQualifiers( td ), new BasicType( Type::Qualifiers(), BasicType::SignedInt ),
     752                                                        maybeBuild< Expression >( td->array->dimension ), td->array->isVarLen, td->array->isStatic );
    804753        } // if
    805         buildForall( forall, at->get_forall() );
     754        buildForall( td->forall, at->get_forall() );
    806755        return at;
    807 }
    808 
    809 FunctionType *TypeData::buildFunction() const {
    810         assert( kind == Function );
    811         bool hasEllipsis = function->params ? function->params->get_hasEllipsis() : true;
    812         if ( ! function->params ) hasEllipsis = ! function->newStyle;
    813         FunctionType *ft = new FunctionType( buildQualifiers(), hasEllipsis );
    814         buildList( function->params, ft->get_parameters() );
    815         buildForall( forall, ft->get_forall() );
    816         if ( base ) {
    817                 switch ( base->kind ) {
    818                   case Tuple:
    819                         buildList( base->tuple->members, ft->get_returnVals() );
     756} // buildPointer
     757
     758AggregateDecl * buildAggregate( const TypeData * td ) {
     759        assert( td->kind == TypeData::Aggregate );
     760        AggregateDecl * at;
     761        switch ( td->aggregate->kind ) {
     762          case DeclarationNode::Struct:
     763                at = new StructDecl( td->aggregate->name );
     764                buildForall( td->aggregate->params, at->get_parameters() );
     765                break;
     766          case DeclarationNode::Union:
     767                at = new UnionDecl( td->aggregate->name );
     768                buildForall( td->aggregate->params, at->get_parameters() );
     769                break;
     770          case DeclarationNode::Trait:
     771                at = new TraitDecl( td->aggregate->name );
     772                buildList( td->aggregate->params, at->get_parameters() );
     773                break;
     774          default:
     775                assert( false );
     776        } // switch
     777
     778        buildList( td->aggregate->fields, at->get_members() );
     779        at->set_body( td->aggregate->body );
     780
     781        return at;
     782} // buildAggregate
     783
     784ReferenceToType * buildAggInst( const TypeData * td ) {
     785        assert( td->kind == TypeData::AggregateInst );
     786
     787        ReferenceToType * ret;
     788        if ( td->aggInst->aggregate->kind == TypeData::Enum ) {
     789                ret = new EnumInstType( buildQualifiers( td ), td->aggInst->aggregate->enumeration->name );
     790        } else {
     791                assert( td->aggInst->aggregate->kind == TypeData::Aggregate );
     792                switch ( td->aggInst->aggregate->aggregate->kind ) {
     793                  case DeclarationNode::Struct:
     794                        ret = new StructInstType( buildQualifiers( td ), td->aggInst->aggregate->aggregate->name );
     795                        break;
     796                  case DeclarationNode::Union:
     797                        ret = new UnionInstType( buildQualifiers( td ), td->aggInst->aggregate->aggregate->name );
     798                        break;
     799                  case DeclarationNode::Trait:
     800                        ret = new TraitInstType( buildQualifiers( td ), td->aggInst->aggregate->aggregate->name );
    820801                        break;
    821802                  default:
    822                         ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType* >( base->buildDecl( "", DeclarationNode::NoStorageClass, 0, false, false, LinkageSpec::Cforall ) ) );
     803                        assert( false );
     804                } // switch
     805        } // if
     806        buildList( td->aggInst->params, ret->get_parameters() );
     807        buildForall( td->forall, ret->get_forall() );
     808        return ret;
     809} // buildAggInst
     810
     811NamedTypeDecl * buildSymbolic( const TypeData * td, const std::string & name, DeclarationNode::StorageClass sc ) {
     812        assert( td->kind == TypeData::Symbolic );
     813        NamedTypeDecl * ret;
     814        assert( td->base );
     815        if ( td->symbolic->isTypedef ) {
     816                ret = new TypedefDecl( name, sc, typebuild( td->base ) );
     817        } else {
     818                ret = new TypeDecl( name, sc, typebuild( td->base ), TypeDecl::Any );
     819        } // if
     820        buildList( td->symbolic->params, ret->get_parameters() );
     821        buildList( td->symbolic->assertions, ret->get_assertions() );
     822        return ret;
     823} // buildSymbolic
     824
     825TypeDecl * buildVariable( const TypeData * td ) {
     826        assert( td->kind == TypeData::Variable );
     827        static const TypeDecl::Kind kindMap[] = { TypeDecl::Any, TypeDecl::Ftype, TypeDecl::Dtype };
     828
     829        TypeDecl * ret = new TypeDecl( td->variable->name, DeclarationNode::NoStorageClass, 0, kindMap[ td->variable->tyClass ] );
     830        buildList( td->variable->assertions, ret->get_assertions() );
     831        return ret;
     832} // buildSymbolic
     833
     834EnumDecl * buildEnum( const TypeData * td ) {
     835        assert( td->kind == TypeData::Enum );
     836        EnumDecl * ret = new EnumDecl( td->enumeration->name );
     837        buildList( td->enumeration->constants, ret->get_members() );
     838        std::list< Declaration * >::iterator members = ret->get_members().begin();
     839        for ( const DeclarationNode * cur = td->enumeration-> constants; cur != nullptr; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ), ++members ) {
     840                if ( cur->has_enumeratorValue() ) {
     841                        ObjectDecl * member = dynamic_cast< ObjectDecl * >(* members);
     842                        member->set_init( new SingleInit( maybeMoveBuild< Expression >( cur->consume_enumeratorValue() ), std::list< Expression * >() ) );
     843                } // if
     844        } // for
     845        return ret;
     846} // buildEnum
     847
     848TypeInstType * buildSymbolicInst( const TypeData * td ) {
     849        assert( td->kind == TypeData::SymbolicInst );
     850        TypeInstType * ret = new TypeInstType( buildQualifiers( td ), td->symbolic->name, false );
     851        buildList( td->symbolic->actuals, ret->get_parameters() );
     852        buildForall( td->forall, ret->get_forall() );
     853        return ret;
     854} // buildSymbolicInst
     855
     856TupleType * buildTuple( const TypeData * td ) {
     857        assert( td->kind == TypeData::Tuple );
     858        TupleType * ret = new TupleType( buildQualifiers( td ) );
     859        buildTypeList( td->tuple->members, ret->get_types() );
     860        buildForall( td->forall, ret->get_forall() );
     861        return ret;
     862} // buildTuple
     863
     864TypeofType * buildTypeof( const TypeData * td ) {
     865        assert( td->kind == TypeData::Typeof );
     866        assert( td->typeexpr );
     867        assert( td->typeexpr->expr );
     868        return new TypeofType( buildQualifiers( td ), td->typeexpr->expr->build() );
     869} // buildTypeof
     870
     871AttrType * buildAttr( const TypeData * td ) {
     872        assert( td->kind == TypeData::Attr );
     873        assert( td->attr );
     874        AttrType * ret;
     875        if ( td->attr->expr ) {
     876                ret = new AttrType( buildQualifiers( td ), td->attr->name, td->attr->expr->build() );
     877        } else {
     878                assert( td->attr->type );
     879                ret = new AttrType( buildQualifiers( td ), td->attr->name, td->attr->type->buildType() );
     880        } // if
     881        return ret;
     882} // buildAttr
     883
     884Declaration * buildDecl( const TypeData * td, std::string name, DeclarationNode::StorageClass sc, Expression * bitfieldWidth, bool isInline, bool isNoreturn, LinkageSpec::Spec linkage, Initializer * init ) {
     885        if ( td->kind == TypeData::Function ) {
     886                FunctionDecl * decl;
     887                if ( td->function->hasBody ) {
     888                        if ( td->function->body ) {
     889                                Statement * stmt = td->function->body->build();
     890                                CompoundStmt * body = dynamic_cast< CompoundStmt* >( stmt );
     891                                assert( body );
     892                                decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), body, isInline, isNoreturn );
     893                        } else {
     894                                // std::list< Label > ls;
     895                                decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), new CompoundStmt( std::list< Label >() ), isInline, isNoreturn );
     896                        } // if
     897                } else {
     898                        decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), 0, isInline, isNoreturn );
     899                } // if
     900                for ( DeclarationNode * cur = td->function->idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_next() ) ) {
     901                        if ( cur->get_name() != "" ) {
     902                                decl->get_oldIdents().insert( decl->get_oldIdents().end(), cur->get_name() );
     903                        } // if
     904                } // for
     905                buildList( td->function->oldDeclList, decl->get_oldDecls() );
     906                return decl;
     907        } else if ( td->kind == TypeData::Aggregate ) {
     908                return buildAggregate( td );
     909        } else if ( td->kind == TypeData::Enum ) {
     910                return buildEnum( td );
     911        } else if ( td->kind == TypeData::Symbolic ) {
     912                return buildSymbolic( td, name, sc );
     913        } else if ( td->kind == TypeData::Variable ) {
     914                return buildVariable( td );
     915        } else {
     916                return new ObjectDecl( name, sc, linkage, bitfieldWidth, typebuild( td ), init, std::list< Attribute * >(), isInline, isNoreturn );
     917        } // if
     918        return 0;
     919} // buildDecl
     920
     921FunctionType * buildFunction( const TypeData * td ) {
     922        assert( td->kind == TypeData::Function );
     923        bool hasEllipsis = td->function->params ? td->function->params->get_hasEllipsis() : true;
     924        if ( ! td->function->params ) hasEllipsis = ! td->function->newStyle;
     925        FunctionType * ft = new FunctionType( buildQualifiers( td ), hasEllipsis );
     926        buildList( td->function->params, ft->get_parameters() );
     927        buildForall( td->forall, ft->get_forall() );
     928        if ( td->base ) {
     929                switch ( td->base->kind ) {
     930                  case TypeData::Tuple:
     931                        buildList( td->base->tuple->members, ft->get_returnVals() );
     932                        break;
     933                  default:
     934                        ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType* >( buildDecl( td->base,  "", DeclarationNode::NoStorageClass, 0, false, false, LinkageSpec::Cforall ) ) );
    823935                } // switch
    824936        } else {
     
    826938        } // if
    827939        return ft;
    828 }
    829 
    830 AggregateDecl *TypeData::buildAggregate() const {
    831         assert( kind == Aggregate );
    832         AggregateDecl *at;
    833         switch ( aggregate->kind ) {
    834           case DeclarationNode::Struct:
    835                 at = new StructDecl( aggregate->name );
    836                 buildForall( aggregate->params, at->get_parameters() );
    837                 break;
    838           case DeclarationNode::Union:
    839                 at = new UnionDecl( aggregate->name );
    840                 buildForall( aggregate->params, at->get_parameters() );
    841                 break;
    842           case DeclarationNode::Trait:
    843                 at = new TraitDecl( aggregate->name );
    844                 buildList( aggregate->params, at->get_parameters() );
    845                 break;
    846           default:
    847                 assert( false );
    848         } // switch
    849 
    850         buildList( aggregate->fields, at->get_members() );
    851         at->set_body( aggregate->body );
    852 
    853         return at;
    854 }
    855 
    856 ReferenceToType *TypeData::buildAggInst() const {
    857         assert( kind == AggregateInst );
    858 
    859         ReferenceToType *ret;
    860         if ( aggInst->aggregate->kind == Enum ) {
    861                 ret = new EnumInstType( buildQualifiers(), aggInst->aggregate->enumeration->name );
    862         } else {
    863                 assert( aggInst->aggregate->kind == Aggregate );
    864                 switch ( aggInst->aggregate->aggregate->kind ) {
    865                   case DeclarationNode::Struct:
    866                         ret = new StructInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
    867                         break;
    868                   case DeclarationNode::Union:
    869                         ret = new UnionInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
    870                         break;
    871                   case DeclarationNode::Trait:
    872                         ret = new TraitInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
    873                         break;
    874                   default:
    875                         assert( false );
    876                 } // switch
    877         } // if
    878         buildList( aggInst->params, ret->get_parameters() );
    879         buildForall( forall, ret->get_forall() );
    880         return ret;
    881 }
    882 
    883 NamedTypeDecl *TypeData::buildSymbolic( const std::string &name, DeclarationNode::StorageClass sc ) const {
    884         assert( kind == Symbolic );
    885         NamedTypeDecl *ret;
    886         if ( symbolic->isTypedef ) {
    887                 ret = new TypedefDecl( name, sc, maybeBuild< Type >( base ) );
    888         } else {
    889                 ret = new TypeDecl( name, sc, maybeBuild< Type >( base ), TypeDecl::Any );
    890         } // if
    891         buildList( symbolic->params, ret->get_parameters() );
    892         buildList( symbolic->assertions, ret->get_assertions() );
    893         return ret;
    894 }
    895 
    896 TypeDecl *TypeData::buildVariable() const {
    897         assert( kind == Variable );
    898         static const TypeDecl::Kind kindMap[] = { TypeDecl::Any, TypeDecl::Ftype, TypeDecl::Dtype };
    899 
    900         TypeDecl *ret = new TypeDecl( variable->name, DeclarationNode::NoStorageClass, 0, kindMap[ variable->tyClass ] );
    901         buildList( variable->assertions, ret->get_assertions() );
    902         return ret;
    903 }
    904 
    905 EnumDecl *TypeData::buildEnum() const {
    906         assert( kind == Enum );
    907         EnumDecl *ret = new EnumDecl( enumeration->name );
    908         buildList( enumeration->constants, ret->get_members() );
    909         std::list< Declaration * >::iterator members = ret->get_members().begin();
    910         for ( const DeclarationNode *cur = enumeration->constants; cur != nullptr; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ), ++members ) {
    911                 if ( cur->has_enumeratorValue() ) {
    912                         ObjectDecl *member = dynamic_cast< ObjectDecl * >(*members);
    913                         member->set_init( new SingleInit( maybeMoveBuild< Expression >( cur->consume_enumeratorValue() ), std::list< Expression * >() ) );
    914                 } // if
    915         } // for
    916         return ret;
    917 }
    918 
    919 TypeInstType *TypeData::buildSymbolicInst() const {
    920         assert( kind == SymbolicInst );
    921         TypeInstType *ret = new TypeInstType( buildQualifiers(), symbolic->name, false );
    922         buildList( symbolic->actuals, ret->get_parameters() );
    923         buildForall( forall, ret->get_forall() );
    924         return ret;
    925 }
    926 
    927 TupleType *TypeData::buildTuple() const {
    928         assert( kind == Tuple );
    929         TupleType *ret = new TupleType( buildQualifiers() );
    930         buildTypeList( tuple->members, ret->get_types() );
    931         buildForall( forall, ret->get_forall() );
    932         return ret;
    933 }
    934 
    935 TypeofType *TypeData::buildTypeof() const {
    936         assert( kind == Typeof );
    937         assert( typeexpr );
    938         assert( typeexpr->expr );
    939         TypeofType *ret = new TypeofType( buildQualifiers(), typeexpr->expr->build() );
    940         return ret;
    941 }
    942 
    943 AttrType *TypeData::buildAttr() const {
    944         assert( kind == Attr );
    945         assert( attr );
    946         AttrType *ret;
    947         if ( attr->expr ) {
    948                 ret = new AttrType( buildQualifiers(), attr->name, attr->expr->build() );
    949         } else {
    950                 assert( attr->type );
    951                 ret = new AttrType( buildQualifiers(), attr->name, attr->type->buildType() );
    952         } // if
    953         return ret;
    954 }
     940} // buildFunction
    955941
    956942// Local Variables: //
  • src/Parser/TypeData.h

    ra2a8d2a6 r32a2a99  
    1010// Created On       : Sat May 16 15:18:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Aug 18 23:48:52 2016
    13 // Update Count     : 22
     12// Last Modified On : Sun Aug 28 22:39:00 2016
     13// Update Count     : 85
    1414//
    1515
     
    1717#define TYPEDATA_H
    1818
    19 #include <list>
     19#include <bitset>
    2020
    2121#include "ParseNode.h"
     
    2525        enum Kind { Unknown, Basic, Pointer, Array, Function, Aggregate, AggregateInst,
    2626                                Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Builtin, Attr } kind;
    27 
    28         TypeData( Kind k = Unknown );
    29         ~TypeData();
    30         void print( std::ostream &, int indent = 0 ) const;
    31         TypeData * clone() const;
    32 
    33         Type * build() const;
    34         FunctionType * buildFunction() const;
    35 
    36         TypeData * base;
    37         std::list< DeclarationNode::Qualifier > qualifiers;
    38         DeclarationNode * forall;
    3927
    4028        struct Basic_t {
     
    10997        };
    11098
     99        TypeData * base;
     100        typedef std::bitset< DeclarationNode::NoOfQualifier > Qualifiers;
     101        Qualifiers qualifiers;
     102        DeclarationNode * forall;
     103
    111104        union {
    112105                Basic_t * basic;
     
    124117        };
    125118
    126         TypeData * extractAggregate( bool toplevel = true ) const;
    127         // helper function for DeclNodeImpl::build
    128         Declaration * buildDecl( std::string name, DeclarationNode::StorageClass sc, Expression * bitfieldWidth, bool isInline, bool isNoreturn, LinkageSpec::Spec linkage, Initializer * init = 0 ) const;
    129         // helper functions for build()
    130         Type::Qualifiers buildQualifiers() const;
    131         Type * buildBasicType() const;
    132         PointerType * buildPointer() const;
    133         ArrayType * buildArray() const;
    134         AggregateDecl * buildAggregate() const;
    135         ReferenceToType * buildAggInst() const;
    136         NamedTypeDecl * buildSymbolic( const std::string &name, DeclarationNode::StorageClass sc ) const;
    137         TypeDecl* buildVariable() const;
    138         EnumDecl* buildEnum() const;
    139         TypeInstType * buildSymbolicInst() const;
    140         TupleType * buildTuple() const;
    141         TypeofType * buildTypeof() const;
    142         AttrType * buildAttr() const;
     119        TypeData( Kind k = Unknown );
     120        ~TypeData();
     121        void print( std::ostream &, int indent = 0 ) const;
     122        TypeData * clone() const;
    143123};
     124
     125Type * typebuild( const TypeData * );
     126TypeData * typeextractAggregate( const TypeData * td, bool toplevel = true );
     127Type::Qualifiers buildQualifiers( const TypeData * td );
     128Type * buildBasicType( const TypeData * );
     129PointerType * buildPointer( const TypeData * );
     130ArrayType * buildArray( const TypeData * );
     131AggregateDecl * buildAggregate( const TypeData * );
     132ReferenceToType * buildAggInst( const TypeData * );
     133NamedTypeDecl * buildSymbolic( const TypeData *, const std::string &name, DeclarationNode::StorageClass sc );
     134TypeDecl * buildVariable( const TypeData * );
     135EnumDecl * buildEnum( const TypeData * );
     136TypeInstType * buildSymbolicInst( const TypeData * );
     137TupleType * buildTuple( const TypeData * );
     138TypeofType * buildTypeof( const TypeData * );
     139AttrType * buildAttr( const TypeData * );
     140Declaration * buildDecl( const TypeData *, std::string, DeclarationNode::StorageClass, Expression *, bool isInline, bool isNoreturn, LinkageSpec::Spec, Initializer * init = 0 );
     141FunctionType * buildFunction( const TypeData * );
    144142
    145143#endif // TYPEDATA_H
  • src/Parser/lex.cc

    ra2a8d2a6 r32a2a99  
    14691469 * Created On       : Sat Sep 22 08:58:10 2001
    14701470 * Last Modified By : Peter A. Buhr
    1471  * Last Modified On : Thu Aug 18 22:17:30 2016
    1472  * Update Count     : 472
     1471 * Last Modified On : Wed Aug 24 13:27:04 2016
     1472 * Update Count     : 487
    14731473 */
    14741474#line 20 "lex.ll"
     
    18271827{
    18281828        /* " stop highlighting */
    1829         static char *filename[FILENAME_MAX];                            // temporarily store current source-file name
     1829        static char filename[FILENAME_MAX];                                     // temporarily store current source-file name
    18301830        char *end_num;
    18311831        char *begin_string, *end_string;
     
    18421842                //std::cout << "file " << filename << " line " << lineno << std::endl;
    18431843                yylineno = lineno;
    1844                 yyfilename = filename[0];
     1844                yyfilename = filename;
    18451845        } // if
    18461846}
     
    24262426YY_RULE_SETUP
    24272427#line 290 "lex.ll"
    2428 { BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
     2428{ BEGIN QUOTE; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
    24292429        YY_BREAK
    24302430case 116:
    24312431YY_RULE_SETUP
    24322432#line 291 "lex.ll"
    2433 { *strtext += std::string( yytext ); }
     2433{ strtext->append( yytext, yyleng ); }
    24342434        YY_BREAK
    24352435case 117:
     
    24372437YY_RULE_SETUP
    24382438#line 292 "lex.ll"
    2439 { BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
     2439{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(CHARACTERconstant); }
    24402440        YY_BREAK
    24412441/* ' stop highlighting */
     
    24442444YY_RULE_SETUP
    24452445#line 296 "lex.ll"
    2446 { BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
     2446{ BEGIN STRING; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
    24472447        YY_BREAK
    24482448case 119:
    24492449YY_RULE_SETUP
    24502450#line 297 "lex.ll"
    2451 { *strtext += std::string( yytext ); }
     2451{ strtext->append( yytext, yyleng ); }
    24522452        YY_BREAK
    24532453case 120:
     
    24552455YY_RULE_SETUP
    24562456#line 298 "lex.ll"
    2457 { BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
     2457{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(STRINGliteral); }
    24582458        YY_BREAK
    24592459/* " stop highlighting */
     
    24622462YY_RULE_SETUP
    24632463#line 302 "lex.ll"
    2464 { rm_underscore(); *strtext += std::string( yytext ); }
     2464{ rm_underscore(); strtext->append( yytext, yyleng ); }
    24652465        YY_BREAK
    24662466case 122:
     
    24732473YY_RULE_SETUP
    24742474#line 304 "lex.ll"
    2475 { *strtext += std::string( yytext ); } // unknown escape character
     2475{ strtext->append( yytext, yyleng ); } // unknown escape character
    24762476        YY_BREAK
    24772477/* punctuation */
  • src/Parser/lex.ll

    ra2a8d2a6 r32a2a99  
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Thu Aug 18 22:17:30 2016
    13  * Update Count     : 472
     12 * Last Modified On : Wed Aug 24 13:27:04 2016
     13 * Update Count     : 487
    1414 */
    1515
     
    141141^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" {
    142142        /* " stop highlighting */
    143         static char *filename[FILENAME_MAX];                            // temporarily store current source-file name
     143        static char filename[FILENAME_MAX];                                     // temporarily store current source-file name
    144144        char *end_num;
    145145        char *begin_string, *end_string;
     
    156156                //std::cout << "file " << filename << " line " << lineno << std::endl;
    157157                yylineno = lineno;
    158                 yyfilename = filename[0];
     158                yyfilename = filename;
    159159        } // if
    160160}
     
    288288
    289289                                /* character constant, allows empty value */
    290 ({cwide_prefix}[_]?)?['] { BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
    291 <QUOTE>[^'\\\n]* { *strtext += std::string( yytext ); }
    292 <QUOTE>['\n]    { BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
     290({cwide_prefix}[_]?)?['] { BEGIN QUOTE; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
     291<QUOTE>[^'\\\n]* { strtext->append( yytext, yyleng ); }
     292<QUOTE>['\n]    { BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(CHARACTERconstant); }
    293293                                /* ' stop highlighting */
    294294
    295295                                /* string constant */
    296 ({swide_prefix}[_]?)?["] { BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
    297 <STRING>[^"\\\n]* { *strtext += std::string( yytext ); }
    298 <STRING>["\n]   { BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
     296({swide_prefix}[_]?)?["] { BEGIN STRING; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
     297<STRING>[^"\\\n]* { strtext->append( yytext, yyleng ); }
     298<STRING>["\n]   { BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(STRINGliteral); }
    299299                                /* " stop highlighting */
    300300
    301301                                /* common character/string constant */
    302 <QUOTE,STRING>{escape_seq} { rm_underscore(); *strtext += std::string( yytext ); }
     302<QUOTE,STRING>{escape_seq} { rm_underscore(); strtext->append( yytext, yyleng ); }
    303303<QUOTE,STRING>"\\"{h_white}*"\n" {}                                             // continuation (ALSO HANDLED BY CPP)
    304 <QUOTE,STRING>"\\" { *strtext += std::string( yytext ); } // unknown escape character
     304<QUOTE,STRING>"\\" { strtext->append( yytext, yyleng ); } // unknown escape character
    305305
    306306                                /* punctuation */
  • src/Parser/parser.cc

    ra2a8d2a6 r32a2a99  
    8383#include "LinkageSpec.h"
    8484
    85 union DeclQualifiers {
    86         unsigned int value;                                                                     // assume 32-bits
    87         struct {
    88                 bool Extern : 1;
    89                 bool Static : 1;
    90                 bool Auto : 1;
    91                 bool Register : 1;
    92                 bool Inline : 1;
    93                 bool Fortran : 1;
    94                 bool Noreturn : 1;
    95                 bool Threadlocal : 1;
    96                 bool Extension : 1;
    97                 bool Lvalue : 1;
    98                 bool Const : 1;
    99                 bool Volatile : 1;
    100                 bool Restrict : 1;
    101                 bool Atomic : 1;
    102         } qual;
    103 }; // DeclQualifiers
    104 DeclQualifiers declQualifiers = { 0 };
    105 
    106 union DeclType {
    107         unsigned int value;                                                                     // assume 32-bits
    108         struct {
    109                 bool Char : 1;
    110                 bool Bool : 1;
    111                 bool Short : 1;
    112                 bool Int : 1;
    113                 bool Float : 1;
    114                 bool Double : 1;
    115                 bool Long : 1;
    116                 bool Signed : 1;
    117                 bool Unsigned : 1;
    118                 bool Void : 1;
    119                 bool Complex : 1;
    120                 bool Imaginary : 1;
    121                 bool Valist : 1;
    122         } type;
    123 }; // DeclType
    124 DeclType declTypes = { 0 };
    125 
    12685extern DeclarationNode * parseTree;
    12786extern LinkageSpec::Spec linkage;
     
    13796
    13897/* Line 268 of yacc.c  */
    139 #line 140 "Parser/parser.cc"
     98#line 99 "Parser/parser.cc"
    14099
    141100/* Enabling traces.  */
     
    388347
    389348/* Line 293 of yacc.c  */
    390 #line 156 "parser.yy"
     349#line 115 "parser.yy"
    391350
    392351        Token tok;
     
    408367
    409368/* Line 293 of yacc.c  */
    410 #line 411 "Parser/parser.cc"
     369#line 370 "Parser/parser.cc"
    411370} YYSTYPE;
    412371# define YYSTYPE_IS_TRIVIAL 1
     
    420379
    421380/* Line 343 of yacc.c  */
    422 #line 423 "Parser/parser.cc"
     381#line 382 "Parser/parser.cc"
    423382
    424383#ifdef short
     
    639598#define YYFINAL  250
    640599/* YYLAST -- Last index in YYTABLE.  */
    641 #define YYLAST   10841
     600#define YYLAST   10863
    642601
    643602/* YYNTOKENS -- Number of terminals.  */
     
    646605#define YYNNTS  241
    647606/* YYNRULES -- Number of rules.  */
    648 #define YYNRULES  750
     607#define YYNRULES  751
    649608/* YYNRULES -- Number of states.  */
    650 #define YYNSTATES  1554
     609#define YYNSTATES  1555
    651610
    652611/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
     
    716675     326,   331,   337,   339,   341,   345,   348,   349,   351,   353,
    717676     355,   357,   359,   361,   363,   365,   367,   369,   371,   373,
    718      376,   382,   389,   397,   399,   403,   405,   409,   410,   412,
    719      414,   416,   418,   420,   422,   424,   426,   428,   435,   440,
    720      443,   451,   453,   457,   459,   462,   464,   467,   469,   472,
    721      475,   481,   489,   495,   505,   511,   521,   523,   527,   529,
    722      531,   535,   539,   542,   544,   547,   550,   551,   553,   556,
    723      560,   561,   563,   566,   570,   574,   579,   580,   582,   584,
    724      587,   593,   601,   608,   615,   620,   624,   629,   632,   636,
    725      639,   643,   647,   651,   655,   661,   665,   669,   674,   676,
    726      682,   689,   695,   702,   712,   723,   733,   744,   747,   749,
    727      752,   755,   758,   760,   767,   776,   787,   800,   815,   816,
    728      818,   819,   821,   823,   827,   832,   840,   841,   843,   847,
    729      849,   853,   855,   857,   859,   863,   865,   867,   869,   873,
    730      874,   876,   880,   885,   887,   891,   893,   895,   899,   903,
    731      907,   911,   915,   918,   922,   929,   933,   937,   942,   944,
    732      947,   950,   954,   960,   969,   977,   985,   991,  1001,  1004,
    733     1007,  1013,  1017,  1023,  1028,  1032,  1037,  1042,  1050,  1054,
    734     1058,  1062,  1066,  1071,  1078,  1080,  1082,  1084,  1086,  1088,
    735     1090,  1092,  1094,  1095,  1097,  1099,  1102,  1104,  1106,  1108,
    736     1110,  1112,  1114,  1116,  1117,  1123,  1125,  1128,  1132,  1134,
    737     1137,  1139,  1141,  1143,  1145,  1147,  1149,  1151,  1153,  1155,
     677     375,   378,   384,   391,   399,   401,   405,   407,   411,   412,
     678     414,   416,   418,   420,   422,   424,   426,   428,   430,   437,
     679     442,   445,   453,   455,   459,   461,   464,   466,   469,   471,
     680     474,   477,   483,   491,   497,   507,   513,   523,   525,   529,
     681     531,   533,   537,   541,   544,   546,   549,   552,   553,   555,
     682     558,   562,   563,   565,   568,   572,   576,   581,   582,   584,
     683     586,   589,   595,   603,   610,   617,   622,   626,   631,   634,
     684     638,   641,   645,   649,   653,   657,   663,   667,   671,   676,
     685     678,   684,   691,   697,   704,   714,   725,   735,   746,   749,
     686     751,   754,   757,   760,   762,   769,   778,   789,   802,   817,
     687     818,   820,   821,   823,   825,   829,   834,   842,   843,   845,
     688     849,   851,   855,   857,   859,   861,   865,   867,   869,   871,
     689     875,   876,   878,   882,   887,   889,   893,   895,   897,   901,
     690     905,   909,   913,   917,   920,   924,   931,   935,   939,   944,
     691     946,   949,   952,   956,   962,   971,   979,   987,   993,  1003,
     692    1006,  1009,  1015,  1019,  1025,  1030,  1034,  1039,  1044,  1052,
     693    1056,  1060,  1064,  1068,  1073,  1080,  1082,  1084,  1086,  1088,
     694    1090,  1092,  1094,  1096,  1097,  1099,  1101,  1104,  1106,  1108,
     695    1110,  1112,  1114,  1116,  1118,  1119,  1125,  1127,  1130,  1134,
     696    1136,  1139,  1141,  1143,  1145,  1147,  1149,  1151,  1153,  1155,
    738697    1157,  1159,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
    739     1177,  1179,  1181,  1184,  1187,  1191,  1195,  1197,  1201,  1203,
    740     1206,  1209,  1212,  1217,  1222,  1227,  1232,  1234,  1237,  1240,
    741     1244,  1246,  1249,  1252,  1254,  1257,  1260,  1264,  1266,  1269,
    742     1272,  1274,  1276,  1281,  1284,  1285,  1292,  1300,  1303,  1306,
    743     1309,  1310,  1313,  1316,  1320,  1323,  1327,  1329,  1332,  1336,
    744     1339,  1342,  1347,  1348,  1350,  1353,  1356,  1358,  1359,  1361,
    745     1364,  1367,  1373,  1376,  1377,  1385,  1388,  1393,  1394,  1397,
    746     1398,  1400,  1402,  1404,  1410,  1416,  1422,  1424,  1430,  1436,
    747     1446,  1448,  1454,  1455,  1457,  1459,  1465,  1467,  1469,  1475,
    748     1481,  1483,  1487,  1491,  1496,  1498,  1500,  1502,  1504,  1507,
    749     1509,  1513,  1517,  1519,  1522,  1524,  1528,  1530,  1532,  1534,
    750     1536,  1538,  1540,  1542,  1544,  1546,  1548,  1550,  1553,  1555,
    751     1557,  1559,  1562,  1563,  1566,  1569,  1571,  1576,  1577,  1579,
    752     1582,  1586,  1591,  1594,  1597,  1599,  1602,  1605,  1611,  1617,
    753     1625,  1632,  1634,  1637,  1640,  1644,  1646,  1649,  1652,  1657,
    754     1660,  1665,  1666,  1671,  1674,  1676,  1678,  1680,  1681,  1684,
    755     1690,  1696,  1710,  1712,  1714,  1718,  1722,  1725,  1729,  1733,
    756     1736,  1741,  1743,  1750,  1760,  1761,  1773,  1775,  1779,  1783,
    757     1787,  1789,  1791,  1797,  1800,  1806,  1807,  1809,  1811,  1815,
    758     1816,  1818,  1820,  1822,  1824,  1825,  1832,  1835,  1837,  1840,
    759     1845,  1848,  1852,  1856,  1860,  1865,  1871,  1877,  1883,  1890,
    760     1892,  1894,  1896,  1900,  1901,  1907,  1908,  1910,  1912,  1915,
    761     1922,  1924,  1928,  1929,  1931,  1936,  1938,  1940,  1942,  1944,
    762     1947,  1949,  1952,  1955,  1957,  1961,  1964,  1968,  1972,  1975,
    763     1980,  1985,  1989,  1998,  2002,  2005,  2007,  2010,  2017,  2026,
    764     2030,  2033,  2037,  2041,  2046,  2051,  2055,  2057,  2059,  2061,
    765     2066,  2073,  2077,  2080,  2084,  2088,  2093,  2098,  2102,  2105,
    766     2107,  2110,  2113,  2115,  2119,  2122,  2126,  2130,  2133,  2138,
    767     2143,  2147,  2154,  2163,  2167,  2170,  2172,  2175,  2178,  2181,
    768     2185,  2189,  2192,  2197,  2202,  2206,  2213,  2222,  2226,  2229,
    769     2231,  2234,  2237,  2239,  2241,  2244,  2248,  2252,  2255,  2260,
    770     2267,  2276,  2278,  2281,  2284,  2286,  2289,  2292,  2296,  2300,
    771     2302,  2307,  2312,  2316,  2322,  2331,  2335,  2338,  2342,  2344,
    772     2350,  2356,  2363,  2370,  2372,  2375,  2378,  2380,  2383,  2386,
    773     2390,  2394,  2396,  2401,  2406,  2410,  2416,  2425,  2429,  2431,
    774     2434,  2436,  2439,  2446,  2452,  2459,  2467,  2475,  2477,  2480,
    775     2483,  2485,  2488,  2491,  2495,  2499,  2501,  2506,  2511,  2515,
    776     2524,  2528,  2530,  2532,  2535,  2537,  2539,  2542,  2546,  2549,
    777     2553,  2556,  2560,  2564,  2567,  2572,  2576,  2579,  2583,  2586,
    778     2591,  2595,  2598,  2605,  2612,  2619,  2627,  2629,  2632,  2634,
    779     2636,  2638,  2641,  2645,  2648,  2652,  2655,  2659,  2663,  2668,
    780     2671,  2675,  2680,  2683,  2689,  2695,  2702,  2709,  2710,  2712,
    781     2713
     698    1177,  1179,  1181,  1183,  1186,  1189,  1193,  1197,  1199,  1203,
     699    1205,  1208,  1211,  1214,  1219,  1224,  1229,  1234,  1236,  1239,
     700    1242,  1246,  1248,  1251,  1254,  1256,  1259,  1262,  1266,  1268,
     701    1271,  1274,  1276,  1278,  1283,  1286,  1287,  1294,  1302,  1305,
     702    1308,  1311,  1312,  1315,  1318,  1322,  1325,  1329,  1331,  1334,
     703    1338,  1341,  1344,  1349,  1350,  1352,  1355,  1358,  1360,  1361,
     704    1363,  1366,  1369,  1375,  1378,  1379,  1387,  1390,  1395,  1396,
     705    1399,  1400,  1402,  1404,  1406,  1412,  1418,  1424,  1426,  1432,
     706    1438,  1448,  1450,  1456,  1457,  1459,  1461,  1467,  1469,  1471,
     707    1477,  1483,  1485,  1489,  1493,  1498,  1500,  1502,  1504,  1506,
     708    1509,  1511,  1515,  1519,  1521,  1524,  1526,  1530,  1532,  1534,
     709    1536,  1538,  1540,  1542,  1544,  1546,  1548,  1550,  1552,  1555,
     710    1557,  1559,  1561,  1564,  1565,  1568,  1571,  1573,  1578,  1579,
     711    1581,  1584,  1588,  1593,  1596,  1599,  1601,  1604,  1607,  1613,
     712    1619,  1627,  1634,  1636,  1639,  1642,  1646,  1648,  1651,  1654,
     713    1659,  1662,  1667,  1668,  1673,  1676,  1678,  1680,  1682,  1683,
     714    1686,  1692,  1698,  1712,  1714,  1716,  1720,  1724,  1727,  1731,
     715    1735,  1738,  1743,  1745,  1752,  1762,  1763,  1775,  1777,  1781,
     716    1785,  1789,  1791,  1793,  1799,  1802,  1808,  1809,  1811,  1813,
     717    1817,  1818,  1820,  1822,  1824,  1826,  1827,  1834,  1837,  1839,
     718    1842,  1847,  1850,  1854,  1858,  1862,  1867,  1873,  1879,  1885,
     719    1892,  1894,  1896,  1898,  1902,  1903,  1909,  1910,  1912,  1914,
     720    1917,  1924,  1926,  1930,  1931,  1933,  1938,  1940,  1942,  1944,
     721    1946,  1949,  1951,  1954,  1957,  1959,  1963,  1966,  1970,  1974,
     722    1977,  1982,  1987,  1991,  2000,  2004,  2007,  2009,  2012,  2019,
     723    2028,  2032,  2035,  2039,  2043,  2048,  2053,  2057,  2059,  2061,
     724    2063,  2068,  2075,  2079,  2082,  2086,  2090,  2095,  2100,  2104,
     725    2107,  2109,  2112,  2115,  2117,  2121,  2124,  2128,  2132,  2135,
     726    2140,  2145,  2149,  2156,  2165,  2169,  2172,  2174,  2177,  2180,
     727    2183,  2187,  2191,  2194,  2199,  2204,  2208,  2215,  2224,  2228,
     728    2231,  2233,  2236,  2239,  2241,  2243,  2246,  2250,  2254,  2257,
     729    2262,  2269,  2278,  2280,  2283,  2286,  2288,  2291,  2294,  2298,
     730    2302,  2304,  2309,  2314,  2318,  2324,  2333,  2337,  2340,  2344,
     731    2346,  2352,  2358,  2365,  2372,  2374,  2377,  2380,  2382,  2385,
     732    2388,  2392,  2396,  2398,  2403,  2408,  2412,  2418,  2427,  2431,
     733    2433,  2436,  2438,  2441,  2448,  2454,  2461,  2469,  2477,  2479,
     734    2482,  2485,  2487,  2490,  2493,  2497,  2501,  2503,  2508,  2513,
     735    2517,  2526,  2530,  2532,  2534,  2537,  2539,  2541,  2544,  2548,
     736    2551,  2555,  2558,  2562,  2566,  2569,  2574,  2578,  2581,  2585,
     737    2588,  2593,  2597,  2600,  2607,  2614,  2621,  2629,  2631,  2634,
     738    2636,  2638,  2640,  2643,  2647,  2650,  2654,  2657,  2661,  2665,
     739    2670,  2673,  2677,  2682,  2685,  2691,  2697,  2704,  2711,  2712,
     740    2714,  2715
    782741};
    783742
     
    820779      -1,   162,   129,   170,   130,   168,    -1,   163,    -1,   163,
    821780      -1,   149,   167,   165,    -1,   168,   373,    -1,    -1,   165,
    822       -1,   131,    -1,    97,    -1,    98,    -1,    99,    -1,   100,
    823       -1,   101,    -1,   102,    -1,   103,    -1,   104,    -1,   105,
    824       -1,   106,    -1,   111,   112,    -1,   111,   134,   165,   135,
    825      112,    -1,   111,   134,   116,   169,   135,   112,    -1,   111,
    826      134,   165,   116,   169,   135,   112,    -1,   166,    -1,   169,
    827      116,   166,    -1,   165,    -1,   170,   116,   165,    -1,    -1,
    828      170,    -1,   173,    -1,   174,    -1,   178,    -1,   179,    -1,
    829      191,    -1,   193,    -1,   194,    -1,   199,    -1,   127,   144,
    830      114,   145,   115,   132,    -1,    72,   130,   312,   172,    -1,
    831      114,   115,    -1,   114,   134,   134,   210,   175,   135,   115,
    832       -1,   176,    -1,   175,   134,   176,    -1,   213,    -1,    40,
    833      213,    -1,   308,    -1,   172,   135,    -1,   172,    -1,   177,
    834      172,    -1,   171,   132,    -1,    41,   109,   170,   110,   172,
    835       -1,    41,   109,   170,   110,   172,    42,   172,    -1,    43,
    836      109,   170,   110,   184,    -1,    43,   109,   170,   110,   114,
    837      134,   206,   185,   115,    -1,    53,   109,   170,   110,   184,
    838       -1,    53,   109,   170,   110,   114,   134,   206,   187,   115,
    839       -1,   164,    -1,   164,    96,   164,    -1,   310,    -1,   180,
    840       -1,   181,   116,   180,    -1,    44,   181,   130,    -1,    45,
    841      130,    -1,   182,    -1,   183,   182,    -1,   183,   172,    -1,
    842       -1,   186,    -1,   183,   177,    -1,   186,   183,   177,    -1,
    843       -1,   188,    -1,   183,   190,    -1,   183,   177,   189,    -1,
    844      188,   183,   190,    -1,   188,   183,   177,   189,    -1,    -1,
    845      190,    -1,    56,    -1,    56,   132,    -1,    47,   109,   170,
    846      110,   172,    -1,    46,   172,    47,   109,   170,   110,   132,
    847       -1,    48,   109,   134,   192,   110,   172,    -1,   171,   135,
    848      132,   171,   132,   171,    -1,   213,   171,   132,   171,    -1,
    849       51,    72,   132,    -1,    51,   117,   170,   132,    -1,    50,
    850      132,    -1,    50,    72,   132,    -1,    49,   132,    -1,    49,
    851       72,   132,    -1,    52,   171,   132,    -1,    61,   166,   132,
    852       -1,    62,   166,   132,    -1,    62,   166,    63,   165,   132,
    853       -1,    57,   174,   195,    -1,    57,   174,   197,    -1,    57,
    854      174,   195,   197,    -1,   196,    -1,    58,   109,    96,   110,
    855      174,    -1,   196,    58,   109,    96,   110,   174,    -1,    59,
    856      109,    96,   110,   174,    -1,   196,    59,   109,    96,   110,
    857      174,    -1,    58,   109,   134,   134,   198,   135,   110,   174,
    858      135,    -1,   196,    58,   109,   134,   134,   198,   135,   110,
    859      174,   135,    -1,    59,   109,   134,   134,   198,   135,   110,
    860      174,   135,    -1,   196,    59,   109,   134,   134,   198,   135,
    861      110,   174,   135,    -1,    60,   174,    -1,   226,    -1,   226,
    862      309,    -1,   226,   357,    -1,   366,   139,    -1,   366,    -1,
    863       64,   200,   109,   141,   110,   132,    -1,    64,   200,   109,
    864      141,   130,   201,   110,   132,    -1,    64,   200,   109,   141,
    865      130,   201,   130,   201,   110,   132,    -1,    64,   200,   109,
    866      141,   130,   201,   130,   201,   130,   204,   110,   132,    -1,
    867       64,   200,    51,   109,   141,   130,   130,   201,   130,   204,
    868      130,   205,   110,   132,    -1,    -1,    11,    -1,    -1,   202,
    869       -1,   203,    -1,   202,   116,   203,    -1,   141,   109,   164,
    870      110,    -1,   111,   164,   112,   141,   109,   164,   110,    -1,
    871       -1,   141,    -1,   204,   116,   141,    -1,   139,    -1,   205,
    872      116,   139,    -1,   135,    -1,   207,    -1,   213,    -1,   207,
    873      134,   213,    -1,   135,    -1,   209,    -1,   223,    -1,   209,
    874      134,   223,    -1,    -1,   211,    -1,    29,   212,   132,    -1,
    875      211,    29,   212,   132,    -1,   274,    -1,   212,   116,   274,
    876       -1,   214,    -1,   223,    -1,   215,   135,   132,    -1,   220,
    877      135,   132,    -1,   217,   135,   132,    -1,   293,   135,   132,
    878       -1,   296,   135,   132,    -1,   216,   277,    -1,   232,   216,
    879      277,    -1,   215,   135,   116,   134,   272,   277,    -1,   367,
    880      272,   311,    -1,   370,   272,   311,    -1,   228,   370,   272,
    881      311,    -1,   218,    -1,   228,   218,    -1,   232,   218,    -1,
    882      232,   228,   218,    -1,   217,   135,   116,   134,   272,    -1,
    883      111,   112,   272,   109,   134,   260,   135,   110,    -1,   370,
    884      272,   109,   134,   260,   135,   110,    -1,   219,   272,   109,
    885      134,   260,   135,   110,    -1,   111,   134,   262,   135,   112,
    886       -1,   111,   134,   262,   135,   116,   134,   263,   135,   112,
    887       -1,     3,   216,    -1,     3,   218,    -1,   220,   135,   116,
    888      134,   139,    -1,     3,   226,   309,    -1,   221,   135,   116,
    889      134,   309,    -1,   228,     3,   226,   309,    -1,   226,     3,
    890      309,    -1,   226,     3,   228,   309,    -1,     3,   139,   131,
    891      165,    -1,   222,   135,   116,   134,   139,   131,   165,    -1,
    892      224,   135,   132,    -1,   221,   135,   132,    -1,   222,   135,
    893      132,    -1,   240,   135,   132,    -1,   225,   309,   311,   277,
    894       -1,   224,   116,   312,   309,   311,   277,    -1,   236,    -1,
    895      240,    -1,   242,    -1,   283,    -1,   237,    -1,   241,    -1,
    896      243,    -1,   284,    -1,    -1,   228,    -1,   229,    -1,   228,
    897      229,    -1,   230,    -1,   314,    -1,    10,    -1,    12,    -1,
    898       11,    -1,    14,    -1,    67,    -1,    -1,    13,   109,   231,
    899      286,   110,    -1,   233,    -1,   228,   233,    -1,   232,   228,
    900      233,    -1,   234,    -1,   233,   234,    -1,     5,    -1,     7,
    901       -1,     4,    -1,     6,    -1,     8,    -1,     9,    -1,    69,
    902       -1,    71,    -1,    16,    -1,    21,    -1,    20,    -1,    18,
    903       -1,    19,    -1,    17,    -1,    22,    -1,    23,    -1,    15,
    904       -1,    25,    -1,    26,    -1,    27,    -1,    24,    -1,   237,
    905       -1,   232,   237,    -1,   236,   234,    -1,   236,   234,   228,
    906       -1,   236,   234,   237,    -1,   238,    -1,   227,   239,   227,
    907       -1,   235,    -1,   228,   235,    -1,   238,   229,    -1,   238,
    908      235,    -1,    28,   109,   276,   110,    -1,    28,   109,   170,
    909      110,    -1,    78,   109,   276,   110,    -1,    78,   109,   170,
    910      110,    -1,   241,    -1,   232,   241,    -1,   240,   234,    -1,
    911      240,   234,   228,    -1,   244,    -1,   228,   244,    -1,   241,
    912      229,    -1,   243,    -1,   232,   243,    -1,   242,   234,    -1,
    913      242,   234,   228,    -1,    74,    -1,   228,    74,    -1,   243,
    914      229,    -1,   245,    -1,   256,    -1,   247,   114,   248,   115,
    915       -1,   247,   274,    -1,    -1,   247,   274,   246,   114,   248,
    916      115,    -1,   247,   109,   292,   110,   114,   248,   115,    -1,
    917      247,   285,    -1,    31,   312,    -1,    32,   312,    -1,    -1,
    918      248,   249,    -1,   250,   132,    -1,    40,   250,   132,    -1,
    919      251,   132,    -1,    40,   251,   132,    -1,   366,    -1,   366,
    920      274,    -1,   250,   116,   274,    -1,   250,   116,    -1,   226,
    921      252,    -1,   251,   116,   312,   252,    -1,    -1,   254,    -1,
    922      318,   253,    -1,   331,   253,    -1,   357,    -1,    -1,   254,
    923       -1,   130,   164,    -1,    30,   312,    -1,   255,   114,   258,
    924      372,   115,    -1,   255,   274,    -1,    -1,   255,   274,   257,
    925      114,   258,   372,   115,    -1,   274,   259,    -1,   258,   116,
    926      274,   259,    -1,    -1,   131,   164,    -1,    -1,   261,    -1,
    927      263,    -1,   262,    -1,   262,   135,   116,   134,   263,    -1,
    928      263,   135,   116,   134,    96,    -1,   262,   135,   116,   134,
    929       96,    -1,   267,    -1,   263,   135,   116,   134,   267,    -1,
    930      262,   135,   116,   134,   267,    -1,   262,   135,   116,   134,
    931      263,   135,   116,   134,   267,    -1,   268,    -1,   263,   135,
    932      116,   134,   268,    -1,    -1,   265,    -1,   266,    -1,   266,
    933      135,   116,   134,    96,    -1,   270,    -1,   269,    -1,   266,
    934      135,   116,   134,   270,    -1,   266,   135,   116,   134,   269,
    935       -1,   269,    -1,   362,   272,   373,    -1,   370,   272,   373,
    936       -1,   228,   370,   272,   373,    -1,   218,    -1,   270,    -1,
    937      362,    -1,   370,    -1,   228,   370,    -1,   371,    -1,   225,
    938      336,   373,    -1,   225,   340,   373,    -1,   225,    -1,   225,
    939      351,    -1,   139,    -1,   271,   116,   139,    -1,   137,    -1,
    940       74,    -1,    75,    -1,   138,    -1,    74,    -1,    75,    -1,
    941      139,    -1,    74,    -1,    75,    -1,   366,    -1,   226,    -1,
    942      226,   357,    -1,   366,    -1,   371,    -1,   226,    -1,   226,
    943      345,    -1,    -1,   131,   278,    -1,   107,   278,    -1,   165,
    944       -1,   114,   279,   372,   115,    -1,    -1,   278,    -1,   280,
    945      278,    -1,   279,   116,   278,    -1,   279,   116,   280,   278,
    946       -1,   281,   130,    -1,   274,   130,    -1,   282,    -1,   281,
    947      282,    -1,   113,   274,    -1,   111,   134,   165,   135,   112,
    948       -1,   111,   134,   310,   135,   112,    -1,   111,   134,   164,
    949       96,   164,   135,   112,    -1,   113,   111,   134,   147,   135,
    950      112,    -1,   284,    -1,   232,   284,    -1,   283,   234,    -1,
    951      283,   234,   228,    -1,   285,    -1,   228,   285,    -1,   284,
    952      229,    -1,    75,   109,   292,   110,    -1,   287,   373,    -1,
    953      286,   116,   287,   373,    -1,    -1,   289,   274,   288,   290,
    954       -1,   226,   336,    -1,    33,    -1,    35,    -1,    34,    -1,
    955       -1,   290,   291,    -1,   128,   274,   109,   292,   110,    -1,
    956      128,   114,   134,   298,   115,    -1,   128,   109,   134,   286,
    957      135,   110,   114,   134,   298,   115,   109,   292,   110,    -1,
    958      276,    -1,   165,    -1,   292,   116,   276,    -1,   292,   116,
    959      165,    -1,    33,   294,    -1,   233,    33,   294,    -1,   293,
    960      116,   294,    -1,   295,   290,    -1,   295,   290,   131,   276,
    961       -1,   274,    -1,   273,   109,   134,   286,   135,   110,    -1,
    962       36,   274,   109,   134,   286,   135,   110,   114,   115,    -1,
    963       -1,    36,   274,   109,   134,   286,   135,   110,   114,   297,
    964      298,   115,    -1,   299,    -1,   298,   134,   299,    -1,   300,
    965      135,   132,    -1,   301,   135,   132,    -1,   216,    -1,   218,
    966       -1,   300,   135,   116,   134,   272,    -1,   226,   309,    -1,
    967      301,   135,   116,   134,   309,    -1,    -1,   303,    -1,   305,
    968       -1,   303,   134,   305,    -1,    -1,   303,    -1,   213,    -1,
    969      307,    -1,   199,    -1,    -1,     5,    82,   306,   114,   304,
    970      115,    -1,    40,   305,    -1,   308,    -1,   323,   174,    -1,
    971      327,   134,   208,   174,    -1,   217,   174,    -1,   225,   323,
    972      174,    -1,   228,   323,   174,    -1,   232,   323,   174,    -1,
    973      232,   228,   323,   174,    -1,   225,   327,   134,   208,   174,
    974       -1,   228,   327,   134,   208,   174,    -1,   232,   327,   134,
    975      208,   174,    -1,   232,   228,   327,   134,   208,   174,    -1,
    976      318,    -1,   331,    -1,   323,    -1,   164,   122,   164,    -1,
    977       -1,    64,   109,   142,   110,   312,    -1,    -1,   313,    -1,
    978      314,    -1,   313,   314,    -1,    39,   109,   109,   315,   110,
    979      110,    -1,   316,    -1,   315,   116,   316,    -1,    -1,   317,
    980       -1,   317,   109,   171,   110,    -1,   272,    -1,   234,    -1,
    981      235,    -1,   229,    -1,   319,   312,    -1,   320,    -1,   321,
    982      312,    -1,   322,   312,    -1,   137,    -1,   109,   319,   110,
    983       -1,   150,   318,    -1,   150,   228,   318,    -1,   109,   320,
    984      110,    -1,   319,   349,    -1,   109,   320,   110,   349,    -1,
    985      109,   321,   110,   350,    -1,   109,   321,   110,    -1,   109,
    986      320,   110,   109,   134,   264,   135,   110,    -1,   109,   322,
    987      110,    -1,   324,   312,    -1,   325,    -1,   326,   312,    -1,
    988      319,   109,   134,   264,   135,   110,    -1,   109,   325,   110,
    989      109,   134,   264,   135,   110,    -1,   109,   324,   110,    -1,
    990      150,   323,    -1,   150,   228,   323,    -1,   109,   325,   110,
    991       -1,   109,   325,   110,   349,    -1,   109,   326,   110,   350,
    992       -1,   109,   326,   110,    -1,   328,    -1,   329,    -1,   330,
    993       -1,   319,   109,   271,   110,    -1,   109,   329,   110,   109,
    994      271,   110,    -1,   109,   328,   110,    -1,   150,   327,    -1,
    995      150,   228,   327,    -1,   109,   329,   110,    -1,   109,   329,
    996      110,   349,    -1,   109,   330,   110,   350,    -1,   109,   330,
    997      110,    -1,   332,   312,    -1,   333,    -1,   334,   312,    -1,
    998      335,   312,    -1,   341,    -1,   109,   332,   110,    -1,   150,
    999      331,    -1,   150,   228,   331,    -1,   109,   333,   110,    -1,
    1000      332,   349,    -1,   109,   333,   110,   349,    -1,   109,   334,
    1001      110,   350,    -1,   109,   334,   110,    -1,   332,   109,   134,
    1002      264,   135,   110,    -1,   109,   333,   110,   109,   134,   264,
    1003      135,   110,    -1,   109,   335,   110,    -1,   319,   312,    -1,
    1004      337,    -1,   338,   312,    -1,   339,   312,    -1,   150,   336,
    1005       -1,   150,   228,   336,    -1,   109,   337,   110,    -1,   319,
    1006      355,    -1,   109,   337,   110,   349,    -1,   109,   338,   110,
    1007      350,    -1,   109,   338,   110,    -1,   319,   109,   134,   264,
    1008      135,   110,    -1,   109,   337,   110,   109,   134,   264,   135,
    1009      110,    -1,   109,   339,   110,    -1,   341,   312,    -1,   342,
    1010       -1,   343,   312,    -1,   344,   312,    -1,    74,    -1,    75,
    1011       -1,   150,   340,    -1,   150,   228,   340,    -1,   109,   342,
    1012      110,    -1,   341,   355,    -1,   109,   342,   110,   355,    -1,
    1013      341,   109,   134,   264,   135,   110,    -1,   109,   342,   110,
    1014      109,   134,   264,   135,   110,    -1,   346,    -1,   347,   312,
    1015       -1,   348,   312,    -1,   150,    -1,   150,   228,    -1,   150,
    1016      345,    -1,   150,   228,   345,    -1,   109,   346,   110,    -1,
    1017      349,    -1,   109,   346,   110,   349,    -1,   109,   347,   110,
    1018      350,    -1,   109,   347,   110,    -1,   109,   134,   264,   135,
    1019      110,    -1,   109,   346,   110,   109,   134,   264,   135,   110,
    1020       -1,   109,   348,   110,    -1,   111,   112,    -1,   111,   112,
    1021      350,    -1,   350,    -1,   111,   134,   165,   135,   112,    -1,
    1022      111,   134,   117,   135,   112,    -1,   350,   111,   134,   165,
    1023      135,   112,    -1,   350,   111,   134,   117,   135,   112,    -1,
    1024      352,    -1,   353,   312,    -1,   354,   312,    -1,   150,    -1,
    1025      150,   228,    -1,   150,   351,    -1,   150,   228,   351,    -1,
    1026      109,   352,   110,    -1,   355,    -1,   109,   352,   110,   355,
    1027       -1,   109,   353,   110,   350,    -1,   109,   353,   110,    -1,
    1028      109,   134,   264,   135,   110,    -1,   109,   352,   110,   109,
    1029      134,   264,   135,   110,    -1,   109,   354,   110,    -1,   356,
    1030       -1,   356,   350,    -1,   350,    -1,   111,   112,    -1,   111,
    1031      134,   228,   117,   135,   112,    -1,   111,   134,   228,   135,
    1032      112,    -1,   111,   134,   228,   165,   135,   112,    -1,   111,
    1033      134,     7,   227,   165,   135,   112,    -1,   111,   134,   228,
    1034        7,   165,   135,   112,    -1,   358,    -1,   359,   312,    -1,
    1035      360,   312,    -1,   150,    -1,   150,   228,    -1,   150,   357,
    1036       -1,   150,   228,   357,    -1,   109,   358,   110,    -1,   349,
    1037       -1,   109,   358,   110,   349,    -1,   109,   359,   110,   350,
    1038       -1,   109,   359,   110,    -1,   109,   358,   110,   109,   134,
    1039      264,   135,   110,    -1,   109,   360,   110,    -1,   362,    -1,
    1040      370,    -1,   228,   370,    -1,   363,    -1,   364,    -1,   150,
    1041      226,    -1,   228,   150,   226,    -1,   150,   371,    -1,   228,
    1042      150,   371,    -1,   150,   361,    -1,   228,   150,   361,    -1,
    1043      111,   112,   226,    -1,   365,   226,    -1,   111,   112,   350,
    1044      226,    -1,   365,   350,   226,    -1,   350,   226,    -1,   111,
    1045      112,   363,    -1,   365,   363,    -1,   111,   112,   350,   363,
    1046       -1,   365,   350,   363,    -1,   350,   363,    -1,   111,   134,
    1047      228,   117,   135,   112,    -1,   111,   134,   228,   165,   135,
    1048      112,    -1,   111,   134,   232,   165,   135,   112,    -1,   111,
    1049      134,   232,   228,   165,   135,   112,    -1,   370,    -1,   228,
    1050      370,    -1,   367,    -1,   368,    -1,   369,    -1,   150,   226,
    1051       -1,   228,   150,   226,    -1,   150,   371,    -1,   228,   150,
    1052      371,    -1,   150,   366,    -1,   228,   150,   366,    -1,   111,
    1053      112,   226,    -1,   111,   112,   350,   226,    -1,   350,   226,
    1054       -1,   111,   112,   368,    -1,   111,   112,   350,   368,    -1,
    1055      350,   368,    -1,   111,   134,   263,   135,   112,    -1,   111,
    1056      112,   109,   260,   110,    -1,   370,   109,   134,   260,   135,
    1057      110,    -1,   219,   109,   134,   260,   135,   110,    -1,    -1,
    1058      116,    -1,    -1,   131,   165,    -1
     781      -1,   131,    -1,   107,    -1,    97,    -1,    98,    -1,    99,
     782      -1,   100,    -1,   101,    -1,   102,    -1,   103,    -1,   104,
     783      -1,   105,    -1,   106,    -1,   111,   112,    -1,   111,   134,
     784     165,   135,   112,    -1,   111,   134,   116,   169,   135,   112,
     785      -1,   111,   134,   165,   116,   169,   135,   112,    -1,   166,
     786      -1,   169,   116,   166,    -1,   165,    -1,   170,   116,   165,
     787      -1,    -1,   170,    -1,   173,    -1,   174,    -1,   178,    -1,
     788     179,    -1,   191,    -1,   193,    -1,   194,    -1,   199,    -1,
     789     127,   144,   114,   145,   115,   132,    -1,    72,   130,   312,
     790     172,    -1,   114,   115,    -1,   114,   134,   134,   210,   175,
     791     135,   115,    -1,   176,    -1,   175,   134,   176,    -1,   213,
     792      -1,    40,   213,    -1,   308,    -1,   172,   135,    -1,   172,
     793      -1,   177,   172,    -1,   171,   132,    -1,    41,   109,   170,
     794     110,   172,    -1,    41,   109,   170,   110,   172,    42,   172,
     795      -1,    43,   109,   170,   110,   184,    -1,    43,   109,   170,
     796     110,   114,   134,   206,   185,   115,    -1,    53,   109,   170,
     797     110,   184,    -1,    53,   109,   170,   110,   114,   134,   206,
     798     187,   115,    -1,   164,    -1,   164,    96,   164,    -1,   310,
     799      -1,   180,    -1,   181,   116,   180,    -1,    44,   181,   130,
     800      -1,    45,   130,    -1,   182,    -1,   183,   182,    -1,   183,
     801     172,    -1,    -1,   186,    -1,   183,   177,    -1,   186,   183,
     802     177,    -1,    -1,   188,    -1,   183,   190,    -1,   183,   177,
     803     189,    -1,   188,   183,   190,    -1,   188,   183,   177,   189,
     804      -1,    -1,   190,    -1,    56,    -1,    56,   132,    -1,    47,
     805     109,   170,   110,   172,    -1,    46,   172,    47,   109,   170,
     806     110,   132,    -1,    48,   109,   134,   192,   110,   172,    -1,
     807     171,   135,   132,   171,   132,   171,    -1,   213,   171,   132,
     808     171,    -1,    51,    72,   132,    -1,    51,   117,   170,   132,
     809      -1,    50,   132,    -1,    50,    72,   132,    -1,    49,   132,
     810      -1,    49,    72,   132,    -1,    52,   171,   132,    -1,    61,
     811     166,   132,    -1,    62,   166,   132,    -1,    62,   166,    63,
     812     165,   132,    -1,    57,   174,   195,    -1,    57,   174,   197,
     813      -1,    57,   174,   195,   197,    -1,   196,    -1,    58,   109,
     814      96,   110,   174,    -1,   196,    58,   109,    96,   110,   174,
     815      -1,    59,   109,    96,   110,   174,    -1,   196,    59,   109,
     816      96,   110,   174,    -1,    58,   109,   134,   134,   198,   135,
     817     110,   174,   135,    -1,   196,    58,   109,   134,   134,   198,
     818     135,   110,   174,   135,    -1,    59,   109,   134,   134,   198,
     819     135,   110,   174,   135,    -1,   196,    59,   109,   134,   134,
     820     198,   135,   110,   174,   135,    -1,    60,   174,    -1,   226,
     821      -1,   226,   309,    -1,   226,   357,    -1,   366,   139,    -1,
     822     366,    -1,    64,   200,   109,   141,   110,   132,    -1,    64,
     823     200,   109,   141,   130,   201,   110,   132,    -1,    64,   200,
     824     109,   141,   130,   201,   130,   201,   110,   132,    -1,    64,
     825     200,   109,   141,   130,   201,   130,   201,   130,   204,   110,
     826     132,    -1,    64,   200,    51,   109,   141,   130,   130,   201,
     827     130,   204,   130,   205,   110,   132,    -1,    -1,    11,    -1,
     828      -1,   202,    -1,   203,    -1,   202,   116,   203,    -1,   141,
     829     109,   164,   110,    -1,   111,   164,   112,   141,   109,   164,
     830     110,    -1,    -1,   141,    -1,   204,   116,   141,    -1,   139,
     831      -1,   205,   116,   139,    -1,   135,    -1,   207,    -1,   213,
     832      -1,   207,   134,   213,    -1,   135,    -1,   209,    -1,   223,
     833      -1,   209,   134,   223,    -1,    -1,   211,    -1,    29,   212,
     834     132,    -1,   211,    29,   212,   132,    -1,   274,    -1,   212,
     835     116,   274,    -1,   214,    -1,   223,    -1,   215,   135,   132,
     836      -1,   220,   135,   132,    -1,   217,   135,   132,    -1,   293,
     837     135,   132,    -1,   296,   135,   132,    -1,   216,   277,    -1,
     838     232,   216,   277,    -1,   215,   135,   116,   134,   272,   277,
     839      -1,   367,   272,   311,    -1,   370,   272,   311,    -1,   228,
     840     370,   272,   311,    -1,   218,    -1,   228,   218,    -1,   232,
     841     218,    -1,   232,   228,   218,    -1,   217,   135,   116,   134,
     842     272,    -1,   111,   112,   272,   109,   134,   260,   135,   110,
     843      -1,   370,   272,   109,   134,   260,   135,   110,    -1,   219,
     844     272,   109,   134,   260,   135,   110,    -1,   111,   134,   262,
     845     135,   112,    -1,   111,   134,   262,   135,   116,   134,   263,
     846     135,   112,    -1,     3,   216,    -1,     3,   218,    -1,   220,
     847     135,   116,   134,   139,    -1,     3,   226,   309,    -1,   221,
     848     135,   116,   134,   309,    -1,   228,     3,   226,   309,    -1,
     849     226,     3,   309,    -1,   226,     3,   228,   309,    -1,     3,
     850     139,   131,   165,    -1,   222,   135,   116,   134,   139,   131,
     851     165,    -1,   224,   135,   132,    -1,   221,   135,   132,    -1,
     852     222,   135,   132,    -1,   240,   135,   132,    -1,   225,   309,
     853     311,   277,    -1,   224,   116,   312,   309,   311,   277,    -1,
     854     236,    -1,   240,    -1,   242,    -1,   283,    -1,   237,    -1,
     855     241,    -1,   243,    -1,   284,    -1,    -1,   228,    -1,   229,
     856      -1,   228,   229,    -1,   230,    -1,   314,    -1,    10,    -1,
     857      12,    -1,    11,    -1,    14,    -1,    67,    -1,    -1,    13,
     858     109,   231,   286,   110,    -1,   233,    -1,   228,   233,    -1,
     859     232,   228,   233,    -1,   234,    -1,   233,   234,    -1,     5,
     860      -1,     7,    -1,     4,    -1,     6,    -1,     8,    -1,     9,
     861      -1,    69,    -1,    71,    -1,    16,    -1,    21,    -1,    20,
     862      -1,    18,    -1,    19,    -1,    17,    -1,    22,    -1,    23,
     863      -1,    15,    -1,    25,    -1,    26,    -1,    27,    -1,    24,
     864      -1,   237,    -1,   232,   237,    -1,   236,   234,    -1,   236,
     865     234,   228,    -1,   236,   234,   237,    -1,   238,    -1,   227,
     866     239,   227,    -1,   235,    -1,   228,   235,    -1,   238,   229,
     867      -1,   238,   235,    -1,    28,   109,   276,   110,    -1,    28,
     868     109,   170,   110,    -1,    78,   109,   276,   110,    -1,    78,
     869     109,   170,   110,    -1,   241,    -1,   232,   241,    -1,   240,
     870     234,    -1,   240,   234,   228,    -1,   244,    -1,   228,   244,
     871      -1,   241,   229,    -1,   243,    -1,   232,   243,    -1,   242,
     872     234,    -1,   242,   234,   228,    -1,    74,    -1,   228,    74,
     873      -1,   243,   229,    -1,   245,    -1,   256,    -1,   247,   114,
     874     248,   115,    -1,   247,   274,    -1,    -1,   247,   274,   246,
     875     114,   248,   115,    -1,   247,   109,   292,   110,   114,   248,
     876     115,    -1,   247,   285,    -1,    31,   312,    -1,    32,   312,
     877      -1,    -1,   248,   249,    -1,   250,   132,    -1,    40,   250,
     878     132,    -1,   251,   132,    -1,    40,   251,   132,    -1,   366,
     879      -1,   366,   274,    -1,   250,   116,   274,    -1,   250,   116,
     880      -1,   226,   252,    -1,   251,   116,   312,   252,    -1,    -1,
     881     254,    -1,   318,   253,    -1,   331,   253,    -1,   357,    -1,
     882      -1,   254,    -1,   130,   164,    -1,    30,   312,    -1,   255,
     883     114,   258,   372,   115,    -1,   255,   274,    -1,    -1,   255,
     884     274,   257,   114,   258,   372,   115,    -1,   274,   259,    -1,
     885     258,   116,   274,   259,    -1,    -1,   131,   164,    -1,    -1,
     886     261,    -1,   263,    -1,   262,    -1,   262,   135,   116,   134,
     887     263,    -1,   263,   135,   116,   134,    96,    -1,   262,   135,
     888     116,   134,    96,    -1,   267,    -1,   263,   135,   116,   134,
     889     267,    -1,   262,   135,   116,   134,   267,    -1,   262,   135,
     890     116,   134,   263,   135,   116,   134,   267,    -1,   268,    -1,
     891     263,   135,   116,   134,   268,    -1,    -1,   265,    -1,   266,
     892      -1,   266,   135,   116,   134,    96,    -1,   270,    -1,   269,
     893      -1,   266,   135,   116,   134,   270,    -1,   266,   135,   116,
     894     134,   269,    -1,   269,    -1,   362,   272,   373,    -1,   370,
     895     272,   373,    -1,   228,   370,   272,   373,    -1,   218,    -1,
     896     270,    -1,   362,    -1,   370,    -1,   228,   370,    -1,   371,
     897      -1,   225,   336,   373,    -1,   225,   340,   373,    -1,   225,
     898      -1,   225,   351,    -1,   139,    -1,   271,   116,   139,    -1,
     899     137,    -1,    74,    -1,    75,    -1,   138,    -1,    74,    -1,
     900      75,    -1,   139,    -1,    74,    -1,    75,    -1,   366,    -1,
     901     226,    -1,   226,   357,    -1,   366,    -1,   371,    -1,   226,
     902      -1,   226,   345,    -1,    -1,   131,   278,    -1,   107,   278,
     903      -1,   165,    -1,   114,   279,   372,   115,    -1,    -1,   278,
     904      -1,   280,   278,    -1,   279,   116,   278,    -1,   279,   116,
     905     280,   278,    -1,   281,   130,    -1,   274,   130,    -1,   282,
     906      -1,   281,   282,    -1,   113,   274,    -1,   111,   134,   165,
     907     135,   112,    -1,   111,   134,   310,   135,   112,    -1,   111,
     908     134,   164,    96,   164,   135,   112,    -1,   113,   111,   134,
     909     147,   135,   112,    -1,   284,    -1,   232,   284,    -1,   283,
     910     234,    -1,   283,   234,   228,    -1,   285,    -1,   228,   285,
     911      -1,   284,   229,    -1,    75,   109,   292,   110,    -1,   287,
     912     373,    -1,   286,   116,   287,   373,    -1,    -1,   289,   274,
     913     288,   290,    -1,   226,   336,    -1,    33,    -1,    35,    -1,
     914      34,    -1,    -1,   290,   291,    -1,   128,   274,   109,   292,
     915     110,    -1,   128,   114,   134,   298,   115,    -1,   128,   109,
     916     134,   286,   135,   110,   114,   134,   298,   115,   109,   292,
     917     110,    -1,   276,    -1,   165,    -1,   292,   116,   276,    -1,
     918     292,   116,   165,    -1,    33,   294,    -1,   233,    33,   294,
     919      -1,   293,   116,   294,    -1,   295,   290,    -1,   295,   290,
     920     131,   276,    -1,   274,    -1,   273,   109,   134,   286,   135,
     921     110,    -1,    36,   274,   109,   134,   286,   135,   110,   114,
     922     115,    -1,    -1,    36,   274,   109,   134,   286,   135,   110,
     923     114,   297,   298,   115,    -1,   299,    -1,   298,   134,   299,
     924      -1,   300,   135,   132,    -1,   301,   135,   132,    -1,   216,
     925      -1,   218,    -1,   300,   135,   116,   134,   272,    -1,   226,
     926     309,    -1,   301,   135,   116,   134,   309,    -1,    -1,   303,
     927      -1,   305,    -1,   303,   134,   305,    -1,    -1,   303,    -1,
     928     213,    -1,   307,    -1,   199,    -1,    -1,     5,    82,   306,
     929     114,   304,   115,    -1,    40,   305,    -1,   308,    -1,   323,
     930     174,    -1,   327,   134,   208,   174,    -1,   217,   174,    -1,
     931     225,   323,   174,    -1,   228,   323,   174,    -1,   232,   323,
     932     174,    -1,   232,   228,   323,   174,    -1,   225,   327,   134,
     933     208,   174,    -1,   228,   327,   134,   208,   174,    -1,   232,
     934     327,   134,   208,   174,    -1,   232,   228,   327,   134,   208,
     935     174,    -1,   318,    -1,   331,    -1,   323,    -1,   164,   122,
     936     164,    -1,    -1,    64,   109,   142,   110,   312,    -1,    -1,
     937     313,    -1,   314,    -1,   313,   314,    -1,    39,   109,   109,
     938     315,   110,   110,    -1,   316,    -1,   315,   116,   316,    -1,
     939      -1,   317,    -1,   317,   109,   171,   110,    -1,   272,    -1,
     940     234,    -1,   235,    -1,   229,    -1,   319,   312,    -1,   320,
     941      -1,   321,   312,    -1,   322,   312,    -1,   137,    -1,   109,
     942     319,   110,    -1,   150,   318,    -1,   150,   228,   318,    -1,
     943     109,   320,   110,    -1,   319,   349,    -1,   109,   320,   110,
     944     349,    -1,   109,   321,   110,   350,    -1,   109,   321,   110,
     945      -1,   109,   320,   110,   109,   134,   264,   135,   110,    -1,
     946     109,   322,   110,    -1,   324,   312,    -1,   325,    -1,   326,
     947     312,    -1,   319,   109,   134,   264,   135,   110,    -1,   109,
     948     325,   110,   109,   134,   264,   135,   110,    -1,   109,   324,
     949     110,    -1,   150,   323,    -1,   150,   228,   323,    -1,   109,
     950     325,   110,    -1,   109,   325,   110,   349,    -1,   109,   326,
     951     110,   350,    -1,   109,   326,   110,    -1,   328,    -1,   329,
     952      -1,   330,    -1,   319,   109,   271,   110,    -1,   109,   329,
     953     110,   109,   271,   110,    -1,   109,   328,   110,    -1,   150,
     954     327,    -1,   150,   228,   327,    -1,   109,   329,   110,    -1,
     955     109,   329,   110,   349,    -1,   109,   330,   110,   350,    -1,
     956     109,   330,   110,    -1,   332,   312,    -1,   333,    -1,   334,
     957     312,    -1,   335,   312,    -1,   341,    -1,   109,   332,   110,
     958      -1,   150,   331,    -1,   150,   228,   331,    -1,   109,   333,
     959     110,    -1,   332,   349,    -1,   109,   333,   110,   349,    -1,
     960     109,   334,   110,   350,    -1,   109,   334,   110,    -1,   332,
     961     109,   134,   264,   135,   110,    -1,   109,   333,   110,   109,
     962     134,   264,   135,   110,    -1,   109,   335,   110,    -1,   319,
     963     312,    -1,   337,    -1,   338,   312,    -1,   339,   312,    -1,
     964     150,   336,    -1,   150,   228,   336,    -1,   109,   337,   110,
     965      -1,   319,   355,    -1,   109,   337,   110,   349,    -1,   109,
     966     338,   110,   350,    -1,   109,   338,   110,    -1,   319,   109,
     967     134,   264,   135,   110,    -1,   109,   337,   110,   109,   134,
     968     264,   135,   110,    -1,   109,   339,   110,    -1,   341,   312,
     969      -1,   342,    -1,   343,   312,    -1,   344,   312,    -1,    74,
     970      -1,    75,    -1,   150,   340,    -1,   150,   228,   340,    -1,
     971     109,   342,   110,    -1,   341,   355,    -1,   109,   342,   110,
     972     355,    -1,   341,   109,   134,   264,   135,   110,    -1,   109,
     973     342,   110,   109,   134,   264,   135,   110,    -1,   346,    -1,
     974     347,   312,    -1,   348,   312,    -1,   150,    -1,   150,   228,
     975      -1,   150,   345,    -1,   150,   228,   345,    -1,   109,   346,
     976     110,    -1,   349,    -1,   109,   346,   110,   349,    -1,   109,
     977     347,   110,   350,    -1,   109,   347,   110,    -1,   109,   134,
     978     264,   135,   110,    -1,   109,   346,   110,   109,   134,   264,
     979     135,   110,    -1,   109,   348,   110,    -1,   111,   112,    -1,
     980     111,   112,   350,    -1,   350,    -1,   111,   134,   165,   135,
     981     112,    -1,   111,   134,   117,   135,   112,    -1,   350,   111,
     982     134,   165,   135,   112,    -1,   350,   111,   134,   117,   135,
     983     112,    -1,   352,    -1,   353,   312,    -1,   354,   312,    -1,
     984     150,    -1,   150,   228,    -1,   150,   351,    -1,   150,   228,
     985     351,    -1,   109,   352,   110,    -1,   355,    -1,   109,   352,
     986     110,   355,    -1,   109,   353,   110,   350,    -1,   109,   353,
     987     110,    -1,   109,   134,   264,   135,   110,    -1,   109,   352,
     988     110,   109,   134,   264,   135,   110,    -1,   109,   354,   110,
     989      -1,   356,    -1,   356,   350,    -1,   350,    -1,   111,   112,
     990      -1,   111,   134,   228,   117,   135,   112,    -1,   111,   134,
     991     228,   135,   112,    -1,   111,   134,   228,   165,   135,   112,
     992      -1,   111,   134,     7,   227,   165,   135,   112,    -1,   111,
     993     134,   228,     7,   165,   135,   112,    -1,   358,    -1,   359,
     994     312,    -1,   360,   312,    -1,   150,    -1,   150,   228,    -1,
     995     150,   357,    -1,   150,   228,   357,    -1,   109,   358,   110,
     996      -1,   349,    -1,   109,   358,   110,   349,    -1,   109,   359,
     997     110,   350,    -1,   109,   359,   110,    -1,   109,   358,   110,
     998     109,   134,   264,   135,   110,    -1,   109,   360,   110,    -1,
     999     362,    -1,   370,    -1,   228,   370,    -1,   363,    -1,   364,
     1000      -1,   150,   226,    -1,   228,   150,   226,    -1,   150,   371,
     1001      -1,   228,   150,   371,    -1,   150,   361,    -1,   228,   150,
     1002     361,    -1,   111,   112,   226,    -1,   365,   226,    -1,   111,
     1003     112,   350,   226,    -1,   365,   350,   226,    -1,   350,   226,
     1004      -1,   111,   112,   363,    -1,   365,   363,    -1,   111,   112,
     1005     350,   363,    -1,   365,   350,   363,    -1,   350,   363,    -1,
     1006     111,   134,   228,   117,   135,   112,    -1,   111,   134,   228,
     1007     165,   135,   112,    -1,   111,   134,   232,   165,   135,   112,
     1008      -1,   111,   134,   232,   228,   165,   135,   112,    -1,   370,
     1009      -1,   228,   370,    -1,   367,    -1,   368,    -1,   369,    -1,
     1010     150,   226,    -1,   228,   150,   226,    -1,   150,   371,    -1,
     1011     228,   150,   371,    -1,   150,   366,    -1,   228,   150,   366,
     1012      -1,   111,   112,   226,    -1,   111,   112,   350,   226,    -1,
     1013     350,   226,    -1,   111,   112,   368,    -1,   111,   112,   350,
     1014     368,    -1,   350,   368,    -1,   111,   134,   263,   135,   112,
     1015      -1,   111,   112,   109,   260,   110,    -1,   370,   109,   134,
     1016     260,   135,   110,    -1,   219,   109,   134,   260,   135,   110,
     1017      -1,    -1,   116,    -1,    -1,   131,   165,    -1
    10591018};
    10601019
     
    10621021static const yytype_uint16 yyrline[] =
    10631022{
    1064        0,   341,   341,   345,   352,   353,   354,   358,   359,   360,
    1065      364,   365,   369,   370,   374,   375,   379,   383,   384,   395,
    1066      397,   399,   401,   406,   407,   413,   417,   419,   420,   422,
    1067      423,   425,   427,   429,   438,   439,   445,   446,   450,   451,
    1068      455,   459,   461,   463,   465,   470,   473,   475,   477,   482,
    1069      495,   497,   499,   501,   503,   505,   507,   509,   511,   513,
    1070      515,   522,   523,   529,   530,   531,   532,   536,   537,   539,
    1071      544,   545,   547,   549,   554,   555,   557,   562,   563,   565,
    1072      570,   571,   573,   575,   577,   582,   583,   585,   590,   591,
    1073      596,   597,   602,   603,   608,   609,   614,   615,   620,   621,
    1074      624,   626,   631,   636,   637,   639,   645,   646,   650,   651,
    1075      652,   653,   654,   655,   656,   657,   658,   659,   660,   666,
    1076      668,   670,   672,   677,   678,   683,   684,   690,   691,   697,
    1077      698,   699,   700,   701,   702,   703,   704,   705,   715,   722,
    1078      724,   734,   735,   740,   742,   748,   750,   754,   755,   760,
    1079      765,   768,   770,   772,   782,   784,   795,   796,   798,   802,
    1080      804,   808,   809,   814,   815,   819,   824,   825,   829,   831,
    1081      837,   838,   842,   844,   846,   848,   854,   855,   859,   861,
    1082      866,   868,   870,   875,   877,   882,   884,   888,   891,   895,
    1083      898,   902,   904,   906,   908,   913,   915,   917,   922,   924,
    1084      926,   928,   930,   935,   937,   939,   941,   946,   958,   959,
    1085      964,   966,   971,   975,   977,   979,   981,   983,   989,   990,
    1086      996,   997,  1001,  1002,  1007,  1009,  1015,  1016,  1018,  1023,
    1087     1028,  1038,  1040,  1044,  1045,  1050,  1052,  1056,  1057,  1061,
    1088     1063,  1067,  1068,  1072,  1073,  1077,  1078,  1093,  1094,  1095,
    1089     1096,  1097,  1101,  1106,  1113,  1123,  1128,  1133,  1141,  1146,
    1090     1151,  1156,  1161,  1169,  1191,  1196,  1203,  1205,  1212,  1217,
    1091     1222,  1233,  1238,  1243,  1248,  1253,  1262,  1267,  1275,  1276,
    1092     1277,  1278,  1284,  1289,  1297,  1298,  1299,  1300,  1304,  1305,
    1093     1306,  1307,  1312,  1313,  1322,  1323,  1328,  1329,  1334,  1336,
    1094     1338,  1340,  1342,  1345,  1344,  1356,  1357,  1359,  1369,  1370,
    1095     1375,  1377,  1379,  1381,  1383,  1385,  1387,  1389,  1394,  1396,
    1096     1398,  1400,  1402,  1404,  1406,  1408,  1410,  1412,  1414,  1416,
    1097     1418,  1424,  1425,  1427,  1429,  1431,  1436,  1437,  1443,  1444,
    1098     1446,  1448,  1453,  1455,  1457,  1459,  1464,  1465,  1467,  1469,
    1099     1474,  1475,  1477,  1482,  1483,  1485,  1487,  1492,  1494,  1496,
    1100     1501,  1502,  1506,  1508,  1514,  1513,  1517,  1519,  1524,  1526,
    1101     1532,  1533,  1538,  1539,  1541,  1542,  1551,  1552,  1554,  1556,
    1102     1561,  1563,  1569,  1570,  1572,  1575,  1578,  1583,  1584,  1589,
    1103     1594,  1598,  1600,  1606,  1605,  1612,  1614,  1620,  1621,  1629,
    1104     1630,  1634,  1635,  1636,  1638,  1640,  1647,  1648,  1650,  1652,
    1105     1657,  1658,  1664,  1665,  1669,  1670,  1675,  1676,  1677,  1679,
    1106     1687,  1688,  1690,  1693,  1695,  1699,  1700,  1701,  1703,  1705,
    1107     1709,  1714,  1722,  1723,  1732,  1734,  1739,  1740,  1741,  1745,
    1108     1746,  1747,  1751,  1752,  1753,  1757,  1758,  1759,  1764,  1765,
    1109     1766,  1767,  1773,  1774,  1776,  1781,  1782,  1787,  1788,  1789,
    1110     1790,  1791,  1806,  1807,  1812,  1813,  1819,  1821,  1824,  1826,
    1111     1828,  1851,  1852,  1854,  1856,  1861,  1862,  1864,  1869,  1874,
    1112     1875,  1881,  1880,  1884,  1888,  1890,  1892,  1898,  1899,  1904,
    1113     1909,  1911,  1916,  1918,  1919,  1921,  1926,  1928,  1930,  1935,
    1114     1937,  1942,  1947,  1955,  1961,  1960,  1974,  1975,  1980,  1981,
    1115     1985,  1990,  1995,  2003,  2008,  2019,  2020,  2025,  2026,  2032,
    1116     2033,  2037,  2038,  2039,  2042,  2041,  2052,  2061,  2067,  2073,
    1117     2082,  2088,  2094,  2100,  2106,  2114,  2120,  2128,  2134,  2143,
    1118     2144,  2145,  2149,  2153,  2155,  2161,  2162,  2166,  2167,  2172,
    1119     2178,  2179,  2182,  2184,  2185,  2190,  2191,  2192,  2193,  2227,
    1120     2229,  2230,  2232,  2237,  2242,  2247,  2249,  2251,  2256,  2258,
    1121     2260,  2262,  2267,  2269,  2278,  2280,  2281,  2286,  2288,  2290,
    1122     2295,  2297,  2299,  2304,  2306,  2308,  2317,  2318,  2319,  2323,
    1123     2325,  2327,  2332,  2334,  2336,  2341,  2343,  2345,  2360,  2362,
    1124     2363,  2365,  2370,  2371,  2376,  2378,  2380,  2385,  2387,  2389,
    1125     2391,  2396,  2398,  2400,  2410,  2412,  2413,  2415,  2420,  2422,
    1126     2424,  2429,  2431,  2433,  2435,  2440,  2442,  2444,  2475,  2477,
    1127     2478,  2480,  2485,  2490,  2498,  2500,  2502,  2507,  2509,  2514,
    1128     2516,  2530,  2531,  2533,  2538,  2540,  2542,  2544,  2546,  2551,
    1129     2552,  2554,  2556,  2561,  2563,  2565,  2571,  2573,  2575,  2579,
    1130     2581,  2583,  2585,  2599,  2600,  2602,  2607,  2609,  2611,  2613,
    1131     2615,  2620,  2621,  2623,  2625,  2630,  2632,  2634,  2640,  2641,
    1132     2643,  2652,  2655,  2657,  2660,  2662,  2664,  2677,  2678,  2680,
    1133     2685,  2687,  2689,  2691,  2693,  2698,  2699,  2701,  2703,  2708,
    1134     2710,  2718,  2719,  2720,  2725,  2726,  2730,  2732,  2734,  2736,
    1135     2738,  2740,  2747,  2749,  2751,  2753,  2755,  2757,  2759,  2761,
    1136     2763,  2765,  2770,  2772,  2774,  2779,  2805,  2806,  2808,  2812,
    1137     2813,  2817,  2819,  2821,  2823,  2825,  2827,  2834,  2836,  2838,
    1138     2840,  2842,  2844,  2849,  2854,  2856,  2858,  2876,  2878,  2883,
    1139     2884
     1023       0,   300,   300,   304,   311,   312,   313,   317,   318,   319,
     1024     323,   324,   328,   329,   333,   334,   338,   342,   343,   354,
     1025     356,   358,   360,   365,   366,   372,   376,   378,   379,   381,
     1026     382,   384,   386,   388,   397,   398,   404,   405,   409,   410,
     1027     414,   418,   420,   422,   424,   429,   432,   434,   436,   441,
     1028     454,   456,   458,   460,   462,   464,   466,   468,   470,   472,
     1029     474,   481,   482,   488,   489,   490,   491,   495,   496,   498,
     1030     503,   504,   506,   508,   513,   514,   516,   521,   522,   524,
     1031     529,   530,   532,   534,   536,   541,   542,   544,   549,   550,
     1032     555,   556,   561,   562,   567,   568,   573,   574,   579,   580,
     1033     583,   585,   590,   595,   596,   598,   604,   605,   609,   610,
     1034     611,   612,   613,   614,   615,   616,   617,   618,   619,   620,
     1035     626,   628,   630,   632,   637,   638,   643,   644,   650,   651,
     1036     657,   658,   659,   660,   661,   662,   663,   664,   665,   675,
     1037     682,   684,   694,   695,   700,   702,   708,   710,   714,   715,
     1038     720,   725,   728,   730,   732,   742,   744,   755,   756,   758,
     1039     762,   764,   768,   769,   774,   775,   779,   784,   785,   789,
     1040     791,   797,   798,   802,   804,   806,   808,   814,   815,   819,
     1041     821,   826,   828,   830,   835,   837,   842,   844,   848,   851,
     1042     855,   858,   862,   864,   866,   868,   873,   875,   877,   882,
     1043     884,   886,   888,   890,   895,   897,   899,   901,   906,   918,
     1044     919,   924,   926,   931,   935,   937,   939,   941,   943,   949,
     1045     950,   956,   957,   961,   962,   967,   969,   975,   976,   978,
     1046     983,   988,   998,  1000,  1004,  1005,  1010,  1012,  1016,  1017,
     1047    1021,  1023,  1027,  1028,  1032,  1033,  1037,  1038,  1053,  1054,
     1048    1055,  1056,  1057,  1061,  1066,  1073,  1083,  1088,  1093,  1101,
     1049    1106,  1111,  1116,  1121,  1129,  1151,  1156,  1163,  1165,  1172,
     1050    1177,  1182,  1193,  1198,  1203,  1208,  1213,  1222,  1227,  1235,
     1051    1236,  1237,  1238,  1244,  1249,  1257,  1258,  1259,  1260,  1264,
     1052    1265,  1266,  1267,  1272,  1273,  1282,  1283,  1288,  1289,  1294,
     1053    1296,  1298,  1300,  1302,  1305,  1304,  1316,  1317,  1319,  1329,
     1054    1330,  1335,  1337,  1339,  1341,  1343,  1346,  1348,  1351,  1356,
     1055    1358,  1360,  1362,  1364,  1366,  1368,  1370,  1372,  1374,  1376,
     1056    1378,  1380,  1386,  1387,  1389,  1391,  1393,  1398,  1399,  1405,
     1057    1406,  1408,  1410,  1415,  1417,  1419,  1421,  1426,  1427,  1429,
     1058    1431,  1436,  1437,  1439,  1444,  1445,  1447,  1449,  1454,  1456,
     1059    1458,  1463,  1464,  1468,  1470,  1476,  1475,  1479,  1481,  1486,
     1060    1488,  1494,  1495,  1500,  1501,  1503,  1504,  1513,  1514,  1516,
     1061    1518,  1523,  1525,  1531,  1532,  1534,  1537,  1540,  1545,  1546,
     1062    1551,  1556,  1560,  1562,  1568,  1567,  1574,  1576,  1582,  1583,
     1063    1591,  1592,  1596,  1597,  1598,  1600,  1602,  1609,  1610,  1612,
     1064    1614,  1619,  1620,  1626,  1627,  1631,  1632,  1637,  1638,  1639,
     1065    1641,  1649,  1650,  1652,  1655,  1657,  1661,  1662,  1663,  1665,
     1066    1667,  1671,  1676,  1684,  1685,  1694,  1696,  1701,  1702,  1703,
     1067    1707,  1708,  1709,  1713,  1714,  1715,  1719,  1720,  1721,  1726,
     1068    1727,  1728,  1729,  1735,  1736,  1738,  1743,  1744,  1749,  1750,
     1069    1751,  1752,  1753,  1768,  1769,  1774,  1775,  1781,  1783,  1786,
     1070    1788,  1790,  1813,  1814,  1816,  1818,  1823,  1824,  1826,  1831,
     1071    1836,  1837,  1843,  1842,  1846,  1850,  1852,  1854,  1860,  1861,
     1072    1866,  1871,  1873,  1878,  1880,  1881,  1883,  1888,  1890,  1892,
     1073    1897,  1899,  1904,  1909,  1917,  1923,  1922,  1936,  1937,  1942,
     1074    1943,  1947,  1952,  1957,  1965,  1970,  1981,  1982,  1987,  1988,
     1075    1994,  1995,  1999,  2000,  2001,  2004,  2003,  2014,  2023,  2029,
     1076    2035,  2044,  2050,  2056,  2062,  2068,  2076,  2082,  2090,  2096,
     1077    2105,  2106,  2107,  2111,  2115,  2117,  2122,  2123,  2127,  2128,
     1078    2133,  2139,  2140,  2143,  2145,  2146,  2150,  2151,  2152,  2153,
     1079    2187,  2189,  2190,  2192,  2197,  2202,  2207,  2209,  2211,  2216,
     1080    2218,  2220,  2222,  2227,  2229,  2238,  2240,  2241,  2246,  2248,
     1081    2250,  2255,  2257,  2259,  2264,  2266,  2268,  2277,  2278,  2279,
     1082    2283,  2285,  2287,  2292,  2294,  2296,  2301,  2303,  2305,  2320,
     1083    2322,  2323,  2325,  2330,  2331,  2336,  2338,  2340,  2345,  2347,
     1084    2349,  2351,  2356,  2358,  2360,  2370,  2372,  2373,  2375,  2380,
     1085    2382,  2384,  2389,  2391,  2393,  2395,  2400,  2402,  2404,  2435,
     1086    2437,  2438,  2440,  2445,  2450,  2458,  2460,  2462,  2467,  2469,
     1087    2474,  2476,  2490,  2491,  2493,  2498,  2500,  2502,  2504,  2506,
     1088    2511,  2512,  2514,  2516,  2521,  2523,  2525,  2531,  2533,  2535,
     1089    2539,  2541,  2543,  2545,  2559,  2560,  2562,  2567,  2569,  2571,
     1090    2573,  2575,  2580,  2581,  2583,  2585,  2590,  2592,  2594,  2600,
     1091    2601,  2603,  2612,  2615,  2617,  2620,  2622,  2624,  2637,  2638,
     1092    2640,  2645,  2647,  2649,  2651,  2653,  2658,  2659,  2661,  2663,
     1093    2668,  2670,  2678,  2679,  2680,  2685,  2686,  2690,  2692,  2694,
     1094    2696,  2698,  2700,  2707,  2709,  2711,  2713,  2715,  2717,  2719,
     1095    2721,  2723,  2725,  2730,  2732,  2734,  2739,  2765,  2766,  2768,
     1096    2772,  2773,  2777,  2779,  2781,  2783,  2785,  2787,  2794,  2796,
     1097    2798,  2800,  2802,  2804,  2809,  2814,  2816,  2818,  2836,  2838,
     1098    2843,  2844
    11401099};
    11411100#endif
     
    12901249     159,   159,   160,   160,   161,   161,   162,   162,   163,   163,
    12911250     163,   163,   164,   165,   165,   165,   166,   166,   167,   167,
    1292      167,   167,   167,   167,   167,   167,   167,   167,   167,   168,
    1293      168,   168,   168,   169,   169,   170,   170,   171,   171,   172,
    1294      172,   172,   172,   172,   172,   172,   172,   172,   173,   174,
    1295      174,   175,   175,   176,   176,   176,   176,   177,   177,   178,
    1296      179,   179,   179,   179,   179,   179,   180,   180,   180,   181,
    1297      181,   182,   182,   183,   183,   184,   185,   185,   186,   186,
    1298      187,   187,   188,   188,   188,   188,   189,   189,   190,   190,
    1299      191,   191,   191,   192,   192,   193,   193,   193,   193,   193,
    1300      193,   193,   193,   193,   193,   194,   194,   194,   195,   195,
    1301      195,   195,   195,   196,   196,   196,   196,   197,   198,   198,
    1302      198,   198,   198,   199,   199,   199,   199,   199,   200,   200,
    1303      201,   201,   202,   202,   203,   203,   204,   204,   204,   205,
    1304      205,   206,   206,   207,   207,   208,   208,   209,   209,   210,
    1305      210,   211,   211,   212,   212,   213,   213,   214,   214,   214,
    1306      214,   214,   215,   215,   215,   216,   216,   216,   217,   217,
    1307      217,   217,   217,   218,   218,   218,   219,   219,   220,   220,
    1308      220,   221,   221,   221,   221,   221,   222,   222,   223,   223,
    1309      223,   223,   224,   224,   225,   225,   225,   225,   226,   226,
    1310      226,   226,   227,   227,   228,   228,   229,   229,   230,   230,
    1311      230,   230,   230,   231,   230,   232,   232,   232,   233,   233,
    1312      234,   234,   234,   234,   234,   234,   234,   234,   235,   235,
     1251     167,   167,   167,   167,   167,   167,   167,   167,   167,   167,
     1252     168,   168,   168,   168,   169,   169,   170,   170,   171,   171,
     1253     172,   172,   172,   172,   172,   172,   172,   172,   172,   173,
     1254     174,   174,   175,   175,   176,   176,   176,   176,   177,   177,
     1255     178,   179,   179,   179,   179,   179,   179,   180,   180,   180,
     1256     181,   181,   182,   182,   183,   183,   184,   185,   185,   186,
     1257     186,   187,   187,   188,   188,   188,   188,   189,   189,   190,
     1258     190,   191,   191,   191,   192,   192,   193,   193,   193,   193,
     1259     193,   193,   193,   193,   193,   193,   194,   194,   194,   195,
     1260     195,   195,   195,   195,   196,   196,   196,   196,   197,   198,
     1261     198,   198,   198,   198,   199,   199,   199,   199,   199,   200,
     1262     200,   201,   201,   202,   202,   203,   203,   204,   204,   204,
     1263     205,   205,   206,   206,   207,   207,   208,   208,   209,   209,
     1264     210,   210,   211,   211,   212,   212,   213,   213,   214,   214,
     1265     214,   214,   214,   215,   215,   215,   216,   216,   216,   217,
     1266     217,   217,   217,   217,   218,   218,   218,   219,   219,   220,
     1267     220,   220,   221,   221,   221,   221,   221,   222,   222,   223,
     1268     223,   223,   223,   224,   224,   225,   225,   225,   225,   226,
     1269     226,   226,   226,   227,   227,   228,   228,   229,   229,   230,
     1270     230,   230,   230,   230,   231,   230,   232,   232,   232,   233,
     1271     233,   234,   234,   234,   234,   234,   234,   234,   234,   235,
    13131272     235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
    1314      235,   236,   236,   236,   236,   236,   237,   237,   238,   238,
    1315      238,   238,   239,   239,   239,   239,   240,   240,   240,   240,
    1316      241,   241,   241,   242,   242,   242,   242,   243,   243,   243,
    1317      244,   244,   245,   245,   246,   245,   245,   245,   247,   247,
    1318      248,   248,   249,   249,   249,   249,   250,   250,   250,   250,
    1319      251,   251,   252,   252,   252,   252,   252,   253,   253,   254,
    1320      255,   256,   256,   257,   256,   258,   258,   259,   259,   260,
    1321      260,   261,   261,   261,   261,   261,   262,   262,   262,   262,
    1322      263,   263,   264,   264,   265,   265,   266,   266,   266,   266,
    1323      267,   267,   267,   267,   267,   268,   268,   268,   268,   268,
    1324      269,   269,   270,   270,   271,   271,   272,   272,   272,   273,
    1325      273,   273,   274,   274,   274,   275,   275,   275,   276,   276,
    1326      276,   276,   277,   277,   277,   278,   278,   279,   279,   279,
    1327      279,   279,   280,   280,   281,   281,   282,   282,   282,   282,
    1328      282,   283,   283,   283,   283,   284,   284,   284,   285,   286,
    1329      286,   288,   287,   287,   289,   289,   289,   290,   290,   291,
    1330      291,   291,   292,   292,   292,   292,   293,   293,   293,   294,
    1331      294,   295,   295,   296,   297,   296,   298,   298,   299,   299,
    1332      300,   300,   300,   301,   301,   302,   302,   303,   303,   304,
    1333      304,   305,   305,   305,   306,   305,   305,   307,   307,   307,
    1334      308,   308,   308,   308,   308,   308,   308,   308,   308,   309,
    1335      309,   309,   310,   311,   311,   312,   312,   313,   313,   314,
    1336      315,   315,   316,   316,   316,   317,   317,   317,   317,   318,
    1337      318,   318,   318,   319,   319,   320,   320,   320,   321,   321,
    1338      321,   321,   322,   322,   323,   323,   323,   324,   324,   324,
    1339      325,   325,   325,   326,   326,   326,   327,   327,   327,   328,
    1340      328,   328,   329,   329,   329,   330,   330,   330,   331,   331,
    1341      331,   331,   332,   332,   333,   333,   333,   334,   334,   334,
    1342      334,   335,   335,   335,   336,   336,   336,   336,   337,   337,
    1343      337,   338,   338,   338,   338,   339,   339,   339,   340,   340,
    1344      340,   340,   341,   341,   342,   342,   342,   343,   343,   344,
    1345      344,   345,   345,   345,   346,   346,   346,   346,   346,   347,
    1346      347,   347,   347,   348,   348,   348,   349,   349,   349,   350,
    1347      350,   350,   350,   351,   351,   351,   352,   352,   352,   352,
    1348      352,   353,   353,   353,   353,   354,   354,   354,   355,   355,
    1349      355,   356,   356,   356,   356,   356,   356,   357,   357,   357,
    1350      358,   358,   358,   358,   358,   359,   359,   359,   359,   360,
    1351      360,   361,   361,   361,   362,   362,   363,   363,   363,   363,
    1352      363,   363,   364,   364,   364,   364,   364,   364,   364,   364,
    1353      364,   364,   365,   365,   365,   365,   366,   366,   366,   367,
    1354      367,   368,   368,   368,   368,   368,   368,   369,   369,   369,
    1355      369,   369,   369,   370,   371,   371,   371,   372,   372,   373,
    1356      373
     1273     235,   235,   236,   236,   236,   236,   236,   237,   237,   238,
     1274     238,   238,   238,   239,   239,   239,   239,   240,   240,   240,
     1275     240,   241,   241,   241,   242,   242,   242,   242,   243,   243,
     1276     243,   244,   244,   245,   245,   246,   245,   245,   245,   247,
     1277     247,   248,   248,   249,   249,   249,   249,   250,   250,   250,
     1278     250,   251,   251,   252,   252,   252,   252,   252,   253,   253,
     1279     254,   255,   256,   256,   257,   256,   258,   258,   259,   259,
     1280     260,   260,   261,   261,   261,   261,   261,   262,   262,   262,
     1281     262,   263,   263,   264,   264,   265,   265,   266,   266,   266,
     1282     266,   267,   267,   267,   267,   267,   268,   268,   268,   268,
     1283     268,   269,   269,   270,   270,   271,   271,   272,   272,   272,
     1284     273,   273,   273,   274,   274,   274,   275,   275,   275,   276,
     1285     276,   276,   276,   277,   277,   277,   278,   278,   279,   279,
     1286     279,   279,   279,   280,   280,   281,   281,   282,   282,   282,
     1287     282,   282,   283,   283,   283,   283,   284,   284,   284,   285,
     1288     286,   286,   288,   287,   287,   289,   289,   289,   290,   290,
     1289     291,   291,   291,   292,   292,   292,   292,   293,   293,   293,
     1290     294,   294,   295,   295,   296,   297,   296,   298,   298,   299,
     1291     299,   300,   300,   300,   301,   301,   302,   302,   303,   303,
     1292     304,   304,   305,   305,   305,   306,   305,   305,   307,   307,
     1293     307,   308,   308,   308,   308,   308,   308,   308,   308,   308,
     1294     309,   309,   309,   310,   311,   311,   312,   312,   313,   313,
     1295     314,   315,   315,   316,   316,   316,   317,   317,   317,   317,
     1296     318,   318,   318,   318,   319,   319,   320,   320,   320,   321,
     1297     321,   321,   321,   322,   322,   323,   323,   323,   324,   324,
     1298     324,   325,   325,   325,   326,   326,   326,   327,   327,   327,
     1299     328,   328,   328,   329,   329,   329,   330,   330,   330,   331,
     1300     331,   331,   331,   332,   332,   333,   333,   333,   334,   334,
     1301     334,   334,   335,   335,   335,   336,   336,   336,   336,   337,
     1302     337,   337,   338,   338,   338,   338,   339,   339,   339,   340,
     1303     340,   340,   340,   341,   341,   342,   342,   342,   343,   343,
     1304     344,   344,   345,   345,   345,   346,   346,   346,   346,   346,
     1305     347,   347,   347,   347,   348,   348,   348,   349,   349,   349,
     1306     350,   350,   350,   350,   351,   351,   351,   352,   352,   352,
     1307     352,   352,   353,   353,   353,   353,   354,   354,   354,   355,
     1308     355,   355,   356,   356,   356,   356,   356,   356,   357,   357,
     1309     357,   358,   358,   358,   358,   358,   359,   359,   359,   359,
     1310     360,   360,   361,   361,   361,   362,   362,   363,   363,   363,
     1311     363,   363,   363,   364,   364,   364,   364,   364,   364,   364,
     1312     364,   364,   364,   365,   365,   365,   365,   366,   366,   366,
     1313     367,   367,   368,   368,   368,   368,   368,   368,   369,   369,
     1314     369,   369,   369,   369,   370,   371,   371,   371,   372,   372,
     1315     373,   373
    13571316};
    13581317
     
    13711330       1,     3,     1,     3,     1,     3,     1,     3,     1,     5,
    13721331       4,     5,     1,     1,     3,     2,     0,     1,     1,     1,
    1373        1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
    1374        5,     6,     7,     1,     3,     1,     3,     0,     1,     1,
    1375        1,     1,     1,     1,     1,     1,     1,     6,     4,     2,
    1376        7,     1,     3,     1,     2,     1,     2,     1,     2,     2,
    1377        5,     7,     5,     9,     5,     9,     1,     3,     1,     1,
    1378        3,     3,     2,     1,     2,     2,     0,     1,     2,     3,
    1379        0,     1,     2,     3,     3,     4,     0,     1,     1,     2,
    1380        5,     7,     6,     6,     4,     3,     4,     2,     3,     2,
    1381        3,     3,     3,     3,     5,     3,     3,     4,     1,     5,
    1382        6,     5,     6,     9,    10,     9,    10,     2,     1,     2,
    1383        2,     2,     1,     6,     8,    10,    12,    14,     0,     1,
    1384        0,     1,     1,     3,     4,     7,     0,     1,     3,     1,
    1385        3,     1,     1,     1,     3,     1,     1,     1,     3,     0,
    1386        1,     3,     4,     1,     3,     1,     1,     3,     3,     3,
    1387        3,     3,     2,     3,     6,     3,     3,     4,     1,     2,
    1388        2,     3,     5,     8,     7,     7,     5,     9,     2,     2,
    1389        5,     3,     5,     4,     3,     4,     4,     7,     3,     3,
    1390        3,     3,     4,     6,     1,     1,     1,     1,     1,     1,
    1391        1,     1,     0,     1,     1,     2,     1,     1,     1,     1,
    1392        1,     1,     1,     0,     5,     1,     2,     3,     1,     2,
    13931332       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
     1333       2,     5,     6,     7,     1,     3,     1,     3,     0,     1,
     1334       1,     1,     1,     1,     1,     1,     1,     1,     6,     4,
     1335       2,     7,     1,     3,     1,     2,     1,     2,     1,     2,
     1336       2,     5,     7,     5,     9,     5,     9,     1,     3,     1,
     1337       1,     3,     3,     2,     1,     2,     2,     0,     1,     2,
     1338       3,     0,     1,     2,     3,     3,     4,     0,     1,     1,
     1339       2,     5,     7,     6,     6,     4,     3,     4,     2,     3,
     1340       2,     3,     3,     3,     3,     5,     3,     3,     4,     1,
     1341       5,     6,     5,     6,     9,    10,     9,    10,     2,     1,
     1342       2,     2,     2,     1,     6,     8,    10,    12,    14,     0,
     1343       1,     0,     1,     1,     3,     4,     7,     0,     1,     3,
     1344       1,     3,     1,     1,     1,     3,     1,     1,     1,     3,
     1345       0,     1,     3,     4,     1,     3,     1,     1,     3,     3,
     1346       3,     3,     3,     2,     3,     6,     3,     3,     4,     1,
     1347       2,     2,     3,     5,     8,     7,     7,     5,     9,     2,
     1348       2,     5,     3,     5,     4,     3,     4,     4,     7,     3,
     1349       3,     3,     3,     4,     6,     1,     1,     1,     1,     1,
     1350       1,     1,     1,     0,     1,     1,     2,     1,     1,     1,
     1351       1,     1,     1,     1,     0,     5,     1,     2,     3,     1,
     1352       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    13941353       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1395        1,     1,     2,     2,     3,     3,     1,     3,     1,     2,
    1396        2,     2,     4,     4,     4,     4,     1,     2,     2,     3,
    1397        1,     2,     2,     1,     2,     2,     3,     1,     2,     2,
    1398        1,     1,     4,     2,     0,     6,     7,     2,     2,     2,
    1399        0,     2,     2,     3,     2,     3,     1,     2,     3,     2,
    1400        2,     4,     0,     1,     2,     2,     1,     0,     1,     2,
    1401        2,     5,     2,     0,     7,     2,     4,     0,     2,     0,
    1402        1,     1,     1,     5,     5,     5,     1,     5,     5,     9,
    1403        1,     5,     0,     1,     1,     5,     1,     1,     5,     5,
    1404        1,     3,     3,     4,     1,     1,     1,     1,     2,     1,
    1405        3,     3,     1,     2,     1,     3,     1,     1,     1,     1,
    1406        1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
    1407        1,     2,     0,     2,     2,     1,     4,     0,     1,     2,
    1408        3,     4,     2,     2,     1,     2,     2,     5,     5,     7,
    1409        6,     1,     2,     2,     3,     1,     2,     2,     4,     2,
    1410        4,     0,     4,     2,     1,     1,     1,     0,     2,     5,
    1411        5,    13,     1,     1,     3,     3,     2,     3,     3,     2,
    1412        4,     1,     6,     9,     0,    11,     1,     3,     3,     3,
    1413        1,     1,     5,     2,     5,     0,     1,     1,     3,     0,
    1414        1,     1,     1,     1,     0,     6,     2,     1,     2,     4,
    1415        2,     3,     3,     3,     4,     5,     5,     5,     6,     1,
    1416        1,     1,     3,     0,     5,     0,     1,     1,     2,     6,
    1417        1,     3,     0,     1,     4,     1,     1,     1,     1,     2,
     1354       1,     1,     1,     2,     2,     3,     3,     1,     3,     1,
     1355       2,     2,     2,     4,     4,     4,     4,     1,     2,     2,
     1356       3,     1,     2,     2,     1,     2,     2,     3,     1,     2,
     1357       2,     1,     1,     4,     2,     0,     6,     7,     2,     2,
     1358       2,     0,     2,     2,     3,     2,     3,     1,     2,     3,
     1359       2,     2,     4,     0,     1,     2,     2,     1,     0,     1,
     1360       2,     2,     5,     2,     0,     7,     2,     4,     0,     2,
     1361       0,     1,     1,     1,     5,     5,     5,     1,     5,     5,
     1362       9,     1,     5,     0,     1,     1,     5,     1,     1,     5,
     1363       5,     1,     3,     3,     4,     1,     1,     1,     1,     2,
     1364       1,     3,     3,     1,     2,     1,     3,     1,     1,     1,
     1365       1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
     1366       1,     1,     2,     0,     2,     2,     1,     4,     0,     1,
     1367       2,     3,     4,     2,     2,     1,     2,     2,     5,     5,
     1368       7,     6,     1,     2,     2,     3,     1,     2,     2,     4,
     1369       2,     4,     0,     4,     2,     1,     1,     1,     0,     2,
     1370       5,     5,    13,     1,     1,     3,     3,     2,     3,     3,
     1371       2,     4,     1,     6,     9,     0,    11,     1,     3,     3,
     1372       3,     1,     1,     5,     2,     5,     0,     1,     1,     3,
     1373       0,     1,     1,     1,     1,     0,     6,     2,     1,     2,
     1374       4,     2,     3,     3,     3,     4,     5,     5,     5,     6,
     1375       1,     1,     1,     3,     0,     5,     0,     1,     1,     2,
     1376       6,     1,     3,     0,     1,     4,     1,     1,     1,     1,
     1377       2,     1,     2,     2,     1,     3,     2,     3,     3,     2,
     1378       4,     4,     3,     8,     3,     2,     1,     2,     6,     8,
     1379       3,     2,     3,     3,     4,     4,     3,     1,     1,     1,
     1380       4,     6,     3,     2,     3,     3,     4,     4,     3,     2,
    14181381       1,     2,     2,     1,     3,     2,     3,     3,     2,     4,
    1419        4,     3,     8,     3,     2,     1,     2,     6,     8,     3,
    1420        2,     3,     3,     4,     4,     3,     1,     1,     1,     4,
    1421        6,     3,     2,     3,     3,     4,     4,     3,     2,     1,
    1422        2,     2,     1,     3,     2,     3,     3,     2,     4,     4,
    1423        3,     6,     8,     3,     2,     1,     2,     2,     2,     3,
    1424        3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
    1425        2,     2,     1,     1,     2,     3,     3,     2,     4,     6,
    1426        8,     1,     2,     2,     1,     2,     2,     3,     3,     1,
    1427        4,     4,     3,     5,     8,     3,     2,     3,     1,     5,
    1428        5,     6,     6,     1,     2,     2,     1,     2,     2,     3,
    1429        3,     1,     4,     4,     3,     5,     8,     3,     1,     2,
    1430        1,     2,     6,     5,     6,     7,     7,     1,     2,     2,
    1431        1,     2,     2,     3,     3,     1,     4,     4,     3,     8,
    1432        3,     1,     1,     2,     1,     1,     2,     3,     2,     3,
    1433        2,     3,     3,     2,     4,     3,     2,     3,     2,     4,
    1434        3,     2,     6,     6,     6,     7,     1,     2,     1,     1,
    1435        1,     2,     3,     2,     3,     2,     3,     3,     4,     2,
    1436        3,     4,     2,     5,     5,     6,     6,     0,     1,     0,
    1437        2
     1382       4,     3,     6,     8,     3,     2,     1,     2,     2,     2,
     1383       3,     3,     2,     4,     4,     3,     6,     8,     3,     2,
     1384       1,     2,     2,     1,     1,     2,     3,     3,     2,     4,
     1385       6,     8,     1,     2,     2,     1,     2,     2,     3,     3,
     1386       1,     4,     4,     3,     5,     8,     3,     2,     3,     1,
     1387       5,     5,     6,     6,     1,     2,     2,     1,     2,     2,
     1388       3,     3,     1,     4,     4,     3,     5,     8,     3,     1,
     1389       2,     1,     2,     6,     5,     6,     7,     7,     1,     2,
     1390       2,     1,     2,     2,     3,     3,     1,     4,     4,     3,
     1391       8,     3,     1,     1,     2,     1,     1,     2,     3,     2,
     1392       3,     2,     3,     3,     2,     4,     3,     2,     3,     2,
     1393       4,     3,     2,     6,     6,     6,     7,     1,     2,     1,
     1394       1,     1,     2,     3,     2,     3,     2,     3,     3,     4,
     1395       2,     3,     4,     2,     5,     5,     6,     6,     0,     1,
     1396       0,     2
    14381397};
    14391398
     
    14431402static const yytype_uint16 yydefact[] =
    14441403{
    1445      292,   292,   312,   310,   313,   311,   314,   315,   298,   300,
    1446      299,     0,   301,   326,   318,   323,   321,   322,   320,   319,
    1447      324,   325,   330,   327,   328,   329,   545,   545,   545,     0,
    1448        0,     0,   292,   218,   302,   316,   317,     7,   357,     0,
    1449        8,    14,    15,     0,     2,    61,    62,   563,     9,   292,
    1450      523,   521,   245,     3,   452,     3,   258,     0,     3,     3,
    1451        3,   246,     3,     0,     0,     0,   293,   294,   296,   292,
    1452      305,   308,   338,   284,   331,   336,   285,   346,   286,   353,
    1453      350,   360,     0,     0,   361,   287,   471,   475,     3,     3,
    1454        0,     2,   517,   522,   527,   297,     0,     0,   545,   575,
    1455      545,     2,   586,   587,   588,   292,     0,   729,   730,     0,
    1456       12,     0,    13,   292,   268,   269,     0,   293,   288,   289,
    1457      290,   291,   524,   303,   390,   546,   547,   368,   369,    12,
    1458      443,   444,    11,   439,   442,     0,   501,   496,   487,   443,
    1459      444,     0,     0,   526,   219,     0,   292,     0,     0,     0,
    1460        0,     0,     0,     0,     0,   292,   292,     2,     0,   731,
    1461      293,   580,   592,   735,   728,   726,   733,     0,     0,     0,
    1462      252,     2,     0,   530,   437,   438,   436,     0,     0,     0,
    1463        0,   545,     0,   632,   633,     0,     0,   543,   539,   545,
    1464      560,   545,   545,   541,     2,   540,   545,   599,   545,   545,
    1465      602,     0,     0,     0,   292,   292,   310,   358,     2,   292,
    1466      259,   295,   306,   339,   351,   476,     0,     2,     0,   452,
    1467      260,   293,   332,   347,   354,   472,     0,     2,     0,   309,
    1468      333,   340,   341,     0,   348,   352,   355,   359,   444,   292,
    1469      370,   363,   367,     0,   392,   473,   477,     0,     0,     0,
    1470        1,   292,     2,   528,   574,   576,   292,     2,   739,   293,
    1471      742,   543,   543,     0,   293,     0,     0,   271,   545,   541,
    1472        2,   292,     0,     0,   292,   548,     2,   499,     2,   552,
     1404     293,   293,   313,   311,   314,   312,   315,   316,   299,   301,
     1405     300,     0,   302,   327,   319,   324,   322,   323,   321,   320,
     1406     325,   326,   331,   328,   329,   330,   546,   546,   546,     0,
     1407       0,     0,   293,   219,   303,   317,   318,     7,   358,     0,
     1408       8,    14,    15,     0,     2,    61,    62,   564,     9,   293,
     1409     524,   522,   246,     3,   453,     3,   259,     0,     3,     3,
     1410       3,   247,     3,     0,     0,     0,   294,   295,   297,   293,
     1411     306,   309,   339,   285,   332,   337,   286,   347,   287,   354,
     1412     351,   361,     0,     0,   362,   288,   472,   476,     3,     3,
     1413       0,     2,   518,   523,   528,   298,     0,     0,   546,   576,
     1414     546,     2,   587,   588,   589,   293,     0,   730,   731,     0,
     1415      12,     0,    13,   293,   269,   270,     0,   294,   289,   290,
     1416     291,   292,   525,   304,   391,   547,   548,   369,   370,    12,
     1417     444,   445,    11,   440,   443,     0,   502,   497,   488,   444,
     1418     445,     0,     0,   527,   220,     0,   293,     0,     0,     0,
     1419       0,     0,     0,     0,     0,   293,   293,     2,     0,   732,
     1420     294,   581,   593,   736,   729,   727,   734,     0,     0,     0,
     1421     253,     2,     0,   531,   438,   439,   437,     0,     0,     0,
     1422       0,   546,     0,   633,   634,     0,     0,   544,   540,   546,
     1423     561,   546,   546,   542,     2,   541,   546,   600,   546,   546,
     1424     603,     0,     0,     0,   293,   293,   311,   359,     2,   293,
     1425     260,   296,   307,   340,   352,   477,     0,     2,     0,   453,
     1426     261,   294,   333,   348,   355,   473,     0,     2,     0,   310,
     1427     334,   341,   342,     0,   349,   353,   356,   360,   445,   293,
     1428     371,   364,   368,     0,   393,   474,   478,     0,     0,     0,
     1429       1,   293,     2,   529,   575,   577,   293,     2,   740,   294,
     1430     743,   544,   544,     0,   294,     0,     0,   272,   546,   542,
     1431       2,   293,     0,     0,   293,   549,     2,   500,     2,   553,
    14731432       0,     0,     0,     0,     0,     0,    19,    58,     4,     5,
    1474        6,    17,     0,     0,   292,     2,    63,    64,    65,    66,
    1475       46,    20,    47,    16,    23,    45,    67,   292,     0,    70,
     1433       6,    17,     0,     0,   293,     2,    63,    64,    65,    66,
     1434      46,    20,    47,    16,    23,    45,    67,   293,     0,    70,
    14761435      74,    77,    80,    85,    88,    90,    92,    94,    96,    98,
    1477      103,   493,   749,   450,   492,     0,   448,   449,     0,   564,
    1478      579,   582,   585,   591,   594,   597,   357,     0,     2,   737,
    1479        0,   292,   740,     2,    61,   292,     3,   424,     0,   432,
    1480      293,   292,   305,   331,   285,   346,   353,     3,     3,   406,
    1481      410,   420,   425,   471,   292,   426,   704,   705,   292,   427,
    1482      429,   292,     2,   581,   593,   727,     2,     2,   247,     2,
    1483      457,     0,   455,   454,   453,   139,     2,     2,   249,     2,
    1484        2,   248,     2,   279,     2,   280,     0,   278,     0,     0,
    1485        0,     0,     0,     0,     0,     0,     0,   565,   604,     0,
    1486      452,     2,   559,   568,   658,   561,   562,   531,   292,     2,
    1487      598,   607,   600,   601,     0,   274,   292,   292,   337,   293,
    1488        0,   293,     0,   292,   732,   736,   734,   532,   292,   543,
    1489      253,   261,   307,     0,     2,   533,   292,   497,   334,   335,
    1490      281,   349,   356,     0,   292,     0,   747,   397,     0,   474,
    1491      498,   250,   251,   518,   292,   434,     0,   292,   235,     0,
    1492        2,   237,     0,   293,     0,   255,     2,   256,   276,     0,
    1493        0,     2,   292,   543,   292,   484,   486,   485,     0,     0,
    1494      749,     0,   292,     0,   292,   488,   292,   558,   556,   557,
    1495      555,     0,   550,   553,     0,     0,   292,    53,   292,    67,
    1496       48,   292,    55,   292,   292,    51,    52,     2,   125,     0,
    1497        0,   446,     0,   445,   726,   119,   292,    18,     0,    30,
    1498       31,    36,     2,     0,    36,   109,   110,   111,   112,   113,
    1499      114,   115,   116,   117,   118,   108,     0,    49,    50,     0,
     1436     103,   494,   750,   451,   493,     0,   449,   450,     0,   565,
     1437     580,   583,   586,   592,   595,   598,   358,     0,     2,   738,
     1438       0,   293,   741,     2,    61,   293,     3,   425,     0,   433,
     1439     294,   293,   306,   332,   286,   347,   354,     3,     3,   407,
     1440     411,   421,   426,   472,   293,   427,   705,   706,   293,   428,
     1441     430,   293,     2,   582,   594,   728,     2,     2,   248,     2,
     1442     458,     0,   456,   455,   454,   140,     2,     2,   250,     2,
     1443       2,   249,     2,   280,     2,   281,     0,   279,     0,     0,
     1444       0,     0,     0,     0,     0,     0,     0,   566,   605,     0,
     1445     453,     2,   560,   569,   659,   562,   563,   532,   293,     2,
     1446     599,   608,   601,   602,     0,   275,   293,   293,   338,   294,
     1447       0,   294,     0,   293,   733,   737,   735,   533,   293,   544,
     1448     254,   262,   308,     0,     2,   534,   293,   498,   335,   336,
     1449     282,   350,   357,     0,   293,     0,   748,   398,     0,   475,
     1450     499,   251,   252,   519,   293,   435,     0,   293,   236,     0,
     1451       2,   238,     0,   294,     0,   256,     2,   257,   277,     0,
     1452       0,     2,   293,   544,   293,   485,   487,   486,     0,     0,
     1453     750,     0,   293,     0,   293,   489,   293,   559,   557,   558,
     1454     556,     0,   551,   554,     0,     0,   293,    53,   293,    67,
     1455      48,   293,    55,   293,   293,    51,    52,     2,   126,     0,
     1456       0,   447,     0,   446,   727,   120,   293,    18,     0,    30,
     1457      31,    36,     2,     0,    36,   110,   111,   112,   113,   114,
     1458     115,   116,   117,   118,   119,   109,   108,     0,    49,    50,
    15001459       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1501        0,     0,     0,     0,     0,     0,     0,     0,     0,   105,
    1502        2,   644,   451,   641,   545,   545,   649,   478,   292,     2,
    1503      583,   584,     0,   595,   596,     0,     2,   738,   741,   119,
    1504      292,     0,     2,   706,   293,   710,   701,   702,   708,     0,
    1505        2,     2,   666,   545,   749,   615,   545,   545,   749,   545,
    1506      629,   545,   545,   680,   433,   663,   545,   545,   671,   678,
    1507      292,   428,   293,     0,     0,   292,   716,   293,   721,   749,
    1508      713,   292,   718,   749,   292,   292,   292,     0,   119,     0,
    1509       19,     2,     0,    20,     0,   458,   747,     0,     0,   464,
    1510      239,     0,   292,     0,     0,     0,   543,   567,   571,   573,
    1511      603,   606,   610,   613,   566,   605,     0,   282,   656,     0,
    1512      292,   275,     0,     0,     0,     0,   273,     2,     0,   257,
    1513      534,   292,     0,     0,   292,     2,   362,   382,   371,     0,
    1514        0,   376,   370,   748,     0,     0,   395,     0,   293,     3,
    1515      413,     3,   417,   416,   589,     0,   529,   292,    61,     3,
    1516      292,   432,   293,     3,   426,   427,     2,     0,     0,     0,
    1517      483,   304,   292,   479,   481,     3,     2,     2,     0,   500,
    1518        3,     0,   552,   127,     0,     0,   220,     0,     0,     0,
    1519        0,    37,     0,     0,   119,   292,    21,     0,    22,     0,
    1520      690,   695,   447,   687,   545,   545,     0,   106,     3,     2,
    1521       28,     0,    34,     0,     2,    26,     0,   104,    71,    72,
    1522       73,    75,    76,    78,    79,    83,    84,    81,    82,    86,
    1523       87,    89,    91,    93,    95,    97,     0,     0,   750,   292,
    1524        0,     0,     0,   645,   646,   642,   643,   495,   494,   292,
    1525        0,   292,   712,   292,   717,   293,   292,   660,   292,   292,
    1526      703,   659,     2,   292,     0,     0,     0,     0,     0,     0,
    1527        0,     0,   681,     0,   667,   618,   634,   668,     2,   614,
    1528      621,   430,   616,   617,   431,     2,   628,   637,   630,   631,
    1529      664,   665,   679,   707,   711,   709,   749,   266,     2,   743,
    1530        2,   421,   715,   720,   422,     0,   400,     3,     3,     3,
    1531        3,   452,     3,     0,     2,   466,   463,   748,     0,   459,
    1532        2,   462,   465,     0,   292,   240,   262,     3,   270,   272,
    1533        0,   452,     2,   569,   570,     2,   608,   609,     0,   657,
    1534      535,     3,   343,   342,   345,   344,   292,   536,     0,   537,
    1535      370,     0,     0,   292,   292,     0,     0,   690,   380,   383,
    1536      387,   545,   387,   386,   379,   372,   545,   374,   377,   292,
    1537      397,   391,   102,   398,   747,     0,     0,   435,   238,     0,
    1538        0,     3,     2,   666,   428,     0,   525,     0,   749,   487,
    1539        0,   292,   292,   292,     0,   549,   551,   128,     0,     0,
    1540      213,     0,     0,     0,   221,   222,    54,     0,    56,    59,
    1541       60,     0,     2,   126,     0,     0,     0,   691,   692,   688,
    1542      689,   457,    68,    69,   107,   123,     3,   106,     0,     0,
    1543       25,    36,     3,     0,    33,   100,     0,     3,   648,   652,
    1544      655,   647,     3,   590,     3,   714,   719,     2,    61,   292,
    1545        3,     3,   293,     0,     3,   620,   624,   627,   636,   670,
    1546      674,   677,   292,     3,   619,   635,   669,   292,   292,   423,
    1547      292,   292,   744,     0,     0,     0,     0,   254,     0,   102,
    1548        0,     3,     3,     0,   460,     0,   456,     0,     0,   243,
    1549      292,     0,     0,   127,     0,     0,     0,     0,     0,   127,
    1550        0,     0,   106,   106,    19,     2,     0,     0,     3,   129,
    1551      130,     2,   141,   131,   132,   133,   134,   135,   136,   143,
    1552      145,     0,     0,     0,   283,   292,   292,   545,     0,   538,
    1553      292,   373,   375,     0,   389,   691,   384,   388,   385,   378,
    1554      382,   365,   396,     0,   577,     2,   662,   661,     0,   667,
    1555        2,   480,   482,   502,     3,   510,   511,     0,     2,   506,
    1556        3,     3,     0,     0,   554,   220,     0,     0,     0,   220,
    1557        0,     0,   119,   694,   698,   700,   693,   747,   106,     0,
    1558        3,   659,    40,     3,    38,    35,     0,     3,    99,   101,
    1559        0,     2,   650,   651,     0,     0,   292,     0,     0,     0,
    1560        3,   636,     0,     2,   622,   623,     2,   638,     2,   672,
    1561      673,     0,     0,    61,     0,     3,     3,     3,     3,   408,
    1562      407,   411,     2,     2,   746,   745,   120,     0,     0,     0,
    1563        0,     3,   461,     3,     0,   241,   144,     3,   293,   292,
    1564        0,     0,     0,     0,     2,     0,   189,     0,   187,     0,
    1565        0,     0,     0,     0,     0,     0,   545,   119,     0,   149,
    1566      146,   292,     0,     0,   265,   277,     3,     3,   544,   611,
    1567      366,   381,   394,   292,   264,   292,     0,   513,   490,   292,
    1568        0,     0,   489,   504,     0,     0,     0,   214,     0,   223,
    1569       57,     2,   696,   697,     0,   124,   121,     0,     0,     0,
    1570        0,     0,    24,     0,   653,   292,   578,   263,   722,   723,
    1571      724,     0,   675,   292,   292,   292,     3,     3,     0,   683,
    1572        0,     0,     0,     0,   292,   292,     3,   542,   120,   468,
    1573        0,     0,   244,   293,     0,     0,     0,     0,   292,   190,
    1574      188,   185,     0,   191,     0,     0,     0,     0,   195,   198,
    1575      196,   192,     0,   193,   127,    36,   142,   140,   242,     0,
    1576        0,   415,   419,   418,     0,   507,     2,   508,     2,   509,
    1577      503,   292,   226,     0,   224,     0,   226,   292,    32,   122,
    1578        2,    43,     2,    41,    39,    29,    27,     3,   725,     3,
    1579        3,     3,     0,     0,   682,   684,   625,   639,   267,     2,
    1580      405,     3,   404,     0,   470,   467,   127,     0,     0,   127,
    1581        3,     0,   127,   186,     0,     2,     2,   207,   197,     0,
    1582        0,     0,   138,     0,   572,   612,     2,     0,     0,     2,
    1583      227,     0,     0,   215,     0,     3,     0,     0,     0,     0,
    1584        0,     0,   685,   686,   292,     0,   469,   150,     0,     0,
    1585        2,   163,   127,   152,     0,   180,     0,   127,     0,     2,
    1586      154,     0,     2,     0,     2,     2,     2,   194,    33,   292,
    1587      512,   514,   505,     0,     0,     0,     0,     0,     3,     3,
    1588      654,   626,   640,   676,   409,   127,   156,   159,     0,   158,
    1589      162,     3,   165,   164,     0,   127,   182,   127,     3,     0,
    1590      292,     0,   292,     0,     2,     0,     2,   137,     2,   228,
    1591      229,     0,   225,   216,   699,     0,     0,   151,     0,     0,
    1592      161,   231,   166,     2,   233,   181,     0,   184,   170,   199,
    1593        3,   208,   212,   201,     3,     0,   292,     0,   292,     0,
    1594        0,     0,    44,    42,   157,   160,   127,     0,   167,   292,
    1595      127,   127,     0,   171,     0,     0,   690,   209,   210,   211,
    1596        0,   200,     3,   202,     3,   292,   217,   230,   147,   168,
    1597      153,   127,   234,   183,   178,   176,   172,   155,   127,     0,
    1598      691,     0,     0,     0,     0,   148,   169,   179,   173,   177,
    1599      176,   174,     3,     3,     0,     0,   491,   175,   203,   205,
    1600        3,     3,   204,   206
     1460       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     1461     105,     2,   645,   452,   642,   546,   546,   650,   479,   293,
     1462       2,   584,   585,     0,   596,   597,     0,     2,   739,   742,
     1463     120,   293,     0,     2,   707,   294,   711,   702,   703,   709,
     1464       0,     2,     2,   667,   546,   750,   616,   546,   546,   750,
     1465     546,   630,   546,   546,   681,   434,   664,   546,   546,   672,
     1466     679,   293,   429,   294,     0,     0,   293,   717,   294,   722,
     1467     750,   714,   293,   719,   750,   293,   293,   293,     0,   120,
     1468       0,    19,     2,     0,    20,     0,   459,   748,     0,     0,
     1469     465,   240,     0,   293,     0,     0,     0,   544,   568,   572,
     1470     574,   604,   607,   611,   614,   567,   606,     0,   283,   657,
     1471       0,   293,   276,     0,     0,     0,     0,   274,     2,     0,
     1472     258,   535,   293,     0,     0,   293,     2,   363,   383,   372,
     1473       0,     0,   377,   371,   749,     0,     0,   396,     0,   294,
     1474       3,   414,     3,   418,   417,   590,     0,   530,   293,    61,
     1475       3,   293,   433,   294,     3,   427,   428,     2,     0,     0,
     1476       0,   484,   305,   293,   480,   482,     3,     2,     2,     0,
     1477     501,     3,     0,   553,   128,     0,     0,   221,     0,     0,
     1478       0,     0,    37,     0,     0,   120,   293,    21,     0,    22,
     1479       0,   691,   696,   448,   688,   546,   546,     0,   106,     3,
     1480       2,    28,     0,    34,     0,     2,    26,     0,   104,    71,
     1481      72,    73,    75,    76,    78,    79,    83,    84,    81,    82,
     1482      86,    87,    89,    91,    93,    95,    97,     0,     0,   751,
     1483     293,     0,     0,     0,   646,   647,   643,   644,   496,   495,
     1484     293,     0,   293,   713,   293,   718,   294,   293,   661,   293,
     1485     293,   704,   660,     2,   293,     0,     0,     0,     0,     0,
     1486       0,     0,     0,   682,     0,   668,   619,   635,   669,     2,
     1487     615,   622,   431,   617,   618,   432,     2,   629,   638,   631,
     1488     632,   665,   666,   680,   708,   712,   710,   750,   267,     2,
     1489     744,     2,   422,   716,   721,   423,     0,   401,     3,     3,
     1490       3,     3,   453,     3,     0,     2,   467,   464,   749,     0,
     1491     460,     2,   463,   466,     0,   293,   241,   263,     3,   271,
     1492     273,     0,   453,     2,   570,   571,     2,   609,   610,     0,
     1493     658,   536,     3,   344,   343,   346,   345,   293,   537,     0,
     1494     538,   371,     0,     0,   293,   293,     0,     0,   691,   381,
     1495     384,   388,   546,   388,   387,   380,   373,   546,   375,   378,
     1496     293,   398,   392,   102,   399,   748,     0,     0,   436,   239,
     1497       0,     0,     3,     2,   667,   429,     0,   526,     0,   750,
     1498     488,     0,   293,   293,   293,     0,   550,   552,   129,     0,
     1499       0,   214,     0,     0,     0,   222,   223,    54,     0,    56,
     1500      59,    60,     0,     2,   127,     0,     0,     0,   692,   693,
     1501     689,   690,   458,    68,    69,   107,   124,     3,   106,     0,
     1502       0,    25,    36,     3,     0,    33,   100,     0,     3,   649,
     1503     653,   656,   648,     3,   591,     3,   715,   720,     2,    61,
     1504     293,     3,     3,   294,     0,     3,   621,   625,   628,   637,
     1505     671,   675,   678,   293,     3,   620,   636,   670,   293,   293,
     1506     424,   293,   293,   745,     0,     0,     0,     0,   255,     0,
     1507     102,     0,     3,     3,     0,   461,     0,   457,     0,     0,
     1508     244,   293,     0,     0,   128,     0,     0,     0,     0,     0,
     1509     128,     0,     0,   106,   106,    19,     2,     0,     0,     3,
     1510     130,   131,     2,   142,   132,   133,   134,   135,   136,   137,
     1511     144,   146,     0,     0,     0,   284,   293,   293,   546,     0,
     1512     539,   293,   374,   376,     0,   390,   692,   385,   389,   386,
     1513     379,   383,   366,   397,     0,   578,     2,   663,   662,     0,
     1514     668,     2,   481,   483,   503,     3,   511,   512,     0,     2,
     1515     507,     3,     3,     0,     0,   555,   221,     0,     0,     0,
     1516     221,     0,     0,   120,   695,   699,   701,   694,   748,   106,
     1517       0,     3,   660,    40,     3,    38,    35,     0,     3,    99,
     1518     101,     0,     2,   651,   652,     0,     0,   293,     0,     0,
     1519       0,     3,   637,     0,     2,   623,   624,     2,   639,     2,
     1520     673,   674,     0,     0,    61,     0,     3,     3,     3,     3,
     1521     409,   408,   412,     2,     2,   747,   746,   121,     0,     0,
     1522       0,     0,     3,   462,     3,     0,   242,   145,     3,   294,
     1523     293,     0,     0,     0,     0,     2,     0,   190,     0,   188,
     1524       0,     0,     0,     0,     0,     0,     0,   546,   120,     0,
     1525     150,   147,   293,     0,     0,   266,   278,     3,     3,   545,
     1526     612,   367,   382,   395,   293,   265,   293,     0,   514,   491,
     1527     293,     0,     0,   490,   505,     0,     0,     0,   215,     0,
     1528     224,    57,     2,   697,   698,     0,   125,   122,     0,     0,
     1529       0,     0,     0,    24,     0,   654,   293,   579,   264,   723,
     1530     724,   725,     0,   676,   293,   293,   293,     3,     3,     0,
     1531     684,     0,     0,     0,     0,   293,   293,     3,   543,   121,
     1532     469,     0,     0,   245,   294,     0,     0,     0,     0,   293,
     1533     191,   189,   186,     0,   192,     0,     0,     0,     0,   196,
     1534     199,   197,   193,     0,   194,   128,    36,   143,   141,   243,
     1535       0,     0,   416,   420,   419,     0,   508,     2,   509,     2,
     1536     510,   504,   293,   227,     0,   225,     0,   227,   293,    32,
     1537     123,     2,    43,     2,    41,    39,    29,    27,     3,   726,
     1538       3,     3,     3,     0,     0,   683,   685,   626,   640,   268,
     1539       2,   406,     3,   405,     0,   471,   468,   128,     0,     0,
     1540     128,     3,     0,   128,   187,     0,     2,     2,   208,   198,
     1541       0,     0,     0,   139,     0,   573,   613,     2,     0,     0,
     1542       2,   228,     0,     0,   216,     0,     3,     0,     0,     0,
     1543       0,     0,     0,   686,   687,   293,     0,   470,   151,     0,
     1544       0,     2,   164,   128,   153,     0,   181,     0,   128,     0,
     1545       2,   155,     0,     2,     0,     2,     2,     2,   195,    33,
     1546     293,   513,   515,   506,     0,     0,     0,     0,     0,     3,
     1547       3,   655,   627,   641,   677,   410,   128,   157,   160,     0,
     1548     159,   163,     3,   166,   165,     0,   128,   183,   128,     3,
     1549       0,   293,     0,   293,     0,     2,     0,     2,   138,     2,
     1550     229,   230,     0,   226,   217,   700,     0,     0,   152,     0,
     1551       0,   162,   232,   167,     2,   234,   182,     0,   185,   171,
     1552     200,     3,   209,   213,   202,     3,     0,   293,     0,   293,
     1553       0,     0,     0,    44,    42,   158,   161,   128,     0,   168,
     1554     293,   128,   128,     0,   172,     0,     0,   691,   210,   211,
     1555     212,     0,   201,     3,   203,     3,   293,   218,   231,   148,
     1556     169,   154,   128,   235,   184,   179,   177,   173,   156,   128,
     1557       0,   692,     0,     0,     0,     0,   149,   170,   180,   174,
     1558     178,   177,   175,     3,     3,     0,     0,   492,   176,   204,
     1559     206,     3,     3,   205,   207
    16011560};
    16021561
     
    16041563static const yytype_int16 yydefgoto[] =
    16051564{
    1606       -1,   813,   468,   300,    47,   133,   134,   301,   302,   303,
    1607      304,   305,   761,   762,  1133,  1134,   306,   381,   308,   309,
     1565      -1,   814,   468,   300,    47,   133,   134,   301,   302,   303,
     1566     304,   305,   762,   763,  1134,  1135,   306,   381,   308,   309,
    16081567     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
    1609      320,  1030,   518,   975,   546,   322,   976,   947,  1057,  1518,
    1610     1059,  1060,  1061,  1062,  1519,  1063,  1064,  1437,  1438,  1401,
    1611     1402,  1403,  1497,  1498,  1502,  1503,  1538,  1539,  1065,  1361,
    1612     1066,  1067,  1298,  1299,  1300,  1480,  1068,   145,   953,   954,
    1613      955,  1381,  1461,  1472,  1473,   469,   470,   874,   875,  1038,
     1568     320,  1031,   518,   976,   547,   322,   977,   948,  1058,  1519,
     1569    1060,  1061,  1062,  1063,  1520,  1064,  1065,  1438,  1439,  1402,
     1570    1403,  1404,  1498,  1499,  1503,  1504,  1539,  1540,  1066,  1362,
     1571    1067,  1068,  1299,  1300,  1301,  1481,  1069,   145,   954,   955,
     1572     956,  1382,  1462,  1473,  1474,   469,   470,   875,   876,  1039,
    16141573      51,    52,    53,    54,    55,   347,   158,    58,    59,    60,
    16151574      61,    62,   349,    64,    65,   264,    67,    68,   274,   351,
    16161575     352,    71,    72,    73,   118,    75,   204,   354,   119,    78,
    1617      120,    80,    81,   455,    82,   454,   688,   689,   690,   908,
    1618     1086,   909,    83,    84,   458,   456,   696,   855,   856,   857,
    1619      858,   699,   700,   701,   359,   360,   361,   362,   466,   340,
    1620      135,   136,   522,   324,   170,   645,   646,   647,   648,   649,
    1621       85,   121,    87,   489,   490,   939,   491,   277,   495,   325,
    1622       88,   137,   138,    89,  1321,  1108,  1109,  1110,  1111,    90,
    1623       91,   717,    92,   273,    93,    94,   187,  1032,   679,   412,
     1576     120,    80,    81,   455,    82,   454,   689,   690,   691,   909,
     1577    1087,   910,    83,    84,   458,   456,   697,   856,   857,   858,
     1578     859,   700,   701,   702,   359,   360,   361,   362,   466,   340,
     1579     135,   136,   522,   324,   170,   646,   647,   648,   649,   650,
     1580      85,   121,    87,   489,   490,   940,   491,   277,   495,   325,
     1581      88,   137,   138,    89,  1322,  1109,  1110,  1111,  1112,    90,
     1582      91,   718,    92,   273,    93,    94,   187,  1033,   680,   412,
    16241583     125,    95,   501,   502,   503,   188,   268,   190,   191,   192,
    16251584     269,    98,    99,   100,   101,   102,   103,   104,   195,   196,
    1626      197,   198,   199,   825,   605,   606,   607,   608,   200,   610,
    1627      611,   612,   572,   573,   574,   575,   751,   105,   614,   615,
    1628      616,   617,   618,   619,   968,   753,   754,   755,   595,   365,
    1629      366,   367,   368,   326,   164,   107,   108,   109,   370,   694,
    1630      569
     1585     197,   198,   199,   826,   606,   607,   608,   609,   200,   611,
     1586     612,   613,   573,   574,   575,   576,   752,   105,   615,   616,
     1587     617,   618,   619,   620,   969,   754,   755,   756,   596,   365,
     1588     366,   367,   368,   326,   164,   107,   108,   109,   370,   695,
     1589     570
    16311590};
    16321591
    16331592/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    16341593   STATE-NUM.  */
    1635 #define YYPACT_NINF -1282
     1594#define YYPACT_NINF -1323
    16361595static const yytype_int16 yypact[] =
    16371596{
    1638     7429,  6461, -1282,    36, -1282, -1282, -1282, -1282, -1282, -1282,
    1639    -1282,    83, -1282, -1282, -1282, -1282, -1282, -1282, -1282, -1282,
    1640    -1282, -1282, -1282, -1282, -1282, -1282,   131,   131,   131,  1844,
    1641      994,   124,  7661,   230, -1282, -1282, -1282, -1282, -1282,   175,
    1642    -1282, -1282, -1282,   965,   193, -1282, -1282, -1282, -1282,  5932,
    1643    -1282, -1282, -1282, -1282,   122,   216, -1282,  1880, -1282, -1282,
    1644    -1282, -1282,   251,  1298,   387,    61,  7777, -1282, -1282,  9536,
    1645     1247, -1282, -1282,   557,   425,  3682,   886,   409,   557,  1203,
    1646    -1282, -1282,   744,   941, -1282,   557,  1708, -1282,   342, -1282,
    1647      478,   483, -1282, -1282, -1282, -1282,   384,   216,   131, -1282,
    1648      131, -1282, -1282, -1282, -1282,  2963,  1880, -1282, -1282,  1880,
    1649    -1282,   381, -1282,  8264, -1282, -1282,  1830,  9075, -1282,   713,
    1650      713,   713, -1282, -1282, -1282,   131, -1282, -1282, -1282,   410,
    1651      433,   443, -1282, -1282, -1282,   470, -1282, -1282, -1282, -1282,
    1652    -1282,   487,   492, -1282, -1282,    90,  9044,  2201,   567,   421,
    1653      477,   513,   520,   554,   575,  5546,  6949,   504,   495, -1282,
    1654     9574, -1282, -1282, -1282, -1282,   558, -1282,   116,  4885,  4885,
    1655    -1282,   577,   253, -1282, -1282, -1282, -1282,   613,   284,   302,
    1656      335,   131,   616, -1282, -1282,  1298,  2031,   692, -1282,    65,
    1657    -1282,   131,   131,   216, -1282, -1282,   103, -1282,   131,   131,
    1658    -1282,  3459,   673,   678,   713,  6742, -1282, -1282,   702,  5932,
    1659    -1282, -1282,   557, -1282, -1282, -1282,   216, -1282,  1880,   122,
    1660    -1282,  8115, -1282,   713,   713,   713,   216, -1282,  1844, -1282,
    1661     4853, -1282, -1282,   627,   713, -1282,   713, -1282,   175,  9044,
    1662    -1282,   738, -1282,   994,   742,   713, -1282,  1844,   706,   717,
    1663    -1282,  7661,   598, -1282, -1282, -1282,  9503, -1282, -1282,  5769,
    1664    -1282,   692,    43, 10287,  9075,  1830,  3459, -1282,   197, -1282,
    1665    -1282,  8264,  1880,   745,  7808, -1282, -1282,   441, -1282, 10539,
    1666      754,   784,  3526,   766,  3896,  4720, -1282,   770, -1282, -1282,
    1667    -1282, -1282, 10420, 10420,  8818,   772, -1282, -1282, -1282, -1282,
    1668    -1282, -1282, -1282,   805, -1282,  1317,  2104,  9157,  3896, -1282,
    1669      619,   651,   733,   206,   860,   791,   775,   785,   823,   -65,
    1670    -1282, -1282,   794,   596, -1282,   337, -1282, -1282,  2201, -1282,
    1671    -1282,   290,   810, -1282,   298,   810,   819,   175, -1282, -1282,
    1672      836,  2963, -1282,   844,   858,  9270, -1282, -1282,  1515,  1616,
    1673     8533,  6742,   557, -1282,   557,   713,   713, -1282, -1282, -1282,
    1674    -1282, -1282, -1282,   713,  2963,  1880, -1282, -1282,  9188,  1765,
    1675    -1282,  4463, -1282, -1282, -1282, -1282, -1282, -1282, -1282,   869,
    1676     6164,  3896, -1282, -1282, -1282, -1282, -1282, -1282, -1282, -1282,
    1677    -1282, -1282, -1282, -1282, -1282, -1282,  1830, -1282,   592,   881,
    1678      887,   907,   977,   913,   918,   926,  2031, -1282, -1282,   917,
    1679      122,   952, -1282, -1282,   968, -1282, -1282, -1282,  9503, -1282,
    1680    -1282, -1282, -1282, -1282,  3459, -1282,  9044,  9044, -1282,   713,
    1681     1830,  6861,  1880,  8606, -1282, -1282, -1282, -1282,  9503,    43,
    1682    -1282, -1282,   557,   216, -1282, -1282,  9503, -1282,  5584, -1282,
    1683    -1282,   713,   713,   429,  4617,   967,   975,   972,   982,   713,
    1684    -1282, -1282, -1282, -1282,  9803, -1282,   430,  6623, -1282,   216,
    1685      991, -1282,  1830, 10621, 10344, -1282, -1282, -1282, -1282,   984,
    1686     3459, -1282,  8679,   692,  7545, -1282, -1282, -1282,  1025,   534,
    1687      794,   994,  7808,  1044,  8264, -1282,  7808, -1282, -1282, -1282,
    1688    -1282,   539, -1282,   997,   784,    70,  8818, -1282,  9301, -1282,
    1689    -1282,  8818, -1282,  8931,  8818, -1282, -1282,   999, -1282,   564,
    1690     1000,   689,  1003, -1282, -1282,  9650,  6592, -1282,   291, -1282,
    1691    -1282, 10287, -1282,   331, 10287, -1282, -1282, -1282, -1282, -1282,
    1692    -1282, -1282, -1282, -1282, -1282, -1282, 10287, -1282, -1282,  3896,
    1693     3896,  3896,  3896,  3896,  3896,  3896,  3896,  3896,  3896,  3896,
    1694     3896,  3896,  3896,  3896,  3896,  3896,  3896,  5176, 10287, -1282,
    1695      596,  1665, -1282, -1282,   131,   131, -1282, -1282,  9044, -1282,
    1696    -1282,   968,   598, -1282,   968, 10363, -1282, -1282, -1282,  5001,
    1697     6592,  1005,  1011, -1282,  9075, -1282, -1282,   558, -1282,  1017,
    1698      501,  1020,  3131,   211,   794, -1282,   131,   131,   794,   231,
    1699    -1282,   131,   131,   968, -1282, -1282,   131,   131, -1282,   810,
    1700     9421,  1880, 10766,    79,   605,  9421, -1282,  5769, -1282,   794,
    1701    -1282,  2963, -1282,   183,  8230,  8230,  8230,  1880, -1282, 10173,
    1702     1006,   869,   840,  1015,  1018, -1282,  1008,  4885,   242, -1282,
    1703     1104,  1880,  8230,   598,  1830,   598,   692,   448,   810, -1282,
    1704    -1282,   771,   810, -1282, -1282, -1282,   784, -1282,   810,   216,
    1705     9803, -1282,   637,  1041,   647,  1049, -1282,  1023,   216, -1282,
    1706    -1282,  9503,   216,  1046,  9301,  1053, -1282,   759, -1282,   357,
    1707      422,   994, -1282,   994,  1051,  3896, -1282,   994, 10766, -1282,
    1708    -1282,  1057, -1282, -1282, -1282,   598, -1282, 10694,   858, -1282,
    1709     8230,   851,  8533, -1282, -1282,   558,  1055,  1056,  1025,  2498,
    1710    -1282, -1282,  7808, -1282, -1282,  1062, -1282, -1282,  1070, -1282,
    1711     1062,  1072, 10539, 10287,  1060,  1061,   100,  1073,  1071,  1088,
    1712     1090, -1282,  1094,  1095,  9688,  6711, -1282, 10287, -1282,   689,
    1713     1753, -1282, -1282, -1282,   131,   131, 10230, 10287,  1080, -1282,
    1714    -1282,   650, -1282, 10287, -1282, -1282,   885, -1282, -1282, -1282,
    1715    -1282,   619,   619,   651,   651,   733,   733,   733,   733,   206,
    1716      206,   860,   791,   775,   785,   823,  3896,    14, -1282,  9803,
    1717     1099,  1100,  1102,  1665, -1282, -1282, -1282, -1282, -1282,  9803,
    1718      657,  8230, -1282,  2963, -1282,  7068,  9383, -1282,  4463,  6949,
    1719    -1282, -1282,   501,  9803,  1030,  1108,  1109,  1110,  1111,  1112,
    1720     1114,  1117, -1282,  3725,  3131, -1282, -1282, -1282, -1282, -1282,
    1721    -1282, -1282, -1282, -1282, -1282, -1282, -1282, -1282, -1282, -1282,
    1722    -1282, -1282,   968, -1282, -1282, -1282,   794, -1282, -1282, -1282,
    1723    -1282, -1282, -1282, -1282, -1282,  1118, -1282,  1120,  1122, -1282,
    1724    -1282,   122,  1080, 10173, -1282, -1282, -1282,  6164,  1123, -1282,
    1725    -1282, -1282, -1282,   994,  6295,  1204, -1282, -1282, -1282, -1282,
    1726     1116,   122, -1282, -1282,   968, -1282, -1282,   968,   125,   968,
    1727    -1282, -1282, -1282, -1282, -1282, -1282,  9612, -1282,   216, -1282,
    1728    -1282,   460,   467,  9188,  7187,  1951,  3896,  3145, -1282, -1282,
    1729     1105,    87,  1105, -1282,   994, -1282,   131, -1282, -1282,  8451,
    1730      972, -1282, -1282, -1282,   975,  1133,  1129, -1282, -1282,  1137,
    1731     1146, -1282,   851,  1870, -1282,   683, -1282,  2498,   794, -1282,
    1732     1149,  7808,  9721,  9044,  1151, -1282, -1282,  1150,  1152,  1138,
    1733    -1282,  3896,  1158,   250,  1153, -1282,  1157,   598,  1157, -1282,
    1734    -1282,  1157,  1160, -1282,  1166,  1169,  1172,  1753, -1282, -1282,
    1735    -1282,  6164, -1282, -1282, -1282, -1282,  1168, 10287,  1175,   598,
    1736    -1282, 10287, -1282,   598, -1282, -1282, 10287, -1282,   809,   810,
    1737    -1282, -1282, -1282, -1282, -1282, -1282, -1282,   869,   858,  9270,
    1738    -1282, -1282,  7306,  1180, -1282,   829,   810, -1282,   854,   868,
    1739      810, -1282,   713,  4154, -1282, -1282, -1282,  9803,  9803, -1282,
    1740     8606,  8606, -1282,  1176,  1181,  1183,  1189, -1282,  1179,   724,
    1741      -22,  1080, -1282,   598, -1282,  4885, -1282, 10287,   475, -1282,
    1742     6430,  1191,  1192, 10116,  1193,  1195,    21,    55,   195, 10287,
    1743     1196,   216, 10287, 10287,  1182,  1205,   579,  1209, -1282, -1282,
    1744    -1282,  1200, -1282, -1282, -1282, -1282, -1282, -1282, -1282, -1282,
    1745    -1282,   994,  1213, 10287, -1282,  9803,  9803,   131,  1214, -1282,
    1746     8962, -1282, -1282,   893, -1282,  3145, -1282, -1282, -1282, -1282,
    1747      759, -1282, -1282,  1218, -1282, -1282, -1282, -1282,  1227,  1870,
    1748    -1282, -1282,  1215, -1282,  1062, -1282, -1282,  1830,  1231, -1282,
    1749    -1282, -1282,   669,  1234, -1282,   100,  1237,  3896,  1220,   100,
    1750      100,  1248,  9650,   876,   810, -1282, -1282,  1008, 10287,  1251,
    1751     1168,   563,   204,  1250, -1282, -1282,  1255,  1250, -1282, -1282,
    1752     1258, -1282, -1282,   968,  1259,  1261,  6830,  1263,  1265,  1267,
    1753    -1282, -1282,  1273, -1282, -1282,   968, -1282, -1282, -1282, -1282,
    1754      968, 10287, 10287,   858,  1275, -1282, -1282, -1282, -1282, -1282,
    1755    -1282, -1282, -1282, -1282, -1282, -1282, -1282,  3896,  3896,  1278,
    1756     1279,  1250, -1282, -1282,   994, -1282, -1282, -1282,  8042,  9721,
    1757    10287, 10287,  1345, 10287, -1282,  1266, -1282,  1268, -1282,  1276,
    1758    10287,  1282, 10287,  1096,  1293,    49,   131,  5155,  1347, -1282,
    1759    -1282,  6295,  1280,   482, -1282, -1282, -1282, -1282, -1282, -1282,
    1760    -1282, -1282, -1282,  9936, -1282,  8679,  1287, -1282, -1282,  9721,
    1761      490,   497, -1282,  1290,  1281,   784,  1319, -1282,   334, -1282,
    1762    -1282, -1282, -1282,   968,  1323, -1282, -1282,  1327,   444,   549,
    1763      598,  1332, -1282,  1333, -1282,  9803, -1282, -1282, -1282, -1282,
    1764    -1282,  1334, -1282,  9803,  9803,  9803, -1282, -1282,  1335, -1282,
    1765     1337,  1341,  1343,   735,  8303,  8418, -1282, -1282,   248, -1282,
    1766     1351,  1356, -1282,  8752,   676,   686,  1350,   707,  6096, -1282,
    1767    -1282, -1282,   537, -1282,   716,  1365,  1367,   216,  1419,   951,
    1768    -1282, -1282, 10287, -1282, 10116, 10287, -1282, -1282, -1282,  1370,
    1769     1372, -1282, -1282, -1282,  1369, -1282, -1282, -1282, -1282, -1282,
    1770    -1282,  9721,   784,  1375, -1282,  1353,   784,  9803, -1282, -1282,
    1771    -1282, -1282, -1282, -1282, -1282, -1282, -1282, -1282, -1282, -1282,
    1772    -1282, -1282,  1378,  1379, -1282, -1282, -1282, -1282, -1282, -1282,
    1773    -1282,  1377, -1282,  1382, -1282, -1282, 10116,   104, 10287, 10116,
    1774    -1282,  1387, 10287, -1282,   243,  1402,  1405, -1282, -1282,  1393,
    1775     1394,  1388, -1282,   916, -1282, -1282, -1282,  1880,  1830,  1389,
    1776    -1282,   246,  3896, -1282,   729, -1282,   598,   598,  1399,  1400,
    1777     1404,  1409, -1282, -1282,  8606,  1407, -1282,  1479,  3896,  1395,
    1778    -1282, -1282, 10028, -1282,   757, -1282,  1401, 10116,  1403, -1282,
    1779    -1282,  1416, -1282,  1417, -1282,  1436,  1440, -1282,  1408,  9721,
    1780    -1282, -1282, -1282,   784,   598,  1429,  1411,  1431,  1250,  1250,
    1781    -1282, -1282, -1282, -1282, -1282, 10116,    10, -1282,   370, -1282,
    1782    -1282,  7893, -1282, -1282,  1412, 10287, -1282, 10287,  7893,   216,
    1783     9301,   216,  9301,  1437, -1282,  1438, -1282, -1282,  1434, -1282,
    1784    -1282,   790, -1282, -1282, -1282,  1441,  1442, -1282,  3896,  3896,
    1785    -1282, -1282,   998,    93, -1282, -1282,  1424, -1282,   998, -1282,
    1786    -1282,  2145,   598, -1282, -1282,   216,  9301,   216,  9301,  1446,
    1787     1425,   598, -1282, -1282, -1282, -1282, 10028,  1443,   998,  7969,
    1788    10287,  9940,  1455,   998,  1463,  2145,  3286, -1282, -1282, -1282,
    1789     1465, -1282, -1282, -1282, -1282,  9044, -1282, -1282, -1282,  9807,
    1790    -1282, 10028, -1282, -1282,  1453,  5404, -1282, -1282,  9940,   216,
    1791     3286,   216,  1476,  1478,   831, -1282,  9807, -1282, -1282, -1282,
    1792     5404, -1282, -1282, -1282,   216,   216, -1282, -1282, -1282, -1282,
    1793    -1282, -1282, -1282, -1282
     1597    7329,  8828, -1323,    37, -1323, -1323, -1323, -1323, -1323, -1323,
     1598   -1323,   109, -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323,
     1599   -1323, -1323, -1323, -1323, -1323, -1323,    85,    85,    85,   873,
     1600     733,   178,  7561,   370, -1323, -1323, -1323, -1323, -1323,   191,
     1601   -1323, -1323, -1323,   614,   225, -1323, -1323, -1323, -1323,  4615,
     1602   -1323, -1323, -1323, -1323,   229,   285, -1323,   934, -1323, -1323,
     1603   -1323, -1323,   435,  1196,   579,   110,  7677, -1323, -1323,  4858,
     1604    1038, -1323, -1323,   580,   596,  6761,  1021,   875,   580,  1103,
     1605   -1323, -1323,  1317,   308, -1323,   580,  1224, -1323,   495, -1323,
     1606     616,   623, -1323, -1323, -1323, -1323,   547,   285,    85, -1323,
     1607      85, -1323, -1323, -1323, -1323,  9174,   934, -1323, -1323,   934,
     1608   -1323,   551, -1323,  9403, -1323, -1323,  1899,  9436, -1323,   844,
     1609     844,   844, -1323, -1323, -1323,    85, -1323, -1323, -1323,   584,
     1610     608,   632, -1323, -1323, -1323,   646, -1323, -1323, -1323, -1323,
     1611   -1323,   664,   687, -1323, -1323,   -28,  8797,  2908,   117,   701,
     1612     717,   726,   771,   786,   799,  8715,  6849,   731,   757, -1323,
     1613    5600, -1323, -1323, -1323, -1323,   804, -1323,   223,  5225,  5225,
     1614   -1323,   802,   365, -1323, -1323, -1323, -1323,   816,   443,   480,
     1615     534,    85,   827, -1323, -1323,  1196,  4341,   868, -1323,    50,
     1616   -1323,    85,    85,   285, -1323, -1323,    61, -1323,    85,    85,
     1617   -1323,  4647,   857,   864,   844,  6523, -1323, -1323,   869,  4615,
     1618   -1323, -1323,   580, -1323, -1323, -1323,   285, -1323,   934,   229,
     1619   -1323,  7868, -1323,   844,   844,   844,   285, -1323,   873, -1323,
     1620    5676, -1323, -1323,   852,   844, -1323,   844, -1323,   191,  8797,
     1621   -1323,   884, -1323,   733,   890,   844, -1323,   873,   888,   892,
     1622   -1323,  7561,   631, -1323, -1323, -1323,  9256, -1323, -1323,  9621,
     1623   -1323,   868,   151, 10214,  9436,  1899,  4647, -1323,    88, -1323,
     1624   -1323,  9403,   934,   891,  7708, -1323, -1323,   347, -1323, 10561,
     1625     922,   956, 10347,   945, 10366, 10423, -1323,   954, -1323, -1323,
     1626   -1323, -1323, 10442, 10442,  8571,   952, -1323, -1323, -1323, -1323,
     1627   -1323, -1323, -1323,   988, -1323,   966,  1946,  8910, 10366, -1323,
     1628     756,   338,   485,   411,   635,   955,   947,   957,   984,   237,
     1629   -1323, -1323,   962,   647, -1323,   302, -1323, -1323,  2908, -1323,
     1630   -1323,   235,   985, -1323,   312,   985,   989,   191, -1323, -1323,
     1631     990,  9174, -1323,   999,  1006,  9023, -1323, -1323,  1335,  2030,
     1632    8286,  6523,   580, -1323,   580,   844,   844, -1323, -1323, -1323,
     1633   -1323, -1323, -1323,   844,  9174,   934, -1323, -1323,  9474,  1575,
     1634   -1323,  8017, -1323, -1323, -1323, -1323, -1323, -1323, -1323,  1008,
     1635    5958, 10366, -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323,
     1636   -1323, -1323, -1323, -1323, -1323, -1323,  1899, -1323,   973,   991,
     1637     992,  1012,   978,  1017,  1018,  1020,  4341, -1323, -1323,  1029,
     1638     229,  1031, -1323, -1323,  1033, -1323, -1323, -1323,  9256, -1323,
     1639   -1323, -1323, -1323, -1323,  4647, -1323,  8797,  8797, -1323,   844,
     1640    1899,  6642,   934,  8359, -1323, -1323, -1323, -1323,  9256,   151,
     1641   -1323, -1323,   580,   285, -1323, -1323,  9256, -1323,  5770, -1323,
     1642   -1323,   844,   844,   337,  8204,  1032,  1036,  1023,  1042,   844,
     1643   -1323, -1323, -1323, -1323,  9660, -1323,   367,  6404, -1323,   285,
     1644    1044, -1323,  1899, 10643, 10271, -1323, -1323, -1323, -1323,  1015,
     1645    4647, -1323,  8432,   868,  7445, -1323, -1323, -1323,   843,   436,
     1646     962,   733,  7708,  1341,  9403, -1323,  7708, -1323, -1323, -1323,
     1647   -1323,   508, -1323,  1051,   956,   248,  8571, -1323,  9512, -1323,
     1648   -1323,  8571, -1323,  8684,  8571, -1323, -1323,  1049, -1323,   606,
     1649    1057,   682,  1059, -1323, -1323,  3527,  6492, -1323,   362, -1323,
     1650   -1323, 10214, -1323,   368, 10214, -1323, -1323, -1323, -1323, -1323,
     1651   -1323, -1323, -1323, -1323, -1323, -1323, -1323, 10214, -1323, -1323,
     1652   10366, 10366, 10366, 10366, 10366, 10366, 10366, 10366, 10366, 10366,
     1653   10366, 10366, 10366, 10366, 10366, 10366, 10366, 10366,  3593, 10214,
     1654   -1323,   647,  1677, -1323, -1323,    85,    85, -1323, -1323,  8797,
     1655   -1323, -1323,  1033,   631, -1323,  1033, 10290, -1323, -1323, -1323,
     1656    5046,  6492,  1060,  1063, -1323,  9436, -1323, -1323,   804, -1323,
     1657    1067,   750,  1068,  2627,   125,   962, -1323,    85,    85,   962,
     1658     132, -1323,    85,    85,  1033, -1323, -1323,    85,    85, -1323,
     1659     985,  9545,   934, 10788,   532,   656,  9545, -1323,  9621, -1323,
     1660     962, -1323,  9174, -1323,   238,  7983,  7983,  7983,   934, -1323,
     1661    5791,  1047,  1008,   493,  1058,  1061, -1323,  1076,  5225,   528,
     1662   -1323,  1165,   934,  7983,   631,  1899,   631,   868,   430,   985,
     1663   -1323, -1323,   536,   985, -1323, -1323, -1323,   956, -1323,   985,
     1664     285,  9660, -1323,   619,  1086,   633,  1088, -1323,  1087,   285,
     1665   -1323, -1323,  9256,   285,  1089,  9512,  1092, -1323,  1065, -1323,
     1666     538,   552,   733, -1323,   733,  1085, 10366, -1323,   733, 10788,
     1667   -1323, -1323,  1096, -1323, -1323, -1323,   631, -1323, 10716,  1006,
     1668   -1323,  7983,   703,  8286, -1323, -1323,   804,  1095,  1098,   843,
     1669    5016, -1323, -1323,  7708, -1323, -1323,  1091, -1323, -1323,  1102,
     1670   -1323,  1091,  1104, 10561, 10214,  1090,  1093,    94,  1109,  1107,
     1671    1111,  1114, -1323,  1118,  1129,  9365,  6611, -1323, 10214, -1323,
     1672     682,  1717, -1323, -1323, -1323,    85,    85, 10157, 10214,  1125,
     1673   -1323, -1323,   653, -1323, 10214, -1323, -1323,   736, -1323, -1323,
     1674   -1323, -1323,   756,   756,   338,   338,   485,   485,   485,   485,
     1675     411,   411,   635,   955,   947,   957,   984, 10366,   260, -1323,
     1676    9660,  1132,  1136,  1137,  1677, -1323, -1323, -1323, -1323, -1323,
     1677    9660,   708,  7983, -1323,  9174, -1323,  6968,  9136, -1323,  8017,
     1678    6849, -1323, -1323,   750,  9660,  1022,  1140,  1141,  1142,  1143,
     1679    1146,  1149,  1154, -1323,  3715,  2627, -1323, -1323, -1323, -1323,
     1680   -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323,
     1681   -1323, -1323, -1323,  1033, -1323, -1323, -1323,   962, -1323, -1323,
     1682   -1323, -1323, -1323, -1323, -1323, -1323,  1155, -1323,  1157,  1159,
     1683   -1323, -1323,   229,  1125,  5791, -1323, -1323, -1323,  5958,  1158,
     1684   -1323, -1323, -1323, -1323,   733,  6174,  1248, -1323, -1323, -1323,
     1685   -1323,  1151,   229, -1323, -1323,  1033, -1323, -1323,  1033,    84,
     1686    1033, -1323, -1323, -1323, -1323, -1323, -1323,  9327, -1323,   285,
     1687   -1323, -1323,   559,   562,  9474,  7087,  2137, 10366,  3114, -1323,
     1688   -1323,  1156,    51,  1156, -1323,   733, -1323,    85, -1323, -1323,
     1689    8941,  1023, -1323, -1323, -1323,  1036,  1175,  1171, -1323, -1323,
     1690    1178,  1181, -1323,   703,  1901, -1323,   672, -1323,  5016,   962,
     1691   -1323,  1184,  7708,  9583,  8797,  1185, -1323, -1323,  1180,  1187,
     1692    1170, -1323, 10366,  1197,   326,  1194, -1323,  1202,   631,  1202,
     1693   -1323, -1323,  1202,  1199, -1323,  1208,  1210,  1211,  1717, -1323,
     1694   -1323, -1323,  5958, -1323, -1323, -1323, -1323,  1209, 10214,  1212,
     1695     631, -1323, 10214, -1323,   631, -1323, -1323, 10214, -1323,   558,
     1696     985, -1323, -1323, -1323, -1323, -1323, -1323, -1323,  1008,  1006,
     1697    9023, -1323, -1323,  7206,  1218, -1323,   674,   985, -1323,   813,
     1698     861,   985, -1323,   844,  4029, -1323, -1323, -1323,  9660,  9660,
     1699   -1323,  8359,  8359, -1323,  1215,  1216,  1225,  1230, -1323,  1232,
     1700     685,    82,  1125, -1323,   631, -1323,  5225, -1323, 10214,   564,
     1701   -1323,  6373,  1236,  1240, 10100,  1242,  1243,    70,    79,    96,
     1702   10214,  1244,   285, 10214, 10214,  1227,  1249,   522,  1222, -1323,
     1703   -1323, -1323,  1250, -1323, -1323, -1323, -1323, -1323, -1323, -1323,
     1704   -1323, -1323,   733,  1254, 10214, -1323,  9660,  9660,    85,  1257,
     1705   -1323,  9054, -1323, -1323,   752, -1323,  3114, -1323, -1323, -1323,
     1706   -1323,  1065, -1323, -1323,  1255, -1323, -1323, -1323, -1323,  1258,
     1707    1901, -1323, -1323,  1245, -1323,  1091, -1323, -1323,  1899,  1260,
     1708   -1323, -1323, -1323,   713,  1264, -1323,    94,  1269, 10366,  1252,
     1709      94,    94,  1262,  3527,   879,   985, -1323, -1323,  1076, 10214,
     1710    1273,  1209,   358,   204,  1270, -1323, -1323,  1275,  1270, -1323,
     1711   -1323,  1278, -1323, -1323,  1033,  1280,  1284,  6730,  1285,  1290,
     1712    1291, -1323, -1323,  1286, -1323, -1323,  1033, -1323, -1323, -1323,
     1713   -1323,  1033, 10214, 10214,  1006,  1294, -1323, -1323, -1323, -1323,
     1714   -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323, 10366, 10366,
     1715    1300,  1302,  1270, -1323, -1323,   733, -1323, -1323, -1323,  5213,
     1716    9583, 10214, 10214,  1374, 10214, -1323,  1295, -1323,  1296, -1323,
     1717    1297, 10214,  1301, 10214,  1105,  1304,    12,    85,  9289,  1625,
     1718   -1323, -1323,  6174,  1322,   573, -1323, -1323, -1323, -1323, -1323,
     1719   -1323, -1323, -1323, -1323,  9920, -1323,  8432,  1330, -1323, -1323,
     1720    9583,   576,   602, -1323,  1331,  1315,   956,  1337, -1323,   329,
     1721   -1323, -1323, -1323, -1323,  1033,  1339, -1323, -1323,  1320,   486,
     1722     509,   631,  1340, -1323,  1344, -1323,  9660, -1323, -1323, -1323,
     1723   -1323, -1323,  1347, -1323,  9660,  9660,  9660, -1323, -1323,  1348,
     1724   -1323,  1351,  1354,  1355,   716,  8056,  8171, -1323, -1323,   529,
     1725   -1323,  1357,  1362, -1323,  8505,   721,   730,  1358,   761,  3837,
     1726   -1323, -1323, -1323,   605, -1323,   766,  1366,  1367,   285,  1419,
     1727     834, -1323, -1323, 10214, -1323, 10100, 10214, -1323, -1323, -1323,
     1728    1370,  1375, -1323, -1323, -1323,  1372, -1323, -1323, -1323, -1323,
     1729   -1323, -1323,  9583,   956,  1379, -1323,  1352,   956,  9660, -1323,
     1730   -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323, -1323,
     1731   -1323, -1323, -1323,  1378,  1382, -1323, -1323, -1323, -1323, -1323,
     1732   -1323, -1323,  1387, -1323,  1386, -1323, -1323, 10100,   289, 10214,
     1733   10100, -1323,  1389, 10214, -1323,   318,  1405,  1406, -1323, -1323,
     1734    1399,  1400,  1380, -1323,   821, -1323, -1323, -1323,   934,  1899,
     1735    1396, -1323,   402, 10366, -1323,   785, -1323,   631,   631,  1407,
     1736    1408,  1413,  1415, -1323, -1323,  8359,  1414, -1323,  1490, 10366,
     1737    1385, -1323, -1323, 10012, -1323,   800, -1323,  1402, 10100,  1403,
     1738   -1323, -1323,  1426, -1323,  1427, -1323,  1445,  1446, -1323,  1411,
     1739    9583, -1323, -1323, -1323,   956,   631,  1434,  1417,  1435,  1270,
     1740    1270, -1323, -1323, -1323, -1323, -1323, 10100,   107, -1323,   433,
     1741   -1323, -1323,  7793, -1323, -1323,  1418, 10214, -1323, 10214,  7793,
     1742     285,  9512,   285,  9512,  1436, -1323,  1442, -1323, -1323,  1440,
     1743   -1323, -1323,   825, -1323, -1323, -1323,  1444,  1449, -1323, 10366,
     1744   10366, -1323, -1323,   909,   211, -1323, -1323,  1425, -1323,   909,
     1745   -1323, -1323,  2166,   631, -1323, -1323,   285,  9512,   285,  9512,
     1746    1453,  1431,   631, -1323, -1323, -1323, -1323, 10012,  1443,   909,
     1747    6091, 10214,  9924,  1452,   909,  1454,  2166,  3344, -1323, -1323,
     1748   -1323,  1458, -1323, -1323, -1323, -1323,  8797, -1323, -1323, -1323,
     1749    9791, -1323, 10012, -1323, -1323,  1438,  9703, -1323, -1323,  9924,
     1750     285,  3344,   285,  1464,  1466,   853, -1323,  9791, -1323, -1323,
     1751   -1323,  9703, -1323, -1323, -1323,   285,   285, -1323, -1323, -1323,
     1752   -1323, -1323, -1323, -1323, -1323
    17941753};
    17951754
     
    17971756static const yytype_int16 yypgoto[] =
    17981757{
    1799    -1282,  4519,  3402, -1282,   393, -1282,   353,   929,  -255,   927,
    1800    -1282,   536,  -524,  -496,  -864,   -86,  4763,     0, -1282,  1012,
    1801      494,   506,   417,   512,  1032,  1034,  1040,  1042,  1039, -1282,
    1802     -348,  -520,  3026,  -967, -1282,  -684,   629,   -16,  -590,   453,
    1803    -1282,   172, -1282,   397, -1192, -1282, -1282,   141, -1282, -1281,
    1804    -1043,   247, -1282, -1282, -1282, -1282,    72, -1149, -1282, -1282,
    1805    -1282, -1282, -1282, -1282,   315,  -843,    50, -1282,  -384, -1282,
    1806      498,   288, -1282,   167, -1282,  -343, -1282, -1282, -1282,   546,
    1807     -651, -1282, -1282,     8, -1002,    97,  1423, -1282, -1282, -1282,
    1808     -125, -1282,    23,  1201,  -202,  1925,  4332, -1282, -1282,    52,
    1809      224,   459,  1086, -1282,  1865, -1282, -1282,    25,  2362, -1282,
    1810     2640,  1529, -1282, -1282, -1282,  -646, -1282,   935,   945,   535,
    1811      718,    78, -1282, -1282, -1282,   934,   722,  -464, -1282,   -94,
    1812      -89,   313, -1282, -1282,  -870,  -942,   -24,  1177,  1054,   368,
    1813    -1282,  1732,   548,  -317,  -213,  -127,   662,   776, -1282,   990,
    1814    -1282,  3077,  1178,  -438,   923, -1282, -1282,   710, -1282,  -234,
    1815    -1282,    99, -1282, -1282, -1282, -1240,   423, -1282, -1282, -1282,
    1816     1170, -1282,   -20, -1282, -1282,  -853,  -105, -1239,  -126,  2286,
    1817    -1282,  2146, -1282,   921, -1282,  -146,    59,  -177,  -171,  -166,
    1818        7,   -40,   -28,   -27,   725,     4,    28,    37,   -63,  -154,
    1819     -151,  -150,  -141,  -271,  -540,  -513,  -508,  -569,  -320,  -517,
    1820    -1282, -1282,  -518,  1092,  1093,  1097,  1371,  5065,  -582,  -555,
    1821     -549,  -535,  -441, -1282,  -497,  -722,  -721,  -701,  -607,  -309,
    1822     -346, -1282, -1282,   185,   133,   -15, -1282,  3702,   -45,  -609,
    1823     -238
     1758   -1323,  4572,  3263, -1323,   197, -1323,   601,   950,  -251,   910,
     1759   -1323,   521,  -520,  -467,  -853,   -64,  3183,     0, -1323,  -150,
     1760     423,   446,   477,   450,  1016,  1025,  1019,  1026,  1028, -1323,
     1761    -622,  -408,  5012,  -745, -1323,  -735,   604,   472,  -656,   413,
     1762   -1323,  1279, -1323,   374, -1058, -1323, -1323,   126, -1323,  -823,
     1763   -1106,   222, -1323, -1323, -1323, -1323,    58, -1209, -1323, -1323,
     1764   -1323, -1323, -1323, -1323,   301, -1149,    35, -1323,  -933, -1323,
     1765     482,   274, -1323,   159, -1323,  -303, -1323, -1323, -1323,   535,
     1766    -827, -1323, -1323,    15, -1007,    71,    28, -1323, -1323, -1323,
     1767     -21, -1323,   357,  1253,  -198,  1636,  4113, -1323, -1323,    80,
     1768      54,   422,  1473, -1323,  1886, -1323, -1323,   192,  2183, -1323,
     1769    2495,   898, -1323, -1323, -1323,  -638, -1323,   924,   925,   524,
     1770     699,    83, -1323, -1323, -1323,   915,   695,  -339, -1323,  -106,
     1771      34,  1281, -1323, -1323,  -847,  -986,  1046,  1127,  1039,     5,
     1772   -1323,  1536,   481,  -165,  -210,  -124,   651,   758, -1323,   979,
     1773   -1323,  2789,  1548,  -413,   904, -1323, -1323,   689, -1323,  -235,
     1774   -1323,   158, -1323, -1323, -1323, -1257,   401, -1323, -1323, -1323,
     1775    1148, -1323,    21, -1323, -1323,  -858,  -105, -1322,  -129,  2267,
     1776   -1323,  2391, -1323,   906, -1323,  -184,    59,  -180,  -173,  -170,
     1777       7,   -40,   -35,   -33,    60,    -6,    25,    93,  -168,  -164,
     1778    -158,  -147,  -144,  -292,  -471,  -462,  -452,  -551,  -302,  -537,
     1779   -1323, -1323,  -511,  1069,  1072,  1074,  2608,  4844,  -578,  -514,
     1780    -502,  -495,  -500, -1323,  -508,  -724,  -717,  -708,  -590,  -305,
     1781    -195, -1323, -1323,   246,    19,    36, -1323,  3865,   104,  -623,
     1782    -397
    18241783};
    18251784
     
    18271786   positive, shift that token.  If negative, reduce the rule which
    18281787   number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1829 #define YYTABLE_NINF -521
     1788#define YYTABLE_NINF -522
    18301789static const yytype_int16 yytable[] =
    18311790{
    1832       49,   113,   428,   149,   166,   453,   440,    97,   399,   114,
    1833      766,   267,   143,   844,   400,   150,   151,   740,   628,   401,
    1834      827,  1070,   632,    63,   752,    76,   505,   964,   965,   609,
    1835      566,   402,    49,   826,   403,   404,   596,   868,  1187,    97,
    1836      407,   383,   384,   147,   405,   819,   919,   152,   966,    49,
    1837       50,   820,    69,   794,   725,    63,   161,    76,   730,    96,
    1838      815,   410,   357,   186,   567,   821,   209,   358,   166,    49,
    1839      193,   153,   973,   216,  1177,   669,   226,   219,   604,  1171,
    1840      154,  1379,    50,   818,    69,  1204,  1205,   816,   399,   202,
    1841      260,    96,   817,  1195,   400,   678,   425,    56,   115,   401,
    1842     1178,   327,   148,   682,    31,   113,  1468,   409,    96,   673,
    1843      675,   402,  1302,   113,   403,   404,   266,   271,   122,  1137,
    1844      407,  1443,   189,   408,   405,    96,    31,  1197,    96,    56,
    1845      747,   471,  1178,   106,   106,   475,   477,  -232,  -232,   203,
    1846      342,   280,    31,   948,   986,   149,   307,   147,  1398,  1399,
    1847     1169,  1170,   476,  1196,   161,   113,   345,   150,   151,  1439,
    1848      209,  1245,   830,   210,   436,   106,   220,   373,   837,  1181,
    1849       31,   859,   860,   714,   252,   923,   411,   729,   815,  1458,
    1850      735,  1303,   291,   964,   965,   186,   186,  1198,   877,   152,
    1851      913,   847,   123,   161,   327,   848,   742,   667,   411,   281,
    1852      736,   266,   106,   408,   966,   816,    96,   527,  -232,    49,
    1853      817,   951,   419,   153,   411,  1443,   161,   720,  1400,    96,
    1854     1443,   209,   154,  1069,    70,   149,   436,   173,   443,   168,
    1855     1439,   463,   377,   142,   163,  1077,    31,   150,   151,   307,
    1856     1443,   144,  1016,   804,   398,   189,   931,  1443,   378,   734,
    1857       31,    49,   723,   169,  1080,  1015,    70,   819,    97,   271,
    1858      664,   798,   166,   820,   271,   266,   266,  1199,    96,   253,
    1859       31,   113,   815,   161,    63,   991,    76,   821,   519,   472,
    1860       96,    76,   609,  1171,   146,   853,  1187,  1398,  1399,  1248,
    1861      212,   656,   476,   471,   307,  1003,   556,   557,   163,   816,
    1862      598,    50,  1139,    69,   817,   155,   481,   307,   411,  1525,
    1863       96,   596,  1200,   471,   568,  1093,   596,  1249,   441,   671,
    1864      828,   471,   601,   571,   479,   676,   588,   447,   147,  1536,
    1865      171,   558,   559,  1171,   664,   373,  1540,   994,   898,   357,
    1866      835,   113,   601,   665,   358,   345,   460,   922,    56,   602,
    1867      620,   827,  1526,   870,   111,   642,   342,  1409,  1070,  -467,
    1868     1118,  -467,  1423,   110,   625,   417,   831,   181,   625,   387,
    1869      834,   113,   871,   830,    41,    42,  1424,   819,  -467,  1541,
    1870     1119,   327,   327,   820,   106,   388,  1084,    96,   437,  1186,
    1871      201,   851,   844,   713,   435,   854,   266,   821,   445,   579,
    1872      390,   411,   759,   110,  1169,  1170,   186,   582,   603,   411,
    1873      672,   674,  -289,   373,    41,    42,   391,   665,   392,     8,
    1874        9,    10,    11,    12,   266,   177,   307,   307,  -288,  1496,
    1875      266,  1116,   357,   625,   393,  1501,   714,   358,   985,  1187,
    1876      702,   472,   764,    76,  1325,   442,  1187,   577,    31,   327,
    1877      176,   394,  1171,   578,   113,  1521,   435,   996,   247,  1201,
    1878     1528,   472,   804,    76,  1326,   189,   520,   395,   327,   472,
    1879     1126,    76,   266,   914,   261,    70,    34,   262,   250,   523,
    1880      266,   952,   625,  -516,    49,  1135,  1469,   373,   719,   915,
    1881      519,    97,   163,   252,   113,   519,   357,  1187,   519,   176,
    1882     1470,   358,   176,  1104,   609,   711,   307,    63,   113,    76,
    1883      342,   307,   263,   307,   307,  1029,   110,  1016,  1244,   -10,
    1884      869,   750,  1428,  1429,  1434,   113,   345,    41,    42,   229,
    1885      881,   330,   230,   327,    50,   234,    69,   236,   916,   683,
    1886      704,   910,  -440,    96,   245,   578,   705,   603,   176,   879,
    1887      804,   787,  -441,  1014,   917,  1330,   471,   882,   922,   411,
    1888     1069,     2,   206,     4,     5,     6,     7,  1157,  1159,   493,
    1889      571,   571,   494,    37,   212,   845,   914,    40,   307,   276,
    1890      598,    56,   928,   916,    41,    42,   439,   331,  1126,   625,
    1891      345,  1184,  1081,   913,   620,   714,   278,  1236,  1184,  1082,
    1892      602,   279,   602,   922,   372,   465,  1316,  1185,  1019,  1484,
    1893      812,   176,   601,  1318,  1308,   680,   371,   106,    45,    46,
    1894      625,   110,  1317,   332,   912,   625,    35,   620,    36,  1319,
    1895      333,   625,    41,    42,   625,   625,   625,  1362,  1138,   691,
    1896      483,   706,   806,  1512,   721,  1514,   702,   500,  1027,   731,
    1897      722,   286,   625,   747,   266,   732,   713,  1276,  1277,   814,
    1898     1332,   603,    41,    42,   334,   176,  1014,   376,  1074,  1363,
    1899      110,   229,   176,  -120,   746,  -120,   252,   329,   520,  -120,
    1900      747,    41,    42,   520,   113,   335,   520,   907,   514,  1029,
    1901      596,   523,   385,   523,  -120,  -120,   523,   212,  1360,   523,
    1902     1101,   252,   329,   411,   472,   570,    76,   411,    70,  1112,
    1903      625,   933,   620,    45,    46,   357,   177,   849,   719,   719,
    1904      358,   850,   389,     8,     9,    10,    11,    12,   399,   342,
    1905      472,  1234,    76,   629,   400,  1238,   549,   633,   498,   401,
    1906     1034,   176,   550,   551,   113,   345,   911,   892,   397,   750,
    1907      750,   402,    31,   747,   403,   404,   409,   894,   176,   450,
    1908      980,   407,   176,   747,   405,   702,   981,   993,   711,   922,
    1909      552,   553,  1408,   705,   162,   702,   804,   814,   603,  1232,
    1910       34,  1373,   426,   964,   965,   578,  1356,   427,   194,   702,
    1911     1474,   217,   747,   571,   227,   849,  1357,  1474,   749,  1100,
    1912      411,   625,   747,   625,   966,   999,    45,    46,   625,   345,
    1913     1161,   229,   602,   234,   432,   713,   110,  1359,   139,   238,
    1914      111,   554,   555,   747,   602,   176,  1364,    41,    42,   922,
    1915      922,    37,   747,   183,   184,    40,  -103,   714,   461,  1426,
    1916     -103,   890,    41,    42,   408,  1423,   442,  1348,  1522,   462,
    1917      897,  1349,  -364,   239,   899,  1476,  -393,  1477,   240,   484,
    1918      952,   806,  1425,   504,   952,   952,   291,  1444,   905,   691,
    1919      411,   814,   162,   747,   307,   508,    45,    46,  1436,   513,
    1920      885,   760,   411,   603,   525,   374,   765,   527,   342,   906,
    1921        2,   206,     4,     5,     6,     7,   625,    63,   327,    76,
    1922     1490,   229,   563,   113,   345,   907,  1491,   907,  1182,   562,
    1923     1523,   162,   110,   564,   139,   140,   714,   565,  1141,   113,
    1924      411,   338,   212,    41,    42,   568,    69,   711,  -437,    48,
    1925      112,  1168,   933,   933,   162,   465,   212,   719,  1153,   664,
    1926      411,  1546,   113,   307,   910,   586,   444,   578,  1494,  1436,
    1927     1105,   864,   560,   561,   845,    35,   589,    36,   112,   112,
    1928      932,    48,   601,  1156,  1083,   601,   911,   750,    45,    46,
    1929       -3,    56,    48,   775,   776,   777,   778,  1158,    48,   601,
    1930     1323,   638,   176,   891,  1508,  1241,    48,   411,  1087,   846,
    1931     1087,   657,    48,   702,   702,    48,   603,   658,    48,   345,
    1932      984,   981,  1227,   329,   411,   861,   878,   106,   880,  1369,
    1933     1370,   112,   112,   110,   176,   139,   140,   659,    -3,   876,
    1934      625,   625,   665,   661,    41,    42,   666,   912,   662,   212,
    1935      176,  1418,   981,  1126,   922,    48,   663,    37,    48,  1106,
    1936      307,    40,  1398,  1399,   176,    48,   771,   772,    41,    42,
    1937      922,   702,   702,   374,   737,   243,   738,   713,   927,   739,
    1938      773,   774,   743,   472,   668,    76,   110,  1380,   139,   140,
    1939     1079,  1380,   779,   780,    43,   106,    48,    41,    42,   257,
    1940      113,   692,    45,    46,    48,   907,   419,   660,   411,    48,
    1941      907,   693,  1189,   481,   329,   411,   697,    37,    70,   933,
    1942      500,    40,   987,   695,   691,  -236,   733,   266,    41,    42,
    1943      748,   744,   992,   756,    48,    48,   110,   807,   139,   140,
    1944      922,   922,   625,   808,   867,   176,  1004,    41,    42,   811,
    1945       48,   374,   822,   873,   718,   896,   -12,    56,    48,   828,
    1946      329,   601,    45,    46,   911,   -13,   345,    48,   866,   911,
    1947       48,   893,   213,   726,  1295,  1296,  1297,   112,   727,   895,
    1948      900,   232,  1331,  1333,  1334,   903,   921,  -414,  1459,   711,
    1949     -520,   936,   112,   106,  1284,  1285,   112,  1287,   722,   943,
    1950       48,   112,   945,   956,  1292,  1351,  1294,   957,   271,   113,
    1951      949,   498,   342,   950,    48,    48,   977,   219,   958,  1312,
    1952      959,    48,   116,   213,   960,   961,  -290,   113,    48,   988,
    1953      989,   307,   990,     8,     9,    10,    11,    12,  1005,  1006,
    1954     1007,  1008,  1009,  1203,  1010,   625,   442,  1011,  1022,   113,
    1955     -402,   702,  -401,  1071,    63,   906,    76,  1105,  1036,   702,
    1956      702,   702,    31,  1094,   215,  1095,   213,  1073,   711,  1096,
    1957      159,     2,   206,     4,     5,     6,     7,    48,  1097,  1103,
    1958      242,  1113,  1114,    69,    70,   691,   747,  1117,  1115,  1120,
    1959       34,   971,  1122,  1421,   625,   625,  1123,    48,    48,  1124,
    1960      228,  1534,  1125,   271,  1128,   210,   220,  1131,   307,   176,
    1961     1151,  1176,  1172,  1174,    48,   215,   510,  1173,    48,  1175,
    1962     1190,  1191,  1193,   702,  1194,  1202,   258,   213,    56,   643,
    1963     1121,   472,  1206,    76,   159,    -3,    35,  1207,    36,   547,
    1964      548,   113,   106,  1214,  1219,    48,  1106,  1058,   399,  1105,
    1965     1166,  1167,  1132,  1222,   400,    48,  1132,  1224,   215,   401,
    1966     1189,  1209,  1404,   493,   106,   213,  1228,   323,  1233,  1235,
    1967      213,   402,  1237,    48,   403,   404,   339,   547,  1240,    48,
    1968      407,    48,   106,  1246,   405,   499,  1250,  1252,  1254,  1256,
    1969       37,  1257,   183,   184,    40,  1258,  1507,  1259,   266,  1260,
    1970      441,    41,    42,  1262,   664,    56,  1132,  1269,  1216,  1217,
    1971     1278,  1279,  1286,   547,   625,  1307,   112,  1314,  1289,   215,
    1972     1290,    48,   528,   529,   530,  1320,   430,   185,  1291,    48,
    1973      434,  1322,   212,    48,  1293,    45,    46,    48,  1106,   113,
    1974      112,   106,   112,    57,    57,  1301,   531,  1105,   532,  1324,
    1975      533,   534,   528,   529,   530,    70,   213,   215,  1328,  1329,
    1976      323,   113,   215,   408,  1335,  1336,  1338,  1344,   113,  1345,
    1977      113,  1346,   113,  1347,   106,    57,   531,   112,   532,  1358,
    1978      533,  1305,   112,  1354,   472,   149,    76,   665,  1355,  1367,
    1979      327,   472,   434,    76,  1365,   488,  1366,   150,   151,  1297,
    1980     1374,  1506,  1375,  1376,  1382,  1383,   113,  -403,   113,    57,
    1981     1392,  1393,    57,  1189,  1396,   521,  1192,  1407,  1411,   113,
    1982     1189,  1413,  1415,  1416,  1422,  1506,  1506,   442,   159,  1430,
    1983     1431,   112,    70,   161,  1432,   307,  1106,   213,    48,  1433,
    1984     1417,  1435,   472,  1349,    76,  1440,  1449,  1451,   215,    48,
    1985     1506,    48,  1453,  1445,   213,  1447,  1455,   373,    56,  1462,
    1986     1457,  1464,   587,  1463,  1475,    56,   593,  1485,  1487,  1489,
    1987       48,  1189,   106,  1492,  1493,  1515,  1500,  1516,  1520,   213,
    1988      413,   768,   769,   770,   479,   626,    48,   421,  1337,   630,
    1989     1527,   112,   339,  1529,   106,  1531,  1339,  1340,  1341,   348,
    1990       48,   106,   112,    48,   112,  1537,  1544,    37,  1545,   174,
    1991      175,    40,  1208,   888,   781,   214,    56,   782,    41,    42,
    1992      176,  1132,  1132,  1132,   783,   785,  1130,   784,  1306,   215,
    1993     1495,  1410,  1547,  1368,  1384,  1478,    48,  1213,  1239,   901,
    1994      112,  1479,   112,  1483,   372,  1221,   112,   323,   323,   902,
    1995     1088,   924,   106,  1127,   112,  1482,   800,  1482,   872,   413,
    1996     1385,   703,  1092,  1035,    57,   938,   214,    48,    48,  1102,
    1997        0,   215,  1315,   946,   716,   687,     0,  1511,     0,  1513,
    1998        0,    48,   790,   791,  1058,    70,     0,   792,   116,     0,
    1999        0,  1482,    70,  1482,    57,     8,     9,    10,    11,    12,
    2000      213,     0,     0,     0,     0,     0,     0,     0,    37,   214,
    2001      183,   184,    40,   488,   576,   323,     0,   488,     0,    41,
    2002       42,  1542,   580,  1543,    31,   583,     0,   521,   213,   521,
    2003        0,  -291,   521,   213,   323,   521,  1550,  1551,     8,     9,
    2004       10,    11,    12,    70,     0,   600,   339,   601,     0,     0,
    2005        0,     0,    34,    45,    46,     0,     0,     0,     0,  1132,
    2006     1132,    48,     0,     0,     0,  1420,     0,    31,     0,     0,
    2007      214,     0,     0,    48,     0,     0,     0,  1372,     0,     0,
    2008        0,     0,   141,     8,     9,    10,    11,    12,   972,   413,
    2009      176,     0,   215,   421,   570,    34,   411,  1460,     0,   323,
    2010        0,     0,    45,    46,   213,     0,     0,     0,   214,     0,
    2011      802,     0,    31,   214,     0,     0,   643,     0,   213,     0,
    2012      215,     0,   112,     0,     0,   215,     0,     0,     0,  1397,
    2013        0,     0,  1405,     0,   241,   244,     0,     0,   499,     0,
    2014       34,   843,     0,     0,     0,    48,   593,     0,     0,     0,
    2015        0,     0,   852,     0,    48,  1509,    48,    37,     0,   174,
    2016      175,    40,     0,   112,  1517,     0,     0,   703,    41,    42,
    2017      413,     0,     0,     0,     0,  1442,   348,     0,     0,     0,
    2018     1446,     0,   749,     0,   411,    74,    48,     0,     0,     0,
    2019       45,    46,     0,     0,   376,     0,   215,     0,     0,   214,
    2020        8,     9,    10,    11,    12,   687,   112,     0,  1467,     0,
    2021      215,   213,     0,     0,     0,     0,     0,    74,     0,     0,
    2022      643,     0,    37,     0,   183,   184,    40,    57,   112,    31,
    2023        0,     0,   112,    41,    42,     0,   129,     0,   130,   131,
    2024      132,     0,     0,   488,     0,    66,   117,    41,    42,     0,
    2025        0,     0,     0,     0,   222,     0,     0,    34,     0,   265,
    2026        0,   576,   576,     0,     0,   339,     0,    45,    46,   348,
    2027        0,     0,    37,     0,   174,   175,    40,    66,     0,     0,
    2028      214,     0,   112,    41,    42,     0,   703,     0,     0,     0,
    2029        0,     0,  1535,     0,   160,   457,   703,     0,  1535,   932,
    2030        0,   601,     0,   215,     0,     0,     0,    45,    46,  1535,
    2031      703,     0,     0,  1535,   221,     0,     0,     0,     0,     0,
    2032      112,     0,   214,     0,   995,     0,     0,     0,     0,   802,
    2033        0,   547,     0,   348,    48,     0,     0,     0,     0,    48,
    2034        0,   353,     0,    37,     0,   183,   184,    40,   883,     0,
    2035      259,     0,   886,     0,    41,    42,    48,     0,     0,     0,
    2036        0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
    2037        0,     0,   510,     0,     0,     0,     0,   348,   348,   348,
    2038      905,     0,   411,     0,     0,     0,     0,     0,    45,    46,
    2039       31,     0,   328,     0,     0,   348,     0,     0,     0,     0,
    2040      259,   350,     0,     0,     0,     0,     0,     0,   213,     0,
    2041        0,     0,     0,     0,     0,   449,     0,   802,    34,     0,
    2042        0,     0,     0,    37,   339,   183,   184,    40,     0,     0,
    2043        0,   406,   644,   112,    41,    42,    74,     0,     0,     0,
    2044      687,    74,     0,   214,     0,     0,   424,     0,     0,   429,
    2045      431,     0,     0,   348,   160,     0,    48,     0,     0,     0,
    2046      185,     0,   488,  1107,   323,     0,     0,     0,    45,    46,
    2047        0,   214,     0,     0,     0,   448,   214,     0,     0,   451,
    2048        0,   452,     0,     0,   576,     0,     0,     0,     0,     0,
    2049      459,     0,   126,   126,   126,     0,    66,   112,   112,   112,
    2050      215,   473,     0,     0,     0,     0,     0,     0,     0,     0,
    2051        0,   480,     0,     0,   703,   703,     0,     0,     0,   431,
    2052      843,   535,   536,   537,   538,   539,   540,   541,   542,   543,
    2053      544,     8,     9,    10,    11,    12,   222,    37,     0,   183,
    2054      184,    40,     0,   724,   348,   728,     0,   214,    41,    42,
    2055        0,     0,   348,     0,     0,   545,     0,     0,     0,     0,
    2056       31,   214,     0,     0,   126,     0,   126,     0,     0,     0,
    2057        0,     0,   703,   703,  1505,     0,   411,     0,     0,     0,
    2058        0,     0,    45,    46,     0,     0,   259,     0,    34,     0,
    2059      594,   275,     0,    37,   213,     0,   622,    40,     0,     0,
    2060        0,   687,   413,    74,    41,    42,     0,     0,     0,   627,
    2061        0,     0,     0,   627,     0,     0,   259,    57,   353,     0,
    2062        0,     0,     0,    74,     0,     0,    48,    48,     0,     0,
    2063       43,    74,   124,   127,   128,   112,   112,     0,    45,    46,
    2064        0,     0,     0,   802,     0,     0,     0,   126,     0,   353,
    2065        0,     0,     0,     0,   214,   126,     0,   126,   126,     0,
    2066        0,     0,   126,   473,   126,   126,     0,   353,     0,    74,
    2067        0,     0,     0,   112,     0,     0,     0,     0,   350,  1142,
    2068        0,     0,    77,   473,     0,    57,   215,     0,     0,   213,
    2069        0,   473,     0,     0,   865,     0,  1154,     0,     0,     0,
    2070        0,     0,     0,     0,   254,     0,   255,     0,     0,   698,
    2071        0,   353,   431,     0,    77,     0,     0,     0,     0,     0,
    2072     1313,     0,     0,     0,     0,     0,     0,   712,   339,    66,
    2073       48,   112,     0,     0,   126,     0,     0,   431,     0,     0,
    2074      112,   431,     0,   918,     0,   920,     0,     0,     0,   457,
    2075     1107,   223,   703,     0,    48,    48,     0,     0,     0,     0,
    2076      703,   703,   703,   348,   348,     0,     0,     0,     0,     0,
    2077      259,   350,     0,     0,   413,   353,     0,     0,     0,    48,
    2078        0,   215,     0,    57,     0,     0,     0,   396,     0,     0,
    2079        0,     0,     0,     0,     0,     0,     0,   415,   416,     0,
    2080        0,     0,   420,     0,   422,   423,     0,     0,     0,     0,
    2081        0,     0,     0,     0,  1242,     0,   793,     0,     0,   353,
    2082      353,   353,     0,     0,   703,     0,     0,     0,     8,     9,
    2083       10,    11,    12,     0,   627,   805,     0,   353,   355,     0,
    2084        0,     0,  1107,     0,     0,     0,     0,   824,     0,     0,
    2085        0,   214,     0,     0,     0,   353,     0,    31,     0,     0,
    2086        0,     0,     0,     0,     0,   594,    74,     0,     0,     0,
    2087      594,     0,     0,     0,     0,     0,   627,     0,     0,   350,
    2088