Changeset d1625f8


Ignore:
Timestamp:
Aug 9, 2016, 2:02:22 PM (5 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, ctor, deferred_resn, demangler, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, resolv-new, with_gc
Children:
a6dd5b0, e297ceb
Parents:
7bf7fb9
Message:

more refactoring of parser code

Location:
src
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/DeclarationNode.cc

    r7bf7fb9 rd1625f8  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Aug  7 08:01:55 2016
    13 // Update Count     : 165
     12// Last Modified On : Tue Aug  9 08:39:20 2016
     13// Update Count     : 169
    1414//
    1515
     
    284284        newnode->type->array->dimension = size;
    285285        newnode->type->array->isStatic = isStatic;
    286         if ( newnode->type->array->dimension == 0 || dynamic_cast<ConstantNode *>( newnode->type->array->dimension ) ) {
     286        if ( newnode->type->array->dimension == 0 || dynamic_cast<ConstantExpr *>( newnode->type->array->dimension->build() ) ) {
    287287                newnode->type->array->isVarLen = false;
    288288        } else {
  • src/Parser/ExpressionNode.cc

    r7bf7fb9 rd1625f8  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Aug  7 09:23:12 2016
    13 // Update Count     : 437
     12// Last Modified On : Tue Aug  9 12:28:40 2016
     13// Update Count     : 482
    1414//
    1515
     
    3232using namespace std;
    3333
    34 ExpressionNode::ExpressionNode() : ParseNode() {}
    35 
    36 ExpressionNode::ExpressionNode( const string *name ) : ParseNode( name ) {}
    37 
    38 ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {
    39         if ( other.argName ) {
    40                 std::cout << "ExpressionNode" << std::endl;
    41                 argName = other.argName->clone();
    42         } else {
    43                 argName = 0;
    44         } // if
    45 }
    46 
    47 ExpressionNode * ExpressionNode::set_argName( const std::string *aName ) {
    48         argName = new VarRefNode( aName );
    49         return this;
    50 }
    51 
    52 ExpressionNode * ExpressionNode::set_argName( ExpressionNode *aDesignator ) {
    53         argName = aDesignator;
    54         return this;
    55 }
    56 
    57 void ExpressionNode::printDesignation( std::ostream &os, int indent ) const {
    58         if ( argName ) {
    59                 os << string( indent, ' ' ) << "(designated by:  ";
    60                 argName->printOneLine( os, indent );
    61                 os << ")" << std::endl;
    62         } // if
    63 }
    64 
    65 //##############################################################################
    66 
    67 NullExprNode::NullExprNode() {}
    68 
    69 NullExprNode *NullExprNode::clone() const {
    70         return new NullExprNode();
    71 }
    72 
    73 void NullExprNode::print( std::ostream & os, int indent ) const {
    74         printDesignation( os );
    75         os << "null expression";
    76 }
    77 
    78 void NullExprNode::printOneLine( std::ostream & os, int indent ) const {
    79         printDesignation( os );
    80         os << "null";
    81 }
    82 
    83 Expression *NullExprNode::build() const {
    84         return 0;
    85 }
     34ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {}
    8635
    8736//##############################################################################
     
    10857static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
    10958
    110 ConstantNode *build_constantInteger( std::string & str ) {
     59Expression *build_constantInteger( std::string & str ) {
    11160        static const BasicType::Kind kind[2][3] = {
    11261                { BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
     
    171120        } // if
    172121
    173         return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) ) );
     122        return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) );
    174123} // build_constantInteger
    175124
    176 ConstantNode *build_constantFloat( std::string & str ) {
     125Expression *build_constantFloat( std::string & str ) {
    177126        static const BasicType::Kind kind[2][3] = {
    178127                { BasicType::Float, BasicType::Double, BasicType::LongDouble },
     
    201150        } // if
    202151
    203         return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) ) );
     152        return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) );
    204153} // build_constantFloat
    205154
    206 ConstantNode *build_constantChar( std::string & str ) {
    207         return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) ) );
     155Expression *build_constantChar( std::string & str ) {
     156        return new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) );
    208157} // build_constantChar
    209158
    210 ConstantNode *build_constantStr( std::string & str ) {
     159ConstantExpr *build_constantStr( std::string & str ) {
    211160        // string should probably be a primitive type
    212161        ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
     
    214163                                                                                        toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
    215164                                                                   false, false );
    216         return new ConstantNode( new ConstantExpr( Constant( at, str ) ) );
     165        return new ConstantExpr( Constant( at, str ) );
    217166} // build_constantStr
    218167
     
    223172//}
    224173
    225 VarRefNode::VarRefNode( const string *name, bool labelp ) : ExpressionNode( name ), isLabel( labelp ) {}
    226 
    227 VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) {
    228 }
    229 
    230 Expression *VarRefNode::build() const {
    231         return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
    232 }
    233 
    234 void VarRefNode::printOneLine( std::ostream &os, int indent ) const {
    235         printDesignation( os );
    236         os << get_name() << ' ';
    237 }
    238 
    239 void VarRefNode::print( std::ostream &os, int indent ) const {
    240         printDesignation( os );
    241         os << string( indent, ' ' ) << "Referencing: ";
    242         os << "Variable: " << get_name();
    243         os << endl;
    244 }
    245 
    246 //##############################################################################
    247 
    248 DesignatorNode::DesignatorNode( ExpressionNode *expr, bool isArrayIndex ) : isArrayIndex( isArrayIndex ) {
    249         set_argName( expr );
    250         assert( get_argName() );
    251 
    252         if ( ! isArrayIndex ) {
    253                 if ( VarRefNode * var = dynamic_cast< VarRefNode * >( expr ) ) {
    254 
    255                         stringstream ss( var->get_name() );
    256                         double value;
    257                         if ( ss >> value ) {
    258                                 // this is a floating point constant. It MUST be ".0" or ".1", otherwise the program is invalid
    259                                 if ( ! (var->get_name() == ".0" || var->get_name() == ".1") ) {
    260                                         throw SemanticError( "invalid designator name: " + var->get_name() );
    261                                 } // if
    262                                 var->set_name( var->get_name().substr(1) );
    263                         } // if
    264                 } // if
    265         } // if
    266 }
    267 
    268 DesignatorNode::DesignatorNode( const DesignatorNode &other ) : ExpressionNode( other ), isArrayIndex( other.isArrayIndex ) {
    269 }
    270 
    271 class DesignatorFixer : public Mutator {
    272 public:
    273         virtual Expression* mutate( NameExpr *nameExpr ) {
    274                 if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) {
    275                         Constant val( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nameExpr->get_name() );
    276                         delete nameExpr;
    277                         return new ConstantExpr( val );
    278                 }
    279                 return nameExpr;
    280         }
    281 };
    282 
    283 Expression *DesignatorNode::build() const {
    284         Expression * ret = maybeBuild<Expression>(get_argName());
    285 
    286         if ( isArrayIndex ) {
    287                 // need to traverse entire structure and change any instances of 0 or 1 to ConstantExpr
    288                 DesignatorFixer fixer;
    289                 ret = ret->acceptMutator( fixer );
    290         } // if
    291 
    292         return ret;
    293 }
    294 
    295 void DesignatorNode::printOneLine( std::ostream &os, int indent ) const {
    296         if ( get_argName() ) {
    297                 if ( isArrayIndex ) {
    298                         os << "[";
    299                         get_argName()->printOneLine( os, indent );
    300                         os << "]";
    301                 } else {
    302                         os << ".";
    303                         get_argName()->printOneLine( os, indent );
    304                 }
    305         } // if
    306 }
    307 
    308 void DesignatorNode::print( std::ostream &os, int indent ) const {
    309         if ( get_argName() ) {
    310                 if ( isArrayIndex ) {
    311                         os << "[";
    312                         get_argName()->print( os, indent );
    313                         os << "]";
    314                 } else {
    315                         os << ".";
    316                         get_argName()->print( os, indent );
    317                 }
    318         } // if
    319 }
     174// VarRefNode::VarRefNode( const string *name, bool labelp ) : ExpressionNode( nullptr, name ), isLabel( labelp ) {}
     175
     176// VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) {}
     177
     178// Expression *VarRefNode::build() const {
     179//      return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
     180// }
     181
     182// void VarRefNode::printOneLine( std::ostream &os, int indent ) const {
     183//      printDesignation( os );
     184//      os << get_name() << ' ';
     185// }
     186
     187// void VarRefNode::print( std::ostream &os, int indent ) const {
     188//      printDesignation( os );
     189//      os << string( indent, ' ' ) << "Referencing: ";
     190//      os << "Variable: " << get_name();
     191//      os << endl;
     192// }
     193
     194NameExpr * build_varref( const string *name, bool labelp ) {
     195        return new NameExpr( *name, nullptr );
     196}
     197
     198//##############################################################################
     199
     200// DesignatorNode::DesignatorNode( ExpressionNode *expr, bool isArrayIndex, bool isVarRef ) : isArrayIndex( isArrayIndex ) {
     201//      set_argName( expr );
     202// }
     203
     204// DesignatorNode::DesignatorNode( const DesignatorNode &other ) : ExpressionNode( other ), isArrayIndex( other.isArrayIndex ) {}
     205
     206// class DesignatorFixer : public Mutator {
     207//   public:
     208//      virtual Expression* mutate( NameExpr *nameExpr ) {
     209//              if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) {
     210//                      Constant val( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nameExpr->get_name() );
     211//                      delete nameExpr;
     212//                      return new ConstantExpr( val );
     213//              }
     214//              return nameExpr;
     215//      }
     216// };
     217
     218// Expression *DesignatorNode::build() const {
     219//      return maybeBuild<Expression>(get_argName());
     220// }
     221
     222// void DesignatorNode::printOneLine( std::ostream &os, int indent ) const {
     223//      if ( get_argName() ) {
     224//              if ( isArrayIndex ) {
     225//                      os << "[";
     226//                      get_argName()->printOneLine( os, indent );
     227//                      os << "]";
     228//              } else {
     229//                      os << ".";
     230//                      get_argName()->printOneLine( os, indent );
     231//              }
     232//      } // if
     233// }
     234
     235// void DesignatorNode::print( std::ostream &os, int indent ) const {
     236//      if ( get_argName() ) {
     237//              if ( isArrayIndex ) {
     238//                      os << "[";
     239//                      get_argName()->print( os, indent );
     240//                      os << "]";
     241//              } else {
     242//                      os << ".";
     243//                      get_argName()->print( os, indent );
     244//              }
     245//      } // if
     246// }
    320247
    321248//##############################################################################
     
    333260//##############################################################################
    334261
    335 Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node ) {
    336         DeclarationNode *decl_node = arg->get_decl();
    337 
     262Expression *build_cast( DeclarationNode *decl_node, ExpressionNode *expr_node ) {
    338263        Type *targetType = decl_node->buildType();
    339         if ( dynamic_cast< VoidType* >( targetType ) ) {
     264        if ( dynamic_cast< VoidType * >( targetType ) ) {
    340265                delete targetType;
    341266                return new CastExpr( maybeBuild<Expression>(expr_node) );
     
    345270}
    346271
    347 Expression *build_fieldSel( ExpressionNode *expr_node, VarRefNode *member ) {
    348         NameExpr* memberExpr = dynamic_cast<NameExpr*> ( maybeBuild<Expression>( member) );
    349         assert( memberExpr );
    350         UntypedMemberExpr *ret = new UntypedMemberExpr( memberExpr->get_name(), maybeBuild<Expression>(expr_node) );
     272Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) {
     273        UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeBuild<Expression>(expr_node) );
    351274        delete member;
    352275        return ret;
    353276}
    354277
    355 Expression *build_pfieldSel( ExpressionNode *expr_node, VarRefNode *member ) {
    356         NameExpr* memberExpr = dynamic_cast<NameExpr*> ( maybeBuild<Expression>( member) );
    357         assert( memberExpr );
     278Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) {
    358279        UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
    359280        deref->get_args().push_back( maybeBuild<Expression>(expr_node) );
    360         UntypedMemberExpr *ret = new UntypedMemberExpr( memberExpr->get_name(), deref );
     281        UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
    361282        delete member;
    362283        return ret;
     
    366287                return new AddressExpr( maybeBuild<Expression>(expr_node) );
    367288}
    368 Expression *build_sizeOf( ExpressionNode *expr_node ) {
    369         if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr_node ) ) {
    370                 return new SizeofExpr( arg->get_decl()->buildType() );
    371         } else {
    372                 return new SizeofExpr( maybeBuild<Expression>(expr_node) );
    373         } // if
    374 }
    375 Expression *build_alignOf( ExpressionNode *expr_node ) {
    376         if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr_node ) ) {
    377                 return new AlignofExpr( arg->get_decl()->buildType() );
    378         } else {
    379                 return new AlignofExpr( maybeBuild<Expression>(expr_node) );
    380         } // if
    381 }
    382 Expression *build_offsetOf( TypeValueNode * arg, VarRefNode *member ) {
    383         NameExpr *memberExpr = dynamic_cast<NameExpr *>( maybeBuild<Expression>( member ) );
    384         assert( memberExpr );
    385         return new UntypedOffsetofExpr( arg->get_decl()->buildType(), memberExpr->get_name() );
     289Expression *build_sizeOfexpr( ExpressionNode *expr_node ) {
     290        return new SizeofExpr( maybeBuild<Expression>(expr_node) );
     291}
     292Expression *build_sizeOftype( DeclarationNode *decl_node ) {
     293        return new SizeofExpr( decl_node->buildType() );
     294}
     295Expression *build_alignOfexpr( ExpressionNode *expr_node ) {
     296        return new AlignofExpr( maybeBuild<Expression>(expr_node) );
     297}
     298Expression *build_alignOftype( DeclarationNode *decl_node ) {
     299        return new AlignofExpr( decl_node->buildType() );
     300}
     301Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member ) {
     302        return new UntypedOffsetofExpr( decl_node->buildType(), member->get_name() );
    386303}
    387304
     
    421338}
    422339
    423 Expression *build_attr( VarRefNode *var, ExpressionNode * expr ) {
    424         if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr ) ) {
    425                 return new AttrExpr( maybeBuild<Expression>(var), arg->get_decl()->buildType() );
    426         } else {
    427                 return new AttrExpr( maybeBuild<Expression>(var), maybeBuild<Expression>(expr) );
    428         } // if
    429 }
    430 
    431 Expression *build_tuple( ExpressionNode * expr ) {
     340Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node ) {
     341        return new AttrExpr( var, maybeBuild<Expression>(expr_node) );
     342}
     343Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node ) {
     344        return new AttrExpr( var, decl_node->buildType() );
     345}
     346
     347Expression *build_tuple( ExpressionNode * expr_node ) {
    432348        TupleExpr *ret = new TupleExpr();
    433         buildList( expr, ret->get_exprs() );
     349        buildList( expr_node, ret->get_exprs() );
    434350        return ret;
    435351}
    436352
    437 Expression *build_func( ExpressionNode * function, ExpressionNode * expr ) {
     353Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node ) {
    438354        std::list<Expression *> args;
    439355
    440         buildList( expr, args );
     356        buildList( expr_node, args );
    441357        return new UntypedExpr( maybeBuild<Expression>(function), args, nullptr );
    442358}
     
    450366//##############################################################################
    451367
    452 Expression *AsmExprNode::build() const {
    453         return new AsmExpr( maybeBuild< Expression >( inout ), (ConstantExpr *)maybeBuild<Expression>(constraint), maybeBuild<Expression>(operand) );
    454 }
    455 
    456 void AsmExprNode::print( std::ostream &os, int indent ) const {
    457         os << string( indent, ' ' ) << "Assembler Expression:" << endl;
    458         if ( inout ) {
    459                 os << string( indent, ' ' ) << "inout: " << std::endl;
    460                 inout->print( os, indent + 2 );
    461         } // if
    462         if ( constraint ) {
    463                 os << string( indent, ' ' ) << "constraint: " << std::endl;
    464                 constraint->print( os, indent + 2 );
    465         } // if
    466         if ( operand ) {
    467                 os << string( indent, ' ' ) << "operand: " << std::endl;
    468                 operand->print( os, indent + 2 );
    469         } // if
    470 }
    471 
    472 void AsmExprNode::printOneLine( std::ostream &os, int indent ) const {
    473         printDesignation( os );
    474         os << "( ";
    475         if ( inout ) inout->printOneLine( os, indent + 2 );
    476         os << ", ";
    477         if ( constraint ) constraint->printOneLine( os, indent + 2 );
    478         os << ", ";
    479         if ( operand ) operand->printOneLine( os, indent + 2 );
    480         os << ") ";
     368// Expression *AsmExprNode::build() const {
     369//      return new AsmExpr( maybeBuild< Expression >( inout ), (ConstantExpr *)maybeBuild<Expression>(constraint), maybeBuild<Expression>(operand) );
     370// }
     371
     372// void AsmExprNode::print( std::ostream &os, int indent ) const {
     373//      os << string( indent, ' ' ) << "Assembler Expression:" << endl;
     374//      if ( inout ) {
     375//              os << string( indent, ' ' ) << "inout: " << std::endl;
     376//              inout->print( os, indent + 2 );
     377//      } // if
     378//      if ( constraint ) {
     379//              os << string( indent, ' ' ) << "constraint: " << std::endl;
     380//              constraint->print( os, indent + 2 );
     381//      } // if
     382//      if ( operand ) {
     383//              os << string( indent, ' ' ) << "operand: " << std::endl;
     384//              operand->print( os, indent + 2 );
     385//      } // if
     386// }
     387
     388// void AsmExprNode::printOneLine( std::ostream &os, int indent ) const {
     389//      printDesignation( os );
     390//      os << "( ";
     391//      if ( inout ) inout->printOneLine( os, indent + 2 );
     392//      os << ", ";
     393//      if ( constraint ) constraint->printOneLine( os, indent + 2 );
     394//      os << ", ";
     395//      if ( operand ) operand->printOneLine( os, indent + 2 );
     396//      os << ") ";
     397// }
     398
     399Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) {
     400        return new AsmExpr( maybeBuild< Expression >( inout ), constraint, maybeBuild<Expression>(operand) );
    481401}
    482402
     
    489409//##############################################################################
    490410
    491 ValofExprNode::ValofExprNode( StatementNode *s ): body( s ) {}
    492 
    493 ValofExprNode::ValofExprNode( const ValofExprNode &other ) : ExpressionNode( other ), body( maybeClone( body ) ) {
    494 }
    495 
    496 ValofExprNode::~ValofExprNode() {
    497         delete body;
    498 }
    499 
    500 void ValofExprNode::print( std::ostream &os, int indent ) const {
    501         printDesignation( os );
    502         os << string( indent, ' ' ) << "Valof Expression:" << std::endl;
    503         get_body()->print( os, indent + 4);
    504 }
    505 
    506 void ValofExprNode::printOneLine( std::ostream &, int indent ) const {
    507         assert( false );
    508 }
    509 
    510 Expression *ValofExprNode::build() const {
    511         return new UntypedValofExpr ( maybeBuild<Statement>(get_body()), maybeBuild< Expression >( get_argName() ) );
     411// ValofExprNode::ValofExprNode( StatementNode *s ): body( s ) {}
     412
     413// ValofExprNode::ValofExprNode( const ValofExprNode &other ) : ExpressionNode( other ), body( maybeClone( body ) ) {
     414// }
     415
     416// ValofExprNode::~ValofExprNode() {
     417//      delete body;
     418// }
     419
     420// void ValofExprNode::print( std::ostream &os, int indent ) const {
     421//      os << string( indent, ' ' ) << "Valof Expression:" << std::endl;
     422//      get_body()->print( os, indent + 4);
     423// }
     424
     425// void ValofExprNode::printOneLine( std::ostream &, int indent ) const {
     426//      assert( false );
     427// }
     428
     429// Expression *ValofExprNode::build() const {
     430//      return new UntypedValofExpr( maybeBuild<Statement>(get_body()), nullptr );
     431// }
     432
     433Expression *build_valexpr( StatementNode *s ) {
     434        return new UntypedValofExpr( maybeBuild<Statement>(s), nullptr );
    512435}
    513436
     
    567490//##############################################################################
    568491
    569 TypeValueNode::TypeValueNode( DeclarationNode *decl ) : decl( decl ) {
    570 }
    571 
    572 TypeValueNode::TypeValueNode( const TypeValueNode &other ) : ExpressionNode( other ), decl( maybeClone( other.decl ) ) {
    573 }
    574 
    575 Expression *TypeValueNode::build() const {
     492// TypeValueNode::TypeValueNode( DeclarationNode *decl ) : decl( decl ) {
     493// }
     494
     495// TypeValueNode::TypeValueNode( const TypeValueNode &other ) : ExpressionNode( other ), decl( maybeClone( other.decl ) ) {
     496// }
     497
     498// Expression *TypeValueNode::build() const {
     499//      return new TypeExpr( decl->buildType() );
     500// }
     501
     502// void TypeValueNode::print( std::ostream &os, int indent ) const {
     503//      os << std::string( indent, ' ' ) << "Type:";
     504//      get_decl()->print( os, indent + 2);
     505// }
     506
     507// void TypeValueNode::printOneLine( std::ostream &os, int indent ) const {
     508//      os << "Type:";
     509//      get_decl()->print( os, indent + 2);
     510// }
     511
     512Expression *build_typevalue( DeclarationNode *decl ) {
    576513        return new TypeExpr( decl->buildType() );
    577514}
    578515
    579 void TypeValueNode::print( std::ostream &os, int indent ) const {
    580         os << std::string( indent, ' ' ) << "Type:";
    581         get_decl()->print( os, indent + 2);
    582 }
    583 
    584 void TypeValueNode::printOneLine( std::ostream &os, int indent ) const {
    585         os << "Type:";
    586         get_decl()->print( os, indent + 2);
    587 }
    588 
    589 
    590 CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}
    591 CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}
    592 
    593 CompoundLiteralNode::~CompoundLiteralNode() {
    594         delete kids;
    595         delete type;
    596 }
    597 
    598 CompoundLiteralNode *CompoundLiteralNode::clone() const {
    599         return new CompoundLiteralNode( *this );
    600 }
    601 
    602 void CompoundLiteralNode::print( std::ostream &os, int indent ) const {
    603         os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;
    604 
    605         os << string( indent + 2, ' ' ) << "type:" << endl;
    606         if ( type != 0 )
    607                 type->print( os, indent + 4 );
    608 
    609         os << string( indent + 2, ' ' ) << "initialization:" << endl;
    610         if ( kids != 0 )
    611                 kids->printList( os, indent + 4 );
    612 }
    613 
    614 void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {
    615         os << "( ";
    616         if ( type ) type->print( os );
    617         os << ", ";
    618         if ( kids ) kids->printOneLine( os );
    619         os << ") ";
    620 }
    621 
    622 Expression *CompoundLiteralNode::build() const {
    623         Declaration * newDecl = maybeBuild<Declaration>(type); // compound literal type
     516//##############################################################################
     517
     518// CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}
     519// CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}
     520
     521// CompoundLiteralNode::~CompoundLiteralNode() {
     522//      delete kids;
     523//      delete type;
     524// }
     525
     526// CompoundLiteralNode *CompoundLiteralNode::clone() const {
     527//      return new CompoundLiteralNode( *this );
     528// }
     529
     530// void CompoundLiteralNode::print( std::ostream &os, int indent ) const {
     531//      os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;
     532
     533//      os << string( indent + 2, ' ' ) << "type:" << endl;
     534//      if ( type != 0 )
     535//              type->print( os, indent + 4 );
     536
     537//      os << string( indent + 2, ' ' ) << "initialization:" << endl;
     538//      if ( kids != 0 )
     539//              kids->printList( os, indent + 4 );
     540// }
     541
     542// void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {
     543//      os << "( ";
     544//      if ( type ) type->print( os );
     545//      os << ", ";
     546//      if ( kids ) kids->printOneLine( os );
     547//      os << ") ";
     548// }
     549
     550// Expression *CompoundLiteralNode::build() const {
     551//      Declaration * newDecl = maybeBuild<Declaration>(type); // compound literal type
     552//      if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
     553//              return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild<Initializer>(kids) );
     554//      // these types do not have associated type information
     555//      } else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl )  ) {
     556//              return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild<Initializer>(kids) );
     557//      } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl )  ) {
     558//              return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild<Initializer>(kids) );
     559//      } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl )  ) {
     560//              return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild<Initializer>(kids) );
     561//      } else {
     562//              assert( false );
     563//      } // if
     564// }
     565
     566Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids ) {
     567        Declaration * newDecl = maybeBuild<Declaration>(decl_node); // compound literal type
    624568        if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
    625569                return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild<Initializer>(kids) );
  • src/Parser/ParseNode.cc

    r7bf7fb9 rd1625f8  
    1010// Created On       : Sat May 16 13:26:29 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Aug  6 08:26:11 2016
    13 // Update Count     : 93
     12// Last Modified On : Sun Aug  7 23:32:47 2016
     13// Update Count     : 94
    1414//
    1515
  • src/Parser/ParseNode.h

    r7bf7fb9 rd1625f8  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Aug  7 09:37:16 2016
    13 // Update Count     : 333
     12// Last Modified On : Tue Aug  9 12:28:12 2016
     13// Update Count     : 389
    1414//
    1515
     
    3333class CompoundStmtNode;
    3434class DeclarationNode;
     35class ExpressionNode;
    3536class InitializerNode;
    3637
     
    6768//##############################################################################
    6869
     70class InitializerNode : public ParseNode {
     71  public:
     72        InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
     73        InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
     74        ~InitializerNode();
     75
     76        ExpressionNode *get_expression() const { return expr; }
     77
     78        InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
     79        ExpressionNode *get_designators() const { return designator; }
     80
     81        InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
     82        bool get_maybeConstructed() const { return maybeConstructed; }
     83
     84        InitializerNode *next_init() const { return kids; }
     85
     86        void print( std::ostream &os, int indent = 0 ) const;
     87        void printOneLine( std::ostream & ) const;
     88
     89        virtual Initializer *build() const;
     90  private:
     91        ExpressionNode *expr;
     92        bool aggregate;
     93        ExpressionNode *designator; // may be list
     94        InitializerNode *kids;
     95        bool maybeConstructed;
     96};
     97
     98//##############################################################################
     99
    69100class ExpressionNode : public ParseNode {
    70101  public:
    71         ExpressionNode();
    72         ExpressionNode( const std::string * );
     102        ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {}
     103        ExpressionNode( Expression * expr, const std::string *name ) : ParseNode( name ), expr( expr ) {}
    73104        ExpressionNode( const ExpressionNode &other );
    74         virtual ~ExpressionNode() { delete argName; }
    75 
    76         virtual ExpressionNode *clone() const = 0;
    77 
    78         ExpressionNode *get_argName() const { return argName; }
    79         ExpressionNode *set_argName( const std::string *aName );
    80         ExpressionNode *set_argName( ExpressionNode *aDesignator );
     105        virtual ~ExpressionNode() {}
     106
     107        virtual ExpressionNode *clone() const { return 0; }
     108
    81109        bool get_extension() const { return extension; }
    82110        ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
    83111
    84         virtual void print( std::ostream &os, int indent = 0) const = 0;
    85         virtual void printOneLine( std::ostream &os, int indent = 0) const = 0;
    86 
    87         virtual Expression *build() const = 0;
    88   protected:
    89         void printDesignation ( std::ostream &os, int indent = 0) const;
    90   private:
    91         ExpressionNode *argName = 0;
     112        virtual void print( std::ostream &os, int indent = 0 ) const {}
     113        virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
     114
     115        virtual Expression *build() const { return expr; }
     116  private:
    92117        bool extension = false;
     118        Expression *expr;
    93119};
    94120
     
    109135
    110136// NullExprNode is used in tuples as a place-holder where a tuple component is omitted e.g., [ 2, , 3 ]
    111 class NullExprNode : public ExpressionNode {
    112   public:
    113         NullExprNode();
    114 
    115         virtual NullExprNode *clone() const;
    116 
    117         virtual void print( std::ostream &os, int indent = 0) const;
    118         virtual void printOneLine( std::ostream &os, int indent = 0) const;
    119 
    120         virtual Expression *build() const;
    121 };
    122 
    123 //##############################################################################
    124 
    125 class ConstantNode : public ExpressionNode {
    126   public:
    127         ConstantNode( ConstantExpr *expr ) : expr( expr ) {}
    128         ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {}
    129         virtual ~ConstantNode() {}
    130 
    131         virtual ConstantNode *clone() const { assert( false ); return new ConstantNode( *this ); }
    132 
    133         ConstantExpr *get_expr() const { return expr; }
    134 
    135         virtual void print( std::ostream &os, int indent = 0 ) const {}
    136         virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
    137 
    138         Expression *build() const { return expr; }
    139   private:
    140         ConstantExpr *expr;
    141 };
    142 
    143 ConstantNode *build_constantInteger( std::string &str );
    144 ConstantNode *build_constantFloat( std::string &str );
    145 ConstantNode *build_constantChar( std::string &str );
    146 ConstantNode *build_constantStr( std::string &str );
    147 
    148 //##############################################################################
    149 
    150 class VarRefNode : public ExpressionNode {
    151   public:
    152         VarRefNode( const std::string *, bool isLabel = false );
    153         VarRefNode( const VarRefNode &other );
    154 
    155         virtual Expression *build() const ;
    156 
    157         virtual VarRefNode *clone() const { return new VarRefNode( *this ); }
    158 
    159         virtual void print( std::ostream &os, int indent = 0 ) const;
    160         virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
    161   private:
    162         bool isLabel;
    163 };
    164 
    165 //##############################################################################
    166 
    167 class DesignatorNode : public ExpressionNode {
    168   public:
    169         DesignatorNode( ExpressionNode *expr, bool isArrayIndex = false );
    170         DesignatorNode( const DesignatorNode &other );
    171 
    172         virtual Expression *build() const ;
    173         virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); }
    174 
    175         virtual void print( std::ostream &os, int indent = 0 ) const;
    176         virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
    177   private:
    178         bool isArrayIndex;
    179 };
    180 
    181 //##############################################################################
    182 
    183 class TypeValueNode : public ExpressionNode {
    184   public:
    185         TypeValueNode( DeclarationNode * );
    186         TypeValueNode( const TypeValueNode &other );
    187 
    188         DeclarationNode *get_decl() const { return decl; }
    189 
    190         virtual Expression *build() const ;
    191 
    192         virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); }
    193 
    194         virtual void print( std::ostream &os, int indent = 0) const;
    195         virtual void printOneLine( std::ostream &os, int indent = 0) const;
    196   private:
    197         DeclarationNode *decl;
    198 };
    199 
    200 //##############################################################################
    201 
    202 class CompositeExprNode : public ExpressionNode {
    203   public:
    204         CompositeExprNode( Expression *expr ) : expr( expr ) {}
    205         CompositeExprNode( const CompositeExprNode &other ) : expr( other.expr->clone() ) {}
    206         virtual ~CompositeExprNode() {}
    207 
    208         CompositeExprNode *clone() const { assert( false ); return new CompositeExprNode( *this ); }
    209 
    210         Expression *build() const { return expr; }
    211 
    212         void print( std::ostream &os, int indent = 0 ) const {}
    213         void printOneLine( std::ostream &os, int indent = 0 ) const {}
    214   private:
    215         Expression *expr;
    216 };
     137// class NullExprNode : public ExpressionNode {
     138//   public:
     139//      NullExprNode() {}
     140
     141//      virtual NullExprNode *clone() const { assert( false ); }
     142
     143//      virtual void print( std::ostream &os, int indent = 0) const {}
     144//      virtual void printOneLine( std::ostream &os, int indent = 0) const {}
     145
     146//      virtual Expression *build() const { assert( false ); return 0; }
     147// };
     148
     149//##############################################################################
     150
     151// class ConstantNode : public ExpressionNode {
     152//   public:
     153//      ConstantNode( ConstantExpr *expr ) : expr( expr ) {}
     154//      ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {}
     155//      virtual ~ConstantNode() {}
     156
     157//      virtual ConstantNode *clone() const { assert( false ); return new ConstantNode( *this ); }
     158
     159//      ConstantExpr *get_expr() const { return expr; }
     160
     161//      virtual void print( std::ostream &os, int indent = 0 ) const {}
     162//      virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
     163
     164//      Expression *build() const { return expr; }
     165//   private:
     166//      ConstantExpr *expr;
     167// };
     168
     169Expression *build_constantInteger( std::string &str );
     170Expression *build_constantFloat( std::string &str );
     171Expression *build_constantChar( std::string &str );
     172ConstantExpr *build_constantStr( std::string &str );
     173
     174//##############################################################################
     175
     176// class VarRefNode : public ExpressionNode {
     177//   public:
     178//      VarRefNode( const std::string *, bool isLabel = false );
     179//      VarRefNode( const VarRefNode &other );
     180
     181//      virtual Expression *build() const ;
     182
     183//      virtual VarRefNode *clone() const { return new VarRefNode( *this ); }
     184
     185//      virtual void print( std::ostream &os, int indent = 0 ) const;
     186//      virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
     187//   private:
     188//      bool isLabel;
     189// };
     190
     191NameExpr *build_varref( const std::string *name, bool labelp = false );
     192
     193//##############################################################################
     194
     195// class DesignatorNode : public ExpressionNode {
     196//   public:
     197//      DesignatorNode( ExpressionNode *expr, bool isArrayIndex = false );
     198//      DesignatorNode( const DesignatorNode &other );
     199
     200//      virtual Expression *build() const ;
     201//      virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); }
     202
     203//      virtual void print( std::ostream &os, int indent = 0 ) const;
     204//      virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
     205//   private:
     206//      bool isArrayIndex;
     207// };
     208
     209//##############################################################################
     210
     211// class TypeValueNode : public ExpressionNode {
     212//   public:
     213//      TypeValueNode( DeclarationNode * );
     214//      TypeValueNode( const TypeValueNode &other );
     215
     216//      DeclarationNode *get_decl() const { return decl; }
     217
     218//      virtual Expression *build() const ;
     219
     220//      virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); }
     221
     222//      virtual void print( std::ostream &os, int indent = 0) const;
     223//      virtual void printOneLine( std::ostream &os, int indent = 0) const;
     224//   private:
     225//      DeclarationNode *decl;
     226// };
     227
     228Expression *build_typevalue( DeclarationNode *decl );
     229
     230//##############################################################################
     231
     232// class CompositeExprNode : public ExpressionNode {
     233//   public:
     234//      CompositeExprNode( Expression *expr ) : expr( expr ) {}
     235//      CompositeExprNode( const CompositeExprNode &other ) : expr( other.expr->clone() ) {}
     236//      virtual ~CompositeExprNode() {}
     237
     238//      CompositeExprNode *clone() const { assert( false ); return new CompositeExprNode( *this ); }
     239
     240//      Expression *build() const { return expr; }
     241
     242//      void print( std::ostream &os, int indent = 0 ) const {}
     243//      void printOneLine( std::ostream &os, int indent = 0 ) const {}
     244//   private:
     245//      Expression *expr;
     246// };
    217247
    218248enum class OperKinds {
     
    227257};
    228258
    229 Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node );
    230 Expression *build_fieldSel( ExpressionNode *expr_node, VarRefNode *member );
    231 Expression *build_pfieldSel( ExpressionNode *expr_node, VarRefNode *member );
     259Expression *build_cast( DeclarationNode * decl_node, ExpressionNode *expr_node );
     260Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member );
     261Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member );
    232262Expression *build_addressOf( ExpressionNode *expr_node );
    233 Expression *build_sizeOf( ExpressionNode *expr_node );
    234 Expression *build_alignOf( ExpressionNode *expr_node );
    235 Expression *build_offsetOf( TypeValueNode * arg, VarRefNode *member );
     263Expression *build_sizeOfexpr( ExpressionNode *expr_node );
     264Expression *build_sizeOftype( DeclarationNode *decl_node );
     265Expression *build_alignOfexpr( ExpressionNode *expr_node );
     266Expression *build_alignOftype( DeclarationNode *decl_node );
     267Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member );
    236268Expression *build_and( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
    237269Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind );
     
    242274Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 );
    243275Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
    244 Expression *build_attr( VarRefNode *var, ExpressionNode * expr = 0 );
    245 Expression *build_tuple( ExpressionNode * expr = 0 );
    246 Expression *build_func( ExpressionNode * function, ExpressionNode * expr );
     276Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node );
     277Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node );
     278Expression *build_tuple( ExpressionNode * expr_node = 0 );
     279Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node );
    247280Expression *build_range( ExpressionNode * low, ExpressionNode *high );
    248281
    249282//##############################################################################
    250283
    251 class AsmExprNode : public ExpressionNode {
    252   public:
    253         AsmExprNode();
    254         AsmExprNode( ExpressionNode *inout, ConstantNode *constraint, ExpressionNode *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
    255         virtual ~AsmExprNode() { delete inout; delete constraint; delete operand; }
    256 
    257         virtual AsmExprNode *clone() const { return new AsmExprNode( *this ); }
    258         virtual Expression *build() const;
     284// class AsmExprNode : public ExpressionNode {
     285//   public:
     286//      AsmExprNode();
     287//      AsmExprNode( ExpressionNode *inout, ConstantNode *constraint, ExpressionNode *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
     288//      virtual ~AsmExprNode() { delete inout; delete constraint; delete operand; }
     289
     290//      virtual AsmExprNode *clone() const { return new AsmExprNode( *this ); }
     291//      virtual Expression *build() const;
     292
     293//      virtual void print( std::ostream &os, int indent = 0) const;
     294//      virtual void printOneLine( std::ostream &os, int indent = 0) const;
     295
     296//      ExpressionNode *get_inout() const { return inout; };
     297//      void set_inout( ExpressionNode *newValue ) { inout = newValue; }
     298
     299//      ConstantNode *get_constraint() const { return constraint; };
     300//      void set_constraint( ConstantNode *newValue ) { constraint = newValue; }
     301
     302//      ExpressionNode *get_operand() const { return operand; };
     303//      void set_operand( ExpressionNode *newValue ) { operand = newValue; }
     304//   private:
     305//      ExpressionNode *inout;
     306//      ConstantNode *constraint;
     307//      ExpressionNode *operand;
     308// };
     309
     310Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand );
     311
     312//##############################################################################
     313
     314class LabelNode : public ExpressionNode {
     315  public:
     316        virtual Expression *build() const { return NULL; }
     317        virtual LabelNode *clone() const { assert( false ); return new LabelNode( *this ); }
    259318
    260319        virtual void print( std::ostream &os, int indent = 0) const;
    261320        virtual void printOneLine( std::ostream &os, int indent = 0) const;
    262321
    263         ExpressionNode *get_inout() const { return inout; };
    264         void set_inout( ExpressionNode *newValue ) { inout = newValue; }
    265 
    266         ConstantNode *get_constraint() const { return constraint; };
    267         void set_constraint( ConstantNode *newValue ) { constraint = newValue; }
    268 
    269         ExpressionNode *get_operand() const { return operand; };
    270         void set_operand( ExpressionNode *newValue ) { operand = newValue; }
    271   private:
    272         ExpressionNode *inout;
    273         ConstantNode *constraint;
    274         ExpressionNode *operand;
    275 };
    276 
    277 //##############################################################################
    278 
    279 class LabelNode : public ExpressionNode {
    280   public:
    281         virtual Expression *build() const { return NULL; }
    282         virtual LabelNode *clone() const { return new LabelNode( *this ); }
    283 
    284         virtual void print( std::ostream &os, int indent = 0) const;
    285         virtual void printOneLine( std::ostream &os, int indent = 0) const;
    286 
    287322        const std::list< Label > &get_labels() const { return labels; };
    288         void append_label( std::string *label ) { labels.push_back( *label ); delete label; }
     323        void append_label( std::string * label ) { labels.push_back( *label ); delete label; }
    289324  private:
    290325        std::list< Label > labels;
     
    316351//##############################################################################
    317352
    318 class ValofExprNode : public ExpressionNode {
    319   public:
    320         ValofExprNode();
    321         ValofExprNode( StatementNode *s = 0 );
    322         ValofExprNode( const ValofExprNode &other );
    323         ~ValofExprNode();
    324 
    325         virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
    326 
    327         StatementNode *get_body() const { return body; }
    328         void print( std::ostream &os, int indent = 0 ) const;
    329         void printOneLine( std::ostream &os, int indent = 0 ) const;
    330         Expression *build() const;
    331 
    332   private:
    333         StatementNode *body;
    334 };
     353// class ValofExprNode : public ExpressionNode {
     354//   public:
     355//      ValofExprNode();
     356//      ValofExprNode( StatementNode *s = 0 );
     357//      ValofExprNode( const ValofExprNode &other );
     358//      ~ValofExprNode();
     359
     360//      virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
     361
     362//      StatementNode *get_body() const { return body; }
     363//      void print( std::ostream &os, int indent = 0 ) const;
     364//      void printOneLine( std::ostream &os, int indent = 0 ) const;
     365//      Expression *build() const;
     366
     367//   private:
     368//      StatementNode *body;
     369// };
     370
     371Expression *build_valexpr( StatementNode *s );
     372
     373//##############################################################################
     374
     375// class CompoundLiteralNode : public ExpressionNode {
     376//   public:
     377//      CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
     378//      CompoundLiteralNode( const CompoundLiteralNode &type );
     379//      ~CompoundLiteralNode();
     380
     381//      virtual CompoundLiteralNode *clone() const;
     382
     383//      DeclarationNode *get_type() const { return type; }
     384//      CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
     385
     386//      InitializerNode *get_initializer() const { return kids; }
     387//      CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
     388
     389//      void print( std::ostream &os, int indent = 0 ) const;
     390//      void printOneLine( std::ostream &os, int indent = 0 ) const;
     391
     392//      virtual Expression *build() const;
     393//   private:
     394//      DeclarationNode *type;
     395//      InitializerNode *kids;
     396// };
     397
     398Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids );
    335399
    336400//##############################################################################
     
    444508}; // DeclarationNode
    445509
     510Type *buildType( TypeData *type );
     511
    446512//##############################################################################
    447513
     
    520586class AsmStmtNode : public StatementNode {
    521587  public:
    522         AsmStmtNode( Type, bool voltile, ConstantNode *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ConstantNode *clobber = 0, LabelNode *gotolabels = 0 );
     588        AsmStmtNode( Type, bool voltile, ConstantExpr *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ExpressionNode *clobber = 0, LabelNode *gotolabels = 0 );
    523589        ~AsmStmtNode();
    524590
     
    527593  private:
    528594        bool voltile;
    529         ConstantNode *instruction;
     595        ConstantExpr *instruction;
    530596        ExpressionNode *output, *input;
    531         ConstantNode *clobber;
     597        ExpressionNode *clobber;
    532598        std::list< Label > gotolabels;
    533599};
    534600
    535601//##############################################################################
    536 
    537 class InitializerNode : public ParseNode {
    538   public:
    539         InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
    540         InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
    541         ~InitializerNode();
    542 
    543         ExpressionNode *get_expression() const { return expr; }
    544 
    545         InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
    546         ExpressionNode *get_designators() const { return designator; }
    547 
    548         InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
    549         bool get_maybeConstructed() const { return maybeConstructed; }
    550 
    551         InitializerNode *next_init() const { return kids; }
    552 
    553         void print( std::ostream &os, int indent = 0 ) const;
    554         void printOneLine( std::ostream & ) const;
    555 
    556         virtual Initializer *build() const;
    557   private:
    558         ExpressionNode *expr;
    559         bool aggregate;
    560         ExpressionNode *designator; // may be list
    561         InitializerNode *kids;
    562         bool maybeConstructed;
    563 };
    564 
    565 //##############################################################################
    566 
    567 class CompoundLiteralNode : public ExpressionNode {
    568   public:
    569         CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
    570         CompoundLiteralNode( const CompoundLiteralNode &type );
    571         ~CompoundLiteralNode();
    572 
    573         virtual CompoundLiteralNode *clone() const;
    574 
    575         DeclarationNode *get_type() const { return type; }
    576         CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
    577 
    578         InitializerNode *get_initializer() const { return kids; }
    579         CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
    580 
    581         void print( std::ostream &os, int indent = 0 ) const;
    582         void printOneLine( std::ostream &os, int indent = 0 ) const;
    583 
    584         virtual Expression *build() const;
    585   private:
    586         DeclarationNode *type;
    587         InitializerNode *kids;
    588 };
    589602
    590603template< typename SynTreeType, typename NodeType >
  • src/Parser/StatementNode.cc

    r7bf7fb9 rd1625f8  
    1010// Created On       : Sat May 16 14:59:41 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Aug  7 06:42:38 2016
    13 // Update Count     : 135
     12// Last Modified On : Tue Aug  9 10:14:33 2016
     13// Update Count     : 141
    1414//
    1515
     
    350350
    351351
    352 AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantNode *instruction, ExpressionNode *output, ExpressionNode *input, ConstantNode *clobber, LabelNode *gotolabels ) :
     352AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantExpr *instruction, ExpressionNode *output, ExpressionNode *input, ExpressionNode *clobber, LabelNode *gotolabels ) :
    353353        StatementNode( t ), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ) {
    354354        if ( gotolabels ) {
     
    359359
    360360AsmStmtNode::~AsmStmtNode() {
    361         delete instruction; delete output; delete input; delete clobber;
     361        delete output; delete input; delete clobber;
    362362}
    363363
     
    367367        if ( instruction ) {
    368368                os << string( indent + ParseNode::indent_by, ' ' ) << "Instruction:" << endl;
    369                 instruction->printList( os, indent + 2 * ParseNode::indent_by );
     369//              instruction->printList( os, indent + 2 * ParseNode::indent_by );
    370370        } // if
    371371        if ( output ) {
     
    379379        if ( clobber ) {
    380380                os << string( indent + ParseNode::indent_by, ' ' ) << "Clobber:" << endl;
    381                 clobber->printList( os, indent + 2 * ParseNode::indent_by );
     381//              clobber->printList( os, indent + 2 * ParseNode::indent_by );
    382382        } // if
    383383        if ( ! gotolabels.empty() ) {
     
    408408        buildList( clobber, clob );
    409409        std::list< Label > gotolabs = gotolabels;
    410         return new AsmStmt( labs, voltile, (ConstantExpr *)maybeBuild< Expression >( instruction ), out, in, clob, gotolabs );
     410        return new AsmStmt( labs, voltile, instruction, out, in, clob, gotolabs );
    411411}
    412412
  • src/Parser/parser.cc

    r7bf7fb9 rd1625f8  
    356356        DeclarationNode::TypeClass tclass;
    357357        StatementNode *sn;
    358         ConstantNode *constant;
     358        ConstantExpr *constant;
    359359        LabelNode *label;
    360360        InitializerNode *in;
     
    596596#define YYFINAL  251
    597597/* YYLAST -- Last index in YYTABLE.  */
    598 #define YYLAST   10969
     598#define YYLAST   10816
    599599
    600600/* YYNTOKENS -- Number of terminals.  */
     
    603603#define YYNNTS  241
    604604/* YYNRULES -- Number of rules.  */
    605 #define YYNRULES  754
     605#define YYNRULES  750
    606606/* YYNRULES -- Number of states.  */
    607 #define YYNSTATES  1577
     607#define YYNSTATES  1554
    608608
    609609/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
     
    620620       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    621621       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    622        2,     2,     2,   122,     2,     2,     2,   125,   119,     2,
    623      109,   110,   118,   120,   116,   121,   113,   124,     2,     2,
    624        2,     2,     2,     2,     2,     2,     2,     2,   117,   132,
    625      126,   131,   127,   130,     2,     2,     2,     2,     2,     2,
     622       2,     2,     2,   121,     2,     2,     2,   124,   118,     2,
     623     109,   110,   117,   119,   116,   120,   113,   123,     2,     2,
     624       2,     2,     2,     2,     2,     2,     2,     2,   130,   132,
     625     125,   131,   126,   129,     2,     2,     2,     2,     2,     2,
    626626       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    627627       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    628        2,   111,     2,   112,   128,     2,     2,     2,     2,     2,
     628       2,   111,     2,   112,   127,     2,     2,     2,     2,     2,
    629629       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    630630       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    631        2,     2,     2,   114,   129,   115,   123,     2,     2,     2,
     631       2,     2,     2,   114,   128,   115,   122,     2,     2,     2,
    632632       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    633633       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     
    664664      17,    19,    21,    23,    25,    27,    29,    31,    34,    36,
    665665      38,    42,    46,    48,    55,    60,    64,    72,    76,    84,
    666       87,    90,    98,   103,   105,   109,   110,   112,   116,   124,
    667      134,   136,   140,   142,   146,   154,   158,   166,   168,   170,
    668      172,   175,   178,   181,   184,   187,   190,   195,   202,   204,
    669      209,   214,   217,   222,   224,   226,   228,   230,   232,   234,
    670      236,   241,   246,   248,   252,   256,   260,   262,   266,   270,
    671      272,   276,   280,   282,   286,   290,   294,   298,   300,   304,
    672      308,   310,   314,   316,   320,   322,   326,   328,   332,   334,
    673      338,   340,   346,   351,   357,   359,   361,   365,   368,   369,
    674      371,   373,   375,   377,   379,   381,   383,   385,   387,   389,
    675      391,   393,   396,   402,   409,   417,   419,   423,   425,   429,
    676      430,   432,   434,   436,   438,   440,   442,   444,   446,   448,
    677      455,   460,   463,   471,   473,   477,   479,   482,   484,   487,
    678      489,   492,   495,   501,   509,   515,   525,   531,   541,   543,
    679      547,   549,   551,   555,   559,   562,   564,   567,   570,   571,
    680      573,   576,   580,   581,   583,   586,   590,   594,   599,   600,
    681      602,   604,   607,   613,   621,   628,   635,   640,   644,   649,
    682      652,   656,   659,   663,   667,   671,   675,   681,   685,   689,
    683      694,   696,   702,   709,   715,   722,   732,   743,   753,   764,
    684      767,   769,   772,   775,   778,   780,   787,   796,   807,   820,
    685      835,   836,   838,   839,   841,   843,   847,   852,   860,   861,
    686      863,   867,   869,   873,   875,   877,   879,   883,   885,   887,
    687      889,   893,   894,   896,   900,   905,   907,   911,   913,   915,
    688      919,   923,   927,   931,   935,   938,   942,   949,   953,   957,
    689      962,   964,   967,   970,   974,   980,   989,   997,  1005,  1011,
    690     1021,  1024,  1027,  1033,  1037,  1043,  1048,  1052,  1057,  1062,
    691     1070,  1074,  1078,  1082,  1086,  1091,  1098,  1100,  1102,  1104,
    692     1106,  1108,  1110,  1112,  1114,  1115,  1117,  1119,  1122,  1124,
    693     1126,  1128,  1130,  1132,  1134,  1136,  1137,  1143,  1145,  1148,
    694     1152,  1154,  1157,  1159,  1161,  1163,  1165,  1167,  1169,  1171,
    695     1173,  1175,  1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,
    696     1193,  1195,  1197,  1199,  1201,  1203,  1206,  1209,  1213,  1217,
    697     1219,  1223,  1225,  1228,  1231,  1234,  1239,  1244,  1249,  1254,
    698     1256,  1259,  1262,  1266,  1268,  1271,  1274,  1276,  1279,  1282,
    699     1286,  1288,  1291,  1294,  1296,  1298,  1303,  1306,  1307,  1314,
    700     1322,  1325,  1328,  1331,  1332,  1335,  1338,  1342,  1345,  1349,
    701     1351,  1354,  1358,  1361,  1364,  1369,  1370,  1372,  1375,  1378,
    702     1380,  1381,  1383,  1386,  1389,  1395,  1398,  1399,  1407,  1410,
    703     1415,  1416,  1419,  1420,  1422,  1424,  1426,  1432,  1438,  1444,
    704     1446,  1452,  1458,  1468,  1470,  1476,  1477,  1479,  1481,  1487,
    705     1489,  1491,  1497,  1503,  1505,  1509,  1513,  1518,  1520,  1522,
    706     1524,  1526,  1529,  1531,  1535,  1539,  1541,  1544,  1546,  1550,
    707     1552,  1554,  1556,  1558,  1560,  1562,  1564,  1566,  1568,  1570,
    708     1572,  1575,  1577,  1579,  1581,  1584,  1585,  1588,  1591,  1593,
    709     1598,  1599,  1601,  1604,  1608,  1613,  1616,  1619,  1621,  1624,
    710     1626,  1629,  1635,  1641,  1649,  1656,  1658,  1661,  1664,  1668,
    711     1670,  1673,  1676,  1681,  1684,  1689,  1690,  1695,  1698,  1700,
    712     1702,  1704,  1705,  1708,  1714,  1720,  1734,  1736,  1738,  1742,
    713     1746,  1749,  1753,  1757,  1760,  1765,  1767,  1774,  1784,  1785,
    714     1797,  1799,  1803,  1807,  1811,  1813,  1815,  1821,  1824,  1830,
    715     1831,  1833,  1835,  1839,  1840,  1842,  1844,  1846,  1848,  1849,
    716     1856,  1859,  1861,  1864,  1869,  1872,  1876,  1880,  1884,  1889,
    717     1895,  1901,  1907,  1914,  1916,  1918,  1920,  1924,  1925,  1931,
    718     1932,  1934,  1936,  1939,  1946,  1948,  1952,  1953,  1955,  1960,
    719     1962,  1964,  1966,  1968,  1971,  1973,  1976,  1979,  1981,  1985,
    720     1988,  1992,  1996,  1999,  2004,  2009,  2013,  2022,  2026,  2029,
    721     2031,  2034,  2041,  2050,  2054,  2057,  2061,  2065,  2070,  2075,
    722     2079,  2081,  2083,  2085,  2090,  2097,  2101,  2104,  2108,  2112,
    723     2117,  2122,  2126,  2129,  2131,  2134,  2137,  2139,  2143,  2146,
    724     2150,  2154,  2157,  2162,  2167,  2171,  2178,  2187,  2191,  2194,
    725     2196,  2199,  2202,  2205,  2209,  2213,  2216,  2221,  2226,  2230,
    726     2237,  2246,  2250,  2253,  2255,  2258,  2261,  2263,  2265,  2268,
    727     2272,  2276,  2279,  2284,  2291,  2300,  2302,  2305,  2308,  2310,
    728     2313,  2316,  2320,  2324,  2326,  2331,  2336,  2340,  2346,  2355,
    729     2359,  2362,  2366,  2368,  2374,  2380,  2387,  2394,  2396,  2399,
    730     2402,  2404,  2407,  2410,  2414,  2418,  2420,  2425,  2430,  2434,
    731     2440,  2449,  2453,  2455,  2458,  2460,  2463,  2470,  2476,  2483,
    732     2491,  2499,  2501,  2504,  2507,  2509,  2512,  2515,  2519,  2523,
    733     2525,  2530,  2535,  2539,  2548,  2552,  2554,  2556,  2559,  2561,
    734     2563,  2566,  2570,  2573,  2577,  2580,  2584,  2588,  2591,  2596,
    735     2600,  2603,  2607,  2610,  2615,  2619,  2622,  2629,  2636,  2643,
    736     2651,  2653,  2656,  2658,  2660,  2662,  2665,  2669,  2672,  2676,
    737     2679,  2683,  2687,  2692,  2695,  2699,  2704,  2707,  2713,  2719,
    738     2726,  2733,  2734,  2736,  2737
     666      87,    90,    98,   103,   105,   109,   110,   112,   114,   118,
     667     120,   124,   132,   136,   144,   146,   148,   150,   153,   156,
     668     159,   162,   165,   168,   173,   176,   181,   188,   190,   195,
     669     200,   202,   204,   206,   208,   210,   212,   214,   219,   224,
     670     226,   230,   234,   238,   240,   244,   248,   250,   254,   258,
     671     260,   264,   268,   272,   276,   278,   282,   286,   288,   292,
     672     294,   298,   300,   304,   306,   310,   312,   316,   318,   324,
     673     329,   335,   337,   339,   343,   346,   347,   349,   351,   353,
     674     355,   357,   359,   361,   363,   365,   367,   369,   371,   374,
     675     380,   387,   395,   397,   401,   403,   407,   408,   410,   412,
     676     414,   416,   418,   420,   422,   424,   426,   433,   438,   441,
     677     449,   451,   455,   457,   460,   462,   465,   467,   470,   473,
     678     479,   487,   493,   503,   509,   519,   521,   525,   527,   529,
     679     533,   537,   540,   542,   545,   548,   549,   551,   554,   558,
     680     559,   561,   564,   568,   572,   577,   578,   580,   582,   585,
     681     591,   599,   606,   613,   618,   622,   627,   630,   634,   637,
     682     641,   645,   649,   653,   659,   663,   667,   672,   674,   680,
     683     687,   693,   700,   710,   721,   731,   742,   745,   747,   750,
     684     753,   756,   758,   765,   774,   785,   798,   813,   814,   816,
     685     817,   819,   821,   825,   830,   838,   839,   841,   845,   847,
     686     851,   853,   855,   857,   861,   863,   865,   867,   871,   872,
     687     874,   878,   883,   885,   889,   891,   893,   897,   901,   905,
     688     909,   913,   916,   920,   927,   931,   935,   940,   942,   945,
     689     948,   952,   958,   967,   975,   983,   989,   999,  1002,  1005,
     690    1011,  1015,  1021,  1026,  1030,  1035,  1040,  1048,  1052,  1056,
     691    1060,  1064,  1069,  1076,  1078,  1080,  1082,  1084,  1086,  1088,
     692    1090,  1092,  1093,  1095,  1097,  1100,  1102,  1104,  1106,  1108,
     693    1110,  1112,  1114,  1115,  1121,  1123,  1126,  1130,  1132,  1135,
     694    1137,  1139,  1141,  1143,  1145,  1147,  1149,  1151,  1153,  1155,
     695    1157,  1159,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
     696    1177,  1179,  1181,  1184,  1187,  1191,  1195,  1197,  1201,  1203,
     697    1206,  1209,  1212,  1217,  1222,  1227,  1232,  1234,  1237,  1240,
     698    1244,  1246,  1249,  1252,  1254,  1257,  1260,  1264,  1266,  1269,
     699    1272,  1274,  1276,  1281,  1284,  1285,  1292,  1300,  1303,  1306,
     700    1309,  1310,  1313,  1316,  1320,  1323,  1327,  1329,  1332,  1336,
     701    1339,  1342,  1347,  1348,  1350,  1353,  1356,  1358,  1359,  1361,
     702    1364,  1367,  1373,  1376,  1377,  1385,  1388,  1393,  1394,  1397,
     703    1398,  1400,  1402,  1404,  1410,  1416,  1422,  1424,  1430,  1436,
     704    1446,  1448,  1454,  1455,  1457,  1459,  1465,  1467,  1469,  1475,
     705    1481,  1483,  1487,  1491,  1496,  1498,  1500,  1502,  1504,  1507,
     706    1509,  1513,  1517,  1519,  1522,  1524,  1528,  1530,  1532,  1534,
     707    1536,  1538,  1540,  1542,  1544,  1546,  1548,  1550,  1553,  1555,
     708    1557,  1559,  1562,  1563,  1566,  1569,  1571,  1576,  1577,  1579,
     709    1582,  1586,  1591,  1594,  1597,  1599,  1602,  1605,  1611,  1617,
     710    1625,  1632,  1634,  1637,  1640,  1644,  1646,  1649,  1652,  1657,
     711    1660,  1665,  1666,  1671,  1674,  1676,  1678,  1680,  1681,  1684,
     712    1690,  1696,  1710,  1712,  1714,  1718,  1722,  1725,  1729,  1733,
     713    1736,  1741,  1743,  1750,  1760,  1761,  1773,  1775,  1779,  1783,
     714    1787,  1789,  1791,  1797,  1800,  1806,  1807,  1809,  1811,  1815,
     715    1816,  1818,  1820,  1822,  1824,  1825,  1832,  1835,  1837,  1840,
     716    1845,  1848,  1852,  1856,  1860,  1865,  1871,  1877,  1883,  1890,
     717    1892,  1894,  1896,  1900,  1901,  1907,  1908,  1910,  1912,  1915,
     718    1922,  1924,  1928,  1929,  1931,  1936,  1938,  1940,  1942,  1944,
     719    1947,  1949,  1952,  1955,  1957,  1961,  1964,  1968,  1972,  1975,
     720    1980,  1985,  1989,  1998,  2002,  2005,  2007,  2010,  2017,  2026,
     721    2030,  2033,  2037,  2041,  2046,  2051,  2055,  2057,  2059,  2061,
     722    2066,  2073,  2077,  2080,  2084,  2088,  2093,  2098,  2102,  2105,
     723    2107,  2110,  2113,  2115,  2119,  2122,  2126,  2130,  2133,  2138,
     724    2143,  2147,  2154,  2163,  2167,  2170,  2172,  2175,  2178,  2181,
     725    2185,  2189,  2192,  2197,  2202,  2206,  2213,  2222,  2226,  2229,
     726    2231,  2234,  2237,  2239,  2241,  2244,  2248,  2252,  2255,  2260,
     727    2267,  2276,  2278,  2281,  2284,  2286,  2289,  2292,  2296,  2300,
     728    2302,  2307,  2312,  2316,  2322,  2331,  2335,  2338,  2342,  2344,
     729    2350,  2356,  2363,  2370,  2372,  2375,  2378,  2380,  2383,  2386,
     730    2390,  2394,  2396,  2401,  2406,  2410,  2416,  2425,  2429,  2431,
     731    2434,  2436,  2439,  2446,  2452,  2459,  2467,  2475,  2477,  2480,
     732    2483,  2485,  2488,  2491,  2495,  2499,  2501,  2506,  2511,  2515,
     733    2524,  2528,  2530,  2532,  2535,  2537,  2539,  2542,  2546,  2549,
     734    2553,  2556,  2560,  2564,  2567,  2572,  2576,  2579,  2583,  2586,
     735    2591,  2595,  2598,  2605,  2612,  2619,  2627,  2629,  2632,  2634,
     736    2636,  2638,  2641,  2645,  2648,  2652,  2655,  2659,  2663,  2668,
     737    2671,  2675,  2680,  2683,  2689,  2695,  2702,  2709,  2710,  2712,
     738    2713
    739739};
    740740
     
    753753     109,   275,   110,   114,   279,   372,   115,    -1,   143,   114,
    754754     144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
    755      164,    -1,   139,   117,   164,    -1,   111,   134,   164,   135,
    756      112,   117,   164,    -1,   111,   134,   164,   116,   168,   135,
    757      112,   117,   164,    -1,   147,    -1,   146,   116,   147,    -1,
    758      139,    -1,   139,   113,   147,    -1,   139,   113,   111,   134,
    759      146,   135,   112,    -1,   139,    85,   147,    -1,   139,    85,
    760      111,   134,   146,   135,   112,    -1,   143,    -1,   136,    -1,
    761      141,    -1,    40,   151,    -1,   149,   151,    -1,   150,   151,
    762       -1,    86,   148,    -1,    87,   148,    -1,    37,   148,    -1,
    763       37,   109,   275,   110,    -1,    38,   109,   275,   116,   139,
    764      110,    -1,    76,    -1,    76,   109,   276,   110,    -1,    76,
    765      109,   145,   110,    -1,    66,   148,    -1,    66,   109,   275,
    766      110,    -1,   118,    -1,   119,    -1,   120,    -1,   121,    -1,
    767      122,    -1,   123,    -1,   148,    -1,   109,   275,   110,   151,
    768       -1,   109,   275,   110,   167,    -1,   151,    -1,   152,   118,
    769      151,    -1,   152,   124,   151,    -1,   152,   125,   151,    -1,
    770      152,    -1,   153,   120,   152,    -1,   153,   121,   152,    -1,
    771      153,    -1,   154,    88,   153,    -1,   154,    89,   153,    -1,
    772      154,    -1,   155,   126,   154,    -1,   155,   127,   154,    -1,
    773      155,    90,   154,    -1,   155,    91,   154,    -1,   155,    -1,
    774      156,    92,   155,    -1,   156,    93,   155,    -1,   156,    -1,
    775      157,   119,   156,    -1,   157,    -1,   158,   128,   157,    -1,
    776      158,    -1,   159,   129,   158,    -1,   159,    -1,   160,    94,
    777      159,    -1,   160,    -1,   161,    95,   160,    -1,   161,    -1,
    778      161,   130,   169,   117,   162,    -1,   161,   130,   117,   162,
    779       -1,   161,   130,   169,   117,   167,    -1,   162,    -1,   162,
    780       -1,   148,   166,   164,    -1,   167,   373,    -1,    -1,   164,
    781       -1,   131,    -1,    97,    -1,    98,    -1,    99,    -1,   100,
    782       -1,   101,    -1,   102,    -1,   103,    -1,   104,    -1,   105,
    783       -1,   106,    -1,   111,   112,    -1,   111,   134,   164,   135,
    784      112,    -1,   111,   134,   116,   168,   135,   112,    -1,   111,
    785      134,   164,   116,   168,   135,   112,    -1,   165,    -1,   168,
    786      116,   165,    -1,   164,    -1,   169,   116,   164,    -1,    -1,
    787      169,    -1,   172,    -1,   173,    -1,   177,    -1,   178,    -1,
    788      190,    -1,   192,    -1,   193,    -1,   198,    -1,   128,   143,
    789      114,   144,   115,   132,    -1,    72,   117,   312,   171,    -1,
    790      114,   115,    -1,   114,   134,   134,   209,   174,   135,   115,
    791       -1,   175,    -1,   174,   134,   175,    -1,   212,    -1,    40,
    792      212,    -1,   308,    -1,   171,   135,    -1,   171,    -1,   176,
    793      171,    -1,   170,   132,    -1,    41,   109,   169,   110,   171,
    794       -1,    41,   109,   169,   110,   171,    42,   171,    -1,    43,
    795      109,   169,   110,   183,    -1,    43,   109,   169,   110,   114,
    796      134,   205,   184,   115,    -1,    53,   109,   169,   110,   183,
    797       -1,    53,   109,   169,   110,   114,   134,   205,   186,   115,
    798       -1,   163,    -1,   163,    96,   163,    -1,   310,    -1,   179,
    799       -1,   180,   116,   179,    -1,    44,   180,   117,    -1,    45,
    800      117,    -1,   181,    -1,   182,   181,    -1,   182,   171,    -1,
    801       -1,   185,    -1,   182,   176,    -1,   185,   182,   176,    -1,
    802       -1,   187,    -1,   182,   189,    -1,   182,   176,   188,    -1,
    803      187,   182,   189,    -1,   187,   182,   176,   188,    -1,    -1,
    804      189,    -1,    56,    -1,    56,   132,    -1,    47,   109,   169,
    805      110,   171,    -1,    46,   171,    47,   109,   169,   110,   132,
    806       -1,    48,   109,   134,   191,   110,   171,    -1,   170,   135,
    807      132,   170,   132,   170,    -1,   212,   170,   132,   170,    -1,
    808       51,    72,   132,    -1,    51,   118,   169,   132,    -1,    50,
    809      132,    -1,    50,    72,   132,    -1,    49,   132,    -1,    49,
    810       72,   132,    -1,    52,   170,   132,    -1,    61,   165,   132,
    811       -1,    62,   165,   132,    -1,    62,   165,    63,   164,   132,
    812       -1,    57,   173,   194,    -1,    57,   173,   196,    -1,    57,
    813      173,   194,   196,    -1,   195,    -1,    58,   109,    96,   110,
    814      173,    -1,   195,    58,   109,    96,   110,   173,    -1,    59,
    815      109,    96,   110,   173,    -1,   195,    59,   109,    96,   110,
    816      173,    -1,    58,   109,   134,   134,   197,   135,   110,   173,
    817      135,    -1,   195,    58,   109,   134,   134,   197,   135,   110,
    818      173,   135,    -1,    59,   109,   134,   134,   197,   135,   110,
    819      173,   135,    -1,   195,    59,   109,   134,   134,   197,   135,
    820      110,   173,   135,    -1,    60,   173,    -1,   225,    -1,   225,
    821      309,    -1,   225,   357,    -1,   366,   139,    -1,   366,    -1,
    822       64,   199,   109,   141,   110,   132,    -1,    64,   199,   109,
    823      141,   117,   200,   110,   132,    -1,    64,   199,   109,   141,
    824      117,   200,   117,   200,   110,   132,    -1,    64,   199,   109,
    825      141,   117,   200,   117,   200,   117,   203,   110,   132,    -1,
    826       64,   199,    51,   109,   141,   117,   117,   200,   117,   203,
    827      117,   204,   110,   132,    -1,    -1,    11,    -1,    -1,   201,
    828       -1,   202,    -1,   201,   116,   202,    -1,   141,   109,   163,
    829      110,    -1,   111,   163,   112,   141,   109,   163,   110,    -1,
    830       -1,   141,    -1,   203,   116,   141,    -1,   139,    -1,   204,
    831      116,   139,    -1,   135,    -1,   206,    -1,   212,    -1,   206,
    832      134,   212,    -1,   135,    -1,   208,    -1,   222,    -1,   208,
    833      134,   222,    -1,    -1,   210,    -1,    29,   211,   132,    -1,
    834      210,    29,   211,   132,    -1,   274,    -1,   211,   116,   274,
    835       -1,   213,    -1,   222,    -1,   214,   135,   132,    -1,   219,
    836      135,   132,    -1,   216,   135,   132,    -1,   293,   135,   132,
    837       -1,   296,   135,   132,    -1,   215,   277,    -1,   231,   215,
    838      277,    -1,   214,   135,   116,   134,   272,   277,    -1,   367,
    839      272,   311,    -1,   370,   272,   311,    -1,   227,   370,   272,
    840      311,    -1,   217,    -1,   227,   217,    -1,   231,   217,    -1,
    841      231,   227,   217,    -1,   216,   135,   116,   134,   272,    -1,
    842      111,   112,   272,   109,   134,   260,   135,   110,    -1,   370,
    843      272,   109,   134,   260,   135,   110,    -1,   218,   272,   109,
    844      134,   260,   135,   110,    -1,   111,   134,   262,   135,   112,
    845       -1,   111,   134,   262,   135,   116,   134,   263,   135,   112,
    846       -1,     3,   215,    -1,     3,   217,    -1,   219,   135,   116,
    847      134,   139,    -1,     3,   225,   309,    -1,   220,   135,   116,
    848      134,   309,    -1,   227,     3,   225,   309,    -1,   225,     3,
    849      309,    -1,   225,     3,   227,   309,    -1,     3,   139,   131,
    850      164,    -1,   221,   135,   116,   134,   139,   131,   164,    -1,
    851      223,   135,   132,    -1,   220,   135,   132,    -1,   221,   135,
    852      132,    -1,   240,   135,   132,    -1,   224,   309,   311,   277,
    853       -1,   223,   116,   312,   309,   311,   277,    -1,   236,    -1,
    854      240,    -1,   242,    -1,   283,    -1,   237,    -1,   241,    -1,
    855      243,    -1,   284,    -1,    -1,   227,    -1,   228,    -1,   227,
    856      228,    -1,   229,    -1,   314,    -1,    10,    -1,    12,    -1,
    857       11,    -1,    14,    -1,    67,    -1,    -1,    13,   109,   230,
    858      286,   110,    -1,   232,    -1,   227,   232,    -1,   231,   227,
    859      232,    -1,   233,    -1,   232,   233,    -1,   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,   231,   237,    -1,   236,   233,    -1,   236,
    865      233,   227,    -1,   236,   233,   237,    -1,   238,    -1,   226,
    866      239,   226,    -1,   235,    -1,   227,   235,    -1,   238,   228,
    867       -1,   238,   235,    -1,    28,   109,   276,   110,    -1,    28,
    868      109,   169,   110,    -1,    78,   109,   276,   110,    -1,    78,
    869      109,   169,   110,    -1,   241,    -1,   231,   241,    -1,   240,
    870      233,    -1,   240,   233,   227,    -1,   244,    -1,   227,   244,
    871       -1,   241,   228,    -1,   243,    -1,   231,   243,    -1,   242,
    872      233,    -1,   242,   233,   227,    -1,    74,    -1,   227,    74,
    873       -1,   243,   228,    -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,   225,   252,    -1,   251,   116,   312,   252,    -1,    -1,
    881      254,    -1,   318,   253,    -1,   331,   253,    -1,   357,    -1,
    882       -1,   254,    -1,   117,   163,    -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,   163,    -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,   227,   370,   272,   373,    -1,   217,    -1,
    896      270,    -1,   362,    -1,   370,    -1,   227,   370,    -1,   371,
    897       -1,   224,   336,   373,    -1,   224,   340,   373,    -1,   224,
    898       -1,   224,   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      225,    -1,   225,   357,    -1,   366,    -1,   371,    -1,   225,
    902       -1,   225,   345,    -1,    -1,   131,   278,    -1,   107,   278,
    903       -1,   164,    -1,   114,   279,   372,   115,    -1,    -1,   278,
    904       -1,   280,   278,    -1,   279,   116,   278,    -1,   279,   116,
    905      280,   278,    -1,   281,   117,    -1,   274,   117,    -1,   282,
    906       -1,   281,   282,    -1,    80,    -1,   113,   274,    -1,   111,
    907      134,   164,   135,   112,    -1,   111,   134,   310,   135,   112,
    908       -1,   111,   134,   163,    96,   163,   135,   112,    -1,   113,
    909      111,   134,   146,   135,   112,    -1,   284,    -1,   231,   284,
    910       -1,   283,   233,    -1,   283,   233,   227,    -1,   285,    -1,
    911      227,   285,    -1,   284,   228,    -1,    75,   109,   292,   110,
    912       -1,   287,   373,    -1,   286,   116,   287,   373,    -1,    -1,
    913      289,   274,   288,   290,    -1,   225,   336,    -1,    33,    -1,
    914       35,    -1,    34,    -1,    -1,   290,   291,    -1,   129,   274,
    915      109,   292,   110,    -1,   129,   114,   134,   298,   115,    -1,
    916      129,   109,   134,   286,   135,   110,   114,   134,   298,   115,
    917      109,   292,   110,    -1,   276,    -1,   164,    -1,   292,   116,
    918      276,    -1,   292,   116,   164,    -1,    33,   294,    -1,   232,
    919       33,   294,    -1,   293,   116,   294,    -1,   295,   290,    -1,
    920      295,   290,   131,   276,    -1,   274,    -1,   273,   109,   134,
    921      286,   135,   110,    -1,    36,   274,   109,   134,   286,   135,
    922      110,   114,   115,    -1,    -1,    36,   274,   109,   134,   286,
    923      135,   110,   114,   297,   298,   115,    -1,   299,    -1,   298,
    924      134,   299,    -1,   300,   135,   132,    -1,   301,   135,   132,
    925       -1,   215,    -1,   217,    -1,   300,   135,   116,   134,   272,
    926       -1,   225,   309,    -1,   301,   135,   116,   134,   309,    -1,
    927       -1,   303,    -1,   305,    -1,   303,   134,   305,    -1,    -1,
    928      303,    -1,   212,    -1,   307,    -1,   198,    -1,    -1,     5,
    929       82,   306,   114,   304,   115,    -1,    40,   305,    -1,   308,
    930       -1,   323,   173,    -1,   327,   134,   207,   173,    -1,   216,
    931      173,    -1,   224,   323,   173,    -1,   227,   323,   173,    -1,
    932      231,   323,   173,    -1,   231,   227,   323,   173,    -1,   224,
    933      327,   134,   207,   173,    -1,   227,   327,   134,   207,   173,
    934       -1,   231,   327,   134,   207,   173,    -1,   231,   227,   327,
    935      134,   207,   173,    -1,   318,    -1,   331,    -1,   323,    -1,
    936      163,   123,   163,    -1,    -1,    64,   109,   141,   110,   312,
    937       -1,    -1,   313,    -1,   314,    -1,   313,   314,    -1,    39,
    938      109,   109,   315,   110,   110,    -1,   316,    -1,   315,   116,
    939      316,    -1,    -1,   317,    -1,   317,   109,   170,   110,    -1,
    940      272,    -1,   234,    -1,   235,    -1,   228,    -1,   319,   312,
    941       -1,   320,    -1,   321,   312,    -1,   322,   312,    -1,   137,
    942       -1,   109,   319,   110,    -1,   149,   318,    -1,   149,   227,
    943      318,    -1,   109,   320,   110,    -1,   319,   349,    -1,   109,
    944      320,   110,   349,    -1,   109,   321,   110,   350,    -1,   109,
    945      321,   110,    -1,   109,   320,   110,   109,   134,   264,   135,
    946      110,    -1,   109,   322,   110,    -1,   324,   312,    -1,   325,
    947       -1,   326,   312,    -1,   319,   109,   134,   264,   135,   110,
    948       -1,   109,   325,   110,   109,   134,   264,   135,   110,    -1,
    949      109,   324,   110,    -1,   149,   323,    -1,   149,   227,   323,
    950       -1,   109,   325,   110,    -1,   109,   325,   110,   349,    -1,
    951      109,   326,   110,   350,    -1,   109,   326,   110,    -1,   328,
    952       -1,   329,    -1,   330,    -1,   319,   109,   271,   110,    -1,
    953      109,   329,   110,   109,   271,   110,    -1,   109,   328,   110,
    954       -1,   149,   327,    -1,   149,   227,   327,    -1,   109,   329,
    955      110,    -1,   109,   329,   110,   349,    -1,   109,   330,   110,
    956      350,    -1,   109,   330,   110,    -1,   332,   312,    -1,   333,
    957       -1,   334,   312,    -1,   335,   312,    -1,   341,    -1,   109,
    958      332,   110,    -1,   149,   331,    -1,   149,   227,   331,    -1,
    959      109,   333,   110,    -1,   332,   349,    -1,   109,   333,   110,
    960      349,    -1,   109,   334,   110,   350,    -1,   109,   334,   110,
    961       -1,   332,   109,   134,   264,   135,   110,    -1,   109,   333,
    962      110,   109,   134,   264,   135,   110,    -1,   109,   335,   110,
    963       -1,   319,   312,    -1,   337,    -1,   338,   312,    -1,   339,
    964      312,    -1,   149,   336,    -1,   149,   227,   336,    -1,   109,
    965      337,   110,    -1,   319,   355,    -1,   109,   337,   110,   349,
    966       -1,   109,   338,   110,   350,    -1,   109,   338,   110,    -1,
    967      319,   109,   134,   264,   135,   110,    -1,   109,   337,   110,
    968      109,   134,   264,   135,   110,    -1,   109,   339,   110,    -1,
    969      341,   312,    -1,   342,    -1,   343,   312,    -1,   344,   312,
    970       -1,    74,    -1,    75,    -1,   149,   340,    -1,   149,   227,
    971      340,    -1,   109,   342,   110,    -1,   341,   355,    -1,   109,
    972      342,   110,   355,    -1,   341,   109,   134,   264,   135,   110,
    973       -1,   109,   342,   110,   109,   134,   264,   135,   110,    -1,
    974      346,    -1,   347,   312,    -1,   348,   312,    -1,   149,    -1,
    975      149,   227,    -1,   149,   345,    -1,   149,   227,   345,    -1,
    976      109,   346,   110,    -1,   349,    -1,   109,   346,   110,   349,
    977       -1,   109,   347,   110,   350,    -1,   109,   347,   110,    -1,
    978      109,   134,   264,   135,   110,    -1,   109,   346,   110,   109,
    979      134,   264,   135,   110,    -1,   109,   348,   110,    -1,   111,
    980      112,    -1,   111,   112,   350,    -1,   350,    -1,   111,   134,
    981      164,   135,   112,    -1,   111,   134,   118,   135,   112,    -1,
    982      350,   111,   134,   164,   135,   112,    -1,   350,   111,   134,
    983      118,   135,   112,    -1,   352,    -1,   353,   312,    -1,   354,
    984      312,    -1,   149,    -1,   149,   227,    -1,   149,   351,    -1,
    985      149,   227,   351,    -1,   109,   352,   110,    -1,   355,    -1,
    986      109,   352,   110,   355,    -1,   109,   353,   110,   350,    -1,
    987      109,   353,   110,    -1,   109,   134,   264,   135,   110,    -1,
    988      109,   352,   110,   109,   134,   264,   135,   110,    -1,   109,
    989      354,   110,    -1,   356,    -1,   356,   350,    -1,   350,    -1,
    990      111,   112,    -1,   111,   134,   227,   118,   135,   112,    -1,
    991      111,   134,   227,   135,   112,    -1,   111,   134,   227,   164,
    992      135,   112,    -1,   111,   134,     7,   226,   164,   135,   112,
    993       -1,   111,   134,   227,     7,   164,   135,   112,    -1,   358,
    994       -1,   359,   312,    -1,   360,   312,    -1,   149,    -1,   149,
    995      227,    -1,   149,   357,    -1,   149,   227,   357,    -1,   109,
    996      358,   110,    -1,   349,    -1,   109,   358,   110,   349,    -1,
    997      109,   359,   110,   350,    -1,   109,   359,   110,    -1,   109,
    998      358,   110,   109,   134,   264,   135,   110,    -1,   109,   360,
    999      110,    -1,   362,    -1,   370,    -1,   227,   370,    -1,   363,
    1000       -1,   364,    -1,   149,   225,    -1,   227,   149,   225,    -1,
    1001      149,   371,    -1,   227,   149,   371,    -1,   149,   361,    -1,
    1002      227,   149,   361,    -1,   111,   112,   225,    -1,   365,   225,
    1003       -1,   111,   112,   350,   225,    -1,   365,   350,   225,    -1,
    1004      350,   225,    -1,   111,   112,   363,    -1,   365,   363,    -1,
    1005      111,   112,   350,   363,    -1,   365,   350,   363,    -1,   350,
    1006      363,    -1,   111,   134,   227,   118,   135,   112,    -1,   111,
    1007      134,   227,   164,   135,   112,    -1,   111,   134,   231,   164,
    1008      135,   112,    -1,   111,   134,   231,   227,   164,   135,   112,
    1009       -1,   370,    -1,   227,   370,    -1,   367,    -1,   368,    -1,
    1010      369,    -1,   149,   225,    -1,   227,   149,   225,    -1,   149,
    1011      371,    -1,   227,   149,   371,    -1,   149,   366,    -1,   227,
    1012      149,   366,    -1,   111,   112,   225,    -1,   111,   112,   350,
    1013      225,    -1,   350,   225,    -1,   111,   112,   368,    -1,   111,
    1014      112,   350,   368,    -1,   350,   368,    -1,   111,   134,   263,
    1015      135,   112,    -1,   111,   112,   109,   260,   110,    -1,   370,
    1016      109,   134,   260,   135,   110,    -1,   218,   109,   134,   260,
    1017      135,   110,    -1,    -1,   116,    -1,    -1,   131,   164,    -1
     755     164,    -1,   147,    -1,   146,   116,   147,    -1,   139,    -1,
     756     139,   113,   147,    -1,   139,   113,   111,   134,   146,   135,
     757     112,    -1,   139,    85,   147,    -1,   139,    85,   111,   134,
     758     146,   135,   112,    -1,   143,    -1,   136,    -1,   141,    -1,
     759      40,   151,    -1,   149,   151,    -1,   150,   151,    -1,    86,
     760     148,    -1,    87,   148,    -1,    37,   148,    -1,    37,   109,
     761     275,   110,    -1,    66,   148,    -1,    66,   109,   275,   110,
     762      -1,    38,   109,   275,   116,   139,   110,    -1,    76,    -1,
     763      76,   109,   145,   110,    -1,    76,   109,   276,   110,    -1,
     764     117,    -1,   118,    -1,   119,    -1,   120,    -1,   121,    -1,
     765     122,    -1,   148,    -1,   109,   275,   110,   151,    -1,   109,
     766     275,   110,   167,    -1,   151,    -1,   152,   117,   151,    -1,
     767     152,   123,   151,    -1,   152,   124,   151,    -1,   152,    -1,
     768     153,   119,   152,    -1,   153,   120,   152,    -1,   153,    -1,
     769     154,    88,   153,    -1,   154,    89,   153,    -1,   154,    -1,
     770     155,   125,   154,    -1,   155,   126,   154,    -1,   155,    90,
     771     154,    -1,   155,    91,   154,    -1,   155,    -1,   156,    92,
     772     155,    -1,   156,    93,   155,    -1,   156,    -1,   157,   118,
     773     156,    -1,   157,    -1,   158,   127,   157,    -1,   158,    -1,
     774     159,   128,   158,    -1,   159,    -1,   160,    94,   159,    -1,
     775     160,    -1,   161,    95,   160,    -1,   161,    -1,   161,   129,
     776     169,   130,   162,    -1,   161,   129,   130,   162,    -1,   161,
     777     129,   169,   130,   167,    -1,   162,    -1,   162,    -1,   148,
     778     166,   164,    -1,   167,   373,    -1,    -1,   164,    -1,   131,
     779      -1,    97,    -1,    98,    -1,    99,    -1,   100,    -1,   101,
     780      -1,   102,    -1,   103,    -1,   104,    -1,   105,    -1,   106,
     781      -1,   111,   112,    -1,   111,   134,   164,   135,   112,    -1,
     782     111,   134,   116,   168,   135,   112,    -1,   111,   134,   164,
     783     116,   168,   135,   112,    -1,   165,    -1,   168,   116,   165,
     784      -1,   164,    -1,   169,   116,   164,    -1,    -1,   169,    -1,
     785     172,    -1,   173,    -1,   177,    -1,   178,    -1,   190,    -1,
     786     192,    -1,   193,    -1,   198,    -1,   127,   143,   114,   144,
     787     115,   132,    -1,    72,   130,   312,   171,    -1,   114,   115,
     788      -1,   114,   134,   134,   209,   174,   135,   115,    -1,   175,
     789      -1,   174,   134,   175,    -1,   212,    -1,    40,   212,    -1,
     790     308,    -1,   171,   135,    -1,   171,    -1,   176,   171,    -1,
     791     170,   132,    -1,    41,   109,   169,   110,   171,    -1,    41,
     792     109,   169,   110,   171,    42,   171,    -1,    43,   109,   169,
     793     110,   183,    -1,    43,   109,   169,   110,   114,   134,   205,
     794     184,   115,    -1,    53,   109,   169,   110,   183,    -1,    53,
     795     109,   169,   110,   114,   134,   205,   186,   115,    -1,   163,
     796      -1,   163,    96,   163,    -1,   310,    -1,   179,    -1,   180,
     797     116,   179,    -1,    44,   180,   130,    -1,    45,   130,    -1,
     798     181,    -1,   182,   181,    -1,   182,   171,    -1,    -1,   185,
     799      -1,   182,   176,    -1,   185,   182,   176,    -1,    -1,   187,
     800      -1,   182,   189,    -1,   182,   176,   188,    -1,   187,   182,
     801     189,    -1,   187,   182,   176,   188,    -1,    -1,   189,    -1,
     802      56,    -1,    56,   132,    -1,    47,   109,   169,   110,   171,
     803      -1,    46,   171,    47,   109,   169,   110,   132,    -1,    48,
     804     109,   134,   191,   110,   171,    -1,   170,   135,   132,   170,
     805     132,   170,    -1,   212,   170,   132,   170,    -1,    51,    72,
     806     132,    -1,    51,   117,   169,   132,    -1,    50,   132,    -1,
     807      50,    72,   132,    -1,    49,   132,    -1,    49,    72,   132,
     808      -1,    52,   170,   132,    -1,    61,   165,   132,    -1,    62,
     809     165,   132,    -1,    62,   165,    63,   164,   132,    -1,    57,
     810     173,   194,    -1,    57,   173,   196,    -1,    57,   173,   194,
     811     196,    -1,   195,    -1,    58,   109,    96,   110,   173,    -1,
     812     195,    58,   109,    96,   110,   173,    -1,    59,   109,    96,
     813     110,   173,    -1,   195,    59,   109,    96,   110,   173,    -1,
     814      58,   109,   134,   134,   197,   135,   110,   173,   135,    -1,
     815     195,    58,   109,   134,   134,   197,   135,   110,   173,   135,
     816      -1,    59,   109,   134,   134,   197,   135,   110,   173,   135,
     817      -1,   195,    59,   109,   134,   134,   197,   135,   110,   173,
     818     135,    -1,    60,   173,    -1,   225,    -1,   225,   309,    -1,
     819     225,   357,    -1,   366,   139,    -1,   366,    -1,    64,   199,
     820     109,   141,   110,   132,    -1,    64,   199,   109,   141,   130,
     821     200,   110,   132,    -1,    64,   199,   109,   141,   130,   200,
     822     130,   200,   110,   132,    -1,    64,   199,   109,   141,   130,
     823     200,   130,   200,   130,   203,   110,   132,    -1,    64,   199,
     824      51,   109,   141,   130,   130,   200,   130,   203,   130,   204,
     825     110,   132,    -1,    -1,    11,    -1,    -1,   201,    -1,   202,
     826      -1,   201,   116,   202,    -1,   141,   109,   163,   110,    -1,
     827     111,   163,   112,   141,   109,   163,   110,    -1,    -1,   141,
     828      -1,   203,   116,   141,    -1,   139,    -1,   204,   116,   139,
     829      -1,   135,    -1,   206,    -1,   212,    -1,   206,   134,   212,
     830      -1,   135,    -1,   208,    -1,   222,    -1,   208,   134,   222,
     831      -1,    -1,   210,    -1,    29,   211,   132,    -1,   210,    29,
     832     211,   132,    -1,   274,    -1,   211,   116,   274,    -1,   213,
     833      -1,   222,    -1,   214,   135,   132,    -1,   219,   135,   132,
     834      -1,   216,   135,   132,    -1,   293,   135,   132,    -1,   296,
     835     135,   132,    -1,   215,   277,    -1,   231,   215,   277,    -1,
     836     214,   135,   116,   134,   272,   277,    -1,   367,   272,   311,
     837      -1,   370,   272,   311,    -1,   227,   370,   272,   311,    -1,
     838     217,    -1,   227,   217,    -1,   231,   217,    -1,   231,   227,
     839     217,    -1,   216,   135,   116,   134,   272,    -1,   111,   112,
     840     272,   109,   134,   260,   135,   110,    -1,   370,   272,   109,
     841     134,   260,   135,   110,    -1,   218,   272,   109,   134,   260,
     842     135,   110,    -1,   111,   134,   262,   135,   112,    -1,   111,
     843     134,   262,   135,   116,   134,   263,   135,   112,    -1,     3,
     844     215,    -1,     3,   217,    -1,   219,   135,   116,   134,   139,
     845      -1,     3,   225,   309,    -1,   220,   135,   116,   134,   309,
     846      -1,   227,     3,   225,   309,    -1,   225,     3,   309,    -1,
     847     225,     3,   227,   309,    -1,     3,   139,   131,   164,    -1,
     848     221,   135,   116,   134,   139,   131,   164,    -1,   223,   135,
     849     132,    -1,   220,   135,   132,    -1,   221,   135,   132,    -1,
     850     240,   135,   132,    -1,   224,   309,   311,   277,    -1,   223,
     851     116,   312,   309,   311,   277,    -1,   236,    -1,   240,    -1,
     852     242,    -1,   283,    -1,   237,    -1,   241,    -1,   243,    -1,
     853     284,    -1,    -1,   227,    -1,   228,    -1,   227,   228,    -1,
     854     229,    -1,   314,    -1,    10,    -1,    12,    -1,    11,    -1,
     855      14,    -1,    67,    -1,    -1,    13,   109,   230,   286,   110,
     856      -1,   232,    -1,   227,   232,    -1,   231,   227,   232,    -1,
     857     233,    -1,   232,   233,    -1,   234,    -1,     5,    -1,     7,
     858      -1,     4,    -1,     6,    -1,     8,    -1,     9,    -1,    69,
     859      -1,    71,    -1,    16,    -1,    21,    -1,    20,    -1,    18,
     860      -1,    19,    -1,    17,    -1,    22,    -1,    23,    -1,    15,
     861      -1,    25,    -1,    26,    -1,    27,    -1,    24,    -1,   237,
     862      -1,   231,   237,    -1,   236,   233,    -1,   236,   233,   227,
     863      -1,   236,   233,   237,    -1,   238,    -1,   226,   239,   226,
     864      -1,   235,    -1,   227,   235,    -1,   238,   228,    -1,   238,
     865     235,    -1,    28,   109,   276,   110,    -1,    28,   109,   169,
     866     110,    -1,    78,   109,   276,   110,    -1,    78,   109,   169,
     867     110,    -1,   241,    -1,   231,   241,    -1,   240,   233,    -1,
     868     240,   233,   227,    -1,   244,    -1,   227,   244,    -1,   241,
     869     228,    -1,   243,    -1,   231,   243,    -1,   242,   233,    -1,
     870     242,   233,   227,    -1,    74,    -1,   227,    74,    -1,   243,
     871     228,    -1,   245,    -1,   256,    -1,   247,   114,   248,   115,
     872      -1,   247,   274,    -1,    -1,   247,   274,   246,   114,   248,
     873     115,    -1,   247,   109,   292,   110,   114,   248,   115,    -1,
     874     247,   285,    -1,    31,   312,    -1,    32,   312,    -1,    -1,
     875     248,   249,    -1,   250,   132,    -1,    40,   250,   132,    -1,
     876     251,   132,    -1,    40,   251,   132,    -1,   366,    -1,   366,
     877     274,    -1,   250,   116,   274,    -1,   250,   116,    -1,   225,
     878     252,    -1,   251,   116,   312,   252,    -1,    -1,   254,    -1,
     879     318,   253,    -1,   331,   253,    -1,   357,    -1,    -1,   254,
     880      -1,   130,   163,    -1,    30,   312,    -1,   255,   114,   258,
     881     372,   115,    -1,   255,   274,    -1,    -1,   255,   274,   257,
     882     114,   258,   372,   115,    -1,   274,   259,    -1,   258,   116,
     883     274,   259,    -1,    -1,   131,   163,    -1,    -1,   261,    -1,
     884     263,    -1,   262,    -1,   262,   135,   116,   134,   263,    -1,
     885     263,   135,   116,   134,    96,    -1,   262,   135,   116,   134,
     886      96,    -1,   267,    -1,   263,   135,   116,   134,   267,    -1,
     887     262,   135,   116,   134,   267,    -1,   262,   135,   116,   134,
     888     263,   135,   116,   134,   267,    -1,   268,    -1,   263,   135,
     889     116,   134,   268,    -1,    -1,   265,    -1,   266,    -1,   266,
     890     135,   116,   134,    96,    -1,   270,    -1,   269,    -1,   266,
     891     135,   116,   134,   270,    -1,   266,   135,   116,   134,   269,
     892      -1,   269,    -1,   362,   272,   373,    -1,   370,   272,   373,
     893      -1,   227,   370,   272,   373,    -1,   217,    -1,   270,    -1,
     894     362,    -1,   370,    -1,   227,   370,    -1,   371,    -1,   224,
     895     336,   373,    -1,   224,   340,   373,    -1,   224,    -1,   224,
     896     351,    -1,   139,    -1,   271,   116,   139,    -1,   137,    -1,
     897      74,    -1,    75,    -1,   138,    -1,    74,    -1,    75,    -1,
     898     139,    -1,    74,    -1,    75,    -1,   366,    -1,   225,    -1,
     899     225,   357,    -1,   366,    -1,   371,    -1,   225,    -1,   225,
     900     345,    -1,    -1,   131,   278,    -1,   107,   278,    -1,   164,
     901      -1,   114,   279,   372,   115,    -1,    -1,   278,    -1,   280,
     902     278,    -1,   279,   116,   278,    -1,   279,   116,   280,   278,
     903      -1,   281,   130,    -1,   274,   130,    -1,   282,    -1,   281,
     904     282,    -1,   113,   274,    -1,   111,   134,   164,   135,   112,
     905      -1,   111,   134,   310,   135,   112,    -1,   111,   134,   163,
     906      96,   163,   135,   112,    -1,   113,   111,   134,   146,   135,
     907     112,    -1,   284,    -1,   231,   284,    -1,   283,   233,    -1,
     908     283,   233,   227,    -1,   285,    -1,   227,   285,    -1,   284,
     909     228,    -1,    75,   109,   292,   110,    -1,   287,   373,    -1,
     910     286,   116,   287,   373,    -1,    -1,   289,   274,   288,   290,
     911      -1,   225,   336,    -1,    33,    -1,    35,    -1,    34,    -1,
     912      -1,   290,   291,    -1,   128,   274,   109,   292,   110,    -1,
     913     128,   114,   134,   298,   115,    -1,   128,   109,   134,   286,
     914     135,   110,   114,   134,   298,   115,   109,   292,   110,    -1,
     915     276,    -1,   164,    -1,   292,   116,   276,    -1,   292,   116,
     916     164,    -1,    33,   294,    -1,   232,    33,   294,    -1,   293,
     917     116,   294,    -1,   295,   290,    -1,   295,   290,   131,   276,
     918      -1,   274,    -1,   273,   109,   134,   286,   135,   110,    -1,
     919      36,   274,   109,   134,   286,   135,   110,   114,   115,    -1,
     920      -1,    36,   274,   109,   134,   286,   135,   110,   114,   297,
     921     298,   115,    -1,   299,    -1,   298,   134,   299,    -1,   300,
     922     135,   132,    -1,   301,   135,   132,    -1,   215,    -1,   217,
     923      -1,   300,   135,   116,   134,   272,    -1,   225,   309,    -1,
     924     301,   135,   116,   134,   309,    -1,    -1,   303,    -1,   305,
     925      -1,   303,   134,   305,    -1,    -1,   303,    -1,   212,    -1,
     926     307,    -1,   198,    -1,    -1,     5,    82,   306,   114,   304,
     927     115,    -1,    40,   305,    -1,   308,    -1,   323,   173,    -1,
     928     327,   134,   207,   173,    -1,   216,   173,    -1,   224,   323,
     929     173,    -1,   227,   323,   173,    -1,   231,   323,   173,    -1,
     930     231,   227,   323,   173,    -1,   224,   327,   134,   207,   173,
     931      -1,   227,   327,   134,   207,   173,    -1,   231,   327,   134,
     932     207,   173,    -1,   231,   227,   327,   134,   207,   173,    -1,
     933     318,    -1,   331,    -1,   323,    -1,   163,   122,   163,    -1,
     934      -1,    64,   109,   141,   110,   312,    -1,    -1,   313,    -1,
     935     314,    -1,   313,   314,    -1,    39,   109,   109,   315,   110,
     936     110,    -1,   316,    -1,   315,   116,   316,    -1,    -1,   317,
     937      -1,   317,   109,   170,   110,    -1,   272,    -1,   234,    -1,
     938     235,    -1,   228,    -1,   319,   312,    -1,   320,    -1,   321,
     939     312,    -1,   322,   312,    -1,   137,    -1,   109,   319,   110,
     940      -1,   149,   318,    -1,   149,   227,   318,    -1,   109,   320,
     941     110,    -1,   319,   349,    -1,   109,   320,   110,   349,    -1,
     942     109,   321,   110,   350,    -1,   109,   321,   110,    -1,   109,
     943     320,   110,   109,   134,   264,   135,   110,    -1,   109,   322,
     944     110,    -1,   324,   312,    -1,   325,    -1,   326,   312,    -1,
     945     319,   109,   134,   264,   135,   110,    -1,   109,   325,   110,
     946     109,   134,   264,   135,   110,    -1,   109,   324,   110,    -1,
     947     149,   323,    -1,   149,   227,   323,    -1,   109,   325,   110,
     948      -1,   109,   325,   110,   349,    -1,   109,   326,   110,   350,
     949      -1,   109,   326,   110,    -1,   328,    -1,   329,    -1,   330,
     950      -1,   319,   109,   271,   110,    -1,   109,   329,   110,   109,
     951     271,   110,    -1,   109,   328,   110,    -1,   149,   327,    -1,
     952     149,   227,   327,    -1,   109,   329,   110,    -1,   109,   329,
     953     110,   349,    -1,   109,   330,   110,   350,    -1,   109,   330,
     954     110,    -1,   332,   312,    -1,   333,    -1,   334,   312,    -1,
     955     335,   312,    -1,   341,    -1,   109,   332,   110,    -1,   149,
     956     331,    -1,   149,   227,   331,    -1,   109,   333,   110,    -1,
     957     332,   349,    -1,   109,   333,   110,   349,    -1,   109,   334,
     958     110,   350,    -1,   109,   334,   110,    -1,   332,   109,   134,
     959     264,   135,   110,    -1,   109,   333,   110,   109,   134,   264,
     960     135,   110,    -1,   109,   335,   110,    -1,   319,   312,    -1,
     961     337,    -1,   338,   312,    -1,   339,   312,    -1,   149,   336,
     962      -1,   149,   227,   336,    -1,   109,   337,   110,    -1,   319,
     963     355,    -1,   109,   337,   110,   349,    -1,   109,   338,   110,
     964     350,    -1,   109,   338,   110,    -1,   319,   109,   134,   264,
     965     135,   110,    -1,   109,   337,   110,   109,   134,   264,   135,
     966     110,    -1,   109,   339,   110,    -1,   341,   312,    -1,   342,
     967      -1,   343,   312,    -1,   344,   312,    -1,    74,    -1,    75,
     968      -1,   149,   340,    -1,   149,   227,   340,    -1,   109,   342,
     969     110,    -1,   341,   355,    -1,   109,   342,   110,   355,    -1,
     970     341,   109,   134,   264,   135,   110,    -1,   109,   342,   110,
     971     109,   134,   264,   135,   110,    -1,   346,    -1,   347,   312,
     972      -1,   348,   312,    -1,   149,    -1,   149,   227,    -1,   149,
     973     345,    -1,   149,   227,   345,    -1,   109,   346,   110,    -1,
     974     349,    -1,   109,   346,   110,   349,    -1,   109,   347,   110,
     975     350,    -1,   109,   347,   110,    -1,   109,   134,   264,   135,
     976     110,    -1,   109,   346,   110,   109,   134,   264,   135,   110,
     977      -1,   109,   348,   110,    -1,   111,   112,    -1,   111,   112,
     978     350,    -1,   350,    -1,   111,   134,   164,   135,   112,    -1,
     979     111,   134,   117,   135,   112,    -1,   350,   111,   134,   164,
     980     135,   112,    -1,   350,   111,   134,   117,   135,   112,    -1,
     981     352,    -1,   353,   312,    -1,   354,   312,    -1,   149,    -1,
     982     149,   227,    -1,   149,   351,    -1,   149,   227,   351,    -1,
     983     109,   352,   110,    -1,   355,    -1,   109,   352,   110,   355,
     984      -1,   109,   353,   110,   350,    -1,   109,   353,   110,    -1,
     985     109,   134,   264,   135,   110,    -1,   109,   352,   110,   109,
     986     134,   264,   135,   110,    -1,   109,   354,   110,    -1,   356,
     987      -1,   356,   350,    -1,   350,    -1,   111,   112,    -1,   111,
     988     134,   227,   117,   135,   112,    -1,   111,   134,   227,   135,
     989     112,    -1,   111,   134,   227,   164,   135,   112,    -1,   111,
     990     134,     7,   226,   164,   135,   112,    -1,   111,   134,   227,
     991       7,   164,   135,   112,    -1,   358,    -1,   359,   312,    -1,
     992     360,   312,    -1,   149,    -1,   149,   227,    -1,   149,   357,
     993      -1,   149,   227,   357,    -1,   109,   358,   110,    -1,   349,
     994      -1,   109,   358,   110,   349,    -1,   109,   359,   110,   350,
     995      -1,   109,   359,   110,    -1,   109,   358,   110,   109,   134,
     996     264,   135,   110,    -1,   109,   360,   110,    -1,   362,    -1,
     997     370,    -1,   227,   370,    -1,   363,    -1,   364,    -1,   149,
     998     225,    -1,   227,   149,   225,    -1,   149,   371,    -1,   227,
     999     149,   371,    -1,   149,   361,    -1,   227,   149,   361,    -1,
     1000     111,   112,   225,    -1,   365,   225,    -1,   111,   112,   350,
     1001     225,    -1,   365,   350,   225,    -1,   350,   225,    -1,   111,
     1002     112,   363,    -1,   365,   363,    -1,   111,   112,   350,   363,
     1003      -1,   365,   350,   363,    -1,   350,   363,    -1,   111,   134,
     1004     227,   117,   135,   112,    -1,   111,   134,   227,   164,   135,
     1005     112,    -1,   111,   134,   231,   164,   135,   112,    -1,   111,
     1006     134,   231,   227,   164,   135,   112,    -1,   370,    -1,   227,
     1007     370,    -1,   367,    -1,   368,    -1,   369,    -1,   149,   225,
     1008      -1,   227,   149,   225,    -1,   149,   371,    -1,   227,   149,
     1009     371,    -1,   149,   366,    -1,   227,   149,   366,    -1,   111,
     1010     112,   225,    -1,   111,   112,   350,   225,    -1,   350,   225,
     1011      -1,   111,   112,   368,    -1,   111,   112,   350,   368,    -1,
     1012     350,   368,    -1,   111,   134,   263,   135,   112,    -1,   111,
     1013     112,   109,   260,   110,    -1,   370,   109,   134,   260,   135,
     1014     110,    -1,   218,   109,   134,   260,   135,   110,    -1,    -1,
     1015     116,    -1,    -1,   131,   164,    -1
    10181016};
    10191017
     
    10241022     323,   324,   328,   329,   333,   334,   338,   339,   350,   352,
    10251023     354,   356,   361,   362,   368,   372,   374,   375,   377,   378,
    1026      380,   382,   384,   393,   394,   400,   401,   402,   407,   409,
    1027      414,   415,   419,   423,   425,   427,   429,   434,   437,   439,
    1028      441,   446,   459,   461,   463,   465,   467,   469,   471,   473,
    1029      475,   477,   479,   486,   487,   493,   494,   495,   496,   500,
    1030      501,   503,   508,   509,   511,   513,   518,   519,   521,   526,
    1031      527,   529,   534,   535,   537,   539,   541,   546,   547,   549,
    1032      554,   555,   560,   561,   566,   567,   572,   573,   578,   579,
    1033      584,   585,   588,   590,   595,   600,   601,   603,   609,   610,
    1034      614,   615,   616,   617,   618,   619,   620,   621,   622,   623,
    1035      624,   630,   632,   634,   636,   641,   642,   647,   648,   654,
    1036      655,   661,   662,   663,   664,   665,   666,   667,   668,   669,
    1037      679,   686,   688,   698,   699,   704,   706,   712,   714,   718,
    1038      719,   724,   729,   732,   734,   736,   746,   748,   759,   760,
    1039      762,   766,   768,   772,   773,   778,   779,   783,   788,   789,
    1040      793,   795,   801,   802,   806,   808,   810,   812,   818,   819,
    1041      823,   825,   830,   832,   834,   839,   841,   846,   848,   852,
    1042      855,   859,   862,   866,   868,   872,   874,   881,   883,   885,
    1043      894,   896,   898,   900,   902,   907,   909,   911,   913,   918,
    1044      931,   932,   937,   939,   944,   948,   950,   952,   954,   956,
    1045      962,   963,   969,   970,   974,   975,   980,   982,   988,   989,
    1046      991,   996,   998,  1005,  1007,  1011,  1012,  1017,  1019,  1023,
    1047     1024,  1028,  1030,  1034,  1035,  1039,  1040,  1044,  1045,  1060,
    1048     1061,  1062,  1063,  1064,  1068,  1073,  1080,  1090,  1095,  1100,
    1049     1108,  1113,  1118,  1123,  1128,  1136,  1158,  1163,  1170,  1172,
    1050     1179,  1184,  1189,  1200,  1205,  1210,  1215,  1220,  1229,  1234,
    1051     1242,  1243,  1244,  1245,  1251,  1256,  1264,  1265,  1266,  1267,
    1052     1271,  1272,  1273,  1274,  1279,  1280,  1289,  1290,  1295,  1296,
    1053     1301,  1303,  1305,  1307,  1309,  1312,  1311,  1323,  1324,  1326,
    1054     1336,  1337,  1342,  1346,  1348,  1350,  1352,  1354,  1356,  1358,
    1055     1360,  1365,  1367,  1369,  1371,  1373,  1375,  1377,  1379,  1381,
    1056     1383,  1385,  1387,  1389,  1395,  1396,  1398,  1400,  1402,  1407,
    1057     1408,  1414,  1415,  1417,  1419,  1424,  1426,  1428,  1430,  1435,
    1058     1436,  1438,  1440,  1445,  1446,  1448,  1453,  1454,  1456,  1458,
    1059     1463,  1465,  1467,  1472,  1473,  1477,  1479,  1485,  1484,  1488,
    1060     1490,  1495,  1497,  1503,  1504,  1509,  1510,  1512,  1513,  1522,
    1061     1523,  1525,  1527,  1532,  1534,  1540,  1541,  1543,  1546,  1549,
    1062     1554,  1555,  1560,  1565,  1569,  1571,  1577,  1576,  1583,  1585,
    1063     1591,  1592,  1600,  1601,  1605,  1606,  1607,  1609,  1611,  1618,
    1064     1619,  1621,  1623,  1628,  1629,  1635,  1636,  1640,  1641,  1646,
    1065     1647,  1648,  1650,  1658,  1659,  1661,  1664,  1666,  1670,  1671,
    1066     1672,  1674,  1676,  1680,  1685,  1693,  1694,  1703,  1705,  1710,
    1067     1711,  1712,  1716,  1717,  1718,  1722,  1723,  1724,  1728,  1729,
    1068     1730,  1735,  1736,  1737,  1738,  1744,  1745,  1747,  1752,  1753,
    1069     1758,  1759,  1760,  1761,  1762,  1777,  1778,  1783,  1784,  1792,
    1070     1794,  1796,  1799,  1801,  1803,  1826,  1827,  1829,  1831,  1836,
    1071     1837,  1839,  1844,  1849,  1850,  1856,  1855,  1859,  1863,  1865,
    1072     1867,  1873,  1874,  1879,  1884,  1886,  1891,  1893,  1894,  1896,
    1073     1901,  1903,  1905,  1910,  1912,  1917,  1922,  1930,  1936,  1935,
    1074     1949,  1950,  1955,  1956,  1960,  1965,  1970,  1978,  1983,  1994,
    1075     1995,  2006,  2007,  2013,  2014,  2018,  2019,  2020,  2023,  2022,
    1076     2033,  2042,  2048,  2054,  2063,  2069,  2075,  2081,  2087,  2095,
    1077     2101,  2109,  2115,  2124,  2125,  2126,  2130,  2134,  2136,  2141,
    1078     2142,  2146,  2147,  2152,  2158,  2159,  2162,  2164,  2165,  2169,
    1079     2170,  2171,  2172,  2206,  2208,  2209,  2211,  2216,  2221,  2226,
    1080     2228,  2230,  2235,  2237,  2239,  2241,  2246,  2248,  2257,  2259,
    1081     2260,  2265,  2267,  2269,  2274,  2276,  2278,  2283,  2285,  2287,
    1082     2296,  2297,  2298,  2302,  2304,  2306,  2311,  2313,  2315,  2320,
    1083     2322,  2324,  2339,  2341,  2342,  2344,  2349,  2350,  2355,  2357,
    1084     2359,  2364,  2366,  2368,  2370,  2375,  2377,  2379,  2389,  2391,
    1085     2392,  2394,  2399,  2401,  2403,  2408,  2410,  2412,  2414,  2419,
    1086     2421,  2423,  2454,  2456,  2457,  2459,  2464,  2469,  2477,  2479,
    1087     2481,  2486,  2488,  2493,  2495,  2509,  2510,  2512,  2517,  2519,
    1088     2521,  2523,  2525,  2530,  2531,  2533,  2535,  2540,  2542,  2544,
    1089     2550,  2552,  2554,  2558,  2560,  2562,  2564,  2578,  2579,  2581,
    1090     2586,  2588,  2590,  2592,  2594,  2599,  2600,  2602,  2604,  2609,
    1091     2611,  2613,  2619,  2620,  2622,  2631,  2634,  2636,  2639,  2641,
    1092     2643,  2656,  2657,  2659,  2664,  2666,  2668,  2670,  2672,  2677,
    1093     2678,  2680,  2682,  2687,  2689,  2697,  2698,  2699,  2704,  2705,
    1094     2709,  2711,  2713,  2715,  2717,  2719,  2726,  2728,  2730,  2732,
    1095     2734,  2736,  2738,  2740,  2742,  2744,  2749,  2751,  2753,  2758,
    1096     2784,  2785,  2787,  2791,  2792,  2796,  2798,  2800,  2802,  2804,
    1097     2806,  2813,  2815,  2817,  2819,  2821,  2823,  2828,  2833,  2835,
    1098     2837,  2855,  2857,  2862,  2863
     1024     380,   382,   384,   393,   394,   400,   401,   405,   406,   410,
     1025     414,   416,   418,   420,   425,   428,   430,   432,   437,   450,
     1026     452,   454,   456,   458,   460,   462,   464,   466,   468,   470,
     1027     477,   478,   484,   485,   486,   487,   491,   492,   494,   499,
     1028     500,   502,   504,   509,   510,   512,   517,   518,   520,   525,
     1029     526,   528,   530,   532,   537,   538,   540,   545,   546,   551,
     1030     552,   557,   558,   563,   564,   569,   570,   575,   576,   579,
     1031     581,   586,   591,   592,   594,   600,   601,   605,   606,   607,
     1032     608,   609,   610,   611,   612,   613,   614,   615,   621,   623,
     1033     625,   627,   632,   633,   638,   639,   645,   646,   652,   653,
     1034     654,   655,   656,   657,   658,   659,   660,   670,   677,   679,
     1035     689,   690,   695,   697,   703,   705,   709,   710,   715,   720,
     1036     723,   725,   727,   737,   739,   750,   751,   753,   757,   759,
     1037     763,   764,   769,   770,   774,   779,   780,   784,   786,   792,
     1038     793,   797,   799,   801,   803,   809,   810,   814,   816,   821,
     1039     823,   825,   830,   832,   837,   839,   843,   846,   850,   853,
     1040     857,   859,   863,   865,   872,   874,   876,   885,   887,   889,
     1041     891,   893,   898,   900,   902,   904,   909,   922,   923,   928,
     1042     930,   935,   939,   941,   943,   945,   947,   953,   954,   960,
     1043     961,   965,   966,   971,   973,   979,   980,   982,   987,   989,
     1044     996,   998,  1002,  1003,  1008,  1010,  1014,  1015,  1019,  1021,
     1045    1025,  1026,  1030,  1031,  1035,  1036,  1051,  1052,  1053,  1054,
     1046    1055,  1059,  1064,  1071,  1081,  1086,  1091,  1099,  1104,  1109,
     1047    1114,  1119,  1127,  1149,  1154,  1161,  1163,  1170,  1175,  1180,
     1048    1191,  1196,  1201,  1206,  1211,  1220,  1225,  1233,  1234,  1235,
     1049    1236,  1242,  1247,  1255,  1256,  1257,  1258,  1262,  1263,  1264,
     1050    1265,  1270,  1271,  1280,  1281,  1286,  1287,  1292,  1294,  1296,
     1051    1298,  1300,  1303,  1302,  1314,  1315,  1317,  1327,  1328,  1333,
     1052    1337,  1339,  1341,  1343,  1345,  1347,  1349,  1351,  1356,  1358,
     1053    1360,  1362,  1364,  1366,  1368,  1370,  1372,  1374,  1376,  1378,
     1054    1380,  1386,  1387,  1389,  1391,  1393,  1398,  1399,  1405,  1406,
     1055    1408,  1410,  1415,  1417,  1419,  1421,  1426,  1427,  1429,  1431,
     1056    1436,  1437,  1439,  1444,  1445,  1447,  1449,  1454,  1456,  1458,
     1057    1463,  1464,  1468,  1470,  1476,  1475,  1479,  1481,  1486,  1488,
     1058    1494,  1495,  1500,  1501,  1503,  1504,  1513,  1514,  1516,  1518,
     1059    1523,  1525,  1531,  1532,  1534,  1537,  1540,  1545,  1546,  1551,
     1060    1556,  1560,  1562,  1568,  1567,  1574,  1576,  1582,  1583,  1591,
     1061    1592,  1596,  1597,  1598,  1600,  1602,  1609,  1610,  1612,  1614,
     1062    1619,  1620,  1626,  1627,  1631,  1632,  1637,  1638,  1639,  1641,
     1063    1649,  1650,  1652,  1655,  1657,  1661,  1662,  1663,  1665,  1667,
     1064    1671,  1676,  1684,  1685,  1694,  1696,  1701,  1702,  1703,  1707,
     1065    1708,  1709,  1713,  1714,  1715,  1719,  1720,  1721,  1726,  1727,
     1066    1728,  1729,  1735,  1736,  1738,  1743,  1744,  1749,  1750,  1751,
     1067    1752,  1753,  1768,  1769,  1774,  1775,  1781,  1783,  1786,  1788,
     1068    1790,  1813,  1814,  1816,  1818,  1823,  1824,  1826,  1831,  1836,
     1069    1837,  1843,  1842,  1846,  1850,  1852,  1854,  1860,  1861,  1866,
     1070    1871,  1873,  1878,  1880,  1881,  1883,  1888,  1890,  1892,  1897,
     1071    1899,  1904,  1909,  1917,  1923,  1922,  1936,  1937,  1942,  1943,
     1072    1947,  1952,  1957,  1965,  1970,  1981,  1982,  1993,  1994,  2000,
     1073    2001,  2005,  2006,  2007,  2010,  2009,  2020,  2029,  2035,  2041,
     1074    2050,  2056,  2062,  2068,  2074,  2082,  2088,  2096,  2102,  2111,
     1075    2112,  2113,  2117,  2121,  2123,  2128,  2129,  2133,  2134,  2139,
     1076    2145,  2146,  2149,  2151,  2152,  2156,  2157,  2158,  2159,  2193,
     1077    2195,  2196,  2198,  2203,  2208,  2213,  2215,  2217,  2222,  2224,
     1078    2226,  2228,  2233,  2235,  2244,  2246,  2247,  2252,  2254,  2256,
     1079    2261,  2263,  2265,  2270,  2272,  2274,  2283,  2284,  2285,  2289,
     1080    2291,  2293,  2298,  2300,  2302,  2307,  2309,  2311,  2326,  2328,
     1081    2329,  2331,  2336,  2337,  2342,  2344,  2346,  2351,  2353,  2355,
     1082    2357,  2362,  2364,  2366,  2376,  2378,  2379,  2381,  2386,  2388,
     1083    2390,  2395,  2397,  2399,  2401,  2406,  2408,  2410,  2441,  2443,
     1084    2444,  2446,  2451,  2456,  2464,  2466,  2468,  2473,  2475,  2480,
     1085    2482,  2496,  2497,  2499,  2504,  2506,  2508,  2510,  2512,  2517,
     1086    2518,  2520,  2522,  2527,  2529,  2531,  2537,  2539,  2541,  2545,
     1087    2547,  2549,  2551,  2565,  2566,  2568,  2573,  2575,  2577,  2579,
     1088    2581,  2586,  2587,  2589,  2591,  2596,  2598,  2600,  2606,  2607,
     1089    2609,  2618,  2621,  2623,  2626,  2628,  2630,  2643,  2644,  2646,
     1090    2651,  2653,  2655,  2657,  2659,  2664,  2665,  2667,  2669,  2674,
     1091    2676,  2684,  2685,  2686,  2691,  2692,  2696,  2698,  2700,  2702,
     1092    2704,  2706,  2713,  2715,  2717,  2719,  2721,  2723,  2725,  2727,
     1093    2729,  2731,  2736,  2738,  2740,  2745,  2771,  2772,  2774,  2778,
     1094    2779,  2783,  2785,  2787,  2789,  2791,  2793,  2800,  2802,  2804,
     1095    2806,  2808,  2810,  2815,  2820,  2822,  2824,  2842,  2844,  2849,
     1096    2850
    10991097};
    11001098#endif
     
    11221120  "DIVassign", "MODassign", "PLUSassign", "MINUSassign", "LSassign",
    11231121  "RSassign", "ANDassign", "ERassign", "ORassign", "ATassign", "THEN",
    1124   "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "':'", "'*'",
    1125   "'&'", "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'",
    1126   "'|'", "'?'", "'='", "';'", "$accept", "push", "pop", "constant",
     1122  "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "'*'", "'&'",
     1123  "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'", "'|'",
     1124  "'?'", "':'", "'='", "';'", "$accept", "push", "pop", "constant",
    11271125  "identifier", "no_01_identifier", "no_attr_identifier", "zero_one",
    11281126  "string_literal_list", "primary_expression", "postfix_expression",
     
    12291227     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
    12301228     355,   356,   357,   358,   359,   360,   361,   362,   363,    40,
    1231       41,    91,    93,    46,   123,   125,    44,    58,    42,    38,
    1232       43,    45,    33,   126,    47,    37,    60,    62,    94,   124,
    1233       63,    61,    59
     1229      41,    91,    93,    46,   123,   125,    44,    42,    38,    43,
     1230      45,    33,   126,    47,    37,    60,    62,    94,   124,    63,
     1231      58,    61,    59
    12341232};
    12351233# endif
     
    12411239     138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
    12421240     142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
    1243      143,   143,   143,   144,   144,   145,   145,   145,   145,   145,
    1244      146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
     1241     143,   143,   143,   144,   144,   145,   145,   146,   146,   147,
     1242     147,   147,   147,   147,   148,   148,   148,   148,   148,   148,
    12451243     148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
    1246      148,   148,   148,   149,   149,   150,   150,   150,   150,   151,
    1247      151,   151,   152,   152,   152,   152,   153,   153,   153,   154,
    1248      154,   154,   155,   155,   155,   155,   155,   156,   156,   156,
    1249      157,   157,   158,   158,   159,   159,   160,   160,   161,   161,
    1250      162,   162,   162,   162,   163,   164,   164,   164,   165,   165,
    1251      166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
    1252      166,   167,   167,   167,   167,   168,   168,   169,   169,   170,
    1253      170,   171,   171,   171,   171,   171,   171,   171,   171,   171,
    1254      172,   173,   173,   174,   174,   175,   175,   175,   175,   176,
    1255      176,   177,   178,   178,   178,   178,   178,   178,   179,   179,
    1256      179,   180,   180,   181,   181,   182,   182,   183,   184,   184,
    1257      185,   185,   186,   186,   187,   187,   187,   187,   188,   188,
    1258      189,   189,   190,   190,   190,   191,   191,   192,   192,   192,
    1259      192,   192,   192,   192,   192,   192,   192,   193,   193,   193,
    1260      194,   194,   194,   194,   194,   195,   195,   195,   195,   196,
    1261      197,   197,   197,   197,   197,   198,   198,   198,   198,   198,
    1262      199,   199,   200,   200,   201,   201,   202,   202,   203,   203,
    1263      203,   204,   204,   205,   205,   206,   206,   207,   207,   208,
    1264      208,   209,   209,   210,   210,   211,   211,   212,   212,   213,
    1265      213,   213,   213,   213,   214,   214,   214,   215,   215,   215,
    1266      216,   216,   216,   216,   216,   217,   217,   217,   218,   218,
    1267      219,   219,   219,   220,   220,   220,   220,   220,   221,   221,
    1268      222,   222,   222,   222,   223,   223,   224,   224,   224,   224,
    1269      225,   225,   225,   225,   226,   226,   227,   227,   228,   228,
    1270      229,   229,   229,   229,   229,   230,   229,   231,   231,   231,
    1271      232,   232,   233,   234,   234,   234,   234,   234,   234,   234,
    1272      234,   235,   235,   235,   235,   235,   235,   235,   235,   235,
    1273      235,   235,   235,   235,   236,   236,   236,   236,   236,   237,
    1274      237,   238,   238,   238,   238,   239,   239,   239,   239,   240,
    1275      240,   240,   240,   241,   241,   241,   242,   242,   242,   242,
    1276      243,   243,   243,   244,   244,   245,   245,   246,   245,   245,
    1277      245,   247,   247,   248,   248,   249,   249,   249,   249,   250,
    1278      250,   250,   250,   251,   251,   252,   252,   252,   252,   252,
    1279      253,   253,   254,   255,   256,   256,   257,   256,   258,   258,
    1280      259,   259,   260,   260,   261,   261,   261,   261,   261,   262,
    1281      262,   262,   262,   263,   263,   264,   264,   265,   265,   266,
    1282      266,   266,   266,   267,   267,   267,   267,   267,   268,   268,
    1283      268,   268,   268,   269,   269,   270,   270,   271,   271,   272,
    1284      272,   272,   273,   273,   273,   274,   274,   274,   275,   275,
    1285      275,   276,   276,   276,   276,   277,   277,   277,   278,   278,
    1286      279,   279,   279,   279,   279,   280,   280,   281,   281,   282,
    1287      282,   282,   282,   282,   282,   283,   283,   283,   283,   284,
    1288      284,   284,   285,   286,   286,   288,   287,   287,   289,   289,
    1289      289,   290,   290,   291,   291,   291,   292,   292,   292,   292,
    1290      293,   293,   293,   294,   294,   295,   295,   296,   297,   296,
    1291      298,   298,   299,   299,   300,   300,   300,   301,   301,   302,
    1292      302,   303,   303,   304,   304,   305,   305,   305,   306,   305,
    1293      305,   307,   307,   307,   308,   308,   308,   308,   308,   308,
    1294      308,   308,   308,   309,   309,   309,   310,   311,   311,   312,
    1295      312,   313,   313,   314,   315,   315,   316,   316,   316,   317,
    1296      317,   317,   317,   318,   318,   318,   318,   319,   319,   320,
    1297      320,   320,   321,   321,   321,   321,   322,   322,   323,   323,
    1298      323,   324,   324,   324,   325,   325,   325,   326,   326,   326,
    1299      327,   327,   327,   328,   328,   328,   329,   329,   329,   330,
    1300      330,   330,   331,   331,   331,   331,   332,   332,   333,   333,
    1301      333,   334,   334,   334,   334,   335,   335,   335,   336,   336,
    1302      336,   336,   337,   337,   337,   338,   338,   338,   338,   339,
    1303      339,   339,   340,   340,   340,   340,   341,   341,   342,   342,
    1304      342,   343,   343,   344,   344,   345,   345,   345,   346,   346,
    1305      346,   346,   346,   347,   347,   347,   347,   348,   348,   348,
    1306      349,   349,   349,   350,   350,   350,   350,   351,   351,   351,
    1307      352,   352,   352,   352,   352,   353,   353,   353,   353,   354,
    1308      354,   354,   355,   355,   355,   356,   356,   356,   356,   356,
    1309      356,   357,   357,   357,   358,   358,   358,   358,   358,   359,
    1310      359,   359,   359,   360,   360,   361,   361,   361,   362,   362,
    1311      363,   363,   363,   363,   363,   363,   364,   364,   364,   364,
    1312      364,   364,   364,   364,   364,   364,   365,   365,   365,   365,
    1313      366,   366,   366,   367,   367,   368,   368,   368,   368,   368,
    1314      368,   369,   369,   369,   369,   369,   369,   370,   371,   371,
    1315      371,   372,   372,   373,   373
     1244     149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
     1245     152,   152,   152,   153,   153,   153,   154,   154,   154,   155,
     1246     155,   155,   155,   155,   156,   156,   156,   157,   157,   158,
     1247     158,   159,   159,   160,   160,   161,   161,   162,   162,   162,
     1248     162,   163,   164,   164,   164,   165,   165,   166,   166,   166,
     1249     166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
     1250     167,   167,   168,   168,   169,   169,   170,   170,   171,   171,
     1251     171,   171,   171,   171,   171,   171,   171,   172,   173,   173,
     1252     174,   174,   175,   175,   175,   175,   176,   176,   177,   178,
     1253     178,   178,   178,   178,   178,   179,   179,   179,   180,   180,
     1254     181,   181,   182,   182,   183,   184,   184,   185,   185,   186,
     1255     186,   187,   187,   187,   187,   188,   188,   189,   189,   190,
     1256     190,   190,   191,   191,   192,   192,   192,   192,   192,   192,
     1257     192,   192,   192,   192,   193,   193,   193,   194,   194,   194,
     1258     194,   194,   195,   195,   195,   195,   196,   197,   197,   197,
     1259     197,   197,   198,   198,   198,   198,   198,   199,   199,   200,
     1260     200,   201,   201,   202,   202,   203,   203,   203,   204,   204,
     1261     205,   205,   206,   206,   207,   207,   208,   208,   209,   209,
     1262     210,   210,   211,   211,   212,   212,   213,   213,   213,   213,
     1263     213,   214,   214,   214,   215,   215,   215,   216,   216,   216,
     1264     216,   216,   217,   217,   217,   218,   218,   219,   219,   219,
     1265     220,   220,   220,   220,   220,   221,   221,   222,   222,   222,
     1266     222,   223,   223,   224,   224,   224,   224,   225,   225,   225,
     1267     225,   226,   226,   227,   227,   228,   228,   229,   229,   229,
     1268     229,   229,   230,   229,   231,   231,   231,   232,   232,   233,
     1269     234,   234,   234,   234,   234,   234,   234,   234,   235,   235,
     1270     235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
     1271     235,   236,   236,   236,   236,   236,   237,   237,   238,   238,
     1272     238,   238,   239,   239,   239,   239,   240,   240,   240,   240,
     1273     241,   241,   241,   242,   242,   242,   242,   243,   243,   243,
     1274     244,   244,   245,   245,   246,   245,   245,   245,   247,   247,
     1275     248,   248,   249,   249,   249,   249,   250,   250,   250,   250,
     1276     251,   251,   252,   252,   252,   252,   252,   253,   253,   254,
     1277     255,   256,   256,   257,   256,   258,   258,   259,   259,   260,
     1278     260,   261,   261,   261,   261,   261,   262,   262,   262,   262,
     1279     263,   263,   264,   264,   265,   265,   266,   266,   266,   266,
     1280     267,   267,   267,   267,   267,   268,   268,   268,   268,   268,
     1281     269,   269,   270,   270,   271,   271,   272,   272,   272,   273,
     1282     273,   273,   274,   274,   274,   275,   275,   275,   276,   276,
     1283     276,   276,   277,   277,   277,   278,   278,   279,   279,   279,
     1284     279,   279,   280,   280,   281,   281,   282,   282,   282,   282,
     1285     282,   283,   283,   283,   283,   284,   284,   284,   285,   286,
     1286     286,   288,   287,   287,   289,   289,   289,   290,   290,   291,
     1287     291,   291,   292,   292,   292,   292,   293,   293,   293,   294,
     1288     294,   295,   295,   296,   297,   296,   298,   298,   299,   299,
     1289     300,   300,   300,   301,   301,   302,   302,   303,   303,   304,
     1290     304,   305,   305,   305,   306,   305,   305,   307,   307,   307,
     1291     308,   308,   308,   308,   308,   308,   308,   308,   308,   309,
     1292     309,   309,   310,   311,   311,   312,   312,   313,   313,   314,
     1293     315,   315,   316,   316,   316,   317,   317,   317,   317,   318,
     1294     318,   318,   318,   319,   319,   320,   320,   320,   321,   321,
     1295     321,   321,   322,   322,   323,   323,   323,   324,   324,   324,
     1296     325,   325,   325,   326,   326,   326,   327,   327,   327,   328,
     1297     328,   328,   329,   329,   329,   330,   330,   330,   331,   331,
     1298     331,   331,   332,   332,   333,   333,   333,   334,   334,   334,
     1299     334,   335,   335,   335,   336,   336,   336,   336,   337,   337,
     1300     337,   338,   338,   338,   338,   339,   339,   339,   340,   340,
     1301     340,   340,   341,   341,   342,   342,   342,   343,   343,   344,
     1302     344,   345,   345,   345,   346,   346,   346,   346,   346,   347,
     1303     347,   347,   347,   348,   348,   348,   349,   349,   349,   350,
     1304     350,   350,   350,   351,   351,   351,   352,   352,   352,   352,
     1305     352,   353,   353,   353,   353,   354,   354,   354,   355,   355,
     1306     355,   356,   356,   356,   356,   356,   356,   357,   357,   357,
     1307     358,   358,   358,   358,   358,   359,   359,   359,   359,   360,
     1308     360,   361,   361,   361,   362,   362,   363,   363,   363,   363,
     1309     363,   363,   364,   364,   364,   364,   364,   364,   364,   364,
     1310     364,   364,   365,   365,   365,   365,   366,   366,   366,   367,
     1311     367,   368,   368,   368,   368,   368,   368,   369,   369,   369,
     1312     369,   369,   369,   370,   371,   371,   371,   372,   372,   373,
     1313     373
    13161314};
    13171315
     
    13221320       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
    13231321       3,     3,     1,     6,     4,     3,     7,     3,     7,     2,
    1324        2,     7,     4,     1,     3,     0,     1,     3,     7,     9,
    1325        1,     3,     1,     3,     7,     3,     7,     1,     1,     1,
    1326        2,     2,     2,     2,     2,     2,     4,     6,     1,     4,
    1327        4,     2,     4,     1,     1,     1,     1,     1,     1,     1,
    1328        4,     4,     1,     3,     3,     3,     1,     3,     3,     1,
    1329        3,     3,     1,     3,     3,     3,     3,     1,     3,     3,
    1330        1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
    1331        1,     5,     4,     5,     1,     1,     3,     2,     0,     1,
     1322       2,     7,     4,     1,     3,     0,     1,     1,     3,     1,
     1323       3,     7,     3,     7,     1,     1,     1,     2,     2,     2,
     1324       2,     2,     2,     4,     2,     4,     6,     1,     4,     4,
     1325       1,     1,     1,     1,     1,     1,     1,     4,     4,     1,
     1326       3,     3,     3,     1,     3,     3,     1,     3,     3,     1,
     1327       3,     3,     3,     3,     1,     3,     3,     1,     3,     1,
     1328       3,     1,     3,     1,     3,     1,     3,     1,     5,     4,
     1329       5,     1,     1,     3,     2,     0,     1,     1,     1,     1,
     1330       1,     1,     1,     1,     1,     1,     1,     1,     2,     5,
     1331       6,     7,     1,     3,     1,     3,     0,     1,     1,     1,
     1332       1,     1,     1,     1,     1,     1,     6,     4,     2,     7,
     1333       1,     3,     1,     2,     1,     2,     1,     2,     2,     5,
     1334       7,     5,     9,     5,     9,     1,     3,     1,     1,     3,
     1335       3,     2,     1,     2,     2,     0,     1,     2,     3,     0,
     1336       1,     2,     3,     3,     4,     0,     1,     1,     2,     5,
     1337       7,     6,     6,     4,     3,     4,     2,     3,     2,     3,
     1338       3,     3,     3,     5,     3,     3,     4,     1,     5,     6,
     1339       5,     6,     9,    10,     9,    10,     2,     1,     2,     2,
     1340       2,     1,     6,     8,    10,    12,    14,     0,     1,     0,
     1341       1,     1,     3,     4,     7,     0,     1,     3,     1,     3,
     1342       1,     1,     1,     3,     1,     1,     1,     3,     0,     1,
     1343       3,     4,     1,     3,     1,     1,     3,     3,     3,     3,
     1344       3,     2,     3,     6,     3,     3,     4,     1,     2,     2,
     1345       3,     5,     8,     7,     7,     5,     9,     2,     2,     5,
     1346       3,     5,     4,     3,     4,     4,     7,     3,     3,     3,
     1347       3,     4,     6,     1,     1,     1,     1,     1,     1,     1,
     1348       1,     0,     1,     1,     2,     1,     1,     1,     1,     1,
     1349       1,     1,     0,     5,     1,     2,     3,     1,     2,     1,
    13321350       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1333        1,     2,     5,     6,     7,     1,     3,     1,     3,     0,
    1334        1,     1,     1,     1,     1,     1,     1,     1,     1,     6,
    1335        4,     2,     7,     1,     3,     1,     2,     1,     2,     1,
    1336        2,     2,     5,     7,     5,     9,     5,     9,     1,     3,
    1337        1,     1,     3,     3,     2,     1,     2,     2,     0,     1,
    1338        2,     3,     0,     1,     2,     3,     3,     4,     0,     1,
    1339        1,     2,     5,     7,     6,     6,     4,     3,     4,     2,
    1340        3,     2,     3,     3,     3,     3,     5,     3,     3,     4,
    1341        1,     5,     6,     5,     6,     9,    10,     9,    10,     2,
    1342        1,     2,     2,     2,     1,     6,     8,    10,    12,    14,
    1343        0,     1,     0,     1,     1,     3,     4,     7,     0,     1,
    1344        3,     1,     3,     1,     1,     1,     3,     1,     1,     1,
    1345        3,     0,     1,     3,     4,     1,     3,     1,     1,     3,
    1346        3,     3,     3,     3,     2,     3,     6,     3,     3,     4,
    1347        1,     2,     2,     3,     5,     8,     7,     7,     5,     9,
    1348        2,     2,     5,     3,     5,     4,     3,     4,     4,     7,
    1349        3,     3,     3,     3,     4,     6,     1,     1,     1,     1,
    1350        1,     1,     1,     1,     0,     1,     1,     2,     1,     1,
    1351        1,     1,     1,     1,     1,     0,     5,     1,     2,     3,
    1352        1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
    13531351       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1354        1,     1,     1,     1,     1,     2,     2,     3,     3,     1,
    1355        3,     1,     2,     2,     2,     4,     4,     4,     4,     1,
    1356        2,     2,     3,     1,     2,     2,     1,     2,     2,     3,
    1357        1,     2,     2,     1,     1,     4,     2,     0,     6,     7,
    1358        2,     2,     2,     0,     2,     2,     3,     2,     3,     1,
    1359        2,     3,     2,     2,     4,     0,     1,     2,     2,     1,
    1360        0,     1,     2,     2,     5,     2,     0,     7,     2,     4,
    1361        0,     2,     0,     1,     1,     1,     5,     5,     5,     1,
    1362        5,     5,     9,     1,     5,     0,     1,     1,     5,     1,
    1363        1,     5,     5,     1,     3,     3,     4,     1,     1,     1,
    1364        1,     2,     1,     3,     3,     1,     2,     1,     3,     1,
    1365        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1366        2,     1,     1,     1,     2,     0,     2,     2,     1,     4,
    1367        0,     1,     2,     3,     4,     2,     2,     1,     2,     1,
    1368        2,     5,     5,     7,     6,     1,     2,     2,     3,     1,
    1369        2,     2,     4,     2,     4,     0,     4,     2,     1,     1,
    1370        1,     0,     2,     5,     5,    13,     1,     1,     3,     3,
    1371        2,     3,     3,     2,     4,     1,     6,     9,     0,    11,
    1372        1,     3,     3,     3,     1,     1,     5,     2,     5,     0,
    1373        1,     1,     3,     0,     1,     1,     1,     1,     0,     6,
    1374        2,     1,     2,     4,     2,     3,     3,     3,     4,     5,
    1375        5,     5,     6,     1,     1,     1,     3,     0,     5,     0,
    1376        1,     1,     2,     6,     1,     3,     0,     1,     4,     1,
    1377        1,     1,     1,     2,     1,     2,     2,     1,     3,     2,
    1378        3,     3,     2,     4,     4,     3,     8,     3,     2,     1,
    1379        2,     6,     8,     3,     2,     3,     3,     4,     4,     3,
    1380        1,     1,     1,     4,     6,     3,     2,     3,     3,     4,
    1381        4,     3,     2,     1,     2,     2,     1,     3,     2,     3,
     1352       1,     1,     2,     2,     3,     3,     1,     3,     1,     2,
     1353       2,     2,     4,     4,     4,     4,     1,     2,     2,     3,
     1354       1,     2,     2,     1,     2,     2,     3,     1,     2,     2,
     1355       1,     1,     4,     2,     0,     6,     7,     2,     2,     2,
     1356       0,     2,     2,     3,     2,     3,     1,     2,     3,     2,
     1357       2,     4,     0,     1,     2,     2,     1,     0,     1,     2,
     1358       2,     5,     2,     0,     7,     2,     4,     0,     2,     0,
     1359       1,     1,     1,     5,     5,     5,     1,     5,     5,     9,
     1360       1,     5,     0,     1,     1,     5,     1,     1,     5,     5,
     1361       1,     3,     3,     4,     1,     1,     1,     1,     2,     1,
     1362       3,     3,     1,     2,     1,     3,     1,     1,     1,     1,
     1363       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
     1364       1,     2,     0,     2,     2,     1,     4,     0,     1,     2,
     1365       3,     4,     2,     2,     1,     2,     2,     5,     5,     7,
     1366       6,     1,     2,     2,     3,     1,     2,     2,     4,     2,
     1367       4,     0,     4,     2,     1,     1,     1,     0,     2,     5,
     1368       5,    13,     1,     1,     3,     3,     2,     3,     3,     2,
     1369       4,     1,     6,     9,     0,    11,     1,     3,     3,     3,
     1370       1,     1,     5,     2,     5,     0,     1,     1,     3,     0,
     1371       1,     1,     1,     1,     0,     6,     2,     1,     2,     4,
     1372       2,     3,     3,     3,     4,     5,     5,     5,     6,     1,
     1373       1,     1,     3,     0,     5,     0,     1,     1,     2,     6,
     1374       1,     3,     0,     1,     4,     1,     1,     1,     1,     2,
     1375       1,     2,     2,     1,     3,     2,     3,     3,     2,     4,
     1376       4,     3,     8,     3,     2,     1,     2,     6,     8,     3,
     1377       2,     3,     3,     4,     4,     3,     1,     1,     1,     4,
     1378       6,     3,     2,     3,     3,     4,     4,     3,     2,     1,
     1379       2,     2,     1,     3,     2,     3,     3,     2,     4,     4,
     1380       3,     6,     8,     3,     2,     1,     2,     2,     2,     3,
    13821381       3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
    1383        2,     2,     2,     3,     3,     2,     4,     4,     3,     6,
    1384        8,     3,     2,     1,     2,     2,     1,     1,     2,     3,
    1385        3,     2,     4,     6,     8,     1,     2,     2,     1,     2,
    1386        2,     3,     3,     1,     4,     4,     3,     5,     8,     3,
    1387        2,     3,     1,     5,     5,     6,     6,     1,     2,     2,
    1388        1,     2,     2,     3,     3,     1,     4,     4,     3,     5,
    1389        8,     3,     1,     2,     1,     2,     6,     5,     6,     7,
    1390        7,     1,     2,     2,     1,     2,     2,     3,     3,     1,
    1391        4,     4,     3,     8,     3,     1,     1,     2,     1,     1,
    1392        2,     3,     2,     3,     2,     3,     3,     2,     4,     3,
    1393        2,     3,     2,     4,     3,     2,     6,     6,     6,     7,
    1394        1,     2,     1,     1,     1,     2,     3,     2,     3,     2,
    1395        3,     3,     4,     2,     3,     4,     2,     5,     5,     6,
    1396        6,     0,     1,     0,     2
     1382       2,     2,     1,     1,     2,     3,     3,     2,     4,     6,
     1383       8,     1,     2,     2,     1,     2,     2,     3,     3,     1,
     1384       4,     4,     3,     5,     8,     3,     2,     3,     1,     5,
     1385       5,     6,     6,     1,     2,     2,     1,     2,     2,     3,
     1386       3,     1,     4,     4,     3,     5,     8,     3,     1,     2,
     1387       1,     2,     6,     5,     6,     7,     7,     1,     2,     2,
     1388       1,     2,     2,     3,     3,     1,     4,     4,     3,     8,
     1389       3,     1,     1,     2,     1,     1,     2,     3,     2,     3,
     1390       2,     3,     3,     2,     4,     3,     2,     3,     2,     4,
     1391       3,     2,     6,     6,     6,     7,     1,     2,     1,     1,
     1392       1,     2,     3,     2,     3,     2,     3,     3,     4,     2,
     1393       3,     4,     2,     5,     5,     6,     6,     0,     1,     0,
     1394       2
    13971395};
    13981396
     
    14021400static const yytype_uint16 yydefact[] =
    14031401{
    1404      294,   294,   315,   313,   316,   314,   317,   318,   300,   302,
    1405      301,     0,   303,   329,   321,   326,   324,   325,   323,   322,
    1406      327,   328,   333,   330,   331,   332,   549,   549,   549,     0,
    1407        0,     0,   294,   220,   304,   319,   320,     7,   360,     0,
    1408        8,    14,    15,     0,     2,    63,    64,   567,     9,   294,
    1409      527,   525,   247,     3,   455,     3,   260,     0,     3,     3,
    1410        3,   248,     3,     0,     0,     0,   295,   296,   298,   294,
    1411      307,   310,   312,   341,   286,   334,   339,   287,   349,   288,
    1412      356,   353,   363,     0,     0,   364,   289,   475,   479,     3,
    1413        3,     0,     2,   521,   526,   531,   299,     0,     0,   549,
    1414      579,   549,     2,   590,   591,   592,   294,     0,   733,   734,
    1415        0,    12,     0,    13,   294,   270,   271,     0,   295,   290,
    1416      291,   292,   293,   528,   305,   393,   550,   551,   371,   372,
    1417       12,   446,   447,    11,   442,   445,     0,   505,   500,   491,
    1418      446,   447,     0,     0,   530,   221,     0,   294,     0,     0,
    1419        0,     0,     0,     0,     0,     0,   294,   294,     2,     0,
    1420      735,   295,   584,   596,   739,   732,   730,   737,     0,     0,
    1421        0,   254,     2,     0,   534,   440,   441,   439,     0,     0,
    1422        0,     0,   549,     0,   636,   637,     0,     0,   547,   543,
    1423      549,   564,   549,   549,   545,     2,   544,   549,   603,   549,
    1424      549,   606,     0,     0,     0,   294,   294,   313,   361,     2,
    1425      294,   261,   297,   308,   342,   354,   480,     0,     2,     0,
    1426      455,   262,   295,   335,   350,   357,   476,     0,     2,     0,
    1427      311,   336,   343,   344,     0,   351,   355,   358,   362,   447,
    1428      294,   373,   366,   370,     0,   395,   477,   481,     0,     0,
    1429        0,     1,   294,     2,   532,   578,   580,   294,     2,   743,
    1430      295,   746,   547,   547,     0,   295,     0,     0,   273,   549,
    1431      545,     2,   294,     0,     0,   294,   552,     2,   503,     2,
    1432      556,     0,     0,     0,     0,     0,     0,    18,    58,     4,
    1433        5,     6,    16,     0,     0,   294,     2,    65,    66,    67,
    1434       68,    48,    19,    49,    22,    47,    69,   294,     0,    72,
    1435       76,    79,    82,    87,    90,    92,    94,    96,    98,   100,
    1436      105,   497,   753,   453,   496,     0,   451,   452,     0,   568,
    1437      583,   586,   589,   595,   598,   601,   360,     0,     2,   741,
    1438        0,   294,   744,     2,    63,   294,     3,   427,     0,   435,
    1439      295,   294,   307,   334,   287,   349,   356,     3,     3,   409,
    1440      413,   423,   428,   475,   294,   429,   708,   709,   294,   430,
    1441      432,   294,     2,   585,   597,   731,     2,     2,   249,     2,
    1442      460,     0,   458,   457,   456,   141,     2,     2,   251,     2,
    1443        2,   250,     2,   281,     2,   282,     0,   280,     0,     0,
    1444        0,     0,     0,     0,     0,     0,     0,   569,   608,     0,
    1445      455,     2,   563,   572,   662,   565,   566,   535,   294,     2,
    1446      602,   611,   604,   605,     0,   276,   294,   294,   340,   295,
    1447        0,   295,     0,   294,   736,   740,   738,   536,   294,   547,
    1448      255,   263,   309,     0,     2,   537,   294,   501,   337,   338,
    1449      283,   352,   359,     0,   294,     0,   751,   400,     0,   478,
    1450      502,   252,   253,   522,   294,   437,     0,   294,   237,     0,
    1451        2,   239,     0,   295,     0,   257,     2,   258,   278,     0,
    1452        0,     2,   294,   547,   294,   488,   490,   489,     0,     0,
    1453      753,     0,   294,     0,   294,   492,   294,   562,   560,   561,
    1454      559,     0,   554,   557,     0,     0,   294,    55,   294,    69,
    1455       50,   294,    61,   294,   294,    53,    54,     2,   127,     0,
    1456        0,   449,     0,   448,   730,   121,   294,    17,     0,    29,
    1457       30,    35,     2,     0,    35,   111,   112,   113,   114,   115,
    1458      116,   117,   118,   119,   120,   110,     0,    51,    52,     0,
     1402     291,   291,   312,   310,   313,   311,   314,   315,   297,   299,
     1403     298,     0,   300,   326,   318,   323,   321,   322,   320,   319,
     1404     324,   325,   330,   327,   328,   329,   545,   545,   545,     0,
     1405       0,     0,   291,   217,   301,   316,   317,     7,   357,     0,
     1406       8,    14,    15,     0,     2,    60,    61,   563,     9,   291,
     1407     523,   521,   244,     3,   452,     3,   257,     0,     3,     3,
     1408       3,   245,     3,     0,     0,     0,   292,   293,   295,   291,
     1409     304,   307,   309,   338,   283,   331,   336,   284,   346,   285,
     1410     353,   350,   360,     0,     0,   361,   286,   471,   475,     3,
     1411       3,     0,     2,   517,   522,   527,   296,     0,     0,   545,
     1412     575,   545,     2,   586,   587,   588,   291,     0,   729,   730,
     1413       0,    12,     0,    13,   291,   267,   268,     0,   292,   287,
     1414     288,   289,   290,   524,   302,   390,   546,   547,   368,   369,
     1415      12,   443,   444,    11,   439,   442,     0,   501,   496,   487,
     1416     443,   444,     0,     0,   526,   218,     0,   291,     0,     0,
     1417       0,     0,     0,     0,     0,     0,   291,   291,     2,     0,
     1418     731,   292,   580,   592,   735,   728,   726,   733,     0,     0,
     1419       0,   251,     2,     0,   530,   437,   438,   436,     0,     0,
     1420       0,     0,   545,     0,   632,   633,     0,     0,   543,   539,
     1421     545,   560,   545,   545,   541,     2,   540,   545,   599,   545,
     1422     545,   602,     0,     0,     0,   291,   291,   310,   358,     2,
     1423     291,   258,   294,   305,   339,   351,   476,     0,     2,     0,
     1424     452,   259,   292,   332,   347,   354,   472,     0,     2,     0,
     1425     308,   333,   340,   341,     0,   348,   352,   355,   359,   444,
     1426     291,   370,   363,   367,     0,   392,   473,   477,     0,     0,
     1427       0,     1,   291,     2,   528,   574,   576,   291,     2,   739,
     1428     292,   742,   543,   543,     0,   292,     0,     0,   270,   545,
     1429     541,     2,   291,     0,     0,   291,   548,     2,   499,     2,
     1430     552,     0,     0,     0,     0,     0,     0,    18,    57,     4,
     1431       5,     6,    16,     0,     0,   291,     2,    62,    63,    64,
     1432      65,    45,    19,    46,    22,    44,    66,   291,     0,    69,
     1433      73,    76,    79,    84,    87,    89,    91,    93,    95,    97,
     1434     102,   493,   749,   450,   492,     0,   448,   449,     0,   564,
     1435     579,   582,   585,   591,   594,   597,   357,     0,     2,   737,
     1436       0,   291,   740,     2,    60,   291,     3,   424,     0,   432,
     1437     292,   291,   304,   331,   284,   346,   353,     3,     3,   406,
     1438     410,   420,   425,   471,   291,   426,   704,   705,   291,   427,
     1439     429,   291,     2,   581,   593,   727,     2,     2,   246,     2,
     1440     457,     0,   455,   454,   453,   138,     2,     2,   248,     2,
     1441       2,   247,     2,   278,     2,   279,     0,   277,     0,     0,
     1442       0,     0,     0,     0,     0,     0,     0,   565,   604,     0,
     1443     452,     2,   559,   568,   658,   561,   562,   531,   291,     2,
     1444     598,   607,   600,   601,     0,   273,   291,   291,   337,   292,
     1445       0,   292,     0,   291,   732,   736,   734,   532,   291,   543,
     1446     252,   260,   306,     0,     2,   533,   291,   497,   334,   335,
     1447     280,   349,   356,     0,   291,     0,   747,   397,     0,   474,
     1448     498,   249,   250,   518,   291,   434,     0,   291,   234,     0,
     1449       2,   236,     0,   292,     0,   254,     2,   255,   275,     0,
     1450       0,     2,   291,   543,   291,   484,   486,   485,     0,     0,
     1451     749,     0,   291,     0,   291,   488,   291,   558,   556,   557,
     1452     555,     0,   550,   553,     0,     0,   291,    52,   291,    66,
     1453      47,   291,    54,   291,   291,    50,    51,     2,   124,     0,
     1454       0,   446,     0,   445,   726,   118,   291,    17,     0,    29,
     1455      30,    35,     2,     0,    35,   108,   109,   110,   111,   112,
     1456     113,   114,   115,   116,   117,   107,     0,    48,    49,     0,
    14591457       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1460        0,     0,     0,     0,     0,     0,     0,     0,     0,   107,
    1461        2,   648,   454,   645,   549,   549,   653,   482,   294,     2,
    1462      587,   588,     0,   599,   600,     0,     2,   742,   745,   121,
    1463      294,     0,     2,   710,   295,   714,   705,   706,   712,     0,
    1464        2,     2,   670,   549,   753,   619,   549,   549,   753,   549,
    1465      633,   549,   549,   684,   436,   667,   549,   549,   675,   682,
    1466      294,   431,   295,     0,     0,   294,   720,   295,   725,   753,
    1467      717,   294,   722,   753,   294,   294,   294,     0,   121,     0,
    1468       18,     5,     2,     0,    19,     0,   461,   751,     0,     0,
    1469      467,   241,     0,   294,     0,     0,     0,   547,   571,   575,
    1470      577,   607,   610,   614,   617,   570,   609,     0,   284,   660,
    1471        0,   294,   277,     0,     0,     0,     0,   275,     2,     0,
    1472      259,   538,   294,     0,     0,   294,     2,   365,   385,   374,
    1473        0,     0,   379,   373,   752,     0,     0,   398,     0,   295,
    1474        3,   416,     3,   420,   419,   593,     0,   533,   294,    63,
    1475        3,   294,   435,   295,     3,   429,   430,     2,     0,     0,
    1476        0,   487,   306,   294,   483,   485,     3,     2,     2,     0,
    1477      504,     3,     0,   556,   129,     0,     0,   222,     0,     0,
    1478        0,     2,     0,     0,    36,     0,     0,   121,   294,    20,
    1479        0,    21,     0,   694,   699,   450,   691,   549,   549,     0,
    1480      108,     3,     2,    27,     2,     0,    33,     0,     2,    25,
    1481        0,   106,    73,    74,    75,    77,    78,    80,    81,    85,
    1482       86,    83,    84,    88,    89,    91,    93,    95,    97,    99,
    1483        0,     0,   754,   294,     0,     0,     0,   649,   650,   646,
    1484      647,   499,   498,   294,     0,   294,   716,   294,   721,   295,
    1485      294,   664,   294,   294,   707,   663,     2,   294,     0,     0,
    1486        0,     0,     0,     0,     0,     0,   685,     0,   671,   622,
    1487      638,   672,     2,   618,   625,   433,   620,   621,   434,     2,
    1488      632,   641,   634,   635,   668,   669,   683,   711,   715,   713,
    1489      753,   268,     2,   747,     2,   424,   719,   724,   425,     0,
    1490      403,     3,     3,     3,     3,   455,     3,     0,     2,   470,
    1491      466,   752,     0,   462,   469,     2,   465,   468,     0,   294,
    1492      242,   264,     3,   272,   274,     0,   455,     2,   573,   574,
    1493        2,   612,   613,     0,   661,   539,     3,   346,   345,   348,
    1494      347,   294,   540,     0,   541,   373,     0,     0,   294,   294,
    1495        0,     0,   694,   383,   386,   390,   549,   390,   389,   382,
    1496      375,   549,   377,   380,   294,   400,   394,   104,   401,   751,
    1497        0,     0,   438,   240,     0,     0,     3,     2,   670,   431,
    1498        0,   529,     0,   753,   491,     0,   294,   294,   294,     0,
    1499      553,   555,   130,     0,     0,   215,     0,     0,     0,   223,
    1500      224,    56,     0,    62,   294,     0,    60,    59,     0,     2,
    1501      128,     0,     0,     0,   695,   696,   692,   693,   460,    70,
    1502       71,   109,   125,     3,   108,     0,     0,     0,    24,    35,
    1503        3,     0,    32,   102,     0,     3,   652,   656,   659,   651,
    1504        3,   594,     3,   718,   723,     2,    63,   294,     3,     3,
    1505      295,     0,     3,   624,   628,   631,   640,   674,   678,   681,
    1506      294,     3,   623,   639,   673,   294,   294,   426,   294,   294,
    1507      748,     0,     0,     0,     0,   256,     0,   104,     0,     3,
    1508        3,     0,   463,     0,   459,     0,     0,   245,   294,     0,
    1509        0,   129,     0,     0,     0,     0,     0,   129,     0,     0,
    1510      108,   108,    18,     2,     0,     0,     3,   131,   132,     2,
    1511      143,   133,   134,   135,   136,   137,   138,   145,   147,     0,
    1512        0,     0,   285,   294,   294,   549,     0,   542,   294,   376,
    1513      378,     0,   392,   695,   387,   391,   388,   381,   385,   368,
    1514      399,     0,   581,     2,   666,   665,     0,   671,     2,   484,
    1515      486,   506,     3,   514,   515,     0,     2,   510,     3,     3,
    1516        0,     0,   558,   222,     0,     0,     0,   222,     0,     0,
    1517        3,    37,   121,   698,   702,   704,   697,   751,   108,     0,
    1518        3,   663,    42,     3,    40,     3,    34,     0,     3,   101,
    1519      103,     0,     2,   654,   655,     0,     0,   294,     0,     0,
    1520        0,     3,   640,     0,     2,   626,   627,     2,   642,     2,
    1521      676,   677,     0,     0,    63,     0,     3,     3,     3,     3,
    1522      411,   410,   414,     2,     2,   750,   749,   122,     0,     0,
    1523        0,     0,     3,   464,     3,     0,   243,   146,     3,   295,
    1524      294,     0,     0,     0,     0,     2,     0,   191,     0,   189,
    1525        0,     0,     0,     0,     0,     0,     0,   549,   121,     0,
    1526      151,   148,   294,     0,     0,   267,   279,     3,     3,   548,
    1527      615,   369,   384,   397,   294,   266,   294,     0,   517,   494,
    1528      294,     0,     0,   493,   508,     0,     0,     0,   216,     0,
    1529      225,    57,   108,     0,     2,   700,   701,     0,   126,   123,
    1530        0,     0,     0,     0,     0,     0,    23,     0,   657,   294,
    1531      582,   265,   726,   727,   728,     0,   679,   294,   294,   294,
    1532        3,     3,     0,   687,     0,     0,     0,     0,   294,   294,
    1533        3,   546,   471,   472,     0,     0,   246,   295,     0,     0,
    1534        0,     0,   294,   192,   190,   187,     0,   193,     0,     0,
    1535        0,     0,   197,   200,   198,   194,     0,   195,   129,    35,
    1536      144,   142,   244,     0,     0,   418,   422,   421,     0,   511,
    1537        2,   512,     2,   513,   507,   294,   228,     0,   226,     0,
    1538      228,     3,   663,   294,    31,   124,     2,    45,     2,    43,
    1539       41,    28,   122,    26,     3,   729,     3,     3,     3,     0,
    1540        0,   686,   688,   629,   643,   269,     2,   408,     3,   407,
    1541        0,   474,   471,   129,     0,     0,   129,     3,     0,   129,
    1542      188,     0,     2,     2,   209,   199,     0,     0,     0,   140,
    1543        0,   576,   616,     2,     0,     0,     2,   229,     0,     0,
    1544      217,     0,     0,     0,     3,     0,     0,     0,     0,     0,
    1545        0,   689,   690,   294,     0,   473,   152,     0,     0,     2,
    1546      165,   129,   154,     0,   182,     0,   129,     0,     2,   156,
    1547        0,     2,     0,     2,     2,     2,   196,    32,   294,   516,
    1548      518,   509,     0,     0,     0,     0,   124,    38,     0,     3,
    1549        3,   658,   630,   644,   680,   412,   129,   158,   161,     0,
    1550      160,   164,     3,   167,   166,     0,   129,   184,   129,     3,
    1551        0,   294,     0,   294,     0,     2,     0,     2,   139,     2,
    1552      230,   231,     0,   227,   218,     0,   703,     0,     0,   153,
    1553        0,     0,   163,   233,   168,     2,   235,   183,     0,   186,
    1554      172,   201,     3,   210,   214,   203,     3,     0,   294,     0,
    1555      294,     0,     0,     0,    39,    46,    44,   159,   162,   129,
    1556        0,   169,   294,   129,   129,     0,   173,     0,     0,   694,
    1557      211,   212,   213,     0,   202,     3,   204,     3,   294,   219,
    1558      232,   149,   170,   155,   129,   236,   185,   180,   178,   174,
    1559      157,   129,     0,   695,     0,     0,     0,     0,   150,   171,
    1560      181,   175,   179,   178,   176,     3,     3,     0,     0,   495,
    1561      177,   205,   207,     3,     3,   206,   208
     1458       0,     0,     0,     0,     0,     0,     0,     0,     0,   104,
     1459       2,   644,   451,   641,   545,   545,   649,   478,   291,     2,
     1460     583,   584,     0,   595,   596,     0,     2,   738,   741,   118,
     1461     291,     0,     2,   706,   292,   710,   701,   702,   708,     0,
     1462       2,     2,   666,   545,   749,   615,   545,   545,   749,   545,
     1463     629,   545,   545,   680,   433,   663,   545,   545,   671,   678,
     1464     291,   428,   292,     0,     0,   291,   716,   292,   721,   749,
     1465     713,   291,   718,   749,   291,   291,   291,     0,   118,     0,
     1466      18,     2,     0,    19,     0,   458,   747,     0,     0,   464,
     1467     238,     0,   291,     0,     0,     0,   543,   567,   571,   573,
     1468     603,   606,   610,   613,   566,   605,     0,   281,   656,     0,
     1469     291,   274,     0,     0,     0,     0,   272,     2,     0,   256,
     1470     534,   291,     0,     0,   291,     2,   362,   382,   371,     0,
     1471       0,   376,   370,   748,     0,     0,   395,     0,   292,     3,
     1472     413,     3,   417,   416,   589,     0,   529,   291,    60,     3,
     1473     291,   432,   292,     3,   426,   427,     2,     0,     0,     0,
     1474     483,   303,   291,   479,   481,     3,     2,     2,     0,   500,
     1475       3,     0,   552,   126,     0,     0,   219,     0,     0,     0,
     1476       0,    36,     0,     0,   118,   291,    20,     0,    21,     0,
     1477     690,   695,   447,   687,   545,   545,     0,   105,     3,     2,
     1478      27,     0,    33,     0,     2,    25,     0,   103,    70,    71,
     1479      72,    74,    75,    77,    78,    82,    83,    80,    81,    85,
     1480      86,    88,    90,    92,    94,    96,     0,     0,   750,   291,
     1481       0,     0,     0,   645,   646,   642,   643,   495,   494,   291,
     1482       0,   291,   712,   291,   717,   292,   291,   660,   291,   291,
     1483     703,   659,     2,   291,     0,     0,     0,     0,     0,     0,
     1484       0,     0,   681,     0,   667,   618,   634,   668,     2,   614,
     1485     621,   430,   616,   617,   431,     2,   628,   637,   630,   631,
     1486     664,   665,   679,   707,   711,   709,   749,   265,     2,   743,
     1487       2,   421,   715,   720,   422,     0,   400,     3,     3,     3,
     1488       3,   452,     3,     0,     2,   466,   463,   748,     0,   459,
     1489       2,   462,   465,     0,   291,   239,   261,     3,   269,   271,
     1490       0,   452,     2,   569,   570,     2,   608,   609,     0,   657,
     1491     535,     3,   343,   342,   345,   344,   291,   536,     0,   537,
     1492     370,     0,     0,   291,   291,     0,     0,   690,   380,   383,
     1493     387,   545,   387,   386,   379,   372,   545,   374,   377,   291,
     1494     397,   391,   101,   398,   747,     0,     0,   435,   237,     0,
     1495       0,     3,     2,   666,   428,     0,   525,     0,   749,   487,
     1496       0,   291,   291,   291,     0,   549,   551,   127,     0,     0,
     1497     212,     0,     0,     0,   220,   221,    53,     0,    55,    58,
     1498      59,     0,     2,   125,     0,     0,     0,   691,   692,   688,
     1499     689,   457,    67,    68,   106,   122,     3,   105,     0,     0,
     1500      24,    35,     3,     0,    32,    99,     0,     3,   648,   652,
     1501     655,   647,     3,   590,     3,   714,   719,     2,    60,   291,
     1502       3,     3,   292,     0,     3,   620,   624,   627,   636,   670,
     1503     674,   677,   291,     3,   619,   635,   669,   291,   291,   423,
     1504     291,   291,   744,     0,     0,     0,     0,   253,     0,   101,
     1505       0,     3,     3,     0,   460,     0,   456,     0,     0,   242,
     1506     291,     0,     0,   126,     0,     0,     0,     0,     0,   126,
     1507       0,     0,   105,   105,    18,     2,     0,     0,     3,   128,
     1508     129,     2,   140,   130,   131,   132,   133,   134,   135,   142,
     1509     144,     0,     0,     0,   282,   291,   291,   545,     0,   538,
     1510     291,   373,   375,     0,   389,   691,   384,   388,   385,   378,
     1511     382,   365,   396,     0,   577,     2,   662,   661,     0,   667,
     1512       2,   480,   482,   502,     3,   510,   511,     0,     2,   506,
     1513       3,     3,     0,     0,   554,   219,     0,     0,     0,   219,
     1514       0,     0,   118,   694,   698,   700,   693,   747,   105,     0,
     1515       3,   659,    39,     3,    37,    34,     0,     3,    98,   100,
     1516       0,     2,   650,   651,     0,     0,   291,     0,     0,     0,
     1517       3,   636,     0,     2,   622,   623,     2,   638,     2,   672,
     1518     673,     0,     0,    60,     0,     3,     3,     3,     3,   408,
     1519     407,   411,     2,     2,   746,   745,   119,     0,     0,     0,
     1520       0,     3,   461,     3,     0,   240,   143,     3,   292,   291,
     1521       0,     0,     0,     0,     2,     0,   188,     0,   186,     0,
     1522       0,     0,     0,     0,     0,     0,   545,   118,     0,   148,
     1523     145,   291,     0,     0,   264,   276,     3,     3,   544,   611,
     1524     366,   381,   394,   291,   263,   291,     0,   513,   490,   291,
     1525       0,     0,   489,   504,     0,     0,     0,   213,     0,   222,
     1526      56,     2,   696,   697,     0,   123,   120,     0,     0,     0,
     1527       0,     0,    23,     0,   653,   291,   578,   262,   722,   723,
     1528     724,     0,   675,   291,   291,   291,     3,     3,     0,   683,
     1529       0,     0,     0,     0,   291,   291,     3,   542,   119,   468,
     1530       0,     0,   243,   292,     0,     0,     0,     0,   291,   189,
     1531     187,   184,     0,   190,     0,     0,     0,     0,   194,   197,
     1532     195,   191,     0,   192,   126,    35,   141,   139,   241,     0,
     1533       0,   415,   419,   418,     0,   507,     2,   508,     2,   509,
     1534     503,   291,   225,     0,   223,     0,   225,   291,    31,   121,
     1535       2,    42,     2,    40,    38,    28,    26,     3,   725,     3,
     1536       3,     3,     0,     0,   682,   684,   625,   639,   266,     2,
     1537     405,     3,   404,     0,   470,   467,   126,     0,     0,   126,
     1538       3,     0,   126,   185,     0,     2,     2,   206,   196,     0,
     1539       0,     0,   137,     0,   572,   612,     2,     0,     0,     2,
     1540     226,     0,     0,   214,     0,     3,     0,     0,     0,     0,
     1541       0,     0,   685,   686,   291,     0,   469,   149,     0,     0,
     1542       2,   162,   126,   151,     0,   179,     0,   126,     0,     2,
     1543     153,     0,     2,     0,     2,     2,     2,   193,    32,   291,
     1544     512,   514,   505,     0,     0,     0,     0,     0,     3,     3,
     1545     654,   626,   640,   676,   409,   126,   155,   158,     0,   157,
     1546     161,     3,   164,   163,     0,   126,   181,   126,     3,     0,
     1547     291,     0,   291,     0,     2,     0,     2,   136,     2,   227,
     1548     228,     0,   224,   215,   699,     0,     0,   150,     0,     0,
     1549     160,   230,   165,     2,   232,   180,     0,   183,   169,   198,
     1550       3,   207,   211,   200,     3,     0,   291,     0,   291,     0,
     1551       0,     0,    43,    41,   156,   159,   126,     0,   166,   291,
     1552     126,   126,     0,   170,     0,     0,   690,   208,   209,   210,
     1553       0,   199,     3,   201,     3,   291,   216,   229,   146,   167,
     1554     152,   126,   233,   182,   177,   175,   171,   154,   126,     0,
     1555     691,     0,     0,     0,     0,   147,   168,   178,   172,   176,
     1556     175,   173,     3,     3,     0,     0,   491,   174,   202,   204,
     1557       3,     3,   203,   205
    15621558};
    15631559
     
    15651561static const yytype_int16 yydefgoto[] =
    15661562{
    1567       -1,   817,   468,   301,    47,   134,   135,   302,   303,   304,
    1568      305,   765,   766,  1143,  1144,   306,   381,   308,   309,   310,
     1563      -1,   813,   468,   301,    47,   134,   135,   302,   303,   304,
     1564     305,   761,   762,  1133,  1134,   306,   381,   308,   309,   310,
    15691565     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
    1570     1038,   518,   982,   546,   322,   983,   952,  1065,  1541,  1067,
    1571     1068,  1069,  1070,  1542,  1071,  1072,  1458,  1459,  1420,  1421,
    1572     1422,  1520,  1521,  1525,  1526,  1561,  1562,  1073,  1378,  1074,
    1573     1075,  1312,  1313,  1314,  1502,  1076,   146,   958,   959,   960,
    1574     1398,  1482,  1494,  1495,   469,   470,   879,   880,  1046,    51,
     1566    1030,   518,   975,   546,   322,   976,   947,  1057,  1518,  1059,
     1567    1060,  1061,  1062,  1519,  1063,  1064,  1437,  1438,  1401,  1402,
     1568    1403,  1497,  1498,  1502,  1503,  1538,  1539,  1065,  1361,  1066,
     1569    1067,  1298,  1299,  1300,  1480,  1068,   146,   953,   954,   955,
     1570    1381,  1461,  1472,  1473,   469,   470,   874,   875,  1038,    51,
    15751571      52,    53,    54,    55,   347,   159,    58,    59,    60,    61,
    15761572      62,   349,    64,    65,   265,    67,    68,   275,   351,   352,
    15771573      71,    72,    73,    74,   119,    76,   205,   354,   120,    79,
    1578      121,    81,    82,   455,    83,   454,   689,   690,   691,   913,
    1579     1094,   914,    84,    85,   458,   456,   697,   859,   860,   357,
    1580      358,   700,   701,   702,   359,   360,   361,   362,   466,   340,
    1581      136,   137,   522,   324,   171,   646,   647,   648,   649,   650,
    1582       86,   122,    88,   489,   490,   944,   491,   278,   495,   325,
    1583       89,   138,   139,    90,  1335,  1116,  1117,  1118,  1119,    91,
    1584       92,   718,    93,   274,    94,    95,   188,  1040,   680,   412,
     1574     121,    81,    82,   455,    83,   454,   688,   689,   690,   908,
     1575    1086,   909,    84,    85,   458,   456,   696,   855,   856,   857,
     1576     858,   699,   700,   701,   359,   360,   361,   362,   466,   340,
     1577     136,   137,   522,   324,   171,   645,   646,   647,   648,   649,
     1578      86,   122,    88,   489,   490,   939,   491,   278,   495,   325,
     1579      89,   138,   139,    90,  1321,  1108,  1109,  1110,  1111,    91,
     1580      92,   717,    93,   274,    94,    95,   188,  1032,   679,   412,
    15851581     126,    96,   501,   502,   503,   189,   269,   191,   192,   193,
    15861582     270,    99,   100,   101,   102,   103,   104,   105,   196,   197,
    1587      198,   199,   200,   829,   605,   606,   607,   608,   201,   610,
    1588      611,   612,   572,   573,   574,   575,   754,   106,   614,   615,
    1589      616,   617,   618,   619,   975,   756,   757,   758,   595,   365,
    1590      366,   367,   368,   326,   165,   108,   109,   110,   370,   695,
     1583     198,   199,   200,   825,   605,   606,   607,   608,   201,   610,
     1584     611,   612,   572,   573,   574,   575,   751,   106,   614,   615,
     1585     616,   617,   618,   619,   968,   753,   754,   755,   595,   365,
     1586     366,   367,   368,   326,   165,   108,   109,   110,   370,   694,
    15911587     569
    15921588};
     
    15941590/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    15951591   STATE-NUM.  */
    1596 #define YYPACT_NINF -1315
     1592#define YYPACT_NINF -1310
    15971593static const yytype_int16 yypact[] =
    15981594{
    1599     5006,  8237, -1315,    89, -1315, -1315, -1315, -1315, -1315, -1315,
    1600    -1315,   194, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,
    1601    -1315, -1315, -1315, -1315, -1315, -1315,   314,   314,   314,   792,
    1602      787,   234,  7780,   219, -1315, -1315, -1315, -1315, -1315,   257,
    1603    -1315, -1315, -1315,   912,   264, -1315, -1315, -1315, -1315,  6920,
    1604    -1315, -1315, -1315, -1315,   120,   272, -1315,   823, -1315, -1315,
    1605    -1315, -1315,   302,  1619,   420,   112,  3706, -1315, -1315,  9405,
    1606     1262, -1315, -1315, -1315,   675,   440,  7333,  1133,  1444,   675,
    1607     1669, -1315, -1315,   482,   771, -1315,   675,  1807, -1315,   386,
    1608    -1315,   507,   517, -1315, -1315, -1315, -1315,   426,   272,   314,
    1609    -1315,   314, -1315, -1315, -1315, -1315,  8871,   823, -1315, -1315,
    1610      823, -1315,   415, -1315,  8985, -1315, -1315,  1777,  9099, -1315,
    1611      428,   428,   428, -1315, -1315, -1315,   314, -1315, -1315, -1315,
    1612      454,   468,   490, -1315, -1315, -1315,   500, -1315, -1315, -1315,
    1613    -1315, -1315,   504,   509, -1315, -1315,    76,  8833,  2235,   669,
    1614      439,   450,   519,   522,   537,   567,  8121,  7182,   529,   581,
    1615    -1315,  9443, -1315, -1315, -1315, -1315,   595, -1315,   216,  3771,
    1616     3771, -1315,   603,   313, -1315, -1315, -1315, -1315,   605,   316,
    1617      320,   345,   314,   589, -1315, -1315,  1619,  2809,   664, -1315,
    1618       49, -1315,   314,   314,   272, -1315, -1315,    87, -1315,   314,
    1619      314, -1315,  3249,   632,   636,   428,  7093, -1315, -1315,   646,
    1620     6920, -1315, -1315,   675, -1315, -1315, -1315,   272, -1315,   823,
    1621      120, -1315,  7972, -1315,   428,   428,   428,   272, -1315,   792,
    1622    -1315,  5155, -1315, -1315,   635,   428, -1315,   428, -1315,   257,
    1623     8833, -1315,   657, -1315,   787,   660,   428, -1315,   792,   679,
    1624      704, -1315,  7780,   574, -1315, -1315, -1315,  9296, -1315, -1315,
    1625     6389, -1315,   664,    74,  5169,  9099,  1777,  3249, -1315,    97,
    1626    -1315, -1315,  8985,   823,   708,  9849, -1315, -1315,   539, -1315,
    1627    10667,   680,   762, 10451,   751, 10470, 10528, -1315,   764, -1315,
    1628    -1315, -1315, -1315, 10547, 10547,  8605,   778, -1315, -1315, -1315,
    1629    -1315, -1315, -1315,   801, -1315,   969,  2181,  8947, 10470, -1315,
    1630      339,   731,   846,   265,   890,   795,   797,   810,   836,    33,
    1631    -1315, -1315,   812,   497, -1315,    59, -1315, -1315,  2235, -1315,
    1632    -1315,   588,   835, -1315,   622,   835,   847,   257, -1315, -1315,
    1633      863,  8871, -1315,   854,   878,  9061, -1315, -1315,   765,  1714,
    1634     8320,  7093,   675, -1315,   675,   428,   428, -1315, -1315, -1315,
    1635    -1315, -1315, -1315,   428,  8871,   823, -1315, -1315,  9213,   843,
    1636    -1315,  8757, -1315, -1315, -1315, -1315, -1315, -1315, -1315,   886,
    1637     3575, 10470, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,
    1638    -1315, -1315, -1315, -1315, -1315, -1315,  1777, -1315,   793,   865,
    1639      884,   894,   869,   902,   905,   909,  2809, -1315, -1315,   918,
    1640      120,   935, -1315, -1315,   927, -1315, -1315, -1315,  9296, -1315,
    1641    -1315, -1315, -1315, -1315,  3249, -1315,  8833,  8833, -1315,   428,
    1642     1777,  7213,   823,  8393, -1315, -1315, -1315, -1315,  9296,    74,
    1643    -1315, -1315,   675,   272, -1315, -1315,  9296, -1315,  6557, -1315,
    1644    -1315,   428,   428,   295,  9519,   937,   942,   934,   955,   428,
    1645    -1315, -1315, -1315, -1315,  9927, -1315,   540,  6680, -1315,   272,
    1646      963, -1315,  1777, 10749,  5888, -1315, -1315, -1315, -1315,   899,
    1647     3249, -1315,  8466,   664,  7663, -1315, -1315, -1315,  1232,   551,
    1648      812,   787,  9849,   591,  8985, -1315,  9849, -1315, -1315, -1315,
    1649    -1315,   576, -1315,   980,   762,   283,  8605, -1315,  9699, -1315,
    1650    -1315,  8605, -1315,  8719,  8605, -1315, -1315,   987, -1315,   599,
    1651      996,   706,   999, -1315, -1315,  6048,  6769, -1315,   137, -1315,
    1652    -1315,  6053, -1315,   286,  6053, -1315, -1315, -1315, -1315, -1315,
    1653    -1315, -1315, -1315, -1315, -1315, -1315,  5169, -1315, -1315, 10470,
    1654    10470, 10470, 10470, 10470, 10470, 10470, 10470, 10470, 10470, 10470,
    1655    10470, 10470, 10470, 10470, 10470, 10470, 10470,  4672,  5169, -1315,
    1656      497,  1307, -1315, -1315,   314,   314, -1315, -1315,  8833, -1315,
    1657    -1315,   927,   574, -1315,   927, 10393, -1315, -1315, -1315,  9329,
    1658     6769,  1002,  1007, -1315,  9099, -1315, -1315,   595, -1315,  1019,
    1659      941,  1024,  1647,   103,   812, -1315,   314,   314,   812,   133,
    1660    -1315,   314,   314,   927, -1315, -1315,   314,   314, -1315,   835,
    1661     9781,   823, 10894,   412,   469,  9781, -1315,  6389, -1315,   812,
    1662    -1315,  8871, -1315,   191,  5383,  5383,  5383,   823, -1315,  4873,
    1663      979,   513,   886,   151,  1028,  1030, -1315,  1036,  3771,   531,
    1664    -1315,  1124,   823,  5383,   574,  1777,   574,   664,   782,   835,
    1665    -1315, -1315,   802,   835, -1315, -1315, -1315,   762, -1315,   835,
    1666      272,  9927, -1315,   606,  1050,   616,  1051, -1315,  1052,   272,
    1667    -1315, -1315,  9296,   272,  1054,  9699,  1053, -1315,  1508, -1315,
    1668      360,   367,   787, -1315,   787,  1056, 10470, -1315,   787, 10894,
    1669    -1315, -1315,  1059, -1315, -1315, -1315,   574, -1315, 10822,   878,
    1670    -1315,  5383,   769,  8320, -1315, -1315,   595,  1057,  1058,  1232,
    1671     3288, -1315, -1315,  9849, -1315, -1315,  1065, -1315, -1315,  1066,
    1672    -1315,  1065,  1064, 10667,  5169,   121,  1034,   100,  1074,  1071,
    1673     1075,   778,  1072,  1078, -1315,  1080,  1082,  9557,  6889, -1315,
    1674     5169, -1315,   706,  2222, -1315, -1315, -1315,   314,   314,  5021,
    1675     5169,  1079, -1315, -1315,   886,   619, -1315,  5169, -1315, -1315,
    1676      971, -1315, -1315, -1315, -1315,   339,   339,   731,   731,   846,
    1677      846,   846,   846,   265,   265,   890,   795,   797,   810,   836,
    1678    10470,   975, -1315,  9927,  1084,  1086,  1087,  1307, -1315, -1315,
    1679    -1315, -1315, -1315,  9927,   639,  5383, -1315,  8871, -1315,  7302,
    1680     9175, -1315,  8757,  7182, -1315, -1315,   941,  9927,   923,  1093,
    1681     1097,  1098,  1101,  1104,  1109,  1110, -1315,  3448,  1647, -1315,
    1682    -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,
    1683    -1315, -1315, -1315, -1315, -1315, -1315,   927, -1315, -1315, -1315,
    1684      812, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,  1111,
    1685    -1315,  1115,  1116, -1315, -1315,   120,  1079,  4873, -1315, -1315,
    1686    -1315,  3575,  1113, -1315, -1315, -1315, -1315, -1315,   787,  6479,
    1687     1200, -1315, -1315, -1315, -1315,  1100,   120, -1315, -1315,   927,
    1688    -1315, -1315,   927,   146,   927, -1315, -1315, -1315, -1315, -1315,
    1689    -1315,  9481, -1315,   272, -1315, -1315,   380,   387,  9213,  7422,
    1690     1947, 10470,  2081, -1315, -1315,  1121,    77,  1121, -1315,   787,
    1691    -1315,   314, -1315, -1315,  9630,   934, -1315, -1315, -1315,   942,
    1692     1122,  1117, -1315, -1315,  1129,  1130, -1315,   769,  2444, -1315,
    1693      476, -1315,  3288,   812, -1315,  1135,  9849,  9811,  8833,  1136,
    1694    -1315, -1315,  1127,  1137,  1131, -1315, 10470,   134,   293,  1138,
    1695    -1315,  1142,   574,  1142,  6769,  5169, -1315, -1315,  1142,  1139,
    1696    -1315,  1150,  1152,  1153,  2222, -1315, -1315, -1315,  3575, -1315,
    1697    -1315, -1315, -1315,  1156,  5169,  1140,   574,  4873, -1315,  6053,
    1698    -1315,   574, -1315, -1315,  5169, -1315,   842,   835, -1315, -1315,
    1699    -1315, -1315, -1315, -1315, -1315,   886,   878,  9061, -1315, -1315,
    1700     7542,  1163, -1315,   882,   835, -1315,   892,   926,   835, -1315,
    1701      428,  4553, -1315, -1315, -1315,  9927,  9927, -1315,  8393,  8393,
    1702    -1315,  1161,  1164,  1169,  1172, -1315,  1171,   527,    41,  1079,
    1703    -1315,   574, -1315,  3771, -1315,  5169,   423, -1315,  6649,  1175,
    1704     1177, 10335,  1178,  1181,     9,    73,    48,  5169,  1182,   272,
    1705     5169,  5169,  1132,  1180,   489,  1162, -1315, -1315, -1315,  1184,
    1706    -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,   787,
    1707     1183,  5169, -1315,  9927,  9927,   314,  1186, -1315,  9668, -1315,
    1708    -1315,   984, -1315,  2081, -1315, -1315, -1315, -1315,  1508, -1315,
    1709    -1315,  1188, -1315, -1315, -1315, -1315,  1191,  2444, -1315, -1315,
    1710     1185, -1315,  1065, -1315, -1315,  1777,  1194, -1315, -1315, -1315,
    1711      640,  1198, -1315,   100,  1201, 10470,  1195,   100,   100,  1213,
    1712     1214, -1315,  6048,   959,   835, -1315, -1315,  1036,  5169,  1217,
    1713     1156,   654,    46,  1216, -1315,  1214, -1315,  1222,  1216, -1315,
    1714    -1315,  1226, -1315, -1315,   927,  1229,  1230,  7062,  1231,  1235,
    1715     1237, -1315, -1315,  1242, -1315, -1315,   927, -1315, -1315, -1315,
    1716    -1315,   927,  5169,  5169,   878,  1244, -1315, -1315, -1315, -1315,
    1717    -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315, 10470, 10470,
    1718     1246,  1253,  1216, -1315, -1315,   787, -1315, -1315, -1315,  4813,
    1719     9811,  5169,  5169,  1321,  5169, -1315,  1239, -1315,  1247, -1315,
    1720     1248,  5169,  1250,  5169,   986,  1252,    81,   314,  9367,  1069,
    1721    -1315, -1315,  6479,  1261,   436, -1315, -1315, -1315, -1315, -1315,
    1722    -1315, -1315, -1315, -1315, 10153, -1315,  8466,  1268, -1315, -1315,
    1723     9811,   437,   451, -1315,  1270,  1271,   762,  1280, -1315,   352,
    1724    -1315, -1315,  5169,  1281, -1315, -1315,   927,  1277, -1315, -1315,
    1725     1284,   301,   375,   574,  1285,  1288, -1315,  1290, -1315,  9927,
    1726    -1315, -1315, -1315, -1315, -1315,  1291, -1315,  9927,  9927,  9927,
    1727    -1315, -1315,  1293, -1315,  1295,  1298,  1299,   590,  8088,  8204,
    1728    -1315, -1315,   304, -1315,  1302,  1303, -1315,  8539,   652,   671,
    1729     1308,   690,  6255, -1315, -1315, -1315,   471, -1315,   711,  1310,
    1730     1311,   272,  1363,  1043, -1315, -1315,  5169, -1315, 10335,  6053,
    1731    -1315, -1315, -1315,  1317,  1318, -1315, -1315, -1315,  1316, -1315,
    1732    -1315, -1315, -1315, -1315, -1315,  9811,   762,   155, -1315,  1300,
    1733      762,  1156,   297,  9927, -1315, -1315, -1315, -1315, -1315, -1315,
    1734    -1315, -1315,  1314, -1315, -1315, -1315, -1315, -1315, -1315,  1323,
    1735     1324, -1315, -1315, -1315, -1315, -1315, -1315, -1315,  1329, -1315,
    1736     1330, -1315, -1315, 10335,   135,  5169, 10335, -1315,  1333,  5169,
    1737    -1315,   281,  1344,  1348, -1315, -1315,  1340,  1343,  1331, -1315,
    1738      988, -1315, -1315, -1315,   823,  1777,  1338,   801,   995, 10470,
    1739    -1315,   713,  1349,  5169, -1315,   574,   574,  1350,  1355,  1356,
    1740     1358, -1315, -1315,  8393,  1359, -1315,  1430, 10470,  1360, -1315,
    1741    -1315, 10246, -1315,   722, -1315,  1347, 10335,  1352, -1315, -1315,
    1742     1366, -1315,  1370, -1315,  1385,  1386, -1315,  1354,  9811, -1315,
    1743    -1315, -1315,   762,   574,  1382,  1364,  1381, -1315,  1389,  1216,
    1744     1216, -1315, -1315, -1315, -1315, -1315, 10335,   197, -1315,  1000,
    1745    -1315, -1315,  7897, -1315, -1315,  1368,  5169, -1315,  5169,  7897,
    1746      272,  9699,   272,  9699,  1391, -1315,  1392, -1315, -1315,  1390,
    1747      801, -1315,   776, -1315, -1315,  5169, -1315,  1394,  1395, -1315,
    1748    10470, 10470, -1315, -1315,  1077,    85, -1315, -1315,  1372, -1315,
    1749     1077, -1315, -1315,  2494,   574, -1315, -1315,   272,  9699,   272,
    1750     9699,  1403,  1383,   574, -1315, -1315, -1315, -1315, -1315, 10246,
    1751     1401,  1077,  5739,  5169, 10157,  1402,  1077,  1408,  2494,  2404,
    1752    -1315, -1315, -1315,  1409, -1315, -1315, -1315, -1315,  8833, -1315,
    1753    -1315, -1315, 10024, -1315, 10246, -1315, -1315,  1388,  9931, -1315,
    1754    -1315, 10157,   272,  2404,   272,  1413,  1414,   857, -1315, 10024,
    1755    -1315, -1315, -1315,  9931, -1315, -1315, -1315,   272,   272, -1315,
    1756    -1315, -1315, -1315, -1315, -1315, -1315, -1315
     1595    7316,  8697, -1310,    16, -1310, -1310, -1310, -1310, -1310, -1310,
     1596   -1310,    22, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1597   -1310, -1310, -1310, -1310, -1310, -1310,   101,   101,   101,  1152,
     1598     941,    64,  7548,   141, -1310, -1310, -1310, -1310, -1310,    87,
     1599   -1310, -1310, -1310,   868,   134, -1310, -1310, -1310, -1310,  9158,
     1600   -1310, -1310, -1310, -1310,   149,   144, -1310,  1337, -1310, -1310,
     1601   -1310, -1310,   139,   935,   260,   102,  2892, -1310, -1310,  9196,
     1602     790, -1310, -1310, -1310,   904,   293,  5512,   547,   778,   904,
     1603    1166, -1310, -1310,   554,   624, -1310,   904,  1343, -1310,   187,
     1604   -1310,   308,   336, -1310, -1310, -1310, -1310,   251,   144,   101,
     1605   -1310,   101, -1310, -1310, -1310, -1310,  8923,  1337, -1310, -1310,
     1606    1337, -1310,   337, -1310,  9043, -1310, -1310,  1053,  9381, -1310,
     1607    1729,  1729,  1729, -1310, -1310, -1310,   101, -1310, -1310, -1310,
     1608     410,   413,   418, -1310, -1310, -1310,   433, -1310, -1310, -1310,
     1609   -1310, -1310,   468,   477, -1310, -1310,    37,  8666,  2607,   742,
     1610     369,   496,   509,   523,   530,   535,  8584,  6836,   536,   546,
     1611   -1310,  9234, -1310, -1310, -1310, -1310,   561, -1310,   245,  4633,
     1612    4633, -1310,   562,   361, -1310, -1310, -1310, -1310,   574,   383,
     1613     408,   429,   101,   577, -1310, -1310,   935,  3015,   664, -1310,
     1614      86, -1310,   101,   101,   144, -1310, -1310,    89, -1310,   101,
     1615     101, -1310,  3541,   634,   653,  1729,  6748, -1310, -1310,   623,
     1616    9158, -1310, -1310,   904, -1310, -1310, -1310,   144, -1310,  1337,
     1617     149, -1310,  7737, -1310,  1729,  1729,  1729,   144, -1310,  1152,
     1618   -1310,  5996, -1310, -1310,   642,  1729, -1310,  1729, -1310,    87,
     1619    8666, -1310,   672, -1310,   941,   697,  1729, -1310,  1152,   699,
     1620     702, -1310,  7548,   567, -1310, -1310, -1310,  9125, -1310, -1310,
     1621    4167, -1310,   664,    10,  5116,  9381,  1053,  3541, -1310,    94,
     1622   -1310, -1310,  9043,  1337,   715, 10741, -1310, -1310,    11, -1310,
     1623   10483,   740,   772, 10231,   759, 10288, 10307, -1310,   763, -1310,
     1624   -1310, -1310, -1310, 10364, 10364,  8440,   765, -1310, -1310, -1310,
     1625   -1310, -1310, -1310,   799, -1310,   616,  2256,  8779, 10288, -1310,
     1626     475,   860,   810,   276,   913,   766,   767,   793,   832,    41,
     1627   -1310, -1310,   807,   704, -1310,   331, -1310, -1310,  2607, -1310,
     1628   -1310,   242,   835, -1310,   421,   835,   841,    87, -1310, -1310,
     1629     846,  8923, -1310,   847,   857,  8892, -1310, -1310,  1352,  2069,
     1630    8155,  6748,   904, -1310,   904,  1729,  1729, -1310, -1310, -1310,
     1631   -1310, -1310, -1310,  1729,  8923,  1337, -1310, -1310,  9419,  1457,
     1632   -1310,  7886, -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,
     1633   10098, 10288, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1634   -1310, -1310, -1310, -1310, -1310, -1310,  1053, -1310,   928,   862,
     1635     891,   893,  1023,   916,   937,   951,  3015, -1310, -1310,   942,
     1636     149,   958, -1310, -1310,   970, -1310, -1310, -1310,  9125, -1310,
     1637   -1310, -1310, -1310, -1310,  3541, -1310,  8666,  8666, -1310,  1729,
     1638    1053,  6867,  1337,  8228, -1310, -1310, -1310, -1310,  9125,    10,
     1639   -1310, -1310,   904,   144, -1310, -1310,  9125, -1310,  6513, -1310,
     1640   -1310,  1729,  1729,   382,  5342,   969,   972,   960,  1031,  1729,
     1641   -1310, -1310, -1310, -1310,  9605, -1310,   450,  6629, -1310,   144,
     1642    1033, -1310,  1053, 10565, 10155, -1310, -1310, -1310, -1310,  1039,
     1643    3541, -1310,  8301,   664,  7432, -1310, -1310, -1310,   984,   626,
     1644     807,   941, 10741,   606,  9043, -1310, 10741, -1310, -1310, -1310,
     1645   -1310,   690, -1310,  1044,   772,   255,  8440, -1310,  9457, -1310,
     1646   -1310,  8440, -1310,  8553,  8440, -1310, -1310,  1042, -1310,   722,
     1647    1047,   818,  1048, -1310, -1310,  9310,  6479, -1310,   321, -1310,
     1648   -1310,  5116, -1310,   602,  5116, -1310, -1310, -1310, -1310, -1310,
     1649   -1310, -1310, -1310, -1310, -1310, -1310,  5116, -1310, -1310, 10288,
     1650   10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288,
     1651   10288, 10288, 10288, 10288, 10288, 10288, 10288,  2426,  5116, -1310,
     1652     704,   830, -1310, -1310,   101,   101, -1310, -1310,  8666, -1310,
     1653   -1310,   970,   567, -1310,   970, 10212, -1310, -1310, -1310,  4524,
     1654    6479,  1049,  1054, -1310,  9381, -1310, -1310,   561, -1310,  1056,
     1655     774,  1073,  2515,    95,   807, -1310,   101,   101,   807,    98,
     1656   -1310,   101,   101,   970, -1310, -1310,   101,   101, -1310,   835,
     1657    9490,  1337, 10710,   283,   326,  9490, -1310,  4167, -1310,   807,
     1658   -1310,  8923, -1310,    80,  7852,  7852,  7852,  1337, -1310,  4787,
     1659    1065,   875,   744,  1066,  1067, -1310,  1070,  4633,   333, -1310,
     1660    1134,  1337,  7852,   567,  1053,   567,   664,   494,   835, -1310,
     1661   -1310,   584,   835, -1310, -1310, -1310,   772, -1310,   835,   144,
     1662    9605, -1310,   737,  1083,   750,  1090, -1310,  1089,   144, -1310,
     1663   -1310,  9125,   144,  1088,  9457,  1092, -1310,  1677, -1310,   441,
     1664     448,   941, -1310,   941,  1091, 10288, -1310,   941, 10710, -1310,
     1665   -1310,  1098, -1310, -1310, -1310,   567, -1310, 10638,   857, -1310,
     1666    7852,   853,  8155, -1310, -1310,   561,  1095,  1097,   984,  3316,
     1667   -1310, -1310, 10741, -1310, -1310,  1099, -1310, -1310,  1105, -1310,
     1668    1099,  1111, 10483,  5116,    62,  1102,   167,  1113,  1121,  1129,
     1669    1130, -1310,  1131,  1132,  9348,  6598, -1310,  5116, -1310,   818,
     1670     978, -1310, -1310, -1310,   101,   101,  5540,  5116,  1135, -1310,
     1671   -1310,   757, -1310,  5116, -1310, -1310,   914, -1310, -1310, -1310,
     1672   -1310,   475,   475,   860,   860,   810,   810,   810,   810,   276,
     1673     276,   913,   766,   767,   793,   832, 10288,   282, -1310,  9605,
     1674    1136,  1137,  1140,   830, -1310, -1310, -1310, -1310, -1310,  9605,
     1675     779,  7852, -1310,  8923, -1310,  6955,  9005, -1310,  7886,  6836,
     1676   -1310, -1310,   774,  9605,  1063,  1142,  1143,  1145,  1146,  1147,
     1677    1148,  1154, -1310,  3759,  2515, -1310, -1310, -1310, -1310, -1310,
     1678   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1679   -1310, -1310,   970, -1310, -1310, -1310,   807, -1310, -1310, -1310,
     1680   -1310, -1310, -1310, -1310, -1310,  1156, -1310,  1159,  1160, -1310,
     1681   -1310,   149,  1135,  4787, -1310, -1310, -1310, 10098,  1157, -1310,
     1682   -1310, -1310, -1310,   941,  6225,  1247, -1310, -1310, -1310, -1310,
     1683    1150,   149, -1310, -1310,   970, -1310, -1310,   970,   137,   970,
     1684   -1310, -1310, -1310, -1310, -1310, -1310,  9272, -1310,   144, -1310,
     1685   -1310,   451,   452,  9419,  7074,  2178, 10288,  3429, -1310, -1310,
     1686    1149,    39,  1149, -1310,   941, -1310,   101, -1310, -1310,  8073,
     1687     960, -1310, -1310, -1310,   972,  1168,  1169, -1310, -1310,  1170,
     1688    1172, -1310,   853,  1305, -1310,   359, -1310,  3316,   807, -1310,
     1689    1177, 10741,  9528,  8666,  1180, -1310, -1310,  1175,  1182,  1164,
     1690   -1310, 10288,    56,   233,  1179, -1310,  1183,   567,  1183, -1310,
     1691   -1310,  1183,  1184, -1310,  1189,  1190,  1192,   978, -1310, -1310,
     1692   -1310, 10098, -1310, -1310, -1310, -1310,  1188,  5116,  1193,   567,
     1693   -1310,  5116, -1310,   567, -1310, -1310,  5116, -1310,   595,   835,
     1694   -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,   857,  8892,
     1695   -1310, -1310,  7193,  1196, -1310,   622,   835, -1310,   644,   649,
     1696     835, -1310,  1729,  4053, -1310, -1310, -1310,  9605,  9605, -1310,
     1697    8228,  8228, -1310,  1194,  1195,  1198,  1199, -1310,  1200,   531,
     1698      27,  1135, -1310,   567, -1310,  4633, -1310,  5116,   453, -1310,
     1699    6359,  1213,  1217, 10041,  1222,  1223,    43,    49,   106,  5116,
     1700    1228,   144,  5116,  5116,  1208,  1237,   142,  1218, -1310, -1310,
     1701   -1310,  1236, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1702   -1310,   941,  1249,  5116, -1310,  9605,  9605,   101,  1252, -1310,
     1703    8810, -1310, -1310,   987, -1310,  3429, -1310, -1310, -1310, -1310,
     1704    1677, -1310, -1310,  1253, -1310, -1310, -1310, -1310,  1254,  1305,
     1705   -1310, -1310,  1239, -1310,  1099, -1310, -1310,  1053,  1258, -1310,
     1706   -1310, -1310,   806,  1262, -1310,   167,  1267, 10288,  1248,   167,
     1707     167,  1273,  9310,   693,   835, -1310, -1310,  1070,  5116,  1274,
     1708    1188,   208,   157,  1269, -1310, -1310,  1278,  1269, -1310, -1310,
     1709    1282, -1310, -1310,   970,  1286,  1288,  6717,  1287,  1289,  1291,
     1710   -1310, -1310,  1290, -1310, -1310,   970, -1310, -1310, -1310, -1310,
     1711     970,  5116,  5116,   857,  1292, -1310, -1310, -1310, -1310, -1310,
     1712   -1310, -1310, -1310, -1310, -1310, -1310, -1310, 10288, 10288,  1294,
     1713    1295,  1269, -1310, -1310,   941, -1310, -1310, -1310,  5073,  9528,
     1714    5116,  5116,  1370,  5116, -1310,  1298, -1310,  1299, -1310,  1302,
     1715    5116,  1306,  5116,  1123,  1307,    30,   101,  5821,  1435, -1310,
     1716   -1310,  6225,  1303,   456, -1310, -1310, -1310, -1310, -1310, -1310,
     1717   -1310, -1310, -1310,  9861, -1310,  8301,  1330, -1310, -1310,  9528,
     1718     463,   481, -1310,  1328,  1314,   772,  1341, -1310,   306, -1310,
     1719   -1310, -1310, -1310,   970,  1332, -1310, -1310,  1342,   753,   834,
     1720     567,  1345, -1310,  1350, -1310,  9605, -1310, -1310, -1310, -1310,
     1721   -1310,  1351, -1310,  9605,  9605,  9605, -1310, -1310,  1359, -1310,
     1722    1362,  1365,  1366,   557,  7925,  8040, -1310, -1310,   420, -1310,
     1723    1368,  1371, -1310,  8374,   815,   844,  1346,   866,  6094, -1310,
     1724   -1310, -1310,   485, -1310,   888,  1369,  1375,   144,  1417,  1051,
     1725   -1310, -1310,  5116, -1310, 10041,  5116, -1310, -1310, -1310,  1377,
     1726    1379, -1310, -1310, -1310,  1376, -1310, -1310, -1310, -1310, -1310,
     1727   -1310,  9528,   772,   195, -1310,  1353,   772,  9605, -1310, -1310,
     1728   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1729   -1310, -1310,  1384,  1388, -1310, -1310, -1310, -1310, -1310, -1310,
     1730   -1310,  1394, -1310,  1397, -1310, -1310, 10041,   217,  5116, 10041,
     1731   -1310,  1400,  5116, -1310,   289,  1421,  1423, -1310, -1310,  1403,
     1732    1415,  1393, -1310,  1001, -1310, -1310, -1310,  1337,  1053,  1412,
     1733     799,   323, 10288, -1310,   953, -1310,   567,   567,  1418,  1425,
     1734    1426,  1428, -1310, -1310,  8228,  1427, -1310,  1497, 10288,  1420,
     1735   -1310, -1310,  9953, -1310,   955, -1310,  1419, 10041,  1424, -1310,
     1736   -1310,  1442, -1310,  1445, -1310,  1461,  1462, -1310,  1430,  9528,
     1737   -1310, -1310, -1310,   772,   567,  1453,  1436,  1459,  1269,  1269,
     1738   -1310, -1310, -1310, -1310, -1310, 10041,   204, -1310,   370, -1310,
     1739   -1310,  3684, -1310, -1310,  1439,  5116, -1310,  5116,  3684,   144,
     1740    9457,   144,  9457,  1463, -1310,  1465, -1310, -1310,  1464,   799,
     1741   -1310,   968, -1310, -1310, -1310,  1460,  1466, -1310, 10288, 10288,
     1742   -1310, -1310,  1075,   122, -1310, -1310,  1444, -1310,  1075, -1310,
     1743   -1310,  2191,   567, -1310, -1310,   144,  9457,   144,  9457,  1472,
     1744    1450,   567, -1310, -1310, -1310, -1310,  9953,  1469,  1075,  7664,
     1745    5116,  9865,  1470,  1075,  1479,  2191,  3509, -1310, -1310, -1310,
     1746    1482, -1310, -1310, -1310, -1310,  8666, -1310, -1310, -1310,  9732,
     1747   -1310,  9953, -1310, -1310,  1468,  9644, -1310, -1310,  9865,   144,
     1748    3509,   144,  1484,  1486,   976, -1310,  9732, -1310, -1310, -1310,
     1749    9644, -1310, -1310, -1310,   144,   144, -1310, -1310, -1310, -1310,
     1750   -1310, -1310, -1310, -1310
    17571751};
    17581752
     
    17601754static const yytype_int16 yypgoto[] =
    17611755{
    1762    -1315,  4470,  3041, -1315,    39, -1315,  2507,   957,  -207, -1315,
    1763      461,  -523,  -489,  -955,  -200,  5636,     0, -1315,    72,   572,
    1764      580,   245,   566,   964,   967,   968,   966,   976, -1315,  1601,
    1765     -609,  5067,  -949, -1315,  -712,  -938,   430,  -728,   512, -1315,
    1766     1697, -1315,   311, -1200, -1315, -1315,    43, -1315, -1142, -1154,
    1767      154, -1315, -1315, -1315, -1315,   -26, -1161, -1315, -1315, -1315,
    1768    -1315, -1315, -1315,   231, -1202,    53, -1315,  -908, -1315,   416,
    1769      205, -1315,    78, -1315,  -367, -1315, -1315, -1315,   470,  -824,
    1770    -1315, -1315,    13,  -940,   465,  2639, -1315, -1315, -1315,  -107,
    1771    -1315,   102,   269,  -201,  1635,  4179, -1315, -1315,     5,   449,
    1772      756,  -259,  1489, -1315,  1725, -1315, -1315,    52,  2057, -1315,
    1773     2147,   612, -1315, -1315, -1315,  -616, -1315,   866,   867,   456,
    1774      631,   158, -1315, -1315, -1315,   858,   633,  -514, -1315,  -544,
    1775     -359,  1913, -1315, -1315,  -928,  -991,  1380,  1398,   990,   324,
    1776    -1315,   171,   457,  -332,  -192,  -147,   584,   695, -1315,   919,
    1777    -1315,  2794,  1328,  -442,   850, -1315, -1315,   625, -1315,  -238,
    1778    -1315,   -94, -1315, -1315, -1315, -1246,   330, -1315, -1315, -1315,
    1779     1091, -1315,    35, -1315, -1315,  -834,   -97, -1314,  -130,  1985,
    1780    -1315,  3026, -1315,   844, -1315,  -170,  1212,  -183,  -173,  -167,
    1781        7,   -35,   -34,   -33,   936,    18,    55,    61,  -143,  -159,
    1782     -156,  -153,  -151,  -323,  -535,  -528,  -526,  -542,  -318,  -520,
    1783    -1315, -1315,  -512,  1006,  1009,  1011,  2067,  4895,  -560,  -543,
    1784     -538,  -536,  -484, -1315,  -481,  -740,  -737,  -736,  -586,  -304,
    1785     -339, -1315, -1315,   856,   707,   -88, -1315,  3848,    29,  -599,
    1786     -291
     1756   -1310,  4585,  3220, -1310,  1680, -1310,    79,   965,  -162, -1310,
     1757     542,  -525,  -472,  -928,   -58,  5006,     0, -1310,   115,   571,
     1758     588,   220,   578,  1041,  1045,  1037,  1040,  1043, -1310,   682,
     1759    -568,  4467,  -949, -1310,  -743,   627,  -136,  -680,   399, -1310,
     1760     364, -1310,   400, -1052, -1310, -1310,   143, -1310, -1280, -1058,
     1761     249, -1310, -1310, -1310, -1310,    74, -1199, -1310, -1310, -1310,
     1762   -1310, -1310, -1310,   317, -1213,    36, -1310,  -398, -1310,   501,
     1763     296, -1310,   175, -1310,  -322, -1310, -1310, -1310,   558,  -827,
     1764   -1310, -1310,    14,  -963,    60,  1949, -1310, -1310, -1310,   -66,
     1765   -1310,    19,  1219,  -202,  1852,  4238, -1310, -1310,    54,    75,
     1766     689,  -242,  1416, -1310,  1975, -1310, -1310,   158,  2131, -1310,
     1767    2701,  1038, -1310, -1310, -1310,  -621, -1310,   944,   946,   541,
     1768     713,  -254, -1310, -1310, -1310,   938,   714,  -169, -1310,  -117,
     1769    -134,  1167, -1310, -1310,  -857,  -878,   837,   910,  1055,    25,
     1770   -1310,   900,   597,   -39,  -190,  -145,   668,   773, -1310,   993,
     1771   -1310,  2728,  1561,  -434,   920, -1310, -1310,   708, -1310,  -238,
     1772   -1310,   241, -1310, -1310, -1310, -1226,   414, -1310, -1310, -1310,
     1773    1165, -1310,    35, -1310, -1310,  -830,  -111, -1309,  -151,  3288,
     1774   -1310,  3069, -1310,   921, -1310,  -170,   169,  -182,  -181,  -166,
     1775       7,   -35,   -33,   -32,   813,     2,    29,    44,  -122,  -165,
     1776    -164,  -158,  -153,  -314,  -519,  -491,  -490,  -538,  -301,  -501,
     1777   -1310, -1310,  -512,  1078,  1084,  1085,  2540,  5063,  -571,  -588,
     1778    -558,  -543,  -557, -1310,  -503,  -733,  -723,  -722,  -570,  -311,
     1779    -274, -1310, -1310,   240,   176,   -77, -1310,  3991,   136,  -632,
     1780    -222
    17871781};
    17881782
     
    17901784   positive, shift that token.  If negative, reduce the rule which
    17911785   number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1792 #define YYTABLE_NINF -525
     1786#define YYTABLE_NINF -521
    17931787static const yytype_int16 yytable[] =
    17941788{
    1795       49,   114,   453,   399,   428,    69,   953,    98,   150,   151,
    1796      152,   770,   971,   400,   115,   972,   973,   407,   261,   401,
    1797      268,   498,   383,   384,   743,   628,   604,   402,   440,   632,
    1798      403,   609,    49,   404,   848,   405,  1148,    69,  1182,    98,
    1799      755,   596,   831,   148,   408,  1078,  1140,   980,   872,    49,
    1800      726,   670,    77,    50,   731,  1077,   162,   823,   410,   798,
    1801      830,   153,   824,   187,   825,   819,   210,   144,   342,    49,
    1802      194,   679,   820,   217,   821,   505,   227,   924,   167,   683,
    1803      822,  1206,   220,   399,    77,    50,  1192,   928,    31,  1396,
    1804      861,   861,   861,   400,   674,   676,   177,   407,   154,   401,
    1805     1180,  1181,    63,  1460,   155,   425,   114,   402,  1198,   861,
    1806      403,  1215,  1216,   404,   114,   405,    31,   267,   272,   834,
    1807     1210,   863,   864,   714,   408,   841,    31,   281,   566,  -234,
    1808     -234,  1261,   475,   477,    63,   447,    31,  1188,   409,   882,
    1809      203,  1207,    31,   167,  1316,  1208,   177,   307,   148,   177,
    1810      471,   150,   151,   152,   460,   162,   114,   345,   253,  1262,
    1811      411,   210,   730,   567,  1189,   721,  1211,   861,   373,   577,
    1812      971,   123,    31,   972,   973,   578,   327,  1460,   715,  1417,
    1813     1418,   745,   292,   476,   819,   282,   187,   187,   411,  1258,
    1814      204,   820,  1479,   821,   162,   177,   419,   936,   411,   724,
    1815     -234,   142,   267,   527,   153,  1209,   481,   918,   411,   111,
    1816       49,   956,   832,  1317,   601,  1245,   527,   162,   668,  1249,
    1817       41,    42,   210,   111,  1197,   140,   141,   169,   527,   443,
    1818      145,   150,   151,   152,    41,    42,   665,   527,   954,   436,
    1819      307,   154,   839,  1125,   601,  1182,   802,   155,   762,  1419,
    1820      808,   170,    49,   588,   242,   245,  1085,    69,   177,    98,
    1821      272,   861,   868,   666,  1399,   272,   267,   267,  1024,   327,
    1822      117,  1506,   114,   823,   162,   862,   862,   862,   824,  1464,
    1823      825,   819,  1150,   342,   609,   999,  1023,   463,   820,  1088,
    1824      821,  1002,   857,  1490,   862,   307,  1011,   735,  1182,   657,
    1825      476,   436,  1092,   124,    77,    50,  1535,   307,  1537,    77,
    1826      665,   471,   177,   835,  1341,   903,   596,   838,   160,   177,
    1827     1189,   596,   568,   571,  1548,  1417,  1418,   672,   148,  1212,
    1828     1101,   471,   377,   677,   834,   373,   167,   666,   855,   471,
    1829     1519,   114,   858,   143,  1559,   345,  1524,  1124,   378,   602,
    1830      620,  1563,   862,    31,    63,   556,   557,   510,   111,   472,
    1831     1180,  1181,  1198,  1549,   625,   527,   147,  1544,   625,    41,
    1832       42,   114,  1551,   111,   598,   259,   156,  1464,   831,   547,
    1833      548,   178,  1464,   160,    41,    42,   172,   177,  1078,   714,
    1834     1564,   558,   559,   736,   823,  1428,   267,   768,  1077,   824,
    1835      737,   825,  1464,  1126,   177,   684,   187,  -122,   177,  1464,
    1836     1127,   578,  1346,   373,  1403,   457,   323,   547,   182,  -122,
    1837     -122,   848,  1182,   202,   267,   339,   307,   307,  -122,   387,
    1838      267,   262,   390,   625,   263,  -122,   392,   342,     8,     9,
    1839       10,    11,    12,  -290,   715,   388,   862,   111,   391,    70,
    1840     1449,  1450,   393,   547,   114,   327,   327,   549,    41,    42,
    1841      893,   394,  1339,   550,   551,    56,   116,    31,  1004,  1340,
    1842       77,   177,   267,   808,   498,   430,   919,   395,  1379,   434,
    1843      267,    70,   625,   921,    49,  1455,  1348,   373,   720,    69,
    1844       77,    98,   920,  1136,   114,    34,   919,    56,    77,   922,
    1845     1146,   873,   248,   921,  1112,  1022,   307,   251,   114,   323,
    1846      609,   307,  1089,   307,   307,   213,  1247,  -520,   915,  1090,
    1847      472,   753,  1198,   327,   851,   114,   345,   886,   852,  1198,
    1848      957,   211,  1168,  1170,   221,   253,    77,    50,  1257,  1195,
    1849      472,   434,   327,   439,   488,   917,   264,  1024,   472,   330,
    1850      714,   645,  1195,  1330,   111,  1196,   140,   239,   884,  1027,
    1851      331,   287,   808,   -10,   521,    41,    42,  1332,  1322,  1331,
    1852      571,   571,    41,    42,  1377,   471,   160,  -443,   307,  1290,
    1853     1291,   853,  1198,  1333,   712,   854,    63,   750,   853,   625,
    1854      345,   240,  1108,  -469,   620,   810,   241,   483,   514,  -444,
    1855      602,   933,   602,  1380,   500,   715,   570,   327,   411,   277,
    1856      587,   874,  1136,   279,   593,    45,    46,   918,   280,  1022,
    1857      625,   772,   773,   774,  -469,   625,  -469,   620,   177,   332,
    1858     -469,   625,   333,   626,   625,   625,   625,   630,  1496,  -105,
    1859      339,   371,   875,  -105,   643,  1496,   111,   334,   876,   849,
    1860      705,  1427,  1109,   625,   598,   267,   706,    41,    42,   342,
    1861      177,   722,   725,   111,   729,   140,   141,   723,   493,  1179,
    1862      494,   442,   178,  1035,    41,    42,   177,   335,   215,     2,
    1863      207,     4,     5,     6,     7,   114,   732,   441,   912,   629,
    1864      372,   177,   733,   633,  1082,   323,   323,   579,  1545,   411,
    1865      727,    70,  1365,   596,   376,   728,  1366,   107,   107,   749,
    1866     1120,   625,   938,   620,   389,   750,   897,    56,   385,   720,
    1867      720,   397,   750,   688,  1042,   519,   899,   399,   409,   988,
    1868      215,   582,   750,   411,    77,   989,   117,   400,  1498,   107,
    1869     1499,   426,   407,   401,    35,   427,    36,   114,   345,  1001,
    1870     1243,   402,   753,   753,   403,   706,   578,   404,   432,   405,
    1871       77,   488,  1373,   323,  -122,   488,  -122,   450,   750,   408,
    1872     -122,  -367,   177,   215,  -396,   521,   107,   521,   253,   329,
    1873      521,  1374,   323,   521,   472,  -122,  -122,   750,   971,   504,
    1874     1444,   972,   973,   808,   339,  1546,  1390,   571,   714,   213,
    1875     1376,   779,   780,   781,   782,   625,   750,   625,  1457,  1007,
    1876      472,   461,   625,   345,   869,   752,   602,   411,   810,  1172,
    1877      342,  1381,   484,  1445,    45,    46,   230,   750,   602,  1442,
    1878      231,   979,  1465,   235,   215,   237,   462,    37,   750,   175,
    1879      176,    40,   246,   111,   292,   140,   141,   323,    41,    42,
    1880      712,   552,   553,   715,    41,    42,   673,   675,   806,   111,
    1881      508,   140,   141,   923,   130,   925,   131,   132,   133,   457,
    1882       41,    42,   215,   513,   372,    41,    42,   215,   937,   307,
    1883      601,  1517,  1457,   527,    69,   244,  1512,    45,    46,   847,
    1884      525,   887,  1513,   411,   593,    37,  1193,   175,   176,    40,
    1885      856,   625,   253,   329,   411,   164,    41,    42,   114,   345,
    1886      912,   890,   912,   411,   562,    37,   957,   175,   176,    40,
    1887      957,   957,   213,   665,   114,   563,    41,    42,   915,  1368,
    1888      565,    77,   715,    70,   554,   555,   519,   938,   938,   564,
    1889      177,   519,   720,   568,   519,   850,   338,   114,   307,    56,
    1890      666,  1152,   376,   411,   688,   917,  -440,    48,   113,   107,
    1891     1113,   865,   215,   738,   345,   739,   589,  1569,   740,   230,
    1892      164,   746,   586,   578,   753,   658,   881,   327,   419,   661,
    1893      411,    63,   560,   561,    37,   163,   113,   113,    40,    48,
    1894       -3,  1164,   488,   411,   659,    41,    42,   791,   638,   195,
    1895       48,  1167,   218,   601,   660,   228,    48,   345,   481,   329,
    1896      411,   712,   662,    37,    48,   663,   339,    40,  1238,   664,
    1897       48,    43,  1531,    48,    41,    42,    48,   667,   625,   625,
    1898       45,    46,   832,   329,   601,  1169,   849,   601,   258,  1337,
    1899      113,   113,   645,   215,  1309,  1310,  1311,   669,   307,  1047,
    1900      816,   693,   601,  1200,   528,   529,   530,   500,   694,    45,
    1901       46,  1347,  1349,  1350,    48,   696,   435,    48,  1254,   698,
    1902      411,   442,  1136,  1095,    48,  1095,  1003,  -238,   531,   547,
    1903      532,   806,   533,   534,   163,   215,   992,   989,   114,   734,
    1904     1097,   750,   994,   912,   329,   411,   -12,   374,   912,   747,
    1905       77,  1386,  1387,  1437,   989,    48,   751,   938,   230,   759,
    1906      235,  1442,  1443,    48,   811,   267,  1491,  1492,    48,   812,
    1907      510,  1417,  1418,   163,   775,   776,   783,   784,   435,  1397,
    1908      342,   815,   625,  1397,   777,   778,   826,     2,   207,     4,
    1909        5,     6,     7,    48,    48,   -13,   163,   870,   213,   645,
    1910      472,   523,   871,   878,   528,   529,   530,   345,   444,    48,
    1911      898,   900,   213,   164,   901,   908,   955,    48,   905,  -417,
    1912      806,   926,  -524,   941,   950,   948,    48,   339,   531,    48,
    1913      532,   723,   533,  1319,   961,   963,   113,   962,   966,   965,
    1914      967,   107,   968,   688,   996,   984,   997,   998,   230,   272,
    1915      114,   113,    35,  1013,    36,   113,   215,  1014,  1015,    48,
    1916      113,  1016,    97,   220,  1017,   488,  1115,   323,   114,  1018,
    1917     1019,  1030,   307,    48,    48,  -405,  -404,    69,  1044,  1079,
    1918       48,  1081,  1102,  1103,   215,  1480,   625,    48,   911,   215,
    1919      114,  1104,  1105,   750,    97,  1111,  1121,  1122,  1123,  1217,
    1920     1047,  1132,  1141,  1113,  1128,   149,   978,   177,   213,   712,
    1921     1133,    97,  1134,  1135,   374,    -3,     2,   207,     4,     5,
    1922        6,     7,  1138,  1162,    77,   190,   847,  1183,    97,  1185,
    1923     1184,    97,  1186,  1187,  1201,    48,  1202,  1204,   625,   625,
    1924     1205,  1213,  1218,  1225,  1220,   229,  1230,   272,  1440,    -3,
    1925     1557,  1235,   307,  1233,    37,    48,    48,  1200,    40,  1239,
    1926      692,   215,  1244,  1246,   493,    41,    42,     8,     9,    10,
    1927       11,    12,    48,  1251,    63,   215,    48,  1248,    70,  1259,
    1928     1252,    35,  1263,    36,  1266,   114,  1268,   644,   712,  1270,
    1929     1271,   719,   374,  1272,    56,   399,    31,  1273,  1113,  1274,
    1930       45,    46,  1276,    48,    77,   400,  1283,   688,  1292,   407,
    1931       97,   401,   523,    48,   523,  1293,  1296,   523,  1300,   402,
    1932      523,  1303,   403,    97,    34,   404,  1321,   405,  1328,  1304,
    1933     1305,    48,  1307,   665,  1315,  1334,   408,    48,  1336,    48,
    1934     1338,  1066,  1344,  1342,   216,   267,  1345,  1351,   398,   190,
    1935     1352,   806,  1353,  1355,   472,  1361,  1530,  1362,  1363,  1364,
    1936      666,   243,  1114,   625,  1371,  1372,   570,  1375,   411,  1382,
    1937     1383,   215,    97,  1311,   113,    45,    46,  1391,  1392,    48,
    1938     1393,  1403,  1400,   177,    97,  1411,  1412,    48,   114,  -406,
    1939     1430,    48,  1415,  1426,  1432,    48,   216,  -291,   113,  1434,
    1940      113,  1113,  1435,  1441,     8,     9,    10,    11,    12,   442,
    1941     1451,  1446,   114,  1436,    97,  1452,  1453,  1200,  1454,   114,
    1942      644,   114,  1456,   114,  1200,  1366,  1470,  1461,   479,  1466,
    1943     1472,  1474,  1476,    31,  1468,   113,  1478,   339,   644,   216,
    1944      113,   644,  1483,   150,   151,   152,  1484,    70,  1485,  1486,
    1945     1497,  1507,  1509,  1529,  1523,  1511,  1515,  1516,   114,  1115,
    1946      114,    34,  1538,    56,    77,  1539,  1543,  1550,  1552,  1554,
    1947     1560,    77,   114,  1567,  1568,  1219,   785,  1200,  1529,  1529,
    1948      786,   788,   787,  1320,  1518,  1429,   162,  1570,   307,   113,
    1949       97,   692,   789,  1385,  1250,  1401,    48,  1500,  1096,  1224,
    1950      216,   906,   907,  1529,  1232,   214,   929,    48,  1100,    48,
    1951      373,   603,  1137,  1203,   472,   233,  1043,   327,   877,  1110,
    1952     1329,   472,   804,   943,    77,   717,   794,   951,    48,   795,
    1953       37,   796,   184,   185,    40,     0,   107,     0,   216,     0,
    1954        0,    41,    42,   216,    48,     0,     0,     0,     0,     0,
    1955      113,     0,     0,     0,  1115,     0,     0,   214,     0,    48,
    1956        0,   113,    48,   113,     0,     0,     0,   910,   190,   411,
    1957        0,     0,   215,     0,   472,   911,    45,    46,     0,     0,
    1958        0,  1298,  1299,     0,  1301,    66,   118,     0,     0,     0,
    1959        0,  1306,     0,  1308,     0,    48,     0,     0,   213,   113,
    1960      214,   113,     0,     0,   107,   113,     0,     8,     9,    10,
    1961       11,    12,     0,   113,   211,   221,     0,    66,     0,     0,
    1962        0,    70,  -292,     0,     0,     0,    48,    48,   216,     8,
    1963        9,    10,    11,    12,   161,     0,    31,    56,     0,     0,
    1964       48,    37,     0,   184,   185,    40,    97,     0,     0,     0,
    1965      603,     0,    41,    42,   222,  1114,     0,  1115,    31,     0,
    1966        0,   214,     0,     0,    34,     0,     0,     0,  1439,    37,
    1967        0,   184,   185,    40,     0,    75,     0,     0,   186,     0,
    1968       41,    42,     0,     0,  1066,     0,    34,    45,    46,     0,
    1969     1503,   260,  1503,     0,     0,     0,   442,     0,     0,   214,
    1970        0,    70,   174,     0,   214,   107,   600,    75,   601,   216,
    1971        0,     0,   441,     0,     0,    45,    46,    56,     0,   499,
    1972        0,     0,     0,    48,     0,     0,     0,  1503,     0,  1503,
    1973      692,     0,     0,   328,     0,    48,    37,     0,   184,   185,
    1974       40,   260,   350,     0,   223,   254,     0,    41,    42,     0,
    1975     1114,   216,     0,     0,     0,  1423,     0,   323,     0,     0,
    1976     -293,   215,   818,     0,   603,     0,     0,     8,     9,    10,
    1977       11,    12,   406,   600,     0,   601,     0,     0,   644,     0,
    1978     1389,     0,    45,    46,     0,   113,     0,   424,     0,   214,
    1979      429,   431,     0,     0,   703,   161,    31,     0,     0,    37,
    1980        0,   184,   185,    40,     0,     0,     0,     0,    48,     0,
    1981       41,    42,   704,     0,     0,     0,   448,    48,     0,    48,
    1982      451,     0,   452,     0,    34,     0,   113,     0,     0,     0,
    1983        0,   459,   353,     0,     0,  1416,   266,    66,  1424,     0,
    1984        0,   417,   473,     0,     0,    45,    46,     0,     0,    48,
    1985      916,     0,   480,  1114,     0,     0,     0,   107,     0,   215,
    1986      431,    70,     0,     0,   437,     0,     0,     0,    70,   113,
    1987      214,     0,   216,     0,   445,     0,     0,    56,     0,   107,
    1988        0,   818,   603,  1463,    56,   644,     0,   214,  1467,     0,
    1989        0,     0,     0,   113,   692,     0,   644,   107,   113,     0,
    1990      216,     0,     0,     0,     0,   216,   449,     0,     0,     0,
    1991        0,     0,   214,     0,     0,     0,     0,     0,  1489,     0,
    1992        0,    70,     0,     0,     0,     0,   260,    75,     0,     0,
    1993      594,     0,    75,     0,     0,     0,   622,    56,     0,     0,
    1994        0,     0,   520,     0,     0,     0,     0,     0,   113,   627,
    1995        0,     0,     0,   627,     0,     0,   260,     0,     0,   107,
    1996        0,   125,   128,   129,     0,     0,     0,     0,     0,    37,
    1997        0,   184,   185,    40,     0,     0,     0,   216,   818,     0,
    1998       41,    42,     0,     0,     0,     0,   113,     0,     0,     0,
    1999      603,   216,   107,     0,     0,     0,     0,     0,     0,     0,
    2000       48,   703,     0,   473,  1558,    48,   910,    78,   411,     0,
    2001     1558,     0,     0,     0,     0,    45,    46,     0,   350,   704,
    2002        0,  1558,    48,   473,     0,  1558,   223,     0,     0,     0,
    2003        0,   473,     0,   214,   255,     0,   256,     0,     0,    78,
    2004        0,     8,     9,    10,    11,    12,     0,     0,     0,   699,
    2005        0,     0,   431,     0,     0,     0,     0,     0,     0,     0,
    2006        0,   214,     0,     0,     0,     0,   214,   713,     0,    66,
    2007       31,     0,  1091,     0,   916,     0,   224,   431,     0,     0,
    2008        0,   431,     0,     0,     0,     0,     0,   216,     0,     0,
    2009      681,     0,     0,    75,     0,   107,     0,    80,    34,     0,
    2010        0,     0,   113,    37,   603,   184,   185,    40,   353,     0,
    2011      260,   350,     0,    75,    41,    42,   707,   396,     0,   107,
    2012        0,    75,     0,   703,     0,    48,   107,   415,   416,    80,
    2013        0,     0,   420,   703,   422,   423,     0,     0,   214,   353,
    2014      910,   704,   411,     0,     0,     0,     0,   703,     0,    45,
    2015       46,   704,   214,   520,     0,     0,   797,   353,   520,    75,
    2016        0,   520,     0,     0,   355,   704,   225,     0,   113,   113,
    2017      113,     0,   499,     0,   627,   809,     0,     0,     0,   107,
    2018        0,     0,     8,     9,    10,    11,    12,   828,     0,     0,
     1789      49,   114,   453,   428,   399,   400,   268,    98,   150,   766,
     1790     151,   152,   819,   973,   868,   115,   964,   407,   752,    63,
     1791     401,   402,   403,   358,   383,   384,   965,   966,   404,   261,
     1792     440,   827,    49,   405,   596,   604,    50,   410,   498,    98,
     1793     357,   740,   820,   148,  1070,   153,   830,  1069,   609,    49,
     1794     844,    63,   837,   948,    69,  1137,   162,   821,   725,   794,
     1795      56,   116,   730,   187,   826,   408,   210,   144,    50,    49,
     1796     194,   919,   154,   217,   409,    70,   227,  1187,    31,   342,
     1797     112,   815,   178,   220,   399,   400,    69,   155,   281,  1439,
     1798     628,   425,    56,  1302,   632,  1379,   669,   407,   123,   818,
     1799     401,   402,   403,  1204,  1205,  1181,   114,    70,   404,   816,
     1800     817,   475,   477,   405,   114,  1195,   678,   267,   272,   476,
     1801     505,  1197,  1443,  1177,   682,    31,   211,   923,    31,   221,
     1802     203,   124,   262,    31,    31,   263,   566,    31,   527,   493,
     1803      31,   213,   494,  1171,   527,   408,   282,   307,   148,  1178,
     1804     411,   150,   145,   151,   152,   162,   114,   345,    77,   519,
     1805    1439,   210,  1303,  1169,  1170,  1117,  -231,  -231,   373,    97,
     1806     567,   714,   964,   143,   720,  1196,   107,   107,  1199,  1245,
     1807     204,  1198,   965,   966,   913,   167,   187,   187,   153,   476,
     1808      77,   471,   949,  1458,   162,   253,   147,   411,   419,   815,
     1809     411,    97,   267,   481,   828,   411,   601,   835,   107,   601,
     1810      49,   568,   149,  1186,   287,   154,  1443,   162,    97,   527,
     1811     667,  1443,   210,  1200,   819,    41,    42,   816,   817,   443,
     1812     155,   150,   190,   151,   152,    97,   664,  -231,    97,  1484,
     1813     307,  1443,  1248,  1139,   439,   107,   156,  1077,  1443,   292,
     1814     167,   514,    49,  1016,   820,   182,   169,   830,   172,    98,
     1815     272,  1398,  1399,   202,   588,   272,   267,   267,   723,   821,
     1816    1249,    63,   114,  1512,   162,  1514,   472,   527,   951,  1080,
     1817     170,   991,   441,   327,   665,   656,  1015,   463,    50,   164,
     1818     672,   674,  1093,   815,   342,   307,  -287,   442,   483,   358,
     1819    1468,   609,  1526,   248,  1382,   500,    69,   307,   251,   596,
     1820     664,  1003,    56,   671,   596,   804,   357,    97,  -119,   676,
     1821    -119,   816,   817,   571,  -119,  1187,  1178,    70,   148,  1541,
     1822      97,  1400,   465,  1398,  1399,   373,  -516,   527,  1084,  -119,
     1823    -119,   114,   734,  1118,   819,   345,   436,  1171,   713,   602,
     1824     620,   579,   471,   411,   164,   398,   190,   853,   665,   898,
     1825     253,   377,   827,  1119,   625,   735,   556,   557,   625,  1201,
     1826     519,   114,   471,   178,   820,   519,   327,   378,   519,    97,
     1827     471,  1070,   831,  1116,  1069,   736,   834,   673,   675,   821,
     1828     629,    97,   358,   111,   633,   847,   267,  1171,   747,   848,
     1829     510,   558,   559,  1409,    41,    42,   187,   851,   436,   357,
     1830      77,   854,   986,   373,  1496,    77,  1325,  1169,  1170,   174,
     1831    1501,    97,   547,   548,   267,   213,   307,   307,   107,   844,
     1832     267,   787,   759,   625,   714,   479,  1326,   472,   849,  1423,
     1833    1521,   577,   850,   167,   870,  1528,   642,   578,   342,  1525,
     1834     435,  1157,  1159,  1424,   114,   729,   358,   472,  1428,  1429,
     1835     547,  1362,   254,   871,  1126,   472,   859,   860,   264,  1536,
     1836     447,   849,   267,   357,   742,  1100,  1540,   387,  1187,   330,
     1837     267,   598,   625,   877,    49,  1187,  1469,   373,   719,   460,
     1838     498,    98,   683,   388,   114,  1244,   547,    97,   578,   390,
     1839    1470,   711,   869,    63,   888,   881,   307,  1104,   114,  1135,
     1840    1014,   307,   435,   307,   307,   391,  1171,   910,   603,   -10,
     1841      50,   750,  -440,   609,   392,   114,   345,  -441,  1016,   996,
     1842     582,  -467,   411,  -467,   804,   523,  1187,  1434,    69,   798,
     1843     393,   931,   277,   879,    56,   394,   112,   164,   213,  1236,
     1844    -467,     2,   207,     4,     5,     6,     7,   914,   417,    70,
     1845     704,   395,   327,   327,   916,   912,   705,   914,   916,  1184,
     1846     571,   571,  1184,   915,   952,   190,    77,   279,   307,  1316,
     1847     917,   437,  1126,  1081,  1082,  1185,   280,   913,  1308,   625,
     1848     345,   445,   549,   714,   620,  1317,    77,  1318,   550,   551,
     1849     602,   747,   602,   882,    77,   411,   331,   760,  1360,  1276,
     1850    1277,   713,   765,  1319,  1474,   471,    35,  1363,    36,   332,
     1851     625,  1474,   804,  1014,  1019,   625,   111,   620,   140,   239,
     1852     327,   625,   994,   333,   625,   625,   625,    41,    42,   111,
     1853     334,   928,    77,  -102,   806,   335,   846,  -102,   371,   327,
     1854      41,    42,   625,    97,   267,   372,  1087,   603,  1087,   520,
     1855     107,   465,   861,   240,   768,   769,   770,   342,   241,  1348,
     1856     376,  1027,  1522,  1349,   111,   358,   876,   385,   111,    -3,
     1857     140,   141,  1408,   389,   114,    41,    42,   907,   596,    41,
     1858      42,  1074,   357,   885,   691,   411,   111,   442,   140,   141,
     1859     472,   528,   529,   530,  1141,  1112,   411,    41,    42,   397,
     1860     625,   933,   620,   764,   327,   726,  1101,  1234,   719,   719,
     1861     727,  1238,  1034,   399,   400,   531,   472,   532,   409,   533,
     1862     534,  1153,   878,   411,   880,   432,   721,   407,   244,   401,
     1863     402,   403,   722,   426,   114,   345,   523,   404,   523,   750,
     1864     750,   523,   405,  1156,   523,   601,   845,   500,  1158,   230,
     1865     601,   598,   427,   231,   711,  1476,   235,  1477,   237,   814,
     1866     713,   603,   964,   213,   450,   246,   775,   776,   777,   778,
     1867    1373,  -288,   965,   966,   927,   408,  -364,   213,     8,     9,
     1868      10,    11,    12,   571,     2,   207,     4,     5,     6,     7,
     1869     731,   625,  1241,   625,   411,   999,   732,   680,   625,   345,
     1870    1161,  -393,   602,   570,  1425,   411,   111,    31,   140,   141,
     1871    1523,    45,    46,   229,   602,   111,   342,    41,    42,   484,
     1872    1436,   461,   746,   706,   462,   714,    41,    42,   747,    77,
     1873       8,     9,    10,    11,    12,    34,    37,   892,   804,   504,
     1874      40,   253,   329,   747,   292,   864,   911,    41,    42,    35,
     1875     894,    36,   163,   806,  1330,    77,   747,   980,   508,    31,
     1876     520,   972,   513,   981,   307,   520,   195,   525,   520,   218,
     1877     213,   527,   228,   812,   562,   601,  1168,   814,   603,   993,
     1878    1182,    45,    46,    63,   563,   705,   625,    34,   554,   555,
     1879    1494,  1436,   230,   114,   345,   907,   111,   907,     2,   207,
     1880       4,     5,     6,     7,   714,   664,  1232,    41,    42,   114,
     1881     910,   564,   578,   711,   691,  1356,   565,   749,    69,   411,
     1882     142,   747,   933,   933,    56,    45,    46,   719,   568,   570,
     1883      37,   411,   114,   307,    40,  1332,   338,    45,    46,    70,
     1884    -437,    41,    42,   952,  1357,   586,  1105,   952,   952,   589,
     1885     747,   163,   932,   665,   601,    48,   113,   750,   912,    -3,
     1886      45,    46,   657,    35,   374,    36,  1359,    43,  1508,   552,
     1887     553,   814,   747,   242,   245,    45,    46,   638,     8,     9,
     1888      10,    11,    12,   603,   113,   113,  1227,    48,  1364,   345,
     1889     163,   658,  1106,   659,   747,   560,   561,    37,    48,   184,
     1890     185,    40,   713,   111,    48,   140,   141,    31,    41,    42,
     1891     625,   625,    48,   163,    41,    42,   661,  1126,    48,   984,
     1892     981,    48,    77,   890,    48,   444,  1121,   253,   329,   411,
     1893     307,   230,   897,   235,   186,    34,   899,   662,   113,   113,
     1894     107,   666,    45,    46,  1284,  1285,    37,  1287,  1132,   472,
     1895      40,   663,  1132,  1426,  1292,  1444,  1294,    41,    42,  1423,
     1896     668,   747,    48,  1323,  1083,    48,   911,   442,  1490,   327,
     1897     114,   258,    48,   692,  1491,   907,  1546,   749,   693,   411,
     1898     907,   695,   578,   718,  1189,    45,    46,   329,   411,   933,
     1899      56,    45,    46,   737,   215,   738,   603,   267,   739,  1369,
     1900    1370,   743,  1132,    48,   547,    70,  1418,   981,   107,  1398,
     1901    1399,    48,   625,   771,   772,    37,    48,   184,   185,    40,
     1902     342,   230,   419,   660,   411,   845,    41,    42,   779,   780,
     1903    1351,   374,   773,   774,   457,   697,   345,  -235,   481,   329,
     1904     411,    48,    48,   733,   744,   510,   215,   748,   756,   691,
     1905    1380,   807,   266,   873,  1380,   711,   808,    48,   811,  -289,
     1906      45,    46,   828,   329,   601,    48,     8,     9,    10,    11,
     1907      12,  1295,  1296,  1297,    48,   822,   867,    48,   272,   114,
     1908    1331,  1333,  1334,   893,   113,   -12,   -13,   866,    77,   215,
     1909     895,   896,   900,   220,   903,    31,   921,   114,  -414,   113,
     1910    -520,   307,   936,   113,   943,   722,   107,    48,   113,   374,
     1911     117,   945,  1404,   956,   130,   625,   131,   132,   133,   114,
     1912      63,    48,    48,    34,   950,    41,    42,   957,    48,   958,
     1913     959,   960,   961,  1105,   711,    48,   988,   989,   211,   221,
     1914     990,   977,  1005,  1006,   911,  1007,  1008,  1009,  1010,   911,
     1915     215,  1459,  1079,   213,  1011,    69,  1022,  1421,   160,  -402,
     1916    -401,    56,  1036,  1058,   625,   625,  1071,  1534,  1094,   906,
     1917     644,  1073,  1096,   272,  1097,  1095,    70,  1103,   307,  1106,
     1918    1113,   747,  1114,    48,  1115,  1120,  1122,   971,   215,  1123,
     1919    1124,   702,  1125,   215,  1128,  1131,  1151,   472,  1174,  1175,
     1920    1172,  1173,  1176,    48,    48,     8,     9,    10,    11,    12,
     1921     691,   114,  1190,   399,   400,   259,  1191,  1132,  1132,  1132,
     1922      48,  1193,  1194,   160,    48,  1105,   407,  1202,  1206,   401,
     1923     402,   403,  1189,   441,    31,   643,  -290,   404,    56,  1207,
     1924    1209,    -3,   405,     8,     9,    10,    11,    12,   442,  1214,
     1925     664,    48,  1219,    70,  1224,   107,   323,   493,  1222,    77,
     1926    1507,    48,    34,  1228,   703,   339,  1233,   922,   267,  1235,
     1927    1237,  1106,    31,  1240,   408,  1250,  1246,   107,   215,    48,
     1928    1252,   724,  1254,   728,   625,    48,  1256,    48,  1257,  1258,
     1929    1262,  1259,  1420,  1260,  1269,   107,  1278,  1279,   665,    37,
     1930      34,   175,   176,    40,   932,  1203,   601,  1286,  1307,   114,
     1931      41,    42,    45,    46,    37,   430,   175,   176,    40,   434,
     1932    1289,  1290,   113,  1105,  1291,    41,    42,    48,  1293,  1301,
     1933    1314,   114,  1192,  1320,  1322,    48,    77,  1328,   114,    48,
     1934     114,  1324,   114,    48,  1329,  1358,   113,  1335,   113,   323,
     1935     472,   372,  1336,  1338,   107,  1132,  1132,   472,   985,   215,
     1936     150,  1344,   151,   152,  1345,  1346,  1347,  1297,  1365,  1106,
     1937    1354,  1506,   214,  1355,  1366,  1383,   114,  1374,   114,  1375,
     1938    1376,   434,   233,   113,   488,  1189,  1392,   107,   113,   114,
     1939    1393,    56,  1189,  1460,  -403,  1506,  1506,   702,    56,  1396,
     1940    1407,   215,  1415,   162,   521,   307,    70,  1411,   472,  1413,
     1941     528,   529,   530,    70,  1416,  1417,   160,  1422,  1430,    37,
     1942    1506,   175,   176,    40,   214,  1431,  1432,   373,  1433,  1435,
     1943      41,    42,   865,  1349,   531,  1029,   532,   113,   533,  1305,
     1944    1440,  1445,  1449,  1189,    48,  1451,  1447,  1453,  1455,    56,
     1945     587,  1509,  1457,  1462,   593,    48,   376,    48,  1463,  1464,
     1946    1517,  1475,  1492,  1485,    70,  1487,  1500,   214,  1493,  1489,
     1947     703,  1515,  1516,   626,  1520,  1527,    48,   630,   922,  1529,
     1948     339,   918,  1531,   920,  1544,   107,  1545,   457,  1208,    77,
     1949    1537,   783,    48,   781,  1130,   784,    77,   113,   782,   785,
     1950    1058,  1306,  1495,  1410,  1547,  1368,    48,   107,   113,    48,
     1951     113,  1239,  1384,  1478,   107,  1088,   702,   216,   901,  1213,
     1952     902,  1221,   215,   922,  1092,   924,   702,   800,   214,  1127,
     1953    1035,   872,   938,  1315,   243,   323,   323,  1102,   790,   716,
     1954     702,   327,    48,   946,   791,   792,   113,    77,   113,     0,
     1955     215,  1367,   113,     0,     0,   215,     0,     0,  1138,     0,
     1956     113,     0,     0,   687,   479,   107,   214,     0,     0,   216,
     1957       0,   214,     0,    48,    48,     0,   117,     0,     0,     0,
     1958    1482,     0,  1482,     0,     0,     0,   499,    48,     0,   703,
     1959       0,     0,     0,  1372,     0,     0,     0,     0,     0,   703,
     1960       0,   488,     0,   323,     0,   488,     0,     0,     0,  1029,
     1961       0,     0,   216,   703,     0,   521,  1482,   521,  1482,     0,
     1962     521,     0,   323,   521,     0,     0,   215,   177,     0,     8,
     1963       9,    10,    11,    12,   339,     0,     0,     0,     0,    37,
     1964     215,   184,   185,    40,     0,  1397,     0,     0,  1405,     0,
     1965      41,    42,     0,     0,     0,     0,   214,   644,    31,     0,
     1966       0,     0,     0,  1039,     0,     0,     0,    48,     0,     0,
     1967       0,     0,     0,   216,     0,     0,   905,   177,   411,    48,
     1968     177,     0,     0,     0,    45,    46,    34,   323,     0,   922,
     1969       0,  1442,     0,     0,     0,     0,  1446,   906,   802,     0,
     1970       0,     0,     0,  1479,  1089,  1483,     0,     0,     0,     0,
     1971       0,   216,     0,     0,     0,     0,   216,     0,     0,     0,
     1972       0,     0,   643,     0,  1467,     0,   177,   891,   113,   843,
     1973       0,     0,     0,   215,   593,     0,     0,   214,     0,  1511,
     1974     852,  1513,    66,   118,   702,   702,     0,     0,     0,   922,
     1975     922,    48,     0,     0,   214,     0,     0,     0,     0,     0,
     1976      48,   644,    48,     0,     0,     0,     0,     0,     0,   113,
     1977       0,     0,     0,     0,    66,     0,     0,     0,     0,   214,
     1978       0,     0,     0,  1542,     0,  1543,     0,     0,     0,   177,
     1979       0,   161,    48,   687,     0,     0,     0,     0,  1550,  1551,
     1980       0,   216,   702,   702,     0,     0,     0,     0,  1535,     0,
     1981       0,   222,   113,     0,  1535,     0,     0,   703,   703,     0,
     1982       0,     0,     0,     0,     0,  1535,   643,     0,     0,  1535,
     1983       0,   488,     0,     0,   113,     0,     0,     0,   113,    57,
     1984      57,     0,     0,   177,     0,     0,   987,     0,   260,     0,
     1985     177,     0,     0,   339,     0,     0,   992,     0,     0,     0,
     1986       0,  1039,     0,     0,     0,    75,     0,     0,     0,     0,
     1987    1004,    57,     0,     0,     0,   703,   703,     0,     0,     0,
     1988       0,     0,   216,     0,     0,     0,     0,     0,   113,     0,
     1989     328,     0,     0,     0,     0,     0,     0,    75,   260,   350,
     1990     214,     0,     0,     0,     0,    57,     0,     0,    57,     0,
     1991       0,     0,   995,     0,     0,     0,     0,   802,   177,     0,
     1992       0,     0,     0,     0,   216,     0,   113,     0,   214,   406,
     1993     215,     0,     0,   214,   223,   177,     0,     0,     0,   177,
     1994      48,     0,     0,     0,   424,    48,     0,   429,   431,     0,
     1995    1312,     0,   161,     0,   922,     0,     0,     0,     0,     0,
     1996       0,     0,    48,     0,     0,     0,     0,     0,     0,     0,
     1997     922,     0,     0,   448,  1282,     0,     0,   451,     0,   452,
     1998       0,     0,   702,     0,     0,     0,     0,     0,   459,     0,
     1999     702,   702,   702,     0,    66,     0,   348,     0,     0,   473,
     2000       0,     0,   177,     0,   214,   802,     0,     0,     0,   480,
     2001       0,     0,   339,     0,     0,     0,     0,   431,   214,     0,
     2002       0,    78,   353,  1313,     0,     0,     0,     0,   687,     0,
     2003       0,    37,     0,   184,   185,    40,     0,     0,   499,   113,
     2004     922,   922,    41,    42,     0,   216,     0,     0,     0,     0,
     2005     488,  1107,   323,    78,   702,   703,     0,     0,     0,     0,
     2006       0,    57,    48,   703,   703,   703,     0,     0,   600,     0,
     2007     601,     0,     0,   216,  1166,  1167,    45,    46,   216,     0,
     2008       0,     0,     0,   260,     0,     0,     0,   594,     0,     0,
     2009     224,    57,     0,   622,     0,     0,   449,     0,     0,     0,
     2010       0,     0,     0,   113,   113,   113,   627,     0,   843,     0,
     2011     627,   214,     0,   260,     0,     0,   215,    75,     0,     0,
     2012       0,     0,    75,     0,     0,     0,     0,   703,     0,     0,
     2013       0,     0,  1216,  1217,     0,     0,     0,     0,     0,     0,
     2014      37,     0,   184,   185,    40,     0,     0,     0,     0,   216,
     2015       0,    41,    42,    37,     0,   184,   185,    40,     0,   177,
     2016     473,     0,     0,   216,    41,    42,     0,     0,     0,     0,
     2017       0,     0,     0,     0,     0,   350,     0,   905,   355,   411,
     2018     473,     0,     0,     0,     0,    45,    46,     0,   473,   687,
     2019    1505,   177,   411,     0,     0,     0,     0,     0,    45,    46,
     2020       0,     0,     0,     0,     0,     0,   698,   177,     0,   431,
     2021       0,   215,     0,     0,     0,     0,   223,     0,     0,     0,
     2022       0,   177,     0,     0,   712,     0,    66,     0,     0,     0,
     2023       0,   802,    48,    48,   431,     0,     0,     0,   431,     0,
     2024       0,   113,   113,   535,   536,   537,   538,   539,   540,   541,
     2025     542,   543,   544,     0,     0,     0,   216,     0,     0,     0,
     2026       0,     0,     0,     0,     0,     0,     0,   260,   350,     0,
     2027       0,     0,   348,    78,     0,     0,     0,   545,    78,   113,
     2028       0,     0,     0,    75,     0,     0,     0,     0,     0,     0,
     2029       0,     0,     0,     0,     0,     0,     0,     0,   353,     0,
     2030       0,     0,   177,    75,     0,     0,     0,     0,   214,     0,
     2031       0,    75,  1337,   793,     0,     0,   339,     0,     0,     0,
     2032    1339,  1340,  1341,    57,     0,     0,     0,     0,     0,   353,
     2033       0,   627,   805,     0,     0,     0,    48,   113,  1107,     0,
     2034       0,     0,     0,     0,   824,     0,   113,   353,     0,    75,
     2035       0,     0,     0,   283,   284,     0,   285,     0,     0,     0,
     2036      48,    48,   594,     0,     0,   348,     0,   594,     0,     0,
     2037       0,     0,   224,   627,     0,     0,   350,   350,   350,     0,
     2038       0,     0,   286,     0,  1385,    48,     0,     0,   287,     0,
     2039       0,   353,   288,     0,   350,   289,   290,   291,   292,    41,
     2040      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
     2041       0,     0,   698,     0,     0,     8,     9,    10,    11,    12,
     2042       0,     0,     0,   473,     0,   295,     0,   379,     0,   348,
     2043    1107,     0,     0,    45,    46,   297,   298,   299,   300,    78,
     2044       0,     0,     0,     0,    31,     0,   786,     0,     0,   473,
     2045       0,     0,   350,   216,   355,   353,     0,     0,     0,    78,
     2046       0,   937,     0,     0,   431,     0,   177,    78,     0,     0,
     2047       0,     0,    34,   348,   348,   348,     0,    37,     0,   184,
     2048     185,    40,     0,     0,     0,   355,   260,   712,    41,    42,
     2049       0,   348,   967,     0,   214,     0,     0,     0,     0,   353,
     2050     353,   353,     0,   355,     0,    78,     0,     8,     9,    10,
     2051      11,    12,     0,     0,   600,     0,   601,   353,     0,     0,
     2052       0,     0,    45,    46,     0,     0,     0,     0,  1107,     0,
     2053       0,   698,     0,     0,     0,   353,    31,     0,     0,     0,
     2054       0,   698,     0,   350,     0,   627,    75,   355,  1002,   348,
     2055     627,   805,     0,     0,     0,   698,     0,     0,     0,  1481,
     2056       0,  1481,     0,     0,    34,  1013,     0,     0,     0,    37,
     2057       0,     0,    75,    40,     0,   353,     0,     0,     0,     0,
     2058      41,    42,     0,     0,     0,     0,     0,     0,     0,   214,
     2059       0,    80,     0,     0,     0,  1481,     0,  1481,     0,     0,
     2060       0,     0,     0,     0,     0,     0,    43,     0,     0,     0,
     2061     353,   355,     0,     0,    45,    46,    66,     0,    87,     0,
     2062     413,     0,     0,    80,   323,     0,     0,   421,     0,     0,
     2063       0,     0,     0,     0,     0,     0,     0,     0,   627,   216,
     2064     348,     0,     0,     0,     0,   260,   712,     0,   348,  1085,
     2065      87,     0,     0,     0,   353,   355,   355,   355,     0,     0,
     2066     225,     0,     0,     0,   353,     0,   353,     0,     0,     0,
     2067       0,   223,     0,   355,   353,  1099,     0,     0,   353,     0,
     2068       0,     0,     0,   431,   118,     0,     0,   226,     0,     0,
     2069       0,   355,     0,     0,     0,     0,     0,     0,     0,   413,
     2070       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
     2071       0,     0,     0,    57,     0,     0,     0,     0,     0,     0,
     2072       0,     0,     0,     0,     0,     0,     0,     0,    78,     0,
     2073       0,   355,     0,     0,   216,     0,     0,     0,     0,    75,
     2074       0,   594,     0,     0,     0,     0,     0,     0,   356,     0,
     2075       0,     0,     0,   576,   429,     0,     0,     0,     0,   698,
     2076     698,   580,   350,   350,   583,     0,   355,     0,     0,   353,
     2077       0,     0,     0,     0,     0,   363,     0,   177,     0,     0,
     2078       0,    57,  1188,     0,     0,   206,     2,   207,     4,     5,
     2079       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2080      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2081     355,     0,    26,    27,    28,     0,     0,   698,   698,     0,
     2082     355,    31,   355,     0,     0,     0,     0,   224,   413,     0,
     2083     355,     0,   421,     0,   355,     0,     0,     0,     0,     0,
     2084       0,     0,     0,    80,     0,     0,     0,     0,    80,    34,
     2085       0,    35,     0,    36,    37,     0,   208,    39,    40,   348,
     2086     348,     0,     0,     0,   627,    41,    42,     0,     0,     0,
     2087      87,     0,     0,     0,     0,    87,     0,     0,     0,    57,
     2088       0,     0,   353,   353,     0,   353,   353,     0,   712,     0,
     2089       0,    43,     0,   209,     0,    78,     0,     0,     0,    45,
     2090      46,     0,     0,     0,     0,    75,     0,     0,     0,   413,
    20192091       0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
    2020        0,   353,     0,     0,     0,   594,     0,   413,     0,     0,
    2021      594,    31,     0,     0,   421,     0,   627,     0,     0,   350,
    2022      350,   350,     0,     0,    31,     0,   644,     0,   535,   536,
    2023      537,   538,   539,   540,   541,   542,   543,   544,   350,    34,
    2024        0,     0,     0,     0,     0,     0,     0,   927,   214,     0,
    2025        0,     0,    34,     0,   356,   916,   699,    37,     0,    78,
    2026      916,    40,   545,     0,    78,   353,     0,   473,    41,    42,
    2027        0,     0,     0,     0,     0,     0,     0,  1504,     0,  1504,
    2028        0,   752,     0,   411,     0,     0,   413,     0,   216,     0,
    2029       45,    46,     0,   473,    43,     0,   350,     0,     0,     0,
    2030        0,    48,    48,    45,    46,   942,     0,     0,   431,   353,
    2031      353,   353,   113,   113,  1504,     0,  1504,   895,     0,     0,
    2032        0,     0,     0,     0,     0,     0,   902,     0,   353,     0,
    2033      904,     0,   260,   713,     0,     0,     0,     0,   974,     0,
    2034      576,   993,     0,     0,     0,     0,   353,     0,   580,    80,
    2035      113,   583,     0,     0,    80,   703,   703,    75,   224,     0,
    2036        0,     0,     0,     0,     8,     9,    10,    11,    12,     0,
    2037        0,     0,     0,   704,   704,     0,     0,     0,   699,     0,
    2038        0,     0,     0,    75,     0,     0,   353,     0,   699,     0,
    2039      350,     0,   627,    31,     0,  1010,     0,   627,   809,     0,
    2040        0,     0,   699,     0,     8,     9,    10,    11,    12,     0,
    2041       48,   113,  1021,   703,   703,   413,     0,     0,  1037,   421,
    2042      113,    34,     0,   353,     0,    78,    37,     0,   184,   185,
    2043       40,   704,   704,    31,     0,    48,    48,    41,    42,     0,
    2044      355,     0,     0,     0,     0,    78,     0,     0,   225,   214,
    2045        0,     0,     0,    78,     0,     0,     0,     0,   112,     0,
    2046       48,    34,   927,  1528,    66,   411,     0,     0,   353,     0,
    2047        0,   355,    45,    46,     0,     0,     0,   216,   353,     0,
    2048      353,     0,     0,     0,     0,   223,   627,     0,   353,   355,
    2049        0,    78,   353,   260,   713,     0,   413,  1093,     0,     0,
    2050        0,     0,     0,   937,     0,   601,     0,   927,     0,   799,
    2051      800,     0,    45,    46,     0,    80,    37,     0,   184,   185,
    2052       40,     0,     0,  1107,     0,     0,     0,    41,    42,     0,
    2053      356,   431,   118,   355,   896,    80,     0,     0,   833,     0,
    2054        0,   836,   837,    80,   840,  1149,   842,   843,     0,   350,
    2055     1087,   844,   845,  1528,    75,   411,     0,     0,     0,     0,
    2056        0,   356,    45,    46,  1326,     0,     0,     0,     0,     0,
    2057        0,     0,     0,     0,     0,   216,     0,     0,     0,   356,
    2058        0,    80,  1327,     0,   353,     0,     0,   576,   576,    57,
    2059       57,     0,   594,     0,     0,     0,  1037,   355,     0,   703,
    2060        0,     0,     0,     0,     0,   429,     0,   703,   703,   703,
    2061      699,   699,     0,   350,   350,     0,     0,   704,     0,     0,
    2062        0,    57,     0,   356,     0,   704,   704,   704,     0,     0,
    2063        0,     0,     0,  1199,     0,     0,     0,     0,   214,   353,
    2064        0,   355,   355,   355,     0,     0,     0,     0,     0,     0,
    2065        0,     0,     0,     0,     0,    57,   995,     0,    57,     0,
    2066      355,     0,     0,     0,     0,     0,  1000,     0,   699,   699,
    2067        0,     0,     0,   703,     0,   888,   927,     0,   355,   891,
    2068     1012,     0,     0,     0,     0,     0,     0,   356,     0,    78,
    2069      479,   704,   976,   977,     0,     0,     0,     0,     0,     0,
    2070      353,   353,     0,   353,   353,     0,  1214,     0,     0,     0,
    2071      465,     0,     0,     0,     0,    78,     0,   627,   355,     0,
    2072        0,     0,     0,    75,     0,     0,     0,     0,     0,     0,
    2073        0,   356,   356,   356,     0,     0,   214,     0,     0,   927,
    2074      927,     0,   713,     0,    87,     0,   348,     0,     0,     0,
    2075      356,     0,     0,     0,     0,   355,     0,     0,   353,   353,
    2076        0,     0,     0,     0,     0,     0,     0,     0,   356,     8,
    2077        9,    10,    11,    12,     0,     0,    87,     0,     0,    80,
    2078        0,     0,     0,     0,     0,  1297,     0,     0,     0,     0,
     2092       0,     0,     0,     0,     0,   355,     0,     0,     0,     0,
     2093       0,  1283,     0,     0,     0,     0,     0,     0,     0,     0,
     2094     353,   353,   225,     0,    31,     0,     0,   177,     0,   260,
     2095       0,     0,     0,    66,     0,     0,     0,     0,     0,     0,
     2096       0,     0,     0,     0,     0,   698,     0,   712,     0,   226,
     2097       0,   118,    34,     0,     0,     0,     0,    37,     0,   184,
     2098     185,    40,     0,     0,     0,   127,   127,   127,    41,    42,
     2099       0,     0,     0,     0,     0,     0,     0,   698,     0,     0,
     2100     576,   576,     0,     0,     0,   698,   698,   698,     0,    80,
     2101       0,   353,     0,     0,   186,     0,   350,   350,     0,     0,
     2102       0,     0,    45,    46,   356,     0,     0,    57,    57,    80,
     2103    1188,     0,     0,     0,     0,     0,    87,    80,   355,   355,
     2104       0,   355,   355,     0,     0,     0,     0,     0,     0,     0,
     2105      57,   363,     0,     0,   223,   356,    87,     0,   127,     0,
     2106     127,    78,     0,   118,    87,     0,     0,     0,    57,   698,
     2107       0,     0,     0,   356,     0,    80,    75,     0,     0,     0,
     2108       0,     0,   363,     0,     0,   276,     0,   883,   353,     0,
     2109     353,   886,     0,     0,     0,     0,   355,   355,     0,     0,
     2110     363,     0,    87,     0,     0,     0,     0,     0,     0,     0,
     2111       0,     0,     0,   348,   348,     0,     0,   356,     0,     0,
     2112     353,     0,    57,     0,     0,     0,     0,    57,   353,   353,
     2113     353,     0,     0,     0,     0,     0,   350,     0,     0,   353,
     2114     353,   127,     0,     0,   363,     0,     0,     0,     0,   127,
     2115       0,   127,   127,    75,     0,     0,   127,     0,   127,   127,
     2116      57,   118,     0,   168,     0,   173,     0,   355,   179,   180,
     2117     181,     0,   183,     0,     0,     0,     0,     0,     0,     0,
     2118       0,   356,     0,  1188,     0,     0,     0,   234,     0,     0,
     2119    1188,     0,   353,     0,     0,     0,     0,     0,     0,   249,
     2120     250,     0,     0,     0,   125,   128,   129,     0,   363,     0,
     2121     224,     0,     0,     0,     0,     0,     8,     9,    10,    11,
     2122      12,     0,     0,   576,     0,   356,   356,   356,   127,     0,
     2123       0,     0,    78,   348,     0,     0,     0,     0,     0,     0,
     2124       0,  1188,     0,   356,   355,    31,   355,     0,  1530,     0,
     2125       0,     0,   363,   363,   363,     0,     0,     0,    57,   353,
     2126       0,   356,     0,     0,     0,     0,     0,     0,     0,     0,
     2127     363,     0,    80,    34,     0,     0,   355,   255,    37,   256,
     2128      57,     0,    40,     0,   355,   355,   355,    57,   363,    41,
     2129      42,     0,     0,     0,     0,   355,   355,     0,    80,    87,
     2130       0,   356,     0,     0,     0,     0,    75,     0,     0,    78,
     2131       0,     0,     0,    75,     0,   718,     0,     0,     0,     0,
     2132       0,     0,     0,    45,    46,    87,     0,     0,   363,     8,
     2133       9,    10,    11,    12,     0,     0,   356,     0,    57,     0,
     2134       0,   413,     0,     0,     0,     0,     0,     0,   355,     0,
    20792135       0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
    2080      355,     0,     0,   260,     0,    80,     0,    66,   356,     0,
    2081      355,    57,   355,   226,   576,     0,     0,   224,     0,   699,
    2082      355,   713,     0,     0,   355,   118,    34,     0,     0,     0,
    2083        0,    37,   353,   184,   185,    40,     0,     0,     0,     0,
    2084        0,    57,    41,    42,     0,   356,     0,     0,     0,     0,
    2085        0,     0,     0,     0,   699,     0,  1098,     0,     0,     0,
    2086        0,     0,   699,   699,   699,     0,     0,     0,   186,     0,
    2087        0,     0,     0,   350,   350,   223,     0,    45,    46,     0,
    2088        0,     0,     0,     0,     0,     0,    78,  1199,  1177,  1178,
    2089      356,     0,     0,     0,     0,     0,     0,    75,     0,     0,
    2090      356,   363,   356,     0,     0,     0,     0,   225,     0,   353,
    2091      356,   353,     0,     0,   356,     0,   355,     0,     0,     0,
    2092      118,     0,     0,     0,   112,     0,     0,     0,   699,     0,
    2093        0,     0,     0,   413,     0,     0,     0,     0,     0,     0,
    2094        0,     0,     0,     0,   353,     0,  1227,  1228,     0,     0,
    2095      927,     0,   353,   353,   353,     0,     0,     0,  1384,     0,
    2096        0,     0,     0,   353,   353,     0,     0,     0,   927,     0,
    2097      742,   355,     0,     0,     0,     0,    80,    75,     0,     0,
    2098        0,     0,     0,     0,     0,   763,     0,     0,   742,     0,
    2099      769,   742,     0,     0,     0,     0,    87,     0,   350,     0,
    2100        0,    87,   127,   127,   127,     0,   356,     0,     0,     0,
    2101        0,     0,     0,  1153,     0,     0,     0,     0,   353,     0,
    2102     1229,     0,   348,   118,     0,     0,     0,     0,     0,     0,
    2103     1165,     0,   355,   355,     0,   355,   355,     0,     0,   465,
    2104        0,   927,   927,     0,   168,     0,   173,  1199,     0,   179,
    2105      180,   181,     0,   183,  1199,    78,     0,     0,     0,     0,
    2106        0,   356,     0,     0,     0,     0,     0,     0,   234,     0,
    2107        0,     0,     0,    57,     0,   127,     0,   127,     0,     0,
    2108      249,   250,     0,     0,     0,     0,     0,     0,   353,     0,
    2109      355,   355,     0,     0,     0,   226,     0,     0,     0,     0,
    2110        0,     0,   276,     0,     0,     0,     0,  1199,   413,     0,
    2111        0,   883,     0,   885,  1553,   348,     0,  1501,     0,  1505,
    2112        0,     0,   356,   356,     0,   356,   356,     0,     0,     0,
    2113        0,     0,  1354,     0,     0,     0,     0,    75,     0,     0,
    2114     1356,  1357,  1358,     0,    75,    80,     0,     0,     0,     0,
    2115     1255,     0,  1318,     0,  1534,     0,  1536,     0,   127,     0,
    2116        0,     0,    87,   932,   355,     0,   127,     0,   127,   127,
    2117        0,     0,     0,   127,     0,   127,   127,   363,     0,   348,
    2118      356,   356,    87,     0,     0,     0,     0,     0,     0,     0,
    2119       87,     0,     0,     0,     0,     0,     0,    75,     0,  1565,
    2120        0,  1566,     0,     0,     0,     0,  1404,   224,   363,     8,
    2121        9,    10,    11,    12,  1573,  1574,     0,     0,     0,     0,
    2122        0,     0,     0,   348,   348,   348,   363,     0,    87,    78,
    2123        0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
    2124        0,   355,   348,   355,     0,   127,     0,     0,     8,     9,
    2125       10,    11,    12,     0,   356,     0,     0,     0,     0,     0,
     2136     396,     0,     0,   363,    75,     0,     0,     0,     0,     0,
     2137     415,   416,     0,     0,     0,   420,     0,   422,   423,     0,
     2138     356,     0,     0,     0,     0,     0,    34,     0,     0,     0,
     2139     356,    37,   356,   184,   185,    40,     0,   225,     0,     0,
     2140     356,     0,    41,    42,   356,     0,     0,   363,     0,     8,
     2141       9,    10,    11,    12,     0,   355,     0,   363,  1142,   363,
     2142       0,     0,     0,     0,   226,     0,     0,   363,   905,     0,
     2143     411,   363,     0,     0,     0,  1154,    45,    46,    31,     0,
     2144       0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
     2145       0,     0,     0,     0,   591,     0,   599,     0,     0,     0,
     2146       0,     0,    78,     0,     0,    80,    34,   623,   624,    78,
     2147      31,    37,     0,   184,   185,    40,     0,     0,     0,     0,
     2148       0,     0,    41,    42,     0,     0,     0,     0,     0,     0,
     2149       0,     0,    87,     0,     0,   356,     0,     0,    34,     0,
     2150       0,     0,     0,    37,     0,   184,   185,    40,  1505,     0,
     2151     411,     0,     0,   413,    41,    42,    45,    46,     0,     0,
     2152      78,     0,   363,     0,     0,     0,     0,     0,     0,     0,
     2153       0,     0,     0,   127,   127,     0,     0,     0,     0,     0,
     2154     266,     0,     0,     0,     0,     0,     0,     0,    45,    46,
     2155       0,     0,     0,  1242,     0,     0,     0,     0,     0,     0,
     2156       0,     0,   127,     0,     0,   127,   127,     0,   127,     0,
     2157     127,   127,     0,     0,     0,   127,   127,     1,     2,   207,
     2158       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2159      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2160      24,    25,  -291,     0,    26,    27,    28,    29,   356,   356,
     2161      30,   356,   356,    31,     0,     0,     0,     0,     0,     0,
     2162       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2163       0,    80,     0,     0,     0,   363,   363,     0,   363,   363,
     2164       0,    34,     0,    35,     0,    36,     0,     0,    38,    39,
     2165       0,     0,  -291,     0,     0,     0,  1012,     0,    87,     8,
     2166       9,    10,    11,    12,     0,     0,   356,   356,     0,     0,
     2167       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2168       0,     0,     0,     0,     0,    44,   283,   284,    31,   285,
     2169       0,    45,    46,   363,   363,     0,     0,     0,     0,     0,
     2170       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2171       0,     0,     0,   127,   127,   286,    34,     0,     0,     0,
     2172       0,   287,     0,     0,     0,   288,     0,     0,   289,   290,
     2173     291,   292,    41,    42,     0,   293,   294,   356,     0,     0,
     2174       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2175       0,     0,   795,   796,     0,     0,     0,     0,   295,     0,
     2176     379,     0,     0,     0,   363,     0,   344,    46,   297,   298,
     2177     299,   300,     0,     0,     0,     0,     0,     0,     0,     0,
     2178     225,   829,     0,     0,   832,   833,     0,   836,     0,   838,
     2179     839,     0,     0,     0,   840,   841,     0,     0,     0,     0,
     2180       0,     0,    80,     0,     0,     0,     0,   226,     0,   925,
     2181       0,   926,     0,     0,   356,     0,   356,     0,   929,   930,
     2182       0,     0,     0,   935,     0,     0,     0,     0,     0,    87,
     2183       0,     0,     0,     0,     0,   940,     0,     0,     0,     0,
     2184     944,   363,     0,   363,     0,     0,   356,     0,     0,     0,
     2185       0,     0,     0,     0,   356,   356,   356,     0,     0,     0,
     2186       0,     0,     0,     0,     0,   356,   356,     0,   978,     0,
     2187     127,     0,     0,   363,     0,   127,     0,     0,     0,    80,
     2188       0,   363,   363,   363,     0,     0,     0,     0,     0,     0,
     2189       0,     0,   363,   363,     0,     0,     0,     0,     0,     0,
     2190       0,     0,     0,     0,     0,     0,    87,     0,     0,     0,
     2191       0,     0,     0,     0,     0,     0,     0,     0,   356,     0,
     2192       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2193     166,     0,   969,   970,     0,     0,     0,     0,     0,     0,
     2194       0,     0,     0,     0,     0,   363,     0,   219,     0,     0,
     2195    1162,     0,     0,     8,     9,    10,    11,    12,     0,     0,
     2196       0,     0,     0,     0,     0,     0,     0,  1023,  1024,  1025,
     2197    1026,     0,  1028,     0,     0,     0,     0,     0,     0,     0,
     2198     283,   284,    31,   285,     0,   356,     0,  1072,     0,     0,
     2199       0,     0,     0,     0,     0,   166,     0,     0,     0,   273,
     2200       0,  1078,     0,     0,     0,     0,     0,     0,     0,   286,
     2201      34,     0,   363,     0,     0,   287,     0,     0,     0,   288,
     2202       0,     0,   289,   290,   291,   292,    41,    42,   166,   293,
     2203     294,     0,    80,     0,     0,     0,   127,     0,   369,    80,
     2204       0,  1098,   375,     0,     0,     0,     0,     0,     0,     0,
     2205       0,     0,   295,     0,   379,     0,     0,     0,     0,    87,
     2206    1163,    46,   297,   298,   299,   300,    87,     8,     9,    10,
     2207      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2208      21,    22,    23,    24,    25,     0,  1129,    26,    27,    28,
     2209      80,   166,  1136,     0,  1090,     0,    31,  1140,     0,     0,
     2210       0,     0,  1144,   219,  1145,     0,     0,     0,  1147,     0,
     2211    1148,  1149,     0,     0,  1152,     0,     0,    87,     0,     0,
     2212       0,   166,     0,  1164,    34,     0,     0,     0,     0,     0,
     2213       0,   208,    39,     0,     0,     0,     0,     0,     0,     0,
     2214       0,  1179,  1180,     0,     0,     0,   375,     0,     0,     0,
     2215       0,     0,     0,   166,     0,     0,     0,     0,     0,     0,
     2216       0,     0,     0,     0,     0,   127,     0,     0,  1210,     0,
     2217       0,  1212,     0,     0,    45,    46,   524,     0,     0,     0,
     2218       0,     0,     0,     0,     0,     0,     0,     0,   166,     0,
     2219       0,     0,     0,     0,   212,     0,     0,     0,     0,     0,
     2220       0,     0,     0,     0,   232,     0,   236,     0,   238,     0,
     2221       0,     0,     0,     0,  1226,   247,     0,     0,     0,     0,
     2222    1230,  1231,     0,     0,     0,     0,   597,     0,     0,     0,
     2223       0,   621,     0,     0,     0,     0,     0,     0,     0,     0,
     2224    1247,     0,     0,  1251,     0,     0,   212,  1253,   236,   238,
     2225     247,     0,     0,     0,     0,  1218,     0,     0,     0,     0,
     2226    1261,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2227       0,     0,     0,  1268,     0,  1270,  1271,  1272,  1273,     0,
     2228       0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
     2229       0,  1280,     0,  1281,     0,     0,     0,   173,     0,     0,
     2230       0,     0,     0,     0,     0,     0,     0,   166,   166,     0,
     2231       0,     0,     0,     0,   369,     0,     0,     0,     0,     0,
     2232       0,     0,     0,     0,     0,     0,  1309,  1310,     0,     0,
     2233       0,     0,     0,     0,     0,   524,     0,     0,     0,     0,
     2234       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2235     212,     0,   236,   238,   247,     0,     0,     0,     0,     0,
     2236       0,     0,     0,   715,     0,     0,     0,     0,     0,     0,
     2237       0,     0,     0,     0,     0,   166,  1342,  1343,     0,     0,
     2238       0,     0,     0,     0,  1304,     0,  1353,   524,   212,   524,
     2239       0,     0,   524,   212,   166,   524,     0,     0,     0,     0,
     2240       0,     0,     0,     0,     0,     0,     0,   369,   497,     0,
     2241       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2242       0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
     2243      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2244      24,    25,  -291,     0,    26,    27,    28,  1388,     0,  1389,
     2245    1390,  1391,     0,    31,     0,     0,   212,     0,     0,   166,
     2246       0,  1395,     0,     0,     0,     0,     0,     0,     0,     0,
     2247    1406,   369,     0,     0,     0,   810,     0,     0,   212,     0,
     2248       0,    34,     0,   236,   238,     0,    37,     0,   336,   337,
     2249      40,   247,  -291,     0,     0,  1427,     0,    41,    42,     0,
     2250       0,   597,     0,     0,   321,     0,   597,     0,     0,     0,
     2251       0,     0,     0,     0,   346,   369,   369,   369,     0,   157,
     2252       0,     0,     0,   634,     0,   338,   382,   382,     0,     0,
     2253       0,    45,    46,   369,   212,     0,     0,     0,  1465,  1466,
     2254       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2255       0,  1471,   212,     0,     0,     0,     0,   212,  1471,   212,
     2256     283,   284,     0,   285,     0,   524,     0,   252,     0,     0,
     2257       0,     0,     0,     0,     0,     0,   212,   257,     0,   212,
     2258     212,     0,     0,     0,     0,     0,     0,   212,     0,   286,
     2259    1504,   369,     0,   934,  1510,   287,     0,   321,     0,   288,
     2260       0,   212,   289,   290,   291,   292,    41,    42,   212,   293,
     2261     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2262       0,   478,  1532,     0,  1533,     0,   715,     0,     0,     0,
     2263       0,     0,   295,   157,   379,     0,     0,   380,     0,     0,
     2264      45,    46,   297,   298,   299,   300,     0,   386,     0,     0,
     2265       0,     0,  1548,  1549,     0,     0,     0,     0,     0,     0,
     2266    1552,  1553,     0,     0,     0,     0,     0,     0,     0,     0,
     2267     418,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2268       0,     0,   369,     0,   433,     0,   621,     0,     0,     0,
     2269     369,     0,     0,   438,     0,     0,     0,     0,     0,     0,
     2270       0,     0,     0,   446,     0,     0,     0,     0,     0,     0,
     2271       0,     0,     0,     0,   283,   284,     0,   285,     0,     0,
     2272       0,     0,   212,     0,     0,     0,     0,     0,   464,     0,
     2273       0,     0,     0,   474,     0,     0,     0,   382,     0,     0,
     2274       0,     0,     0,   286,     0,     0,   482,     0,     0,   287,
     2275     212,     0,   492,   288,   496,   212,   289,   290,   291,   292,
     2276      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
     2277       0,   526,     0,     0,     0,     0,     0,     0,     0,     0,
     2278       0,     0,     0,     0,     0,   715,   295,     0,   379,     0,
     2279       0,     0,     0,   757,    45,    46,   297,   298,   299,   300,
     2280     524,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2281       0,     0,     0,   585,     0,     0,     0,     0,   590,     0,
     2282       0,     0,     0,     0,   166,     0,   212,     0,     0,     0,
     2283       0,   709,     0,     0,     0,     0,     0,     0,     0,     0,
     2284     212,     0,     0,     0,     0,     0,     0,   635,     0,     0,
     2285       0,   636,   637,     0,   639,     0,     0,     0,     0,     0,
     2286     497,   650,   651,     0,   652,   653,     0,   654,     0,   655,
     2287     741,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2288     597,     0,     0,   758,     0,     0,   585,     0,   741,     0,
     2289       0,   741,     0,     0,   670,     0,     0,     0,     0,     0,
     2290       0,   369,   369,   767,     0,     0,     0,     0,     0,     0,
     2291       0,     0,     0,    &nb