This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
index/value array slice operation
authorRuslan Zakirov <ruz@bestpractical.com>
Sat, 2 Mar 2013 12:57:41 +0000 (16:57 +0400)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 13 Sep 2013 08:25:34 +0000 (01:25 -0700)
kvaslice operator that imlements %a[0,2,4] syntax which
result in list of index/value pairs. Implemented in
consistency with "key/value hash slice" operator.

12 files changed:
dist/B-Deparse/Deparse.pm
op.c
opcode.h
opnames.h
perly.act
perly.h
perly.tab
perly.y
pp.c
pp_proto.h
regen/opcodes
toke.c

index 6aa8847..7816b9d 100644 (file)
@@ -3573,6 +3573,7 @@ sub slice {
 }
 
 sub pp_aslice   { maybe_local(@_, slice(@_, "[", "]", "rv2av", "padav")) }
+sub pp_kvaslice {                 slice(@_, "[", "]", "rv2av", "padav")  }
 sub pp_hslice   { maybe_local(@_, slice(@_, "{", "}", "rv2hv", "padhv")) }
 sub pp_kvhslice {                 slice(@_, "{", "}", "rv2hv", "padhv")  }
 
diff --git a/op.c b/op.c
index d457d43..aa6c50d 100644 (file)
--- a/op.c
+++ b/op.c
@@ -1276,6 +1276,7 @@ Perl_scalarvoid(pTHX_ OP *o)
     case OP_AELEMFAST:
     case OP_AELEMFAST_LEX:
     case OP_ASLICE:
+    case OP_KVASLICE:
     case OP_HELEM:
     case OP_HSLICE:
     case OP_KVHSLICE:
@@ -2063,6 +2064,7 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
        PL_modcount = RETURN_UNLIMITED_NUMBER;
        break;
     case OP_KVHSLICE:
+    case OP_KVASLICE:
        if (type == OP_LEAVESUBLV)
            o->op_private |= OPpMAYBE_LVSUB;
         goto nomod;
@@ -5354,7 +5356,8 @@ S_is_list_assignment(pTHX_ const OP *o)
 
     if (type == OP_LIST || flags & OPf_PARENS ||
        type == OP_RV2AV || type == OP_RV2HV ||
-       type == OP_ASLICE || type == OP_HSLICE || type == OP_KVHSLICE)
+       type == OP_ASLICE || type == OP_HSLICE ||
+        type == OP_KVASLICE || type == OP_KVHSLICE)
        return TRUE;
 
     if (type == OP_PADAV || type == OP_PADHV)
@@ -6562,6 +6565,7 @@ S_ref_array_or_hash(pTHX_ OP *cond)
 
     else if(cond
     && (cond->op_type == OP_ASLICE
+    ||  cond->op_type == OP_KVASLICE
     ||  cond->op_type == OP_HSLICE
     ||  cond->op_type == OP_KVHSLICE)) {
 
@@ -8044,11 +8048,13 @@ Perl_oopsAV(pTHX_ OP *o)
 
     switch (o->op_type) {
     case OP_PADSV:
+    case OP_PADHV:
        o->op_type = OP_PADAV;
        o->op_ppaddr = PL_ppaddr[OP_PADAV];
        return ref(o, OP_RV2AV);
 
     case OP_RV2SV:
+    case OP_RV2HV:
        o->op_type = OP_RV2AV;
        o->op_ppaddr = PL_ppaddr[OP_RV2AV];
        ref(o, OP_RV2AV);
@@ -8302,6 +8308,9 @@ Perl_ck_delete(pTHX_ OP *o)
            /* FALL THROUGH */
        case OP_HELEM:
            break;
+       case OP_KVASLICE:
+           Perl_croak(aTHX_ "%s argument is index/value array slice, use array slice",
+                 OP_DESC(o));
        case OP_KVHSLICE:
            Perl_croak(aTHX_ "%s argument is key/value hash slice, use hash slice",
                  OP_DESC(o));
index b91e7ad..0770646 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -280,6 +280,7 @@ EXTCONST char* const PL_op_name[] = {
        "aelemfast_lex",
        "aelem",
        "aslice",
+       "kvaslice",
        "aeach",
        "akeys",
        "avalues",
@@ -666,6 +667,7 @@ EXTCONST char* const PL_op_desc[] = {
        "constant lexical array element",
        "array element",
        "array slice",
+       "index/value array slice",
        "each on array",
        "keys on array",
        "values on array",
@@ -1066,6 +1068,7 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
        Perl_pp_aelemfast_lex,  /* implemented by Perl_pp_aelemfast */
        Perl_pp_aelem,
        Perl_pp_aslice,
+       Perl_pp_kvaslice,
        Perl_pp_aeach,
        Perl_pp_akeys,
        Perl_pp_avalues,        /* implemented by Perl_pp_akeys */
@@ -1462,6 +1465,7 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */
        Perl_ck_null,           /* aelemfast_lex */
        Perl_ck_null,           /* aelem */
        Perl_ck_null,           /* aslice */
+       Perl_ck_null,           /* kvaslice */
        Perl_ck_each,           /* aeach */
        Perl_ck_each,           /* akeys */
        Perl_ck_each,           /* avalues */
@@ -1852,6 +1856,7 @@ EXTCONST U32 PL_opargs[] = {
        0x00013040,     /* aelemfast_lex */
        0x00013204,     /* aelem */
        0x00023401,     /* aslice */
+       0x00023401,     /* kvaslice */
        0x00003b00,     /* aeach */
        0x00003b08,     /* akeys */
        0x00003b08,     /* avalues */
index d64a333..68ce927 100644 (file)
--- a/opnames.h
+++ b/opnames.h
@@ -146,256 +146,257 @@ typedef enum opcode {
        OP_AELEMFAST_LEX = 129,
        OP_AELEM         = 130,
        OP_ASLICE        = 131,
-       OP_AEACH         = 132,
-       OP_AKEYS         = 133,
-       OP_AVALUES       = 134,
-       OP_EACH          = 135,
-       OP_VALUES        = 136,
-       OP_KEYS          = 137,
-       OP_DELETE        = 138,
-       OP_EXISTS        = 139,
-       OP_RV2HV         = 140,
-       OP_HELEM         = 141,
-       OP_HSLICE        = 142,
-       OP_KVHSLICE      = 143,
-       OP_UNPACK        = 144,
-       OP_PACK          = 145,
-       OP_SPLIT         = 146,
-       OP_JOIN          = 147,
-       OP_LIST          = 148,
-       OP_LSLICE        = 149,
-       OP_ANONLIST      = 150,
-       OP_ANONHASH      = 151,
-       OP_SPLICE        = 152,
-       OP_PUSH          = 153,
-       OP_POP           = 154,
-       OP_SHIFT         = 155,
-       OP_UNSHIFT       = 156,
-       OP_SORT          = 157,
-       OP_REVERSE       = 158,
-       OP_GREPSTART     = 159,
-       OP_GREPWHILE     = 160,
-       OP_MAPSTART      = 161,
-       OP_MAPWHILE      = 162,
-       OP_RANGE         = 163,
-       OP_FLIP          = 164,
-       OP_FLOP          = 165,
-       OP_AND           = 166,
-       OP_OR            = 167,
-       OP_XOR           = 168,
-       OP_DOR           = 169,
-       OP_COND_EXPR     = 170,
-       OP_ANDASSIGN     = 171,
-       OP_ORASSIGN      = 172,
-       OP_DORASSIGN     = 173,
-       OP_METHOD        = 174,
-       OP_ENTERSUB      = 175,
-       OP_LEAVESUB      = 176,
-       OP_LEAVESUBLV    = 177,
-       OP_CALLER        = 178,
-       OP_WARN          = 179,
-       OP_DIE           = 180,
-       OP_RESET         = 181,
-       OP_LINESEQ       = 182,
-       OP_NEXTSTATE     = 183,
-       OP_DBSTATE       = 184,
-       OP_UNSTACK       = 185,
-       OP_ENTER         = 186,
-       OP_LEAVE         = 187,
-       OP_SCOPE         = 188,
-       OP_ENTERITER     = 189,
-       OP_ITER          = 190,
-       OP_ENTERLOOP     = 191,
-       OP_LEAVELOOP     = 192,
-       OP_RETURN        = 193,
-       OP_LAST          = 194,
-       OP_NEXT          = 195,
-       OP_REDO          = 196,
-       OP_DUMP          = 197,
-       OP_GOTO          = 198,
-       OP_EXIT          = 199,
-       OP_METHOD_NAMED  = 200,
-       OP_ENTERGIVEN    = 201,
-       OP_LEAVEGIVEN    = 202,
-       OP_ENTERWHEN     = 203,
-       OP_LEAVEWHEN     = 204,
-       OP_BREAK         = 205,
-       OP_CONTINUE      = 206,
-       OP_OPEN          = 207,
-       OP_CLOSE         = 208,
-       OP_PIPE_OP       = 209,
-       OP_FILENO        = 210,
-       OP_UMASK         = 211,
-       OP_BINMODE       = 212,
-       OP_TIE           = 213,
-       OP_UNTIE         = 214,
-       OP_TIED          = 215,
-       OP_DBMOPEN       = 216,
-       OP_DBMCLOSE      = 217,
-       OP_SSELECT       = 218,
-       OP_SELECT        = 219,
-       OP_GETC          = 220,
-       OP_READ          = 221,
-       OP_ENTERWRITE    = 222,
-       OP_LEAVEWRITE    = 223,
-       OP_PRTF          = 224,
-       OP_PRINT         = 225,
-       OP_SAY           = 226,
-       OP_SYSOPEN       = 227,
-       OP_SYSSEEK       = 228,
-       OP_SYSREAD       = 229,
-       OP_SYSWRITE      = 230,
-       OP_EOF           = 231,
-       OP_TELL          = 232,
-       OP_SEEK          = 233,
-       OP_TRUNCATE      = 234,
-       OP_FCNTL         = 235,
-       OP_IOCTL         = 236,
-       OP_FLOCK         = 237,
-       OP_SEND          = 238,
-       OP_RECV          = 239,
-       OP_SOCKET        = 240,
-       OP_SOCKPAIR      = 241,
-       OP_BIND          = 242,
-       OP_CONNECT       = 243,
-       OP_LISTEN        = 244,
-       OP_ACCEPT        = 245,
-       OP_SHUTDOWN      = 246,
-       OP_GSOCKOPT      = 247,
-       OP_SSOCKOPT      = 248,
-       OP_GETSOCKNAME   = 249,
-       OP_GETPEERNAME   = 250,
-       OP_LSTAT         = 251,
-       OP_STAT          = 252,
-       OP_FTRREAD       = 253,
-       OP_FTRWRITE      = 254,
-       OP_FTREXEC       = 255,
-       OP_FTEREAD       = 256,
-       OP_FTEWRITE      = 257,
-       OP_FTEEXEC       = 258,
-       OP_FTIS          = 259,
-       OP_FTSIZE        = 260,
-       OP_FTMTIME       = 261,
-       OP_FTATIME       = 262,
-       OP_FTCTIME       = 263,
-       OP_FTROWNED      = 264,
-       OP_FTEOWNED      = 265,
-       OP_FTZERO        = 266,
-       OP_FTSOCK        = 267,
-       OP_FTCHR         = 268,
-       OP_FTBLK         = 269,
-       OP_FTFILE        = 270,
-       OP_FTDIR         = 271,
-       OP_FTPIPE        = 272,
-       OP_FTSUID        = 273,
-       OP_FTSGID        = 274,
-       OP_FTSVTX        = 275,
-       OP_FTLINK        = 276,
-       OP_FTTTY         = 277,
-       OP_FTTEXT        = 278,
-       OP_FTBINARY      = 279,
-       OP_CHDIR         = 280,
-       OP_CHOWN         = 281,
-       OP_CHROOT        = 282,
-       OP_UNLINK        = 283,
-       OP_CHMOD         = 284,
-       OP_UTIME         = 285,
-       OP_RENAME        = 286,
-       OP_LINK          = 287,
-       OP_SYMLINK       = 288,
-       OP_READLINK      = 289,
-       OP_MKDIR         = 290,
-       OP_RMDIR         = 291,
-       OP_OPEN_DIR      = 292,
-       OP_READDIR       = 293,
-       OP_TELLDIR       = 294,
-       OP_SEEKDIR       = 295,
-       OP_REWINDDIR     = 296,
-       OP_CLOSEDIR      = 297,
-       OP_FORK          = 298,
-       OP_WAIT          = 299,
-       OP_WAITPID       = 300,
-       OP_SYSTEM        = 301,
-       OP_EXEC          = 302,
-       OP_KILL          = 303,
-       OP_GETPPID       = 304,
-       OP_GETPGRP       = 305,
-       OP_SETPGRP       = 306,
-       OP_GETPRIORITY   = 307,
-       OP_SETPRIORITY   = 308,
-       OP_TIME          = 309,
-       OP_TMS           = 310,
-       OP_LOCALTIME     = 311,
-       OP_GMTIME        = 312,
-       OP_ALARM         = 313,
-       OP_SLEEP         = 314,
-       OP_SHMGET        = 315,
-       OP_SHMCTL        = 316,
-       OP_SHMREAD       = 317,
-       OP_SHMWRITE      = 318,
-       OP_MSGGET        = 319,
-       OP_MSGCTL        = 320,
-       OP_MSGSND        = 321,
-       OP_MSGRCV        = 322,
-       OP_SEMOP         = 323,
-       OP_SEMGET        = 324,
-       OP_SEMCTL        = 325,
-       OP_REQUIRE       = 326,
-       OP_DOFILE        = 327,
-       OP_HINTSEVAL     = 328,
-       OP_ENTEREVAL     = 329,
-       OP_LEAVEEVAL     = 330,
-       OP_ENTERTRY      = 331,
-       OP_LEAVETRY      = 332,
-       OP_GHBYNAME      = 333,
-       OP_GHBYADDR      = 334,
-       OP_GHOSTENT      = 335,
-       OP_GNBYNAME      = 336,
-       OP_GNBYADDR      = 337,
-       OP_GNETENT       = 338,
-       OP_GPBYNAME      = 339,
-       OP_GPBYNUMBER    = 340,
-       OP_GPROTOENT     = 341,
-       OP_GSBYNAME      = 342,
-       OP_GSBYPORT      = 343,
-       OP_GSERVENT      = 344,
-       OP_SHOSTENT      = 345,
-       OP_SNETENT       = 346,
-       OP_SPROTOENT     = 347,
-       OP_SSERVENT      = 348,
-       OP_EHOSTENT      = 349,
-       OP_ENETENT       = 350,
-       OP_EPROTOENT     = 351,
-       OP_ESERVENT      = 352,
-       OP_GPWNAM        = 353,
-       OP_GPWUID        = 354,
-       OP_GPWENT        = 355,
-       OP_SPWENT        = 356,
-       OP_EPWENT        = 357,
-       OP_GGRNAM        = 358,
-       OP_GGRGID        = 359,
-       OP_GGRENT        = 360,
-       OP_SGRENT        = 361,
-       OP_EGRENT        = 362,
-       OP_GETLOGIN      = 363,
-       OP_SYSCALL       = 364,
-       OP_LOCK          = 365,
-       OP_ONCE          = 366,
-       OP_CUSTOM        = 367,
-       OP_REACH         = 368,
-       OP_RKEYS         = 369,
-       OP_RVALUES       = 370,
-       OP_COREARGS      = 371,
-       OP_RUNCV         = 372,
-       OP_FC            = 373,
-       OP_PADCV         = 374,
-       OP_INTROCV       = 375,
-       OP_CLONECV       = 376,
-       OP_PADRANGE      = 377,
+       OP_KVASLICE      = 132,
+       OP_AEACH         = 133,
+       OP_AKEYS         = 134,
+       OP_AVALUES       = 135,
+       OP_EACH          = 136,
+       OP_VALUES        = 137,
+       OP_KEYS          = 138,
+       OP_DELETE        = 139,
+       OP_EXISTS        = 140,
+       OP_RV2HV         = 141,
+       OP_HELEM         = 142,
+       OP_HSLICE        = 143,
+       OP_KVHSLICE      = 144,
+       OP_UNPACK        = 145,
+       OP_PACK          = 146,
+       OP_SPLIT         = 147,
+       OP_JOIN          = 148,
+       OP_LIST          = 149,
+       OP_LSLICE        = 150,
+       OP_ANONLIST      = 151,
+       OP_ANONHASH      = 152,
+       OP_SPLICE        = 153,
+       OP_PUSH          = 154,
+       OP_POP           = 155,
+       OP_SHIFT         = 156,
+       OP_UNSHIFT       = 157,
+       OP_SORT          = 158,
+       OP_REVERSE       = 159,
+       OP_GREPSTART     = 160,
+       OP_GREPWHILE     = 161,
+       OP_MAPSTART      = 162,
+       OP_MAPWHILE      = 163,
+       OP_RANGE         = 164,
+       OP_FLIP          = 165,
+       OP_FLOP          = 166,
+       OP_AND           = 167,
+       OP_OR            = 168,
+       OP_XOR           = 169,
+       OP_DOR           = 170,
+       OP_COND_EXPR     = 171,
+       OP_ANDASSIGN     = 172,
+       OP_ORASSIGN      = 173,
+       OP_DORASSIGN     = 174,
+       OP_METHOD        = 175,
+       OP_ENTERSUB      = 176,
+       OP_LEAVESUB      = 177,
+       OP_LEAVESUBLV    = 178,
+       OP_CALLER        = 179,
+       OP_WARN          = 180,
+       OP_DIE           = 181,
+       OP_RESET         = 182,
+       OP_LINESEQ       = 183,
+       OP_NEXTSTATE     = 184,
+       OP_DBSTATE       = 185,
+       OP_UNSTACK       = 186,
+       OP_ENTER         = 187,
+       OP_LEAVE         = 188,
+       OP_SCOPE         = 189,
+       OP_ENTERITER     = 190,
+       OP_ITER          = 191,
+       OP_ENTERLOOP     = 192,
+       OP_LEAVELOOP     = 193,
+       OP_RETURN        = 194,
+       OP_LAST          = 195,
+       OP_NEXT          = 196,
+       OP_REDO          = 197,
+       OP_DUMP          = 198,
+       OP_GOTO          = 199,
+       OP_EXIT          = 200,
+       OP_METHOD_NAMED  = 201,
+       OP_ENTERGIVEN    = 202,
+       OP_LEAVEGIVEN    = 203,
+       OP_ENTERWHEN     = 204,
+       OP_LEAVEWHEN     = 205,
+       OP_BREAK         = 206,
+       OP_CONTINUE      = 207,
+       OP_OPEN          = 208,
+       OP_CLOSE         = 209,
+       OP_PIPE_OP       = 210,
+       OP_FILENO        = 211,
+       OP_UMASK         = 212,
+       OP_BINMODE       = 213,
+       OP_TIE           = 214,
+       OP_UNTIE         = 215,
+       OP_TIED          = 216,
+       OP_DBMOPEN       = 217,
+       OP_DBMCLOSE      = 218,
+       OP_SSELECT       = 219,
+       OP_SELECT        = 220,
+       OP_GETC          = 221,
+       OP_READ          = 222,
+       OP_ENTERWRITE    = 223,
+       OP_LEAVEWRITE    = 224,
+       OP_PRTF          = 225,
+       OP_PRINT         = 226,
+       OP_SAY           = 227,
+       OP_SYSOPEN       = 228,
+       OP_SYSSEEK       = 229,
+       OP_SYSREAD       = 230,
+       OP_SYSWRITE      = 231,
+       OP_EOF           = 232,
+       OP_TELL          = 233,
+       OP_SEEK          = 234,
+       OP_TRUNCATE      = 235,
+       OP_FCNTL         = 236,
+       OP_IOCTL         = 237,
+       OP_FLOCK         = 238,
+       OP_SEND          = 239,
+       OP_RECV          = 240,
+       OP_SOCKET        = 241,
+       OP_SOCKPAIR      = 242,
+       OP_BIND          = 243,
+       OP_CONNECT       = 244,
+       OP_LISTEN        = 245,
+       OP_ACCEPT        = 246,
+       OP_SHUTDOWN      = 247,
+       OP_GSOCKOPT      = 248,
+       OP_SSOCKOPT      = 249,
+       OP_GETSOCKNAME   = 250,
+       OP_GETPEERNAME   = 251,
+       OP_LSTAT         = 252,
+       OP_STAT          = 253,
+       OP_FTRREAD       = 254,
+       OP_FTRWRITE      = 255,
+       OP_FTREXEC       = 256,
+       OP_FTEREAD       = 257,
+       OP_FTEWRITE      = 258,
+       OP_FTEEXEC       = 259,
+       OP_FTIS          = 260,
+       OP_FTSIZE        = 261,
+       OP_FTMTIME       = 262,
+       OP_FTATIME       = 263,
+       OP_FTCTIME       = 264,
+       OP_FTROWNED      = 265,
+       OP_FTEOWNED      = 266,
+       OP_FTZERO        = 267,
+       OP_FTSOCK        = 268,
+       OP_FTCHR         = 269,
+       OP_FTBLK         = 270,
+       OP_FTFILE        = 271,
+       OP_FTDIR         = 272,
+       OP_FTPIPE        = 273,
+       OP_FTSUID        = 274,
+       OP_FTSGID        = 275,
+       OP_FTSVTX        = 276,
+       OP_FTLINK        = 277,
+       OP_FTTTY         = 278,
+       OP_FTTEXT        = 279,
+       OP_FTBINARY      = 280,
+       OP_CHDIR         = 281,
+       OP_CHOWN         = 282,
+       OP_CHROOT        = 283,
+       OP_UNLINK        = 284,
+       OP_CHMOD         = 285,
+       OP_UTIME         = 286,
+       OP_RENAME        = 287,
+       OP_LINK          = 288,
+       OP_SYMLINK       = 289,
+       OP_READLINK      = 290,
+       OP_MKDIR         = 291,
+       OP_RMDIR         = 292,
+       OP_OPEN_DIR      = 293,
+       OP_READDIR       = 294,
+       OP_TELLDIR       = 295,
+       OP_SEEKDIR       = 296,
+       OP_REWINDDIR     = 297,
+       OP_CLOSEDIR      = 298,
+       OP_FORK          = 299,
+       OP_WAIT          = 300,
+       OP_WAITPID       = 301,
+       OP_SYSTEM        = 302,
+       OP_EXEC          = 303,
+       OP_KILL          = 304,
+       OP_GETPPID       = 305,
+       OP_GETPGRP       = 306,
+       OP_SETPGRP       = 307,
+       OP_GETPRIORITY   = 308,
+       OP_SETPRIORITY   = 309,
+       OP_TIME          = 310,
+       OP_TMS           = 311,
+       OP_LOCALTIME     = 312,
+       OP_GMTIME        = 313,
+       OP_ALARM         = 314,
+       OP_SLEEP         = 315,
+       OP_SHMGET        = 316,
+       OP_SHMCTL        = 317,
+       OP_SHMREAD       = 318,
+       OP_SHMWRITE      = 319,
+       OP_MSGGET        = 320,
+       OP_MSGCTL        = 321,
+       OP_MSGSND        = 322,
+       OP_MSGRCV        = 323,
+       OP_SEMOP         = 324,
+       OP_SEMGET        = 325,
+       OP_SEMCTL        = 326,
+       OP_REQUIRE       = 327,
+       OP_DOFILE        = 328,
+       OP_HINTSEVAL     = 329,
+       OP_ENTEREVAL     = 330,
+       OP_LEAVEEVAL     = 331,
+       OP_ENTERTRY      = 332,
+       OP_LEAVETRY      = 333,
+       OP_GHBYNAME      = 334,
+       OP_GHBYADDR      = 335,
+       OP_GHOSTENT      = 336,
+       OP_GNBYNAME      = 337,
+       OP_GNBYADDR      = 338,
+       OP_GNETENT       = 339,
+       OP_GPBYNAME      = 340,
+       OP_GPBYNUMBER    = 341,
+       OP_GPROTOENT     = 342,
+       OP_GSBYNAME      = 343,
+       OP_GSBYPORT      = 344,
+       OP_GSERVENT      = 345,
+       OP_SHOSTENT      = 346,
+       OP_SNETENT       = 347,
+       OP_SPROTOENT     = 348,
+       OP_SSERVENT      = 349,
+       OP_EHOSTENT      = 350,
+       OP_ENETENT       = 351,
+       OP_EPROTOENT     = 352,
+       OP_ESERVENT      = 353,
+       OP_GPWNAM        = 354,
+       OP_GPWUID        = 355,
+       OP_GPWENT        = 356,
+       OP_SPWENT        = 357,
+       OP_EPWENT        = 358,
+       OP_GGRNAM        = 359,
+       OP_GGRGID        = 360,
+       OP_GGRENT        = 361,
+       OP_SGRENT        = 362,
+       OP_EGRENT        = 363,
+       OP_GETLOGIN      = 364,
+       OP_SYSCALL       = 365,
+       OP_LOCK          = 366,
+       OP_ONCE          = 367,
+       OP_CUSTOM        = 368,
+       OP_REACH         = 369,
+       OP_RKEYS         = 370,
+       OP_RVALUES       = 371,
+       OP_COREARGS      = 372,
+       OP_RUNCV         = 373,
+       OP_FC            = 374,
+       OP_PADCV         = 375,
+       OP_INTROCV       = 376,
+       OP_CLONECV       = 377,
+       OP_PADRANGE      = 378,
        OP_max          
 } opcode;
 
-#define MAXO 378
+#define MAXO 379
 #define OP_FREED MAXO
 
 /* the OP_IS_* macros are optimized to a simple range check because
index ef82bc9..5033bfc 100644 (file)
--- a/perly.act
+++ b/perly.act
@@ -1429,6 +1429,18 @@ case 2:
 
   case 176:
 #line 1208 "perly.y"
+    { (yyval.opval) = op_prepend_elem(OP_KVASLICE,
+                               newOP(OP_PUSHMARK, 0),
+                                   newLISTOP(OP_KVASLICE, 0,
+                                       list((ps[(3) - (4)].val.opval)),
+                                       ref(oopsAV((ps[(1) - (4)].val.opval)), OP_KVASLICE)));
+                         TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
+                         TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
+                       }
+    break;
+
+  case 177:
+#line 1217 "perly.y"
     { (yyval.opval) = op_prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
@@ -1441,8 +1453,8 @@ case 2:
                        }
     break;
 
-  case 177:
-#line 1219 "perly.y"
+  case 178:
+#line 1228 "perly.y"
     { (yyval.opval) = op_prepend_elem(OP_KVHSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_KVHSLICE, 0,
@@ -1455,26 +1467,26 @@ case 2:
                        }
     break;
 
-  case 178:
-#line 1230 "perly.y"
+  case 179:
+#line 1239 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
-  case 179:
-#line 1232 "perly.y"
+  case 180:
+#line 1241 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[(1) - (1)].val.opval))); }
     break;
 
-  case 180:
-#line 1234 "perly.y"
+  case 181:
+#line 1243 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
                        }
     break;
 
-  case 181:
-#line 1239 "perly.y"
+  case 182:
+#line 1248 "perly.y"
     {
                          (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST, (ps[(3) - (4)].val.opval), scalar((ps[(1) - (4)].val.opval))));
@@ -1489,91 +1501,91 @@ case 2:
                        }
     break;
 
-  case 182:
-#line 1252 "perly.y"
+  case 183:
+#line 1261 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            op_append_elem(OP_LIST, (ps[(3) - (3)].val.opval), scalar((ps[(2) - (3)].val.opval))));
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
                        }
     break;
 
-  case 183:
-#line 1257 "perly.y"
+  case 184:
+#line 1266 "perly.y"
     { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), OPf_SPECIAL);
                            PL_hints |= HINT_BLOCK_SCOPE;
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
                        }
     break;
 
-  case 184:
-#line 1262 "perly.y"
+  case 185:
+#line 1271 "perly.y"
     { (yyval.opval) = newLOOPEX(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        }
     break;
 
-  case 185:
-#line 1266 "perly.y"
+  case 186:
+#line 1275 "perly.y"
     { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        }
     break;
 
-  case 186:
-#line 1270 "perly.y"
+  case 187:
+#line 1279 "perly.y"
     { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), 0);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
                        }
     break;
 
-  case 187:
-#line 1274 "perly.y"
+  case 188:
+#line 1283 "perly.y"
     { (yyval.opval) = newUNOP(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        }
     break;
 
-  case 188:
-#line 1278 "perly.y"
+  case 189:
+#line 1287 "perly.y"
     { (yyval.opval) = newUNOP(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        }
     break;
 
-  case 189:
-#line 1282 "perly.y"
+  case 190:
+#line 1291 "perly.y"
     { (yyval.opval) = newOP(OP_REQUIRE, (ps[(1) - (1)].val.i_tkval) ? OPf_SPECIAL : 0);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
                        }
     break;
 
-  case 190:
-#line 1286 "perly.y"
+  case 191:
+#line 1295 "perly.y"
     { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[(1) - (2)].val.i_tkval) ? OPf_SPECIAL : 0, (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        }
     break;
 
-  case 191:
-#line 1290 "perly.y"
+  case 192:
+#line 1299 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); }
     break;
 
-  case 192:
-#line 1292 "perly.y"
+  case 193:
+#line 1301 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            op_append_elem(OP_LIST, (ps[(2) - (2)].val.opval), scalar((ps[(1) - (2)].val.opval)))); }
     break;
 
-  case 193:
-#line 1295 "perly.y"
+  case 194:
+#line 1304 "perly.y"
     { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), 0);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
                        }
     break;
 
-  case 194:
-#line 1299 "perly.y"
+  case 195:
+#line 1308 "perly.y"
     { (yyval.opval) = newOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0);
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
@@ -1581,27 +1593,27 @@ case 2:
                        }
     break;
 
-  case 195:
-#line 1305 "perly.y"
+  case 196:
+#line 1314 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
-  case 196:
-#line 1307 "perly.y"
+  case 197:
+#line 1316 "perly.y"
     { (yyval.opval) = (ps[(1) - (3)].val.opval);
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
                        }
     break;
 
-  case 197:
-#line 1312 "perly.y"
+  case 198:
+#line 1321 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                scalar((ps[(1) - (1)].val.opval))); }
     break;
 
-  case 198:
-#line 1315 "perly.y"
+  case 199:
+#line 1324 "perly.y"
     { (yyval.opval) = (IVAL((ps[(1) - (3)].val.i_tkval)) == OP_NOT)
                            ? newUNOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0, newSVOP(OP_CONST, 0, newSViv(0)))
                            : newOP(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_SPECIAL);
@@ -1612,8 +1624,8 @@ case 2:
                        }
     break;
 
-  case 199:
-#line 1324 "perly.y"
+  case 200:
+#line 1333 "perly.y"
     { (yyval.opval) = newUNOP(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
@@ -1621,8 +1633,8 @@ case 2:
                        }
     break;
 
-  case 200:
-#line 1330 "perly.y"
+  case 201:
+#line 1339 "perly.y"
     {
                            if (   (ps[(1) - (1)].val.opval)->op_type != OP_TRANS
                                && (ps[(1) - (1)].val.opval)->op_type != OP_TRANSR
@@ -1635,16 +1647,16 @@ case 2:
                        }
     break;
 
-  case 201:
-#line 1341 "perly.y"
+  case 202:
+#line 1350 "perly.y"
     { (yyval.opval) = pmruntime((ps[(1) - (5)].val.opval), (ps[(4) - (5)].val.opval), 1, (ps[(2) - (5)].val.ival));
                          TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),')');
                        }
     break;
 
-  case 204:
-#line 1348 "perly.y"
+  case 205:
+#line 1357 "perly.y"
     {
                          (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
                                newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
@@ -1652,8 +1664,8 @@ case 2:
                        }
     break;
 
-  case 206:
-#line 1358 "perly.y"
+  case 207:
+#line 1367 "perly.y"
     { (yyval.opval) = my_attrs((ps[(2) - (3)].val.opval),(ps[(3) - (3)].val.opval));
                          DO_MAD(
                              token_getmad((ps[(1) - (3)].val.i_tkval),(yyval.opval),'d');
@@ -1663,128 +1675,128 @@ case 2:
                        }
     break;
 
-  case 207:
-#line 1366 "perly.y"
+  case 208:
+#line 1375 "perly.y"
     { (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'d');
                        }
     break;
 
-  case 208:
-#line 1373 "perly.y"
+  case 209:
+#line 1382 "perly.y"
     { (yyval.opval) = sawparens((ps[(2) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
                        }
     break;
 
-  case 209:
-#line 1378 "perly.y"
+  case 210:
+#line 1387 "perly.y"
     { (yyval.opval) = sawparens(newNULLLIST());
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')');
                        }
     break;
 
-  case 210:
-#line 1383 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
-    break;
-
   case 211:
-#line 1385 "perly.y"
+#line 1392 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 212:
-#line 1387 "perly.y"
+#line 1394 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 213:
-#line 1392 "perly.y"
-    { (yyval.opval) = (OP*)NULL; }
+#line 1396 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 214:
-#line 1394 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
+#line 1401 "perly.y"
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 215:
-#line 1398 "perly.y"
-    { (yyval.opval) = (OP*)NULL; }
+#line 1403 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 216:
-#line 1400 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
+#line 1407 "perly.y"
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 217:
-#line 1406 "perly.y"
-    { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); }
+#line 1409 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 218:
-#line 1410 "perly.y"
+#line 1415 "perly.y"
+    { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); }
+    break;
+
+  case 219:
+#line 1419 "perly.y"
     { (yyval.opval) = newCVREF(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'&');
                        }
     break;
 
-  case 219:
-#line 1416 "perly.y"
+  case 220:
+#line 1425 "perly.y"
     { (yyval.opval) = newSVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'$');
                        }
     break;
 
-  case 220:
-#line 1422 "perly.y"
+  case 221:
+#line 1431 "perly.y"
     { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'@');
                        }
     break;
 
-  case 221:
-#line 1428 "perly.y"
+  case 222:
+#line 1437 "perly.y"
     { (yyval.opval) = newHVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'%');
                        }
     break;
 
-  case 222:
-#line 1434 "perly.y"
+  case 223:
+#line 1443 "perly.y"
     { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'l');
                        }
     break;
 
-  case 223:
-#line 1440 "perly.y"
+  case 224:
+#line 1449 "perly.y"
     { (yyval.opval) = newGVREF(0,(ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'*');
                        }
     break;
 
-  case 224:
-#line 1447 "perly.y"
+  case 225:
+#line 1456 "perly.y"
     { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); }
     break;
 
-  case 225:
-#line 1449 "perly.y"
+  case 226:
+#line 1458 "perly.y"
     { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); }
     break;
 
-  case 226:
-#line 1451 "perly.y"
+  case 227:
+#line 1460 "perly.y"
     { (yyval.opval) = op_scope((ps[(1) - (1)].val.opval)); }
     break;
 
-  case 227:
-#line 1454 "perly.y"
+  case 228:
+#line 1463 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
@@ -1792,6 +1804,6 @@ case 2:
     
 
 /* Generated from:
- * 48446ab3e028756e1df8ac7ff4e2967381f754ac8cf39430af8bf83b446076e0 perly.y
+ * 1c6010b3d1651d4fc7cbfc329723c507767b4230ac920ae0ffde8f344f4a0ab4 perly.y
  * 5c9d2a0262457fe9b70073fc8ad6c188f812f38ad57712b7e2f53daa01b297cc regen_perly.pl
  * ex: set ro: */
diff --git a/perly.h b/perly.h
index c570d60..dcf67d9 100644 (file)
--- a/perly.h
+++ b/perly.h
@@ -286,6 +286,6 @@ int yyparse ();
 
 
 /* Generated from:
- * 48446ab3e028756e1df8ac7ff4e2967381f754ac8cf39430af8bf83b446076e0 perly.y
+ * 1c6010b3d1651d4fc7cbfc329723c507767b4230ac920ae0ffde8f344f4a0ab4 perly.y
  * 5c9d2a0262457fe9b70073fc8ad6c188f812f38ad57712b7e2f53daa01b297cc regen_perly.pl
  * ex: set ro: */
index 52cf54d..3a1d620 100644 (file)
--- a/perly.tab
+++ b/perly.tab
@@ -6,16 +6,16 @@
 
 #define YYFINAL  14
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2833
+#define YYLAST   2872
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  66
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  227
+#define YYNRULES  228
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  459
+#define YYNSTATES  462
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -85,12 +85,12 @@ static const yytype_uint16 yyprhs[] =
      517,   520,   523,   526,   529,   532,   535,   538,   542,   545,
      550,   554,   560,   563,   566,   571,   577,   582,   588,   590,
      592,   594,   596,   602,   605,   607,   610,   614,   616,   619,
-     621,   623,   625,   627,   629,   631,   636,   642,   648,   650,
-     652,   656,   661,   665,   667,   670,   673,   675,   678,   681,
-     683,   686,   688,   691,   693,   697,   699,   703,   705,   709,
-     714,   715,   721,   723,   725,   727,   729,   733,   736,   740,
-     743,   745,   747,   749,   750,   752,   753,   755,   757,   760,
-     763,   766,   769,   772,   775,   777,   779,   781
+     621,   623,   625,   627,   629,   631,   636,   641,   647,   653,
+     655,   657,   661,   666,   670,   672,   675,   678,   680,   683,
+     686,   688,   691,   693,   696,   698,   702,   704,   708,   710,
+     714,   719,   720,   726,   728,   730,   732,   734,   738,   741,
+     745,   748,   750,   752,   754,   755,   757,   758,   760,   762,
+     765,   768,   771,   774,   777,   780,   782,   784,   786
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -159,22 +159,22 @@ static const yytype_int16 yyrhs[] =
      156,    -1,    93,   156,    -1,   158,    -1,    69,   156,    -1,
      102,   146,   101,    -1,    29,    -1,   102,   101,    -1,   164,
       -1,   168,    -1,   166,    -1,   165,    -1,   167,    -1,   151,
-      -1,   165,    11,   146,    12,    -1,   165,     9,   146,    20,
-      10,    -1,   166,     9,   146,    20,    10,    -1,    26,    -1,
-     163,    -1,   163,   102,   101,    -1,   163,   102,   146,   101,
-      -1,    68,   141,   160,    -1,    53,    -1,    53,   156,    -1,
-      79,   147,    -1,    59,    -1,    59,   112,    -1,    59,   156,
-      -1,    71,    -1,    71,   156,    -1,    32,    -1,    32,   156,
-      -1,    56,    -1,    56,   102,   101,    -1,    30,    -1,    30,
-     102,   101,    -1,    31,    -1,    57,   102,   101,    -1,    57,
-     102,   146,   101,    -1,    -1,    27,   157,   102,   147,   101,
-      -1,    23,    -1,   148,    -1,    55,    -1,    34,    -1,    70,
-     159,   144,    -1,    70,   159,    -1,   102,   146,   101,    -1,
-     102,   101,    -1,   164,    -1,   166,    -1,   165,    -1,    -1,
-     147,    -1,    -1,   146,    -1,   164,    -1,    19,   169,    -1,
-      15,   169,    -1,    16,   169,    -1,    17,   169,    -1,    65,
-     169,    -1,    18,   169,    -1,    23,    -1,   164,    -1,   112,
-      -1,    28,    -1
+      -1,   165,    11,   146,    12,    -1,   166,    11,   146,    12,
+      -1,   165,     9,   146,    20,    10,    -1,   166,     9,   146,
+      20,    10,    -1,    26,    -1,   163,    -1,   163,   102,   101,
+      -1,   163,   102,   146,   101,    -1,    68,   141,   160,    -1,
+      53,    -1,    53,   156,    -1,    79,   147,    -1,    59,    -1,
+      59,   112,    -1,    59,   156,    -1,    71,    -1,    71,   156,
+      -1,    32,    -1,    32,   156,    -1,    56,    -1,    56,   102,
+     101,    -1,    30,    -1,    30,   102,   101,    -1,    31,    -1,
+      57,   102,   101,    -1,    57,   102,   146,   101,    -1,    -1,
+      27,   157,   102,   147,   101,    -1,    23,    -1,   148,    -1,
+      55,    -1,    34,    -1,    70,   159,   144,    -1,    70,   159,
+      -1,   102,   146,   101,    -1,   102,   101,    -1,   164,    -1,
+     166,    -1,   165,    -1,    -1,   147,    -1,    -1,   146,    -1,
+     164,    -1,    19,   169,    -1,    15,   169,    -1,    16,   169,
+      -1,    17,   169,    -1,    65,   169,    -1,    18,   169,    -1,
+      23,    -1,   164,    -1,   112,    -1,    28,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -197,12 +197,12 @@ static const yytype_uint16 yyrline[] =
     1030,  1037,  1041,  1045,  1050,  1055,  1060,  1069,  1074,  1079,
     1085,  1091,  1102,  1106,  1110,  1122,  1135,  1143,  1155,  1156,
     1157,  1158,  1159,  1164,  1168,  1170,  1174,  1179,  1181,  1186,
-    1188,  1190,  1192,  1194,  1196,  1198,  1207,  1218,  1229,  1231,
-    1233,  1238,  1251,  1256,  1261,  1265,  1269,  1273,  1277,  1281,
-    1285,  1289,  1291,  1294,  1298,  1304,  1306,  1311,  1314,  1323,
-    1330,  1329,  1345,  1346,  1347,  1353,  1357,  1365,  1372,  1377,
-    1382,  1384,  1386,  1391,  1393,  1398,  1399,  1405,  1409,  1415,
-    1421,  1427,  1433,  1439,  1446,  1448,  1450,  1453
+    1188,  1190,  1192,  1194,  1196,  1198,  1207,  1216,  1227,  1238,
+    1240,  1242,  1247,  1260,  1265,  1270,  1274,  1278,  1282,  1286,
+    1290,  1294,  1298,  1300,  1303,  1307,  1313,  1315,  1320,  1323,
+    1332,  1339,  1338,  1354,  1355,  1356,  1362,  1366,  1374,  1381,
+    1386,  1391,  1393,  1395,  1400,  1402,  1407,  1408,  1414,  1418,
+    1424,  1430,  1436,  1442,  1448,  1455,  1457,  1459,  1462
 };
 #endif
 
@@ -281,9 +281,9 @@ static const yytype_uint8 yyr1[] =
      156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
      156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
      156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     157,   156,   156,   156,   156,   156,   158,   158,   159,   159,
-     159,   159,   159,   160,   160,   161,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   169,   169,   169
+     156,   157,   156,   156,   156,   156,   156,   158,   158,   159,
+     159,   159,   159,   159,   160,   160,   161,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   169,   169,   169
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -306,12 +306,12 @@ static const yytype_uint8 yyr2[] =
        2,     2,     2,     2,     2,     2,     2,     3,     2,     4,
        3,     5,     2,     2,     4,     5,     4,     5,     1,     1,
        1,     1,     5,     2,     1,     2,     3,     1,     2,     1,
-       1,     1,     1,     1,     1,     4,     5,     5,     1,     1,
-       3,     4,     3,     1,     2,     2,     1,     2,     2,     1,
-       2,     1,     2,     1,     3,     1,     3,     1,     3,     4,
-       0,     5,     1,     1,     1,     1,     3,     2,     3,     2,
-       1,     1,     1,     0,     1,     0,     1,     1,     2,     2,
-       2,     2,     2,     2,     1,     1,     1,     1
+       1,     1,     1,     1,     1,     4,     4,     5,     5,     1,
+       1,     3,     4,     3,     1,     2,     2,     1,     2,     2,
+       1,     2,     1,     2,     1,     3,     1,     3,     1,     3,
+       4,     0,     5,     1,     1,     1,     1,     3,     2,     3,
+       2,     1,     1,     1,     0,     1,     0,     1,     1,     2,
+       2,     2,     2,     2,     2,     1,     1,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
@@ -319,715 +319,725 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     2,     4,     6,     8,    10,    12,     0,    16,   215,
+       0,     2,     4,     6,     8,    10,    12,     0,    16,   216,
        0,     0,     0,    19,     1,    19,     0,     0,     0,     0,
-       0,     0,     0,     0,   202,     0,     0,   178,   200,   167,
-     195,   197,   191,    79,   205,    79,   183,   204,   193,     0,
-       0,   186,   213,     0,     0,     0,     0,     0,     0,   189,
-       0,     0,     0,     0,     0,     0,     0,   216,    95,   203,
-     174,   158,   159,   160,   161,    98,   164,     5,   179,   169,
+       0,     0,     0,     0,   203,     0,     0,   179,   201,   167,
+     196,   198,   192,    79,   206,    79,   184,   205,   194,     0,
+       0,   187,   214,     0,     0,     0,     0,     0,     0,   190,
+       0,     0,     0,     0,     0,     0,     0,   217,    95,   204,
+     174,   158,   159,   160,   161,    98,   164,     5,   180,   169,
      172,   171,   173,   170,    16,     7,    54,    50,    27,    80,
        0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
        0,    28,    65,     9,     0,    55,     0,    11,    24,    23,
-       0,     0,   148,     0,   139,   140,   224,   227,   226,   225,
-     219,   220,   221,   223,   218,   213,     0,     0,     0,     0,
-     192,     0,    83,   184,     0,     0,   215,   187,   188,   224,
-     214,   105,   225,     0,   222,   202,    82,   153,     0,   152,
-     169,     0,     0,    81,   213,   165,     0,   207,   210,   212,
-     211,   190,   185,   141,   142,   163,   146,   145,   168,     0,
+       0,     0,   148,     0,   139,   140,   225,   228,   227,   226,
+     220,   221,   222,   224,   219,   214,     0,     0,     0,     0,
+     193,     0,    83,   185,     0,     0,   216,   188,   189,   225,
+     215,   105,   226,     0,   223,   203,    82,   153,     0,   152,
+     169,     0,     0,    81,   214,   165,     0,   208,   211,   213,
+     212,   191,   186,   141,   142,   163,   146,   145,   168,     0,
        0,     0,     0,    96,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   144,   143,     0,     0,     0,     0,     0,     0,
-       0,     0,    19,    77,    78,     0,    33,    16,    16,    16,
-      16,    16,    16,     0,    16,    16,    39,     0,    46,    49,
-       0,     0,     0,     0,     0,     0,    26,    25,    20,   147,
-     103,   215,     0,     0,   196,   107,    84,    85,   194,   198,
-       0,     0,     0,    99,     0,     0,   150,     0,   182,   209,
-       0,    89,   206,     0,   166,    94,    93,    92,    97,     0,
-       0,   121,     0,   134,   130,   131,   127,   128,   125,     0,
-     137,   136,   135,   133,   132,   129,   138,   126,     0,     0,
-     109,     0,   102,   110,   180,     0,     0,     0,     0,     0,
-       0,     0,     0,    76,     0,    30,     0,     0,    70,     0,
-       0,     0,     0,     0,    16,     0,     0,    66,    58,    59,
-      72,    56,    57,    60,    61,     0,     0,   123,   213,    87,
-       0,   199,   106,     0,   154,     0,   156,     0,   149,   208,
-      88,     0,     0,     0,   114,   120,     0,     0,     0,   118,
-       0,   215,   181,     0,   112,     0,   175,     0,     0,    14,
-      16,    29,    83,    16,    32,     0,     0,    71,     0,     0,
-      73,    75,     0,     0,   217,    69,    74,     0,     0,    55,
-       0,     0,     0,   104,   201,   108,    86,   151,   100,   155,
-     157,   124,     0,   117,   162,     0,   113,   119,     0,   115,
-     176,   177,   111,     0,    85,    47,   213,    67,    67,     0,
-       0,     0,     0,    70,     0,     0,     0,   122,   116,   101,
-       0,     0,    19,     0,     0,     0,    18,    62,    62,     0,
-      65,     0,     0,    37,    38,    21,    91,    90,    31,     0,
-      34,    65,    65,    19,     0,     0,    35,    36,     0,    45,
-      67,    65,     0,    48,    40,    41,     0,    63,     0,    65,
-       0,    44,     0,    52,    22,    17,     0,    43,     0,    15,
-      19,    51,     0,     0,     0,    62,    42,    53,    64
+       0,     0,     0,    19,    77,    78,     0,    33,    16,    16,
+      16,    16,    16,    16,     0,    16,    16,    39,     0,    46,
+      49,     0,     0,     0,     0,     0,     0,    26,    25,    20,
+     147,   103,   216,     0,     0,   197,   107,    84,    85,   195,
+     199,     0,     0,     0,    99,     0,     0,   150,     0,   183,
+     210,     0,    89,   207,     0,   166,    94,    93,    92,    97,
+       0,     0,   121,     0,   134,   130,   131,   127,   128,   125,
+       0,   137,   136,   135,   133,   132,   129,   138,   126,     0,
+       0,   109,     0,   102,   110,   181,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    76,     0,    30,     0,     0,
+      70,     0,     0,     0,     0,     0,    16,     0,     0,    66,
+      58,    59,    72,    56,    57,    60,    61,     0,     0,   123,
+     214,    87,     0,   200,   106,     0,   154,     0,   156,     0,
+     149,   209,    88,     0,     0,     0,   114,   120,     0,     0,
+       0,   118,     0,   216,   182,     0,   112,     0,   175,     0,
+     176,     0,    14,    16,    29,    83,    16,    32,     0,     0,
+      71,     0,     0,    73,    75,     0,     0,   218,    69,    74,
+       0,     0,    55,     0,     0,     0,   104,   202,   108,    86,
+     151,   100,   155,   157,   124,     0,   117,   162,     0,   113,
+     119,     0,   115,   177,   178,   111,     0,    85,    47,   214,
+      67,    67,     0,     0,     0,     0,    70,     0,     0,     0,
+     122,   116,   101,     0,     0,    19,     0,     0,     0,    18,
+      62,    62,     0,    65,     0,     0,    37,    38,    21,    91,
+      90,    31,     0,    34,    65,    65,    19,     0,     0,    35,
+      36,     0,    45,    67,    65,     0,    48,    40,    41,     0,
+      63,     0,    65,     0,    44,     0,    52,    22,    17,     0,
+      43,     0,    15,    19,    51,     0,     0,     0,    62,    42,
+      53,    64
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     7,     8,     9,    10,    11,    12,    13,   108,   341,
-      15,   407,   423,   100,   432,   218,    98,    99,   342,   287,
-     402,   444,   451,    94,   426,   208,   404,   356,   346,   299,
-     349,   358,   352,   284,   196,   121,   193,   138,   227,   310,
-     242,   418,    95,    58,    59,   308,   272,    60,    61,    62,
-      63,    64,    65,   117,    66,   147,   131,    67,   353,    68,
+      -1,     7,     8,     9,    10,    11,    12,    13,   108,   344,
+      15,   410,   426,   100,   435,   219,    98,    99,   345,   289,
+     405,   447,   454,    94,   429,   209,   407,   359,   349,   301,
+     352,   361,   355,   286,   197,   121,   194,   138,   228,   312,
+     243,   421,    95,    58,    59,   310,   273,    60,    61,    62,
+      63,    64,    65,   117,    66,   147,   131,    67,   356,    68,
       69,    70,    71,    72,    73,   110
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -399
+#define YYPACT_NINF -387
 static const yytype_int16 yypact[] =
 {
-     695,  -399,  -399,  -399,  -399,  -399,  -399,    76,  -399,  2714,
-      84,  1101,  1006,  -399,  -399,  -399,  1798,  2714,  2714,   204,
-     204,   204,   204,   204,  -399,   204,   204,  -399,  -399,   101,
-       6,  -399,  2714,  -399,  -399,  -399,  2714,  -399,    43,    52,
-      53,  1706,  1522,   204,  1614,  1888,    56,  2714,    48,  2714,
-    2714,  2714,  2714,  2714,  2714,  2714,  1978,    20,    79,  -399,
-       2,  -399,  -399,  -399,  -399,   332,  -399,  -399,    64,    96,
-     114,   156,  -399,   170,  -399,  -399,  -399,  -399,  -399,  -399,
-      56,   166,  -399,    88,    90,   102,   103,    -1,   119,   141,
-      84,  -399,   148,  -399,   178,  1976,  1006,  -399,  -399,  -399,
-     436,   531,  -399,    -3,   306,   306,  -399,  -399,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,  2714,   143,   145,  2714,   115,
-    1873,    84,   229,   332,   155,  2070,  1522,  -399,  1873,  1429,
-      79,  -399,  1350,  2714,  -399,   160,  -399,  -399,   161,  1873,
-      13,   247,    63,  -399,  2714,  1873,  2162,   194,  -399,  -399,
-    -399,  1873,    79,   306,   306,   306,   140,   140,   257,   -31,
-    2714,  2714,  2714,  2714,  2714,  2714,  2254,  2714,  2714,  2714,
-    2714,  2714,  2714,  2714,  2714,  2714,  2714,  2714,  2714,  2714,
-    2714,  2714,  -399,  -399,    47,  2346,  2714,  2714,  2714,  2714,
-    2714,  2714,  -399,   246,  -399,   253,  -399,  -399,  -399,  -399,
-    -399,  -399,  -399,   169,  -399,  -399,  -399,    84,  -399,  -399,
-    2714,  2714,  2714,  2714,  2714,  2714,  -399,  -399,  -399,  -399,
-    -399,  2714,  2714,    11,  -399,  -399,  -399,   206,  -399,  -399,
-     117,   174,  2714,    79,  2438,  2530,  -399,   278,  -399,  -399,
-     230,   264,  -399,  2714,   282,   220,   220,  -399,   332,    75,
-      41,  -399,   243,  1182,  1783,  1599,   519,   421,   332,   251,
-    1320,  1320,  1399,  1507,  1691,  1358,   306,   306,  2714,  2714,
-    -399,  2622,   200,  -399,  -399,   248,   100,    60,   124,    70,
-     183,   203,   626,  -399,   283,  -399,    16,   293,  2714,  2714,
-    2714,  2714,   302,  1194,  -399,  2714,  2714,  -399,    20,  -399,
-      20,    20,    20,    20,    20,   221,    12,  -399,  2714,   297,
-      84,  -399,  -399,   281,  -399,   303,  -399,   307,  -399,  -399,
-    -399,    91,  2714,   333,  -399,  -399,  2714,   233,    94,  -399,
-     322,  2714,  -399,   335,  -399,   340,  -399,   344,   345,  -399,
-    -399,  -399,   229,  -399,  -399,   319,   260,    20,   261,   262,
-      20,  -399,   287,   290,  -399,  -399,  -399,   296,   385,   252,
-    2714,   309,   311,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,    97,  -399,  2733,   397,  -399,  -399,   314,  -399,
-    -399,  -399,  -399,   404,   206,  -399,  2714,  -399,  -399,   416,
-     416,  2714,   416,  2714,   329,   416,   416,  -399,  -399,  -399,
-     357,    57,  -399,   413,   416,   416,  -399,    21,    21,   334,
-     148,   419,   416,  -399,  -399,  -399,  -399,  -399,  -399,   721,
-    -399,   148,   148,  -399,   416,   338,  -399,  -399,   416,  -399,
-    -399,   148,    28,  -399,  -399,  -399,   816,  -399,  2714,   148,
-    1287,  -399,   420,   368,  -399,  -399,   342,  -399,   347,  -399,
-    -399,  -399,   416,   416,   911,    21,  -399,  -399,  -399
+     235,  -387,  -387,  -387,  -387,  -387,  -387,    15,  -387,  2713,
+      34,  1100,  1005,  -387,  -387,  -387,  1797,  2713,  2713,    93,
+      93,    93,    93,    93,  -387,    93,    93,  -387,  -387,    58,
+     -27,  -387,  2713,  -387,  -387,  -387,  2713,  -387,   -21,    -9,
+      -6,  1705,  1521,    93,  1613,  1887,    24,  2713,    46,  2713,
+    2713,  2713,  2713,  2713,  2713,  2713,  1977,    79,    17,  -387,
+      10,  -387,  -387,  -387,  -387,  2732,  -387,  -387,    -1,    19,
+      56,   190,  -387,    95,  -387,  -387,  -387,  -387,  -387,  -387,
+      24,    97,  -387,    21,    22,    27,    38,     8,    39,    72,
+      34,  -387,   129,  -387,   174,  1885,  1005,  -387,  -387,  -387,
+     435,   530,  -387,     6,   222,   222,  -387,  -387,  -387,  -387,
+    -387,  -387,  -387,  -387,  -387,  2713,   103,   116,  2713,   120,
+    1782,    34,   201,  2732,   131,  2069,  1521,  -387,  1782,  1428,
+      17,  -387,  1349,  2713,  -387,   133,  -387,  -387,   144,  1782,
+      13,   237,   126,  -387,  2713,  1782,  2161,   212,  -387,  -387,
+    -387,  1782,    17,   222,   222,   222,   278,   278,   275,   132,
+    2713,  2713,  2713,  2713,  2713,  2713,  2253,  2713,  2713,  2713,
+    2713,  2713,  2713,  2713,  2713,  2713,  2713,  2713,  2713,  2713,
+    2713,  2713,  -387,  -387,     5,  2345,  2713,  2713,  2713,  2713,
+    2713,  2713,  2713,  -387,   267,  -387,   272,  -387,  -387,  -387,
+    -387,  -387,  -387,  -387,   195,  -387,  -387,  -387,    34,  -387,
+    -387,  2713,  2713,  2713,  2713,  2713,  2713,  -387,  -387,  -387,
+    -387,  -387,  2713,  2713,    61,  -387,  -387,  -387,   228,  -387,
+    -387,   295,   200,  2713,    17,  2437,  2529,  -387,   297,  -387,
+    -387,   312,   283,  -387,  2713,   315,   245,   245,  -387,  2732,
+     187,    67,  -387,   329,  1181,   266,  1598,   423,   287,  2732,
+     337,  1319,  1319,  1398,  1506,  1690,   241,   222,   222,  2713,
+    2713,  -387,  2621,   231,  -387,  -387,   339,   191,    73,   199,
+      82,   202,   102,   205,   625,  -387,   314,  -387,    36,   316,
+    2713,  2713,  2713,  2713,   327,  1193,  -387,  2713,  2713,  -387,
+      79,  -387,    79,    79,    79,    79,    79,   242,   -25,  -387,
+    2713,   323,    34,  -387,  -387,   420,  -387,   431,  -387,   434,
+    -387,  -387,  -387,   106,  2713,   343,  -387,  -387,  2713,   211,
+     119,  -387,   439,  2713,  -387,   347,  -387,   348,  -387,   349,
+    -387,   350,  -387,  -387,  -387,   201,  -387,  -387,   342,   269,
+      79,   284,   285,    79,  -387,   291,   265,  -387,  -387,  -387,
+     301,   356,   303,  2713,   302,   307,  -387,  -387,  -387,  -387,
+    -387,  -387,  -387,  -387,  -387,   152,  -387,  2772,   400,  -387,
+    -387,   310,  -387,  -387,  -387,  -387,   408,   228,  -387,  2713,
+    -387,  -387,   422,   422,  2713,   422,  2713,   338,   422,   422,
+    -387,  -387,  -387,   364,    80,  -387,   425,   422,   422,  -387,
+      41,    41,   355,   129,   437,   422,  -387,  -387,  -387,  -387,
+    -387,  -387,   720,  -387,   129,   129,  -387,   422,   341,  -387,
+    -387,   422,  -387,  -387,   129,     7,  -387,  -387,  -387,   815,
+    -387,  2713,   129,  1286,  -387,   441,   409,  -387,  -387,   380,
+    -387,   382,  -387,  -387,  -387,   422,   422,   910,    41,  -387,
+    -387,  -387
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   -10,  -399,
-     -70,  -170,  -399,   -12,  -399,   434,   361,     4,  -399,  -399,
-    -399,  -399,  -399,  -276,  -398,   182,  -369,  -399,    65,  -165,
-    -275,    24,  -399,  -399,   288,   448,  -399,    -2,   157,   106,
-    -399,  -399,    -4,   -34,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,   197,  -399,  -399,  -399,  -109,  -119,  -399,  -399,
-       7,   449,   450,  -399,  -399,    17
+    -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,   -10,  -387,
+     -30,   -87,  -387,   -12,  -387,   477,   403,    -4,  -387,  -387,
+    -387,  -387,  -387,  -290,  -386,  -110,  -365,  -387,   128,   -67,
+    -289,    86,  -387,  -387,   330,   487,  -387,   -14,   197,   149,
+    -387,  -387,     1,   -38,  -387,  -387,  -387,  -387,  -387,  -387,
+    -387,  -387,    81,  -387,  -387,  -387,  -104,  -113,  -387,  -387,
+      16,   503,   504,  -387,  -387,    28
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -203
+#define YYTABLE_NINF -204
 static const yytype_int16 yytable[] =
 {
-      75,    92,    92,   101,   192,    57,   220,   231,   130,   219,
-     427,   164,   103,   165,    19,    93,   152,   355,   357,   405,
-     361,   362,   186,   307,   187,   343,   109,   109,   109,   109,
-     109,   127,   109,   109,   137,   238,   344,   111,   112,   113,
-     114,   142,   115,   116,   144,   160,   161,   162,   442,   132,
-     109,   140,   159,   324,   443,   148,   268,   458,   269,   133,
-     134,   440,    19,    19,    20,    21,    74,   424,   425,   201,
-     244,   270,   334,   160,   161,   162,    14,   416,   194,   143,
-     206,   130,   336,   237,   136,   394,    92,   160,   161,   162,
-      92,    92,   163,    74,   203,   323,   160,   161,   162,   233,
-     217,   202,   305,   371,   166,   186,   376,   187,   119,   397,
-     130,   225,   118,   364,   223,   235,   409,   160,   161,   162,
-     333,   230,    57,   188,   348,   189,   351,   288,   289,   290,
-     291,   292,   293,   132,   295,   296,   160,   161,   162,   160,
-     161,   162,   240,   232,   335,   124,   160,   161,   162,   271,
-     146,   160,   161,   162,   125,   126,   245,   246,   247,   163,
-     249,   250,   252,   446,   355,   190,   185,   160,   161,   162,
-     160,   161,   162,   160,   161,   162,   160,   161,   162,   191,
-     282,   275,   276,   277,   278,   279,   280,   281,   306,   195,
-     197,   273,   198,   160,   161,   162,   207,   297,   209,   365,
-     160,   161,   162,   337,   199,   200,   298,   300,   301,   302,
-     303,   304,   378,    74,   104,   105,   224,    57,   311,    19,
-     408,   204,   410,   338,   360,   413,   414,   106,   313,   120,
-     315,   317,   107,   123,   421,   422,  -203,  -203,   128,   321,
-     184,   139,   431,   205,   145,   221,   151,   222,   153,   154,
-     155,   156,   157,   375,   437,   226,   228,   236,   439,   160,
-     161,   162,   -81,   234,   327,   328,   241,   330,   243,   283,
-     383,   294,    92,   385,   130,   312,   286,   403,   309,   160,
-     161,   162,   455,   456,   347,   300,   350,   300,   318,   359,
-     320,   350,   350,   322,   210,   211,   212,   213,   162,   354,
-     367,   214,   331,   215,   340,   167,   160,   161,   162,   160,
-     161,   162,   168,   169,   170,   171,   345,    19,   372,   160,
-     161,   162,   363,   366,   160,   161,   162,    57,   160,   161,
-     162,   319,   172,   173,   326,   174,   175,   176,   177,   178,
-     179,   180,   386,   373,   325,   379,   181,   182,   183,   332,
-     380,   184,   130,   -73,   381,   382,   350,   160,   161,   162,
-     248,   387,   388,   389,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   160,
-     161,   162,   368,   160,   161,   162,   167,   350,   390,   347,
-     419,   417,   391,   168,   169,   170,   171,   392,   160,   161,
-     162,   181,   182,   183,   369,   393,   184,   398,   370,    92,
-     395,   436,   396,   172,   173,   399,   174,   175,   176,   177,
-     178,   179,   180,   377,   400,   406,    92,   181,   182,   183,
-     412,   415,   184,   420,   350,   428,   -13,    76,   454,   430,
-     438,   450,   449,   452,    92,    74,    97,    16,   453,    17,
-      18,    19,    20,    21,    22,    23,    77,   216,   411,    24,
-      25,    26,    27,    28,   448,    29,    30,    31,    32,    33,
-      34,    78,    96,    79,    80,    35,    81,    82,    83,    84,
-      85,    86,   285,   122,   170,    87,    88,    89,    90,    36,
-     401,    37,    38,    39,    40,    41,    42,   149,   150,   384,
-       0,    43,    44,    45,    46,    47,    48,    49,     0,     0,
-       0,   180,     0,     0,     0,    50,   181,   182,   183,     0,
-       0,   184,     0,   374,     0,     0,     0,    51,    52,    53,
-       0,    -3,    76,     0,    54,    55,     0,     0,    56,    91,
-      74,     0,    16,     0,    17,    18,    19,    20,    21,    22,
-      23,    77,     0,     0,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    78,    96,    79,    80,
-      35,    81,    82,    83,    84,    85,    86,     0,     0,     0,
-      87,    88,    89,    90,    36,     0,    37,    38,    39,    40,
-      41,    42,   429,     0,     0,     0,    43,    44,    45,    46,
-      47,    48,    49,   434,   435,     0,     0,     0,     0,   180,
-      50,     0,     0,   441,   181,   182,   183,     0,     0,   184,
-       0,   447,    51,    52,    53,     0,     0,    76,     0,    54,
-      55,     0,     0,    56,    91,    74,   339,    16,     0,    17,
-      18,    19,    20,    21,    22,    23,    77,     0,     0,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,    78,    96,    79,    80,    35,    81,    82,    83,    84,
-      85,    86,     0,     0,     0,    87,    88,    89,    90,    36,
-       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
-       0,    43,    44,    45,    46,    47,    48,    49,     1,     2,
-       3,     4,     5,     6,     0,    50,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,    76,     0,    54,    55,     0,     0,    56,    91,
-      74,   433,    16,     0,    17,    18,    19,    20,    21,    22,
-      23,    77,     0,     0,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    78,    96,    79,    80,
-      35,    81,    82,    83,    84,    85,    86,     0,     0,     0,
-      87,    88,    89,    90,    36,     0,    37,    38,    39,    40,
-      41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
-      47,    48,    49,     0,     0,     0,     0,     0,     0,     0,
-      50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    51,    52,    53,     0,     0,    76,     0,    54,
-      55,     0,     0,    56,    91,    74,   445,    16,     0,    17,
-      18,    19,    20,    21,    22,    23,    77,     0,     0,    24,
+      75,    92,    92,   101,   130,   358,   360,    93,   364,   365,
+      57,   221,   152,   232,   269,    14,   270,   103,   220,   164,
+      19,   165,   186,    19,   187,   430,   408,   445,   186,   271,
+     187,   127,   144,   446,   137,   109,   109,   109,   109,   109,
+     239,   109,   109,    74,   193,   346,   142,   143,   111,   112,
+     113,   114,   136,   115,   116,   163,   347,   159,   132,   109,
+     140,    19,    20,    21,   148,   188,   195,   189,   443,   118,
+     133,   134,   461,   309,   397,   119,   367,   130,   202,   326,
+     207,   124,   160,   161,   162,   336,    92,   427,   428,    74,
+      92,    92,   218,   125,   338,   234,   126,   163,   104,   105,
+     419,   185,    74,   204,   192,   412,   130,   272,    19,   307,
+     203,   226,   166,   120,   340,   236,   106,   123,   374,   224,
+     196,   107,   128,   198,   199,   139,   231,    57,   145,   200,
+     151,   379,   153,   154,   155,   156,   157,   160,   161,   162,
+     201,   205,   132,   160,   161,   162,   238,   241,   146,   160,
+     161,   162,   449,   358,   233,   160,   161,   162,   160,   161,
+     162,   246,   247,   248,   400,   250,   251,   253,   290,   291,
+     292,   293,   294,   295,   206,   297,   298,   208,   160,   161,
+     162,   284,   160,   161,   162,   308,   276,   277,   278,   279,
+     280,   281,   282,   283,   210,   160,   161,   162,   299,   190,
+     274,   191,   160,   161,   162,   222,   368,   325,   160,   161,
+     162,   335,   300,   302,   303,   304,   305,   306,   223,   337,
+     381,   225,   339,    57,   351,   341,   354,   227,   160,   161,
+     162,   378,   229,   245,   315,   -81,   317,   319,     1,     2,
+       3,     4,     5,     6,   249,   323,   235,   237,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   160,   161,   162,   363,   160,   161,   162,
+     329,   330,   130,   332,    92,   160,   161,   162,   160,   161,
+     162,   160,   161,   162,   242,   406,   244,   160,   161,   162,
+     285,   350,   302,   353,   302,   288,   362,   296,   353,   353,
+     311,   314,   370,   432,   170,   171,   411,   320,   413,   322,
+     357,   416,   417,   386,   437,   438,   388,   181,   182,   183,
+     424,   425,   184,   162,   444,   375,   324,  -204,   434,   170,
+     171,   180,   450,   333,    57,   343,   181,   182,   183,   348,
+     440,   184,    19,   366,   442,   211,   212,   213,   214,   369,
+     170,   130,   215,   376,   216,   179,   180,   382,   383,   384,
+     385,   181,   182,   183,   353,   389,   184,   394,   458,   459,
+     390,   160,   161,   162,  -204,  -204,   396,   180,   184,   160,
+     161,   162,   181,   182,   183,   391,   392,   184,   160,   161,
+     162,   167,   393,   422,   420,   353,   313,   350,   168,   169,
+     170,   171,   395,   398,   -73,   160,   161,   162,   399,   377,
+     401,   402,    92,   321,   439,   160,   161,   162,   172,   173,
+     328,   174,   175,   176,   177,   178,   179,   180,   403,    92,
+     327,   409,   181,   182,   183,   -13,    76,   184,   418,   415,
+     334,   457,   353,   441,    74,   423,    16,    92,    17,    18,
+      19,    20,    21,    22,    23,    77,   431,   433,    24,    25,
+      26,    27,    28,   452,    29,    30,    31,    32,    33,    34,
+      78,    96,    79,    80,    35,    81,    82,    83,    84,    85,
+      86,   455,   453,   456,    87,    88,    89,    90,    36,    97,
+      37,    38,    39,    40,    41,    42,   160,   161,   162,   217,
+      43,    44,    45,    46,    47,    48,    49,   160,   161,   162,
+     160,   161,   162,   180,    50,   160,   161,   162,   181,   182,
+     183,   371,   122,   184,   414,   287,    51,    52,    53,   451,
+      -3,    76,   372,    54,    55,   373,   404,    56,    91,    74,
+     380,    16,   387,    17,    18,    19,    20,    21,    22,    23,
+      77,   149,   150,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    78,    96,    79,    80,    35,
+      81,    82,    83,    84,    85,    86,     0,     0,     0,    87,
+      88,    89,    90,    36,     0,    37,    38,    39,    40,    41,
+      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
+      48,    49,     0,     0,     0,     0,     0,     0,     0,    50,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    51,    52,    53,     0,     0,    76,     0,    54,    55,
+       0,     0,    56,    91,    74,   342,    16,     0,    17,    18,
+      19,    20,    21,    22,    23,    77,     0,     0,    24,    25,
+      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
+      78,    96,    79,    80,    35,    81,    82,    83,    84,    85,
+      86,     0,     0,     0,    87,    88,    89,    90,    36,     0,
+      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
+      43,    44,    45,    46,    47,    48,    49,     0,     0,     0,
+       0,     0,     0,     0,    50,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    51,    52,    53,     0,
+       0,    76,     0,    54,    55,     0,     0,    56,    91,    74,
+     436,    16,     0,    17,    18,    19,    20,    21,    22,    23,
+      77,     0,     0,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    78,    96,    79,    80,    35,
+      81,    82,    83,    84,    85,    86,     0,     0,     0,    87,
+      88,    89,    90,    36,     0,    37,    38,    39,    40,    41,
+      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
+      48,    49,     0,     0,     0,     0,     0,     0,     0,    50,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    51,    52,    53,     0,     0,    76,     0,    54,    55,
+       0,     0,    56,    91,    74,   448,    16,     0,    17,    18,
+      19,    20,    21,    22,    23,    77,     0,     0,    24,    25,
+      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
+      78,    96,    79,    80,    35,    81,    82,    83,    84,    85,
+      86,     0,     0,     0,    87,    88,    89,    90,    36,     0,
+      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
+      43,    44,    45,    46,    47,    48,    49,     0,     0,     0,
+       0,     0,     0,     0,    50,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    51,    52,    53,     0,
+       0,    76,     0,    54,    55,     0,     0,    56,    91,    74,
+       0,    16,     0,    17,    18,    19,    20,    21,    22,    23,
+      77,     0,     0,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    78,    96,    79,    80,    35,
+      81,    82,    83,    84,    85,    86,     0,     0,     0,    87,
+      88,    89,    90,    36,     0,    37,    38,    39,    40,    41,
+      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
+      48,    49,     0,     0,   460,     0,     0,     0,     0,    50,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    51,    52,    53,     0,     0,    76,     0,    54,    55,
+       0,     0,    56,    91,    74,     0,    16,     0,    17,    18,
+      19,    20,    21,    22,    23,    77,     0,     0,    24,    25,
+      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
+      78,    96,    79,    80,    35,    81,    82,    83,    84,    85,
+      86,     0,     0,     0,    87,    88,    89,    90,    36,     0,
+      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
+      43,    44,    45,    46,    47,    48,    49,     0,     0,     0,
+       0,     0,     0,     0,    50,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    51,    52,    53,     0,
+       0,    76,     0,    54,    55,     0,     0,    56,    91,    74,
+       0,    16,     0,    17,    18,    19,    20,    21,    22,    23,
+      77,     0,     0,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    78,     0,    79,    80,    35,
+      81,    82,    83,    84,    85,    86,     0,     0,     0,    87,
+      88,    89,    90,    36,     0,    37,    38,    39,    40,    41,
+      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
+      48,    49,     0,     0,     0,     0,     0,     0,     0,    50,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    51,    52,    53,    76,     0,     0,     0,    54,    55,
+       0,     0,    56,    91,    16,     0,    17,    18,    19,    20,
+      21,    22,    23,   -68,     0,     0,    24,    25,    26,    27,
+      28,     0,    29,    30,    31,    32,    33,    34,     0,     0,
+       0,     0,    35,     0,     0,  -204,     0,     0,     0,     0,
+       0,     0,   168,   169,   170,   171,    36,     0,    37,    38,
+      39,    40,    41,    42,     0,     0,     0,     0,    43,    44,
+      45,    46,    47,    48,    49,   174,   175,   176,   177,   178,
+     179,   180,    50,     0,     0,     0,   181,   182,   183,     0,
+       0,   184,     0,     0,    51,    52,    53,    76,     0,     0,
+       0,    54,    55,     0,     0,    56,     0,    16,     0,    17,
+      18,    19,    20,    21,    22,    23,     0,     0,     0,    24,
       25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,    78,    96,    79,    80,    35,    81,    82,    83,    84,
-      85,    86,     0,     0,     0,    87,    88,    89,    90,    36,
-       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
-       0,    43,    44,    45,    46,    47,    48,    49,     0,     0,
-       0,     0,     0,     0,     0,    50,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,    35,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
+       0,    37,    38,    39,    40,    41,    42,     0,     0,  -169,
+       0,    43,    44,    45,    46,    47,    48,    49,   186,     0,
+     187,  -169,     0,     0,     0,    50,     0,     0,     0,  -169,
        0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,    76,     0,    54,    55,     0,     0,    56,    91,
+     168,   169,   170,   171,    54,    55,     0,   -68,    56,     0,
+       0,  -169,  -169,  -169,  -169,     0,     0,     0,  -169,     0,
+    -169,     0,     0,  -169,     0,   176,   177,   178,   179,   180,
+    -169,  -169,  -169,  -169,   181,   182,   183,     0,     0,   184,
+       0,     0,     0,     0,     0,  -169,  -169,  -169,  -203,  -169,
+    -169,  -169,  -169,  -169,  -169,  -169,  -169,  -169,  -169,  -169,
+    -203,     0,     0,     0,  -169,  -169,  -169,     0,  -203,  -169,
+    -169,     0,     0,     0,     0,     0,     0,     0,     0,   168,
+     169,   170,   171,     0,     0,     0,     0,     0,     0,     0,
+    -203,  -203,  -203,  -203,     0,     0,     0,  -203,     0,  -203,
+       0,     0,  -203,     0,     0,   177,   178,   179,   180,  -203,
+    -203,  -203,  -203,   181,   182,   183,     0,     0,   184,     0,
+       0,     0,     0,     0,  -203,  -203,  -203,     0,  -203,  -203,
+    -203,  -203,  -203,  -203,  -203,  -203,  -203,  -203,  -203,     0,
+       0,     0,     0,  -203,  -203,  -203,     0,     0,  -203,  -203,
       74,     0,    16,     0,    17,    18,    19,    20,    21,    22,
-      23,    77,     0,     0,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    78,    96,    79,    80,
-      35,    81,    82,    83,    84,    85,    86,     0,     0,     0,
-      87,    88,    89,    90,    36,     0,    37,    38,    39,    40,
+      23,     0,     0,     0,   129,    25,    26,    27,    28,   107,
+      29,    30,    31,    32,    33,    34,     0,     0,     0,     0,
+      35,     0,     0,     0,     0,     0,     0,   168,   169,   170,
+     171,     0,     0,     0,    36,     0,    37,    38,    39,    40,
       41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
-      47,    48,    49,     0,     0,   457,     0,     0,     0,     0,
-      50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    51,    52,    53,     0,     0,    76,     0,    54,
-      55,     0,     0,    56,    91,    74,     0,    16,     0,    17,
-      18,    19,    20,    21,    22,    23,    77,     0,     0,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,    78,    96,    79,    80,    35,    81,    82,    83,    84,
-      85,    86,     0,     0,     0,    87,    88,    89,    90,    36,
-       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
-       0,    43,    44,    45,    46,    47,    48,    49,     0,     0,
-       0,     0,     0,     0,     0,    50,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,    76,     0,    54,    55,     0,     0,    56,    91,
-      74,     0,    16,     0,    17,    18,    19,    20,    21,    22,
-      23,    77,     0,     0,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    78,     0,    79,    80,
-      35,    81,    82,    83,    84,    85,    86,     0,     0,     0,
-      87,    88,    89,    90,    36,     0,    37,    38,    39,    40,
+      47,    48,    49,     0,   178,   179,   180,     0,     0,     0,
+      50,   181,   182,   183,     0,     0,   184,     0,     0,     0,
+       0,     0,    51,    52,    53,     0,     0,     0,     0,    54,
+      55,     0,    74,    56,    16,     0,    17,    18,    19,    20,
+      21,    22,    23,     0,     0,     0,   135,    25,    26,    27,
+      28,   136,    29,    30,    31,    32,    33,    34,     0,     0,
+       0,     0,    35,     0,     0,     0,     0,     0,     0,   168,
+    -204,   170,   171,     0,     0,     0,    36,     0,    37,    38,
+      39,    40,    41,    42,     0,     0,     0,     0,    43,    44,
+      45,    46,    47,    48,    49,     0,     0,   179,   180,     0,
+       0,     0,    50,   181,   182,   183,     0,     0,   184,     0,
+       0,     0,     0,     0,    51,    52,    53,     0,     0,     0,
+       0,    54,    55,     0,    74,    56,    16,     0,    17,    18,
+      19,    20,    21,    22,    23,     0,     0,     0,    24,    25,
+      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
+       0,     0,     0,     0,    35,     0,     0,     0,     0,     0,
+       0,   168,   169,   170,   171,     0,     0,     0,    36,     0,
+      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
+      43,    44,    45,    46,    47,    48,    49,     0,     0,   179,
+     180,     0,     0,     0,    50,   181,   182,   183,     0,     0,
+     184,     0,     0,     0,     0,     0,    51,    52,    53,     0,
+       0,     0,     0,    54,    55,     0,     0,    56,    16,   102,
+      17,    18,    19,    20,    21,    22,    23,     0,     0,     0,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
+      33,    34,     0,     0,     0,     0,    35,     0,     0,     0,
+       0,     0,     0,     0,     0,   170,   171,     0,     0,     0,
+      36,     0,    37,    38,    39,    40,    41,    42,     0,     0,
+       0,     0,    43,    44,    45,    46,    47,    48,    49,     0,
+       0,   179,   180,     0,     0,     0,    50,   181,   182,   183,
+       0,     0,   184,     0,     0,     0,     0,     0,    51,    52,
+      53,     0,     0,     0,     0,    54,    55,     0,    16,    56,
+      17,    18,    19,    20,    21,    22,    23,   141,     0,     0,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
+      33,    34,     0,     0,     0,     0,    35,   211,   212,   213,
+     214,     0,     0,     0,   215,     0,   216,     0,     0,     0,
+      36,     0,    37,    38,    39,    40,    41,    42,     0,     0,
+       0,     0,    43,    44,    45,    46,    47,    48,    49,     0,
+       0,   160,   161,   162,     0,     0,    50,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    51,    52,
+      53,     0,     0,     0,     0,    54,    55,     0,    16,    56,
+      17,    18,    19,    20,    21,    22,    23,     0,     0,     0,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
+      33,    34,     0,     0,     0,     0,    35,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      36,     0,    37,    38,    39,    40,    41,    42,     0,     0,
+       0,     0,    43,    44,    45,    46,    47,    48,    49,     0,
+       0,     0,     0,     0,     0,     0,    50,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    51,    52,
+      53,     0,     0,     0,     0,    54,    55,     0,   158,    56,
+      16,     0,    17,    18,    19,    20,    21,    22,    23,     0,
+       0,     0,    24,    25,    26,    27,    28,     0,    29,    30,
+      31,    32,    33,    34,     0,     0,     0,     0,    35,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    36,     0,    37,    38,    39,    40,    41,    42,
+       0,     0,     0,     0,    43,    44,    45,    46,    47,    48,
+      49,     0,     0,     0,     0,     0,     0,     0,    50,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      51,    52,    53,     0,     0,     0,     0,    54,    55,     0,
+     230,    56,    16,     0,    17,    18,    19,    20,    21,    22,
+      23,     0,     0,     0,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,     0,     0,     0,     0,
+      35,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    36,     0,    37,    38,    39,    40,
       41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
       47,    48,    49,     0,     0,     0,     0,     0,     0,     0,
       50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    51,    52,    53,    76,     0,     0,     0,    54,
-      55,     0,     0,    56,    91,    16,     0,    17,    18,    19,
-      20,    21,    22,    23,   -68,     0,     0,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,    32,    33,    34,     0,
-       0,     0,     0,    35,     0,     0,  -203,     0,     0,     0,
-       0,     0,     0,   168,   169,   170,   171,    36,     0,    37,
-      38,    39,    40,    41,    42,     0,     0,     0,     0,    43,
-      44,    45,    46,    47,    48,    49,   174,   175,   176,   177,
-     178,   179,   180,    50,     0,     0,     0,   181,   182,   183,
-       0,     0,   184,     0,     0,    51,    52,    53,    76,     0,
-       0,     0,    54,    55,     0,     0,    56,     0,    16,     0,
+       0,     0,    51,    52,    53,     0,     0,     0,     0,    54,
+      55,     0,   240,    56,    16,     0,    17,    18,    19,    20,
+      21,    22,    23,     0,     0,     0,    24,    25,    26,    27,
+      28,     0,    29,    30,    31,    32,    33,    34,     0,     0,
+       0,     0,    35,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    36,     0,    37,    38,
+      39,    40,    41,    42,     0,     0,     0,     0,    43,    44,
+      45,    46,    47,    48,    49,     0,     0,     0,     0,     0,
+       0,     0,    50,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    51,    52,    53,     0,     0,     0,
+       0,    54,    55,     0,   252,    56,    16,     0,    17,    18,
+      19,    20,    21,    22,    23,     0,     0,     0,    24,    25,
+      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
+       0,     0,     0,     0,    35,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
+      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
+      43,    44,    45,    46,    47,    48,    49,     0,     0,     0,
+       0,     0,     0,     0,    50,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    51,    52,    53,     0,
+       0,     0,     0,    54,    55,     0,   275,    56,    16,     0,
       17,    18,    19,    20,    21,    22,    23,     0,     0,     0,
       24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
       33,    34,     0,     0,     0,     0,    35,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       36,     0,    37,    38,    39,    40,    41,    42,     0,     0,
-    -169,     0,    43,    44,    45,    46,    47,    48,    49,   186,
-       0,   187,  -169,     0,     0,     0,    50,     0,     0,     0,
-    -169,     0,     0,     0,     0,     0,     0,     0,    51,    52,
-      53,   168,   169,   170,   171,    54,    55,     0,   -68,    56,
-       0,     0,  -169,  -169,  -169,  -169,     0,     0,     0,  -169,
-       0,  -169,     0,     0,  -169,     0,   176,   177,   178,   179,
-     180,  -169,  -169,  -169,  -169,   181,   182,   183,     0,     0,
-     184,   170,   171,     0,     0,     0,  -169,  -169,  -169,  -202,
-    -169,  -169,  -169,  -169,  -169,  -169,  -169,  -169,  -169,  -169,
-    -169,  -202,     0,     0,     0,  -169,  -169,  -169,   180,  -202,
-    -169,  -169,     0,   181,   182,   183,     0,     0,   184,     0,
-     168,   169,   170,   171,     0,     0,     0,     0,     0,     0,
-       0,  -202,  -202,  -202,  -202,     0,     0,     0,  -202,     0,
-    -202,     0,     0,  -202,     0,     0,   177,   178,   179,   180,
-    -202,  -202,  -202,  -202,   181,   182,   183,     0,     0,   184,
-       0,     0,     0,     0,     0,  -202,  -202,  -202,     0,  -202,
-    -202,  -202,  -202,  -202,  -202,  -202,  -202,  -202,  -202,  -202,
-       0,     0,     0,     0,  -202,  -202,  -202,     0,     0,  -202,
-    -202,    74,     0,    16,     0,    17,    18,    19,    20,    21,
-      22,    23,     0,     0,     0,   129,    25,    26,    27,    28,
-     107,    29,    30,    31,    32,    33,    34,     0,     0,     0,
-       0,    35,     0,     0,     0,     0,     0,     0,   168,   169,
-     170,   171,     0,     0,     0,    36,     0,    37,    38,    39,
-      40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
-      46,    47,    48,    49,     0,   178,   179,   180,     0,     0,
-       0,    50,   181,   182,   183,     0,     0,   184,     0,     0,
-       0,     0,     0,    51,    52,    53,     0,     0,     0,     0,
-      54,    55,     0,    74,    56,    16,     0,    17,    18,    19,
-      20,    21,    22,    23,     0,     0,     0,   135,    25,    26,
-      27,    28,   136,    29,    30,    31,    32,    33,    34,     0,
-       0,     0,     0,    35,     0,     0,     0,     0,     0,     0,
-     168,  -203,   170,   171,     0,     0,     0,    36,     0,    37,
-      38,    39,    40,    41,    42,     0,     0,     0,     0,    43,
-      44,    45,    46,    47,    48,    49,     0,     0,   179,   180,
-       0,     0,     0,    50,   181,   182,   183,     0,     0,   184,
-       0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
-       0,     0,    54,    55,     0,    74,    56,    16,     0,    17,
-      18,    19,    20,    21,    22,    23,     0,     0,     0,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,     0,     0,     0,     0,    35,     0,     0,     0,     0,
-       0,     0,   168,   169,   170,   171,     0,     0,     0,    36,
-       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
-       0,    43,    44,    45,    46,    47,    48,    49,     0,     0,
-     179,   180,     0,     0,     0,    50,   181,   182,   183,     0,
-       0,   184,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,     0,     0,    54,    55,     0,     0,    56,    16,
-     102,    17,    18,    19,    20,    21,    22,    23,     0,     0,
-       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,     0,     0,    35,     0,     0,
-       0,     0,     0,     0,  -203,     0,   170,   171,     0,     0,
-       0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
-       0,     0,     0,    43,    44,    45,    46,    47,    48,    49,
-       0,     0,   179,   180,     0,     0,     0,    50,   181,   182,
-     183,     0,     0,   184,     0,     0,     0,     0,     0,    51,
-      52,    53,     0,     0,     0,     0,    54,    55,     0,    16,
-      56,    17,    18,    19,    20,    21,    22,    23,   141,     0,
-       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,     0,     0,    35,     0,     0,
-       0,     0,     0,     0,     0,     0,   170,   171,     0,     0,
-       0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
-       0,     0,     0,    43,    44,    45,    46,    47,    48,    49,
-       0,     0,   179,   180,     0,     0,     0,    50,   181,   182,
-     183,     0,     0,   184,     0,     0,     0,     0,     0,    51,
-      52,    53,     0,     0,     0,     0,    54,    55,     0,    16,
-      56,    17,    18,    19,    20,    21,    22,    23,     0,     0,
-       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,     0,     0,    35,   210,   211,
-     212,   213,     0,     0,     0,   214,     0,   215,     0,     0,
-       0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
-       0,     0,     0,    43,    44,    45,    46,    47,    48,    49,
-       0,     0,   160,   161,   162,     0,     0,    50,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
-      52,    53,     0,     0,     0,     0,    54,    55,     0,   158,
-      56,    16,     0,    17,    18,    19,    20,    21,    22,    23,
-       0,     0,     0,    24,    25,    26,    27,    28,     0,    29,
-      30,    31,    32,    33,    34,     0,     0,     0,     0,    35,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    36,     0,    37,    38,    39,    40,    41,
-      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
-      48,    49,     0,     0,     0,     0,     0,     0,     0,    50,
+       0,     0,    43,    44,    45,    46,    47,    48,    49,     0,
+       0,     0,     0,     0,     0,     0,    50,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    51,    52,
+      53,     0,     0,     0,     0,    54,    55,     0,   316,    56,
+      16,     0,    17,    18,    19,    20,    21,    22,    23,     0,
+       0,     0,    24,    25,    26,    27,    28,     0,    29,    30,
+      31,    32,    33,    34,     0,     0,     0,     0,    35,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    51,    52,    53,     0,     0,     0,     0,    54,    55,
-       0,   229,    56,    16,     0,    17,    18,    19,    20,    21,
-      22,    23,     0,     0,     0,    24,    25,    26,    27,    28,
-       0,    29,    30,    31,    32,    33,    34,     0,     0,     0,
-       0,    35,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    36,     0,    37,    38,    39,
-      40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
-      46,    47,    48,    49,     0,     0,     0,     0,     0,     0,
-       0,    50,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    51,    52,    53,     0,     0,     0,     0,
-      54,    55,     0,   239,    56,    16,     0,    17,    18,    19,
-      20,    21,    22,    23,     0,     0,     0,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,    32,    33,    34,     0,
-       0,     0,     0,    35,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
-      38,    39,    40,    41,    42,     0,     0,     0,     0,    43,
-      44,    45,    46,    47,    48,    49,     0,     0,     0,     0,
-       0,     0,     0,    50,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
-       0,     0,    54,    55,     0,   251,    56,    16,     0,    17,
-      18,    19,    20,    21,    22,    23,     0,     0,     0,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,     0,     0,     0,     0,    35,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
-       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
-       0,    43,    44,    45,    46,    47,    48,    49,     0,     0,
-       0,     0,     0,     0,     0,    50,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,     0,     0,    54,    55,     0,   274,    56,    16,
-       0,    17,    18,    19,    20,    21,    22,    23,     0,     0,
-       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,     0,     0,    35,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
-       0,     0,     0,    43,    44,    45,    46,    47,    48,    49,
-       0,     0,     0,     0,     0,     0,     0,    50,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
-      52,    53,     0,     0,     0,     0,    54,    55,     0,   314,
-      56,    16,     0,    17,    18,    19,    20,    21,    22,    23,
-       0,     0,     0,    24,    25,    26,    27,    28,     0,    29,
-      30,    31,    32,    33,    34,     0,     0,     0,     0,    35,
+       0,     0,    36,     0,    37,    38,    39,    40,    41,    42,
+       0,     0,     0,     0,    43,    44,    45,    46,    47,    48,
+      49,     0,     0,     0,     0,     0,     0,     0,    50,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    36,     0,    37,    38,    39,    40,    41,
-      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
-      48,    49,     0,     0,     0,     0,     0,     0,     0,    50,
+      51,    52,    53,     0,     0,     0,     0,    54,    55,     0,
+     318,    56,    16,     0,    17,    18,    19,    20,    21,    22,
+      23,     0,     0,     0,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,     0,     0,     0,     0,
+      35,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    36,     0,    37,    38,    39,    40,
+      41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
+      47,    48,    49,     0,     0,     0,     0,     0,     0,     0,
+      50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    51,    52,    53,     0,     0,     0,     0,    54,
+      55,     0,   331,    56,    16,     0,    17,    18,    19,    20,
+      21,    22,    23,     0,     0,     0,    24,    25,    26,    27,
+      28,     0,    29,    30,    31,    32,    33,    34,     0,     0,
+       0,     0,    35,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    36,     0,    37,    38,
+      39,    40,    41,    42,     0,     0,     0,     0,    43,    44,
+      45,    46,    47,    48,    49,     0,   167,     0,     0,     0,
+       0,     0,    50,   168,   169,   170,   171,     0,     0,     0,
+       0,     0,     0,     0,    51,    52,    53,     0,     0,     0,
+       0,    54,    55,   172,   173,    56,   174,   175,   176,   177,
+     178,   179,   180,     0,     0,     0,   167,   181,   182,   183,
+       0,     0,   184,   168,   169,   170,   171,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    51,    52,    53,     0,     0,     0,     0,    54,    55,
-       0,   316,    56,    16,     0,    17,    18,    19,    20,    21,
-      22,    23,     0,     0,     0,    24,    25,    26,    27,    28,
-       0,    29,    30,    31,    32,    33,    34,     0,     0,     0,
-       0,    35,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    36,     0,    37,    38,    39,
-      40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
-      46,    47,    48,    49,     0,     0,     0,     0,     0,     0,
-       0,    50,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    51,    52,    53,     0,     0,     0,     0,
-      54,    55,     0,   329,    56,    16,     0,    17,    18,    19,
-      20,    21,    22,    23,     0,     0,     0,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,    32,    33,    34,     0,
-       0,     0,     0,    35,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
-      38,    39,    40,    41,    42,     0,     0,     0,     0,    43,
-      44,    45,    46,    47,    48,    49,     0,   167,     0,     0,
-       0,     0,     0,    50,   168,   169,   170,   171,     0,     0,
-       0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
-       0,     0,    54,    55,     0,   173,    56,   174,   175,   176,
-     177,   178,   179,   180,     0,     0,     0,     0,   181,   182,
-     183,     0,     0,   184
+       0,     0,     0,     0,   173,     0,   174,   175,   176,   177,
+     178,   179,   180,     0,     0,     0,     0,   181,   182,   183,
+       0,     0,   184
 };
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-399)))
+  (!!((Yystate) == (-387)))
 
 #define yytable_value_is_error(Yytable_value) \
-  (!!((Yytable_value) == (-203)))
+  (!!((Yytable_value) == (-204)))
 
 static const yytype_int16 yycheck[] =
 {
-      10,    11,    12,    15,    74,     9,   115,   126,    42,    12,
-     408,     9,    16,    11,    15,    11,    50,   293,   293,   388,
-     295,   296,     9,    12,    11,     9,    19,    20,    21,    22,
-      23,    41,    25,    26,    44,   144,    20,    20,    21,    22,
-      23,    45,    25,    26,    46,    76,    77,    78,    20,    42,
-      43,    44,    56,    12,    26,    48,     9,   455,    11,    42,
-      43,   430,    15,    15,    16,    17,     9,    46,    47,    70,
-     101,    24,    12,    76,    77,    78,     0,    20,    80,    23,
-      90,   115,    12,    20,    28,   360,    96,    76,    77,    78,
-     100,   101,    80,     9,    87,    20,    76,    77,    78,   133,
-      96,   102,   221,    12,   102,     9,    12,    11,   102,    12,
-     144,   121,    11,   101,   118,   102,   391,    76,    77,    78,
-      20,   125,   126,     9,   289,    11,   291,   197,   198,   199,
-     200,   201,   202,   126,   204,   205,    76,    77,    78,    76,
-      77,    78,   146,   126,    20,   102,    76,    77,    78,   102,
-     102,    76,    77,    78,   102,   102,   160,   161,   162,    80,
-     164,   165,   166,   438,   440,     9,   102,    76,    77,    78,
-      76,    77,    78,    76,    77,    78,    76,    77,    78,     9,
-     192,   185,   186,   187,   188,   189,   190,   191,   222,    23,
-     102,   184,   102,    76,    77,    78,    48,   207,    20,   308,
-      76,    77,    78,    20,   102,   102,   210,   211,   212,   213,
-     214,   215,   331,     9,    17,    18,   101,   221,   101,    15,
-     390,   102,   392,    20,   294,   395,   396,    23,   232,    32,
-     234,   235,    28,    36,   404,   405,    96,    97,    41,   243,
-     100,    44,   412,   102,    47,   102,    49,   102,    51,    52,
-      53,    54,    55,    20,   424,    26,   101,    10,   428,    76,
-      77,    78,   102,   102,   268,   269,    72,   271,    11,    23,
-     340,   102,   282,   343,   308,   101,    23,   386,    72,    76,
-      77,    78,   452,   453,   288,   289,   290,   291,    10,   293,
-      26,   295,   296,    11,    42,    43,    44,    45,    78,   292,
-     310,    49,   102,    51,    21,    54,    76,    77,    78,    76,
-      77,    78,    61,    62,    63,    64,    23,    15,   322,    76,
-      77,    78,   101,    26,    76,    77,    78,   331,    76,    77,
-      78,   101,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    23,    10,   101,    10,    95,    96,    97,   101,
-      10,   100,   386,   101,    10,    10,   360,    76,    77,    78,
-     163,   101,   101,   101,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,    76,
-      77,    78,   101,    76,    77,    78,    54,   391,   101,   393,
-     402,   401,   102,    61,    62,    63,    64,   101,    76,    77,
-      78,    95,    96,    97,   101,    20,   100,    10,   101,   419,
-     101,   423,   101,    81,    82,   101,    84,    85,    86,    87,
-      88,    89,    90,   101,    20,     9,   436,    95,    96,    97,
-     101,    74,   100,    20,   438,   101,     0,     1,   450,    20,
-     102,    73,    22,   101,   454,     9,    12,    11,   101,    13,
-      14,    15,    16,    17,    18,    19,    20,    96,   393,    23,
-      24,    25,    26,    27,   440,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,   194,    35,    63,    49,    50,    51,    52,    53,
-     384,    55,    56,    57,    58,    59,    60,    48,    48,   342,
-      -1,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      -1,    90,    -1,    -1,    -1,    79,    95,    96,    97,    -1,
-      -1,   100,    -1,   326,    -1,    -1,    -1,    91,    92,    93,
-      -1,     0,     1,    -1,    98,    99,    -1,    -1,   102,   103,
-       9,    -1,    11,    -1,    13,    14,    15,    16,    17,    18,
-      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
-      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
-      59,    60,   410,    -1,    -1,    -1,    65,    66,    67,    68,
-      69,    70,    71,   421,   422,    -1,    -1,    -1,    -1,    90,
-      79,    -1,    -1,   431,    95,    96,    97,    -1,    -1,   100,
-      -1,   439,    91,    92,    93,    -1,    -1,     1,    -1,    98,
-      99,    -1,    -1,   102,   103,     9,    10,    11,    -1,    13,
-      14,    15,    16,    17,    18,    19,    20,    -1,    -1,    23,
-      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
-      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
-      -1,    65,    66,    67,    68,    69,    70,    71,     3,     4,
-       5,     6,     7,     8,    -1,    79,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
-      -1,    -1,     1,    -1,    98,    99,    -1,    -1,   102,   103,
-       9,    10,    11,    -1,    13,    14,    15,    16,    17,    18,
-      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
-      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
-      59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    91,    92,    93,    -1,    -1,     1,    -1,    98,
-      99,    -1,    -1,   102,   103,     9,    10,    11,    -1,    13,
-      14,    15,    16,    17,    18,    19,    20,    -1,    -1,    23,
+      10,    11,    12,    15,    42,   295,   295,    11,   297,   298,
+       9,   115,    50,   126,     9,     0,    11,    16,    12,     9,
+      15,    11,     9,    15,    11,   411,   391,    20,     9,    24,
+      11,    41,    46,    26,    44,    19,    20,    21,    22,    23,
+     144,    25,    26,     9,    74,     9,    45,    23,    20,    21,
+      22,    23,    28,    25,    26,    80,    20,    56,    42,    43,
+      44,    15,    16,    17,    48,     9,    80,    11,   433,    11,
+      42,    43,   458,    12,   363,   102,   101,   115,    70,    12,
+      90,   102,    76,    77,    78,    12,    96,    46,    47,     9,
+     100,   101,    96,   102,    12,   133,   102,    80,    17,    18,
+      20,   102,     9,    87,     9,   394,   144,   102,    15,   222,
+     102,   121,   102,    32,    12,   102,    23,    36,    12,   118,
+      23,    28,    41,   102,   102,    44,   125,   126,    47,   102,
+      49,    12,    51,    52,    53,    54,    55,    76,    77,    78,
+     102,   102,   126,    76,    77,    78,    20,   146,   102,    76,
+      77,    78,   441,   443,   126,    76,    77,    78,    76,    77,
+      78,   160,   161,   162,    12,   164,   165,   166,   198,   199,
+     200,   201,   202,   203,   102,   205,   206,    48,    76,    77,
+      78,   193,    76,    77,    78,   223,   185,   186,   187,   188,
+     189,   190,   191,   192,    20,    76,    77,    78,   208,     9,
+     184,    11,    76,    77,    78,   102,   310,    20,    76,    77,
+      78,    20,   211,   212,   213,   214,   215,   216,   102,    20,
+     333,   101,    20,   222,   291,    20,   293,    26,    76,    77,
+      78,    20,   101,   101,   233,   102,   235,   236,     3,     4,
+       5,     6,     7,     8,   163,   244,   102,    10,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,    76,    77,    78,   296,    76,    77,    78,
+     269,   270,   310,   272,   284,    76,    77,    78,    76,    77,
+      78,    76,    77,    78,    72,   389,    11,    76,    77,    78,
+      23,   290,   291,   292,   293,    23,   295,   102,   297,   298,
+      72,   101,   312,   413,    63,    64,   393,    10,   395,    26,
+     294,   398,   399,   343,   424,   425,   346,    95,    96,    97,
+     407,   408,   100,    78,   434,   324,    11,    61,   415,    63,
+      64,    90,   442,   102,   333,    21,    95,    96,    97,    23,
+     427,   100,    15,   101,   431,    42,    43,    44,    45,    26,
+      63,   389,    49,    10,    51,    89,    90,    10,    10,    10,
+      10,    95,    96,    97,   363,    23,   100,   102,   455,   456,
+     101,    76,    77,    78,    96,    97,    20,    90,   100,    76,
+      77,    78,    95,    96,    97,   101,   101,   100,    76,    77,
+      78,    54,   101,   405,   404,   394,   101,   396,    61,    62,
+      63,    64,   101,   101,   101,    76,    77,    78,   101,   328,
+      10,   101,   422,   101,   426,    76,    77,    78,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    20,   439,
+     101,     9,    95,    96,    97,     0,     1,   100,    74,   101,
+     101,   453,   441,   102,     9,    20,    11,   457,    13,    14,
+      15,    16,    17,    18,    19,    20,   101,    20,    23,    24,
+      25,    26,    27,    22,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,   101,    73,   101,    49,    50,    51,    52,    53,    12,
+      55,    56,    57,    58,    59,    60,    76,    77,    78,    96,
+      65,    66,    67,    68,    69,    70,    71,    76,    77,    78,
+      76,    77,    78,    90,    79,    76,    77,    78,    95,    96,
+      97,   101,    35,   100,   396,   195,    91,    92,    93,   443,
+       0,     1,   101,    98,    99,   101,   387,   102,   103,     9,
+     101,    11,   345,    13,    14,    15,    16,    17,    18,    19,
+      20,    48,    48,    23,    24,    25,    26,    27,    -1,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    -1,    -1,    -1,    49,
+      50,    51,    52,    53,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    91,    92,    93,    -1,    -1,     1,    -1,    98,    99,
+      -1,    -1,   102,   103,     9,    10,    11,    -1,    13,    14,
+      15,    16,    17,    18,    19,    20,    -1,    -1,    23,    24,
+      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,
+      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,
+      -1,     1,    -1,    98,    99,    -1,    -1,   102,   103,     9,
+      10,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
+      20,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    -1,    -1,    -1,    49,
+      50,    51,    52,    53,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    91,    92,    93,    -1,    -1,     1,    -1,    98,    99,
+      -1,    -1,   102,   103,     9,    10,    11,    -1,    13,    14,
+      15,    16,    17,    18,    19,    20,    -1,    -1,    23,    24,
+      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,
+      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,
+      -1,     1,    -1,    98,    99,    -1,    -1,   102,   103,     9,
+      -1,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
+      20,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    -1,    -1,    -1,    49,
+      50,    51,    52,    53,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    74,    -1,    -1,    -1,    -1,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    91,    92,    93,    -1,    -1,     1,    -1,    98,    99,
+      -1,    -1,   102,   103,     9,    -1,    11,    -1,    13,    14,
+      15,    16,    17,    18,    19,    20,    -1,    -1,    23,    24,
+      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,
+      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,
+      -1,     1,    -1,    98,    99,    -1,    -1,   102,   103,     9,
+      -1,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
+      20,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
+      30,    31,    32,    33,    34,    35,    -1,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    -1,    -1,    -1,    49,
+      50,    51,    52,    53,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    91,    92,    93,     1,    -1,    -1,    -1,    98,    99,
+      -1,    -1,   102,   103,    11,    -1,    13,    14,    15,    16,
+      17,    18,    19,    20,    -1,    -1,    23,    24,    25,    26,
+      27,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
+      -1,    -1,    39,    -1,    -1,    54,    -1,    -1,    -1,    -1,
+      -1,    -1,    61,    62,    63,    64,    53,    -1,    55,    56,
+      57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,
+      67,    68,    69,    70,    71,    84,    85,    86,    87,    88,
+      89,    90,    79,    -1,    -1,    -1,    95,    96,    97,    -1,
+      -1,   100,    -1,    -1,    91,    92,    93,     1,    -1,    -1,
+      -1,    98,    99,    -1,    -1,   102,    -1,    11,    -1,    13,
+      14,    15,    16,    17,    18,    19,    -1,    -1,    -1,    23,
       24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
-      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
-      -1,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
+      34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,     0,
+      -1,    65,    66,    67,    68,    69,    70,    71,     9,    -1,
+      11,    12,    -1,    -1,    -1,    79,    -1,    -1,    -1,    20,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
-      -1,    -1,     1,    -1,    98,    99,    -1,    -1,   102,   103,
+      61,    62,    63,    64,    98,    99,    -1,   101,   102,    -1,
+      -1,    42,    43,    44,    45,    -1,    -1,    -1,    49,    -1,
+      51,    -1,    -1,    54,    -1,    86,    87,    88,    89,    90,
+      61,    62,    63,    64,    95,    96,    97,    -1,    -1,   100,
+      -1,    -1,    -1,    -1,    -1,    76,    77,    78,     0,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      12,    -1,    -1,    -1,    95,    96,    97,    -1,    20,   100,
+     101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,
+      62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      42,    43,    44,    45,    -1,    -1,    -1,    49,    -1,    51,
+      -1,    -1,    54,    -1,    -1,    87,    88,    89,    90,    61,
+      62,    63,    64,    95,    96,    97,    -1,    -1,   100,    -1,
+      -1,    -1,    -1,    -1,    76,    77,    78,    -1,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    -1,
+      -1,    -1,    -1,    95,    96,    97,    -1,    -1,   100,   101,
        9,    -1,    11,    -1,    13,    14,    15,    16,    17,    18,
-      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
-      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
+      19,    -1,    -1,    -1,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
+      39,    -1,    -1,    -1,    -1,    -1,    -1,    61,    62,    63,
+      64,    -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,
       59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
-      69,    70,    71,    -1,    -1,    74,    -1,    -1,    -1,    -1,
-      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    91,    92,    93,    -1,    -1,     1,    -1,    98,
-      99,    -1,    -1,   102,   103,     9,    -1,    11,    -1,    13,
-      14,    15,    16,    17,    18,    19,    20,    -1,    -1,    23,
-      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
-      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
-      -1,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
-      -1,    -1,     1,    -1,    98,    99,    -1,    -1,   102,   103,
-       9,    -1,    11,    -1,    13,    14,    15,    16,    17,    18,
-      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
-      29,    30,    31,    32,    33,    34,    35,    -1,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
-      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
+      69,    70,    71,    -1,    88,    89,    90,    -1,    -1,    -1,
+      79,    95,    96,    97,    -1,    -1,   100,    -1,    -1,    -1,
+      -1,    -1,    91,    92,    93,    -1,    -1,    -1,    -1,    98,
+      99,    -1,     9,   102,    11,    -1,    13,    14,    15,    16,
+      17,    18,    19,    -1,    -1,    -1,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
+      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    61,
+      62,    63,    64,    -1,    -1,    -1,    53,    -1,    55,    56,
+      57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,
+      67,    68,    69,    70,    71,    -1,    -1,    89,    90,    -1,
+      -1,    -1,    79,    95,    96,    97,    -1,    -1,   100,    -1,
+      -1,    -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,
+      -1,    98,    99,    -1,     9,   102,    11,    -1,    13,    14,
+      15,    16,    17,    18,    19,    -1,    -1,    -1,    23,    24,
+      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
+      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,    61,    62,    63,    64,    -1,    -1,    -1,    53,    -1,
+      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    89,
+      90,    -1,    -1,    -1,    79,    95,    96,    97,    -1,    -1,
+     100,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,
+      -1,    -1,    -1,    98,    99,    -1,    -1,   102,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
+      23,    24,    25,    26,    27,    -1,    29,    30,    31,    32,
+      33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    63,    64,    -1,    -1,    -1,
+      53,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      -1,    -1,    65,    66,    67,    68,    69,    70,    71,    -1,
+      -1,    89,    90,    -1,    -1,    -1,    79,    95,    96,    97,
+      -1,    -1,   100,    -1,    -1,    -1,    -1,    -1,    91,    92,
+      93,    -1,    -1,    -1,    -1,    98,    99,    -1,    11,   102,
+      13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
+      23,    24,    25,    26,    27,    -1,    29,    30,    31,    32,
+      33,    34,    -1,    -1,    -1,    -1,    39,    42,    43,    44,
+      45,    -1,    -1,    -1,    49,    -1,    51,    -1,    -1,    -1,
+      53,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      -1,    -1,    65,    66,    67,    68,    69,    70,    71,    -1,
+      -1,    76,    77,    78,    -1,    -1,    79,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,
+      93,    -1,    -1,    -1,    -1,    98,    99,    -1,    11,   102,
+      13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
+      23,    24,    25,    26,    27,    -1,    29,    30,    31,    32,
+      33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      53,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      -1,    -1,    65,    66,    67,    68,    69,    70,    71,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,
+      93,    -1,    -1,    -1,    -1,    98,    99,    -1,   101,   102,
+      11,    -1,    13,    14,    15,    16,    17,    18,    19,    -1,
+      -1,    -1,    23,    24,    25,    26,    27,    -1,    29,    30,
+      31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    53,    -1,    55,    56,    57,    58,    59,    60,
+      -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      91,    92,    93,    -1,    -1,    -1,    -1,    98,    99,    -1,
+     101,   102,    11,    -1,    13,    14,    15,    16,    17,    18,
+      19,    -1,    -1,    -1,    23,    24,    25,    26,    27,    -1,
+      29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
+      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,
       59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
       69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    91,    92,    93,     1,    -1,    -1,    -1,    98,
-      99,    -1,    -1,   102,   103,    11,    -1,    13,    14,    15,
-      16,    17,    18,    19,    20,    -1,    -1,    23,    24,    25,
-      26,    27,    -1,    29,    30,    31,    32,    33,    34,    -1,
-      -1,    -1,    -1,    39,    -1,    -1,    54,    -1,    -1,    -1,
-      -1,    -1,    -1,    61,    62,    63,    64,    53,    -1,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
-      66,    67,    68,    69,    70,    71,    84,    85,    86,    87,
-      88,    89,    90,    79,    -1,    -1,    -1,    95,    96,    97,
-      -1,    -1,   100,    -1,    -1,    91,    92,    93,     1,    -1,
-      -1,    -1,    98,    99,    -1,    -1,   102,    -1,    11,    -1,
+      -1,    -1,    91,    92,    93,    -1,    -1,    -1,    -1,    98,
+      99,    -1,   101,   102,    11,    -1,    13,    14,    15,    16,
+      17,    18,    19,    -1,    -1,    -1,    23,    24,    25,    26,
+      27,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
+      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,    55,    56,
+      57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,
+      67,    68,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,
+      -1,    98,    99,    -1,   101,   102,    11,    -1,    13,    14,
+      15,    16,    17,    18,    19,    -1,    -1,    -1,    23,    24,
+      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
+      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,
+      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
+      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,
+      -1,    -1,    -1,    98,    99,    -1,   101,   102,    11,    -1,
       13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
       23,    24,    25,    26,    27,    -1,    29,    30,    31,    32,
       33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       53,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
-       0,    -1,    65,    66,    67,    68,    69,    70,    71,     9,
-      -1,    11,    12,    -1,    -1,    -1,    79,    -1,    -1,    -1,
-      20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,
-      93,    61,    62,    63,    64,    98,    99,    -1,   101,   102,
-      -1,    -1,    42,    43,    44,    45,    -1,    -1,    -1,    49,
-      -1,    51,    -1,    -1,    54,    -1,    86,    87,    88,    89,
-      90,    61,    62,    63,    64,    95,    96,    97,    -1,    -1,
-     100,    63,    64,    -1,    -1,    -1,    76,    77,    78,     0,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    12,    -1,    -1,    -1,    95,    96,    97,    90,    20,
-     100,   101,    -1,    95,    96,    97,    -1,    -1,   100,    -1,
-      61,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    42,    43,    44,    45,    -1,    -1,    -1,    49,    -1,
-      51,    -1,    -1,    54,    -1,    -1,    87,    88,    89,    90,
-      61,    62,    63,    64,    95,    96,    97,    -1,    -1,   100,
-      -1,    -1,    -1,    -1,    -1,    76,    77,    78,    -1,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      -1,    -1,    -1,    -1,    95,    96,    97,    -1,    -1,   100,
-     101,     9,    -1,    11,    -1,    13,    14,    15,    16,    17,
-      18,    19,    -1,    -1,    -1,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    61,    62,
-      63,    64,    -1,    -1,    -1,    53,    -1,    55,    56,    57,
-      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
-      68,    69,    70,    71,    -1,    88,    89,    90,    -1,    -1,
-      -1,    79,    95,    96,    97,    -1,    -1,   100,    -1,    -1,
-      -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,    -1,
-      98,    99,    -1,     9,   102,    11,    -1,    13,    14,    15,
-      16,    17,    18,    19,    -1,    -1,    -1,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
-      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-      61,    62,    63,    64,    -1,    -1,    -1,    53,    -1,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    89,    90,
-      -1,    -1,    -1,    79,    95,    96,    97,    -1,    -1,   100,
-      -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,    -1,
-      -1,    -1,    98,    99,    -1,     9,   102,    11,    -1,    13,
-      14,    15,    16,    17,    18,    19,    -1,    -1,    -1,    23,
-      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
-      34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
-      -1,    -1,    61,    62,    63,    64,    -1,    -1,    -1,    53,
-      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
-      -1,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      89,    90,    -1,    -1,    -1,    79,    95,    96,    97,    -1,
-      -1,   100,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
-      -1,    -1,    -1,    -1,    98,    99,    -1,    -1,   102,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    -1,    -1,
-      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    61,    -1,    63,    64,    -1,    -1,
-      -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    89,    90,    -1,    -1,    -1,    79,    95,    96,
-      97,    -1,    -1,   100,    -1,    -1,    -1,    -1,    -1,    91,
-      92,    93,    -1,    -1,    -1,    -1,    98,    99,    -1,    11,
-     102,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
-      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    63,    64,    -1,    -1,
-      -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    89,    90,    -1,    -1,    -1,    79,    95,    96,
-      97,    -1,    -1,   100,    -1,    -1,    -1,    -1,    -1,    91,
-      92,    93,    -1,    -1,    -1,    -1,    98,    99,    -1,    11,
-     102,    13,    14,    15,    16,    17,    18,    19,    -1,    -1,
-      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    39,    42,    43,
-      44,    45,    -1,    -1,    -1,    49,    -1,    51,    -1,    -1,
-      -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    76,    77,    78,    -1,    -1,    79,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,
-      92,    93,    -1,    -1,    -1,    -1,    98,    99,    -1,   101,
-     102,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
-      -1,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
-      30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,    65,    66,    67,    68,    69,    70,    71,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,
+      93,    -1,    -1,    -1,    -1,    98,    99,    -1,   101,   102,
+      11,    -1,    13,    14,    15,    16,    17,    18,    19,    -1,
+      -1,    -1,    23,    24,    25,    26,    27,    -1,    29,    30,
+      31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    91,    92,    93,    -1,    -1,    -1,    -1,    98,    99,
-      -1,   101,   102,    11,    -1,    13,    14,    15,    16,    17,
-      18,    19,    -1,    -1,    -1,    23,    24,    25,    26,    27,
-      -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    53,    -1,    55,    56,    57,
-      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,    -1,
-      98,    99,    -1,   101,   102,    11,    -1,    13,    14,    15,
-      16,    17,    18,    19,    -1,    -1,    -1,    23,    24,    25,
-      26,    27,    -1,    29,    30,    31,    32,    33,    34,    -1,
-      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,    -1,
-      -1,    -1,    98,    99,    -1,   101,   102,    11,    -1,    13,
-      14,    15,    16,    17,    18,    19,    -1,    -1,    -1,    23,
-      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
-      34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,
-      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
-      -1,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
-      -1,    -1,    -1,    -1,    98,    99,    -1,   101,   102,    11,
-      -1,    13,    14,    15,    16,    17,    18,    19,    -1,    -1,
-      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,
-      92,    93,    -1,    -1,    -1,    -1,    98,    99,    -1,   101,
-     102,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
-      -1,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
-      30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,    53,    -1,    55,    56,    57,    58,    59,    60,
+      -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,    70,
+      71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      91,    92,    93,    -1,    -1,    -1,    -1,    98,    99,    -1,
+     101,   102,    11,    -1,    13,    14,    15,    16,    17,    18,
+      19,    -1,    -1,    -1,    23,    24,    25,    26,    27,    -1,
+      29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
+      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,
+      59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    91,    92,    93,    -1,    -1,    -1,    -1,    98,
+      99,    -1,   101,   102,    11,    -1,    13,    14,    15,    16,
+      17,    18,    19,    -1,    -1,    -1,    23,    24,    25,    26,
+      27,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
+      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,    55,    56,
+      57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,
+      67,    68,    69,    70,    71,    -1,    54,    -1,    -1,    -1,
+      -1,    -1,    79,    61,    62,    63,    64,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,
+      -1,    98,    99,    81,    82,   102,    84,    85,    86,    87,
+      88,    89,    90,    -1,    -1,    -1,    54,    95,    96,    97,
+      -1,    -1,   100,    61,    62,    63,    64,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    91,    92,    93,    -1,    -1,    -1,    -1,    98,    99,
-      -1,   101,   102,    11,    -1,    13,    14,    15,    16,    17,
-      18,    19,    -1,    -1,    -1,    23,    24,    25,    26,    27,
-      -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    53,    -1,    55,    56,    57,
-      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,    -1,
-      98,    99,    -1,   101,   102,    11,    -1,    13,    14,    15,
-      16,    17,    18,    19,    -1,    -1,    -1,    23,    24,    25,
-      26,    27,    -1,    29,    30,    31,    32,    33,    34,    -1,
-      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
-      66,    67,    68,    69,    70,    71,    -1,    54,    -1,    -1,
-      -1,    -1,    -1,    79,    61,    62,    63,    64,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,    -1,
-      -1,    -1,    98,    99,    -1,    82,   102,    84,    85,    86,
-      87,    88,    89,    90,    -1,    -1,    -1,    -1,    95,    96,
-      97,    -1,    -1,   100
+      -1,    -1,    -1,    -1,    82,    -1,    84,    85,    86,    87,
+      88,    89,    90,    -1,    -1,    -1,    -1,    95,    96,    97,
+      -1,    -1,   100
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1053,33 +1063,34 @@ static const yytype_uint8 yystos[] =
       76,    77,    78,    80,     9,    11,   102,    54,    61,    62,
       63,    64,    81,    82,    84,    85,    86,    87,    88,    89,
       90,    95,    96,    97,   100,   102,     9,    11,     9,    11,
-       9,     9,   114,   140,   141,    23,   138,   102,   102,   102,
-     102,    70,   102,   164,   102,   102,   112,    48,   129,    20,
-      42,    43,    44,    45,    49,    51,   120,   121,   119,    12,
-     160,   102,   102,   146,   101,   112,    26,   142,   101,   101,
-     146,   161,   169,   147,   102,   102,    10,    20,   160,   101,
-     146,    72,   144,    11,   101,   146,   146,   146,   156,   146,
-     146,   101,   146,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,     9,    11,
-      24,   102,   150,   164,   101,   146,   146,   146,   146,   146,
-     146,   146,   117,    23,   137,   138,    23,   123,   114,   114,
-     114,   114,   114,   114,   102,   114,   114,   112,   146,   133,
-     146,   146,   146,   146,   146,   161,   147,    12,   149,    72,
-     143,   101,   101,   146,   101,   146,   101,   146,    10,   101,
-      26,   146,    11,    20,    12,   101,    83,   146,   146,   101,
-     146,   102,   101,    20,    12,    20,    12,    20,    20,    10,
-      21,   113,   122,     9,    20,    23,   132,   146,   133,   134,
-     146,   133,   136,   162,   164,   127,   131,   134,   135,   146,
-     114,   134,   134,   101,   101,   160,    26,   112,   101,   101,
-     101,    12,   146,    10,   156,    20,    12,   101,   161,    10,
-      10,    10,    10,   114,   142,   114,    23,   101,   101,   101,
-     101,   102,   101,    20,   134,   101,   101,    12,    10,   101,
-      20,   143,   124,   160,   130,   130,     9,   115,   115,   134,
-     115,   132,   101,   115,   115,    74,    20,   112,   145,   117,
-      20,   115,   115,   116,    46,    47,   128,   128,   101,   129,
-      20,   115,   118,    10,   129,   129,   117,   115,   102,   115,
-     130,   129,    20,    26,   125,    10,   134,   129,   135,    22,
-      73,   126,   101,   101,   117,   115,   115,    74,   128
+       9,    11,     9,   114,   140,   141,    23,   138,   102,   102,
+     102,   102,    70,   102,   164,   102,   102,   112,    48,   129,
+      20,    42,    43,    44,    45,    49,    51,   120,   121,   119,
+      12,   160,   102,   102,   146,   101,   112,    26,   142,   101,
+     101,   146,   161,   169,   147,   102,   102,    10,    20,   160,
+     101,   146,    72,   144,    11,   101,   146,   146,   146,   156,
+     146,   146,   101,   146,   156,   156,   156,   156,   156,   156,
+     156,   156,   156,   156,   156,   156,   156,   156,   156,     9,
+      11,    24,   102,   150,   164,   101,   146,   146,   146,   146,
+     146,   146,   146,   146,   117,    23,   137,   138,    23,   123,
+     114,   114,   114,   114,   114,   114,   102,   114,   114,   112,
+     146,   133,   146,   146,   146,   146,   146,   161,   147,    12,
+     149,    72,   143,   101,   101,   146,   101,   146,   101,   146,
+      10,   101,    26,   146,    11,    20,    12,   101,    83,   146,
+     146,   101,   146,   102,   101,    20,    12,    20,    12,    20,
+      12,    20,    10,    21,   113,   122,     9,    20,    23,   132,
+     146,   133,   134,   146,   133,   136,   162,   164,   127,   131,
+     134,   135,   146,   114,   134,   134,   101,   101,   160,    26,
+     112,   101,   101,   101,    12,   146,    10,   156,    20,    12,
+     101,   161,    10,    10,    10,    10,   114,   142,   114,    23,
+     101,   101,   101,   101,   102,   101,    20,   134,   101,   101,
+      12,    10,   101,    20,   143,   124,   160,   130,   130,     9,
+     115,   115,   134,   115,   132,   101,   115,   115,    74,    20,
+     112,   145,   117,    20,   115,   115,   116,    46,    47,   128,
+     128,   101,   129,    20,   115,   118,    10,   129,   129,   117,
+     115,   102,   115,   130,   129,    20,    26,   125,    10,   134,
+     129,   135,    22,    73,   126,   101,   101,   117,   115,   115,
+      74,   128
 };
 
 typedef enum {
@@ -1117,6 +1128,6 @@ static const toketypes yy_type_tab[] =
 };
 
 /* Generated from:
- * 48446ab3e028756e1df8ac7ff4e2967381f754ac8cf39430af8bf83b446076e0 perly.y
+ * 1c6010b3d1651d4fc7cbfc329723c507767b4230ac920ae0ffde8f344f4a0ab4 perly.y
  * 5c9d2a0262457fe9b70073fc8ad6c188f812f38ad57712b7e2f53daa01b297cc regen_perly.pl
  * ex: set ro: */
diff --git a/perly.y b/perly.y
index cf11a99..accc95d 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -1204,6 +1204,15 @@ term     :       termbinop
                          TOKEN_GETMAD($2,$$,'[');
                          TOKEN_GETMAD($4,$$,']');
                        }
+       |       hsh '[' expr ']'                     /* array key/value slice */
+                       { $$ = op_prepend_elem(OP_KVASLICE,
+                               newOP(OP_PUSHMARK, 0),
+                                   newLISTOP(OP_KVASLICE, 0,
+                                       list($3),
+                                       ref(oopsAV($1), OP_KVASLICE)));
+                         TOKEN_GETMAD($2,$$,'[');
+                         TOKEN_GETMAD($4,$$,']');
+                       }
        |       ary '{' expr ';' '}'                 /* @hash{@keys} */
                        { $$ = op_prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
diff --git a/pp.c b/pp.c
index 470ebd1..2dd0fe8 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -4350,6 +4350,50 @@ PP(pp_aslice)
     RETURN;
 }
 
+PP(pp_kvaslice)
+{
+    dVAR; dSP; dMARK;
+    AV *const av = MUTABLE_AV(POPs);
+    I32 lval = (PL_op->op_flags & OPf_MOD);
+    I32 items = SP - MARK;
+
+    if (PL_op->op_private & OPpMAYBE_LVSUB) {
+       const I32 flags = is_lvalue_sub();
+       if (flags) {
+           if (!(flags & OPpENTERSUB_INARGS))
+              Perl_croak(aTHX_ "Can't modify index/value array slice in list assignment");
+          lval = flags;
+       }
+    }
+
+    MEXTEND(SP,items);
+    while (items > 1) {
+       *(MARK+items*2-1) = *(MARK+items);
+       items--;
+    }
+    items = SP-MARK;
+    SP += items;
+
+    while (++MARK <= SP) {
+        SV **svp;
+
+       svp = av_fetch(av, SvIV(*MARK), lval);
+        if (lval) {
+            if (!svp || !*svp || *svp == &PL_sv_undef) {
+                DIE(aTHX_ PL_no_aelem, SvIV(*MARK));
+            }
+           *MARK = sv_mortalcopy(*MARK);
+        }
+       *++MARK = svp ? *svp : &PL_sv_undef;
+    }
+    if (GIMME != G_ARRAY) {
+       MARK = SP - items*2;
+       *++MARK = items > 0 ? *SP : &PL_sv_undef;
+       SP = MARK;
+    }
+    RETURN;
+}
+
 /* Smart dereferencing for keys, values and each */
 PP(pp_rkeys)
 {
index 1ede6ff..73ff532 100644 (file)
@@ -123,6 +123,7 @@ PERL_CALLCONV OP *Perl_pp_introcv(pTHX);
 PERL_CALLCONV OP *Perl_pp_ioctl(pTHX);
 PERL_CALLCONV OP *Perl_pp_iter(pTHX);
 PERL_CALLCONV OP *Perl_pp_join(pTHX);
+PERL_CALLCONV OP *Perl_pp_kvaslice(pTHX);
 PERL_CALLCONV OP *Perl_pp_kvhslice(pTHX);
 PERL_CALLCONV OP *Perl_pp_last(pTHX);
 PERL_CALLCONV OP *Perl_pp_lc(pTHX);
index 61c0de5..84d9792 100644 (file)
@@ -217,6 +217,7 @@ aelemfast   constant array element  ck_null         s$      A S
 aelemfast_lex  constant lexical array element  ck_null         d0      A S
 aelem          array element           ck_null         s2      A S
 aslice         array slice             ck_null         m@      A L
+kvaslice       index/value array slice ck_null         m@      A L
 
 aeach          each on array           ck_each         %       A
 akeys          keys on array           ck_each         t%      A
diff --git a/toke.c b/toke.c
index a405e89..4690771 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -5815,6 +5815,9 @@ Perl_yylex(pTHX)
            PREREF('%');
        }
        if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
+           if (*s == '[')
+               PL_tokenbuf[0] = '@';
+
            /* Warn about % where they meant $. */
            if (*s == '[' || *s == '{') {
                if (ckWARN(WARN_SYNTAX)) {